diff --git a/integration-tests/lts/dbschema/default.esdl b/integration-tests/lts/dbschema/default.esdl index 7ba6119e7..31f4046c4 100644 --- a/integration-tests/lts/dbschema/default.esdl +++ b/integration-tests/lts/dbschema/default.esdl @@ -209,3 +209,7 @@ module `💯💯💯` { module extra { global user_id -> uuid; } + +module User { + scalar type Status extending enum<"Active", "Disabled">; +} diff --git a/integration-tests/lts/dbschema/migrations/00023.edgeql b/integration-tests/lts/dbschema/migrations/00023.edgeql new file mode 100644 index 000000000..f17b5a01f --- /dev/null +++ b/integration-tests/lts/dbschema/migrations/00023.edgeql @@ -0,0 +1,6 @@ +CREATE MIGRATION m1tdrrz5jv7b4z7wo532wow2bdkq2oij5lkatt4vkqxfneise7j32q + ONTO m1rn5yebzwvfjxj5hvugtrug3o7jzhncvdhobjedw24wsni6v3l6ia +{ + CREATE MODULE User IF NOT EXISTS; + CREATE SCALAR TYPE User::Status EXTENDING enum; +}; diff --git a/integration-tests/lts/select.test.ts b/integration-tests/lts/select.test.ts index 7c2c56da2..1c48629d8 100644 --- a/integration-tests/lts/select.test.ts +++ b/integration-tests/lts/select.test.ts @@ -1368,4 +1368,11 @@ SELECT __scope_0_defaultPerson { > >(true); }); + + test("Reference default type and module with same name", async () => { + const query = e.select(e.User, () => ({ + active: e.User.Status.Active, + })); + await query.run(client); + }); }); diff --git a/packages/generate/src/edgeql-js/generateIndex.ts b/packages/generate/src/edgeql-js/generateIndex.ts index b88226084..afafc516e 100644 --- a/packages/generate/src/edgeql-js/generateIndex.ts +++ b/packages/generate/src/edgeql-js/generateIndex.ts @@ -92,12 +92,17 @@ export function generateIndex(params: GeneratorParams) { `const ExportDefault`, t`: ${spreadTypes.reverse().join(" & \n ")} & {`, ]); + const defaultSpreadTypes = new Set( + dir.getModule("default").getDefaultExportKeys() + ); index.indented(() => { for (const [moduleName, internalName] of topLevelModules) { if (dir.getModule(moduleName).isEmpty()) continue; - index.writeln([ - t`${genutil.quote(moduleName)}: typeof _${internalName};`, - ]); + let typeStr = `typeof _${internalName}`; + if (defaultSpreadTypes.has(moduleName)) { + typeStr += ` & typeof _default.${moduleName}`; + } + index.writeln([t`${genutil.quote(moduleName)}: ${typeStr};`]); } }); @@ -122,7 +127,10 @@ export function generateIndex(params: GeneratorParams) { allowFileExt: true, }); - index.writeln([r`${genutil.quote(moduleName)}: _${internalName},`]); + const valueStr = defaultSpreadTypes.has(moduleName) + ? `Object.freeze({ ..._${internalName}, ..._default.${moduleName} })` + : `_${internalName}`; + index.writeln([r`${genutil.quote(moduleName)}: ${valueStr},`]); } }); index.writeln([r`};`]);