{"version":3,"file":"generate.mjs","sources":["../../../../../src/cli/commands/openapi/generate.ts"],"sourcesContent":["import { compileStrapi, createStrapi } from '@strapi/core';\nimport * as openapi from '@strapi/openapi';\n\nimport type { Core } from '@strapi/types';\n\nimport chalk from 'chalk';\nimport fse from 'fs-extra';\nimport path from 'path';\n\nconst DEFAULT_OUTPUT = path.join(process.cwd(), 'specification.json');\n\ninterface CommandOptions {\n  output?: string;\n}\n\ninterface StrapiInfoConfig {\n  name: string;\n  version: string;\n}\n\nconst EXPERIMENTAL_MSG = chalk.yellow(`\n⚠️  The OpenAPI generation feature is currently experimental.\n    Its behavior and output might change in future releases without following semver.\n    Please report any issues you encounter on https://github.com/strapi/strapi/issues/new?template=BUG_REPORT.yml.\n`);\n\n/**\n * @experimental\n */\nconst action = async (options: CommandOptions) => {\n  console.warn(EXPERIMENTAL_MSG);\n\n  const filePath = options.output ?? DEFAULT_OUTPUT;\n  const app = await createStrapiApp();\n\n  const { document, durationMs } = openapi.generate(app, { type: 'content-api' });\n\n  writeDocumentToFile(document, filePath);\n  summarize(app, durationMs, filePath);\n\n  await teardownStrapiApp(app);\n};\n\nconst createStrapiApp = async (): Promise<Core.Strapi> => {\n  const appContext = await compileStrapi();\n  const app = createStrapi(appContext);\n\n  // Make sure to not log Strapi debug info\n  app.log.level = 'error';\n\n  // Load internals\n  await app.load();\n\n  // Make sure the routes are mounted before generating the specification\n  app.server.mount();\n\n  return app;\n};\n\nconst writeDocumentToFile = (document: unknown, filePath: string): void => {\n  fse.outputFileSync(filePath, JSON.stringify(document, null, 2));\n};\n\nconst teardownStrapiApp = async (app: Core.Strapi) => {\n  await app.destroy();\n};\n\nconst summarize = (app: Core.Strapi, durationMs: number, filePath: string): void => {\n  const cwd = process.cwd();\n  const relativeFilePath = path.relative(cwd, filePath);\n  const { name, version } = app.config.get<StrapiInfoConfig>('info');\n\n  const fName = chalk.cyan(name);\n  const fVersion = chalk.cyan(`v${version}`);\n  const fFile = chalk.magenta(relativeFilePath);\n  const fTime = chalk.green(`${durationMs}ms`);\n\n  console.log(\n    chalk.bold(\n      `Generated an OpenAPI specification for \"${fName} ${fVersion}\" at ${fFile} in ${fTime}`\n    )\n  );\n};\n\nexport { action };\n"],"names":["DEFAULT_OUTPUT","path","join","process","cwd","EXPERIMENTAL_MSG","chalk","yellow","action","options","console","warn","filePath","output","app","createStrapiApp","document","durationMs","openapi","generate","type","writeDocumentToFile","summarize","teardownStrapiApp","appContext","compileStrapi","createStrapi","log","level","load","server","mount","fse","outputFileSync","JSON","stringify","destroy","relativeFilePath","relative","name","version","config","get","fName","cyan","fVersion","fFile","magenta","fTime","green","bold"],"mappings":";;;;;;AASA,MAAMA,iBAAiBC,IAAAA,CAAKC,IAAI,CAACC,OAAAA,CAAQC,GAAG,EAAA,EAAI,oBAAA,CAAA;AAWhD,MAAMC,gBAAAA,GAAmBC,KAAAA,CAAMC,MAAM,CAAC;;;;AAItC,CAAC,CAAA;AAED;;IAGA,MAAMC,SAAS,OAAOC,OAAAA,GAAAA;AACpBC,IAAAA,OAAAA,CAAQC,IAAI,CAACN,gBAAAA,CAAAA;IAEb,MAAMO,QAAAA,GAAWH,OAAAA,CAAQI,MAAM,IAAIb,cAAAA;AACnC,IAAA,MAAMc,MAAM,MAAMC,eAAAA,EAAAA;IAElB,MAAM,EAAEC,QAAQ,EAAEC,UAAU,EAAE,GAAGC,OAAAA,CAAQC,QAAQ,CAACL,GAAAA,EAAK;QAAEM,IAAAA,EAAM;AAAc,KAAA,CAAA;AAE7EC,IAAAA,mBAAAA,CAAoBL,QAAAA,EAAUJ,QAAAA,CAAAA;AAC9BU,IAAAA,SAAAA,CAAUR,KAAKG,UAAAA,EAAYL,QAAAA,CAAAA;AAE3B,IAAA,MAAMW,iBAAAA,CAAkBT,GAAAA,CAAAA;AAC1B;AAEA,MAAMC,eAAAA,GAAkB,UAAA;AACtB,IAAA,MAAMS,aAAa,MAAMC,aAAAA,EAAAA;AACzB,IAAA,MAAMX,MAAMY,YAAAA,CAAaF,UAAAA,CAAAA;;IAGzBV,GAAAA,CAAIa,GAAG,CAACC,KAAK,GAAG,OAAA;;AAGhB,IAAA,MAAMd,IAAIe,IAAI,EAAA;;IAGdf,GAAAA,CAAIgB,MAAM,CAACC,KAAK,EAAA;IAEhB,OAAOjB,GAAAA;AACT,CAAA;AAEA,MAAMO,mBAAAA,GAAsB,CAACL,QAAAA,EAAmBJ,QAAAA,GAAAA;AAC9CoB,IAAAA,GAAAA,CAAIC,cAAc,CAACrB,QAAAA,EAAUsB,KAAKC,SAAS,CAACnB,UAAU,IAAA,EAAM,CAAA,CAAA,CAAA;AAC9D,CAAA;AAEA,MAAMO,oBAAoB,OAAOT,GAAAA,GAAAA;AAC/B,IAAA,MAAMA,IAAIsB,OAAO,EAAA;AACnB,CAAA;AAEA,MAAMd,SAAAA,GAAY,CAACR,GAAAA,EAAkBG,UAAAA,EAAoBL,QAAAA,GAAAA;IACvD,MAAMR,GAAAA,GAAMD,QAAQC,GAAG,EAAA;AACvB,IAAA,MAAMiC,gBAAAA,GAAmBpC,IAAAA,CAAKqC,QAAQ,CAAClC,GAAAA,EAAKQ,QAAAA,CAAAA;IAC5C,MAAM,EAAE2B,IAAI,EAAEC,OAAO,EAAE,GAAG1B,GAAAA,CAAI2B,MAAM,CAACC,GAAG,CAAmB,MAAA,CAAA;IAE3D,MAAMC,KAAAA,GAAQrC,KAAAA,CAAMsC,IAAI,CAACL,IAAAA,CAAAA;AACzB,IAAA,MAAMM,WAAWvC,KAAAA,CAAMsC,IAAI,CAAC,CAAC,CAAC,EAAEJ,OAAAA,CAAAA,CAAS,CAAA;IACzC,MAAMM,KAAAA,GAAQxC,KAAAA,CAAMyC,OAAO,CAACV,gBAAAA,CAAAA;AAC5B,IAAA,MAAMW,QAAQ1C,KAAAA,CAAM2C,KAAK,CAAC,CAAA,EAAGhC,UAAAA,CAAW,EAAE,CAAC,CAAA;AAE3CP,IAAAA,OAAAA,CAAQiB,GAAG,CACTrB,KAAAA,CAAM4C,IAAI,CACR,CAAC,wCAAwC,EAAEP,KAAAA,CAAM,CAAC,EAAEE,QAAAA,CAAS,KAAK,EAAEC,KAAAA,CAAM,IAAI,EAAEE,KAAAA,CAAAA,CAAO,CAAA,CAAA;AAG7F,CAAA;;;;"}