feat(): Auto generated types generation upon build (#14337)
* feat(): Auto generated types generation upon build * Create happy-steaks-cheer.md * test(): default types true * improvements * improvements * improvements * improvements * improvements
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import { Compiler } from "@medusajs/framework/build-tools"
|
||||
import { ContainerRegistrationKeys } from "@medusajs/framework/utils"
|
||||
import { initializeContainer } from "../loaders"
|
||||
import { generateTypes } from "./utils/generate-types"
|
||||
|
||||
export default async function build({
|
||||
directory,
|
||||
@@ -14,6 +15,12 @@ export default async function build({
|
||||
})
|
||||
const logger = container.resolve(ContainerRegistrationKeys.LOGGER)
|
||||
|
||||
await generateTypes({
|
||||
directory,
|
||||
container,
|
||||
logger,
|
||||
})
|
||||
|
||||
logger.info("Starting build...")
|
||||
const compiler = new Compiler(directory, logger)
|
||||
|
||||
@@ -32,7 +39,9 @@ export default async function build({
|
||||
promises.push(compiler.buildAppFrontend(adminOnly, tsConfig, bundler))
|
||||
const responses = await Promise.all(promises)
|
||||
|
||||
if (responses.every((response) => response === true)) {
|
||||
const buildSucceeded = responses.every((response) => response === true)
|
||||
|
||||
if (buildSucceeded) {
|
||||
process.exit(0)
|
||||
} else {
|
||||
process.exit(1)
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
import { LinkLoader, MedusaAppLoader } from "@medusajs/framework"
|
||||
import { MedusaModule } from "@medusajs/framework/modules-sdk"
|
||||
import {
|
||||
ContainerRegistrationKeys,
|
||||
FileSystem,
|
||||
generateContainerTypes,
|
||||
getResolvedPlugins,
|
||||
gqlSchemaToTypes,
|
||||
mergePluginModules,
|
||||
validateModuleName,
|
||||
} from "@medusajs/framework/utils"
|
||||
import { Logger, MedusaContainer } from "@medusajs/types"
|
||||
import path, { join } from "path"
|
||||
|
||||
export async function generateTypes({
|
||||
directory,
|
||||
container,
|
||||
logger,
|
||||
}: {
|
||||
directory: string
|
||||
container: MedusaContainer
|
||||
logger: Logger
|
||||
}) {
|
||||
logger.info("Generating types...")
|
||||
|
||||
const configModule = container.resolve(
|
||||
ContainerRegistrationKeys.CONFIG_MODULE
|
||||
)
|
||||
|
||||
const plugins = await getResolvedPlugins(directory, configModule, true)
|
||||
mergePluginModules(configModule, plugins)
|
||||
|
||||
Object.keys(configModule.modules ?? {}).forEach((key) => {
|
||||
validateModuleName(key)
|
||||
})
|
||||
|
||||
const linksSourcePaths = plugins.map((plugin) =>
|
||||
join(plugin.resolve, "links")
|
||||
)
|
||||
await new LinkLoader(linksSourcePaths, logger).load()
|
||||
|
||||
const { gqlSchema, modules } = await new MedusaAppLoader().load({
|
||||
registerInContainer: false,
|
||||
migrationOnly: true,
|
||||
})
|
||||
|
||||
const typesDirectory = path.join(directory, ".medusa/types")
|
||||
|
||||
/**
|
||||
* Cleanup existing types directory before creating new artifacts
|
||||
*/
|
||||
await new FileSystem(typesDirectory).cleanup({ recursive: true })
|
||||
|
||||
await generateContainerTypes(modules, {
|
||||
outputDir: typesDirectory,
|
||||
interfaceName: "ModuleImplementations",
|
||||
})
|
||||
logger.debug("Generated container types")
|
||||
|
||||
if (gqlSchema) {
|
||||
await gqlSchemaToTypes({
|
||||
outputDir: typesDirectory,
|
||||
filename: "query-entry-points",
|
||||
interfaceName: "RemoteQueryEntryPoints",
|
||||
schema: gqlSchema,
|
||||
joinerConfigs: MedusaModule.getAllJoinerConfigs(),
|
||||
})
|
||||
logger.debug("Generated modules types")
|
||||
}
|
||||
|
||||
logger.info("Types generated successfully")
|
||||
}
|
||||
Reference in New Issue
Block a user