@gaganref/confect-cli 10.3.1-fork.3 → 10.3.1-fork.4
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/confect/codegen.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { fromBundlerError } from "../BuildError.mjs";
|
|
2
2
|
import { ProjectRoot } from "../ProjectRoot.mjs";
|
|
3
3
|
import { logFileAdded, logFileModified, logFileRemoved, logPending, logSuccess, logWarn } from "../log.mjs";
|
|
4
|
-
import { bundle } from "../Bundler.mjs";
|
|
4
|
+
import { bundle, resolveModule } from "../Bundler.mjs";
|
|
5
5
|
import { CallbackPrefixError, ComponentNodeGroupError, ConflictingDocNameError, InvalidConvexConfigError, LegacySchemaFileError, tapAndLog } from "../CodegenError.mjs";
|
|
6
6
|
import { ConvexDirectory } from "../ConvexDirectory.mjs";
|
|
7
7
|
import { ConfectDirectory } from "../ConfectDirectory.mjs";
|
|
@@ -517,10 +517,11 @@ const generateTesting = Effect.fnUntraced(function* (app) {
|
|
|
517
517
|
const installed = yield* discoverInstalledComponents(config, relative(config), kind);
|
|
518
518
|
for (const component of installed) {
|
|
519
519
|
const name = prefix + component.name;
|
|
520
|
-
const
|
|
520
|
+
const fromPackage = !path.isAbsolute(component.componentDefinitionPath);
|
|
521
|
+
const resolved = fromPackage ? path.dirname(yield* resolveDefinition(`${component.componentDefinitionPath}/convex.config`, config, path).pipe(Effect.fromOption, Effect.mapError(() => new InvalidConvexConfigError({
|
|
521
522
|
configPath: relative(config),
|
|
522
523
|
reason: `Cannot resolve component ${component.componentDefinitionPath} for testing.`
|
|
523
|
-
}))));
|
|
524
|
+
})))) : component.componentDefinitionPath;
|
|
524
525
|
const localPrefix = prefix === "" ? App.mounts(app).find((mount) => mount.name === component.name)?.httpPrefix : component.httpPrefix;
|
|
525
526
|
const httpPrefix = parentHttpPrefix === void 0 || localPrefix === void 0 ? void 0 : `${parentHttpPrefix.replace(/\/+$/, "")}${localPrefix}`.replace(/\/+$/, "") || "/";
|
|
526
527
|
if (httpPrefix !== void 0 && ((yield* fs.exists(path.join(resolved, "http.ts"))) || (yield* fs.exists(path.join(resolved, "http.js"))))) httpMounts.push(`{ componentPath: ${quote(name)}, httpPrefix: ${quote(httpPrefix)} }`);
|
|
@@ -528,11 +529,21 @@ const generateTesting = Effect.fnUntraced(function* (app) {
|
|
|
528
529
|
if (identifier === void 0) {
|
|
529
530
|
identifier = `component${kits.size}`;
|
|
530
531
|
kits.set(resolved, identifier);
|
|
531
|
-
|
|
532
|
-
|
|
532
|
+
if (fromPackage) {
|
|
533
|
+
const testEntry = `${component.componentDefinitionPath}/test`;
|
|
534
|
+
if (Option.isNone(resolveModule(testEntry, config))) return yield* new InvalidConvexConfigError({
|
|
535
|
+
configPath: relative(config),
|
|
536
|
+
reason: `the component package ${quote(component.componentDefinitionPath)} has no ${quote(testEntry)} export. Tests register a component from another package through that entry's \`register(t, name)\`.`
|
|
537
|
+
});
|
|
538
|
+
imports.push(`import { register as ${identifier}Register } from ${quote(testEntry)};`);
|
|
539
|
+
imports.push(`const ${identifier} = { register: ${identifier}Register };`);
|
|
540
|
+
} else {
|
|
541
|
+
imports.push(`import ${identifier}Schema from ${quote(relative(path.join(resolved, "schema")))};`);
|
|
542
|
+
imports.push(`const ${identifier} = { schema: ${identifier}Schema, modules: ${yield* moduleMap(resolved)} };`);
|
|
543
|
+
}
|
|
533
544
|
}
|
|
534
545
|
components.push(`${quote(name)}: ${identifier},`);
|
|
535
|
-
yield* visit(resolved, `${name}/`, "component", httpPrefix);
|
|
546
|
+
if (!fromPackage) yield* visit(resolved, `${name}/`, "component", httpPrefix);
|
|
536
547
|
}
|
|
537
548
|
});
|
|
538
549
|
yield* visit(convexDirectory, "", (yield* ConvexDirectory.target).kind, "");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codegen.mjs","names":["DirectoryOptions.flags","CodegenError.tapAndLog","DirectoryOptions.layer","TableModule.discover","TableModule.validate","GenerationSnapshot.fromLoadedLeaves","FunctionModule.generateFunctions","EntryPoint.planDeclarations","GenerationSnapshot.update","FunctionModule.applyFunctionPlan","GenerationSnapshot.diff","CodegenError.ComponentNodeGroupError","ConvexConfig.componentName","ConvexConfig.CONVEX_CONFIG_FILENAME","Bundler.bundle","CodegenError.CallbackPrefixError","CodegenError.InvalidConvexConfigError","templates.componentContract","templates.assembledSpec","templates.registeredFunctionsForGroup","FunctionPaths.make","TableModule.TABLES_DIRNAME","templates.id","templates.tableWrapper","templates.runtimeSchema","templates.convexSchema","templates.schema","templates.services","DocName.fromTableName","CodegenError.ConflictingDocNameError","templates.docs","templates.refs","ConvexConfig.discoverInstalledComponents","templates.components","ConvexConfig.typeImportPath","ConvexConfig.resolveDefinition"],"sources":["../../src/confect/codegen.ts"],"sourcesContent":["import { App, Callback, Env, type GroupSpec, Spec } from \"@confect/core\";\nimport * as Command from \"effect/cli/Command\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Path from \"effect/Path\";\nimport * as Array from \"effect/Array\";\nimport * as Effect from \"effect/Effect\";\nimport * as Result from \"effect/Result\";\nimport type * as PlatformError from \"effect/PlatformError\";\nimport type { BuildError } from \"../BuildError\";\nimport { pipe } from \"effect/Function\";\nimport * as HashSet from \"effect/HashSet\";\nimport * as Match from \"effect/Match\";\nimport * as Option from \"effect/Option\";\nimport * as Record from \"effect/Record\";\nimport type * as Scope from \"effect/Scope\";\nimport * as Bundler from \"../Bundler\";\nimport { fromBundlerError } from \"../BuildError\";\nimport * as CodegenError from \"../CodegenError\";\nimport { LegacySchemaFileError } from \"../CodegenError\";\nimport { ConfectDirectory } from \"../ConfectDirectory\";\nimport * as ConvexConfig from \"../ConvexConfig\";\nimport { ConvexDirectory } from \"../ConvexDirectory\";\nimport * as DirectoryOptions from \"../DirectoryOptions\";\nimport * as DocName from \"../DocName\";\nimport * as FunctionPaths from \"../FunctionPaths\";\nimport * as FunctionModule from \"../FunctionModule\";\nimport * as GenerationSnapshot from \"../GenerationSnapshot\";\nimport * as EntryPoint from \"../EntryPoint\";\nimport type { ImplModulePath } from \"../ImplModulePath\";\nimport {\n implPathForSpec,\n loadAll,\n registeredFunctionsRelativePath,\n validateAllImpls,\n withImplFiles,\n type LeafModule,\n type LoadedLeafModule,\n} from \"../LeafModule\";\nimport {\n logFileAdded,\n logFileModified,\n logFileRemoved,\n logPending,\n logSuccess,\n logWarn,\n} from \"../log\";\nimport { ProjectRoot } from \"../ProjectRoot\";\nimport { preserveComponentOutput } from \"../Rollback\";\nimport { assemblyNodesFromLeaves } from \"../SpecAssemblyNode\";\nimport * as TableModule from \"../TableModule\";\nimport * as templates from \"../templates\";\nimport {\n generateAuthConfig,\n generateCrons,\n generateHttp,\n removePathIfExists,\n toModuleImportPath,\n touchConvexSchema,\n writeFileStringAndLog,\n} from \"../utils\";\nimport { syncDeclaration, syncDeclaredHttp } from \"./declaration\";\n\nconst GENERATED_DIRNAME = \"_generated\";\n\nconst isComponent = Effect.map(\n ConvexDirectory.target,\n (target) => target.kind === \"component\",\n);\n\nconst GENERATED_SPEC_PATH = Effect.map(Path.Path, (path) =>\n path.join(GENERATED_DIRNAME, \"spec.ts\"),\n);\nconst GENERATED_SCHEMA_PATH = Effect.map(Path.Path, (path) =>\n path.join(GENERATED_DIRNAME, \"schema.ts\"),\n);\nconst GENERATED_CONVEX_SCHEMA_PATH = Effect.map(Path.Path, (path) =>\n path.join(GENERATED_DIRNAME, \"convexSchema.ts\"),\n);\nconst GENERATED_ID_PATH = Effect.map(Path.Path, (path) =>\n path.join(GENERATED_DIRNAME, \"id.ts\"),\n);\nconst GENERATED_COMPONENTS_PATH = Effect.map(Path.Path, (path) =>\n path.join(GENERATED_DIRNAME, \"components.ts\"),\n);\nconst GENERATED_TABLES_DIRNAME = Effect.map(Path.Path, (path) =>\n path.join(GENERATED_DIRNAME, \"tables\"),\n);\n\nconst LEGACY_PATHS = Effect.gen(function* () {\n const path = yield* Path.Path;\n\n return [\n \"spec.ts\",\n \"nodeSpec.ts\",\n \"impl.ts\",\n \"nodeImpl.ts\",\n path.join(GENERATED_DIRNAME, \"registeredFunctions.ts\"),\n path.join(GENERATED_DIRNAME, \"nodeRegisteredFunctions.ts\"),\n path.join(GENERATED_DIRNAME, \"impl.ts\"),\n path.join(GENERATED_DIRNAME, \"nodeImpl.ts\"),\n // `_generated/nodeSpec.ts` is not part of the generated output (all groups\n // live in `_generated/spec.ts`); delete any copy left by an older version.\n path.join(GENERATED_DIRNAME, \"nodeSpec.ts\"),\n ];\n});\n\nexport const codegen = Command.make(\"codegen\", DirectoryOptions.flags, () =>\n Effect.gen(function* () {\n yield* logPending(\"Performing initial sync…\");\n yield* codegenHandler.pipe(\n Effect.asVoid,\n Effect.tap(() => logSuccess(\"Generated files are up-to-date\")),\n CodegenError.tapAndLog,\n );\n }),\n).pipe(\n Command.provide(DirectoryOptions.layer),\n Command.withDescription(\n \"Generate `confect/_generated` files and the contents of the `convex` directory (except `tsconfig.json`, and `convex.config.ts` unless `confect/app.ts` declares the backend)\",\n ),\n);\n\nconst runCodegen = Effect.gen(function* () {\n yield* validateComponentConfiguration;\n yield* generateConfectGeneratedDirectory;\n // A declared backend's `convex.config.ts` and manifest come first: the\n // components registry below reads the config, and nothing may validate\n // against a manifest the current declaration did not produce.\n const declared = yield* syncDeclaration;\n // Reject a legacy `confect/schema.ts` up front so the user-facing\n // migration message surfaces before any bundler error from impl\n // validation (each impl imports `_generated/schema.ts`).\n yield* rejectLegacySchemaFile;\n // List `confect/tables/*.ts` (filename-only—no bundling yet) so the\n // `_generated/id.ts` constructor can be emitted *before* we bundle any\n // user-authored table module. Tables import from `_generated/id.ts` for\n // cross-table id refs, so it must exist on disk first.\n const tableModules = yield* TableModule.discover;\n yield* warnIfNoTables(tableModules);\n yield* generateIdConstructor(tableModules);\n // Tables and specs can use bound component IDs and schemas, so their\n // imports need the registry even on a project's first codegen run.\n yield* generateComponents;\n yield* validateCallbackPrefixes(declared);\n // Now that `_generated/id.ts` is on disk, bundle each table module and\n // check its default export is an `UnnamedTable`. Surface diagnostics\n // here (rather than later) so they appear before impl-validation noise.\n yield* TableModule.validate(tableModules);\n yield* validateNoDocNameCollisions(tableModules);\n yield* generateTableWrappers(tableModules);\n yield* removeObsoleteTableWrappers(tableModules);\n yield* generateRuntimeSchema(tableModules);\n const leaves = yield* loadAll;\n yield* rejectComponentNodeGroups(leaves);\n yield* removeLegacyFiles;\n const snapshot = yield* Effect.fromResult(\n GenerationSnapshot.fromLoadedLeaves(leaves),\n );\n yield* generateAssembledSpecs(leaves);\n // `_generated/api.ts`/`nodeApi.ts` are no longer imported by generated or\n // impl code (impls take the database schema from `_generated/schema`\n // directly), so remove any copies left over from earlier versions before\n // impl validation runs.\n yield* Effect.all(\n [\n removeGeneratedApi,\n generateRefs,\n generateComponentContract(tableModules),\n removeGeneratedNodeApi,\n generateDocs(tableModules),\n generateServices,\n generateConvexSchema(tableModules),\n ],\n { concurrency: \"unbounded\" },\n );\n yield* validateAllImpls(leaves);\n yield* generateGroupRegisteredFunctions(leaves);\n yield* removeObsoleteRegisteredFunctions(leaves);\n const [functionPaths] = yield* Effect.all(\n [\n FunctionModule.generateFunctions(snapshot),\n generateConvexSchemaReexport,\n logGenerated(\n Option.match(declared, {\n onNone: () => generateHttp,\n onSome: syncDeclaredHttp,\n }),\n ),\n logGenerated(generateCrons),\n Option.isNone(declared)\n ? logGenerated(generateAuthConfig)\n : Effect.succeedNone,\n ],\n { concurrency: \"unbounded\" },\n );\n if (Option.isSome(declared)) yield* generateTesting(declared.value);\n return {\n functionPaths,\n snapshot,\n };\n});\n\nexport const generateWithSnapshot = runCodegen.pipe(\n Effect.withSpan(\"Cli.codegen\"),\n);\n\nexport const makeCodegenHandler = (\n duringRestore?: Effect.Effect<void, never, Scope.Scope>,\n) =>\n preserveComponentOutput(generateWithSnapshot, duringRestore).pipe(\n Effect.tap(() => touchConvexSchema),\n Effect.map(({ functionPaths }) => ({ functionPaths })),\n );\n\nexport const codegenHandler = makeCodegenHandler();\n\nexport const updateDeclarations = Effect.fn(\"Cli.updateDeclarations\")(\n function* (\n snapshot: GenerationSnapshot.GenerationSnapshot,\n declarations: Array.NonEmptyReadonlyArray<EntryPoint.Declaration>,\n affectedImpls: ReadonlyArray<ImplModulePath>,\n ) {\n const path = yield* Path.Path;\n const { paths, tables } = EntryPoint.planDeclarations(\n declarations,\n affectedImpls,\n path,\n );\n yield* TableModule.validate(tables);\n return yield* withImplFiles(paths, (leaves) =>\n Effect.gen(function* () {\n yield* rejectComponentNodeGroups(leaves);\n const next = yield* Effect.fromResult(\n GenerationSnapshot.update(snapshot, leaves),\n );\n yield* validateAllImpls(leaves);\n yield* generateGroupRegisteredFunctions(leaves);\n yield* FunctionModule.applyFunctionPlan(\n GenerationSnapshot.diff(snapshot, next),\n );\n return next;\n }),\n );\n },\n);\n\n// Convex components cannot run Node.js functions, at any nesting depth.\nconst validateComponentGroupRuntime = (\n group: GroupSpec.AnyWithProps,\n groupPath: string,\n specPath: string,\n): Result.Result<void, CodegenError.ComponentNodeGroupError> =>\n Result.gen(function* () {\n if (group.runtime === \"Node\") {\n return yield* Result.fail(\n new CodegenError.ComponentNodeGroupError({ specPath, groupPath }),\n );\n }\n for (const [name, child] of Object.entries(group.groups)) {\n yield* validateComponentGroupRuntime(\n child,\n `${groupPath}.${name}`,\n specPath,\n );\n }\n });\n\nconst rejectComponentNodeGroups = Effect.fnUntraced(function* (\n leaves: ReadonlyArray<LoadedLeafModule>,\n) {\n if ((yield* ConvexDirectory.target).kind === \"app\") return;\n yield* Effect.forEach(leaves, (leaf) =>\n Effect.fromResult(\n validateComponentGroupRuntime(\n leaf.spec,\n leaf.groupPathDot,\n leaf.relativePath,\n ),\n ),\n );\n});\n\nconst validateCallbackPrefixes = Effect.fnUntraced(function* (\n declared: Option.Option<App.Any>,\n) {\n if ((yield* ConvexDirectory.target).kind !== \"component\") return;\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const callbacksPath = path.join(yield* ConfectDirectory.get, \"callbacks.ts\");\n if (!(yield* fs.exists(callbacksPath))) return;\n const name = Option.isSome(declared)\n ? Env.name(App.env(declared.value))\n : yield* ConvexConfig.componentName(\n path.join(\n yield* ConvexDirectory.get,\n ConvexConfig.CONVEX_CONFIG_FILENAME,\n ),\n );\n const { module } = yield* Bundler.bundle(callbacksPath).pipe(\n Effect.mapError((error) => fromBundlerError(\"confect/callbacks.ts\", error)),\n );\n for (const contract of Object.values(module)) {\n if (Callback.isContract(contract) && !contract.id.startsWith(`${name}/`)) {\n return yield* new CodegenError.CallbackPrefixError({\n declarationPath: \"confect/callbacks.ts\",\n contractId: contract.id,\n componentName: name,\n });\n }\n }\n});\n\nconst validateComponentConfiguration = Effect.gen(function* () {\n return yield* Match.value((yield* ConvexDirectory.target).kind).pipe(\n Match.when(\"app\", () => Effect.void),\n Match.when(\"component\", () =>\n Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const authPath = path.join(confectDirectory, \"auth.ts\");\n if (yield* fs.exists(authPath)) {\n return yield* new CodegenError.InvalidConvexConfigError({\n configPath: authPath,\n reason:\n \"Components cannot configure application authentication. Pass identity explicitly through function arguments.\",\n });\n }\n }),\n ),\n Match.exhaustive,\n );\n});\n\nconst generateComponentContract = Effect.fnUntraced(function* (\n tables: ReadonlyArray<TableModule.TableModule>,\n) {\n return yield* Match.value((yield* ConvexDirectory.target).kind).pipe(\n Match.when(\"app\", () => Effect.void),\n Match.when(\"component\", () =>\n Effect.gen(function* () {\n const path = yield* Path.Path;\n const directory = yield* ConfectDirectory.get;\n const contents = yield* templates.componentContract({\n tableNames: Array.map(tables, (table) => table.tableName),\n });\n yield* writeFileStringAndLog(\n path.join(directory, GENERATED_DIRNAME, \"component.ts\"),\n contents,\n );\n }),\n ),\n Match.exhaustive,\n );\n});\n\nconst generateConfectGeneratedDirectory = Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n\n if (!(yield* fs.exists(path.join(confectDirectory, \"_generated\")))) {\n yield* fs.makeDirectory(path.join(confectDirectory, \"_generated\"), {\n recursive: true,\n });\n yield* logFileAdded(path.join(confectDirectory, \"_generated\") + \"/\");\n }\n});\n\nconst removeLegacyFiles = Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const legacyPaths = yield* LEGACY_PATHS;\n\n yield* Effect.forEach(\n legacyPaths,\n Effect.fnUntraced(function* (relativePath: string) {\n const absolutePath = path.join(confectDirectory, relativePath);\n if (yield* fs.exists(absolutePath)) {\n yield* removePathIfExists(absolutePath);\n yield* logFileRemoved(absolutePath);\n }\n }),\n );\n});\n\nconst generateAssembledSpecs = Effect.fnUntraced(function* (\n leaves: ReadonlyArray<LeafModule>,\n) {\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const generatedSpecPath = yield* GENERATED_SPEC_PATH;\n\n // A single assembled spec holds every group regardless of runtime—a Node\n // group's `makeNode()` lives in its imported leaf spec, so the assembled\n // file is runtime-agnostic. Always emit it (even empty) so downstream\n // readers (`loadGeneratedSpec`, `generateRefs`) always find a spec module.\n const nodes = assemblyNodesFromLeaves(leaves);\n const specContents = yield* templates.assembledSpec({ nodes });\n yield* writeFileStringAndLog(\n path.join(confectDirectory, generatedSpecPath),\n specContents,\n );\n});\n\nconst generateGroupRegisteredFunctions = Effect.fnUntraced(function* (\n leaves: ReadonlyArray<LoadedLeafModule>,\n) {\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n\n yield* Effect.forEach(\n leaves,\n Effect.fnUntraced(function* (leaf: LoadedLeafModule) {\n const registryRelativePath = yield* registeredFunctionsRelativePath(leaf);\n const registryPath = path.join(\n confectDirectory,\n \"_generated\",\n registryRelativePath,\n );\n const registryDir = path.dirname(registryPath);\n const fs = yield* FileSystem.FileSystem;\n if (!(yield* fs.exists(registryDir))) {\n yield* fs.makeDirectory(registryDir, { recursive: true });\n }\n\n const implRelativePath = yield* implPathForSpec(leaf.relativePath);\n const schemaImportPath = yield* toModuleImportPath(\n path.relative(\n path.dirname(registryPath),\n path.join(confectDirectory, \"_generated\", \"schema.ts\"),\n ),\n );\n // The group's own leaf spec (sibling of its impl), referenced\n // type-only by the registry to shape its returned record.\n const specImportPath = yield* toModuleImportPath(\n path.relative(\n path.dirname(registryPath),\n path.join(confectDirectory, leaf.relativePath),\n ),\n );\n const implImportPath = yield* toModuleImportPath(\n path.relative(\n path.dirname(registryPath),\n path.join(confectDirectory, implRelativePath),\n ),\n );\n\n const contents = yield* templates.registeredFunctionsForGroup({\n spec: leaf.spec,\n schemaImportPath,\n specImportPath,\n implImportPath,\n });\n\n yield* writeFileStringAndLog(registryPath, contents);\n }),\n );\n});\n\nconst removeObsoleteRegisteredFunctions = Effect.fnUntraced(function* (\n leaves: ReadonlyArray<LeafModule>,\n) {\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const registryRoot = path.join(\n confectDirectory,\n \"_generated\",\n \"registeredFunctions\",\n );\n\n if (!(yield* fs.exists(registryRoot))) {\n return;\n }\n\n const expected = new Set(\n yield* Effect.forEach(leaves, (leaf) =>\n registeredFunctionsRelativePath(leaf),\n ),\n );\n\n const existing = yield* fs.readDirectory(registryRoot, { recursive: true });\n yield* Effect.forEach(existing, (relativePath) => {\n if (path.extname(relativePath) !== \".ts\") {\n return Effect.void;\n }\n const normalized = path.join(\"registeredFunctions\", relativePath);\n if (!expected.has(normalized)) {\n return Effect.gen(function* () {\n const absolutePath = path.join(registryRoot, relativePath);\n if (yield* fs.exists(absolutePath)) {\n yield* removePathIfExists(absolutePath);\n yield* logFileRemoved(absolutePath);\n }\n });\n }\n return Effect.void;\n });\n});\n\nconst getGeneratedSpecPath = Effect.gen(function* () {\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const generatedSpecPath = yield* GENERATED_SPEC_PATH;\n return path.join(confectDirectory, generatedSpecPath);\n});\n\nconst loadGeneratedSpec = Effect.gen(function* () {\n const specPath = yield* getGeneratedSpecPath;\n const { module: specModule } = yield* Bundler.bundle(specPath);\n const spec = specModule.default;\n\n if (!Spec.isSpec(spec)) {\n return yield* Effect.die(\n new Error(\"_generated/spec.ts does not export a valid Spec\"),\n );\n }\n\n return spec;\n});\n\nconst emptyFunctionPaths = FunctionPaths.FunctionPaths.make(HashSet.empty());\n\nexport const loadPreviousFunctionPaths = Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n const specPath = yield* getGeneratedSpecPath;\n\n if (!(yield* fs.exists(specPath))) {\n return emptyFunctionPaths;\n }\n\n const specResult = yield* loadGeneratedSpec.pipe(Effect.result);\n\n return Result.match(specResult, {\n onFailure: () => emptyFunctionPaths,\n onSuccess: (spec) => FunctionPaths.make(spec),\n });\n});\n\n/**\n * Remove a now-obsolete `_generated/<name>.ts` if present (and log it), for\n * projects upgrading from a version that still emitted it.\n */\nconst removeObsoleteGeneratedFile = Effect.fnUntraced(function* (\n fileName: string,\n) {\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const filePath = path.join(confectDirectory, \"_generated\", fileName);\n\n if (yield* fs.exists(filePath)) {\n yield* removePathIfExists(filePath);\n yield* logFileRemoved(filePath);\n }\n});\n\n// `_generated/api.ts` is no longer imported by generated or impl code: impls\n// take the database schema (`_generated/schema`) directly, and per-group\n// registries reference the spec type-only. Remove any stale copy.\nconst removeGeneratedApi = removeObsoleteGeneratedFile(\"api.ts\");\n\n// `_generated/nodeApi.ts` is obsolete for the same reason.\nconst removeGeneratedNodeApi = removeObsoleteGeneratedFile(\"nodeApi.ts\");\n\n/**\n * The user-authored `confect/schema.ts` is no longer supported: codegen now\n * owns both `_generated/schema.ts` (runtime) and `_generated/convexSchema.ts`\n * (deploy), derived from a single scan of `confect/tables/*.ts`. Detect a stray\n * file and fail with a clear migration message—leaving it in place would\n * silently shadow the codegen-owned\n * `_generated/schema.ts`/`_generated/convexSchema.ts`.\n */\nconst rejectLegacySchemaFile = Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const legacyPath = path.join(confectDirectory, \"schema.ts\");\n\n if (yield* fs.exists(legacyPath)) {\n return yield* new LegacySchemaFileError({ schemaPath: \"schema.ts\" });\n }\n});\n\n/**\n * Surface a yellow `⚠` warning when codegen sees no tables—either the\n * `confect/tables/` directory is missing or it contains no `.ts` files.\n * Generation still succeeds (emitting an empty `DatabaseSchema` and\n * `defineSchema({})`), since action-only/table-free Confect backends are\n * legal—but the warning catches the much more common case of a typoed directory\n * or files placed under the wrong root.\n */\nconst warnIfNoTables = (\n tableModules: ReadonlyArray<TableModule.TableModule>,\n) =>\n tableModules.length === 0\n ? logWarn(\n `No tables discovered in \\`confect/${TableModule.TABLES_DIRNAME}/\\`. ` +\n `Generating an empty schema; add a \\`Table.make(...)\\` module under that ` +\n `directory unless this backend is intentionally tables-free.`,\n )\n : Effect.void;\n\nconst tableModuleBindings = Effect.fnUntraced(function* (\n tableModules: ReadonlyArray<TableModule.TableModule>,\n generatedFilePath: string,\n) {\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const generatedDir = path.dirname(generatedFilePath);\n\n const generatedTablesDirname = yield* GENERATED_TABLES_DIRNAME;\n\n return yield* Effect.forEach(\n tableModules,\n Effect.fnUntraced(function* (tableModule: TableModule.TableModule) {\n const wrapperAbsolutePath = path.join(\n confectDirectory,\n generatedTablesDirname,\n `${tableModule.tableName}.ts`,\n );\n const importPath = yield* toModuleImportPath(\n path.relative(generatedDir, wrapperAbsolutePath),\n );\n return {\n importPath,\n tableName: tableModule.tableName,\n };\n }),\n );\n});\n\nconst generateIdConstructor = Effect.fnUntraced(function* (\n tableModules: ReadonlyArray<TableModule.TableModule>,\n) {\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const generatedIdPath = yield* GENERATED_ID_PATH;\n const idPath = path.join(confectDirectory, generatedIdPath);\n\n const tableNames = Array.map(\n tableModules,\n (tableModule) => tableModule.tableName,\n );\n const contents = yield* Match.value(yield* ConvexDirectory.target).pipe(\n Match.when({ kind: \"app\" }, () => templates.id({ tableNames })),\n Match.when({ kind: \"component\" }, ({ scope }) =>\n templates.id({ tableNames, scope }),\n ),\n Match.exhaustive,\n );\n\n yield* writeFileStringAndLog(idPath, contents);\n});\n\nconst generateTableWrappers = Effect.fnUntraced(function* (\n tableModules: ReadonlyArray<TableModule.TableModule>,\n) {\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const generatedTablesDirname = yield* GENERATED_TABLES_DIRNAME;\n const wrappersDir = path.join(confectDirectory, generatedTablesDirname);\n\n if (!(yield* fs.exists(wrappersDir))) {\n yield* fs.makeDirectory(wrappersDir, { recursive: true });\n }\n\n yield* Effect.forEach(\n tableModules,\n Effect.fnUntraced(function* (tableModule: TableModule.TableModule) {\n const wrapperPath = path.join(\n confectDirectory,\n generatedTablesDirname,\n `${tableModule.tableName}.ts`,\n );\n const unnamedAbsolutePath = path.join(\n confectDirectory,\n tableModule.relativePath,\n );\n const unnamedImportPath = yield* toModuleImportPath(\n path.relative(path.dirname(wrapperPath), unnamedAbsolutePath),\n );\n const contents = yield* templates.tableWrapper({\n tableName: tableModule.tableName,\n unnamedImportPath,\n component: yield* isComponent,\n });\n yield* writeFileStringAndLog(wrapperPath, contents);\n }),\n { concurrency: \"unbounded\" },\n );\n});\n\n/**\n * Remove any stale `_generated/tables/*.ts` wrapper whose source table has been\n * deleted or renamed. Mirrors `removeObsoleteRegisteredFunctions` for the\n * wrapper directory.\n */\nconst removeObsoleteTableWrappers = Effect.fnUntraced(function* (\n tableModules: ReadonlyArray<TableModule.TableModule>,\n) {\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const generatedTablesDirname = yield* GENERATED_TABLES_DIRNAME;\n const wrappersDir = path.join(confectDirectory, generatedTablesDirname);\n\n if (!(yield* fs.exists(wrappersDir))) {\n return;\n }\n\n const expected = new Set(\n Array.map(tableModules, (tableModule) => `${tableModule.tableName}.ts`),\n );\n const existing = yield* fs.readDirectory(wrappersDir, { recursive: true });\n yield* Effect.forEach(existing, (entry) => {\n if (path.extname(entry) !== \".ts\") {\n return Effect.void;\n }\n if (!expected.has(entry)) {\n return Effect.gen(function* () {\n const absolutePath = path.join(wrappersDir, entry);\n if (yield* fs.exists(absolutePath)) {\n yield* removePathIfExists(absolutePath);\n yield* logFileRemoved(absolutePath);\n }\n });\n }\n return Effect.void;\n });\n});\n\nconst generateRuntimeSchema = Effect.fnUntraced(function* (\n tableModules: ReadonlyArray<TableModule.TableModule>,\n) {\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const generatedSchemaPath = yield* GENERATED_SCHEMA_PATH;\n const schemaPath = path.join(confectDirectory, generatedSchemaPath);\n\n const bindings = yield* tableModuleBindings(tableModules, schemaPath);\n const contents = yield* templates.runtimeSchema({\n tableModules: bindings,\n component: yield* isComponent,\n });\n\n yield* writeFileStringAndLog(schemaPath, contents);\n});\n\nconst generateConvexSchema = Effect.fnUntraced(function* (\n tableModules: ReadonlyArray<TableModule.TableModule>,\n) {\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const generatedConvexSchemaPath = yield* GENERATED_CONVEX_SCHEMA_PATH;\n const convexSchemaPath = path.join(\n confectDirectory,\n generatedConvexSchemaPath,\n );\n\n const bindings = yield* tableModuleBindings(tableModules, convexSchemaPath);\n const contents = yield* templates.convexSchema({ tableModules: bindings });\n\n yield* writeFileStringAndLog(convexSchemaPath, contents);\n});\n\nconst generateConvexSchemaReexport = Effect.gen(function* () {\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const convexDirectory = yield* ConvexDirectory.get;\n const generatedConvexSchemaRelativePath = yield* GENERATED_CONVEX_SCHEMA_PATH;\n\n const convexSchemaPath = path.join(convexDirectory, \"schema.ts\");\n const generatedConvexSchemaPath = path.join(\n confectDirectory,\n generatedConvexSchemaRelativePath,\n );\n\n const convexSchemaImportPath = yield* toModuleImportPath(\n path.relative(path.dirname(convexSchemaPath), generatedConvexSchemaPath),\n );\n\n const schemaContents = yield* templates.schema({\n convexSchemaImportPath,\n });\n\n yield* writeFileStringAndLog(convexSchemaPath, schemaContents);\n});\n\nconst generateServices = Effect.gen(function* () {\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n\n const confectGeneratedDirectory = path.join(confectDirectory, \"_generated\");\n\n const servicesPath = path.join(confectGeneratedDirectory, \"services.ts\");\n const generatedSchemaPath = yield* GENERATED_SCHEMA_PATH;\n const schemaImportPath = yield* toModuleImportPath(\n path.relative(\n path.dirname(servicesPath),\n path.join(confectDirectory, generatedSchemaPath),\n ),\n );\n\n const servicesContentsString = yield* templates.services({\n schemaImportPath,\n component: yield* isComponent,\n });\n\n yield* writeFileStringAndLog(servicesPath, servicesContentsString);\n});\n\n/**\n * Two tables whose names fold to the same PascalCase document type name (e.g.\n * `user_profiles` and `userProfiles` → `UserProfilesDoc`) would emit duplicate\n * interfaces in `_generated/docs.ts`. Catch that up front with a clear error\n * rather than letting `tsc` report a duplicate-identifier later.\n */\nconst validateNoDocNameCollisions = Effect.fnUntraced(function* (\n tableModules: ReadonlyArray<TableModule.TableModule>,\n) {\n const collisions = pipe(\n tableModules,\n Array.groupBy((tableModule) =>\n DocName.fromTableName(tableModule.tableName),\n ),\n Record.toEntries,\n Array.filter(([, group]) => group.length > 1),\n Array.map(([docName, group]) => ({\n docName,\n tableNames: Array.map(group, (tableModule) => tableModule.tableName),\n })),\n );\n\n if (Array.isReadonlyArrayNonEmpty(collisions)) {\n return yield* new CodegenError.ConflictingDocNameError({ collisions });\n }\n});\n\nconst generateDocs = Effect.fnUntraced(function* (\n tableModules: ReadonlyArray<TableModule.TableModule>,\n) {\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n\n const confectGeneratedDirectory = path.join(confectDirectory, \"_generated\");\n\n const docsPath = path.join(confectGeneratedDirectory, \"docs.ts\");\n const generatedSchemaPath = yield* GENERATED_SCHEMA_PATH;\n const schemaImportPath = yield* toModuleImportPath(\n path.relative(\n path.dirname(docsPath),\n path.join(confectDirectory, generatedSchemaPath),\n ),\n );\n\n const docsContentsString = yield* templates.docs({\n schemaImportPath,\n tables: Array.map(tableModules, (tableModule) => ({\n tableName: tableModule.tableName,\n docName: DocName.fromTableName(tableModule.tableName),\n })),\n });\n\n yield* writeFileStringAndLog(docsPath, docsContentsString);\n});\n\nconst generateRefs = Effect.gen(function* () {\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n\n const confectGeneratedDirectory = path.join(confectDirectory, \"_generated\");\n const refsPath = path.join(confectGeneratedDirectory, \"refs.ts\");\n const refsDir = path.dirname(refsPath);\n const generatedSpecPath = yield* GENERATED_SPEC_PATH;\n\n const specImportPath = yield* toModuleImportPath(\n path.relative(refsDir, path.join(confectDirectory, generatedSpecPath)),\n );\n\n const refsContents = yield* templates.refs({ specImportPath });\n\n yield* writeFileStringAndLog(refsPath, refsContents);\n});\n\n/**\n * Generate `confect/_generated/components.ts`—the typed registry of Convex\n * components installed in `convex/convex.config.ts` (see\n * {@link templates.components}). The file is emitted even when there is no\n * `convex.config.ts` (as an empty registry) so the import surface stays stable.\n * It must exist before loading tables and specs because they may import bound\n * component IDs and schemas.\n */\nexport const generateComponents = Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const convexDirectory = yield* ConvexDirectory.get;\n const projectRoot = yield* ProjectRoot.get;\n\n const confectGeneratedDirectory = path.join(\n confectDirectory,\n GENERATED_DIRNAME,\n );\n const generatedComponentsPath = yield* GENERATED_COMPONENTS_PATH;\n const componentsPath = path.join(confectDirectory, generatedComponentsPath);\n\n const convexConfigPath = path.join(\n convexDirectory,\n ConvexConfig.CONVEX_CONFIG_FILENAME,\n );\n\n const installedComponents = (yield* fs.exists(convexConfigPath))\n ? yield* ConvexConfig.discoverInstalledComponents(\n convexConfigPath,\n path.relative(projectRoot, convexConfigPath),\n (yield* ConvexDirectory.target).kind,\n )\n : [];\n\n const contents = yield* templates.components({\n components: Array.map(\n installedComponents,\n ({ name, componentDefinitionPath }) => ({\n name,\n typeImportPath: ConvexConfig.typeImportPath(\n path,\n componentDefinitionPath,\n confectGeneratedDirectory,\n ),\n }),\n ),\n });\n\n yield* writeFileStringAndLog(componentsPath, contents);\n});\n\nconst logGenerated = <E, R>(\n effect: Effect.Effect<\n Option.Option<{\n readonly change: \"Added\" | \"Modified\" | \"Unchanged\";\n readonly convexFilePath: string;\n }>,\n E,\n R\n >,\n) =>\n effect.pipe(\n Effect.tap(\n Option.match({\n onNone: () => Effect.void,\n onSome: ({ change, convexFilePath }) =>\n Match.value(change).pipe(\n Match.when(\"Added\", () => logFileAdded(convexFilePath)),\n Match.when(\"Modified\", () => logFileModified(convexFilePath)),\n Match.when(\"Unchanged\", () => Effect.void),\n Match.exhaustive,\n ),\n }),\n ),\n );\n\n/**\n * Test-only imports never enter the runtime schema or function wrappers.\n */\nconst quote = (value: string) => JSON.stringify(value);\n\nconst generateTesting = Effect.fnUntraced(function* (app: App.Any) {\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const convexDirectory = yield* ConvexDirectory.get;\n const generated = path.join(confectDirectory, \"_generated\");\n const relative = (file: string) => {\n const value = path.relative(generated, file).split(path.sep).join(\"/\");\n return value.startsWith(\".\") ? value : `./${value}`;\n };\n const imports = [\n 'import schema from \"./schema\";',\n 'import convexSchema from \"./convexSchema\";',\n ];\n const moduleMap = Effect.fnUntraced(function* (directory: string) {\n const files = (yield* fs.readDirectory(directory, { recursive: true }))\n .filter(\n (file) =>\n /\\.[cm]?[jt]s$/.test(file) &&\n !file.endsWith(\".d.ts\") &&\n !file.split(path.sep).includes(\"_generated\") &&\n !file.includes(\".config.\"),\n )\n .sort();\n return `{ \"_generated/testing.ts\": () => Promise.resolve({}),\\n${files\n .map((file) => {\n const specifier = relative(path.join(directory, file));\n return `${quote(file.split(path.sep).join(\"/\"))}: () => import(${quote(specifier.replace(/\\.[cm]?[jt]s$/, \"\"))}),`;\n })\n .join(\"\\n\")}\\n}`;\n });\n const components: Array<string> = [];\n const httpMounts: Array<string> = [];\n const kits = new Map<string, string>();\n const visit = Effect.fnUntraced(function* (\n directory: string,\n prefix: string,\n kind: \"app\" | \"component\",\n parentHttpPrefix: string | undefined,\n ): Effect.fn.Return<\n void,\n | PlatformError.PlatformError\n | BuildError\n | CodegenError.InvalidConvexConfigError,\n FileSystem.FileSystem | Path.Path\n > {\n const config = path.join(directory, ConvexConfig.CONVEX_CONFIG_FILENAME);\n if (!(yield* fs.exists(config))) return;\n const installed = yield* ConvexConfig.discoverInstalledComponents(\n config,\n relative(config),\n kind,\n );\n for (const component of installed) {\n const name = prefix + component.name;\n const resolved = path.isAbsolute(component.componentDefinitionPath)\n ? component.componentDefinitionPath\n : path.dirname(\n yield* ConvexConfig.resolveDefinition(\n `${component.componentDefinitionPath}/convex.config`,\n config,\n path,\n ).pipe(\n Effect.fromOption,\n Effect.mapError(\n () =>\n new CodegenError.InvalidConvexConfigError({\n configPath: relative(config),\n reason: `Cannot resolve component ${component.componentDefinitionPath} for testing.`,\n }),\n ),\n ),\n );\n const localPrefix =\n prefix === \"\"\n ? App.mounts(app).find((mount) => mount.name === component.name)\n ?.httpPrefix\n : component.httpPrefix;\n const httpPrefix =\n parentHttpPrefix === undefined || localPrefix === undefined\n ? undefined\n : `${parentHttpPrefix.replace(/\\/+$/, \"\")}${localPrefix}`.replace(\n /\\/+$/,\n \"\",\n ) || \"/\";\n if (\n httpPrefix !== undefined &&\n ((yield* fs.exists(path.join(resolved, \"http.ts\"))) ||\n (yield* fs.exists(path.join(resolved, \"http.js\"))))\n ) {\n httpMounts.push(\n `{ componentPath: ${quote(name)}, httpPrefix: ${quote(httpPrefix)} }`,\n );\n }\n let identifier = kits.get(resolved);\n if (identifier === undefined) {\n identifier = `component${kits.size}`;\n kits.set(resolved, identifier);\n imports.push(\n `import ${identifier}Schema from ${quote(relative(path.join(resolved, \"schema\")))};`,\n );\n imports.push(\n `const ${identifier} = { schema: ${identifier}Schema, modules: ${yield* moduleMap(resolved)} };`,\n );\n }\n components.push(`${quote(name)}: ${identifier},`);\n yield* visit(resolved, `${name}/`, \"component\", httpPrefix);\n }\n });\n yield* visit(convexDirectory, \"\", (yield* ConvexDirectory.target).kind, \"\");\n yield* writeFileStringAndLog(\n path.join(generated, \"testing.ts\"),\n [\n \"// Generated by `confect codegen`. Test-only; do not import in backend functions.\",\n ...imports,\n `export default { httpMounts: [${httpMounts.join(\",\")}], schema, convexSchema, modules: ${yield* moduleMap(convexDirectory)}, components: {${components.join(\"\\n\")}} };`,\n ].join(\"\\n\"),\n );\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"codegen.mjs","names":["DirectoryOptions.flags","CodegenError.tapAndLog","DirectoryOptions.layer","TableModule.discover","TableModule.validate","GenerationSnapshot.fromLoadedLeaves","FunctionModule.generateFunctions","EntryPoint.planDeclarations","GenerationSnapshot.update","FunctionModule.applyFunctionPlan","GenerationSnapshot.diff","CodegenError.ComponentNodeGroupError","ConvexConfig.componentName","ConvexConfig.CONVEX_CONFIG_FILENAME","Bundler.bundle","CodegenError.CallbackPrefixError","CodegenError.InvalidConvexConfigError","templates.componentContract","templates.assembledSpec","templates.registeredFunctionsForGroup","FunctionPaths.make","TableModule.TABLES_DIRNAME","templates.id","templates.tableWrapper","templates.runtimeSchema","templates.convexSchema","templates.schema","templates.services","DocName.fromTableName","CodegenError.ConflictingDocNameError","templates.docs","templates.refs","ConvexConfig.discoverInstalledComponents","templates.components","ConvexConfig.typeImportPath","ConvexConfig.resolveDefinition","Bundler.resolveModule"],"sources":["../../src/confect/codegen.ts"],"sourcesContent":["import { App, Callback, Env, type GroupSpec, Spec } from \"@confect/core\";\nimport * as Command from \"effect/cli/Command\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Path from \"effect/Path\";\nimport * as Array from \"effect/Array\";\nimport * as Effect from \"effect/Effect\";\nimport * as Result from \"effect/Result\";\nimport type * as PlatformError from \"effect/PlatformError\";\nimport type { BuildError } from \"../BuildError\";\nimport { pipe } from \"effect/Function\";\nimport * as HashSet from \"effect/HashSet\";\nimport * as Match from \"effect/Match\";\nimport * as Option from \"effect/Option\";\nimport * as Record from \"effect/Record\";\nimport type * as Scope from \"effect/Scope\";\nimport * as Bundler from \"../Bundler\";\nimport { fromBundlerError } from \"../BuildError\";\nimport * as CodegenError from \"../CodegenError\";\nimport { LegacySchemaFileError } from \"../CodegenError\";\nimport { ConfectDirectory } from \"../ConfectDirectory\";\nimport * as ConvexConfig from \"../ConvexConfig\";\nimport { ConvexDirectory } from \"../ConvexDirectory\";\nimport * as DirectoryOptions from \"../DirectoryOptions\";\nimport * as DocName from \"../DocName\";\nimport * as FunctionPaths from \"../FunctionPaths\";\nimport * as FunctionModule from \"../FunctionModule\";\nimport * as GenerationSnapshot from \"../GenerationSnapshot\";\nimport * as EntryPoint from \"../EntryPoint\";\nimport type { ImplModulePath } from \"../ImplModulePath\";\nimport {\n implPathForSpec,\n loadAll,\n registeredFunctionsRelativePath,\n validateAllImpls,\n withImplFiles,\n type LeafModule,\n type LoadedLeafModule,\n} from \"../LeafModule\";\nimport {\n logFileAdded,\n logFileModified,\n logFileRemoved,\n logPending,\n logSuccess,\n logWarn,\n} from \"../log\";\nimport { ProjectRoot } from \"../ProjectRoot\";\nimport { preserveComponentOutput } from \"../Rollback\";\nimport { assemblyNodesFromLeaves } from \"../SpecAssemblyNode\";\nimport * as TableModule from \"../TableModule\";\nimport * as templates from \"../templates\";\nimport {\n generateAuthConfig,\n generateCrons,\n generateHttp,\n removePathIfExists,\n toModuleImportPath,\n touchConvexSchema,\n writeFileStringAndLog,\n} from \"../utils\";\nimport { syncDeclaration, syncDeclaredHttp } from \"./declaration\";\n\nconst GENERATED_DIRNAME = \"_generated\";\n\nconst isComponent = Effect.map(\n ConvexDirectory.target,\n (target) => target.kind === \"component\",\n);\n\nconst GENERATED_SPEC_PATH = Effect.map(Path.Path, (path) =>\n path.join(GENERATED_DIRNAME, \"spec.ts\"),\n);\nconst GENERATED_SCHEMA_PATH = Effect.map(Path.Path, (path) =>\n path.join(GENERATED_DIRNAME, \"schema.ts\"),\n);\nconst GENERATED_CONVEX_SCHEMA_PATH = Effect.map(Path.Path, (path) =>\n path.join(GENERATED_DIRNAME, \"convexSchema.ts\"),\n);\nconst GENERATED_ID_PATH = Effect.map(Path.Path, (path) =>\n path.join(GENERATED_DIRNAME, \"id.ts\"),\n);\nconst GENERATED_COMPONENTS_PATH = Effect.map(Path.Path, (path) =>\n path.join(GENERATED_DIRNAME, \"components.ts\"),\n);\nconst GENERATED_TABLES_DIRNAME = Effect.map(Path.Path, (path) =>\n path.join(GENERATED_DIRNAME, \"tables\"),\n);\n\nconst LEGACY_PATHS = Effect.gen(function* () {\n const path = yield* Path.Path;\n\n return [\n \"spec.ts\",\n \"nodeSpec.ts\",\n \"impl.ts\",\n \"nodeImpl.ts\",\n path.join(GENERATED_DIRNAME, \"registeredFunctions.ts\"),\n path.join(GENERATED_DIRNAME, \"nodeRegisteredFunctions.ts\"),\n path.join(GENERATED_DIRNAME, \"impl.ts\"),\n path.join(GENERATED_DIRNAME, \"nodeImpl.ts\"),\n // `_generated/nodeSpec.ts` is not part of the generated output (all groups\n // live in `_generated/spec.ts`); delete any copy left by an older version.\n path.join(GENERATED_DIRNAME, \"nodeSpec.ts\"),\n ];\n});\n\nexport const codegen = Command.make(\"codegen\", DirectoryOptions.flags, () =>\n Effect.gen(function* () {\n yield* logPending(\"Performing initial sync…\");\n yield* codegenHandler.pipe(\n Effect.asVoid,\n Effect.tap(() => logSuccess(\"Generated files are up-to-date\")),\n CodegenError.tapAndLog,\n );\n }),\n).pipe(\n Command.provide(DirectoryOptions.layer),\n Command.withDescription(\n \"Generate `confect/_generated` files and the contents of the `convex` directory (except `tsconfig.json`, and `convex.config.ts` unless `confect/app.ts` declares the backend)\",\n ),\n);\n\nconst runCodegen = Effect.gen(function* () {\n yield* validateComponentConfiguration;\n yield* generateConfectGeneratedDirectory;\n // A declared backend's `convex.config.ts` and manifest come first: the\n // components registry below reads the config, and nothing may validate\n // against a manifest the current declaration did not produce.\n const declared = yield* syncDeclaration;\n // Reject a legacy `confect/schema.ts` up front so the user-facing\n // migration message surfaces before any bundler error from impl\n // validation (each impl imports `_generated/schema.ts`).\n yield* rejectLegacySchemaFile;\n // List `confect/tables/*.ts` (filename-only—no bundling yet) so the\n // `_generated/id.ts` constructor can be emitted *before* we bundle any\n // user-authored table module. Tables import from `_generated/id.ts` for\n // cross-table id refs, so it must exist on disk first.\n const tableModules = yield* TableModule.discover;\n yield* warnIfNoTables(tableModules);\n yield* generateIdConstructor(tableModules);\n // Tables and specs can use bound component IDs and schemas, so their\n // imports need the registry even on a project's first codegen run.\n yield* generateComponents;\n yield* validateCallbackPrefixes(declared);\n // Now that `_generated/id.ts` is on disk, bundle each table module and\n // check its default export is an `UnnamedTable`. Surface diagnostics\n // here (rather than later) so they appear before impl-validation noise.\n yield* TableModule.validate(tableModules);\n yield* validateNoDocNameCollisions(tableModules);\n yield* generateTableWrappers(tableModules);\n yield* removeObsoleteTableWrappers(tableModules);\n yield* generateRuntimeSchema(tableModules);\n const leaves = yield* loadAll;\n yield* rejectComponentNodeGroups(leaves);\n yield* removeLegacyFiles;\n const snapshot = yield* Effect.fromResult(\n GenerationSnapshot.fromLoadedLeaves(leaves),\n );\n yield* generateAssembledSpecs(leaves);\n // `_generated/api.ts`/`nodeApi.ts` are no longer imported by generated or\n // impl code (impls take the database schema from `_generated/schema`\n // directly), so remove any copies left over from earlier versions before\n // impl validation runs.\n yield* Effect.all(\n [\n removeGeneratedApi,\n generateRefs,\n generateComponentContract(tableModules),\n removeGeneratedNodeApi,\n generateDocs(tableModules),\n generateServices,\n generateConvexSchema(tableModules),\n ],\n { concurrency: \"unbounded\" },\n );\n yield* validateAllImpls(leaves);\n yield* generateGroupRegisteredFunctions(leaves);\n yield* removeObsoleteRegisteredFunctions(leaves);\n const [functionPaths] = yield* Effect.all(\n [\n FunctionModule.generateFunctions(snapshot),\n generateConvexSchemaReexport,\n logGenerated(\n Option.match(declared, {\n onNone: () => generateHttp,\n onSome: syncDeclaredHttp,\n }),\n ),\n logGenerated(generateCrons),\n Option.isNone(declared)\n ? logGenerated(generateAuthConfig)\n : Effect.succeedNone,\n ],\n { concurrency: \"unbounded\" },\n );\n if (Option.isSome(declared)) yield* generateTesting(declared.value);\n return {\n functionPaths,\n snapshot,\n };\n});\n\nexport const generateWithSnapshot = runCodegen.pipe(\n Effect.withSpan(\"Cli.codegen\"),\n);\n\nexport const makeCodegenHandler = (\n duringRestore?: Effect.Effect<void, never, Scope.Scope>,\n) =>\n preserveComponentOutput(generateWithSnapshot, duringRestore).pipe(\n Effect.tap(() => touchConvexSchema),\n Effect.map(({ functionPaths }) => ({ functionPaths })),\n );\n\nexport const codegenHandler = makeCodegenHandler();\n\nexport const updateDeclarations = Effect.fn(\"Cli.updateDeclarations\")(\n function* (\n snapshot: GenerationSnapshot.GenerationSnapshot,\n declarations: Array.NonEmptyReadonlyArray<EntryPoint.Declaration>,\n affectedImpls: ReadonlyArray<ImplModulePath>,\n ) {\n const path = yield* Path.Path;\n const { paths, tables } = EntryPoint.planDeclarations(\n declarations,\n affectedImpls,\n path,\n );\n yield* TableModule.validate(tables);\n return yield* withImplFiles(paths, (leaves) =>\n Effect.gen(function* () {\n yield* rejectComponentNodeGroups(leaves);\n const next = yield* Effect.fromResult(\n GenerationSnapshot.update(snapshot, leaves),\n );\n yield* validateAllImpls(leaves);\n yield* generateGroupRegisteredFunctions(leaves);\n yield* FunctionModule.applyFunctionPlan(\n GenerationSnapshot.diff(snapshot, next),\n );\n return next;\n }),\n );\n },\n);\n\n// Convex components cannot run Node.js functions, at any nesting depth.\nconst validateComponentGroupRuntime = (\n group: GroupSpec.AnyWithProps,\n groupPath: string,\n specPath: string,\n): Result.Result<void, CodegenError.ComponentNodeGroupError> =>\n Result.gen(function* () {\n if (group.runtime === \"Node\") {\n return yield* Result.fail(\n new CodegenError.ComponentNodeGroupError({ specPath, groupPath }),\n );\n }\n for (const [name, child] of Object.entries(group.groups)) {\n yield* validateComponentGroupRuntime(\n child,\n `${groupPath}.${name}`,\n specPath,\n );\n }\n });\n\nconst rejectComponentNodeGroups = Effect.fnUntraced(function* (\n leaves: ReadonlyArray<LoadedLeafModule>,\n) {\n if ((yield* ConvexDirectory.target).kind === \"app\") return;\n yield* Effect.forEach(leaves, (leaf) =>\n Effect.fromResult(\n validateComponentGroupRuntime(\n leaf.spec,\n leaf.groupPathDot,\n leaf.relativePath,\n ),\n ),\n );\n});\n\nconst validateCallbackPrefixes = Effect.fnUntraced(function* (\n declared: Option.Option<App.Any>,\n) {\n if ((yield* ConvexDirectory.target).kind !== \"component\") return;\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const callbacksPath = path.join(yield* ConfectDirectory.get, \"callbacks.ts\");\n if (!(yield* fs.exists(callbacksPath))) return;\n const name = Option.isSome(declared)\n ? Env.name(App.env(declared.value))\n : yield* ConvexConfig.componentName(\n path.join(\n yield* ConvexDirectory.get,\n ConvexConfig.CONVEX_CONFIG_FILENAME,\n ),\n );\n const { module } = yield* Bundler.bundle(callbacksPath).pipe(\n Effect.mapError((error) => fromBundlerError(\"confect/callbacks.ts\", error)),\n );\n for (const contract of Object.values(module)) {\n if (Callback.isContract(contract) && !contract.id.startsWith(`${name}/`)) {\n return yield* new CodegenError.CallbackPrefixError({\n declarationPath: \"confect/callbacks.ts\",\n contractId: contract.id,\n componentName: name,\n });\n }\n }\n});\n\nconst validateComponentConfiguration = Effect.gen(function* () {\n return yield* Match.value((yield* ConvexDirectory.target).kind).pipe(\n Match.when(\"app\", () => Effect.void),\n Match.when(\"component\", () =>\n Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const authPath = path.join(confectDirectory, \"auth.ts\");\n if (yield* fs.exists(authPath)) {\n return yield* new CodegenError.InvalidConvexConfigError({\n configPath: authPath,\n reason:\n \"Components cannot configure application authentication. Pass identity explicitly through function arguments.\",\n });\n }\n }),\n ),\n Match.exhaustive,\n );\n});\n\nconst generateComponentContract = Effect.fnUntraced(function* (\n tables: ReadonlyArray<TableModule.TableModule>,\n) {\n return yield* Match.value((yield* ConvexDirectory.target).kind).pipe(\n Match.when(\"app\", () => Effect.void),\n Match.when(\"component\", () =>\n Effect.gen(function* () {\n const path = yield* Path.Path;\n const directory = yield* ConfectDirectory.get;\n const contents = yield* templates.componentContract({\n tableNames: Array.map(tables, (table) => table.tableName),\n });\n yield* writeFileStringAndLog(\n path.join(directory, GENERATED_DIRNAME, \"component.ts\"),\n contents,\n );\n }),\n ),\n Match.exhaustive,\n );\n});\n\nconst generateConfectGeneratedDirectory = Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n\n if (!(yield* fs.exists(path.join(confectDirectory, \"_generated\")))) {\n yield* fs.makeDirectory(path.join(confectDirectory, \"_generated\"), {\n recursive: true,\n });\n yield* logFileAdded(path.join(confectDirectory, \"_generated\") + \"/\");\n }\n});\n\nconst removeLegacyFiles = Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const legacyPaths = yield* LEGACY_PATHS;\n\n yield* Effect.forEach(\n legacyPaths,\n Effect.fnUntraced(function* (relativePath: string) {\n const absolutePath = path.join(confectDirectory, relativePath);\n if (yield* fs.exists(absolutePath)) {\n yield* removePathIfExists(absolutePath);\n yield* logFileRemoved(absolutePath);\n }\n }),\n );\n});\n\nconst generateAssembledSpecs = Effect.fnUntraced(function* (\n leaves: ReadonlyArray<LeafModule>,\n) {\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const generatedSpecPath = yield* GENERATED_SPEC_PATH;\n\n // A single assembled spec holds every group regardless of runtime—a Node\n // group's `makeNode()` lives in its imported leaf spec, so the assembled\n // file is runtime-agnostic. Always emit it (even empty) so downstream\n // readers (`loadGeneratedSpec`, `generateRefs`) always find a spec module.\n const nodes = assemblyNodesFromLeaves(leaves);\n const specContents = yield* templates.assembledSpec({ nodes });\n yield* writeFileStringAndLog(\n path.join(confectDirectory, generatedSpecPath),\n specContents,\n );\n});\n\nconst generateGroupRegisteredFunctions = Effect.fnUntraced(function* (\n leaves: ReadonlyArray<LoadedLeafModule>,\n) {\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n\n yield* Effect.forEach(\n leaves,\n Effect.fnUntraced(function* (leaf: LoadedLeafModule) {\n const registryRelativePath = yield* registeredFunctionsRelativePath(leaf);\n const registryPath = path.join(\n confectDirectory,\n \"_generated\",\n registryRelativePath,\n );\n const registryDir = path.dirname(registryPath);\n const fs = yield* FileSystem.FileSystem;\n if (!(yield* fs.exists(registryDir))) {\n yield* fs.makeDirectory(registryDir, { recursive: true });\n }\n\n const implRelativePath = yield* implPathForSpec(leaf.relativePath);\n const schemaImportPath = yield* toModuleImportPath(\n path.relative(\n path.dirname(registryPath),\n path.join(confectDirectory, \"_generated\", \"schema.ts\"),\n ),\n );\n // The group's own leaf spec (sibling of its impl), referenced\n // type-only by the registry to shape its returned record.\n const specImportPath = yield* toModuleImportPath(\n path.relative(\n path.dirname(registryPath),\n path.join(confectDirectory, leaf.relativePath),\n ),\n );\n const implImportPath = yield* toModuleImportPath(\n path.relative(\n path.dirname(registryPath),\n path.join(confectDirectory, implRelativePath),\n ),\n );\n\n const contents = yield* templates.registeredFunctionsForGroup({\n spec: leaf.spec,\n schemaImportPath,\n specImportPath,\n implImportPath,\n });\n\n yield* writeFileStringAndLog(registryPath, contents);\n }),\n );\n});\n\nconst removeObsoleteRegisteredFunctions = Effect.fnUntraced(function* (\n leaves: ReadonlyArray<LeafModule>,\n) {\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const registryRoot = path.join(\n confectDirectory,\n \"_generated\",\n \"registeredFunctions\",\n );\n\n if (!(yield* fs.exists(registryRoot))) {\n return;\n }\n\n const expected = new Set(\n yield* Effect.forEach(leaves, (leaf) =>\n registeredFunctionsRelativePath(leaf),\n ),\n );\n\n const existing = yield* fs.readDirectory(registryRoot, { recursive: true });\n yield* Effect.forEach(existing, (relativePath) => {\n if (path.extname(relativePath) !== \".ts\") {\n return Effect.void;\n }\n const normalized = path.join(\"registeredFunctions\", relativePath);\n if (!expected.has(normalized)) {\n return Effect.gen(function* () {\n const absolutePath = path.join(registryRoot, relativePath);\n if (yield* fs.exists(absolutePath)) {\n yield* removePathIfExists(absolutePath);\n yield* logFileRemoved(absolutePath);\n }\n });\n }\n return Effect.void;\n });\n});\n\nconst getGeneratedSpecPath = Effect.gen(function* () {\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const generatedSpecPath = yield* GENERATED_SPEC_PATH;\n return path.join(confectDirectory, generatedSpecPath);\n});\n\nconst loadGeneratedSpec = Effect.gen(function* () {\n const specPath = yield* getGeneratedSpecPath;\n const { module: specModule } = yield* Bundler.bundle(specPath);\n const spec = specModule.default;\n\n if (!Spec.isSpec(spec)) {\n return yield* Effect.die(\n new Error(\"_generated/spec.ts does not export a valid Spec\"),\n );\n }\n\n return spec;\n});\n\nconst emptyFunctionPaths = FunctionPaths.FunctionPaths.make(HashSet.empty());\n\nexport const loadPreviousFunctionPaths = Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n const specPath = yield* getGeneratedSpecPath;\n\n if (!(yield* fs.exists(specPath))) {\n return emptyFunctionPaths;\n }\n\n const specResult = yield* loadGeneratedSpec.pipe(Effect.result);\n\n return Result.match(specResult, {\n onFailure: () => emptyFunctionPaths,\n onSuccess: (spec) => FunctionPaths.make(spec),\n });\n});\n\n/**\n * Remove a now-obsolete `_generated/<name>.ts` if present (and log it), for\n * projects upgrading from a version that still emitted it.\n */\nconst removeObsoleteGeneratedFile = Effect.fnUntraced(function* (\n fileName: string,\n) {\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const filePath = path.join(confectDirectory, \"_generated\", fileName);\n\n if (yield* fs.exists(filePath)) {\n yield* removePathIfExists(filePath);\n yield* logFileRemoved(filePath);\n }\n});\n\n// `_generated/api.ts` is no longer imported by generated or impl code: impls\n// take the database schema (`_generated/schema`) directly, and per-group\n// registries reference the spec type-only. Remove any stale copy.\nconst removeGeneratedApi = removeObsoleteGeneratedFile(\"api.ts\");\n\n// `_generated/nodeApi.ts` is obsolete for the same reason.\nconst removeGeneratedNodeApi = removeObsoleteGeneratedFile(\"nodeApi.ts\");\n\n/**\n * The user-authored `confect/schema.ts` is no longer supported: codegen now\n * owns both `_generated/schema.ts` (runtime) and `_generated/convexSchema.ts`\n * (deploy), derived from a single scan of `confect/tables/*.ts`. Detect a stray\n * file and fail with a clear migration message—leaving it in place would\n * silently shadow the codegen-owned\n * `_generated/schema.ts`/`_generated/convexSchema.ts`.\n */\nconst rejectLegacySchemaFile = Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const legacyPath = path.join(confectDirectory, \"schema.ts\");\n\n if (yield* fs.exists(legacyPath)) {\n return yield* new LegacySchemaFileError({ schemaPath: \"schema.ts\" });\n }\n});\n\n/**\n * Surface a yellow `⚠` warning when codegen sees no tables—either the\n * `confect/tables/` directory is missing or it contains no `.ts` files.\n * Generation still succeeds (emitting an empty `DatabaseSchema` and\n * `defineSchema({})`), since action-only/table-free Confect backends are\n * legal—but the warning catches the much more common case of a typoed directory\n * or files placed under the wrong root.\n */\nconst warnIfNoTables = (\n tableModules: ReadonlyArray<TableModule.TableModule>,\n) =>\n tableModules.length === 0\n ? logWarn(\n `No tables discovered in \\`confect/${TableModule.TABLES_DIRNAME}/\\`. ` +\n `Generating an empty schema; add a \\`Table.make(...)\\` module under that ` +\n `directory unless this backend is intentionally tables-free.`,\n )\n : Effect.void;\n\nconst tableModuleBindings = Effect.fnUntraced(function* (\n tableModules: ReadonlyArray<TableModule.TableModule>,\n generatedFilePath: string,\n) {\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const generatedDir = path.dirname(generatedFilePath);\n\n const generatedTablesDirname = yield* GENERATED_TABLES_DIRNAME;\n\n return yield* Effect.forEach(\n tableModules,\n Effect.fnUntraced(function* (tableModule: TableModule.TableModule) {\n const wrapperAbsolutePath = path.join(\n confectDirectory,\n generatedTablesDirname,\n `${tableModule.tableName}.ts`,\n );\n const importPath = yield* toModuleImportPath(\n path.relative(generatedDir, wrapperAbsolutePath),\n );\n return {\n importPath,\n tableName: tableModule.tableName,\n };\n }),\n );\n});\n\nconst generateIdConstructor = Effect.fnUntraced(function* (\n tableModules: ReadonlyArray<TableModule.TableModule>,\n) {\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const generatedIdPath = yield* GENERATED_ID_PATH;\n const idPath = path.join(confectDirectory, generatedIdPath);\n\n const tableNames = Array.map(\n tableModules,\n (tableModule) => tableModule.tableName,\n );\n const contents = yield* Match.value(yield* ConvexDirectory.target).pipe(\n Match.when({ kind: \"app\" }, () => templates.id({ tableNames })),\n Match.when({ kind: \"component\" }, ({ scope }) =>\n templates.id({ tableNames, scope }),\n ),\n Match.exhaustive,\n );\n\n yield* writeFileStringAndLog(idPath, contents);\n});\n\nconst generateTableWrappers = Effect.fnUntraced(function* (\n tableModules: ReadonlyArray<TableModule.TableModule>,\n) {\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const generatedTablesDirname = yield* GENERATED_TABLES_DIRNAME;\n const wrappersDir = path.join(confectDirectory, generatedTablesDirname);\n\n if (!(yield* fs.exists(wrappersDir))) {\n yield* fs.makeDirectory(wrappersDir, { recursive: true });\n }\n\n yield* Effect.forEach(\n tableModules,\n Effect.fnUntraced(function* (tableModule: TableModule.TableModule) {\n const wrapperPath = path.join(\n confectDirectory,\n generatedTablesDirname,\n `${tableModule.tableName}.ts`,\n );\n const unnamedAbsolutePath = path.join(\n confectDirectory,\n tableModule.relativePath,\n );\n const unnamedImportPath = yield* toModuleImportPath(\n path.relative(path.dirname(wrapperPath), unnamedAbsolutePath),\n );\n const contents = yield* templates.tableWrapper({\n tableName: tableModule.tableName,\n unnamedImportPath,\n component: yield* isComponent,\n });\n yield* writeFileStringAndLog(wrapperPath, contents);\n }),\n { concurrency: \"unbounded\" },\n );\n});\n\n/**\n * Remove any stale `_generated/tables/*.ts` wrapper whose source table has been\n * deleted or renamed. Mirrors `removeObsoleteRegisteredFunctions` for the\n * wrapper directory.\n */\nconst removeObsoleteTableWrappers = Effect.fnUntraced(function* (\n tableModules: ReadonlyArray<TableModule.TableModule>,\n) {\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const generatedTablesDirname = yield* GENERATED_TABLES_DIRNAME;\n const wrappersDir = path.join(confectDirectory, generatedTablesDirname);\n\n if (!(yield* fs.exists(wrappersDir))) {\n return;\n }\n\n const expected = new Set(\n Array.map(tableModules, (tableModule) => `${tableModule.tableName}.ts`),\n );\n const existing = yield* fs.readDirectory(wrappersDir, { recursive: true });\n yield* Effect.forEach(existing, (entry) => {\n if (path.extname(entry) !== \".ts\") {\n return Effect.void;\n }\n if (!expected.has(entry)) {\n return Effect.gen(function* () {\n const absolutePath = path.join(wrappersDir, entry);\n if (yield* fs.exists(absolutePath)) {\n yield* removePathIfExists(absolutePath);\n yield* logFileRemoved(absolutePath);\n }\n });\n }\n return Effect.void;\n });\n});\n\nconst generateRuntimeSchema = Effect.fnUntraced(function* (\n tableModules: ReadonlyArray<TableModule.TableModule>,\n) {\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const generatedSchemaPath = yield* GENERATED_SCHEMA_PATH;\n const schemaPath = path.join(confectDirectory, generatedSchemaPath);\n\n const bindings = yield* tableModuleBindings(tableModules, schemaPath);\n const contents = yield* templates.runtimeSchema({\n tableModules: bindings,\n component: yield* isComponent,\n });\n\n yield* writeFileStringAndLog(schemaPath, contents);\n});\n\nconst generateConvexSchema = Effect.fnUntraced(function* (\n tableModules: ReadonlyArray<TableModule.TableModule>,\n) {\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const generatedConvexSchemaPath = yield* GENERATED_CONVEX_SCHEMA_PATH;\n const convexSchemaPath = path.join(\n confectDirectory,\n generatedConvexSchemaPath,\n );\n\n const bindings = yield* tableModuleBindings(tableModules, convexSchemaPath);\n const contents = yield* templates.convexSchema({ tableModules: bindings });\n\n yield* writeFileStringAndLog(convexSchemaPath, contents);\n});\n\nconst generateConvexSchemaReexport = Effect.gen(function* () {\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const convexDirectory = yield* ConvexDirectory.get;\n const generatedConvexSchemaRelativePath = yield* GENERATED_CONVEX_SCHEMA_PATH;\n\n const convexSchemaPath = path.join(convexDirectory, \"schema.ts\");\n const generatedConvexSchemaPath = path.join(\n confectDirectory,\n generatedConvexSchemaRelativePath,\n );\n\n const convexSchemaImportPath = yield* toModuleImportPath(\n path.relative(path.dirname(convexSchemaPath), generatedConvexSchemaPath),\n );\n\n const schemaContents = yield* templates.schema({\n convexSchemaImportPath,\n });\n\n yield* writeFileStringAndLog(convexSchemaPath, schemaContents);\n});\n\nconst generateServices = Effect.gen(function* () {\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n\n const confectGeneratedDirectory = path.join(confectDirectory, \"_generated\");\n\n const servicesPath = path.join(confectGeneratedDirectory, \"services.ts\");\n const generatedSchemaPath = yield* GENERATED_SCHEMA_PATH;\n const schemaImportPath = yield* toModuleImportPath(\n path.relative(\n path.dirname(servicesPath),\n path.join(confectDirectory, generatedSchemaPath),\n ),\n );\n\n const servicesContentsString = yield* templates.services({\n schemaImportPath,\n component: yield* isComponent,\n });\n\n yield* writeFileStringAndLog(servicesPath, servicesContentsString);\n});\n\n/**\n * Two tables whose names fold to the same PascalCase document type name (e.g.\n * `user_profiles` and `userProfiles` → `UserProfilesDoc`) would emit duplicate\n * interfaces in `_generated/docs.ts`. Catch that up front with a clear error\n * rather than letting `tsc` report a duplicate-identifier later.\n */\nconst validateNoDocNameCollisions = Effect.fnUntraced(function* (\n tableModules: ReadonlyArray<TableModule.TableModule>,\n) {\n const collisions = pipe(\n tableModules,\n Array.groupBy((tableModule) =>\n DocName.fromTableName(tableModule.tableName),\n ),\n Record.toEntries,\n Array.filter(([, group]) => group.length > 1),\n Array.map(([docName, group]) => ({\n docName,\n tableNames: Array.map(group, (tableModule) => tableModule.tableName),\n })),\n );\n\n if (Array.isReadonlyArrayNonEmpty(collisions)) {\n return yield* new CodegenError.ConflictingDocNameError({ collisions });\n }\n});\n\nconst generateDocs = Effect.fnUntraced(function* (\n tableModules: ReadonlyArray<TableModule.TableModule>,\n) {\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n\n const confectGeneratedDirectory = path.join(confectDirectory, \"_generated\");\n\n const docsPath = path.join(confectGeneratedDirectory, \"docs.ts\");\n const generatedSchemaPath = yield* GENERATED_SCHEMA_PATH;\n const schemaImportPath = yield* toModuleImportPath(\n path.relative(\n path.dirname(docsPath),\n path.join(confectDirectory, generatedSchemaPath),\n ),\n );\n\n const docsContentsString = yield* templates.docs({\n schemaImportPath,\n tables: Array.map(tableModules, (tableModule) => ({\n tableName: tableModule.tableName,\n docName: DocName.fromTableName(tableModule.tableName),\n })),\n });\n\n yield* writeFileStringAndLog(docsPath, docsContentsString);\n});\n\nconst generateRefs = Effect.gen(function* () {\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n\n const confectGeneratedDirectory = path.join(confectDirectory, \"_generated\");\n const refsPath = path.join(confectGeneratedDirectory, \"refs.ts\");\n const refsDir = path.dirname(refsPath);\n const generatedSpecPath = yield* GENERATED_SPEC_PATH;\n\n const specImportPath = yield* toModuleImportPath(\n path.relative(refsDir, path.join(confectDirectory, generatedSpecPath)),\n );\n\n const refsContents = yield* templates.refs({ specImportPath });\n\n yield* writeFileStringAndLog(refsPath, refsContents);\n});\n\n/**\n * Generate `confect/_generated/components.ts`—the typed registry of Convex\n * components installed in `convex/convex.config.ts` (see\n * {@link templates.components}). The file is emitted even when there is no\n * `convex.config.ts` (as an empty registry) so the import surface stays stable.\n * It must exist before loading tables and specs because they may import bound\n * component IDs and schemas.\n */\nexport const generateComponents = Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const convexDirectory = yield* ConvexDirectory.get;\n const projectRoot = yield* ProjectRoot.get;\n\n const confectGeneratedDirectory = path.join(\n confectDirectory,\n GENERATED_DIRNAME,\n );\n const generatedComponentsPath = yield* GENERATED_COMPONENTS_PATH;\n const componentsPath = path.join(confectDirectory, generatedComponentsPath);\n\n const convexConfigPath = path.join(\n convexDirectory,\n ConvexConfig.CONVEX_CONFIG_FILENAME,\n );\n\n const installedComponents = (yield* fs.exists(convexConfigPath))\n ? yield* ConvexConfig.discoverInstalledComponents(\n convexConfigPath,\n path.relative(projectRoot, convexConfigPath),\n (yield* ConvexDirectory.target).kind,\n )\n : [];\n\n const contents = yield* templates.components({\n components: Array.map(\n installedComponents,\n ({ name, componentDefinitionPath }) => ({\n name,\n typeImportPath: ConvexConfig.typeImportPath(\n path,\n componentDefinitionPath,\n confectGeneratedDirectory,\n ),\n }),\n ),\n });\n\n yield* writeFileStringAndLog(componentsPath, contents);\n});\n\nconst logGenerated = <E, R>(\n effect: Effect.Effect<\n Option.Option<{\n readonly change: \"Added\" | \"Modified\" | \"Unchanged\";\n readonly convexFilePath: string;\n }>,\n E,\n R\n >,\n) =>\n effect.pipe(\n Effect.tap(\n Option.match({\n onNone: () => Effect.void,\n onSome: ({ change, convexFilePath }) =>\n Match.value(change).pipe(\n Match.when(\"Added\", () => logFileAdded(convexFilePath)),\n Match.when(\"Modified\", () => logFileModified(convexFilePath)),\n Match.when(\"Unchanged\", () => Effect.void),\n Match.exhaustive,\n ),\n }),\n ),\n );\n\n/**\n * Test-only imports never enter the runtime schema or function wrappers.\n */\nconst quote = (value: string) => JSON.stringify(value);\n\nconst generateTesting = Effect.fnUntraced(function* (app: App.Any) {\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const confectDirectory = yield* ConfectDirectory.get;\n const convexDirectory = yield* ConvexDirectory.get;\n const generated = path.join(confectDirectory, \"_generated\");\n const relative = (file: string) => {\n const value = path.relative(generated, file).split(path.sep).join(\"/\");\n return value.startsWith(\".\") ? value : `./${value}`;\n };\n const imports = [\n 'import schema from \"./schema\";',\n 'import convexSchema from \"./convexSchema\";',\n ];\n const moduleMap = Effect.fnUntraced(function* (directory: string) {\n const files = (yield* fs.readDirectory(directory, { recursive: true }))\n .filter(\n (file) =>\n /\\.[cm]?[jt]s$/.test(file) &&\n !file.endsWith(\".d.ts\") &&\n !file.split(path.sep).includes(\"_generated\") &&\n !file.includes(\".config.\"),\n )\n .sort();\n return `{ \"_generated/testing.ts\": () => Promise.resolve({}),\\n${files\n .map((file) => {\n const specifier = relative(path.join(directory, file));\n return `${quote(file.split(path.sep).join(\"/\"))}: () => import(${quote(specifier.replace(/\\.[cm]?[jt]s$/, \"\"))}),`;\n })\n .join(\"\\n\")}\\n}`;\n });\n const components: Array<string> = [];\n const httpMounts: Array<string> = [];\n const kits = new Map<string, string>();\n const visit = Effect.fnUntraced(function* (\n directory: string,\n prefix: string,\n kind: \"app\" | \"component\",\n parentHttpPrefix: string | undefined,\n ): Effect.fn.Return<\n void,\n | PlatformError.PlatformError\n | BuildError\n | CodegenError.InvalidConvexConfigError,\n FileSystem.FileSystem | Path.Path\n > {\n const config = path.join(directory, ConvexConfig.CONVEX_CONFIG_FILENAME);\n if (!(yield* fs.exists(config))) return;\n const installed = yield* ConvexConfig.discoverInstalledComponents(\n config,\n relative(config),\n kind,\n );\n for (const component of installed) {\n const name = prefix + component.name;\n // A bare definition belongs to another package. Its directory is read\n // here but never written out; tests reach it through `<package>/test`.\n const fromPackage = !path.isAbsolute(component.componentDefinitionPath);\n const resolved = fromPackage\n ? path.dirname(\n yield* ConvexConfig.resolveDefinition(\n `${component.componentDefinitionPath}/convex.config`,\n config,\n path,\n ).pipe(\n Effect.fromOption,\n Effect.mapError(\n () =>\n new CodegenError.InvalidConvexConfigError({\n configPath: relative(config),\n reason: `Cannot resolve component ${component.componentDefinitionPath} for testing.`,\n }),\n ),\n ),\n )\n : component.componentDefinitionPath;\n const localPrefix =\n prefix === \"\"\n ? App.mounts(app).find((mount) => mount.name === component.name)\n ?.httpPrefix\n : component.httpPrefix;\n const httpPrefix =\n parentHttpPrefix === undefined || localPrefix === undefined\n ? undefined\n : `${parentHttpPrefix.replace(/\\/+$/, \"\")}${localPrefix}`.replace(\n /\\/+$/,\n \"\",\n ) || \"/\";\n if (\n httpPrefix !== undefined &&\n ((yield* fs.exists(path.join(resolved, \"http.ts\"))) ||\n (yield* fs.exists(path.join(resolved, \"http.js\"))))\n ) {\n httpMounts.push(\n `{ componentPath: ${quote(name)}, httpPrefix: ${quote(httpPrefix)} }`,\n );\n }\n let identifier = kits.get(resolved);\n if (identifier === undefined) {\n identifier = `component${kits.size}`;\n kits.set(resolved, identifier);\n if (fromPackage) {\n const testEntry = `${component.componentDefinitionPath}/test`;\n if (Option.isNone(Bundler.resolveModule(testEntry, config))) {\n return yield* new CodegenError.InvalidConvexConfigError({\n configPath: relative(config),\n reason: `the component package ${quote(component.componentDefinitionPath)} has no ${quote(testEntry)} export. Tests register a component from another package through that entry's \\`register(t, name)\\`.`,\n });\n }\n imports.push(\n `import { register as ${identifier}Register } from ${quote(testEntry)};`,\n );\n imports.push(\n `const ${identifier} = { register: ${identifier}Register };`,\n );\n } else {\n imports.push(\n `import ${identifier}Schema from ${quote(relative(path.join(resolved, \"schema\")))};`,\n );\n imports.push(\n `const ${identifier} = { schema: ${identifier}Schema, modules: ${yield* moduleMap(resolved)} };`,\n );\n }\n }\n components.push(`${quote(name)}: ${identifier},`);\n // A package's `register` installs its own children.\n if (!fromPackage) {\n yield* visit(resolved, `${name}/`, \"component\", httpPrefix);\n }\n }\n });\n yield* visit(convexDirectory, \"\", (yield* ConvexDirectory.target).kind, \"\");\n yield* writeFileStringAndLog(\n path.join(generated, \"testing.ts\"),\n [\n \"// Generated by `confect codegen`. Test-only; do not import in backend functions.\",\n ...imports,\n `export default { httpMounts: [${httpMounts.join(\",\")}], schema, convexSchema, modules: ${yield* moduleMap(convexDirectory)}, components: {${components.join(\"\\n\")}} };`,\n ].join(\"\\n\"),\n );\n});\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gaganref/confect-cli",
|
|
3
|
-
"version": "10.3.1-fork.
|
|
3
|
+
"version": "10.3.1-fork.4",
|
|
4
4
|
"dependencies": {
|
|
5
5
|
"@effect/platform-node": "^4.0.4",
|
|
6
6
|
"bundle-require": "^5.1.0",
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
"exsolve": "^1.1.3"
|
|
10
10
|
},
|
|
11
11
|
"peerDependencies": {
|
|
12
|
-
"@confect/core": "npm:@gaganref/confect-core@10.3.1-fork.
|
|
13
|
-
"@confect/server": "npm:@gaganref/confect-server@10.3.1-fork.
|
|
12
|
+
"@confect/core": "npm:@gaganref/confect-core@10.3.1-fork.4",
|
|
13
|
+
"@confect/server": "npm:@gaganref/confect-server@10.3.1-fork.4",
|
|
14
14
|
"effect": "^4.0.4"
|
|
15
15
|
},
|
|
16
16
|
"description": "Developer tooling for codegen and sync",
|