feat(orchestration,modules-sdk): options autoCreateServiceNameAlias (#6622)

What:
 Remote joiner options to register service name declared on joiner configs as alias. Default is true, Remote Query in modules-sdk sets it false.
This commit is contained in:
Carlos R. L. Rodrigues authored and GitHub committed 2024-03-07 21:01:30 +00:00
1 parent 43399c8d0d
commit 4625bd1241
4 files changed
+61 -6

No files matched your search

+6
View File
@@ -0,0 +1,6 @@
---
"@medusajs/orchestration": patch
"@medusajs/modules-sdk": patch
---
Remote joiner options autoCreateServiceNameAlias
+2 -1
View File
@@ -58,7 +58,8 @@ export class RemoteQuery {
this.remoteJoiner = new RemoteJoiner( this.remoteJoiner = new RemoteJoiner(
servicesConfig_ as JoinerServiceConfig[], servicesConfig_ as JoinerServiceConfig[],
this.remoteFetchData.bind(this) this.remoteFetchData.bind(this),
{ autoCreateServiceNameAlias: false }
) )
} }
@@ -768,4 +768,38 @@ describe("RemoteJoiner", () => {
}, },
}) })
}) })
it("It shouldn't register the service name as an alias if option autoCreateServiceNameAlias is false", async () => {
const newJoiner = new RemoteJoiner(
serviceConfigs,
fetchServiceDataCallback,
{ autoCreateServiceNameAlias: false }
)
const query = {
service: "user",
fields: ["id", "name", "email"],
}
const data = await newJoiner.query(query)
expect(data).toEqual(
expect.arrayContaining([
{
id: 1,
name: "John Doe",
email: "johndoe@example.com",
},
])
)
const queryWithAlias = {
alias: "user",
fields: ["id", "name", "email"],
}
expect(newJoiner.query(queryWithAlias)).rejects.toThrowError(
`Service with alias "user" was not found.`
)
})
}) })
@@ -119,9 +119,16 @@ export class RemoteJoiner {
constructor( constructor(
private serviceConfigs: ModuleJoinerConfig[], private serviceConfigs: ModuleJoinerConfig[],
private remoteFetchData: RemoteFetchDataCallback private remoteFetchData: RemoteFetchDataCallback,
private options: {
autoCreateServiceNameAlias?: boolean
} = {}
) { ) {
this.serviceConfigs = this.buildReferences(serviceConfigs) this.options.autoCreateServiceNameAlias ??= true
this.serviceConfigs = this.buildReferences(
JSON.parse(JSON.stringify(serviceConfigs))
)
} }
public setFetchDataCallback(remoteFetchData: RemoteFetchDataCallback): void { public setFetchDataCallback(remoteFetchData: RemoteFetchDataCallback): void {
@@ -133,6 +140,7 @@ export class RemoteJoiner {
string, string,
{ fieldAlias; relationships: JoinerRelationship[] } { fieldAlias; relationships: JoinerRelationship[] }
> = new Map() > = new Map()
for (const service of serviceConfigs) { for (const service of serviceConfigs) {
if (this.serviceConfigCache.has(service.serviceName!)) { if (this.serviceConfigCache.has(service.serviceName!)) {
throw new Error(`Service "${service.serviceName}" is already defined.`) throw new Error(`Service "${service.serviceName}" is already defined.`)
@@ -152,7 +160,9 @@ export class RemoteJoiner {
service.alias = [service.alias] service.alias = [service.alias]
} }
service.alias.push({ name: service.serviceName! }) if (this.options.autoCreateServiceNameAlias) {
service.alias.push({ name: service.serviceName! })
}
// handle alias.name as array // handle alias.name as array
for (let idx = 0; idx < service.alias.length; idx++) { for (let idx = 0; idx < service.alias.length; idx++) {
@@ -197,7 +207,11 @@ export class RemoteJoiner {
serviceName: service.serviceName!, serviceName: service.serviceName!,
args, args,
}) })
this.cacheServiceConfig(serviceConfigs, undefined, alias.name) this.cacheServiceConfig(
serviceConfigs,
undefined,
alias.name as string
)
} }
this.cacheServiceConfig(serviceConfigs, service.serviceName) this.cacheServiceConfig(serviceConfigs, service.serviceName)
@@ -276,7 +290,7 @@ export class RemoteJoiner {
private cacheServiceConfig( private cacheServiceConfig(
serviceConfigs, serviceConfigs,
serviceName?: string, serviceName?: string,
serviceAlias?: string | string[] serviceAlias?: string
): void { ): void {
if (serviceAlias) { if (serviceAlias) {
const name = `alias_${serviceAlias}` const name = `alias_${serviceAlias}`