@effect-app/cli 1.23.4 → 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 +7 -0
- package/dist/index.js +110 -97
- package/package.json +1 -1
- package/src/index.ts +232 -163
package/CHANGELOG.md
CHANGED
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
|
|
@@ -86,7 +86,7 @@ Effect
|
|
|
86
86
|
* @returns An Effect that succeeds when linking is complete
|
|
87
87
|
*/
|
|
88
88
|
const linkPackages = Effect.fnUntraced(function* (effectAppLibsPath) {
|
|
89
|
-
yield* Effect.
|
|
89
|
+
yield* Effect.logInfo("Linking local effect-app packages...");
|
|
90
90
|
const packageJsonPath = "./package.json";
|
|
91
91
|
const packageJsonContent = yield* fs.readFileString(packageJsonPath);
|
|
92
92
|
const pj = JSON.parse(packageJsonContent);
|
|
@@ -101,9 +101,9 @@ Effect
|
|
|
101
101
|
};
|
|
102
102
|
pj.resolutions = resolutions;
|
|
103
103
|
yield* fs.writeFileString(packageJsonPath, JSON.stringify(pj, null, 2));
|
|
104
|
-
yield* Effect.
|
|
104
|
+
yield* Effect.logInfo("Updated package.json with local file resolutions");
|
|
105
105
|
yield* runNodeCommand("pnpm i");
|
|
106
|
-
yield* Effect.
|
|
106
|
+
yield* Effect.logInfo("Successfully linked local packages");
|
|
107
107
|
});
|
|
108
108
|
/**
|
|
109
109
|
* Unlinks local effect-app packages by removing file resolutions from package.json.
|
|
@@ -113,7 +113,7 @@ Effect
|
|
|
113
113
|
* @returns An Effect that succeeds when unlinking is complete
|
|
114
114
|
*/
|
|
115
115
|
const unlinkPackages = Effect.fnUntraced(function* () {
|
|
116
|
-
yield* Effect.
|
|
116
|
+
yield* Effect.logInfo("Unlinking local effect-app packages...");
|
|
117
117
|
const packageJsonPath = "./package.json";
|
|
118
118
|
const packageJsonContent = yield* fs.readFileString(packageJsonPath);
|
|
119
119
|
const pj = JSON.parse(packageJsonContent);
|
|
@@ -125,9 +125,9 @@ Effect
|
|
|
125
125
|
}, {});
|
|
126
126
|
pj.resolutions = filteredResolutions;
|
|
127
127
|
yield* fs.writeFileString(packageJsonPath, JSON.stringify(pj, null, 2));
|
|
128
|
-
yield* Effect.
|
|
128
|
+
yield* Effect.logInfo("Removed effect-app file resolutions from package.json");
|
|
129
129
|
yield* runNodeCommand("pnpm i");
|
|
130
|
-
yield* Effect.
|
|
130
|
+
yield* Effect.logInfo("Successfully unlinked local packages");
|
|
131
131
|
})();
|
|
132
132
|
/**
|
|
133
133
|
* Monitors controller files for changes and runs eslint on related controllers.ts/routes.ts files.
|
|
@@ -137,12 +137,9 @@ Effect
|
|
|
137
137
|
* @param debug - Whether to enable debug logging
|
|
138
138
|
* @returns An Effect that sets up controller file monitoring
|
|
139
139
|
*/
|
|
140
|
-
const monitorChildIndexes = Effect.fn("effa-cli.index-multi.monitorChildIndexes")(function* (watchPath
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
yield* Effect.logInfo(`Starting controller monitoring for: ${watchPath}`);
|
|
144
|
-
}
|
|
145
|
-
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 });
|
|
146
143
|
yield* watchStream
|
|
147
144
|
.pipe(Stream.runForEach(Effect.fn("effa-cli.monitorChildIndexes.handleEvent")(function* (event) {
|
|
148
145
|
const pathParts = event.path.split("/");
|
|
@@ -157,14 +154,12 @@ Effect
|
|
|
157
154
|
.map((f) => [...pathParts.slice(0, pathParts.length - i), f].join("/"));
|
|
158
155
|
const existingFiles = [];
|
|
159
156
|
for (const file of candidateFiles) {
|
|
160
|
-
const exists = yield*
|
|
157
|
+
const exists = yield* fs.exists(file);
|
|
161
158
|
if (exists)
|
|
162
159
|
existingFiles.push(file);
|
|
163
160
|
}
|
|
164
161
|
if (existingFiles.length > 0) {
|
|
165
|
-
|
|
166
|
-
yield* Effect.logInfo(`Controller change detected: ${event.path}, fixing files: ${existingFiles.join(", ")}`);
|
|
167
|
-
}
|
|
162
|
+
yield* Effect.logInfo(`Controller change detected: ${event.path}, fixing files: ${existingFiles.join(", ")}`);
|
|
168
163
|
const eslintArgs = existingFiles.map((f) => `"../${f}"`).join(" ");
|
|
169
164
|
yield* runNodeCommand(`cd api && pnpm eslint --fix ${eslintArgs}`);
|
|
170
165
|
break;
|
|
@@ -183,19 +178,14 @@ Effect
|
|
|
183
178
|
* @param debug - Whether to enable debug logging
|
|
184
179
|
* @returns An Effect that sets up root index monitoring
|
|
185
180
|
*/
|
|
186
|
-
const monitorRootIndexes = Effect.fn("effa-cli.index-multi.monitorRootIndexes")(function* (watchPath, indexFile
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
yield* Effect.logInfo(`Starting root index monitoring for: ${watchPath} -> ${indexFile}`);
|
|
190
|
-
}
|
|
191
|
-
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);
|
|
192
184
|
yield* watchStream
|
|
193
185
|
.pipe(Stream.runForEach(Effect.fn("effa-cli.index-multi.monitorRootIndexes.handleEvent")(function* (event) {
|
|
194
186
|
if (event.path.endsWith(indexFile))
|
|
195
187
|
return;
|
|
196
|
-
|
|
197
|
-
yield* Effect.logInfo(`Root change detected: ${event.path}, fixing: ${indexFile}`);
|
|
198
|
-
}
|
|
188
|
+
yield* Effect.logInfo(`Root change detected: ${event.path}, fixing: ${indexFile}`);
|
|
199
189
|
yield* runNodeCommand(`pnpm eslint --fix "${indexFile}"`);
|
|
200
190
|
})))
|
|
201
191
|
.pipe(Effect.andThen(Effect.addFinalizer(() => Effect.logInfo(`Stopped monitoring root indexes in: ${watchPath} -> ${indexFile}`))), Effect.forkScoped);
|
|
@@ -208,22 +198,17 @@ Effect
|
|
|
208
198
|
* @param debug - Whether to enable debug logging
|
|
209
199
|
* @returns An Effect that sets up all index monitoring for the path
|
|
210
200
|
*/
|
|
211
|
-
const monitorIndexes = Effect.fn("effa-cli.index-multi.monitorIndexes")(function* (watchPath
|
|
212
|
-
|
|
213
|
-
if (debug) {
|
|
214
|
-
yield* Effect.logInfo(`Setting up index monitoring for path: ${watchPath}`);
|
|
215
|
-
}
|
|
201
|
+
const monitorIndexes = Effect.fn("effa-cli.index-multi.monitorIndexes")(function* (watchPath) {
|
|
202
|
+
yield* Effect.logInfo(`Setting up index monitoring for path: ${watchPath}`);
|
|
216
203
|
const indexFile = watchPath + "/index.ts";
|
|
217
|
-
const monitors = [monitorChildIndexes(watchPath
|
|
218
|
-
if (yield*
|
|
219
|
-
monitors.push(monitorRootIndexes(watchPath, indexFile
|
|
204
|
+
const monitors = [monitorChildIndexes(watchPath)];
|
|
205
|
+
if (yield* fs.exists(indexFile)) {
|
|
206
|
+
monitors.push(monitorRootIndexes(watchPath, indexFile));
|
|
220
207
|
}
|
|
221
208
|
else {
|
|
222
209
|
yield* Effect.logInfo(`Index file ${indexFile} does not exist`);
|
|
223
210
|
}
|
|
224
|
-
|
|
225
|
-
yield* Effect.logInfo(`Starting ${monitors.length} monitor(s) for ${watchPath}`);
|
|
226
|
-
}
|
|
211
|
+
yield* Effect.logInfo(`Starting ${monitors.length} monitor(s) for ${watchPath}`);
|
|
227
212
|
yield* Effect.all(monitors, { concurrency: monitors.length });
|
|
228
213
|
});
|
|
229
214
|
/**
|
|
@@ -232,19 +217,16 @@ Effect
|
|
|
232
217
|
*
|
|
233
218
|
* @returns An Effect that sets up file watching streams
|
|
234
219
|
*/
|
|
235
|
-
const watcher = Effect.fn("watch")(function* (
|
|
236
|
-
yield* Effect.
|
|
220
|
+
const watcher = Effect.fn("watch")(function* () {
|
|
221
|
+
yield* Effect.logInfo("Watch API resources and models for changes");
|
|
237
222
|
const dirs = ["../api/src/resources", "../api/src/models"];
|
|
238
223
|
const viteConfigFile = "./vite.config.ts";
|
|
239
|
-
const
|
|
240
|
-
|
|
241
|
-
if (debug) {
|
|
242
|
-
yield* Effect.logInfo("watcher debug mode is enabled");
|
|
243
|
-
}
|
|
224
|
+
const viteConfigExists = yield* fs.exists(viteConfigFile);
|
|
225
|
+
yield* Effect.logInfo("watcher debug mode is enabled");
|
|
244
226
|
// validate directories and filter out non-existing ones
|
|
245
227
|
const existingDirs = [];
|
|
246
228
|
for (const dir of dirs) {
|
|
247
|
-
const dirExists = yield*
|
|
229
|
+
const dirExists = yield* fs.exists(dir);
|
|
248
230
|
if (dirExists) {
|
|
249
231
|
existingDirs.push(dir);
|
|
250
232
|
}
|
|
@@ -252,40 +234,29 @@ Effect
|
|
|
252
234
|
yield* Effect.logWarning(`Directory ${dir} does not exist - skipping`);
|
|
253
235
|
}
|
|
254
236
|
}
|
|
255
|
-
if (existingDirs.length === 0) {
|
|
256
|
-
return yield* Effect.logWarning("No directories to watch - exiting");
|
|
257
|
-
}
|
|
258
237
|
// start watching all existing directories concurrently
|
|
259
238
|
const watchStreams = existingDirs.map((dir) => Effect.gen(function* () {
|
|
260
|
-
|
|
261
|
-
yield* Effect.logInfo(`Starting to watch directory: ${dir}`);
|
|
262
|
-
}
|
|
239
|
+
yield* Effect.logInfo(`Starting to watch directory: ${dir}`);
|
|
263
240
|
const files = [];
|
|
264
|
-
const watchStream =
|
|
241
|
+
const watchStream = fs.watch(dir, { recursive: true });
|
|
265
242
|
yield* watchStream
|
|
266
243
|
.pipe(Stream.runForEach(Effect.fn("effa-cli.watch.handleEvent")(function* (event) {
|
|
267
|
-
|
|
268
|
-
yield* Effect.logInfo(`File ${event._tag.toLowerCase()}: ${event.path}`);
|
|
269
|
-
}
|
|
244
|
+
yield* Effect.logInfo(`File ${event._tag.toLowerCase()}: ${event.path}`);
|
|
270
245
|
// touch tsconfig.json on any file change
|
|
271
246
|
yield* touch("./tsconfig.json");
|
|
272
|
-
|
|
273
|
-
yield* Effect.logInfo("Updated tsconfig.json");
|
|
274
|
-
}
|
|
247
|
+
yield* Effect.logInfo("Updated tsconfig.json");
|
|
275
248
|
// touch vite config only on file updates (not creates/deletes)
|
|
276
249
|
if (viteConfigExists
|
|
277
250
|
&& event._tag === "Update"
|
|
278
251
|
&& !files.includes(event.path)) {
|
|
279
252
|
yield* touch(viteConfigFile);
|
|
280
|
-
|
|
281
|
-
yield* Effect.logInfo("Updated vite.config.ts");
|
|
282
|
-
}
|
|
253
|
+
yield* Effect.logInfo("Updated vite.config.ts");
|
|
283
254
|
files.push(event.path);
|
|
284
255
|
}
|
|
285
256
|
})))
|
|
286
257
|
.pipe(Effect.andThen(Effect.addFinalizer(() => Effect.logInfo(`Stopped watching directory: ${dir}`))), Effect.forkScoped);
|
|
287
258
|
// also start monitoring indexes in the watched directory
|
|
288
|
-
yield* monitorIndexes(dir
|
|
259
|
+
yield* monitorIndexes(dir);
|
|
289
260
|
}));
|
|
290
261
|
// run all watch streams concurrently
|
|
291
262
|
yield* Effect.all(watchStreams, { concurrency: existingDirs.length });
|
|
@@ -301,11 +272,11 @@ Effect
|
|
|
301
272
|
* @returns An Effect that succeeds when the package.json is updated
|
|
302
273
|
*/
|
|
303
274
|
const packagejsonUpdater = Effect.fn("effa-cli.packagejsonUpdater")(function* (startDir, p, levels = 0) {
|
|
304
|
-
yield* Effect.
|
|
275
|
+
yield* Effect.logInfo(`Generating exports for ${p}`);
|
|
305
276
|
const exportMappings = yield* extractExportMappings(path.resolve(startDir, p));
|
|
306
277
|
// if exportMappings is empty skip export generation
|
|
307
278
|
if (exportMappings === "") {
|
|
308
|
-
yield* Effect.
|
|
279
|
+
yield* Effect.logInfo(`No src directory found for ${p}, skipping export generation`);
|
|
309
280
|
return;
|
|
310
281
|
}
|
|
311
282
|
const sortedExportEntries = JSON.parse(`{ ${exportMappings} }`);
|
|
@@ -336,12 +307,66 @@ Effect
|
|
|
336
307
|
};
|
|
337
308
|
const pkgJson = JSON.parse(yield* fs.readFileString(p + "/package.json", "utf-8"));
|
|
338
309
|
pkgJson.exports = packageExports;
|
|
339
|
-
yield* Effect.
|
|
310
|
+
yield* Effect.logInfo(`Writing updated package.json for ${p}`);
|
|
340
311
|
return yield* fs.writeFileString(p + "/package.json", JSON.stringify(pkgJson, null, 2));
|
|
341
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
|
+
});
|
|
342
333
|
/*
|
|
343
334
|
* CLI
|
|
344
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(_)));
|
|
345
370
|
const EffectAppLibsPath = Args
|
|
346
371
|
.directory({
|
|
347
372
|
exists: "yes",
|
|
@@ -360,7 +385,7 @@ Effect
|
|
|
360
385
|
.pipe(Command.withDescription("Remove effect-app file resolutions and restore npm registry packages"));
|
|
361
386
|
const ue = Command
|
|
362
387
|
.make("ue", {}, Effect.fn("effa-cli.ue")(function* ({}) {
|
|
363
|
-
yield* Effect.
|
|
388
|
+
yield* Effect.logInfo("Update effect-app and/or effect packages");
|
|
364
389
|
const prompted = yield* Prompt.select({
|
|
365
390
|
choices: [
|
|
366
391
|
{
|
|
@@ -391,20 +416,16 @@ Effect
|
|
|
391
416
|
}
|
|
392
417
|
}))
|
|
393
418
|
.pipe(Command.withDescription("Update effect-app and/or effect packages"));
|
|
394
|
-
const
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
return yield* watcher(debug);
|
|
398
|
-
}))
|
|
419
|
+
const watch = makeCommandWithWrap("watch", {}, Effect.fn("effa-cli.watch")(function* ({}) {
|
|
420
|
+
return yield* watcher();
|
|
421
|
+
}), "Stopped watching API resources and models")
|
|
399
422
|
.pipe(Command.withDescription("Watch API resources and models for changes and update tsconfig.json and vite.config.ts accordingly"));
|
|
400
|
-
const indexMulti =
|
|
401
|
-
|
|
402
|
-
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");
|
|
403
425
|
const dirs = ["./api/src"];
|
|
404
|
-
const fileSystem = yield* FileSystem.FileSystem;
|
|
405
426
|
const existingDirs = [];
|
|
406
427
|
for (const dir of dirs) {
|
|
407
|
-
const dirExists = yield*
|
|
428
|
+
const dirExists = yield* fs.exists(dir);
|
|
408
429
|
if (dirExists) {
|
|
409
430
|
existingDirs.push(dir);
|
|
410
431
|
}
|
|
@@ -412,22 +433,17 @@ Effect
|
|
|
412
433
|
yield* Effect.logWarning(`Directory ${dir} does not exist - skipping`);
|
|
413
434
|
}
|
|
414
435
|
}
|
|
415
|
-
|
|
416
|
-
return yield* Effect.logWarning("No directories to monitor - exiting");
|
|
417
|
-
}
|
|
418
|
-
const monitors = existingDirs.map((dir) => monitorIndexes(dir, debug));
|
|
436
|
+
const monitors = existingDirs.map((dir) => monitorIndexes(dir));
|
|
419
437
|
yield* Effect.all(monitors, { concurrency: monitors.length });
|
|
420
|
-
}))
|
|
438
|
+
}), "Stopped multi-index monitoring")
|
|
421
439
|
.pipe(Command.withDescription("Monitor multiple directories for index and controller file changes"));
|
|
422
|
-
const packagejson =
|
|
423
|
-
.make("packagejson", {}, Effect.fn("effa-cli.packagejson")(function* ({}) {
|
|
440
|
+
const packagejson = makeCommandWithWrap("packagejson", {}, Effect.fn("effa-cli.packagejson")(function* ({}) {
|
|
424
441
|
// https://nodejs.org/api/path.html#pathresolvepaths
|
|
425
442
|
const startDir = path.resolve();
|
|
426
|
-
return yield*
|
|
427
|
-
}))
|
|
443
|
+
return yield* monitorPackageJson(startDir, ".");
|
|
444
|
+
}), "Stopped monitoring root package.json exports")
|
|
428
445
|
.pipe(Command.withDescription("Generate and update root-level package.json exports mappings for TypeScript modules"));
|
|
429
|
-
const packagejsonPackages =
|
|
430
|
-
.make("packagejson-packages", {}, Effect.fn("effa-cli.packagejson-packages")(function* ({}) {
|
|
446
|
+
const packagejsonPackages = makeCommandWithWrap("packagejson-packages", {}, Effect.fn("effa-cli.packagejson-packages")(function* ({}) {
|
|
431
447
|
// https://nodejs.org/api/path.html#pathresolvepaths
|
|
432
448
|
const startDir = path.resolve();
|
|
433
449
|
const packagesDir = path.join(startDir, "packages");
|
|
@@ -450,18 +466,15 @@ Effect
|
|
|
450
466
|
validPackages.push(packagePath);
|
|
451
467
|
}
|
|
452
468
|
}
|
|
453
|
-
|
|
454
|
-
return yield* Effect.logWarning("No valid packages found to update");
|
|
455
|
-
}
|
|
456
|
-
yield* Effect.log(`Found ${validPackages.length} packages to update`);
|
|
469
|
+
yield* Effect.logInfo(`Found ${validPackages.length} packages to update`);
|
|
457
470
|
// update each package sequentially
|
|
458
|
-
yield* Effect.all(validPackages.map(
|
|
471
|
+
yield* Effect.all(validPackages.map(Effect.fnUntraced(function* (packagePath) {
|
|
459
472
|
const relativePackagePath = path.relative(startDir, packagePath);
|
|
460
|
-
yield* Effect.
|
|
461
|
-
return yield*
|
|
473
|
+
yield* Effect.logInfo(`Updating ${relativePackagePath}`);
|
|
474
|
+
return yield* monitorPackageJson(startDir, relativePackagePath);
|
|
462
475
|
})));
|
|
463
|
-
yield* Effect.
|
|
464
|
-
}))
|
|
476
|
+
yield* Effect.logInfo("All packages updated successfully");
|
|
477
|
+
}), "Stopped monitoring package.json exports for all packages")
|
|
465
478
|
.pipe(Command.withDescription("Generate and update package.json exports mappings for all packages in monorepo"));
|
|
466
479
|
// configure CLI
|
|
467
480
|
const cli = Command.run(Command
|
|
@@ -481,4 +494,4 @@ Effect
|
|
|
481
494
|
return yield* cli(process.argv);
|
|
482
495
|
})()
|
|
483
496
|
.pipe(Effect.scoped, Effect.provide(NodeContext.layer), NodeRuntime.runMain);
|
|
484
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0RBQWtEO0FBQ2xELHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUM1RCxPQUFPLEVBQUUsT0FBTyxJQUFJLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUNoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDakQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzNELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFdEMsTUFBTTtLQUNILEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDdkIsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQTtJQUN2QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFBO0lBQzdCLE1BQU0scUJBQXFCLEdBQUcsS0FBSyxDQUFDLENBQUMsNEJBQTRCLENBQUE7SUFFakUsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQTtJQUU5RTs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFXLEVBQUUsR0FBWSxFQUFFLEVBQUUsQ0FDbkQsV0FBVztTQUNSLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxF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
|
|
497
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0RBQWtEO0FBQ2xELHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUM1RCxPQUFPLEVBQUUsT0FBTyxJQUFJLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUloRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFjLE1BQU0sUUFBUSxDQUFBO0FBQ3JFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUMzRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRXRDLE1BQU07S0FDSCxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUE7SUFDdkMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQTtJQUM3QixNQUFNLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxDQUFDLDRCQUE0QixDQUFBO0lBRWpFLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUE7SUFFOUU7Ozs7Ozs7T0FPRztJQUNILE1BQU0sY0FBYyxHQUFHLENBQUMsR0FBVyxFQUFFLEdBQVksRUFBRSxFQUFFLENBQ25ELFdBQVc7U0FDUixJQUFJLENBQUMsSUFBSSxF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
|
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
|
|
|
@@ -104,7 +107,7 @@ Effect
|
|
|
104
107
|
* @returns An Effect that succeeds when linking is complete
|
|
105
108
|
*/
|
|
106
109
|
const linkPackages = Effect.fnUntraced(function*(effectAppLibsPath: string) {
|
|
107
|
-
yield* Effect.
|
|
110
|
+
yield* Effect.logInfo("Linking local effect-app packages...")
|
|
108
111
|
|
|
109
112
|
const packageJsonPath = "./package.json"
|
|
110
113
|
const packageJsonContent = yield* fs.readFileString(packageJsonPath)
|
|
@@ -123,11 +126,11 @@ Effect
|
|
|
123
126
|
pj.resolutions = resolutions
|
|
124
127
|
|
|
125
128
|
yield* fs.writeFileString(packageJsonPath, JSON.stringify(pj, null, 2))
|
|
126
|
-
yield* Effect.
|
|
129
|
+
yield* Effect.logInfo("Updated package.json with local file resolutions")
|
|
127
130
|
|
|
128
131
|
yield* runNodeCommand("pnpm i")
|
|
129
132
|
|
|
130
|
-
yield* Effect.
|
|
133
|
+
yield* Effect.logInfo("Successfully linked local packages")
|
|
131
134
|
})
|
|
132
135
|
|
|
133
136
|
/**
|
|
@@ -138,7 +141,7 @@ Effect
|
|
|
138
141
|
* @returns An Effect that succeeds when unlinking is complete
|
|
139
142
|
*/
|
|
140
143
|
const unlinkPackages = Effect.fnUntraced(function*() {
|
|
141
|
-
yield* Effect.
|
|
144
|
+
yield* Effect.logInfo("Unlinking local effect-app packages...")
|
|
142
145
|
|
|
143
146
|
const packageJsonPath = "./package.json"
|
|
144
147
|
const packageJsonContent = yield* fs.readFileString(packageJsonPath)
|
|
@@ -156,10 +159,10 @@ Effect
|
|
|
156
159
|
pj.resolutions = filteredResolutions
|
|
157
160
|
|
|
158
161
|
yield* fs.writeFileString(packageJsonPath, JSON.stringify(pj, null, 2))
|
|
159
|
-
yield* Effect.
|
|
162
|
+
yield* Effect.logInfo("Removed effect-app file resolutions from package.json")
|
|
160
163
|
|
|
161
164
|
yield* runNodeCommand("pnpm i")
|
|
162
|
-
yield* Effect.
|
|
165
|
+
yield* Effect.logInfo("Successfully unlinked local packages")
|
|
163
166
|
})()
|
|
164
167
|
|
|
165
168
|
/**
|
|
@@ -171,14 +174,10 @@ Effect
|
|
|
171
174
|
* @returns An Effect that sets up controller file monitoring
|
|
172
175
|
*/
|
|
173
176
|
const monitorChildIndexes = Effect.fn("effa-cli.index-multi.monitorChildIndexes")(
|
|
174
|
-
function*(watchPath: string
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
if (debug) {
|
|
178
|
-
yield* Effect.logInfo(`Starting controller monitoring for: ${watchPath}`)
|
|
179
|
-
}
|
|
177
|
+
function*(watchPath: string) {
|
|
178
|
+
yield* Effect.logInfo(`Starting controller monitoring for: ${watchPath}`)
|
|
180
179
|
|
|
181
|
-
const watchStream =
|
|
180
|
+
const watchStream = fs.watch(watchPath, { recursive: true })
|
|
182
181
|
|
|
183
182
|
yield* watchStream
|
|
184
183
|
.pipe(
|
|
@@ -199,16 +198,14 @@ Effect
|
|
|
199
198
|
|
|
200
199
|
const existingFiles: string[] = []
|
|
201
200
|
for (const file of candidateFiles) {
|
|
202
|
-
const exists = yield*
|
|
201
|
+
const exists = yield* fs.exists(file)
|
|
203
202
|
if (exists) existingFiles.push(file)
|
|
204
203
|
}
|
|
205
204
|
|
|
206
205
|
if (existingFiles.length > 0) {
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
)
|
|
211
|
-
}
|
|
206
|
+
yield* Effect.logInfo(
|
|
207
|
+
`Controller change detected: ${event.path}, fixing files: ${existingFiles.join(", ")}`
|
|
208
|
+
)
|
|
212
209
|
|
|
213
210
|
const eslintArgs = existingFiles.map((f) => `"../${f}"`).join(" ")
|
|
214
211
|
yield* runNodeCommand(`cd api && pnpm eslint --fix ${eslintArgs}`)
|
|
@@ -238,14 +235,10 @@ Effect
|
|
|
238
235
|
* @returns An Effect that sets up root index monitoring
|
|
239
236
|
*/
|
|
240
237
|
const monitorRootIndexes = Effect.fn("effa-cli.index-multi.monitorRootIndexes")(
|
|
241
|
-
function*(watchPath: string, indexFile: string
|
|
242
|
-
|
|
238
|
+
function*(watchPath: string, indexFile: string) {
|
|
239
|
+
yield* Effect.logInfo(`Starting root index monitoring for: ${watchPath} -> ${indexFile}`)
|
|
243
240
|
|
|
244
|
-
|
|
245
|
-
yield* Effect.logInfo(`Starting root index monitoring for: ${watchPath} -> ${indexFile}`)
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
const watchStream = fileSystem.watch(watchPath)
|
|
241
|
+
const watchStream = fs.watch(watchPath)
|
|
249
242
|
|
|
250
243
|
yield* watchStream
|
|
251
244
|
.pipe(
|
|
@@ -253,9 +246,7 @@ Effect
|
|
|
253
246
|
Effect.fn("effa-cli.index-multi.monitorRootIndexes.handleEvent")(function*(event) {
|
|
254
247
|
if (event.path.endsWith(indexFile)) return
|
|
255
248
|
|
|
256
|
-
|
|
257
|
-
yield* Effect.logInfo(`Root change detected: ${event.path}, fixing: ${indexFile}`)
|
|
258
|
-
}
|
|
249
|
+
yield* Effect.logInfo(`Root change detected: ${event.path}, fixing: ${indexFile}`)
|
|
259
250
|
|
|
260
251
|
yield* runNodeCommand(`pnpm eslint --fix "${indexFile}"`)
|
|
261
252
|
})
|
|
@@ -281,26 +272,20 @@ Effect
|
|
|
281
272
|
* @returns An Effect that sets up all index monitoring for the path
|
|
282
273
|
*/
|
|
283
274
|
const monitorIndexes = Effect.fn("effa-cli.index-multi.monitorIndexes")(
|
|
284
|
-
function*(watchPath: string
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
if (debug) {
|
|
288
|
-
yield* Effect.logInfo(`Setting up index monitoring for path: ${watchPath}`)
|
|
289
|
-
}
|
|
275
|
+
function*(watchPath: string) {
|
|
276
|
+
yield* Effect.logInfo(`Setting up index monitoring for path: ${watchPath}`)
|
|
290
277
|
|
|
291
278
|
const indexFile = watchPath + "/index.ts"
|
|
292
279
|
|
|
293
|
-
const monitors = [monitorChildIndexes(watchPath
|
|
280
|
+
const monitors = [monitorChildIndexes(watchPath)]
|
|
294
281
|
|
|
295
|
-
if (yield*
|
|
296
|
-
monitors.push(monitorRootIndexes(watchPath, indexFile
|
|
282
|
+
if (yield* fs.exists(indexFile)) {
|
|
283
|
+
monitors.push(monitorRootIndexes(watchPath, indexFile))
|
|
297
284
|
} else {
|
|
298
285
|
yield* Effect.logInfo(`Index file ${indexFile} does not exist`)
|
|
299
286
|
}
|
|
300
287
|
|
|
301
|
-
|
|
302
|
-
yield* Effect.logInfo(`Starting ${monitors.length} monitor(s) for ${watchPath}`)
|
|
303
|
-
}
|
|
288
|
+
yield* Effect.logInfo(`Starting ${monitors.length} monitor(s) for ${watchPath}`)
|
|
304
289
|
|
|
305
290
|
yield* Effect.all(monitors, { concurrency: monitors.length })
|
|
306
291
|
}
|
|
@@ -312,23 +297,20 @@ Effect
|
|
|
312
297
|
*
|
|
313
298
|
* @returns An Effect that sets up file watching streams
|
|
314
299
|
*/
|
|
315
|
-
const watcher = Effect.fn("watch")(function*(
|
|
316
|
-
yield* Effect.
|
|
300
|
+
const watcher = Effect.fn("watch")(function*() {
|
|
301
|
+
yield* Effect.logInfo("Watch API resources and models for changes")
|
|
317
302
|
|
|
318
303
|
const dirs = ["../api/src/resources", "../api/src/models"]
|
|
319
304
|
const viteConfigFile = "./vite.config.ts"
|
|
320
|
-
const fileSystem = yield* FileSystem.FileSystem
|
|
321
305
|
|
|
322
|
-
const viteConfigExists = yield*
|
|
306
|
+
const viteConfigExists = yield* fs.exists(viteConfigFile)
|
|
323
307
|
|
|
324
|
-
|
|
325
|
-
yield* Effect.logInfo("watcher debug mode is enabled")
|
|
326
|
-
}
|
|
308
|
+
yield* Effect.logInfo("watcher debug mode is enabled")
|
|
327
309
|
|
|
328
310
|
// validate directories and filter out non-existing ones
|
|
329
311
|
const existingDirs: string[] = []
|
|
330
312
|
for (const dir of dirs) {
|
|
331
|
-
const dirExists = yield*
|
|
313
|
+
const dirExists = yield* fs.exists(dir)
|
|
332
314
|
if (dirExists) {
|
|
333
315
|
existingDirs.push(dir)
|
|
334
316
|
} else {
|
|
@@ -336,33 +318,24 @@ Effect
|
|
|
336
318
|
}
|
|
337
319
|
}
|
|
338
320
|
|
|
339
|
-
if (existingDirs.length === 0) {
|
|
340
|
-
return yield* Effect.logWarning("No directories to watch - exiting")
|
|
341
|
-
}
|
|
342
|
-
|
|
343
321
|
// start watching all existing directories concurrently
|
|
344
322
|
const watchStreams = existingDirs.map((dir) =>
|
|
345
323
|
Effect.gen(function*() {
|
|
346
|
-
|
|
347
|
-
yield* Effect.logInfo(`Starting to watch directory: ${dir}`)
|
|
348
|
-
}
|
|
324
|
+
yield* Effect.logInfo(`Starting to watch directory: ${dir}`)
|
|
349
325
|
|
|
350
326
|
const files: string[] = []
|
|
351
|
-
const watchStream =
|
|
327
|
+
const watchStream = fs.watch(dir, { recursive: true })
|
|
352
328
|
|
|
353
329
|
yield* watchStream
|
|
354
330
|
.pipe(
|
|
355
331
|
Stream.runForEach(
|
|
356
332
|
Effect.fn("effa-cli.watch.handleEvent")(function*(event) {
|
|
357
|
-
|
|
358
|
-
yield* Effect.logInfo(`File ${event._tag.toLowerCase()}: ${event.path}`)
|
|
359
|
-
}
|
|
333
|
+
yield* Effect.logInfo(`File ${event._tag.toLowerCase()}: ${event.path}`)
|
|
360
334
|
|
|
361
335
|
// touch tsconfig.json on any file change
|
|
362
336
|
yield* touch("./tsconfig.json")
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
}
|
|
337
|
+
|
|
338
|
+
yield* Effect.logInfo("Updated tsconfig.json")
|
|
366
339
|
|
|
367
340
|
// touch vite config only on file updates (not creates/deletes)
|
|
368
341
|
if (
|
|
@@ -371,9 +344,9 @@ Effect
|
|
|
371
344
|
&& !files.includes(event.path)
|
|
372
345
|
) {
|
|
373
346
|
yield* touch(viteConfigFile)
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
347
|
+
|
|
348
|
+
yield* Effect.logInfo("Updated vite.config.ts")
|
|
349
|
+
|
|
377
350
|
files.push(event.path)
|
|
378
351
|
}
|
|
379
352
|
})
|
|
@@ -387,7 +360,7 @@ Effect
|
|
|
387
360
|
)
|
|
388
361
|
|
|
389
362
|
// also start monitoring indexes in the watched directory
|
|
390
|
-
yield* monitorIndexes(dir
|
|
363
|
+
yield* monitorIndexes(dir)
|
|
391
364
|
})
|
|
392
365
|
)
|
|
393
366
|
|
|
@@ -407,13 +380,13 @@ Effect
|
|
|
407
380
|
*/
|
|
408
381
|
const packagejsonUpdater = Effect.fn("effa-cli.packagejsonUpdater")(
|
|
409
382
|
function*(startDir: string, p: string, levels = 0) {
|
|
410
|
-
yield* Effect.
|
|
383
|
+
yield* Effect.logInfo(`Generating exports for ${p}`)
|
|
411
384
|
|
|
412
385
|
const exportMappings = yield* extractExportMappings(path.resolve(startDir, p))
|
|
413
386
|
|
|
414
387
|
// if exportMappings is empty skip export generation
|
|
415
388
|
if (exportMappings === "") {
|
|
416
|
-
yield* Effect.
|
|
389
|
+
yield* Effect.logInfo(`No src directory found for ${p}, skipping export generation`)
|
|
417
390
|
return
|
|
418
391
|
}
|
|
419
392
|
|
|
@@ -460,7 +433,7 @@ Effect
|
|
|
460
433
|
const pkgJson = JSON.parse(yield* fs.readFileString(p + "/package.json", "utf-8"))
|
|
461
434
|
pkgJson.exports = packageExports
|
|
462
435
|
|
|
463
|
-
yield* Effect.
|
|
436
|
+
yield* Effect.logInfo(`Writing updated package.json for ${p}`)
|
|
464
437
|
|
|
465
438
|
return yield* fs.writeFileString(
|
|
466
439
|
p + "/package.json",
|
|
@@ -469,10 +442,118 @@ Effect
|
|
|
469
442
|
}
|
|
470
443
|
)
|
|
471
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
|
+
|
|
472
480
|
/*
|
|
473
481
|
* CLI
|
|
474
482
|
*/
|
|
475
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
|
+
|
|
476
557
|
const EffectAppLibsPath = Args
|
|
477
558
|
.directory({
|
|
478
559
|
exists: "yes",
|
|
@@ -508,7 +589,7 @@ Effect
|
|
|
508
589
|
"ue",
|
|
509
590
|
{},
|
|
510
591
|
Effect.fn("effa-cli.ue")(function*({}) {
|
|
511
|
-
yield* Effect.
|
|
592
|
+
yield* Effect.logInfo("Update effect-app and/or effect packages")
|
|
512
593
|
|
|
513
594
|
const prompted = yield* Prompt.select({
|
|
514
595
|
choices: [
|
|
@@ -551,130 +632,118 @@ Effect
|
|
|
551
632
|
)
|
|
552
633
|
.pipe(Command.withDescription("Update effect-app and/or effect packages"))
|
|
553
634
|
|
|
554
|
-
const
|
|
555
|
-
|
|
556
|
-
|
|
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"
|
|
557
642
|
)
|
|
558
|
-
|
|
559
|
-
const watch = Command
|
|
560
|
-
.make(
|
|
561
|
-
"watch",
|
|
562
|
-
{ debug: DebugOption },
|
|
563
|
-
Effect.fn("effa-cli.watch")(function*({ debug }) {
|
|
564
|
-
return yield* watcher(debug)
|
|
565
|
-
})
|
|
566
|
-
)
|
|
567
643
|
.pipe(
|
|
568
644
|
Command.withDescription(
|
|
569
645
|
"Watch API resources and models for changes and update tsconfig.json and vite.config.ts accordingly"
|
|
570
646
|
)
|
|
571
647
|
)
|
|
572
648
|
|
|
573
|
-
const indexMulti =
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
Effect.
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
const
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
} else {
|
|
589
|
-
yield* Effect.logWarning(`Directory ${dir} does not exist - skipping`)
|
|
590
|
-
}
|
|
591
|
-
}
|
|
592
|
-
|
|
593
|
-
if (existingDirs.length === 0) {
|
|
594
|
-
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`)
|
|
595
664
|
}
|
|
665
|
+
}
|
|
596
666
|
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
667
|
+
const monitors = existingDirs.map((dir) => monitorIndexes(dir))
|
|
668
|
+
yield* Effect.all(monitors, { concurrency: monitors.length })
|
|
669
|
+
}),
|
|
670
|
+
"Stopped multi-index monitoring"
|
|
671
|
+
)
|
|
601
672
|
.pipe(
|
|
602
673
|
Command.withDescription(
|
|
603
674
|
"Monitor multiple directories for index and controller file changes"
|
|
604
675
|
)
|
|
605
676
|
)
|
|
606
677
|
|
|
607
|
-
const packagejson =
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
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()
|
|
614
684
|
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
685
|
+
return yield* monitorPackageJson(startDir, ".")
|
|
686
|
+
}),
|
|
687
|
+
"Stopped monitoring root package.json exports"
|
|
688
|
+
)
|
|
618
689
|
.pipe(
|
|
619
690
|
Command.withDescription("Generate and update root-level package.json exports mappings for TypeScript modules")
|
|
620
691
|
)
|
|
621
692
|
|
|
622
|
-
const packagejsonPackages =
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
const startDir = path.resolve()
|
|
629
|
-
|
|
630
|
-
const packagesDir = path.join(startDir, "packages")
|
|
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()
|
|
631
699
|
|
|
632
|
-
|
|
633
|
-
if (!packagesExists) {
|
|
634
|
-
return yield* Effect.logWarning("No packages directory found")
|
|
635
|
-
}
|
|
700
|
+
const packagesDir = path.join(startDir, "packages")
|
|
636
701
|
|
|
637
|
-
|
|
638
|
-
|
|
702
|
+
const packagesExists = yield* fs.exists(packagesDir)
|
|
703
|
+
if (!packagesExists) {
|
|
704
|
+
return yield* Effect.logWarning("No packages directory found")
|
|
705
|
+
}
|
|
639
706
|
|
|
640
|
-
|
|
707
|
+
// get all package directories
|
|
708
|
+
const packageDirs = yield* fs.readDirectory(packagesDir)
|
|
641
709
|
|
|
642
|
-
|
|
643
|
-
for (const packageName of packageDirs) {
|
|
644
|
-
const packagePath = path.join(packagesDir, packageName)
|
|
645
|
-
const packageJsonExists = yield* fs.exists(path.join(packagePath, "package.json"))
|
|
646
|
-
const srcExists = yield* fs.exists(path.join(packagePath, "src"))
|
|
710
|
+
const validPackages: string[] = []
|
|
647
711
|
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
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"))
|
|
651
717
|
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
}
|
|
718
|
+
const shouldExclude = false
|
|
719
|
+
|| packageName.endsWith("eslint-codegen-model")
|
|
720
|
+
|| packageName.endsWith("vue-components")
|
|
656
721
|
|
|
657
|
-
if (
|
|
658
|
-
|
|
722
|
+
if (packageJsonExists && srcExists && !shouldExclude) {
|
|
723
|
+
validPackages.push(packagePath)
|
|
659
724
|
}
|
|
725
|
+
}
|
|
660
726
|
|
|
661
|
-
|
|
727
|
+
yield* Effect.logInfo(`Found ${validPackages.length} packages to update`)
|
|
662
728
|
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
)
|
|
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
|
+
})
|
|
672
737
|
)
|
|
738
|
+
)
|
|
673
739
|
|
|
674
|
-
|
|
675
|
-
|
|
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")
|
|
676
746
|
)
|
|
677
|
-
.pipe(Command.withDescription("Generate and update package.json exports mappings for all packages in monorepo"))
|
|
678
747
|
|
|
679
748
|
// configure CLI
|
|
680
749
|
const cli = Command.run(
|