@effect-app/cli 1.23.0 → 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/old.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=old.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"old.d.ts","sourceRoot":"","sources":["../src/old.ts"],"names":[],"mappings":""}
package/dist/old.js ADDED
@@ -0,0 +1,246 @@
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
13
+ });
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);
70
+ }
71
+ cp.execSync(`cd api && pnpm eslint --fix ${files.map((_) => `"../${_}"`).join(" ")}`);
72
+ break;
73
+ }
74
+ i++;
75
+ }
76
+ });
77
+ }
78
+ function monitorRootIndexes(path, indexFile) {
79
+ return w.default(path, (_, path) => {
80
+ if (path.endsWith(indexFile))
81
+ return;
82
+ // const dirName = pathParts[pathParts.length - 2]!
83
+ // console.log("change!", evt, path, dirName, indexFile)
84
+ cp.execSync(`pnpm eslint --fix "${indexFile}"`);
85
+ });
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"
118
+ }
119
+ }
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);
139
+ });
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2xkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL29sZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsMERBQTBEO0FBQzFELE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUM5QixPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUE7QUFDbkIsT0FBTyxDQUFDLE1BQU0sWUFBWSxDQUFBO0FBQzFCLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUN2QixPQUFPLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRWhDLFNBQVMsV0FBVyxDQUFDLEtBQWE7SUFDaEMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztRQUNsQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7UUFDcEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0tBQ3ZCLENBQUMsQ0FBQTtJQUVGLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUMzQixDQUFDO0FBRUQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUM1QixNQUFNLGlCQUFpQixHQUFHO0lBQ3hCLE9BQU87SUFDUCxPQUFPO0lBQ1AsYUFBYTtJQUNiLGFBQWE7SUFDYixvQkFBb0I7SUFDcEIsc0JBQXNCO0lBQ3RCLE1BQU07SUFDTixRQUFRO0lBQ1IsTUFBTTtJQUNOLFlBQVk7SUFDWixnQkFBZ0I7Q0FDUixDQUFBO0FBQ1YsSUFDRSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFXLENBQUMsRUFDeEMsQ0FBQztJQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQzVGLE9BQU8sQ0FB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect-app/cli",
3
- "version": "1.23.0",
3
+ "version": "1.23.2",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "bin": {
@@ -9,12 +9,14 @@
9
9
  "effect-app-cli": "./bin.js"
10
10
  },
11
11
  "dependencies": {
12
+ "@effect/cli": "^0.69.2",
13
+ "@effect/platform-node": "^0.94.1",
12
14
  "node-watch": "^0.7.4"
13
15
  },
14
16
  "devDependencies": {
15
17
  "@types/node": "~24.2.0",
16
18
  "json5": "^2.2.3",
17
- "typescript": "^5.8.3",
19
+ "typescript": "~5.9.2",
18
20
  "vitest": "^3.2.4"
19
21
  },
20
22
  "typesVersions": {
@@ -29,10 +31,18 @@
29
31
  "types": "./dist/index.d.ts",
30
32
  "default": "./dist/index.js"
31
33
  },
34
+ "./extract": {
35
+ "types": "./dist/extract.d.ts",
36
+ "default": "./dist/extract.js"
37
+ },
32
38
  "./link": {
33
39
  "types": "./dist/link.d.ts",
34
40
  "default": "./dist/link.js"
35
41
  },
42
+ "./old": {
43
+ "types": "./dist/old.d.ts",
44
+ "default": "./dist/old.js"
45
+ },
36
46
  "./shared": {
37
47
  "types": "./dist/shared.d.ts",
38
48
  "default": "./dist/shared.js"
@@ -57,15 +67,15 @@
57
67
  ],
58
68
  "scripts": {
59
69
  "watch": "pnpm build:tsc -w",
60
- "build:tsc": "pnpm clean-dist && tspc --build",
70
+ "build:tsc": "pnpm clean-dist && tsc --build",
61
71
  "build": "pnpm build:tsc",
62
- "watch2": "pnpm clean-dist && NODE_OPTIONS=--max-old-space-size=6144 tspc -w",
72
+ "watch2": "pnpm clean-dist && NODE_OPTIONS=--max-old-space-size=6144 tsc -w",
63
73
  "clean": "rm -rf dist",
64
74
  "clean-dist": "sh ../../scripts/clean-dist.sh",
65
75
  "circular": "pnpm circular:src && pnpm circular:dist",
66
76
  "circular:src": "madge --circular --ts-config ./tsconfig.json --extensions ts ./src",
67
77
  "circular:dist": "madge --circular --extensions js ./dist",
68
- "compile": "NODE_OPTIONS=--max-old-space-size=6144 tspc --noEmit",
78
+ "compile": "NODE_OPTIONS=--max-old-space-size=6144 tsc --noEmit",
69
79
  "lint": "NODE_OPTIONS=--max-old-space-size=6144 ESLINT_TS=1 eslint ./src",
70
80
  "lint:watch": "ESLINT_TS=1 esw -w --changed --clear --ext ts,tsx .",
71
81
  "autofix": "pnpm lint --fix",
package/src/extract.ts ADDED
@@ -0,0 +1,71 @@
1
+ import { type Error as PlatformError, FileSystem, Path } from "@effect/platform"
2
+ import { Array as EffectArray, Effect, Order, pipe } from "effect"
3
+
4
+ /**
5
+ * Generates package.json exports mappings for TypeScript modules
6
+ * This function finds all .ts files in src/ (excluding test files) and generates
7
+ * JSON export entries that map source files to their compiled .js and .d.ts outputs
8
+ *
9
+ * Example output:
10
+ * "./utils/helper": { "types": "./dist/utils/helper.d.ts", "default": "./dist/utils/helper.js" },
11
+ *
12
+ * This allows users to import individual modules instead of the entire package:
13
+ * import { helper } from 'package/utils/helper' instead of 'package'
14
+ */
15
+ export const ExtractExportMappingsService = Effect.fn("effa-cli.extractExportMappings")(function*() {
16
+ const fs = yield* FileSystem.FileSystem
17
+ const path = yield* Path.Path
18
+
19
+ return Effect.fn("effa-cli.extractExportMappings.service")(function*(cwd: string) {
20
+ const findTsFiles = (dir: string): Effect.Effect<string[], PlatformError.PlatformError, never> =>
21
+ Effect.gen(function*() {
22
+ const entries = yield* fs.readDirectory(dir)
23
+
24
+ const results = yield* Effect.all(
25
+ entries.map((entry) =>
26
+ Effect.gen(function*() {
27
+ const fullPath = path.join(dir, entry)
28
+ const stat = yield* fs.stat(fullPath)
29
+
30
+ if (stat.type === "Directory") {
31
+ return yield* findTsFiles(fullPath)
32
+ } else if (entry.endsWith(".ts") && !entry.includes(".test.")) {
33
+ return [fullPath]
34
+ }
35
+ return []
36
+ })
37
+ )
38
+ )
39
+
40
+ return EffectArray.flatten(results)
41
+ })
42
+
43
+ const srcDir = path.join(cwd, "src")
44
+
45
+ // Check if src directory exists
46
+ const srcExists = yield* fs.exists(srcDir)
47
+ if (!srcExists) {
48
+ return ""
49
+ }
50
+
51
+ const tsFiles = yield* findTsFiles(srcDir)
52
+
53
+ const exportMappings = tsFiles.map((filePath) => {
54
+ // Get relative path from src directory (like bash script's cut -c 5-)
55
+ const relativePath = path.relative(srcDir, filePath)
56
+ const exportKey = `./${relativePath.replace(/\.ts$/, "")}`
57
+ const distPath = `./dist/${relativePath.replace(/\.ts$/, ".js")}`
58
+ const typesPath = `./dist/${relativePath.replace(/\.ts$/, ".d.ts")}`
59
+
60
+ return `"${exportKey}": { "types": "${typesPath}", "default": "${distPath}" }`
61
+ })
62
+
63
+ const sortedMappings = pipe(
64
+ exportMappings,
65
+ EffectArray.sort(Order.string),
66
+ EffectArray.join(",\n")
67
+ )
68
+
69
+ return sortedMappings
70
+ })
71
+ })()