@strapi/strapi
Version:
An open source headless CMS solution to create and manage your own API. It provides a powerful dashboard and features to make your life easier. Databases supported: MySQL, MariaDB, PostgreSQL, SQLite
1 lines • 4.92 kB
Source Map (JSON)
{"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,IAAKC,CAAAA,IAAI,CAACC,OAAAA,CAAQC,GAAG,EAAI,EAAA,oBAAA,CAAA;AAWhD,MAAMC,gBAAmBC,GAAAA,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,OAAQI,CAAAA,MAAM,IAAIb,cAAAA;AACnC,IAAA,MAAMc,MAAM,MAAMC,eAAAA,EAAAA;IAElB,MAAM,EAAEC,QAAQ,EAAEC,UAAU,EAAE,GAAGC,OAAAA,CAAQC,QAAQ,CAACL,GAAK,EAAA;QAAEM,IAAM,EAAA;AAAc,KAAA,CAAA;AAE7EC,IAAAA,mBAAAA,CAAoBL,QAAUJ,EAAAA,QAAAA,CAAAA;AAC9BU,IAAAA,SAAAA,CAAUR,KAAKG,UAAYL,EAAAA,QAAAA,CAAAA;AAE3B,IAAA,MAAMW,iBAAkBT,CAAAA,GAAAA,CAAAA;AAC1B;AAEA,MAAMC,eAAkB,GAAA,UAAA;AACtB,IAAA,MAAMS,aAAa,MAAMC,aAAAA,EAAAA;AACzB,IAAA,MAAMX,MAAMY,YAAaF,CAAAA,UAAAA,CAAAA;;IAGzBV,GAAIa,CAAAA,GAAG,CAACC,KAAK,GAAG,OAAA;;AAGhB,IAAA,MAAMd,IAAIe,IAAI,EAAA;;IAGdf,GAAIgB,CAAAA,MAAM,CAACC,KAAK,EAAA;IAEhB,OAAOjB,GAAAA;AACT,CAAA;AAEA,MAAMO,mBAAAA,GAAsB,CAACL,QAAmBJ,EAAAA,QAAAA,GAAAA;AAC9CoB,IAAAA,GAAAA,CAAIC,cAAc,CAACrB,QAAAA,EAAUsB,KAAKC,SAAS,CAACnB,UAAU,IAAM,EAAA,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,UAAoBL,EAAAA,QAAAA,GAAAA;IACvD,MAAMR,GAAAA,GAAMD,QAAQC,GAAG,EAAA;AACvB,IAAA,MAAMiC,gBAAmBpC,GAAAA,IAAAA,CAAKqC,QAAQ,CAAClC,GAAKQ,EAAAA,QAAAA,CAAAA;IAC5C,MAAM,EAAE2B,IAAI,EAAEC,OAAO,EAAE,GAAG1B,GAAI2B,CAAAA,MAAM,CAACC,GAAG,CAAmB,MAAA,CAAA;IAE3D,MAAMC,KAAAA,GAAQrC,KAAMsC,CAAAA,IAAI,CAACL,IAAAA,CAAAA;IACzB,MAAMM,QAAAA,GAAWvC,MAAMsC,IAAI,CAAC,CAAC,CAAC,EAAEJ,QAAQ,CAAC,CAAA;IACzC,MAAMM,KAAAA,GAAQxC,KAAMyC,CAAAA,OAAO,CAACV,gBAAAA,CAAAA;IAC5B,MAAMW,KAAAA,GAAQ1C,MAAM2C,KAAK,CAAC,CAAC,EAAEhC,UAAAA,CAAW,EAAE,CAAC,CAAA;AAE3CP,IAAAA,OAAAA,CAAQiB,GAAG,CACTrB,KAAAA,CAAM4C,IAAI,CACR,CAAC,wCAAwC,EAAEP,KAAAA,CAAM,CAAC,EAAEE,SAAS,KAAK,EAAEC,MAAM,IAAI,EAAEE,MAAM,CAAC,CAAA,CAAA;AAG7F,CAAA;;;;"}