@confect/cli 1.0.3 → 2.0.0
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 +9 -0
- package/dist/GroupPath.mjs +2 -2
- package/dist/GroupPath.mjs.map +1 -1
- package/dist/package.mjs +1 -1
- package/dist/services/ConfectDirectory.mjs +2 -2
- package/dist/services/ConfectDirectory.mjs.map +1 -1
- package/dist/services/ConvexDirectory.mjs +2 -2
- package/dist/services/ConvexDirectory.mjs.map +1 -1
- package/dist/services/ProjectRoot.mjs +1 -1
- package/dist/services/ProjectRoot.mjs.map +1 -1
- package/package.json +11 -11
- package/src/GroupPath.ts +8 -7
- package/src/services/ConfectDirectory.ts +4 -3
- package/src/services/ConvexDirectory.ts +4 -3
- package/src/services/ProjectRoot.ts +3 -2
package/CHANGELOG.md
CHANGED
package/dist/GroupPath.mjs
CHANGED
|
@@ -25,7 +25,7 @@ const fromGroupModulePath = (groupModulePath) => Effect.gen(function* () {
|
|
|
25
25
|
const dirSegments = Array.filter(String.split(dir, path.sep), String.isNonEmpty);
|
|
26
26
|
yield* Effect.logDebug(Array.append(dirSegments, name));
|
|
27
27
|
return make(Array.append(dirSegments, name));
|
|
28
|
-
} else return yield*
|
|
28
|
+
} else return yield* new GroupModulePathIsNotATypeScriptFileError({ path: groupModulePath });
|
|
29
29
|
});
|
|
30
30
|
/**
|
|
31
31
|
* Get the module path for a group, relative to the Convex functions directory.
|
|
@@ -42,7 +42,7 @@ const getGroupSpecHelper = (group, remainingPath) => pipe(remainingPath, Array.m
|
|
|
42
42
|
onNonEmpty: (head, tail) => pipe(Record.get(group.groups, head), Option.flatMap((subGroup) => Array.isNonEmptyArray(tail) ? getGroupSpecHelper(subGroup, tail) : Option.some(subGroup)))
|
|
43
43
|
}));
|
|
44
44
|
const toString = (groupPath) => Array.join(groupPath.pathSegments, ".");
|
|
45
|
-
var GroupModulePathIsNotATypeScriptFileError = class extends Schema.TaggedError(
|
|
45
|
+
var GroupModulePathIsNotATypeScriptFileError = class extends Schema.TaggedError()("GroupModulePathIsNotATypeScriptFileError", { path: Schema.NonEmptyString }) {
|
|
46
46
|
get message() {
|
|
47
47
|
return `Expected group module path to end with .ts, got ${this.path}`;
|
|
48
48
|
}
|
package/dist/GroupPath.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupPath.mjs","names":[],"sources":["../src/GroupPath.ts"],"sourcesContent":["import { type GroupSpec, type Spec } from \"@confect/core\";\nimport { Path } from \"@effect/platform\";\nimport {\n Array,\n Data,\n Effect,\n Option,\n pipe,\n Record,\n Schema,\n String,\n} from \"effect\";\n\n/**\n * The path to a group in the Confect API.\n */\nexport class GroupPath extends Schema.Class<GroupPath>(\"GroupPath\")({\n pathSegments: Schema.Data(Schema.NonEmptyArray(Schema.NonEmptyString)),\n}) {}\n\n/**\n * Create a GroupPath from path segments.\n */\nexport const make = (pathSegments: readonly [string, ...string[]]): GroupPath =>\n GroupPath.make({ pathSegments: Data.array(pathSegments) });\n\n/**\n * Append a group name to a GroupPath to create a new GroupPath.\n */\nexport const append = (groupPath: GroupPath, groupName: string): GroupPath =>\n make([...groupPath.pathSegments, groupName]);\n\n/**\n * Expects a path string of the form `./group1/group2.ts`, relative to the Convex functions directory.\n */\nexport const fromGroupModulePath = (groupModulePath: string) =>\n Effect.gen(function* () {\n const path = yield* Path.Path;\n\n const { dir, name, ext } = path.parse(groupModulePath);\n\n if (ext === \".ts\") {\n const dirSegments = Array.filter(\n String.split(dir, path.sep),\n String.isNonEmpty,\n );\n yield* Effect.logDebug(Array.append(dirSegments, name));\n return make(Array.append(dirSegments, name));\n } else {\n return yield*
|
|
1
|
+
{"version":3,"file":"GroupPath.mjs","names":[],"sources":["../src/GroupPath.ts"],"sourcesContent":["import { type GroupSpec, type Spec } from \"@confect/core\";\nimport { Path } from \"@effect/platform\";\nimport {\n Array,\n Data,\n Effect,\n Option,\n pipe,\n Record,\n Schema,\n String,\n} from \"effect\";\n\n/**\n * The path to a group in the Confect API.\n */\nexport class GroupPath extends Schema.Class<GroupPath>(\"GroupPath\")({\n pathSegments: Schema.Data(Schema.NonEmptyArray(Schema.NonEmptyString)),\n}) {}\n\n/**\n * Create a GroupPath from path segments.\n */\nexport const make = (pathSegments: readonly [string, ...string[]]): GroupPath =>\n GroupPath.make({ pathSegments: Data.array(pathSegments) });\n\n/**\n * Append a group name to a GroupPath to create a new GroupPath.\n */\nexport const append = (groupPath: GroupPath, groupName: string): GroupPath =>\n make([...groupPath.pathSegments, groupName]);\n\n/**\n * Expects a path string of the form `./group1/group2.ts`, relative to the Convex functions directory.\n */\nexport const fromGroupModulePath = (groupModulePath: string) =>\n Effect.gen(function* () {\n const path = yield* Path.Path;\n\n const { dir, name, ext } = path.parse(groupModulePath);\n\n if (ext === \".ts\") {\n const dirSegments = Array.filter(\n String.split(dir, path.sep),\n String.isNonEmpty,\n );\n yield* Effect.logDebug(Array.append(dirSegments, name));\n return make(Array.append(dirSegments, name));\n } else {\n return yield* new GroupModulePathIsNotATypeScriptFileError({\n path: groupModulePath,\n });\n }\n });\n\n/**\n * Get the module path for a group, relative to the Convex functions directory.\n */\nexport const modulePath = (groupPath: GroupPath) =>\n Effect.gen(function* () {\n const path = yield* Path.Path;\n\n return path.join(...groupPath.pathSegments) + \".ts\";\n });\n\nexport const getGroupSpec = (\n spec: Spec.AnyWithProps,\n groupPath: GroupPath,\n): Option.Option<GroupSpec.AnyWithProps> =>\n pipe(\n groupPath.pathSegments,\n Array.matchLeft({\n onEmpty: () => Option.none(),\n onNonEmpty: (head, tail) =>\n pipe(\n Record.get(spec.groups, head),\n Option.flatMap((group) =>\n Array.isNonEmptyArray(tail)\n ? getGroupSpecHelper(group, tail)\n : Option.some(group),\n ),\n ),\n }),\n );\n\nconst getGroupSpecHelper = (\n group: GroupSpec.AnyWithProps,\n remainingPath: ReadonlyArray<string>,\n): Option.Option<GroupSpec.AnyWithProps> =>\n pipe(\n remainingPath,\n Array.matchLeft({\n onEmpty: () => Option.some(group),\n onNonEmpty: (head, tail) =>\n pipe(\n Record.get(group.groups, head),\n Option.flatMap((subGroup) =>\n Array.isNonEmptyArray(tail)\n ? getGroupSpecHelper(subGroup, tail)\n : Option.some(subGroup),\n ),\n ),\n }),\n );\n\nexport const toString = (groupPath: GroupPath) =>\n Array.join(groupPath.pathSegments, \".\");\n\nexport class GroupModulePathIsNotATypeScriptFileError extends Schema.TaggedError<GroupModulePathIsNotATypeScriptFileError>()(\n \"GroupModulePathIsNotATypeScriptFileError\",\n {\n path: Schema.NonEmptyString,\n },\n) {\n override get message(): string {\n return `Expected group module path to end with .ts, got ${this.path}`;\n }\n}\n"],"mappings":";;;;;;;;AAgBA,IAAa,YAAb,cAA+B,OAAO,MAAiB,YAAY,CAAC,EAClE,cAAc,OAAO,KAAK,OAAO,cAAc,OAAO,eAAe,CAAC,EACvE,CAAC,CAAC;;;;AAKH,MAAa,QAAQ,iBACnB,UAAU,KAAK,EAAE,cAAc,KAAK,MAAM,aAAa,EAAE,CAAC;;;;AAK5D,MAAa,UAAU,WAAsB,cAC3C,KAAK,CAAC,GAAG,UAAU,cAAc,UAAU,CAAC;;;;AAK9C,MAAa,uBAAuB,oBAClC,OAAO,IAAI,aAAa;CACtB,MAAM,OAAO,OAAO,KAAK;CAEzB,MAAM,EAAE,KAAK,MAAM,QAAQ,KAAK,MAAM,gBAAgB;AAEtD,KAAI,QAAQ,OAAO;EACjB,MAAM,cAAc,MAAM,OACxB,OAAO,MAAM,KAAK,KAAK,IAAI,EAC3B,OAAO,WACR;AACD,SAAO,OAAO,SAAS,MAAM,OAAO,aAAa,KAAK,CAAC;AACvD,SAAO,KAAK,MAAM,OAAO,aAAa,KAAK,CAAC;OAE5C,QAAO,OAAO,IAAI,yCAAyC,EACzD,MAAM,iBACP,CAAC;EAEJ;;;;AAKJ,MAAa,cAAc,cACzB,OAAO,IAAI,aAAa;AAGtB,SAFa,OAAO,KAAK,MAEb,KAAK,GAAG,UAAU,aAAa,GAAG;EAC9C;AAEJ,MAAa,gBACX,MACA,cAEA,KACE,UAAU,cACV,MAAM,UAAU;CACd,eAAe,OAAO,MAAM;CAC5B,aAAa,MAAM,SACjB,KACE,OAAO,IAAI,KAAK,QAAQ,KAAK,EAC7B,OAAO,SAAS,UACd,MAAM,gBAAgB,KAAK,GACvB,mBAAmB,OAAO,KAAK,GAC/B,OAAO,KAAK,MAAM,CACvB,CACF;CACJ,CAAC,CACH;AAEH,MAAM,sBACJ,OACA,kBAEA,KACE,eACA,MAAM,UAAU;CACd,eAAe,OAAO,KAAK,MAAM;CACjC,aAAa,MAAM,SACjB,KACE,OAAO,IAAI,MAAM,QAAQ,KAAK,EAC9B,OAAO,SAAS,aACd,MAAM,gBAAgB,KAAK,GACvB,mBAAmB,UAAU,KAAK,GAClC,OAAO,KAAK,SAAS,CAC1B,CACF;CACJ,CAAC,CACH;AAEH,MAAa,YAAY,cACvB,MAAM,KAAK,UAAU,cAAc,IAAI;AAEzC,IAAa,2CAAb,cAA8D,OAAO,aAAuD,CAC1H,4CACA,EACE,MAAM,OAAO,gBACd,CACF,CAAC;CACA,IAAa,UAAkB;AAC7B,SAAO,mDAAmD,KAAK"}
|
package/dist/package.mjs
CHANGED
|
@@ -12,7 +12,7 @@ var ConfectDirectory = class extends Effect.Service()("@confect/cli/services/Con
|
|
|
12
12
|
dependencies: [ConvexDirectory.Default],
|
|
13
13
|
accessors: true
|
|
14
14
|
}) {};
|
|
15
|
-
var ConfectDirectoryNotFoundError = class extends Schema.TaggedError(
|
|
15
|
+
var ConfectDirectoryNotFoundError = class extends Schema.TaggedError()("ConfectDirectoryNotFoundError", {}) {
|
|
16
16
|
get message() {
|
|
17
17
|
return "Could not find Confect directory";
|
|
18
18
|
}
|
|
@@ -23,7 +23,7 @@ const findConfectDirectory = Effect.gen(function* () {
|
|
|
23
23
|
const convexDirectory = yield* ConvexDirectory.get;
|
|
24
24
|
const confectDirectory = path.join(path.dirname(convexDirectory), "confect");
|
|
25
25
|
if (yield* fs.exists(confectDirectory)) return confectDirectory;
|
|
26
|
-
else return yield*
|
|
26
|
+
else return yield* new ConfectDirectoryNotFoundError();
|
|
27
27
|
});
|
|
28
28
|
|
|
29
29
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfectDirectory.mjs","names":[],"sources":["../../src/services/ConfectDirectory.ts"],"sourcesContent":["import { FileSystem, Path } from \"@effect/platform\";\nimport { Effect, Ref, Schema } from \"effect\";\nimport { ConvexDirectory } from \"./ConvexDirectory\";\n\nexport class ConfectDirectory extends Effect.Service<ConfectDirectory>()(\n \"@confect/cli/services/ConfectDirectory\",\n {\n effect: Effect.gen(function* () {\n const convexDirectory = yield* findConfectDirectory;\n\n const ref = yield* Ref.make<string>(convexDirectory);\n\n return { get: Ref.get(ref) } as const;\n }),\n dependencies: [ConvexDirectory.Default],\n accessors: true,\n },\n) {}\n\nexport class ConfectDirectoryNotFoundError extends Schema.TaggedError<ConfectDirectoryNotFoundError>(\n \"ConfectDirectoryNotFoundError\",\n
|
|
1
|
+
{"version":3,"file":"ConfectDirectory.mjs","names":[],"sources":["../../src/services/ConfectDirectory.ts"],"sourcesContent":["import { FileSystem, Path } from \"@effect/platform\";\nimport { Effect, Ref, Schema } from \"effect\";\nimport { ConvexDirectory } from \"./ConvexDirectory\";\n\nexport class ConfectDirectory extends Effect.Service<ConfectDirectory>()(\n \"@confect/cli/services/ConfectDirectory\",\n {\n effect: Effect.gen(function* () {\n const convexDirectory = yield* findConfectDirectory;\n\n const ref = yield* Ref.make<string>(convexDirectory);\n\n return { get: Ref.get(ref) } as const;\n }),\n dependencies: [ConvexDirectory.Default],\n accessors: true,\n },\n) {}\n\nexport class ConfectDirectoryNotFoundError extends Schema.TaggedError<ConfectDirectoryNotFoundError>()(\n \"ConfectDirectoryNotFoundError\",\n {},\n) {\n override get message(): string {\n return \"Could not find Confect directory\";\n }\n}\n\nexport const findConfectDirectory = Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n\n const convexDirectory = yield* ConvexDirectory.get;\n\n const confectDirectory = path.join(path.dirname(convexDirectory), \"confect\");\n\n if (yield* fs.exists(confectDirectory)) {\n return confectDirectory;\n } else {\n return yield* new ConfectDirectoryNotFoundError();\n }\n});\n"],"mappings":";;;;;AAIA,IAAa,mBAAb,cAAsC,OAAO,SAA2B,CACtE,0CACA;CACE,QAAQ,OAAO,IAAI,aAAa;EAC9B,MAAM,kBAAkB,OAAO;EAE/B,MAAM,MAAM,OAAO,IAAI,KAAa,gBAAgB;AAEpD,SAAO,EAAE,KAAK,IAAI,IAAI,IAAI,EAAE;GAC5B;CACF,cAAc,CAAC,gBAAgB,QAAQ;CACvC,WAAW;CACZ,CACF,CAAC;AAEF,IAAa,gCAAb,cAAmD,OAAO,aAA4C,CACpG,iCACA,EAAE,CACH,CAAC;CACA,IAAa,UAAkB;AAC7B,SAAO;;;AAIX,MAAa,uBAAuB,OAAO,IAAI,aAAa;CAC1D,MAAM,KAAK,OAAO,WAAW;CAC7B,MAAM,OAAO,OAAO,KAAK;CAEzB,MAAM,kBAAkB,OAAO,gBAAgB;CAE/C,MAAM,mBAAmB,KAAK,KAAK,KAAK,QAAQ,gBAAgB,EAAE,UAAU;AAE5E,KAAI,OAAO,GAAG,OAAO,iBAAiB,CACpC,QAAO;KAEP,QAAO,OAAO,IAAI,+BAA+B;EAEnD"}
|
|
@@ -12,7 +12,7 @@ var ConvexDirectory = class extends Effect.Service()("@confect/cli/services/Conv
|
|
|
12
12
|
dependencies: [ProjectRoot.Default],
|
|
13
13
|
accessors: true
|
|
14
14
|
}) {};
|
|
15
|
-
var ConvexDirectoryNotFoundError = class extends Schema.TaggedError(
|
|
15
|
+
var ConvexDirectoryNotFoundError = class extends Schema.TaggedError()("ConvexDirectoryNotFoundError", {}) {
|
|
16
16
|
get message() {
|
|
17
17
|
return "Could not find Convex directory";
|
|
18
18
|
}
|
|
@@ -33,7 +33,7 @@ const findConvexDirectory = Effect.gen(function* () {
|
|
|
33
33
|
onFalse: () => Effect.succeed(defaultPath)
|
|
34
34
|
});
|
|
35
35
|
if (yield* fs.exists(convexDirectory)) return convexDirectory;
|
|
36
|
-
else return yield*
|
|
36
|
+
else return yield* new ConvexDirectoryNotFoundError();
|
|
37
37
|
});
|
|
38
38
|
|
|
39
39
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConvexDirectory.mjs","names":[],"sources":["../../src/services/ConvexDirectory.ts"],"sourcesContent":["import { FileSystem, Path } from \"@effect/platform\";\nimport { Effect, Option, Ref, Schema } from \"effect\";\nimport { ProjectRoot } from \"./ProjectRoot\";\n\nexport class ConvexDirectory extends Effect.Service<ConvexDirectory>()(\n \"@confect/cli/services/ConvexDirectory\",\n {\n effect: Effect.gen(function* () {\n const convexDirectory = yield* findConvexDirectory;\n\n const ref = yield* Ref.make<string>(convexDirectory);\n\n return { get: Ref.get(ref) } as const;\n }),\n dependencies: [ProjectRoot.Default],\n accessors: true,\n },\n) {}\n\nexport class ConvexDirectoryNotFoundError extends Schema.TaggedError<ConvexDirectoryNotFoundError>(\n \"ConvexDirectoryNotFoundError\",\n
|
|
1
|
+
{"version":3,"file":"ConvexDirectory.mjs","names":[],"sources":["../../src/services/ConvexDirectory.ts"],"sourcesContent":["import { FileSystem, Path } from \"@effect/platform\";\nimport { Effect, Option, Ref, Schema } from \"effect\";\nimport { ProjectRoot } from \"./ProjectRoot\";\n\nexport class ConvexDirectory extends Effect.Service<ConvexDirectory>()(\n \"@confect/cli/services/ConvexDirectory\",\n {\n effect: Effect.gen(function* () {\n const convexDirectory = yield* findConvexDirectory;\n\n const ref = yield* Ref.make<string>(convexDirectory);\n\n return { get: Ref.get(ref) } as const;\n }),\n dependencies: [ProjectRoot.Default],\n accessors: true,\n },\n) {}\n\nexport class ConvexDirectoryNotFoundError extends Schema.TaggedError<ConvexDirectoryNotFoundError>()(\n \"ConvexDirectoryNotFoundError\",\n {},\n) {\n override get message(): string {\n return \"Could not find Convex directory\";\n }\n}\n\n/**\n * Schema for `convex.json` configuration file.\n * @see https://docs.convex.dev/production/project-configuration\n */\nconst ConvexJsonConfig = Schema.parseJson(\n Schema.Struct({\n functions: Schema.optional(Schema.String),\n }),\n);\n\nconst findConvexDirectory = Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n\n const projectRoot = yield* ProjectRoot.get;\n\n const defaultPath = path.join(projectRoot, \"convex\");\n\n const convexJsonPath = path.join(projectRoot, \"convex.json\");\n\n const convexDirectory = yield* Effect.if(fs.exists(convexJsonPath), {\n onTrue: () =>\n fs.readFileString(convexJsonPath).pipe(\n Effect.andThen(Schema.decodeOption(ConvexJsonConfig)),\n Effect.map((config) =>\n Option.fromNullable(config.functions).pipe(\n Option.map((functionsDir) => path.join(projectRoot, functionsDir)),\n ),\n ),\n Effect.andThen(Option.getOrElse(() => defaultPath)),\n ),\n onFalse: () => Effect.succeed(defaultPath),\n });\n\n if (yield* fs.exists(convexDirectory)) {\n return convexDirectory;\n } else {\n return yield* new ConvexDirectoryNotFoundError();\n }\n});\n"],"mappings":";;;;;AAIA,IAAa,kBAAb,cAAqC,OAAO,SAA0B,CACpE,yCACA;CACE,QAAQ,OAAO,IAAI,aAAa;EAC9B,MAAM,kBAAkB,OAAO;EAE/B,MAAM,MAAM,OAAO,IAAI,KAAa,gBAAgB;AAEpD,SAAO,EAAE,KAAK,IAAI,IAAI,IAAI,EAAE;GAC5B;CACF,cAAc,CAAC,YAAY,QAAQ;CACnC,WAAW;CACZ,CACF,CAAC;AAEF,IAAa,+BAAb,cAAkD,OAAO,aAA2C,CAClG,gCACA,EAAE,CACH,CAAC;CACA,IAAa,UAAkB;AAC7B,SAAO;;;;;;;AAQX,MAAM,mBAAmB,OAAO,UAC9B,OAAO,OAAO,EACZ,WAAW,OAAO,SAAS,OAAO,OAAO,EAC1C,CAAC,CACH;AAED,MAAM,sBAAsB,OAAO,IAAI,aAAa;CAClD,MAAM,KAAK,OAAO,WAAW;CAC7B,MAAM,OAAO,OAAO,KAAK;CAEzB,MAAM,cAAc,OAAO,YAAY;CAEvC,MAAM,cAAc,KAAK,KAAK,aAAa,SAAS;CAEpD,MAAM,iBAAiB,KAAK,KAAK,aAAa,cAAc;CAE5D,MAAM,kBAAkB,OAAO,OAAO,GAAG,GAAG,OAAO,eAAe,EAAE;EAClE,cACE,GAAG,eAAe,eAAe,CAAC,KAChC,OAAO,QAAQ,OAAO,aAAa,iBAAiB,CAAC,EACrD,OAAO,KAAK,WACV,OAAO,aAAa,OAAO,UAAU,CAAC,KACpC,OAAO,KAAK,iBAAiB,KAAK,KAAK,aAAa,aAAa,CAAC,CACnE,CACF,EACD,OAAO,QAAQ,OAAO,gBAAgB,YAAY,CAAC,CACpD;EACH,eAAe,OAAO,QAAQ,YAAY;EAC3C,CAAC;AAEF,KAAI,OAAO,GAAG,OAAO,gBAAgB,CACnC,QAAO;KAEP,QAAO,OAAO,IAAI,8BAA8B;EAElD"}
|
|
@@ -24,7 +24,7 @@ const findProjectRoot = Effect.gen(function* () {
|
|
|
24
24
|
onSome: Effect.succeed
|
|
25
25
|
});
|
|
26
26
|
});
|
|
27
|
-
var ProjectRootNotFoundError = class extends Schema.TaggedError(
|
|
27
|
+
var ProjectRootNotFoundError = class extends Schema.TaggedError()("ProjectRootNotFoundError", {}) {
|
|
28
28
|
get message() {
|
|
29
29
|
return "Could not find project root (no 'package.json' found)";
|
|
30
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectRoot.mjs","names":[],"sources":["../../src/services/ProjectRoot.ts"],"sourcesContent":["import { FileSystem, Path } from \"@effect/platform\";\nimport { NodeFileSystem } from \"@effect/platform-node\";\nimport { Array, Effect, Option, Ref, Schema } from \"effect\";\n\nexport class ProjectRoot extends Effect.Service<ProjectRoot>()(\n \"@confect/cli/services/ProjectRoot\",\n {\n effect: Effect.gen(function* () {\n const projectRoot = yield* findProjectRoot;\n\n const ref = yield* Ref.make<string>(projectRoot);\n\n return { get: Ref.get(ref) } as const;\n }),\n dependencies: [NodeFileSystem.layer],\n accessors: true,\n },\n) {}\n\nexport const findProjectRoot = Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n\n const startDir = path.resolve(\".\");\n const root = path.parse(startDir).root;\n\n const directories = Array.unfold(startDir, (dir) =>\n dir === root\n ? Option.none()\n : Option.some([dir, path.dirname(dir)] as const),\n );\n\n const projectRoot = yield* Effect.findFirst(directories, (dir) =>\n fs.exists(path.join(dir, \"package.json\")),\n );\n\n return yield* Option.match(projectRoot, {\n onNone: () => Effect.fail(new ProjectRootNotFoundError()),\n onSome: Effect.succeed,\n });\n});\n\nexport class ProjectRootNotFoundError extends Schema.TaggedError<ProjectRootNotFoundError>(\n \"ProjectRootNotFoundError\",\n
|
|
1
|
+
{"version":3,"file":"ProjectRoot.mjs","names":[],"sources":["../../src/services/ProjectRoot.ts"],"sourcesContent":["import { FileSystem, Path } from \"@effect/platform\";\nimport { NodeFileSystem } from \"@effect/platform-node\";\nimport { Array, Effect, Option, Ref, Schema } from \"effect\";\n\nexport class ProjectRoot extends Effect.Service<ProjectRoot>()(\n \"@confect/cli/services/ProjectRoot\",\n {\n effect: Effect.gen(function* () {\n const projectRoot = yield* findProjectRoot;\n\n const ref = yield* Ref.make<string>(projectRoot);\n\n return { get: Ref.get(ref) } as const;\n }),\n dependencies: [NodeFileSystem.layer],\n accessors: true,\n },\n) {}\n\nexport const findProjectRoot = Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n\n const startDir = path.resolve(\".\");\n const root = path.parse(startDir).root;\n\n const directories = Array.unfold(startDir, (dir) =>\n dir === root\n ? Option.none()\n : Option.some([dir, path.dirname(dir)] as const),\n );\n\n const projectRoot = yield* Effect.findFirst(directories, (dir) =>\n fs.exists(path.join(dir, \"package.json\")),\n );\n\n return yield* Option.match(projectRoot, {\n onNone: () => Effect.fail(new ProjectRootNotFoundError()),\n onSome: Effect.succeed,\n });\n});\n\nexport class ProjectRootNotFoundError extends Schema.TaggedError<ProjectRootNotFoundError>()(\n \"ProjectRootNotFoundError\",\n {},\n) {\n override get message(): string {\n return \"Could not find project root (no 'package.json' found)\";\n }\n}\n"],"mappings":";;;;;AAIA,IAAa,cAAb,cAAiC,OAAO,SAAsB,CAC5D,qCACA;CACE,QAAQ,OAAO,IAAI,aAAa;EAC9B,MAAM,cAAc,OAAO;EAE3B,MAAM,MAAM,OAAO,IAAI,KAAa,YAAY;AAEhD,SAAO,EAAE,KAAK,IAAI,IAAI,IAAI,EAAE;GAC5B;CACF,cAAc,CAAC,eAAe,MAAM;CACpC,WAAW;CACZ,CACF,CAAC;AAEF,MAAa,kBAAkB,OAAO,IAAI,aAAa;CACrD,MAAM,KAAK,OAAO,WAAW;CAC7B,MAAM,OAAO,OAAO,KAAK;CAEzB,MAAM,WAAW,KAAK,QAAQ,IAAI;CAClC,MAAM,OAAO,KAAK,MAAM,SAAS,CAAC;CAElC,MAAM,cAAc,MAAM,OAAO,WAAW,QAC1C,QAAQ,OACJ,OAAO,MAAM,GACb,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAU,CACnD;CAED,MAAM,cAAc,OAAO,OAAO,UAAU,cAAc,QACxD,GAAG,OAAO,KAAK,KAAK,KAAK,eAAe,CAAC,CAC1C;AAED,QAAO,OAAO,OAAO,MAAM,aAAa;EACtC,cAAc,OAAO,KAAK,IAAI,0BAA0B,CAAC;EACzD,QAAQ,OAAO;EAChB,CAAC;EACF;AAEF,IAAa,2BAAb,cAA8C,OAAO,aAAuC,CAC1F,4BACA,EAAE,CACH,CAAC;CACA,IAAa,UAAkB;AAC7B,SAAO"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@confect/cli",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Developer tooling for codegen and sync",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -47,27 +47,27 @@
|
|
|
47
47
|
"esbuild": "^0.27.3"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
|
-
"@effect/language-service": "0.
|
|
51
|
-
"@effect/platform": "0.94.
|
|
50
|
+
"@effect/language-service": "0.77.0",
|
|
51
|
+
"@effect/platform": "0.94.5",
|
|
52
52
|
"@effect/vitest": "0.27.0",
|
|
53
|
-
"@eslint/js": "
|
|
54
|
-
"@types/node": "25.
|
|
53
|
+
"@eslint/js": "10.0.1",
|
|
54
|
+
"@types/node": "25.3.3",
|
|
55
55
|
"@vitest/coverage-v8": "3.2.4",
|
|
56
|
-
"effect": "3.19.
|
|
57
|
-
"eslint": "
|
|
56
|
+
"effect": "3.19.19",
|
|
57
|
+
"eslint": "10.0.2",
|
|
58
58
|
"prettier": "3.8.1",
|
|
59
59
|
"tsdown": "0.20.3",
|
|
60
60
|
"typescript": "5.9.3",
|
|
61
|
-
"typescript-eslint": "8.
|
|
61
|
+
"typescript-eslint": "8.56.1",
|
|
62
62
|
"vite": "7.3.1",
|
|
63
63
|
"vite-tsconfig-paths": "6.1.1",
|
|
64
64
|
"vitest": "3.2.4"
|
|
65
65
|
},
|
|
66
66
|
"peerDependencies": {
|
|
67
|
-
"@effect/platform": "^0.94.
|
|
67
|
+
"@effect/platform": "^0.94.5",
|
|
68
68
|
"effect": "^3.19.16",
|
|
69
|
-
"@confect/core": "
|
|
70
|
-
"@confect/server": "
|
|
69
|
+
"@confect/core": "2.0.0",
|
|
70
|
+
"@confect/server": "2.0.0"
|
|
71
71
|
},
|
|
72
72
|
"engines": {
|
|
73
73
|
"node": ">=22",
|
package/src/GroupPath.ts
CHANGED
|
@@ -47,9 +47,9 @@ export const fromGroupModulePath = (groupModulePath: string) =>
|
|
|
47
47
|
yield* Effect.logDebug(Array.append(dirSegments, name));
|
|
48
48
|
return make(Array.append(dirSegments, name));
|
|
49
49
|
} else {
|
|
50
|
-
return yield*
|
|
51
|
-
|
|
52
|
-
);
|
|
50
|
+
return yield* new GroupModulePathIsNotATypeScriptFileError({
|
|
51
|
+
path: groupModulePath,
|
|
52
|
+
});
|
|
53
53
|
}
|
|
54
54
|
});
|
|
55
55
|
|
|
@@ -106,11 +106,12 @@ const getGroupSpecHelper = (
|
|
|
106
106
|
export const toString = (groupPath: GroupPath) =>
|
|
107
107
|
Array.join(groupPath.pathSegments, ".");
|
|
108
108
|
|
|
109
|
-
export class GroupModulePathIsNotATypeScriptFileError extends Schema.TaggedError<GroupModulePathIsNotATypeScriptFileError>(
|
|
109
|
+
export class GroupModulePathIsNotATypeScriptFileError extends Schema.TaggedError<GroupModulePathIsNotATypeScriptFileError>()(
|
|
110
110
|
"GroupModulePathIsNotATypeScriptFileError",
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
}
|
|
111
|
+
{
|
|
112
|
+
path: Schema.NonEmptyString,
|
|
113
|
+
},
|
|
114
|
+
) {
|
|
114
115
|
override get message(): string {
|
|
115
116
|
return `Expected group module path to end with .ts, got ${this.path}`;
|
|
116
117
|
}
|
|
@@ -17,9 +17,10 @@ export class ConfectDirectory extends Effect.Service<ConfectDirectory>()(
|
|
|
17
17
|
},
|
|
18
18
|
) {}
|
|
19
19
|
|
|
20
|
-
export class ConfectDirectoryNotFoundError extends Schema.TaggedError<ConfectDirectoryNotFoundError>(
|
|
20
|
+
export class ConfectDirectoryNotFoundError extends Schema.TaggedError<ConfectDirectoryNotFoundError>()(
|
|
21
21
|
"ConfectDirectoryNotFoundError",
|
|
22
|
-
|
|
22
|
+
{},
|
|
23
|
+
) {
|
|
23
24
|
override get message(): string {
|
|
24
25
|
return "Could not find Confect directory";
|
|
25
26
|
}
|
|
@@ -36,6 +37,6 @@ export const findConfectDirectory = Effect.gen(function* () {
|
|
|
36
37
|
if (yield* fs.exists(confectDirectory)) {
|
|
37
38
|
return confectDirectory;
|
|
38
39
|
} else {
|
|
39
|
-
return yield*
|
|
40
|
+
return yield* new ConfectDirectoryNotFoundError();
|
|
40
41
|
}
|
|
41
42
|
});
|
|
@@ -17,9 +17,10 @@ export class ConvexDirectory extends Effect.Service<ConvexDirectory>()(
|
|
|
17
17
|
},
|
|
18
18
|
) {}
|
|
19
19
|
|
|
20
|
-
export class ConvexDirectoryNotFoundError extends Schema.TaggedError<ConvexDirectoryNotFoundError>(
|
|
20
|
+
export class ConvexDirectoryNotFoundError extends Schema.TaggedError<ConvexDirectoryNotFoundError>()(
|
|
21
21
|
"ConvexDirectoryNotFoundError",
|
|
22
|
-
|
|
22
|
+
{},
|
|
23
|
+
) {
|
|
23
24
|
override get message(): string {
|
|
24
25
|
return "Could not find Convex directory";
|
|
25
26
|
}
|
|
@@ -62,6 +63,6 @@ const findConvexDirectory = Effect.gen(function* () {
|
|
|
62
63
|
if (yield* fs.exists(convexDirectory)) {
|
|
63
64
|
return convexDirectory;
|
|
64
65
|
} else {
|
|
65
|
-
return yield*
|
|
66
|
+
return yield* new ConvexDirectoryNotFoundError();
|
|
66
67
|
}
|
|
67
68
|
});
|
|
@@ -40,9 +40,10 @@ export const findProjectRoot = Effect.gen(function* () {
|
|
|
40
40
|
});
|
|
41
41
|
});
|
|
42
42
|
|
|
43
|
-
export class ProjectRootNotFoundError extends Schema.TaggedError<ProjectRootNotFoundError>(
|
|
43
|
+
export class ProjectRootNotFoundError extends Schema.TaggedError<ProjectRootNotFoundError>()(
|
|
44
44
|
"ProjectRootNotFoundError",
|
|
45
|
-
|
|
45
|
+
{},
|
|
46
|
+
) {
|
|
46
47
|
override get message(): string {
|
|
47
48
|
return "Could not find project root (no 'package.json' found)";
|
|
48
49
|
}
|