@effect-app/cli 1.23.1 → 1.23.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,246 +1,475 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- /* eslint-disable @typescript-eslint/no-unsafe-argument */
3
- import cp from "child_process";
4
- import fs from "fs";
5
- import w from "node-watch";
6
- import path from "path";
7
- import readline from "readline/promises";
8
- import { sync } from "./sync.js";
9
- function askQuestion(query) {
10
- const rl = readline.createInterface({
11
- input: process.stdin,
12
- output: process.stdout
1
+ /* eslint-disable no-constant-binary-expression */
2
+ /* eslint-disable no-empty-pattern */
3
+ // import necessary modules from the libraries
4
+ import { Args, Command, Options, Prompt } from "@effect/cli";
5
+ import { Command as NodeCommand, FileSystem, Path } from "@effect/platform";
6
+ import { NodeContext, NodeRuntime } from "@effect/platform-node";
7
+ import { Effect, identity, Stream } from "effect";
8
+ import { ExtractExportMappingsService } from "./extract.js";
9
+ import { packages } from "./shared.js";
10
+ Effect
11
+ .fn("effa-cli")(function* () {
12
+ const fs = yield* FileSystem.FileSystem;
13
+ const path = yield* Path.Path;
14
+ const extractExportMappings = yield* ExtractExportMappingsService;
15
+ /**
16
+ * Executes a shell command using Node.js Command API with inherited stdio streams.
17
+ * The command is run through the system shell (/bin/sh) for proper command parsing.
18
+ *
19
+ * @param cmd - The shell command to execute
20
+ * @param cwd - Optional working directory to execute the command in
21
+ * @returns An Effect that succeeds with the exit code or fails with a PlatformError
22
+ */
23
+ const runNodeCommand = (cmd, cwd) => NodeCommand
24
+ .make("sh", "-c", cmd)
25
+ .pipe(NodeCommand.stdout("inherit"), NodeCommand.stderr("inherit"), cwd ? NodeCommand.workingDirectory(cwd) : identity, NodeCommand.exitCode);
26
+ /**
27
+ * Executes a bash script file using Node.js Command API with inherited stdio streams.
28
+ * The script file is executed directly through the shell (/bin/sh).
29
+ *
30
+ * @param file - The path to the bash script file to execute
31
+ * @param cwd - Optional working directory to execute the script in
32
+ * @returns An Effect that succeeds with the output or fails with a PlatformError
33
+ */
34
+ // const runBashFile = (file: string, cwd?: string) =>
35
+ // NodeCommand
36
+ // .make("sh", file)
37
+ // .pipe(
38
+ // NodeCommand.stdout("inherit"),
39
+ // NodeCommand.stderr("inherit"),
40
+ // cwd ? NodeCommand.workingDirectory(cwd) : identity,
41
+ // NodeCommand.string
42
+ // )
43
+ /**
44
+ * Creates a file if it doesn't exist or updates the access and modification times of an existing file.
45
+ * This is the effectful equivalent of the Unix `touch` command.
46
+ *
47
+ * @param path - The path to the file to touch
48
+ * @returns An Effect that succeeds with void or fails with a FileSystem error
49
+ */
50
+ const touch = Effect.fn("touch")(function* (path) {
51
+ const time = new Date();
52
+ yield* fs.utimes(path, time, time).pipe(Effect.catchTag("SystemError", (err) => err.reason === "NotFound"
53
+ ? fs.writeFileString(path, "")
54
+ : Effect.fail(err)));
13
55
  });
14
- return rl.question(query);
15
- }
16
- const _cmd = process.argv[2];
17
- const supportedCommands = [
18
- "watch",
19
- "index",
20
- "index-multi",
21
- "packagejson",
22
- "packagejson-target",
23
- "packagejson-packages",
24
- "link",
25
- "unlink",
26
- "sync",
27
- "ncu:effect",
28
- "ncu:effect-app"
29
- ];
30
- if (!supportedCommands.includes(_cmd)) {
31
- console.log("unknown command: ", _cmd, "supported commands: ", supportedCommands.join(", "));
32
- process.exit(1);
33
- }
34
- const cmd = _cmd;
35
- const debug = process.argv.includes("--debug");
36
- function touch(path) {
37
- const time = new Date();
38
- try {
39
- fs.utimesSync(path, time, time);
40
- }
41
- catch (err) {
42
- fs.closeSync(fs.openSync(path, "w"));
43
- }
44
- }
45
- function* monitorIndexes_(path) {
46
- yield monitorChildIndexes(path);
47
- const indexFile = path + "/index.ts";
48
- if (fs.existsSync(indexFile)) {
49
- yield monitorRootIndexes(path, indexFile);
50
- }
51
- }
52
- function monitorIndexes(path) {
53
- return [...monitorIndexes_(path)];
54
- }
55
- function monitorChildIndexes(path) {
56
- return w.default(path, { recursive: true }, (evt, path) => {
57
- const pathParts = path.split("/");
58
- const isController = pathParts[pathParts.length - 1]?.toLowerCase().includes(".controllers.");
59
- if (!isController)
60
- return;
61
- let i = 1;
62
- const r = pathParts.toReversed();
63
- while (i < r.length) {
64
- const files = ["controllers.ts", "routes.ts"]
65
- .map((f) => [...pathParts.slice(0, pathParts.length - i), f].join("/"))
66
- .filter((f) => fs.existsSync(f));
67
- if (files.length) {
68
- if (debug) {
69
- console.log("change!", evt, path, files);
56
+ /**
57
+ * Updates effect-app packages to their latest versions using npm-check-updates.
58
+ * Runs both at workspace root and recursively in all workspace packages.
59
+ */
60
+ const updateEffectAppPackages = Effect.fn("effa-cli.ue.updateEffectAppPackages")(function* () {
61
+ const filters = ["effect-app", "@effect-app/*"];
62
+ for (const filter of filters) {
63
+ yield* runNodeCommand(`pnpm exec ncu -u --filter "${filter}"`);
64
+ yield* runNodeCommand(`pnpm -r exec ncu -u --filter "${filter}"`);
65
+ }
66
+ })();
67
+ /**
68
+ * Updates Effect ecosystem packages to their latest versions using npm-check-updates.
69
+ * Covers core Effect packages, Effect ecosystem packages, and Effect Atom packages.
70
+ * Runs both at workspace root and recursively in all workspace packages.
71
+ */
72
+ const updateEffectPackages = Effect.fn("effa-cli.ue.updateEffectPackages")(function* () {
73
+ const effectFilters = ["effect", "@effect/*", "@effect-atom/*"];
74
+ for (const filter of effectFilters) {
75
+ yield* runNodeCommand(`pnpm exec ncu -u --filter "${filter}"`);
76
+ yield* runNodeCommand(`pnpm -r exec ncu -u --filter "${filter}"`);
77
+ }
78
+ })();
79
+ /**
80
+ * Links local effect-app packages by adding file resolutions to package.json.
81
+ * Updates the package.json with file: protocol paths pointing to the local effect-app-libs directory,
82
+ * then runs pnpm install to apply the changes.
83
+ *
84
+ * @param effectAppLibsPath - Path to the local effect-app-libs directory
85
+ * @returns An Effect that succeeds when linking is complete
86
+ */
87
+ const linkPackages = Effect.fnUntraced(function* (effectAppLibsPath) {
88
+ yield* Effect.log("Linking local effect-app packages...");
89
+ const packageJsonPath = "./package.json";
90
+ const packageJsonContent = yield* fs.readFileString(packageJsonPath);
91
+ const pj = JSON.parse(packageJsonContent);
92
+ const resolutions = {
93
+ ...pj.resolutions,
94
+ "@effect-app/eslint-codegen-model": "file:" + effectAppLibsPath + "/packages/eslint-codegen-model",
95
+ "effect-app": "file:" + effectAppLibsPath + "/packages/effect-app",
96
+ "@effect-app/infra": "file:" + effectAppLibsPath + "/packages/infra",
97
+ "@effect-app/vue": "file:" + effectAppLibsPath + "/packages/vue",
98
+ "@effect-app/vue-components": "file:" + effectAppLibsPath + "/packages/vue-components",
99
+ ...packages.reduce((acc, p) => ({ ...acc, [p]: `file:${effectAppLibsPath}/node_modules/${p}` }), {})
100
+ };
101
+ pj.resolutions = resolutions;
102
+ yield* fs.writeFileString(packageJsonPath, JSON.stringify(pj, null, 2));
103
+ yield* Effect.log("Updated package.json with local file resolutions");
104
+ yield* runNodeCommand("pnpm i");
105
+ yield* Effect.log("Successfully linked local packages");
106
+ });
107
+ /**
108
+ * Unlinks local effect-app packages by removing file resolutions from package.json.
109
+ * Filters out all effect-app related file: protocol resolutions from package.json,
110
+ * then runs pnpm install to restore registry packages.
111
+ *
112
+ * @returns An Effect that succeeds when unlinking is complete
113
+ */
114
+ const unlinkPackages = Effect.fnUntraced(function* () {
115
+ yield* Effect.log("Unlinking local effect-app packages...");
116
+ const packageJsonPath = "./package.json";
117
+ const packageJsonContent = yield* fs.readFileString(packageJsonPath);
118
+ const pj = JSON.parse(packageJsonContent);
119
+ const filteredResolutions = Object.entries(pj.resolutions).reduce((acc, [k, v]) => {
120
+ if (k.startsWith("@effect-app/") || k === "effect-app" || packages.includes(k))
121
+ return acc;
122
+ acc[k] = v;
123
+ return acc;
124
+ }, {});
125
+ pj.resolutions = filteredResolutions;
126
+ yield* fs.writeFileString(packageJsonPath, JSON.stringify(pj, null, 2));
127
+ yield* Effect.log("Removed effect-app file resolutions from package.json");
128
+ yield* runNodeCommand("pnpm i");
129
+ yield* Effect.log("Successfully unlinked local packages");
130
+ })();
131
+ /**
132
+ * Monitors controller files for changes and runs eslint on related controllers.ts/routes.ts files.
133
+ * Watches for .controllers. files and triggers eslint fixes on parent directory's controller files.
134
+ *
135
+ * @param watchPath - The path to watch for controller changes
136
+ * @param debug - Whether to enable debug logging
137
+ * @returns An Effect that sets up controller file monitoring
138
+ */
139
+ const monitorChildIndexes = Effect.fn("effa-cli.index-multi.monitorChildIndexes")(function* (watchPath, debug) {
140
+ const fileSystem = yield* FileSystem.FileSystem;
141
+ if (debug) {
142
+ yield* Effect.logInfo(`Starting controller monitoring for: ${watchPath}`);
143
+ }
144
+ const watchStream = fileSystem.watch(watchPath, { recursive: true });
145
+ yield* watchStream.pipe(Stream.runForEach(Effect.fn("effa-cli.monitorChildIndexes.handleEvent")(function* (event) {
146
+ const pathParts = event.path.split("/");
147
+ const fileName = pathParts[pathParts.length - 1];
148
+ const isController = fileName?.toLowerCase().includes(".controllers.");
149
+ if (!isController)
150
+ return;
151
+ let i = 1;
152
+ const reversedParts = pathParts.toReversed();
153
+ while (i < reversedParts.length) {
154
+ const candidateFiles = ["controllers.ts", "routes.ts"]
155
+ .map((f) => [...pathParts.slice(0, pathParts.length - i), f].join("/"));
156
+ const existingFiles = [];
157
+ for (const file of candidateFiles) {
158
+ const exists = yield* fileSystem.exists(file);
159
+ if (exists)
160
+ existingFiles.push(file);
161
+ }
162
+ if (existingFiles.length > 0) {
163
+ if (debug) {
164
+ yield* Effect.logInfo(`Controller change detected: ${event.path}, fixing files: ${existingFiles.join(", ")}`);
165
+ }
166
+ const eslintArgs = existingFiles.map((f) => `"../${f}"`).join(" ");
167
+ yield* runNodeCommand(`cd api && pnpm eslint --fix ${eslintArgs}`);
168
+ break;
70
169
  }
71
- cp.execSync(`cd api && pnpm eslint --fix ${files.map((_) => `"../${_}"`).join(" ")}`);
72
- break;
170
+ i++;
171
+ }
172
+ })));
173
+ });
174
+ /**
175
+ * Monitors a directory for changes and runs eslint on the specified index file.
176
+ * Triggers eslint fixes when any file in the directory changes (except the index file itself).
177
+ *
178
+ * @param watchPath - The path to watch for changes
179
+ * @param indexFile - The index file to run eslint on when changes occur
180
+ * @param debug - Whether to enable debug logging
181
+ * @returns An Effect that sets up root index monitoring
182
+ */
183
+ const monitorRootIndexes = Effect.fn("effa-cli.index-multi.monitorRootIndexes")(function* (watchPath, indexFile, debug) {
184
+ const fileSystem = yield* FileSystem.FileSystem;
185
+ if (debug) {
186
+ yield* Effect.logInfo(`Starting root index monitoring for: ${watchPath} -> ${indexFile}`);
187
+ }
188
+ const watchStream = fileSystem.watch(watchPath);
189
+ yield* watchStream.pipe(Stream.runForEach(Effect.fn("effa-cli.index-multi.monitorRootIndexes.handleEvent")(function* (event) {
190
+ if (event.path.endsWith(indexFile))
191
+ return;
192
+ if (debug) {
193
+ yield* Effect.logInfo(`Root change detected: ${event.path}, fixing: ${indexFile}`);
194
+ }
195
+ yield* runNodeCommand(`pnpm eslint --fix "${indexFile}"`);
196
+ })));
197
+ });
198
+ /**
199
+ * Sets up comprehensive index monitoring for a given path.
200
+ * Combines both child controller monitoring and root index monitoring.
201
+ *
202
+ * @param watchPath - The path to monitor
203
+ * @param debug - Whether to enable debug logging
204
+ * @returns An Effect that sets up all index monitoring for the path
205
+ */
206
+ const monitorIndexes = Effect.fn("effa-cli.index-multi.monitorIndexes")(function* (watchPath, debug) {
207
+ const fileSystem = yield* FileSystem.FileSystem;
208
+ if (debug) {
209
+ yield* Effect.logInfo(`Setting up index monitoring for path: ${watchPath}`);
210
+ }
211
+ const indexFile = watchPath + "/index.ts";
212
+ const monitors = [monitorChildIndexes(watchPath, debug)];
213
+ if (yield* fileSystem.exists(indexFile)) {
214
+ monitors.push(monitorRootIndexes(watchPath, indexFile, debug));
215
+ }
216
+ else {
217
+ yield* Effect.logInfo(`Index file ${indexFile} does not exist`);
218
+ }
219
+ if (debug) {
220
+ yield* Effect.logInfo(`Starting ${monitors.length} monitor(s) for ${watchPath}`);
221
+ }
222
+ yield* Effect.all(monitors, { concurrency: monitors.length });
223
+ });
224
+ /**
225
+ * Watches directories for file changes and updates tsconfig.json and vite.config.ts accordingly.
226
+ * Monitors API resources and models directories for changes using Effect's native file watching.
227
+ *
228
+ * @returns An Effect that sets up file watching streams
229
+ */
230
+ const watcher = Effect.fn("watch")(function* (debug) {
231
+ yield* Effect.log("Watch API resources and models for changes");
232
+ const dirs = ["../api/src/resources", "../api/src/models"];
233
+ const viteConfigFile = "./vite.config.ts";
234
+ const fileSystem = yield* FileSystem.FileSystem;
235
+ const viteConfigExists = yield* fileSystem.exists(viteConfigFile);
236
+ if (debug) {
237
+ yield* Effect.logInfo("watcher debug mode is enabled");
238
+ }
239
+ // validate directories and filter out non-existing ones
240
+ const existingDirs = [];
241
+ for (const dir of dirs) {
242
+ const dirExists = yield* fileSystem.exists(dir);
243
+ if (dirExists) {
244
+ existingDirs.push(dir);
73
245
  }
74
- i++;
246
+ else {
247
+ yield* Effect.logWarning(`Directory ${dir} does not exist - skipping`);
248
+ }
249
+ }
250
+ if (existingDirs.length === 0) {
251
+ return yield* Effect.logWarning("No directories to watch - exiting");
75
252
  }
253
+ // start watching all existing directories concurrently
254
+ const watchStreams = existingDirs.map((dir) => Effect.gen(function* () {
255
+ if (debug) {
256
+ yield* Effect.logInfo(`Starting to watch directory: ${dir}`);
257
+ }
258
+ const files = [];
259
+ const watchStream = fileSystem.watch(dir, { recursive: true });
260
+ yield* watchStream.pipe(Stream.runForEach(Effect.fn("effa-cli.watch.handleEvent")(function* (event) {
261
+ if (debug) {
262
+ yield* Effect.logInfo(`File ${event._tag.toLowerCase()}: ${event.path}`);
263
+ }
264
+ // touch tsconfig.json on any file change
265
+ yield* touch("./tsconfig.json");
266
+ if (debug) {
267
+ yield* Effect.logInfo("Updated tsconfig.json");
268
+ }
269
+ // touch vite config only on file updates (not creates/deletes)
270
+ if (viteConfigExists
271
+ && event._tag === "Update"
272
+ && !files.includes(event.path)) {
273
+ yield* touch(viteConfigFile);
274
+ if (debug) {
275
+ yield* Effect.logInfo("Updated vite.config.ts");
276
+ }
277
+ files.push(event.path);
278
+ }
279
+ })));
280
+ }));
281
+ // run all watch streams concurrently
282
+ yield* Effect.all(watchStreams, { concurrency: existingDirs.length });
76
283
  });
77
- }
78
- function monitorRootIndexes(path, indexFile) {
79
- return w.default(path, (_, path) => {
80
- if (path.endsWith(indexFile))
284
+ /**
285
+ * Updates a package.json file with generated exports mappings for TypeScript modules.
286
+ * Scans TypeScript source files and creates export entries that map module paths
287
+ * to their compiled JavaScript and TypeScript declaration files.
288
+ *
289
+ * @param startDir - The starting directory path for resolving relative paths
290
+ * @param p - The package directory path to process
291
+ * @param levels - Optional depth limit for export filtering (0 = no limit)
292
+ * @returns An Effect that succeeds when the package.json is updated
293
+ */
294
+ const packagejsonUpdater = Effect.fn("effa-cli.packagejsonUpdater")(function* (startDir, p, levels = 0) {
295
+ yield* Effect.log(`Generating exports for ${p}`);
296
+ const exportMappings = yield* extractExportMappings(path.resolve(startDir, p));
297
+ // if exportMappings is empty skip export generation
298
+ if (exportMappings === "") {
299
+ yield* Effect.log(`No src directory found for ${p}, skipping export generation`);
81
300
  return;
82
- // const dirName = pathParts[pathParts.length - 2]!
83
- // console.log("change!", evt, path, dirName, indexFile)
84
- cp.execSync(`pnpm eslint --fix "${indexFile}"`);
301
+ }
302
+ const sortedExportEntries = JSON.parse(`{ ${exportMappings} }`);
303
+ const filteredExportEntries = levels
304
+ ? Object
305
+ .keys(sortedExportEntries)
306
+ // filter exports by directory depth - only include paths up to specified levels deep
307
+ .filter((_) => _.split("/").length <= (levels + 1 /* `./` */))
308
+ .reduce((prev, cur) => ({ ...prev, [cur]: sortedExportEntries[cur] }), {})
309
+ : sortedExportEntries;
310
+ const packageExports = {
311
+ ...((yield* fs.exists(p + "/src/index.ts"))
312
+ && {
313
+ ".": {
314
+ "types": "./dist/index.d.ts",
315
+ "default": "./dist/index.js"
316
+ }
317
+ }),
318
+ ...Object
319
+ .keys(filteredExportEntries)
320
+ .reduce((prev, cur) => ({
321
+ ...prev,
322
+ // exclude index files and internal modules from package exports:
323
+ // - skip "./index" to avoid conflicts with the main "." export
324
+ // - skip "/internal/" paths to keep internal modules private
325
+ ...cur !== "./index" && !cur.includes("/internal/") && { [cur]: filteredExportEntries[cur] }
326
+ }), {})
327
+ };
328
+ const pkgJson = JSON.parse(yield* fs.readFileString(p + "/package.json", "utf-8"));
329
+ pkgJson.exports = packageExports;
330
+ yield* Effect.log(`Writing updated package.json for ${p}`);
331
+ return yield* fs.writeFileString(p + "/package.json", JSON.stringify(pkgJson, null, 2));
85
332
  });
86
- }
87
- // TODO: cache, don't do things when it already existed before, so only file is updated, not created.
88
- const startDir = process.cwd();
89
- function packagejson(p, levels = 0) {
90
- const curDir = process.cwd();
91
- let r = "";
92
- // TODO: no chdir!
93
- try {
94
- process.chdir(path.resolve(startDir, p));
95
- r = cp.execSync(`sh ${p === "." ? "../.." : startDir}/scripts/extract.sh`, { encoding: "utf-8" });
96
- }
97
- finally {
98
- process.chdir(curDir);
99
- }
100
- const s = r.split("\n").sort((a, b) => a < b ? -1 : 1).join("\n");
101
- const items = JSON.parse(`{${s.substring(0, s.length - 1)} }`);
102
- const pkg = JSON.parse(fs.readFileSync(p + "/package.json", "utf-8"));
103
- const t = levels
104
- ? Object
105
- .keys(items)
106
- .filter((_) => _.split("/").length <= (levels + 1 /* `./` */))
107
- .reduce((prev, cur) => {
108
- prev[cur] = items[cur];
109
- return prev;
110
- }, {})
111
- : items;
112
- const exps = {
113
- ...(fs.existsSync(p + "/src/index.ts")
114
- ? {
115
- ".": {
116
- "types": "./dist/index.d.ts",
117
- "default": "./dist/index.js"
333
+ /*
334
+ * CLI
335
+ */
336
+ const EffectAppLibsPath = Args
337
+ .directory({
338
+ exists: "yes",
339
+ name: "effect-app-libs-path"
340
+ })
341
+ .pipe(Args.withDefault("../../effect-app/libs"), Args.withDescription("Path to the effect-app-libs directory"));
342
+ const link = Command
343
+ .make("link", { effectAppLibsPath: EffectAppLibsPath }, Effect.fn("effa-cli.link")(function* ({ effectAppLibsPath }) {
344
+ return yield* linkPackages(effectAppLibsPath);
345
+ }))
346
+ .pipe(Command.withDescription("Link local effect-app packages using file resolutions"));
347
+ const unlink = Command
348
+ .make("unlink", {}, Effect.fn("effa-cli.unlink")(function* ({}) {
349
+ return yield* unlinkPackages;
350
+ }))
351
+ .pipe(Command.withDescription("Remove effect-app file resolutions and restore npm registry packages"));
352
+ const ue = Command
353
+ .make("ue", {}, Effect.fn("effa-cli.ue")(function* ({}) {
354
+ yield* Effect.log("Update effect-app and/or effect packages");
355
+ const prompted = yield* Prompt.select({
356
+ choices: [
357
+ {
358
+ title: "effect-app",
359
+ description: "Update only effect-app packages",
360
+ value: "effect-app"
361
+ },
362
+ {
363
+ title: "effect",
364
+ description: "Update only effect packages",
365
+ value: "effect"
366
+ },
367
+ {
368
+ title: "both",
369
+ description: "Update both effect-app and effect packages",
370
+ value: "both"
118
371
  }
372
+ ],
373
+ message: "Select an option"
374
+ });
375
+ switch (prompted) {
376
+ case "effect-app":
377
+ return yield* updateEffectAppPackages.pipe(Effect.andThen(runNodeCommand("pnpm i")));
378
+ case "effect":
379
+ return yield* updateEffectPackages.pipe(Effect.andThen(runNodeCommand("pnpm i")));
380
+ case "both":
381
+ return yield* updateEffectPackages.pipe(Effect.andThen(updateEffectAppPackages), Effect.andThen(runNodeCommand("pnpm i")));
382
+ }
383
+ }))
384
+ .pipe(Command.withDescription("Update effect-app and/or effect packages"));
385
+ const DebugOption = Options.boolean("debug").pipe(Options.withAlias("d"), Options.withDescription("Enable debug logging"));
386
+ const watch = Command
387
+ .make("watch", { debug: DebugOption }, Effect.fn("effa-cli.watch")(function* ({ debug }) {
388
+ return yield* watcher(debug);
389
+ }))
390
+ .pipe(Command.withDescription("Watch API resources and models for changes and update tsconfig.json and vite.config.ts accordingly"));
391
+ const indexMulti = Command
392
+ .make("index-multi", { debug: DebugOption }, Effect.fn("effa-cli.index-multi")(function* ({ debug }) {
393
+ yield* Effect.log("Starting multi-index monitoring");
394
+ const dirs = ["./api/src"];
395
+ const fileSystem = yield* FileSystem.FileSystem;
396
+ const existingDirs = [];
397
+ for (const dir of dirs) {
398
+ const dirExists = yield* fileSystem.exists(dir);
399
+ if (dirExists) {
400
+ existingDirs.push(dir);
401
+ }
402
+ else {
403
+ yield* Effect.logWarning(`Directory ${dir} does not exist - skipping`);
119
404
  }
120
- : undefined),
121
- ...Object
122
- .keys(t)
123
- .reduce((prev, cur) => {
124
- if (cur !== "./index" && !cur.includes("/internal/"))
125
- prev[cur] = t[cur];
126
- return prev;
127
- }, {})
128
- // ...pkg.name === "effect-app" ? {
129
- // "./types/awesome": { "types": "./types/awesome.d.ts" }
130
- // } : {},
131
- };
132
- pkg.exports = exps;
133
- fs.writeFileSync(p + "/package.json", JSON.stringify(pkg, null, 2));
134
- }
135
- function monitorPackagejson(path, levels = 0) {
136
- packagejson(path, levels);
137
- w.default(path + "/src", { recursive: true }, (_, __) => {
138
- packagejson(path, levels);
405
+ }
406
+ if (existingDirs.length === 0) {
407
+ return yield* Effect.logWarning("No directories to monitor - exiting");
408
+ }
409
+ const monitors = existingDirs.map((dir) => monitorIndexes(dir, debug));
410
+ yield* Effect.all(monitors, { concurrency: monitors.length });
411
+ }))
412
+ .pipe(Command.withDescription("Monitor multiple directories for index and controller file changes"));
413
+ const packagejson = Command
414
+ .make("packagejson", {}, Effect.fn("effa-cli.packagejson")(function* ({}) {
415
+ // https://nodejs.org/api/path.html#pathresolvepaths
416
+ const startDir = path.resolve();
417
+ return yield* packagejsonUpdater(startDir, ".");
418
+ }))
419
+ .pipe(Command.withDescription("Generate and update root-level package.json exports mappings for TypeScript modules"));
420
+ const packagejsonPackages = Command
421
+ .make("packagejson-packages", {}, Effect.fn("effa-cli.packagejson-packages")(function* ({}) {
422
+ // https://nodejs.org/api/path.html#pathresolvepaths
423
+ const startDir = path.resolve();
424
+ const packagesDir = path.join(startDir, "packages");
425
+ const packagesExists = yield* fs.exists(packagesDir);
426
+ if (!packagesExists) {
427
+ return yield* Effect.logWarning("No packages directory found");
428
+ }
429
+ // get all package directories
430
+ const packageDirs = yield* fs.readDirectory(packagesDir);
431
+ const validPackages = [];
432
+ // filter packages that have package.json and src directory
433
+ for (const packageName of packageDirs) {
434
+ const packagePath = path.join(packagesDir, packageName);
435
+ const packageJsonExists = yield* fs.exists(path.join(packagePath, "package.json"));
436
+ const srcExists = yield* fs.exists(path.join(packagePath, "src"));
437
+ const shouldExclude = false
438
+ || packageName.endsWith("eslint-codegen-model")
439
+ || packageName.endsWith("vue-components");
440
+ if (packageJsonExists && srcExists && !shouldExclude) {
441
+ validPackages.push(packagePath);
442
+ }
443
+ }
444
+ if (validPackages.length === 0) {
445
+ return yield* Effect.logWarning("No valid packages found to update");
446
+ }
447
+ yield* Effect.log(`Found ${validPackages.length} packages to update`);
448
+ // update each package sequentially
449
+ yield* Effect.all(validPackages.map((packagePath) => Effect.gen(function* () {
450
+ const relativePackagePath = path.relative(startDir, packagePath);
451
+ yield* Effect.log(`Updating ${relativePackagePath}`);
452
+ return yield* packagejsonUpdater(startDir, relativePackagePath);
453
+ })));
454
+ yield* Effect.log("All packages updated successfully");
455
+ }))
456
+ .pipe(Command.withDescription("Generate and update package.json exports mappings for all packages in monorepo"));
457
+ // configure CLI
458
+ const cli = Command.run(Command
459
+ .make("effa")
460
+ .pipe(Command.withSubcommands([
461
+ ue,
462
+ link,
463
+ unlink,
464
+ watch,
465
+ indexMulti,
466
+ packagejson,
467
+ packagejsonPackages
468
+ ])), {
469
+ name: "Effect-App CLI by jfet97 ❤️",
470
+ version: "v1.0.0"
139
471
  });
140
- }
141
- function updateEffectAppPackages() {
142
- const filters = ["effect-app", "@effect-app/*"];
143
- for (const filter of filters) {
144
- cp.execSync(`pnpm exec ncu -u --filter "${filter}"`, { stdio: "inherit" });
145
- cp.execSync(`pnpm -r exec ncu -u --filter "${filter}"`, { stdio: "inherit" });
146
- }
147
- }
148
- function updateEffectPackages() {
149
- const effectFilters = ["effect", "@effect/*", "@effect-atom/*"];
150
- for (const filter of effectFilters) {
151
- cp.execSync(`pnpm exec ncu -u --filter "${filter}"`, { stdio: "inherit" });
152
- cp.execSync(`pnpm -r exec ncu -u --filter "${filter}"`, { stdio: "inherit" });
153
- }
154
- updateEffectAppPackages();
155
- }
156
- ;
157
- (async () => {
158
- let cmds = process.argv.slice(3).filter((_) => _ !== "--debug");
159
- switch (cmd) {
160
- case "link":
161
- await import("./link.js");
162
- break;
163
- case "unlink":
164
- await import("./unlink.js");
165
- break;
166
- case "watch": {
167
- const dirs = ["../api/src/resources", "../api/src/models"];
168
- const viteConfigFile = "./vite.config.ts";
169
- const viteConfigExists = fs.existsSync(viteConfigFile);
170
- dirs.forEach((d) => {
171
- if (fs.existsSync(d)) {
172
- const files = [];
173
- w.default(d, { recursive: true }, (t, f) => {
174
- // console.log("change!", d)
175
- touch("./tsconfig.json");
176
- if (viteConfigExists && t === "update" && !files.includes(f)) {
177
- // TODO: only on new files
178
- touch(viteConfigFile);
179
- files.push(f);
180
- }
181
- });
182
- }
183
- });
184
- break;
185
- }
186
- case "index-multi": {
187
- ;
188
- [
189
- "./api/src"
190
- ]
191
- .filter((_) => fs.existsSync(_))
192
- .forEach(monitorIndexes);
193
- break;
194
- }
195
- case "index": {
196
- monitorIndexes("./src");
197
- break;
198
- }
199
- case "packagejson": {
200
- monitorPackagejson(".");
201
- break;
202
- }
203
- case "packagejson-target": {
204
- const target = process.argv[3];
205
- target.split(",").forEach((_) => monitorPackagejson(_, 1));
206
- cmds = process.argv.slice(4);
207
- break;
208
- }
209
- case "packagejson-packages": {
210
- fs
211
- .readdirSync(startDir + "/packages")
212
- .map((_) => startDir + "/packages/" + _)
213
- .filter((_) => fs.existsSync(_ + "/package.json")
214
- && fs.existsSync(_ + "/src")
215
- && !_.endsWith("eslint-codegen-model")
216
- && !_.endsWith("vue-components"))
217
- .forEach((_) => monitorPackagejson(_));
218
- break;
219
- }
220
- case "sync": {
221
- console.log("Sync all snippets?");
222
- await askQuestion("Are you sure you want to sync snippets");
223
- await sync();
224
- return process.exit(0);
225
- }
226
- case "ncu:effect": {
227
- console.log("Updating effect & effect-app dependencies...");
228
- updateEffectPackages();
229
- cp.execSync("pnpm i", { stdio: "inherit" });
230
- break;
231
- }
232
- case "ncu:effect-app": {
233
- console.log("Updating effect-app dependencies...");
234
- updateEffectAppPackages();
235
- cp.execSync("pnpm i", { stdio: "inherit" });
236
- break;
237
- }
238
- }
239
- if (cmds.length) {
240
- const p = cp.spawn(cmds[0], cmds.slice(1), { stdio: "inherit" });
241
- p.on("close", (code) => process.exit(code ?? 0));
242
- p.on("exit", (code) => process.exit(code ?? 0));
243
- p.on("disconnect", () => process.exit(1));
244
- }
245
- })();
246
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELDBEQUEwRDtBQUMxRCxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDOUIsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBQ25CLE9BQU8sQ0FBQyxNQUFNLFlBQVksQ0FBQTtBQUMxQixPQUFPLElBQUksTUFBTSxNQUFNLENBQUE7QUFDdkIsT0FBTyxRQUFRLE1BQU0sbUJBQW1CLENBQUE7QUFDeEMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUVoQyxTQUFTLFdBQVcsQ0FBQyxLQUFhO0lBQ2hDLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUM7UUFDbEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1FBQ3BCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtLQUN2QixDQUFDLENBQUE7SUFFRixPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDM0IsQ0FBQztBQUVELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDNUIsTUFBTSxpQkFBaUIsR0FBRztJQUN4QixPQUFPO0lBQ1AsT0FBTztJQUNQLGFBQWE7SUFDYixhQUFhO0lBQ2Isb0JBQW9CO0lBQ3BCLHNCQUFzQjtJQUN0QixNQUFNO0lBQ04sUUFBUTtJQUNSLE1BQU07SUFDTixZQUFZO0lBQ1osZ0JBQWdCO0NBQ1IsQ0FBQTtBQUNWLElBQ0UsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBVyxDQUFDLEVBQ3hDLENBQUM7SUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUM1RixPQUFP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
472
+ return yield* cli(process.argv);
473
+ })()
474
+ .pipe(Effect.provide(NodeContext.layer), NodeRuntime.runMain);
475
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0RBQWtEO0FBQ2xELHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUM1RCxPQUFPLEVBQUUsT0FBTyxJQUFJLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUNoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDakQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzNELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFdEMsTUFBTTtLQUNILEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDdkIsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQTtJQUN2QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFBO0lBQzdCLE1BQU0scUJBQXFCLEdBQUcsS0FBSyxDQUFDLENBQUMsNEJBQTRCLENBQUE7SUFFakU7Ozs7Ozs7T0FPRztJQUNILE1BQU0sY0FBYyxHQUFHLENBQUMsR0FBVyxFQUFFLEdBQVksRUFBRSxFQUFFLENBQ25ELFdBQVc7U0FDUixJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUM7U0FDckIsSUFBSSxDQUNILFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQzdCLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVB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