@strapi/strapi 5.0.0-alpha.5 → 5.0.0-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands/build.js.map +1 -1
- package/dist/cli/commands/develop.js.map +1 -1
- package/dist/cli/commands/export/action.js.map +1 -1
- package/dist/cli/commands/import/action.js.map +1 -1
- package/dist/cli/commands/plugin/init/action.d.ts +1 -2
- package/dist/cli/commands/plugin/init/action.d.ts.map +1 -1
- package/dist/cli/commands/plugin/init/action.js.map +1 -1
- package/dist/cli/commands/plugin/init/files/server.js +15 -15
- package/dist/cli/commands/plugin/init/files/server.js.map +1 -1
- package/dist/cli/commands/plugin/verify.js.map +1 -1
- package/dist/cli/commands/plugin/watch.js.map +1 -1
- package/dist/cli/utils/data-transfer.d.ts +3 -3
- package/dist/cli/utils/data-transfer.d.ts.map +1 -1
- package/dist/cli/utils/data-transfer.js.map +1 -1
- package/dist/node/create-build-context.d.ts +3 -3
- package/dist/node/create-build-context.d.ts.map +1 -1
- package/dist/node/create-build-context.js.map +1 -1
- package/dist/node/develop.d.ts.map +1 -1
- package/dist/node/develop.js +6 -0
- package/dist/node/develop.js.map +1 -1
- package/dist/node/types.d.ts +2 -2
- package/dist/node/types.d.ts.map +1 -1
- package/dist/node/vite/watch.js.map +1 -1
- package/dist/node/webpack/watch.js.map +1 -1
- package/package.json +25 -23
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sources":["../../../src/cli/commands/build.ts"],"sourcesContent":["import { createCommand } from 'commander';\nimport type { StrapiCommand } from '../types';\n\nimport { build as nodeBuild, BuildOptions } from '../../node/build';\nimport { handleUnexpectedError } from '../../node/core/errors';\n\
|
|
1
|
+
{"version":3,"file":"build.js","sources":["../../../src/cli/commands/build.ts"],"sourcesContent":["import { createCommand } from 'commander';\nimport type { StrapiCommand } from '../types';\n\nimport { build as nodeBuild, BuildOptions } from '../../node/build';\nimport { handleUnexpectedError } from '../../node/core/errors';\n\ntype BuildCLIOptions = BuildOptions;\n\nconst action = async (options: BuildCLIOptions) => {\n try {\n if (options.bundler === 'webpack') {\n options.logger.warn(\n '[@strapi/strapi]: Using webpack as a bundler is deprecated. You should migrate to vite.'\n );\n }\n\n /**\n * ENFORCE NODE_ENV to production when building\n */\n process.env.NODE_ENV = process.env.NODE_ENV ?? 'production';\n\n if (process.env.NODE_ENV !== 'production') {\n options.logger.warn(\n '[@strapi/strapi]: The NODE_ENV is not set to production. This may result in unexpected behavior.'\n );\n }\n\n await nodeBuild(options);\n } catch (err) {\n handleUnexpectedError(err);\n }\n};\n\n/**\n * `$ strapi build`\n */\nconst command: StrapiCommand = ({ ctx }) => {\n return createCommand('build')\n .option('--bundler [bundler]', 'Bundler to use (webpack or vite)', 'vite')\n .option('-d, --debug', 'Enable debugging mode with verbose logs', false)\n .option('--minify', 'Minify the output', true)\n .option('--silent', \"Don't log anything\", false)\n .option('--sourcemap', 'Produce sourcemaps', false)\n .option('--stats', 'Print build statistics to the console', false)\n .description('Build the strapi admin app')\n .action(async (options: BuildCLIOptions) => {\n return action({ ...options, ...ctx });\n });\n};\n\nexport { command };\n"],"names":["nodeBuild","handleUnexpectedError","createCommand"],"mappings":";;;;;AAQA,MAAM,SAAS,OAAO,YAA6B;AAC7C,MAAA;AACE,QAAA,QAAQ,YAAY,WAAW;AACjC,cAAQ,OAAO;AAAA,QACb;AAAA,MAAA;AAAA,IAEJ;AAKA,YAAQ,IAAI,WAAW,QAAQ,IAAI,YAAY;AAE3C,QAAA,QAAQ,IAAI,aAAa,cAAc;AACzC,cAAQ,OAAO;AAAA,QACb;AAAA,MAAA;AAAA,IAEJ;AAEA,UAAMA,MAAAA,MAAU,OAAO;AAAA,WAChB,KAAK;AACZC,WAAA,sBAAsB,GAAG;AAAA,EAC3B;AACF;AAKA,MAAM,UAAyB,CAAC,EAAE,UAAU;AAC1C,SAAOC,UAAAA,cAAc,OAAO,EACzB,OAAO,uBAAuB,oCAAoC,MAAM,EACxE,OAAO,eAAe,2CAA2C,KAAK,EACtE,OAAO,YAAY,qBAAqB,IAAI,EAC5C,OAAO,YAAY,sBAAsB,KAAK,EAC9C,OAAO,eAAe,sBAAsB,KAAK,EACjD,OAAO,WAAW,yCAAyC,KAAK,EAChE,YAAY,4BAA4B,EACxC,OAAO,OAAO,YAA6B;AAC1C,WAAO,OAAO,EAAE,GAAG,SAAS,GAAG,IAAK,CAAA;AAAA,EAAA,CACrC;AACL;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"develop.js","sources":["../../../src/cli/commands/develop.ts"],"sourcesContent":["import { createCommand } from 'commander';\nimport cluster from 'node:cluster';\nimport type { StrapiCommand } from '../types';\nimport { develop as nodeDevelop, DevelopOptions } from '../../node/develop';\nimport { handleUnexpectedError } from '../../node/core/errors';\n\
|
|
1
|
+
{"version":3,"file":"develop.js","sources":["../../../src/cli/commands/develop.ts"],"sourcesContent":["import { createCommand } from 'commander';\nimport cluster from 'node:cluster';\nimport type { StrapiCommand } from '../types';\nimport { develop as nodeDevelop, DevelopOptions } from '../../node/develop';\nimport { handleUnexpectedError } from '../../node/core/errors';\n\ntype DevelopCLIOptions = DevelopOptions;\n\nconst action = async (options: DevelopCLIOptions) => {\n try {\n if (cluster.isPrimary) {\n if (options.bundler === 'webpack') {\n options.logger.warn(\n '[@strapi/strapi]: Using webpack as a bundler is deprecated. You should migrate to vite.'\n );\n }\n }\n\n await nodeDevelop(options);\n } catch (err) {\n handleUnexpectedError(err);\n }\n};\n\n/**\n * `$ strapi develop`\n */\nconst command: StrapiCommand = ({ ctx }) => {\n return createCommand('develop')\n .alias('dev')\n .option('--bundler [bundler]', 'Bundler to use (webpack or vite)', 'vite')\n .option('-d, --debug', 'Enable debugging mode with verbose logs', false)\n .option('--silent', \"Don't log anything\", false)\n .option('--polling', 'Watch for file changes in network directories', false)\n .option('--watch-admin', 'Watch the admin panel for hot changes', true)\n .option('--no-watch-admin', 'Do not watch the admin panel for hot changes')\n .option('--open', 'Open the admin in your browser', true)\n .description('Start your Strapi application in development mode')\n .action(async (options: DevelopCLIOptions) => {\n return action({ ...options, ...ctx });\n });\n};\n\nexport { command };\n"],"names":["cluster","nodeDevelop","handleUnexpectedError","createCommand"],"mappings":";;;;;;;;AAQA,MAAM,SAAS,OAAO,YAA+B;AAC/C,MAAA;AACF,QAAIA,iBAAAA,QAAQ,WAAW;AACjB,UAAA,QAAQ,YAAY,WAAW;AACjC,gBAAQ,OAAO;AAAA,UACb;AAAA,QAAA;AAAA,MAEJ;AAAA,IACF;AAEA,UAAMC,QAAAA,QAAY,OAAO;AAAA,WAClB,KAAK;AACZC,WAAA,sBAAsB,GAAG;AAAA,EAC3B;AACF;AAKA,MAAM,UAAyB,CAAC,EAAE,UAAU;AACnC,SAAAC,UAAA,cAAc,SAAS,EAC3B,MAAM,KAAK,EACX,OAAO,uBAAuB,oCAAoC,MAAM,EACxE,OAAO,eAAe,2CAA2C,KAAK,EACtE,OAAO,YAAY,sBAAsB,KAAK,EAC9C,OAAO,aAAa,iDAAiD,KAAK,EAC1E,OAAO,iBAAiB,yCAAyC,IAAI,EACrE,OAAO,oBAAoB,8CAA8C,EACzE,OAAO,UAAU,kCAAkC,IAAI,EACvD,YAAY,mDAAmD,EAC/D,OAAO,OAAO,YAA+B;AAC5C,WAAO,OAAO,EAAE,GAAG,SAAS,GAAG,IAAK,CAAA;AAAA,EAAA,CACrC;AACL;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.js","sources":["../../../../src/cli/commands/export/action.ts"],"sourcesContent":["import { isObject, isString, isFinite, toNumber } from 'lodash/fp';\nimport fs from 'fs-extra';\nimport chalk from 'chalk';\nimport type {
|
|
1
|
+
{"version":3,"file":"action.js","sources":["../../../../src/cli/commands/export/action.ts"],"sourcesContent":["import { isObject, isString, isFinite, toNumber } from 'lodash/fp';\nimport fs from 'fs-extra';\nimport chalk from 'chalk';\nimport type { Core } from '@strapi/types';\n\nimport {\n engine as engineDataTransfer,\n strapi as strapiDataTransfer,\n file as fileDataTransfer,\n} from '@strapi/data-transfer';\n\nimport {\n getDefaultExportName,\n buildTransferTable,\n DEFAULT_IGNORED_CONTENT_TYPES,\n createStrapiInstance,\n formatDiagnostic,\n loadersFactory,\n exitMessageText,\n abortTransfer,\n getTransferTelemetryPayload,\n setSignalHandler,\n} from '../../utils/data-transfer';\nimport { exitWith } from '../../utils/helpers';\n\nconst {\n providers: { createLocalFileDestinationProvider },\n} = fileDataTransfer;\nconst {\n providers: { createLocalStrapiSourceProvider },\n} = strapiDataTransfer;\n\nconst BYTES_IN_MB = 1024 * 1024;\n\ninterface CmdOptions {\n file?: string;\n encrypt?: boolean;\n key?: string;\n compress?: boolean;\n only?: (keyof engineDataTransfer.TransferGroupFilter)[];\n exclude?: (keyof engineDataTransfer.TransferGroupFilter)[];\n throttle?: number;\n maxSizeJsonl?: number;\n}\n\n/**\n * Export command.\n *\n * It transfers data from a local Strapi instance to a file\n *\n * @param {ExportCommandOptions} opts\n */\nexport default async (opts: CmdOptions) => {\n // Validate inputs from Commander\n if (!isObject(opts)) {\n exitWith(1, 'Could not parse command arguments');\n }\n\n const strapi = await createStrapiInstance();\n\n const source = createSourceProvider(strapi);\n const destination = createDestinationProvider(opts);\n\n const engine = engineDataTransfer.createTransferEngine(source, destination, {\n versionStrategy: 'ignore', // for an export to file, versionStrategy will always be skipped\n schemaStrategy: 'ignore', // for an export to file, schemaStrategy will always be skipped\n exclude: opts.exclude,\n only: opts.only,\n throttle: opts.throttle,\n transforms: {\n links: [\n {\n filter(link) {\n return (\n !DEFAULT_IGNORED_CONTENT_TYPES.includes(link.left.type) &&\n !DEFAULT_IGNORED_CONTENT_TYPES.includes(link.right.type)\n );\n },\n },\n ],\n entities: [\n {\n filter(entity) {\n return !DEFAULT_IGNORED_CONTENT_TYPES.includes(entity.type);\n },\n },\n ],\n },\n });\n\n engine.diagnostics.onDiagnostic(formatDiagnostic('export'));\n\n const progress = engine.progress.stream;\n\n const { updateLoader } = loadersFactory();\n\n progress.on(`stage::start`, ({ stage, data }) => {\n updateLoader(stage, data).start();\n });\n\n progress.on('stage::finish', ({ stage, data }) => {\n updateLoader(stage, data).succeed();\n });\n\n progress.on('stage::progress', ({ stage, data }) => {\n updateLoader(stage, data);\n });\n\n progress.on('transfer::start', async () => {\n console.log(`Starting export...`);\n\n await strapi.telemetry.send('didDEITSProcessStart', getTransferTelemetryPayload(engine));\n });\n\n let results: engineDataTransfer.ITransferResults<typeof source, typeof destination>;\n let outFile: string;\n try {\n // Abort transfer if user interrupts process\n setSignalHandler(() => abortTransfer({ engine, strapi }));\n\n results = await engine.transfer();\n outFile = results.destination?.file?.path ?? '';\n const outFileExists = await fs.pathExists(outFile);\n if (!outFileExists) {\n throw new engineDataTransfer.errors.TransferEngineTransferError(\n `Export file not created \"${outFile}\"`\n );\n }\n\n // Note: we need to await telemetry or else the process ends before it is sent\n await strapi.telemetry.send('didDEITSProcessFinish', getTransferTelemetryPayload(engine));\n\n try {\n const table = buildTransferTable(results.engine);\n console.log(table?.toString());\n } catch (e) {\n console.error('There was an error displaying the results of the transfer.');\n }\n\n console.log(`Export archive is in ${chalk.green(outFile)}`);\n exitWith(0, exitMessageText('export'));\n } catch {\n await strapi.telemetry.send('didDEITSProcessFail', getTransferTelemetryPayload(engine));\n exitWith(1, exitMessageText('export', true));\n }\n};\n\n/**\n * It creates a local strapi destination provider\n */\nconst createSourceProvider = (strapi: Core.LoadedStrapi) => {\n return createLocalStrapiSourceProvider({\n async getStrapi() {\n return strapi;\n },\n });\n};\n\n/**\n * It creates a local file destination provider based on the given options\n */\nconst createDestinationProvider = (opts: CmdOptions) => {\n const { file, compress, encrypt, key, maxSizeJsonl } = opts;\n\n const filepath = isString(file) && file.length > 0 ? file : getDefaultExportName();\n\n const maxSizeJsonlInMb = isFinite(toNumber(maxSizeJsonl))\n ? toNumber(maxSizeJsonl) * BYTES_IN_MB\n : undefined;\n\n return createLocalFileDestinationProvider({\n file: {\n path: filepath,\n maxSizeJsonl: maxSizeJsonlInMb,\n },\n encryption: {\n enabled: encrypt ?? false,\n key: encrypt ? key : undefined,\n },\n compression: {\n enabled: compress ?? false,\n },\n });\n};\n"],"names":["fileDataTransfer","strapiDataTransfer","isObject","exitWith","createStrapiInstance","engineDataTransfer","DEFAULT_IGNORED_CONTENT_TYPES","formatDiagnostic","loadersFactory","getTransferTelemetryPayload","setSignalHandler","abortTransfer","fs","buildTransferTable","chalk","exitMessageText","isString","getDefaultExportName","isFinite","toNumber"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.js","sources":["../../../../src/cli/commands/import/action.ts"],"sourcesContent":["import type {
|
|
1
|
+
{"version":3,"file":"action.js","sources":["../../../../src/cli/commands/import/action.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { isObject } from 'lodash/fp';\nimport chalk from 'chalk';\n\nimport {\n engine as engineDataTransfer,\n strapi as strapiDataTransfer,\n file as fileDataTransfer,\n} from '@strapi/data-transfer';\n\nimport {\n buildTransferTable,\n DEFAULT_IGNORED_CONTENT_TYPES,\n createStrapiInstance,\n formatDiagnostic,\n loadersFactory,\n exitMessageText,\n abortTransfer,\n getTransferTelemetryPayload,\n setSignalHandler,\n getDiffHandler,\n parseRestoreFromOptions,\n} from '../../utils/data-transfer';\nimport { exitWith } from '../../utils/helpers';\n\nconst {\n providers: { createLocalFileSourceProvider },\n} = fileDataTransfer;\n\nconst {\n providers: { createLocalStrapiDestinationProvider, DEFAULT_CONFLICT_STRATEGY },\n} = strapiDataTransfer;\n\nconst { createTransferEngine, DEFAULT_VERSION_STRATEGY, DEFAULT_SCHEMA_STRATEGY } =\n engineDataTransfer;\n\ninterface CmdOptions {\n file?: string;\n decompress?: boolean;\n decrypt?: boolean;\n key?: string;\n conflictStrategy?: 'restore';\n force?: boolean;\n only?: (keyof engineDataTransfer.TransferGroupFilter)[];\n exclude?: (keyof engineDataTransfer.TransferGroupFilter)[];\n throttle?: number;\n}\n\ntype EngineOptions = Parameters<typeof createTransferEngine>[2];\n\n/**\n * Import command.\n *\n * It transfers data from a file to a local Strapi instance\n */\nexport default async (opts: CmdOptions) => {\n // validate inputs from Commander\n if (!isObject(opts)) {\n exitWith(1, 'Could not parse arguments');\n }\n\n /**\n * From strapi backup file\n */\n const sourceOptions = getLocalFileSourceOptions(opts);\n\n const source = createLocalFileSourceProvider(sourceOptions);\n\n /**\n * To local Strapi instance\n */\n const strapiInstance = await createStrapiInstance();\n\n /**\n * Configure and run the transfer engine\n */\n const engineOptions: EngineOptions = {\n versionStrategy: DEFAULT_VERSION_STRATEGY,\n schemaStrategy: DEFAULT_SCHEMA_STRATEGY,\n exclude: opts.exclude,\n only: opts.only,\n throttle: opts.throttle,\n transforms: {\n links: [\n {\n filter(link) {\n return (\n !DEFAULT_IGNORED_CONTENT_TYPES.includes(link.left.type) &&\n !DEFAULT_IGNORED_CONTENT_TYPES.includes(link.right.type)\n );\n },\n },\n ],\n entities: [\n {\n filter: (entity) => !DEFAULT_IGNORED_CONTENT_TYPES.includes(entity.type),\n },\n ],\n },\n };\n\n const destinationOptions = {\n async getStrapi() {\n return strapiInstance;\n },\n autoDestroy: false,\n strategy: opts.conflictStrategy || DEFAULT_CONFLICT_STRATEGY,\n restore: parseRestoreFromOptions(engineOptions),\n };\n\n const destination = createLocalStrapiDestinationProvider(destinationOptions);\n destination.onWarning = (message) => console.warn(`\\n${chalk.yellow('warn')}: ${message}`);\n\n const engine = createTransferEngine(source, destination, engineOptions);\n\n engine.diagnostics.onDiagnostic(formatDiagnostic('import'));\n\n const progress = engine.progress.stream;\n\n const { updateLoader } = loadersFactory();\n\n engine.onSchemaDiff(getDiffHandler(engine, { force: opts.force, action: 'import' }));\n\n progress.on(`stage::start`, ({ stage, data }) => {\n updateLoader(stage, data).start();\n });\n\n progress.on('stage::finish', ({ stage, data }) => {\n updateLoader(stage, data).succeed();\n });\n\n progress.on('stage::progress', ({ stage, data }) => {\n updateLoader(stage, data);\n });\n\n progress.on('transfer::start', async () => {\n console.log('Starting import...');\n await strapiInstance.telemetry.send(\n 'didDEITSProcessStart',\n getTransferTelemetryPayload(engine)\n );\n });\n\n let results: engineDataTransfer.ITransferResults<typeof source, typeof destination>;\n try {\n // Abort transfer if user interrupts process\n setSignalHandler(() => abortTransfer({ engine, strapi: strapi as Core.LoadedStrapi }));\n\n results = await engine.transfer();\n\n try {\n const table = buildTransferTable(results.engine);\n console.log(table?.toString());\n } catch (e) {\n console.error('There was an error displaying the results of the transfer.');\n }\n\n // Note: we need to await telemetry or else the process ends before it is sent\n await strapiInstance.telemetry.send(\n 'didDEITSProcessFinish',\n getTransferTelemetryPayload(engine)\n );\n await strapiInstance.destroy();\n\n exitWith(0, exitMessageText('import'));\n } catch (e) {\n await strapiInstance.telemetry.send('didDEITSProcessFail', getTransferTelemetryPayload(engine));\n exitWith(1, exitMessageText('import', true));\n }\n};\n\n/**\n * Infer local file source provider options based on a given filename\n */\nconst getLocalFileSourceOptions = (opts: {\n file?: string;\n decompress?: boolean;\n decrypt?: boolean;\n key?: string;\n}) => {\n const options: fileDataTransfer.providers.ILocalFileSourceProviderOptions = {\n file: { path: opts.file ?? '' },\n compression: { enabled: !!opts.decompress },\n encryption: { enabled: !!opts.decrypt, key: opts.key },\n };\n\n return options;\n};\n"],"names":["fileDataTransfer","strapiDataTransfer","engineDataTransfer","isObject","exitWith","createStrapiInstance","DEFAULT_IGNORED_CONTENT_TYPES","parseRestoreFromOptions","chalk","formatDiagnostic","loadersFactory","getDiffHandler","getTransferTelemetryPayload","setSignalHandler","abortTransfer","buildTransferTable","exitMessageText"],"mappings":";;;;;;;;AAyBA,MAAM;AAAA,EACJ,WAAW,EAAE,8BAA8B;AAC7C,IAAIA;AAEJ,MAAM;AAAA,EACJ,WAAW,EAAE,sCAAsC,0BAA0B;AAC/E,IAAIC;AAEJ,MAAM,EAAE,sBAAsB,0BAA0B,wBAAA,IACtDC,eAAAA;AAqBF,MAAe,SAAA,OAAO,SAAqB;AAErC,MAAA,CAACC,GAAAA,SAAS,IAAI,GAAG;AACnBC,qBAAS,GAAG,2BAA2B;AAAA,EACzC;AAKM,QAAA,gBAAgB,0BAA0B,IAAI;AAE9C,QAAA,SAAS,8BAA8B,aAAa;AAKpD,QAAA,iBAAiB,MAAMC,aAAAA;AAK7B,QAAM,gBAA+B;AAAA,IACnC,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,SAAS,KAAK;AAAA,IACd,MAAM,KAAK;AAAA,IACX,UAAU,KAAK;AAAA,IACf,YAAY;AAAA,MACV,OAAO;AAAA,QACL;AAAA,UACE,OAAO,MAAM;AACX,mBACE,CAACC,aAAAA,8BAA8B,SAAS,KAAK,KAAK,IAAI,KACtD,CAACA,aAAAA,8BAA8B,SAAS,KAAK,MAAM,IAAI;AAAA,UAE3D;AAAA,QACF;AAAA,MACF;AAAA,MACA,UAAU;AAAA,QACR;AAAA,UACE,QAAQ,CAAC,WAAW,CAACA,aAA8B,8BAAA,SAAS,OAAO,IAAI;AAAA,QACzE;AAAA,MACF;AAAA,IACF;AAAA,EAAA;AAGF,QAAM,qBAAqB;AAAA,IACzB,MAAM,YAAY;AACT,aAAA;AAAA,IACT;AAAA,IACA,aAAa;AAAA,IACb,UAAU,KAAK,oBAAoB;AAAA,IACnC,SAASC,qCAAwB,aAAa;AAAA,EAAA;AAG1C,QAAA,cAAc,qCAAqC,kBAAkB;AAC3E,cAAY,YAAY,CAAC,YAAY,QAAQ,KAAK;AAAA,EAAKC,uBAAM,OAAO,MAAM,CAAC,KAAK,OAAO,EAAE;AAEzF,QAAM,SAAS,qBAAqB,QAAQ,aAAa,aAAa;AAEtE,SAAO,YAAY,aAAaC,aAAAA,iBAAiB,QAAQ,CAAC;AAEpD,QAAA,WAAW,OAAO,SAAS;AAE3B,QAAA,EAAE,iBAAiBC,aAAAA;AAElB,SAAA,aAAaC,4BAAe,QAAQ,EAAE,OAAO,KAAK,OAAO,QAAQ,SAAS,CAAC,CAAC;AAEnF,WAAS,GAAG,gBAAgB,CAAC,EAAE,OAAO,WAAW;AAClC,iBAAA,OAAO,IAAI,EAAE,MAAM;AAAA,EAAA,CACjC;AAED,WAAS,GAAG,iBAAiB,CAAC,EAAE,OAAO,WAAW;AACnC,iBAAA,OAAO,IAAI,EAAE,QAAQ;AAAA,EAAA,CACnC;AAED,WAAS,GAAG,mBAAmB,CAAC,EAAE,OAAO,WAAW;AAClD,iBAAa,OAAO,IAAI;AAAA,EAAA,CACzB;AAEQ,WAAA,GAAG,mBAAmB,YAAY;AACzC,YAAQ,IAAI,oBAAoB;AAChC,UAAM,eAAe,UAAU;AAAA,MAC7B;AAAA,MACAC,aAAAA,4BAA4B,MAAM;AAAA,IAAA;AAAA,EACpC,CACD;AAEG,MAAA;AACA,MAAA;AAEFC,iBAAA,iBAAiB,MAAMC,aAAAA,cAAc,EAAE,QAAQ,OAAA,CAAqC,CAAC;AAE3E,cAAA,MAAM,OAAO;AAEnB,QAAA;AACI,YAAA,QAAQC,aAAAA,mBAAmB,QAAQ,MAAM;AACvC,cAAA,IAAI,OAAO,SAAU,CAAA;AAAA,aACtB,GAAG;AACV,cAAQ,MAAM,4DAA4D;AAAA,IAC5E;AAGA,UAAM,eAAe,UAAU;AAAA,MAC7B;AAAA,MACAH,aAAAA,4BAA4B,MAAM;AAAA,IAAA;AAEpC,UAAM,eAAe;AAEZR,YAAAA,SAAA,GAAGY,6BAAgB,QAAQ,CAAC;AAAA,WAC9B,GAAG;AACV,UAAM,eAAe,UAAU,KAAK,uBAAuBJ,aAAA,4BAA4B,MAAM,CAAC;AAC9FR,YAAAA,SAAS,GAAGY,aAAAA,gBAAgB,UAAU,IAAI,CAAC;AAAA,EAC7C;AACF;AAKA,MAAM,4BAA4B,CAAC,SAK7B;AACJ,QAAM,UAAsE;AAAA,IAC1E,MAAM,EAAE,MAAM,KAAK,QAAQ,GAAG;AAAA,IAC9B,aAAa,EAAE,SAAS,CAAC,CAAC,KAAK,WAAW;AAAA,IAC1C,YAAY,EAAE,SAAS,CAAC,CAAC,KAAK,SAAS,KAAK,KAAK,IAAI;AAAA,EAAA;AAGhD,SAAA;AACT;;"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { InitOptions } from '@strapi/pack-up';
|
|
2
2
|
import { CLIContext } from '../../../types';
|
|
3
|
-
|
|
4
|
-
}
|
|
3
|
+
type ActionOptions = Pick<InitOptions, 'silent' | 'debug'>;
|
|
5
4
|
declare const _default: (packagePath: string, { silent, debug }: ActionOptions, { logger, cwd }: CLIContext) => Promise<void>;
|
|
6
5
|
export default _default;
|
|
7
6
|
//# sourceMappingURL=action.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/plugin/init/action.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,WAAW,EAMZ,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG5C,
|
|
1
|
+
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/plugin/init/action.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,WAAW,EAMZ,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG5C,KAAK,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC;sCAG5C,MAAM,qBACA,aAAa,mBACf,UAAU;AAH7B,wBAkCE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.js","sources":["../../../../../src/cli/commands/plugin/init/action.ts"],"sourcesContent":["import path from 'node:path';\nimport boxen from 'boxen';\nimport chalk from 'chalk';\nimport getLatestVersion from 'get-latest-version';\nimport gitUrlParse from 'git-url-parse';\nimport {\n InitOptions,\n definePackageFeature,\n definePackageOption,\n defineTemplate,\n init,\n TemplateFile,\n} from '@strapi/pack-up';\nimport { outdent } from 'outdent';\n\nimport { CLIContext } from '../../../types';\nimport { gitIgnoreFile } from './files/gitIgnore';\n\ninterface ActionOptions extends Pick<InitOptions, 'silent' | 'debug'> {}\n\nexport default async (\n packagePath: string,\n { silent, debug }: ActionOptions,\n { logger, cwd }: CLIContext\n) => {\n try {\n /**\n * Create the package // plugin\n */\n await init({\n path: packagePath,\n cwd,\n silent,\n debug,\n template: PLUGIN_TEMPLATE,\n });\n\n logger.info(\"Don't forget to enable your plugin in your configuration files.\");\n } catch (err) {\n logger.error(\n 'There seems to be an unexpected error, try again with --debug for more information \\n'\n );\n if (err instanceof Error && err.stack) {\n logger.log(\n chalk.red(\n boxen(err.stack, {\n padding: 1,\n align: 'left',\n })\n )\n );\n }\n process.exit(1);\n }\n};\n\nconst PACKAGE_NAME_REGEXP = /^(?:@(?:[a-z0-9-*~][a-z0-9-*._~]*)\\/)?[a-z0-9-~][a-z0-9-._~]*$/i;\n\ninterface PackageExport {\n types?: string;\n require: string;\n import: string;\n source: string;\n default: string;\n}\n\ninterface PluginPackageJson {\n name?: string;\n description?: string;\n version?: string;\n keywords?: string[];\n type: 'commonjs';\n license?: string;\n repository?: {\n type: 'git';\n url: string;\n };\n bugs?: {\n url: string;\n };\n homepage?: string;\n author?: string;\n exports: {\n './strapi-admin'?: PackageExport;\n './strapi-server'?: PackageExport;\n './package.json': `${string}.json`;\n };\n files: string[];\n scripts: Record<string, string>;\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n peerDependencies: Record<string, string>;\n strapi: {\n name?: string;\n displayName?: string;\n description?: string;\n kind: 'plugin';\n };\n}\n\nconst PLUGIN_TEMPLATE = defineTemplate(async ({ logger, gitConfig, packagePath }) => {\n let repo: {\n source?: string;\n owner?: string;\n name?: string;\n };\n\n const [packageFolder] = packagePath.split(path.sep).slice(-1);\n\n return {\n prompts: [\n definePackageOption({\n name: 'repo',\n type: 'text',\n message: 'git url',\n validate(v) {\n if (!v) {\n return true;\n }\n\n try {\n const result = gitUrlParse(v);\n\n repo = { source: result.source, owner: result.owner, name: result.name };\n\n return true;\n } catch (err) {\n return 'invalid git url';\n }\n },\n }),\n definePackageOption({\n name: 'pkgName',\n type: 'text',\n message: 'plugin name',\n initial: () => repo?.name ?? '',\n validate(v) {\n if (!v) {\n return 'package name is required';\n }\n\n const match = PACKAGE_NAME_REGEXP.exec(v);\n\n if (!match) {\n return 'invalid package name';\n }\n\n return true;\n },\n }),\n definePackageOption({\n name: 'displayName',\n type: 'text',\n message: 'plugin display name',\n }),\n definePackageOption({\n name: 'description',\n type: 'text',\n message: 'plugin description',\n }),\n definePackageOption({\n name: 'authorName',\n type: 'text',\n message: 'plugin author name',\n initial: gitConfig?.user?.name,\n }),\n definePackageOption({\n name: 'authorEmail',\n type: 'text',\n message: 'plugin author email',\n initial: gitConfig?.user?.email,\n }),\n definePackageOption({\n name: 'license',\n type: 'text',\n message: 'plugin license',\n initial: 'MIT',\n validate(v) {\n if (!v) {\n return 'license is required';\n }\n\n return true;\n },\n }),\n definePackageOption({\n name: 'client-code',\n type: 'confirm',\n message: 'register with the admin panel?',\n initial: true,\n }),\n definePackageOption({\n name: 'server-code',\n type: 'confirm',\n message: 'register with the server?',\n initial: true,\n }),\n definePackageFeature({\n name: 'editorconfig',\n initial: true,\n optional: true,\n }),\n definePackageFeature({\n name: 'eslint',\n initial: true,\n optional: true,\n }),\n definePackageFeature({\n name: 'prettier',\n initial: true,\n optional: true,\n }),\n definePackageFeature({\n name: 'typescript',\n initial: true,\n optional: true,\n }),\n ],\n async getFiles(answers) {\n const author: string[] = [];\n\n const files: TemplateFile[] = [];\n\n // package.json\n const pkgJson: PluginPackageJson = {\n version: '0.0.0',\n keywords: [],\n type: 'commonjs',\n exports: {\n './package.json': './package.json',\n },\n files: ['dist'],\n scripts: {\n build: 'strapi plugin:build',\n watch: 'strapi plugin:watch',\n 'watch:link': 'strapi plugin:watch:link',\n verify: 'strapi plugin:verify',\n },\n dependencies: {},\n devDependencies: {\n /**\n * We set * as a default version, but further down\n * we try to resolve each package to their latest\n * version, failing that we leave the fallback of *.\n */\n '@strapi/strapi': '*',\n prettier: '*',\n },\n peerDependencies: {\n '@strapi/strapi': '^4.0.0',\n },\n strapi: {\n kind: 'plugin',\n },\n };\n\n if (Array.isArray(answers)) {\n for (const ans of answers) {\n const { name, answer } = ans;\n\n switch (name) {\n case 'pkgName': {\n pkgJson.name = String(answer);\n pkgJson.strapi.name = String(answer);\n break;\n }\n case 'description': {\n pkgJson.description = String(answer) ?? undefined;\n pkgJson.strapi.description = String(answer) ?? undefined;\n break;\n }\n case 'displayName': {\n pkgJson.strapi.displayName = String(answer) ?? undefined;\n break;\n }\n case 'authorName': {\n author.push(String(answer));\n break;\n }\n case 'authorEmail': {\n if (answer) {\n author.push(`<${answer}>`);\n }\n break;\n }\n case 'license': {\n pkgJson.license = String(answer);\n break;\n }\n case 'client-code': {\n if (answer) {\n pkgJson.exports['./strapi-admin'] = {\n source: './admin/src/index.js',\n import: './dist/admin/index.mjs',\n require: './dist/admin/index.js',\n default: './dist/admin/index.js',\n };\n\n pkgJson.dependencies = {\n ...pkgJson.dependencies,\n '@strapi/design-system': '*',\n '@strapi/icons': '*',\n };\n\n pkgJson.devDependencies = {\n ...pkgJson.devDependencies,\n react: '*',\n 'react-dom': '*',\n 'react-router-dom': '*',\n 'styled-components': '5.3.3',\n };\n\n pkgJson.peerDependencies = {\n ...pkgJson.peerDependencies,\n react: '^17.0.0 || ^18.0.0',\n 'react-dom': '^17.0.0 || ^18.0.0',\n 'react-router-dom': '^6.0.0',\n 'styled-components': '^5.2.1',\n };\n }\n\n break;\n }\n case 'server-code': {\n if (answer) {\n pkgJson.exports['./strapi-server'] = {\n source: './server/src/index.js',\n import: './dist/server/index.mjs',\n require: './dist/server/index.js',\n default: './dist/server/index.js',\n };\n\n pkgJson.files.push('./strapi-server.js');\n\n files.push({\n name: 'strapi-server.js',\n contents: outdent`\n 'use strict';\n \n module.exports = require('./dist/server');\n `,\n });\n }\n\n break;\n }\n case 'typescript': {\n const isTypescript = Boolean(answer);\n\n if (isTypescript) {\n if (isRecord(pkgJson.exports['./strapi-admin'])) {\n pkgJson.exports['./strapi-admin'].source = './admin/src/index.ts';\n\n pkgJson.exports['./strapi-admin'] = {\n types: './dist/admin/src/index.d.ts',\n ...pkgJson.exports['./strapi-admin'],\n };\n\n pkgJson.scripts = {\n ...pkgJson.scripts,\n 'test:ts:front': 'run -T tsc -p admin/tsconfig.json',\n };\n\n pkgJson.devDependencies = {\n ...pkgJson.devDependencies,\n '@types/react': '*',\n '@types/react-dom': '*',\n '@types/styled-components': '5.1.26',\n };\n\n const { adminTsconfigFiles } = await import('./files/typescript');\n\n files.push(adminTsconfigFiles.tsconfigBuildFile, adminTsconfigFiles.tsconfigFile);\n }\n\n if (isRecord(pkgJson.exports['./strapi-server'])) {\n pkgJson.exports['./strapi-server'].source = './server/src/index.ts';\n\n pkgJson.exports['./strapi-server'] = {\n types: './dist/server/src/index.d.ts',\n ...pkgJson.exports['./strapi-server'],\n };\n\n pkgJson.scripts = {\n ...pkgJson.scripts,\n 'test:ts:back': 'run -T tsc -p server/tsconfig.json',\n };\n\n const { serverTsconfigFiles } = await import('./files/typescript');\n\n files.push(\n serverTsconfigFiles.tsconfigBuildFile,\n serverTsconfigFiles.tsconfigFile\n );\n }\n\n pkgJson.devDependencies = {\n ...pkgJson.devDependencies,\n '@strapi/typescript-utils': '*',\n typescript: '*',\n };\n }\n\n /**\n * This is where we add all the source files regardless\n * of whether they are typescript or javascript.\n */\n if (isRecord(pkgJson.exports['./strapi-admin'])) {\n files.push({\n name: isTypescript ? 'admin/src/pluginId.ts' : 'admin/src/pluginId.js',\n contents: outdent`\n export const PLUGIN_ID = '${pkgJson.name!.replace(/^strapi-plugin-/i, '')}';\n `,\n });\n\n if (isTypescript) {\n const { adminTypescriptFiles } = await import('./files/admin');\n\n files.push(...adminTypescriptFiles);\n } else {\n const { adminJavascriptFiles } = await import('./files/admin');\n\n files.push(...adminJavascriptFiles);\n }\n }\n\n if (isRecord(pkgJson.exports['./strapi-server'])) {\n if (isTypescript) {\n const { serverTypescriptFiles } = await import('./files/server');\n\n files.push(...serverTypescriptFiles(packageFolder));\n } else {\n const { serverJavascriptFiles } = await import('./files/server');\n\n files.push(...serverJavascriptFiles(packageFolder));\n }\n }\n\n break;\n }\n case 'eslint': {\n if (answer) {\n const { eslintIgnoreFile } = await import('./files/eslint');\n\n files.push(eslintIgnoreFile);\n }\n\n break;\n }\n case 'prettier': {\n if (answer) {\n const { prettierFile, prettierIgnoreFile } = await import('./files/prettier');\n\n files.push(prettierFile, prettierIgnoreFile);\n }\n break;\n }\n case 'editorconfig': {\n if (answer) {\n const { editorConfigFile } = await import('./files/editorConfig');\n\n files.push(editorConfigFile);\n }\n break;\n }\n default:\n break;\n }\n }\n }\n\n if (repo) {\n pkgJson.repository = {\n type: 'git',\n url: `git+ssh://git@${repo.source}/${repo.owner}/${repo.name}.git`,\n };\n pkgJson.bugs = {\n url: `https://${repo.source}/${repo.owner}/${repo.name}/issues`,\n };\n pkgJson.homepage = `https://${repo.source}/${repo.owner}/${repo.name}#readme`;\n }\n\n pkgJson.author = author.filter(Boolean).join(' ') ?? undefined;\n\n try {\n pkgJson.devDependencies = await resolveLatestVerisonOfDeps(pkgJson.devDependencies);\n pkgJson.dependencies = await resolveLatestVerisonOfDeps(pkgJson.dependencies);\n pkgJson.peerDependencies = await resolveLatestVerisonOfDeps(pkgJson.peerDependencies);\n } catch (err) {\n if (err instanceof Error) {\n logger.error(err.message);\n } else {\n logger.error(err);\n }\n }\n\n files.push({\n name: 'package.json',\n contents: outdent`\n ${JSON.stringify(pkgJson, null, 2)}\n `,\n });\n\n files.push({\n name: 'README.md',\n contents: outdent`\n # ${pkgJson.name}\n\n ${pkgJson.description ?? ''}\n `,\n });\n\n files.push(gitIgnoreFile);\n\n return files;\n },\n };\n});\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n Boolean(value) && !Array.isArray(value) && typeof value === 'object';\n\nconst resolveLatestVerisonOfDeps = async (\n deps: Record<string, string>\n): Promise<Record<string, string>> => {\n const latestDeps: Record<string, string> = {};\n\n for (const [name, version] of Object.entries(deps)) {\n try {\n const latestVersion = await getLatestVersion(name, version);\n latestDeps[name] = latestVersion ? `^${latestVersion}` : '*';\n } catch (err) {\n latestDeps[name] = '*';\n }\n }\n\n return latestDeps;\n};\n"],"names":["init","chalk","boxen","defineTemplate","path","definePackageOption","gitUrlParse","definePackageFeature","outdent","gitIgnoreFile","getLatestVersion"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"action.js","sources":["../../../../../src/cli/commands/plugin/init/action.ts"],"sourcesContent":["import path from 'node:path';\nimport boxen from 'boxen';\nimport chalk from 'chalk';\nimport getLatestVersion from 'get-latest-version';\nimport gitUrlParse from 'git-url-parse';\nimport {\n InitOptions,\n definePackageFeature,\n definePackageOption,\n defineTemplate,\n init,\n TemplateFile,\n} from '@strapi/pack-up';\nimport { outdent } from 'outdent';\n\nimport { CLIContext } from '../../../types';\nimport { gitIgnoreFile } from './files/gitIgnore';\n\ntype ActionOptions = Pick<InitOptions, 'silent' | 'debug'>;\n\nexport default async (\n packagePath: string,\n { silent, debug }: ActionOptions,\n { logger, cwd }: CLIContext\n) => {\n try {\n /**\n * Create the package // plugin\n */\n await init({\n path: packagePath,\n cwd,\n silent,\n debug,\n template: PLUGIN_TEMPLATE,\n });\n\n logger.info(\"Don't forget to enable your plugin in your configuration files.\");\n } catch (err) {\n logger.error(\n 'There seems to be an unexpected error, try again with --debug for more information \\n'\n );\n if (err instanceof Error && err.stack) {\n logger.log(\n chalk.red(\n boxen(err.stack, {\n padding: 1,\n align: 'left',\n })\n )\n );\n }\n process.exit(1);\n }\n};\n\nconst PACKAGE_NAME_REGEXP = /^(?:@(?:[a-z0-9-*~][a-z0-9-*._~]*)\\/)?[a-z0-9-~][a-z0-9-._~]*$/i;\n\ninterface PackageExport {\n types?: string;\n require: string;\n import: string;\n source: string;\n default: string;\n}\n\ninterface PluginPackageJson {\n name?: string;\n description?: string;\n version?: string;\n keywords?: string[];\n type: 'commonjs';\n license?: string;\n repository?: {\n type: 'git';\n url: string;\n };\n bugs?: {\n url: string;\n };\n homepage?: string;\n author?: string;\n exports: {\n './strapi-admin'?: PackageExport;\n './strapi-server'?: PackageExport;\n './package.json': `${string}.json`;\n };\n files: string[];\n scripts: Record<string, string>;\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n peerDependencies: Record<string, string>;\n strapi: {\n name?: string;\n displayName?: string;\n description?: string;\n kind: 'plugin';\n };\n}\n\nconst PLUGIN_TEMPLATE = defineTemplate(async ({ logger, gitConfig, packagePath }) => {\n let repo: {\n source?: string;\n owner?: string;\n name?: string;\n };\n\n const [packageFolder] = packagePath.split(path.sep).slice(-1);\n\n return {\n prompts: [\n definePackageOption({\n name: 'repo',\n type: 'text',\n message: 'git url',\n validate(v) {\n if (!v) {\n return true;\n }\n\n try {\n const result = gitUrlParse(v);\n\n repo = { source: result.source, owner: result.owner, name: result.name };\n\n return true;\n } catch (err) {\n return 'invalid git url';\n }\n },\n }),\n definePackageOption({\n name: 'pkgName',\n type: 'text',\n message: 'plugin name',\n initial: () => repo?.name ?? '',\n validate(v) {\n if (!v) {\n return 'package name is required';\n }\n\n const match = PACKAGE_NAME_REGEXP.exec(v);\n\n if (!match) {\n return 'invalid package name';\n }\n\n return true;\n },\n }),\n definePackageOption({\n name: 'displayName',\n type: 'text',\n message: 'plugin display name',\n }),\n definePackageOption({\n name: 'description',\n type: 'text',\n message: 'plugin description',\n }),\n definePackageOption({\n name: 'authorName',\n type: 'text',\n message: 'plugin author name',\n initial: gitConfig?.user?.name,\n }),\n definePackageOption({\n name: 'authorEmail',\n type: 'text',\n message: 'plugin author email',\n initial: gitConfig?.user?.email,\n }),\n definePackageOption({\n name: 'license',\n type: 'text',\n message: 'plugin license',\n initial: 'MIT',\n validate(v) {\n if (!v) {\n return 'license is required';\n }\n\n return true;\n },\n }),\n definePackageOption({\n name: 'client-code',\n type: 'confirm',\n message: 'register with the admin panel?',\n initial: true,\n }),\n definePackageOption({\n name: 'server-code',\n type: 'confirm',\n message: 'register with the server?',\n initial: true,\n }),\n definePackageFeature({\n name: 'editorconfig',\n initial: true,\n optional: true,\n }),\n definePackageFeature({\n name: 'eslint',\n initial: true,\n optional: true,\n }),\n definePackageFeature({\n name: 'prettier',\n initial: true,\n optional: true,\n }),\n definePackageFeature({\n name: 'typescript',\n initial: true,\n optional: true,\n }),\n ],\n async getFiles(answers) {\n const author: string[] = [];\n\n const files: TemplateFile[] = [];\n\n // package.json\n const pkgJson: PluginPackageJson = {\n version: '0.0.0',\n keywords: [],\n type: 'commonjs',\n exports: {\n './package.json': './package.json',\n },\n files: ['dist'],\n scripts: {\n build: 'strapi plugin:build',\n watch: 'strapi plugin:watch',\n 'watch:link': 'strapi plugin:watch:link',\n verify: 'strapi plugin:verify',\n },\n dependencies: {},\n devDependencies: {\n /**\n * We set * as a default version, but further down\n * we try to resolve each package to their latest\n * version, failing that we leave the fallback of *.\n */\n '@strapi/strapi': '*',\n prettier: '*',\n },\n peerDependencies: {\n '@strapi/strapi': '^4.0.0',\n },\n strapi: {\n kind: 'plugin',\n },\n };\n\n if (Array.isArray(answers)) {\n for (const ans of answers) {\n const { name, answer } = ans;\n\n switch (name) {\n case 'pkgName': {\n pkgJson.name = String(answer);\n pkgJson.strapi.name = String(answer);\n break;\n }\n case 'description': {\n pkgJson.description = String(answer) ?? undefined;\n pkgJson.strapi.description = String(answer) ?? undefined;\n break;\n }\n case 'displayName': {\n pkgJson.strapi.displayName = String(answer) ?? undefined;\n break;\n }\n case 'authorName': {\n author.push(String(answer));\n break;\n }\n case 'authorEmail': {\n if (answer) {\n author.push(`<${answer}>`);\n }\n break;\n }\n case 'license': {\n pkgJson.license = String(answer);\n break;\n }\n case 'client-code': {\n if (answer) {\n pkgJson.exports['./strapi-admin'] = {\n source: './admin/src/index.js',\n import: './dist/admin/index.mjs',\n require: './dist/admin/index.js',\n default: './dist/admin/index.js',\n };\n\n pkgJson.dependencies = {\n ...pkgJson.dependencies,\n '@strapi/design-system': '*',\n '@strapi/icons': '*',\n };\n\n pkgJson.devDependencies = {\n ...pkgJson.devDependencies,\n react: '*',\n 'react-dom': '*',\n 'react-router-dom': '*',\n 'styled-components': '5.3.3',\n };\n\n pkgJson.peerDependencies = {\n ...pkgJson.peerDependencies,\n react: '^17.0.0 || ^18.0.0',\n 'react-dom': '^17.0.0 || ^18.0.0',\n 'react-router-dom': '^6.0.0',\n 'styled-components': '^5.2.1',\n };\n }\n\n break;\n }\n case 'server-code': {\n if (answer) {\n pkgJson.exports['./strapi-server'] = {\n source: './server/src/index.js',\n import: './dist/server/index.mjs',\n require: './dist/server/index.js',\n default: './dist/server/index.js',\n };\n\n pkgJson.files.push('./strapi-server.js');\n\n files.push({\n name: 'strapi-server.js',\n contents: outdent`\n 'use strict';\n \n module.exports = require('./dist/server');\n `,\n });\n }\n\n break;\n }\n case 'typescript': {\n const isTypescript = Boolean(answer);\n\n if (isTypescript) {\n if (isRecord(pkgJson.exports['./strapi-admin'])) {\n pkgJson.exports['./strapi-admin'].source = './admin/src/index.ts';\n\n pkgJson.exports['./strapi-admin'] = {\n types: './dist/admin/src/index.d.ts',\n ...pkgJson.exports['./strapi-admin'],\n };\n\n pkgJson.scripts = {\n ...pkgJson.scripts,\n 'test:ts:front': 'run -T tsc -p admin/tsconfig.json',\n };\n\n pkgJson.devDependencies = {\n ...pkgJson.devDependencies,\n '@types/react': '*',\n '@types/react-dom': '*',\n '@types/styled-components': '5.1.26',\n };\n\n const { adminTsconfigFiles } = await import('./files/typescript');\n\n files.push(adminTsconfigFiles.tsconfigBuildFile, adminTsconfigFiles.tsconfigFile);\n }\n\n if (isRecord(pkgJson.exports['./strapi-server'])) {\n pkgJson.exports['./strapi-server'].source = './server/src/index.ts';\n\n pkgJson.exports['./strapi-server'] = {\n types: './dist/server/src/index.d.ts',\n ...pkgJson.exports['./strapi-server'],\n };\n\n pkgJson.scripts = {\n ...pkgJson.scripts,\n 'test:ts:back': 'run -T tsc -p server/tsconfig.json',\n };\n\n const { serverTsconfigFiles } = await import('./files/typescript');\n\n files.push(\n serverTsconfigFiles.tsconfigBuildFile,\n serverTsconfigFiles.tsconfigFile\n );\n }\n\n pkgJson.devDependencies = {\n ...pkgJson.devDependencies,\n '@strapi/typescript-utils': '*',\n typescript: '*',\n };\n }\n\n /**\n * This is where we add all the source files regardless\n * of whether they are typescript or javascript.\n */\n if (isRecord(pkgJson.exports['./strapi-admin'])) {\n files.push({\n name: isTypescript ? 'admin/src/pluginId.ts' : 'admin/src/pluginId.js',\n contents: outdent`\n export const PLUGIN_ID = '${pkgJson.name!.replace(/^strapi-plugin-/i, '')}';\n `,\n });\n\n if (isTypescript) {\n const { adminTypescriptFiles } = await import('./files/admin');\n\n files.push(...adminTypescriptFiles);\n } else {\n const { adminJavascriptFiles } = await import('./files/admin');\n\n files.push(...adminJavascriptFiles);\n }\n }\n\n if (isRecord(pkgJson.exports['./strapi-server'])) {\n if (isTypescript) {\n const { serverTypescriptFiles } = await import('./files/server');\n\n files.push(...serverTypescriptFiles(packageFolder));\n } else {\n const { serverJavascriptFiles } = await import('./files/server');\n\n files.push(...serverJavascriptFiles(packageFolder));\n }\n }\n\n break;\n }\n case 'eslint': {\n if (answer) {\n const { eslintIgnoreFile } = await import('./files/eslint');\n\n files.push(eslintIgnoreFile);\n }\n\n break;\n }\n case 'prettier': {\n if (answer) {\n const { prettierFile, prettierIgnoreFile } = await import('./files/prettier');\n\n files.push(prettierFile, prettierIgnoreFile);\n }\n break;\n }\n case 'editorconfig': {\n if (answer) {\n const { editorConfigFile } = await import('./files/editorConfig');\n\n files.push(editorConfigFile);\n }\n break;\n }\n default:\n break;\n }\n }\n }\n\n if (repo) {\n pkgJson.repository = {\n type: 'git',\n url: `git+ssh://git@${repo.source}/${repo.owner}/${repo.name}.git`,\n };\n pkgJson.bugs = {\n url: `https://${repo.source}/${repo.owner}/${repo.name}/issues`,\n };\n pkgJson.homepage = `https://${repo.source}/${repo.owner}/${repo.name}#readme`;\n }\n\n pkgJson.author = author.filter(Boolean).join(' ') ?? undefined;\n\n try {\n pkgJson.devDependencies = await resolveLatestVerisonOfDeps(pkgJson.devDependencies);\n pkgJson.dependencies = await resolveLatestVerisonOfDeps(pkgJson.dependencies);\n pkgJson.peerDependencies = await resolveLatestVerisonOfDeps(pkgJson.peerDependencies);\n } catch (err) {\n if (err instanceof Error) {\n logger.error(err.message);\n } else {\n logger.error(err);\n }\n }\n\n files.push({\n name: 'package.json',\n contents: outdent`\n ${JSON.stringify(pkgJson, null, 2)}\n `,\n });\n\n files.push({\n name: 'README.md',\n contents: outdent`\n # ${pkgJson.name}\n\n ${pkgJson.description ?? ''}\n `,\n });\n\n files.push(gitIgnoreFile);\n\n return files;\n },\n };\n});\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n Boolean(value) && !Array.isArray(value) && typeof value === 'object';\n\nconst resolveLatestVerisonOfDeps = async (\n deps: Record<string, string>\n): Promise<Record<string, string>> => {\n const latestDeps: Record<string, string> = {};\n\n for (const [name, version] of Object.entries(deps)) {\n try {\n const latestVersion = await getLatestVersion(name, version);\n latestDeps[name] = latestVersion ? `^${latestVersion}` : '*';\n } catch (err) {\n latestDeps[name] = '*';\n }\n }\n\n return latestDeps;\n};\n"],"names":["init","chalk","boxen","defineTemplate","path","definePackageOption","gitUrlParse","definePackageFeature","outdent","gitIgnoreFile","getLatestVersion"],"mappings":"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"}
|
|
@@ -22,12 +22,12 @@ const TYPESCRIPT = (pluginName) => [
|
|
|
22
22
|
import policies from './policies';
|
|
23
23
|
import routes from './routes';
|
|
24
24
|
import services from './services';
|
|
25
|
-
|
|
25
|
+
|
|
26
26
|
export default {
|
|
27
27
|
bootstrap,
|
|
28
28
|
destroy,
|
|
29
29
|
register,
|
|
30
|
-
|
|
30
|
+
|
|
31
31
|
config,
|
|
32
32
|
controllers,
|
|
33
33
|
contentTypes,
|
|
@@ -41,9 +41,9 @@ const TYPESCRIPT = (pluginName) => [
|
|
|
41
41
|
{
|
|
42
42
|
name: "server/src/bootstrap.ts",
|
|
43
43
|
contents: outdent.outdent`
|
|
44
|
-
import type {
|
|
44
|
+
import type { Core } from '@strapi/strapi';
|
|
45
45
|
|
|
46
|
-
const bootstrap = ({ strapi }: { strapi: Strapi }) => {
|
|
46
|
+
const bootstrap = ({ strapi }: { strapi: Core.Strapi }) => {
|
|
47
47
|
// bootstrap phase
|
|
48
48
|
};
|
|
49
49
|
|
|
@@ -53,9 +53,9 @@ const TYPESCRIPT = (pluginName) => [
|
|
|
53
53
|
{
|
|
54
54
|
name: "server/src/destroy.ts",
|
|
55
55
|
contents: outdent.outdent`
|
|
56
|
-
import type {
|
|
56
|
+
import type { Core } from '@strapi/strapi';
|
|
57
57
|
|
|
58
|
-
const destroy = ({ strapi }: { strapi: Strapi }) => {
|
|
58
|
+
const destroy = ({ strapi }: { strapi: Core.Strapi }) => {
|
|
59
59
|
// destroy phase
|
|
60
60
|
};
|
|
61
61
|
|
|
@@ -65,9 +65,9 @@ const TYPESCRIPT = (pluginName) => [
|
|
|
65
65
|
{
|
|
66
66
|
name: "server/src/register.ts",
|
|
67
67
|
contents: outdent.outdent`
|
|
68
|
-
import type {
|
|
68
|
+
import type { Core } from '@strapi/strapi';
|
|
69
69
|
|
|
70
|
-
const register = ({ strapi }: { strapi: Strapi }) => {
|
|
70
|
+
const register = ({ strapi }: { strapi: Core.Strapi }) => {
|
|
71
71
|
// register phase
|
|
72
72
|
};
|
|
73
73
|
|
|
@@ -102,9 +102,9 @@ const TYPESCRIPT = (pluginName) => [
|
|
|
102
102
|
{
|
|
103
103
|
name: "server/src/controllers/controller.ts",
|
|
104
104
|
contents: outdent.outdent`
|
|
105
|
-
import type {
|
|
105
|
+
import type { Core } from '@strapi/strapi';
|
|
106
106
|
|
|
107
|
-
const controller = ({ strapi }: { strapi: Strapi }) => ({
|
|
107
|
+
const controller = ({ strapi }: { strapi: Core.Strapi }) => ({
|
|
108
108
|
index(ctx) {
|
|
109
109
|
ctx.body = strapi
|
|
110
110
|
.plugin('${pluginName}')
|
|
@@ -158,9 +158,9 @@ const TYPESCRIPT = (pluginName) => [
|
|
|
158
158
|
{
|
|
159
159
|
name: "server/src/services/service.ts",
|
|
160
160
|
contents: outdent.outdent`
|
|
161
|
-
import type {
|
|
161
|
+
import type { Core } from '@strapi/strapi';
|
|
162
162
|
|
|
163
|
-
const service = ({ strapi }: { strapi: Strapi }) => ({
|
|
163
|
+
const service = ({ strapi }: { strapi: Core.Strapi }) => ({
|
|
164
164
|
getWelcomeMessage() {
|
|
165
165
|
return 'Welcome to Strapi 🚀';
|
|
166
166
|
},
|
|
@@ -198,7 +198,7 @@ const JAVASCRIPT = (pluginName) => [
|
|
|
198
198
|
bootstrap,
|
|
199
199
|
destroy,
|
|
200
200
|
register,
|
|
201
|
-
|
|
201
|
+
|
|
202
202
|
config,
|
|
203
203
|
controllers,
|
|
204
204
|
contentTypes,
|
|
@@ -229,7 +229,7 @@ const JAVASCRIPT = (pluginName) => [
|
|
|
229
229
|
const destroy = ({ strapi }) => {
|
|
230
230
|
// destroy phase
|
|
231
231
|
};
|
|
232
|
-
|
|
232
|
+
|
|
233
233
|
module.exports = destroy;
|
|
234
234
|
`
|
|
235
235
|
},
|
|
@@ -241,7 +241,7 @@ const JAVASCRIPT = (pluginName) => [
|
|
|
241
241
|
const register = ({ strapi }) => {
|
|
242
242
|
// register phase
|
|
243
243
|
};
|
|
244
|
-
|
|
244
|
+
|
|
245
245
|
module.exports = register;
|
|
246
246
|
`
|
|
247
247
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sources":["../../../../../../src/cli/commands/plugin/init/files/server.ts"],"sourcesContent":["import { TemplateFile } from '@strapi/pack-up';\nimport { outdent } from 'outdent';\n\nconst TYPESCRIPT = (pluginName: string): TemplateFile[] => [\n {\n name: 'server/src/index.ts',\n contents: outdent`\n /**\n * Application methods\n */\n import bootstrap from './bootstrap';\n import destroy from './destroy';\n import register from './register';\n\n /**\n * Plugin server methods\n */\n import config from './config';\n import contentTypes from './content-types';\n import controllers from './controllers';\n import middlewares from './middlewares';\n import policies from './policies';\n import routes from './routes';\n import services from './services';\n \n export default {\n bootstrap,\n destroy,\n register,\n \n config,\n controllers,\n contentTypes,\n middlewares,\n policies,\n routes,\n services,\n };\n `,\n },\n {\n name: 'server/src/bootstrap.ts',\n contents: outdent`\n import type { Strapi } from '@strapi/strapi';\n\n const bootstrap = ({ strapi }: { strapi: Strapi }) => {\n // bootstrap phase\n };\n\n export default bootstrap;\n `,\n },\n {\n name: 'server/src/destroy.ts',\n contents: outdent`\n import type { Strapi } from '@strapi/strapi';\n\n const destroy = ({ strapi }: { strapi: Strapi }) => {\n // destroy phase\n };\n\n export default destroy;\n `,\n },\n {\n name: 'server/src/register.ts',\n contents: outdent`\n import type { Strapi } from '@strapi/strapi';\n\n const register = ({ strapi }: { strapi: Strapi }) => {\n // register phase\n };\n\n export default register;\n `,\n },\n {\n name: 'server/src/config/index.ts',\n contents: outdent`\n export default {\n default: {},\n validator() {},\n };\n `,\n },\n {\n name: 'server/src/content-types/index.ts',\n contents: outdent`\n export default {};\n `,\n },\n {\n name: 'server/src/controllers/index.ts',\n contents: outdent`\n import controller from './controller';\n\n export default {\n controller,\n };\n `,\n },\n {\n name: 'server/src/controllers/controller.ts',\n contents: outdent`\n import type { Strapi } from '@strapi/strapi';\n\n const controller = ({ strapi }: { strapi: Strapi }) => ({\n index(ctx) {\n ctx.body = strapi\n .plugin('${pluginName}')\n // the name of the service file & the method.\n .service('service')\n .getWelcomeMessage();\n },\n });\n\n export default controller\n `,\n },\n {\n name: 'server/src/middlewares/index.ts',\n contents: outdent`\n export default {};\n `,\n },\n {\n name: 'server/src/policies/index.ts',\n contents: outdent`\n export default {};\n `,\n },\n {\n name: 'server/src/routes/index.ts',\n contents: outdent`\n export default [\n {\n method: 'GET',\n path: '/',\n // name of the controller file & the method.\n handler: 'controller.index',\n config: {\n policies: [],\n },\n },\n ];\n `,\n },\n {\n name: 'server/src/services/index.ts',\n contents: outdent`\n import service from './service';\n\n export default {\n service,\n };\n `,\n },\n {\n name: 'server/src/services/service.ts',\n contents: outdent`\n import type { Strapi } from '@strapi/strapi';\n\n const service = ({ strapi }: { strapi: Strapi }) => ({\n getWelcomeMessage() {\n return 'Welcome to Strapi 🚀';\n },\n });\n\n export default service\n `,\n },\n];\n\nconst JAVASCRIPT = (pluginName: string): TemplateFile[] => [\n {\n name: 'server/src/index.ts',\n contents: outdent`\n 'use strict';\n\n /**\n * Application methods\n */\n const bootstrap = require('./bootstrap');\n const destroy = require('./destroy');\n const register = require('./register');\n\n /**\n * Plugin server methods\n */\n const config = require('./config');\n const contentTypes = require('./content-types');\n const controllers = require('./controllers');\n const middlewares = require('./middlewares');\n const policies = require('./policies');\n const routes = require('./routes');\n const services = require('./services');\n\n module.exports = {\n bootstrap,\n destroy,\n register,\n \n config,\n controllers,\n contentTypes,\n middlewares,\n policies,\n routes,\n services,\n };\n `,\n },\n {\n name: 'server/src/bootstrap.ts',\n contents: outdent`\n 'use strict';\n\n const bootstrap = ({ strapi }) => {\n // bootstrap phase\n };\n\n module.exports = bootstrap;\n `,\n },\n {\n name: 'server/src/destroy.ts',\n contents: outdent`\n 'use strict';\n\n const destroy = ({ strapi }) => {\n // destroy phase\n };\n \n module.exports = destroy;\n `,\n },\n {\n name: 'server/src/register.ts',\n contents: outdent`\n 'use strict';\n\n const register = ({ strapi }) => {\n // register phase\n };\n \n module.exports = register;\n `,\n },\n {\n name: 'server/src/config/index.ts',\n contents: outdent`\n 'use strict';\n\n module.exports = {\n default: {},\n validator() {},\n };\n `,\n },\n {\n name: 'server/src/content-types/index.ts',\n contents: outdent`\n 'use strict';\n\n module.exports = {};\n `,\n },\n {\n name: 'server/src/controllers/index.ts',\n contents: outdent`\n 'use strict';\n\n const controller = require('./controller');\n\n module.exports = {\n controller,\n };\n `,\n },\n {\n name: 'server/src/controllers/controller.ts',\n contents: outdent`\n 'use strict';\n\n const controller = ({ strapi }) => ({\n index(ctx) {\n ctx.body = strapi\n .plugin('${pluginName}')\n // the name of the service file & the method.\n .service('service')\n .getWelcomeMessage();\n },\n });\n\n module.exports = controller\n `,\n },\n {\n name: 'server/src/middlewares/index.ts',\n contents: outdent`\n 'use strict';\n\n module.exports = {};\n `,\n },\n {\n name: 'server/src/policies/index.ts',\n contents: outdent`\n 'use strict';\n\n module.exports = {};\n `,\n },\n {\n name: 'server/src/routes/index.ts',\n contents: outdent`\n 'use strict';\n\n module.exports = [\n {\n method: 'GET',\n path: '/',\n // name of the controller file & the method.\n handler: 'controller.index',\n config: {\n policies: [],\n },\n },\n ];\n `,\n },\n {\n name: 'server/src/services/index.ts',\n contents: outdent`\n 'use strict';\n\n const service = require('./service');\n\n module.exports = {\n service,\n };\n `,\n },\n {\n name: 'server/src/services/service.ts',\n contents: outdent`\n 'use strict';\n\n const service = ({ strapi }) => ({\n getWelcomeMessage() {\n return 'Welcome to Strapi 🚀';\n },\n });\n\n module.exports = service\n `,\n },\n];\n\nexport { TYPESCRIPT as serverTypescriptFiles, JAVASCRIPT as serverJavascriptFiles };\n"],"names":["outdent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sources":["../../../../../../src/cli/commands/plugin/init/files/server.ts"],"sourcesContent":["import { TemplateFile } from '@strapi/pack-up';\nimport { outdent } from 'outdent';\n\nconst TYPESCRIPT = (pluginName: string): TemplateFile[] => [\n {\n name: 'server/src/index.ts',\n contents: outdent`\n /**\n * Application methods\n */\n import bootstrap from './bootstrap';\n import destroy from './destroy';\n import register from './register';\n\n /**\n * Plugin server methods\n */\n import config from './config';\n import contentTypes from './content-types';\n import controllers from './controllers';\n import middlewares from './middlewares';\n import policies from './policies';\n import routes from './routes';\n import services from './services';\n\n export default {\n bootstrap,\n destroy,\n register,\n\n config,\n controllers,\n contentTypes,\n middlewares,\n policies,\n routes,\n services,\n };\n `,\n },\n {\n name: 'server/src/bootstrap.ts',\n contents: outdent`\n import type { Core } from '@strapi/strapi';\n\n const bootstrap = ({ strapi }: { strapi: Core.Strapi }) => {\n // bootstrap phase\n };\n\n export default bootstrap;\n `,\n },\n {\n name: 'server/src/destroy.ts',\n contents: outdent`\n import type { Core } from '@strapi/strapi';\n\n const destroy = ({ strapi }: { strapi: Core.Strapi }) => {\n // destroy phase\n };\n\n export default destroy;\n `,\n },\n {\n name: 'server/src/register.ts',\n contents: outdent`\n import type { Core } from '@strapi/strapi';\n\n const register = ({ strapi }: { strapi: Core.Strapi }) => {\n // register phase\n };\n\n export default register;\n `,\n },\n {\n name: 'server/src/config/index.ts',\n contents: outdent`\n export default {\n default: {},\n validator() {},\n };\n `,\n },\n {\n name: 'server/src/content-types/index.ts',\n contents: outdent`\n export default {};\n `,\n },\n {\n name: 'server/src/controllers/index.ts',\n contents: outdent`\n import controller from './controller';\n\n export default {\n controller,\n };\n `,\n },\n {\n name: 'server/src/controllers/controller.ts',\n contents: outdent`\n import type { Core } from '@strapi/strapi';\n\n const controller = ({ strapi }: { strapi: Core.Strapi }) => ({\n index(ctx) {\n ctx.body = strapi\n .plugin('${pluginName}')\n // the name of the service file & the method.\n .service('service')\n .getWelcomeMessage();\n },\n });\n\n export default controller\n `,\n },\n {\n name: 'server/src/middlewares/index.ts',\n contents: outdent`\n export default {};\n `,\n },\n {\n name: 'server/src/policies/index.ts',\n contents: outdent`\n export default {};\n `,\n },\n {\n name: 'server/src/routes/index.ts',\n contents: outdent`\n export default [\n {\n method: 'GET',\n path: '/',\n // name of the controller file & the method.\n handler: 'controller.index',\n config: {\n policies: [],\n },\n },\n ];\n `,\n },\n {\n name: 'server/src/services/index.ts',\n contents: outdent`\n import service from './service';\n\n export default {\n service,\n };\n `,\n },\n {\n name: 'server/src/services/service.ts',\n contents: outdent`\n import type { Core } from '@strapi/strapi';\n\n const service = ({ strapi }: { strapi: Core.Strapi }) => ({\n getWelcomeMessage() {\n return 'Welcome to Strapi 🚀';\n },\n });\n\n export default service\n `,\n },\n];\n\nconst JAVASCRIPT = (pluginName: string): TemplateFile[] => [\n {\n name: 'server/src/index.ts',\n contents: outdent`\n 'use strict';\n\n /**\n * Application methods\n */\n const bootstrap = require('./bootstrap');\n const destroy = require('./destroy');\n const register = require('./register');\n\n /**\n * Plugin server methods\n */\n const config = require('./config');\n const contentTypes = require('./content-types');\n const controllers = require('./controllers');\n const middlewares = require('./middlewares');\n const policies = require('./policies');\n const routes = require('./routes');\n const services = require('./services');\n\n module.exports = {\n bootstrap,\n destroy,\n register,\n\n config,\n controllers,\n contentTypes,\n middlewares,\n policies,\n routes,\n services,\n };\n `,\n },\n {\n name: 'server/src/bootstrap.ts',\n contents: outdent`\n 'use strict';\n\n const bootstrap = ({ strapi }) => {\n // bootstrap phase\n };\n\n module.exports = bootstrap;\n `,\n },\n {\n name: 'server/src/destroy.ts',\n contents: outdent`\n 'use strict';\n\n const destroy = ({ strapi }) => {\n // destroy phase\n };\n\n module.exports = destroy;\n `,\n },\n {\n name: 'server/src/register.ts',\n contents: outdent`\n 'use strict';\n\n const register = ({ strapi }) => {\n // register phase\n };\n\n module.exports = register;\n `,\n },\n {\n name: 'server/src/config/index.ts',\n contents: outdent`\n 'use strict';\n\n module.exports = {\n default: {},\n validator() {},\n };\n `,\n },\n {\n name: 'server/src/content-types/index.ts',\n contents: outdent`\n 'use strict';\n\n module.exports = {};\n `,\n },\n {\n name: 'server/src/controllers/index.ts',\n contents: outdent`\n 'use strict';\n\n const controller = require('./controller');\n\n module.exports = {\n controller,\n };\n `,\n },\n {\n name: 'server/src/controllers/controller.ts',\n contents: outdent`\n 'use strict';\n\n const controller = ({ strapi }) => ({\n index(ctx) {\n ctx.body = strapi\n .plugin('${pluginName}')\n // the name of the service file & the method.\n .service('service')\n .getWelcomeMessage();\n },\n });\n\n module.exports = controller\n `,\n },\n {\n name: 'server/src/middlewares/index.ts',\n contents: outdent`\n 'use strict';\n\n module.exports = {};\n `,\n },\n {\n name: 'server/src/policies/index.ts',\n contents: outdent`\n 'use strict';\n\n module.exports = {};\n `,\n },\n {\n name: 'server/src/routes/index.ts',\n contents: outdent`\n 'use strict';\n\n module.exports = [\n {\n method: 'GET',\n path: '/',\n // name of the controller file & the method.\n handler: 'controller.index',\n config: {\n policies: [],\n },\n },\n ];\n `,\n },\n {\n name: 'server/src/services/index.ts',\n contents: outdent`\n 'use strict';\n\n const service = require('./service');\n\n module.exports = {\n service,\n };\n `,\n },\n {\n name: 'server/src/services/service.ts',\n contents: outdent`\n 'use strict';\n\n const service = ({ strapi }) => ({\n getWelcomeMessage() {\n return 'Welcome to Strapi 🚀';\n },\n });\n\n module.exports = service\n `,\n },\n];\n\nexport { TYPESCRIPT as serverTypescriptFiles, JAVASCRIPT as serverJavascriptFiles };\n"],"names":["outdent"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sources":["../../../../src/cli/commands/plugin/verify.ts"],"sourcesContent":["import boxen from 'boxen';\nimport chalk from 'chalk';\nimport { CheckOptions, check } from '@strapi/pack-up';\n\nimport { runAction } from '../../utils/helpers';\nimport type { StrapiCommand, CLIContext } from '../../types';\n\
|
|
1
|
+
{"version":3,"file":"verify.js","sources":["../../../../src/cli/commands/plugin/verify.ts"],"sourcesContent":["import boxen from 'boxen';\nimport chalk from 'chalk';\nimport { CheckOptions, check } from '@strapi/pack-up';\n\nimport { runAction } from '../../utils/helpers';\nimport type { StrapiCommand, CLIContext } from '../../types';\n\ntype ActionOptions = CheckOptions;\n\nconst action = async (opts: ActionOptions, _cmd: unknown, { cwd, logger }: CLIContext) => {\n try {\n await check({\n cwd,\n ...opts,\n });\n } catch (err) {\n logger.error(\n 'There seems to be an unexpected error, try again with --debug for more information \\n'\n );\n if (err instanceof Error && err.stack) {\n console.log(\n chalk.red(\n boxen(err.stack, {\n padding: 1,\n align: 'left',\n })\n )\n );\n }\n process.exit(1);\n }\n};\n\n/**\n * `$ strapi plugin:verify`\n */\nconst command: StrapiCommand = ({ command, ctx }) => {\n command\n .command('plugin:verify')\n .description('Verify the output of your plugin before publishing it.')\n .option('-d, --debug', 'Enable debugging mode with verbose logs', false)\n .option('--silent', \"Don't log anything\", false)\n .action((...args) => runAction('plugin:verify', action)(...args, ctx));\n};\n\nexport { command };\n"],"names":["check","chalk","boxen","command","runAction"],"mappings":";;;;;;;;;AASA,MAAM,SAAS,OAAO,MAAqB,MAAe,EAAE,KAAK,aAAyB;AACpF,MAAA;AACF,UAAMA,aAAM;AAAA,MACV;AAAA,MACA,GAAG;AAAA,IAAA,CACJ;AAAA,WACM,KAAK;AACL,WAAA;AAAA,MACL;AAAA,IAAA;AAEE,QAAA,eAAe,SAAS,IAAI,OAAO;AAC7B,cAAA;AAAA,QACNC,eAAAA,QAAM;AAAA,UACJC,eAAA,QAAM,IAAI,OAAO;AAAA,YACf,SAAS;AAAA,YACT,OAAO;AAAA,UAAA,CACR;AAAA,QACH;AAAA,MAAA;AAAA,IAEJ;AACA,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAKA,MAAM,UAAyB,CAAC,EAAE,SAAAC,UAAS,UAAU;AACnDA,WACG,QAAQ,eAAe,EACvB,YAAY,wDAAwD,EACpE,OAAO,eAAe,2CAA2C,KAAK,EACtE,OAAO,YAAY,sBAAsB,KAAK,EAC9C,OAAO,IAAI,SAASC,QAAAA,UAAU,iBAAiB,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC;AACzE;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.js","sources":["../../../../src/cli/commands/plugin/watch.ts"],"sourcesContent":["import { createCommand } from 'commander';\nimport boxen from 'boxen';\nimport chalk from 'chalk';\nimport { ConfigBundle, WatchCLIOptions, watch } from '@strapi/pack-up';\n\nimport { runAction } from '../../utils/helpers';\nimport { Export, loadPkg, validatePkg } from '../../utils/pkg';\nimport type { StrapiCommand, CLIContext } from '../../types';\n\
|
|
1
|
+
{"version":3,"file":"watch.js","sources":["../../../../src/cli/commands/plugin/watch.ts"],"sourcesContent":["import { createCommand } from 'commander';\nimport boxen from 'boxen';\nimport chalk from 'chalk';\nimport { ConfigBundle, WatchCLIOptions, watch } from '@strapi/pack-up';\n\nimport { runAction } from '../../utils/helpers';\nimport { Export, loadPkg, validatePkg } from '../../utils/pkg';\nimport type { StrapiCommand, CLIContext } from '../../types';\n\ntype ActionOptions = WatchCLIOptions;\n\nconst action = async (opts: ActionOptions, _cmd: unknown, { cwd, logger }: CLIContext) => {\n try {\n const pkg = await loadPkg({ cwd, logger });\n const pkgJson = await validatePkg({ pkg });\n\n if (!pkgJson.exports['./strapi-admin'] && !pkgJson.exports['./strapi-server']) {\n throw new Error(\n 'You need to have either a strapi-admin or strapi-server export in your package.json'\n );\n }\n\n const bundles: ConfigBundle[] = [];\n\n if (pkgJson.exports['./strapi-admin']) {\n const exp = pkgJson.exports['./strapi-admin'] as Export;\n\n const bundle: ConfigBundle = {\n source: exp.source,\n import: exp.import,\n require: exp.require,\n runtime: 'web',\n };\n\n if (exp.types) {\n bundle.types = exp.types;\n // TODO: should this be sliced from the source path...?\n bundle.tsconfig = './admin/tsconfig.build.json';\n }\n\n bundles.push(bundle);\n }\n\n if (pkgJson.exports['./strapi-server']) {\n const exp = pkgJson.exports['./strapi-server'] as Export;\n\n const bundle: ConfigBundle = {\n source: exp.source,\n import: exp.import,\n require: exp.require,\n runtime: 'node',\n };\n\n if (exp.types) {\n bundle.types = exp.types;\n // TODO: should this be sliced from the source path...?\n bundle.tsconfig = './server/tsconfig.build.json';\n }\n\n bundles.push(bundle);\n }\n\n await watch({\n cwd,\n configFile: false,\n config: {\n bundles,\n dist: './dist',\n /**\n * ignore the exports map of a plugin, because we're streamlining the\n * process and ensuring the server package and admin package are built\n * with the correct runtime and their individual tsconfigs\n */\n exports: {},\n },\n ...opts,\n });\n } catch (err) {\n logger.error(\n 'There seems to be an unexpected error, try again with --debug for more information \\n'\n );\n if (err instanceof Error && err.stack) {\n console.log(\n chalk.red(\n boxen(err.stack, {\n padding: 1,\n align: 'left',\n })\n )\n );\n }\n process.exit(1);\n }\n};\n\n/**\n * `$ strapi plugin:watch`\n */\nconst command: StrapiCommand = ({ ctx }) => {\n return createCommand('plugin:watch')\n .description('Watch & compile your strapi plugin for local development.')\n .option('-d, --debug', 'Enable debugging mode with verbose logs', false)\n .option('--silent', \"Don't log anything\", false)\n .action((...args) => runAction('plugin:watch', action)(...args, ctx));\n};\n\nexport { command };\n"],"names":["pkg","loadPkg","validatePkg","watch","chalk","boxen","createCommand","runAction"],"mappings":";;;;;;;;;;;AAWA,MAAM,SAAS,OAAO,MAAqB,MAAe,EAAE,KAAK,aAAyB;AACpF,MAAA;AACF,UAAMA,QAAM,MAAMC,IAAA,QAAQ,EAAE,KAAK,OAAQ,CAAA;AACzC,UAAM,UAAU,MAAMC,IAAAA,YAAY,EAAEF,KAAAA,MAAK,CAAA;AAErC,QAAA,CAAC,QAAQ,QAAQ,gBAAgB,KAAK,CAAC,QAAQ,QAAQ,iBAAiB,GAAG;AAC7E,YAAM,IAAI;AAAA,QACR;AAAA,MAAA;AAAA,IAEJ;AAEA,UAAM,UAA0B,CAAA;AAE5B,QAAA,QAAQ,QAAQ,gBAAgB,GAAG;AAC/B,YAAA,MAAM,QAAQ,QAAQ,gBAAgB;AAE5C,YAAM,SAAuB;AAAA,QAC3B,QAAQ,IAAI;AAAA,QACZ,QAAQ,IAAI;AAAA,QACZ,SAAS,IAAI;AAAA,QACb,SAAS;AAAA,MAAA;AAGX,UAAI,IAAI,OAAO;AACb,eAAO,QAAQ,IAAI;AAEnB,eAAO,WAAW;AAAA,MACpB;AAEA,cAAQ,KAAK,MAAM;AAAA,IACrB;AAEI,QAAA,QAAQ,QAAQ,iBAAiB,GAAG;AAChC,YAAA,MAAM,QAAQ,QAAQ,iBAAiB;AAE7C,YAAM,SAAuB;AAAA,QAC3B,QAAQ,IAAI;AAAA,QACZ,QAAQ,IAAI;AAAA,QACZ,SAAS,IAAI;AAAA,QACb,SAAS;AAAA,MAAA;AAGX,UAAI,IAAI,OAAO;AACb,eAAO,QAAQ,IAAI;AAEnB,eAAO,WAAW;AAAA,MACpB;AAEA,cAAQ,KAAK,MAAM;AAAA,IACrB;AAEA,UAAMG,aAAM;AAAA,MACV;AAAA,MACA,YAAY;AAAA,MACZ,QAAQ;AAAA,QACN;AAAA,QACA,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMN,SAAS,CAAC;AAAA,MACZ;AAAA,MACA,GAAG;AAAA,IAAA,CACJ;AAAA,WACM,KAAK;AACL,WAAA;AAAA,MACL;AAAA,IAAA;AAEE,QAAA,eAAe,SAAS,IAAI,OAAO;AAC7B,cAAA;AAAA,QACNC,eAAAA,QAAM;AAAA,UACJC,eAAA,QAAM,IAAI,OAAO;AAAA,YACf,SAAS;AAAA,YACT,OAAO;AAAA,UAAA,CACR;AAAA,QACH;AAAA,MAAA;AAAA,IAEJ;AACA,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAKA,MAAM,UAAyB,CAAC,EAAE,UAAU;AACnC,SAAAC,wBAAc,cAAc,EAChC,YAAY,2DAA2D,EACvE,OAAO,eAAe,2CAA2C,KAAK,EACtE,OAAO,YAAY,sBAAsB,KAAK,EAC9C,OAAO,IAAI,SAASC,QAAA,UAAU,gBAAgB,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC;AACxE;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import Table from 'cli-table3';
|
|
2
2
|
import { Command, Option } from 'commander';
|
|
3
3
|
import ora from 'ora';
|
|
4
|
-
import type {
|
|
4
|
+
import type { Core } from '@strapi/types';
|
|
5
5
|
import { engine as engineDataTransfer } from '@strapi/data-transfer';
|
|
6
6
|
declare const exitMessageText: (process: string, error?: boolean) => string;
|
|
7
7
|
declare const getDefaultExportName: () => string;
|
|
@@ -10,12 +10,12 @@ declare const buildTransferTable: (resultData: ResultData) => Table.Table | unde
|
|
|
10
10
|
declare const DEFAULT_IGNORED_CONTENT_TYPES: string[];
|
|
11
11
|
declare const abortTransfer: ({ engine, strapi, }: {
|
|
12
12
|
engine: engineDataTransfer.TransferEngine;
|
|
13
|
-
strapi: LoadedStrapi;
|
|
13
|
+
strapi: Core.LoadedStrapi;
|
|
14
14
|
}) => Promise<boolean>;
|
|
15
15
|
declare const setSignalHandler: (handler: (...args: unknown[]) => void, signals?: string[]) => Promise<void>;
|
|
16
16
|
declare const createStrapiInstance: (opts?: {
|
|
17
17
|
logLevel?: string;
|
|
18
|
-
}) => Promise<Strapi & Required<Strapi>>;
|
|
18
|
+
}) => Promise<Core.Strapi & Required<Core.Strapi>>;
|
|
19
19
|
declare const throttleOption: Option;
|
|
20
20
|
declare const excludeOption: Option;
|
|
21
21
|
declare const onlyOption: Option;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-transfer.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/data-transfer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAG5C,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"data-transfer.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/data-transfer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-transfer.js","sources":["../../../src/cli/utils/data-transfer.ts"],"sourcesContent":["import chalk from 'chalk';\nimport Table from 'cli-table3';\nimport { Command, Option } from 'commander';\nimport { configs, createLogger } from '@strapi/logger';\nimport { strapiFactory } from '@strapi/core';\nimport ora from 'ora';\nimport { merge } from 'lodash/fp';\nimport type { LoadedStrapi, Strapi } from '@strapi/types';\nimport { engine as engineDataTransfer, strapi as strapiDataTransfer } from '@strapi/data-transfer';\n\nimport { readableBytes, exitWith } from './helpers';\nimport { getParseListWithChoices, parseInteger, confirmMessage } from './commander';\n\nconst {\n errors: { TransferEngineInitializationError },\n} = engineDataTransfer;\n\nconst exitMessageText = (process: string, error = false) => {\n const processCapitalized = process[0].toUpperCase() + process.slice(1);\n\n if (!error) {\n return chalk.bold(\n chalk.green(`${processCapitalized} process has been completed successfully!`)\n );\n }\n\n return chalk.bold(chalk.red(`${processCapitalized} process failed.`));\n};\n\nconst pad = (n: number) => {\n return (n < 10 ? '0' : '') + String(n);\n};\n\nconst yyyymmddHHMMSS = () => {\n const date = new Date();\n\n return (\n date.getFullYear() +\n pad(date.getMonth() + 1) +\n pad(date.getDate()) +\n pad(date.getHours()) +\n pad(date.getMinutes()) +\n pad(date.getSeconds())\n );\n};\n\nconst getDefaultExportName = () => {\n return `export_${yyyymmddHHMMSS()}`;\n};\n\ntype ResultData = engineDataTransfer.ITransferResults<\n engineDataTransfer.ISourceProvider,\n engineDataTransfer.IDestinationProvider\n>['engine'];\n\nconst buildTransferTable = (resultData: ResultData) => {\n if (!resultData) {\n return;\n }\n\n // Build pretty table\n const table = new Table({\n head: ['Type', 'Count', 'Size'].map((text) => chalk.bold.blue(text)),\n });\n\n let totalBytes = 0;\n let totalItems = 0;\n (Object.keys(resultData) as engineDataTransfer.TransferStage[]).forEach((stage) => {\n const item = resultData[stage];\n\n if (!item) {\n return;\n }\n\n table.push([\n { hAlign: 'left', content: chalk.bold(stage) },\n { hAlign: 'right', content: item.count },\n { hAlign: 'right', content: `${readableBytes(item.bytes, 1, 11)} ` },\n ]);\n totalBytes += item.bytes;\n totalItems += item.count;\n\n if (item.aggregates) {\n (Object.keys(item.aggregates) as (keyof typeof item.aggregates)[])\n .sort()\n .forEach((subkey) => {\n if (!item.aggregates) {\n return;\n }\n\n const subitem = item.aggregates[subkey];\n\n table.push([\n { hAlign: 'left', content: `-- ${chalk.bold.grey(subkey)}` },\n { hAlign: 'right', content: chalk.grey(subitem.count) },\n { hAlign: 'right', content: chalk.grey(`(${readableBytes(subitem.bytes, 1, 11)})`) },\n ]);\n });\n }\n });\n table.push([\n { hAlign: 'left', content: chalk.bold.green('Total') },\n { hAlign: 'right', content: chalk.bold.green(totalItems) },\n { hAlign: 'right', content: `${chalk.bold.green(readableBytes(totalBytes, 1, 11))} ` },\n ]);\n\n return table;\n};\n\nconst DEFAULT_IGNORED_CONTENT_TYPES = [\n 'admin::permission',\n 'admin::user',\n 'admin::role',\n 'admin::api-token',\n 'admin::api-token-permission',\n 'admin::transfer-token',\n 'admin::transfer-token-permission',\n 'admin::audit-log',\n 'plugin::content-releases.release',\n 'plugin::content-releases.release-action',\n];\n\nconst abortTransfer = async ({\n engine,\n strapi,\n}: {\n engine: engineDataTransfer.TransferEngine;\n strapi: LoadedStrapi;\n}) => {\n try {\n await engine.abortTransfer();\n await strapi.destroy();\n } catch (e) {\n // ignore because there's not much else we can do\n return false;\n }\n return true;\n};\n\nconst setSignalHandler = async (\n handler: (...args: unknown[]) => void,\n signals = ['SIGINT', 'SIGTERM', 'SIGQUIT']\n) => {\n signals.forEach((signal) => {\n // We specifically remove ALL listeners because we have to clear the one added in Strapi bootstrap that has a process.exit\n // TODO: Ideally Strapi bootstrap would not add that listener, and then this could be more flexible and add/remove only what it needs to\n process.removeAllListeners(signal);\n process.on(signal, handler);\n });\n};\n\nconst createStrapiInstance = async (\n opts: { logLevel?: string } = {}\n): Promise<Strapi & Required<Strapi>> => {\n try {\n const appContext = await strapiFactory.compile();\n const app = strapiFactory({ ...opts, ...appContext });\n\n app.log.level = opts.logLevel || 'error';\n return await app.load();\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ECONNREFUSED') {\n throw new Error('Process failed. Check the database connection with your Strapi project.');\n }\n\n throw error;\n }\n};\n\nconst transferDataTypes = Object.keys(engineDataTransfer.TransferGroupPresets);\n\nconst throttleOption = new Option(\n '--throttle <delay after each entity>',\n `Add a delay in milliseconds between each transferred entity`\n)\n .argParser(parseInteger)\n .hideHelp(); // This option is not publicly documented\n\nconst excludeOption = new Option(\n '--exclude <comma-separated data types>',\n `Exclude data using comma-separated types. Available types: ${transferDataTypes.join(',')}`\n).argParser(getParseListWithChoices(transferDataTypes, 'Invalid options for \"exclude\"'));\n\nconst onlyOption = new Option(\n '--only <command-separated data types>',\n `Include only these types of data (plus schemas). Available types: ${transferDataTypes.join(',')}`\n).argParser(getParseListWithChoices(transferDataTypes, 'Invalid options for \"only\"'));\n\nconst validateExcludeOnly = (command: Command) => {\n const { exclude, only } = command.opts();\n if (!only || !exclude) {\n return;\n }\n\n const choicesInBoth = only.filter((n: string) => {\n return exclude.indexOf(n) !== -1;\n });\n if (choicesInBoth.length > 0) {\n exitWith(\n 1,\n `Data types may not be used in both \"exclude\" and \"only\" in the same command. Found in both: ${choicesInBoth.join(\n ','\n )}`\n );\n }\n};\n\nconst errorColors = {\n fatal: chalk.red,\n error: chalk.red,\n silly: chalk.yellow,\n} as const;\n\nconst formatDiagnostic =\n (\n operation: string\n ): Parameters<engineDataTransfer.TransferEngine['diagnostics']['onDiagnostic']>[0] =>\n ({ details, kind }) => {\n const logger = createLogger(\n configs.createOutputFileConfiguration(`${operation}_error_log_${Date.now()}.log`)\n );\n try {\n if (kind === 'error') {\n const { message, severity = 'fatal' } = details;\n\n const colorizeError = errorColors[severity];\n const errorMessage = colorizeError(`[${severity.toUpperCase()}] ${message}`);\n\n logger.error(errorMessage);\n }\n if (kind === 'info') {\n const { message, params } = details;\n\n const msg = `${message}\\n${params ? JSON.stringify(params, null, 2) : ''}`;\n\n logger.info(msg);\n }\n if (kind === 'warning') {\n const { origin, message } = details;\n\n logger.warn(`(${origin ?? 'transfer'}) ${message}`);\n }\n } catch (err) {\n logger.error(err);\n }\n };\n\ntype Loaders = {\n [key in engineDataTransfer.TransferStage]: ora.Ora;\n};\n\ntype Data = {\n [key in engineDataTransfer.TransferStage]?: {\n startTime?: number;\n endTime?: number;\n bytes?: number;\n count?: number;\n };\n};\n\nconst loadersFactory = (defaultLoaders: Loaders = {} as Loaders) => {\n const loaders = defaultLoaders;\n const updateLoader = (stage: engineDataTransfer.TransferStage, data: Data) => {\n if (!(stage in loaders)) {\n createLoader(stage);\n }\n\n const stageData = data[stage];\n const elapsedTime = stageData?.startTime\n ? (stageData?.endTime || Date.now()) - stageData.startTime\n : 0;\n const size = `size: ${readableBytes(stageData?.bytes ?? 0)}`;\n const elapsed = `elapsed: ${elapsedTime} ms`;\n const speed =\n elapsedTime > 0 ? `(${readableBytes(((stageData?.bytes ?? 0) * 1000) / elapsedTime)}/s)` : '';\n\n loaders[stage].text = `${stage}: ${stageData?.count ?? 0} transfered (${size}) (${elapsed}) ${\n !stageData?.endTime ? speed : ''\n }`;\n\n return loaders[stage];\n };\n\n const createLoader = (stage: engineDataTransfer.TransferStage) => {\n Object.assign(loaders, { [stage]: ora() });\n return loaders[stage];\n };\n\n const getLoader = (stage: engineDataTransfer.TransferStage) => {\n return loaders[stage];\n };\n\n return {\n updateLoader,\n createLoader,\n getLoader,\n };\n};\n\n/**\n * Get the telemetry data to be sent for a didDEITSProcess* event from an initialized transfer engine object\n */\nconst getTransferTelemetryPayload = (engine: engineDataTransfer.TransferEngine) => {\n return {\n eventProperties: {\n source: engine?.sourceProvider?.name,\n destination: engine?.destinationProvider?.name,\n },\n };\n};\n\n/**\n * Get a transfer engine schema diff handler that confirms with the user before bypassing a schema check\n */\nconst getDiffHandler = (\n engine: engineDataTransfer.TransferEngine,\n {\n force,\n action,\n }: {\n force?: boolean;\n action: string;\n }\n) => {\n return async (\n context: engineDataTransfer.SchemaDiffHandlerContext,\n next: (ctx: engineDataTransfer.SchemaDiffHandlerContext) => void\n ) => {\n // if we abort here, we need to actually exit the process because of conflict with inquirer prompt\n setSignalHandler(async () => {\n await abortTransfer({ engine, strapi: strapi as LoadedStrapi });\n exitWith(1, exitMessageText(action, true));\n });\n\n let workflowsStatus;\n const source = 'Schema Integrity';\n\n Object.entries(context.diffs).forEach(([uid, diffs]) => {\n for (const diff of diffs) {\n const path = [uid].concat(diff.path).join('.');\n const endPath = diff.path[diff.path.length - 1];\n\n // Catch known features\n if (\n uid === 'admin::workflow' ||\n uid === 'admin::workflow-stage' ||\n endPath?.startsWith('strapi_stage') ||\n endPath?.startsWith('strapi_assignee')\n ) {\n workflowsStatus = diff.kind;\n }\n // handle generic cases\n else if (diff.kind === 'added') {\n engine.reportWarning(chalk.red(`${chalk.bold(path)} does not exist on source`), source);\n } else if (diff.kind === 'deleted') {\n engine.reportWarning(\n chalk.red(`${chalk.bold(path)} does not exist on destination`),\n source\n );\n } else if (diff.kind === 'modified') {\n engine.reportWarning(chalk.red(`${chalk.bold(path)} has a different data type`), source);\n }\n }\n });\n\n // output the known feature warnings\n if (workflowsStatus === 'added') {\n engine.reportWarning(chalk.red(`Review workflows feature does not exist on source`), source);\n } else if (workflowsStatus === 'deleted') {\n engine.reportWarning(\n chalk.red(`Review workflows feature does not exist on destination`),\n source\n );\n } else if (workflowsStatus === 'modified') {\n engine.panic(\n new TransferEngineInitializationError('Unresolved differences in schema [review workflows]')\n );\n }\n\n const confirmed = await confirmMessage(\n 'There are differences in schema between the source and destination, and the data listed above will be lost. Are you sure you want to continue?',\n {\n force,\n }\n );\n\n // reset handler back to normal\n setSignalHandler(() => abortTransfer({ engine, strapi: strapi as LoadedStrapi }));\n\n if (confirmed) {\n context.ignoredDiffs = merge(context.diffs, context.ignoredDiffs);\n }\n\n return next(context);\n };\n};\n\nconst getAssetsBackupHandler = (\n engine: engineDataTransfer.TransferEngine,\n {\n force,\n action,\n }: {\n force?: boolean;\n action: string;\n }\n) => {\n return async (\n context: engineDataTransfer.ErrorHandlerContext,\n next: (ctx: engineDataTransfer.ErrorHandlerContext) => void\n ) => {\n // if we abort here, we need to actually exit the process because of conflict with inquirer prompt\n setSignalHandler(async () => {\n await abortTransfer({ engine, strapi: strapi as LoadedStrapi });\n exitWith(1, exitMessageText(action, true));\n });\n\n console.warn(\n 'The backup for the assets could not be created inside the public directory. Ensure Strapi has write permissions on the public directory.'\n );\n const confirmed = await confirmMessage(\n 'Do you want to continue without backing up your public/uploads files?',\n {\n force,\n }\n );\n\n if (confirmed) {\n context.ignore = true;\n }\n\n // reset handler back to normal\n setSignalHandler(() => abortTransfer({ engine, strapi: strapi as LoadedStrapi }));\n return next(context);\n };\n};\n\nconst shouldSkipStage = (\n opts: Partial<engineDataTransfer.ITransferEngineOptions>,\n dataKind: engineDataTransfer.TransferFilterPreset\n) => {\n if (opts.exclude?.includes(dataKind)) {\n return true;\n }\n if (opts.only) {\n return !opts.only.includes(dataKind);\n }\n\n return false;\n};\n\ntype RestoreConfig = NonNullable<\n strapiDataTransfer.providers.ILocalStrapiDestinationProviderOptions['restore']\n>;\n\n// Based on exclude/only from options, create the restore object to match\nconst parseRestoreFromOptions = (opts: Partial<engineDataTransfer.ITransferEngineOptions>) => {\n const entitiesOptions: RestoreConfig['entities'] = {\n exclude: DEFAULT_IGNORED_CONTENT_TYPES,\n include: undefined,\n };\n\n // if content is not included, send an empty array for include\n if ((opts.only && !opts.only.includes('content')) || opts.exclude?.includes('content')) {\n entitiesOptions.include = [];\n }\n\n const restoreConfig: strapiDataTransfer.providers.ILocalStrapiDestinationProviderOptions['restore'] =\n {\n entities: entitiesOptions,\n assets: !shouldSkipStage(opts, 'files'),\n configuration: {\n webhook: !shouldSkipStage(opts, 'config'),\n coreStore: !shouldSkipStage(opts, 'config'),\n },\n };\n\n return restoreConfig;\n};\n\nexport {\n loadersFactory,\n buildTransferTable,\n getDefaultExportName,\n getTransferTelemetryPayload,\n DEFAULT_IGNORED_CONTENT_TYPES,\n createStrapiInstance,\n excludeOption,\n exitMessageText,\n onlyOption,\n throttleOption,\n validateExcludeOnly,\n formatDiagnostic,\n abortTransfer,\n setSignalHandler,\n getDiffHandler,\n getAssetsBackupHandler,\n shouldSkipStage,\n parseRestoreFromOptions,\n};\n"],"names":["engineDataTransfer","process","chalk","Table","readableBytes","strapi","strapiFactory","Option","parseInteger","getParseListWithChoices","exitWith","logger","createLogger","configs","ora","confirmMessage","merge"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"data-transfer.js","sources":["../../../src/cli/utils/data-transfer.ts"],"sourcesContent":["import chalk from 'chalk';\nimport Table from 'cli-table3';\nimport { Command, Option } from 'commander';\nimport { configs, createLogger } from '@strapi/logger';\nimport { strapiFactory } from '@strapi/core';\nimport ora from 'ora';\nimport { merge } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\nimport { engine as engineDataTransfer, strapi as strapiDataTransfer } from '@strapi/data-transfer';\n\nimport { readableBytes, exitWith } from './helpers';\nimport { getParseListWithChoices, parseInteger, confirmMessage } from './commander';\n\nconst {\n errors: { TransferEngineInitializationError },\n} = engineDataTransfer;\n\nconst exitMessageText = (process: string, error = false) => {\n const processCapitalized = process[0].toUpperCase() + process.slice(1);\n\n if (!error) {\n return chalk.bold(\n chalk.green(`${processCapitalized} process has been completed successfully!`)\n );\n }\n\n return chalk.bold(chalk.red(`${processCapitalized} process failed.`));\n};\n\nconst pad = (n: number) => {\n return (n < 10 ? '0' : '') + String(n);\n};\n\nconst yyyymmddHHMMSS = () => {\n const date = new Date();\n\n return (\n date.getFullYear() +\n pad(date.getMonth() + 1) +\n pad(date.getDate()) +\n pad(date.getHours()) +\n pad(date.getMinutes()) +\n pad(date.getSeconds())\n );\n};\n\nconst getDefaultExportName = () => {\n return `export_${yyyymmddHHMMSS()}`;\n};\n\ntype ResultData = engineDataTransfer.ITransferResults<\n engineDataTransfer.ISourceProvider,\n engineDataTransfer.IDestinationProvider\n>['engine'];\n\nconst buildTransferTable = (resultData: ResultData) => {\n if (!resultData) {\n return;\n }\n\n // Build pretty table\n const table = new Table({\n head: ['Type', 'Count', 'Size'].map((text) => chalk.bold.blue(text)),\n });\n\n let totalBytes = 0;\n let totalItems = 0;\n (Object.keys(resultData) as engineDataTransfer.TransferStage[]).forEach((stage) => {\n const item = resultData[stage];\n\n if (!item) {\n return;\n }\n\n table.push([\n { hAlign: 'left', content: chalk.bold(stage) },\n { hAlign: 'right', content: item.count },\n { hAlign: 'right', content: `${readableBytes(item.bytes, 1, 11)} ` },\n ]);\n totalBytes += item.bytes;\n totalItems += item.count;\n\n if (item.aggregates) {\n (Object.keys(item.aggregates) as (keyof typeof item.aggregates)[])\n .sort()\n .forEach((subkey) => {\n if (!item.aggregates) {\n return;\n }\n\n const subitem = item.aggregates[subkey];\n\n table.push([\n { hAlign: 'left', content: `-- ${chalk.bold.grey(subkey)}` },\n { hAlign: 'right', content: chalk.grey(subitem.count) },\n { hAlign: 'right', content: chalk.grey(`(${readableBytes(subitem.bytes, 1, 11)})`) },\n ]);\n });\n }\n });\n table.push([\n { hAlign: 'left', content: chalk.bold.green('Total') },\n { hAlign: 'right', content: chalk.bold.green(totalItems) },\n { hAlign: 'right', content: `${chalk.bold.green(readableBytes(totalBytes, 1, 11))} ` },\n ]);\n\n return table;\n};\n\nconst DEFAULT_IGNORED_CONTENT_TYPES = [\n 'admin::permission',\n 'admin::user',\n 'admin::role',\n 'admin::api-token',\n 'admin::api-token-permission',\n 'admin::transfer-token',\n 'admin::transfer-token-permission',\n 'admin::audit-log',\n 'plugin::content-releases.release',\n 'plugin::content-releases.release-action',\n];\n\nconst abortTransfer = async ({\n engine,\n strapi,\n}: {\n engine: engineDataTransfer.TransferEngine;\n strapi: Core.LoadedStrapi;\n}) => {\n try {\n await engine.abortTransfer();\n await strapi.destroy();\n } catch (e) {\n // ignore because there's not much else we can do\n return false;\n }\n return true;\n};\n\nconst setSignalHandler = async (\n handler: (...args: unknown[]) => void,\n signals = ['SIGINT', 'SIGTERM', 'SIGQUIT']\n) => {\n signals.forEach((signal) => {\n // We specifically remove ALL listeners because we have to clear the one added in Strapi bootstrap that has a process.exit\n // TODO: Ideally Strapi bootstrap would not add that listener, and then this could be more flexible and add/remove only what it needs to\n process.removeAllListeners(signal);\n process.on(signal, handler);\n });\n};\n\nconst createStrapiInstance = async (\n opts: { logLevel?: string } = {}\n): Promise<Core.Strapi & Required<Core.Strapi>> => {\n try {\n const appContext = await strapiFactory.compile();\n const app = strapiFactory({ ...opts, ...appContext });\n\n app.log.level = opts.logLevel || 'error';\n return await app.load();\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ECONNREFUSED') {\n throw new Error('Process failed. Check the database connection with your Strapi project.');\n }\n\n throw error;\n }\n};\n\nconst transferDataTypes = Object.keys(engineDataTransfer.TransferGroupPresets);\n\nconst throttleOption = new Option(\n '--throttle <delay after each entity>',\n `Add a delay in milliseconds between each transferred entity`\n)\n .argParser(parseInteger)\n .hideHelp(); // This option is not publicly documented\n\nconst excludeOption = new Option(\n '--exclude <comma-separated data types>',\n `Exclude data using comma-separated types. Available types: ${transferDataTypes.join(',')}`\n).argParser(getParseListWithChoices(transferDataTypes, 'Invalid options for \"exclude\"'));\n\nconst onlyOption = new Option(\n '--only <command-separated data types>',\n `Include only these types of data (plus schemas). Available types: ${transferDataTypes.join(',')}`\n).argParser(getParseListWithChoices(transferDataTypes, 'Invalid options for \"only\"'));\n\nconst validateExcludeOnly = (command: Command) => {\n const { exclude, only } = command.opts();\n if (!only || !exclude) {\n return;\n }\n\n const choicesInBoth = only.filter((n: string) => {\n return exclude.indexOf(n) !== -1;\n });\n if (choicesInBoth.length > 0) {\n exitWith(\n 1,\n `Data types may not be used in both \"exclude\" and \"only\" in the same command. Found in both: ${choicesInBoth.join(\n ','\n )}`\n );\n }\n};\n\nconst errorColors = {\n fatal: chalk.red,\n error: chalk.red,\n silly: chalk.yellow,\n} as const;\n\nconst formatDiagnostic =\n (\n operation: string\n ): Parameters<engineDataTransfer.TransferEngine['diagnostics']['onDiagnostic']>[0] =>\n ({ details, kind }) => {\n const logger = createLogger(\n configs.createOutputFileConfiguration(`${operation}_error_log_${Date.now()}.log`)\n );\n try {\n if (kind === 'error') {\n const { message, severity = 'fatal' } = details;\n\n const colorizeError = errorColors[severity];\n const errorMessage = colorizeError(`[${severity.toUpperCase()}] ${message}`);\n\n logger.error(errorMessage);\n }\n if (kind === 'info') {\n const { message, params } = details;\n\n const msg = `${message}\\n${params ? JSON.stringify(params, null, 2) : ''}`;\n\n logger.info(msg);\n }\n if (kind === 'warning') {\n const { origin, message } = details;\n\n logger.warn(`(${origin ?? 'transfer'}) ${message}`);\n }\n } catch (err) {\n logger.error(err);\n }\n };\n\ntype Loaders = {\n [key in engineDataTransfer.TransferStage]: ora.Ora;\n};\n\ntype Data = {\n [key in engineDataTransfer.TransferStage]?: {\n startTime?: number;\n endTime?: number;\n bytes?: number;\n count?: number;\n };\n};\n\nconst loadersFactory = (defaultLoaders: Loaders = {} as Loaders) => {\n const loaders = defaultLoaders;\n const updateLoader = (stage: engineDataTransfer.TransferStage, data: Data) => {\n if (!(stage in loaders)) {\n createLoader(stage);\n }\n\n const stageData = data[stage];\n const elapsedTime = stageData?.startTime\n ? (stageData?.endTime || Date.now()) - stageData.startTime\n : 0;\n const size = `size: ${readableBytes(stageData?.bytes ?? 0)}`;\n const elapsed = `elapsed: ${elapsedTime} ms`;\n const speed =\n elapsedTime > 0 ? `(${readableBytes(((stageData?.bytes ?? 0) * 1000) / elapsedTime)}/s)` : '';\n\n loaders[stage].text = `${stage}: ${stageData?.count ?? 0} transfered (${size}) (${elapsed}) ${\n !stageData?.endTime ? speed : ''\n }`;\n\n return loaders[stage];\n };\n\n const createLoader = (stage: engineDataTransfer.TransferStage) => {\n Object.assign(loaders, { [stage]: ora() });\n return loaders[stage];\n };\n\n const getLoader = (stage: engineDataTransfer.TransferStage) => {\n return loaders[stage];\n };\n\n return {\n updateLoader,\n createLoader,\n getLoader,\n };\n};\n\n/**\n * Get the telemetry data to be sent for a didDEITSProcess* event from an initialized transfer engine object\n */\nconst getTransferTelemetryPayload = (engine: engineDataTransfer.TransferEngine) => {\n return {\n eventProperties: {\n source: engine?.sourceProvider?.name,\n destination: engine?.destinationProvider?.name,\n },\n };\n};\n\n/**\n * Get a transfer engine schema diff handler that confirms with the user before bypassing a schema check\n */\nconst getDiffHandler = (\n engine: engineDataTransfer.TransferEngine,\n {\n force,\n action,\n }: {\n force?: boolean;\n action: string;\n }\n) => {\n return async (\n context: engineDataTransfer.SchemaDiffHandlerContext,\n next: (ctx: engineDataTransfer.SchemaDiffHandlerContext) => void\n ) => {\n // if we abort here, we need to actually exit the process because of conflict with inquirer prompt\n setSignalHandler(async () => {\n await abortTransfer({ engine, strapi: strapi as Core.LoadedStrapi });\n exitWith(1, exitMessageText(action, true));\n });\n\n let workflowsStatus;\n const source = 'Schema Integrity';\n\n Object.entries(context.diffs).forEach(([uid, diffs]) => {\n for (const diff of diffs) {\n const path = [uid].concat(diff.path).join('.');\n const endPath = diff.path[diff.path.length - 1];\n\n // Catch known features\n if (\n uid === 'admin::workflow' ||\n uid === 'admin::workflow-stage' ||\n endPath?.startsWith('strapi_stage') ||\n endPath?.startsWith('strapi_assignee')\n ) {\n workflowsStatus = diff.kind;\n }\n // handle generic cases\n else if (diff.kind === 'added') {\n engine.reportWarning(chalk.red(`${chalk.bold(path)} does not exist on source`), source);\n } else if (diff.kind === 'deleted') {\n engine.reportWarning(\n chalk.red(`${chalk.bold(path)} does not exist on destination`),\n source\n );\n } else if (diff.kind === 'modified') {\n engine.reportWarning(chalk.red(`${chalk.bold(path)} has a different data type`), source);\n }\n }\n });\n\n // output the known feature warnings\n if (workflowsStatus === 'added') {\n engine.reportWarning(chalk.red(`Review workflows feature does not exist on source`), source);\n } else if (workflowsStatus === 'deleted') {\n engine.reportWarning(\n chalk.red(`Review workflows feature does not exist on destination`),\n source\n );\n } else if (workflowsStatus === 'modified') {\n engine.panic(\n new TransferEngineInitializationError('Unresolved differences in schema [review workflows]')\n );\n }\n\n const confirmed = await confirmMessage(\n 'There are differences in schema between the source and destination, and the data listed above will be lost. Are you sure you want to continue?',\n {\n force,\n }\n );\n\n // reset handler back to normal\n setSignalHandler(() => abortTransfer({ engine, strapi: strapi as Core.LoadedStrapi }));\n\n if (confirmed) {\n context.ignoredDiffs = merge(context.diffs, context.ignoredDiffs);\n }\n\n return next(context);\n };\n};\n\nconst getAssetsBackupHandler = (\n engine: engineDataTransfer.TransferEngine,\n {\n force,\n action,\n }: {\n force?: boolean;\n action: string;\n }\n) => {\n return async (\n context: engineDataTransfer.ErrorHandlerContext,\n next: (ctx: engineDataTransfer.ErrorHandlerContext) => void\n ) => {\n // if we abort here, we need to actually exit the process because of conflict with inquirer prompt\n setSignalHandler(async () => {\n await abortTransfer({ engine, strapi: strapi as Core.LoadedStrapi });\n exitWith(1, exitMessageText(action, true));\n });\n\n console.warn(\n 'The backup for the assets could not be created inside the public directory. Ensure Strapi has write permissions on the public directory.'\n );\n const confirmed = await confirmMessage(\n 'Do you want to continue without backing up your public/uploads files?',\n {\n force,\n }\n );\n\n if (confirmed) {\n context.ignore = true;\n }\n\n // reset handler back to normal\n setSignalHandler(() => abortTransfer({ engine, strapi: strapi as Core.LoadedStrapi }));\n return next(context);\n };\n};\n\nconst shouldSkipStage = (\n opts: Partial<engineDataTransfer.ITransferEngineOptions>,\n dataKind: engineDataTransfer.TransferFilterPreset\n) => {\n if (opts.exclude?.includes(dataKind)) {\n return true;\n }\n if (opts.only) {\n return !opts.only.includes(dataKind);\n }\n\n return false;\n};\n\ntype RestoreConfig = NonNullable<\n strapiDataTransfer.providers.ILocalStrapiDestinationProviderOptions['restore']\n>;\n\n// Based on exclude/only from options, create the restore object to match\nconst parseRestoreFromOptions = (opts: Partial<engineDataTransfer.ITransferEngineOptions>) => {\n const entitiesOptions: RestoreConfig['entities'] = {\n exclude: DEFAULT_IGNORED_CONTENT_TYPES,\n include: undefined,\n };\n\n // if content is not included, send an empty array for include\n if ((opts.only && !opts.only.includes('content')) || opts.exclude?.includes('content')) {\n entitiesOptions.include = [];\n }\n\n const restoreConfig: strapiDataTransfer.providers.ILocalStrapiDestinationProviderOptions['restore'] =\n {\n entities: entitiesOptions,\n assets: !shouldSkipStage(opts, 'files'),\n configuration: {\n webhook: !shouldSkipStage(opts, 'config'),\n coreStore: !shouldSkipStage(opts, 'config'),\n },\n };\n\n return restoreConfig;\n};\n\nexport {\n loadersFactory,\n buildTransferTable,\n getDefaultExportName,\n getTransferTelemetryPayload,\n DEFAULT_IGNORED_CONTENT_TYPES,\n createStrapiInstance,\n excludeOption,\n exitMessageText,\n onlyOption,\n throttleOption,\n validateExcludeOnly,\n formatDiagnostic,\n abortTransfer,\n setSignalHandler,\n getDiffHandler,\n getAssetsBackupHandler,\n shouldSkipStage,\n parseRestoreFromOptions,\n};\n"],"names":["engineDataTransfer","process","chalk","Table","readableBytes","strapi","strapiFactory","Option","parseInteger","getParseListWithChoices","exitWith","logger","createLogger","configs","ora","confirmMessage","merge"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Core, Modules } from '@strapi/types';
|
|
2
2
|
import type { CLIContext } from '../cli/types';
|
|
3
3
|
import { PluginMeta } from './core/plugins';
|
|
4
4
|
import { AppFile } from './core/admin-customisations';
|
|
@@ -18,7 +18,7 @@ interface BuildContext<TOptions = unknown> extends BaseContext {
|
|
|
18
18
|
/**
|
|
19
19
|
* Features object with future flags
|
|
20
20
|
*/
|
|
21
|
-
features?: FeaturesService['config'];
|
|
21
|
+
features?: Modules.Features.FeaturesService['config'];
|
|
22
22
|
/**
|
|
23
23
|
* The build options
|
|
24
24
|
*/
|
|
@@ -30,7 +30,7 @@ interface BuildContext<TOptions = unknown> extends BaseContext {
|
|
|
30
30
|
plugins: PluginMeta[];
|
|
31
31
|
}
|
|
32
32
|
interface CreateBuildContextArgs<TOptions = unknown> extends CLIContext {
|
|
33
|
-
strapi?: Strapi;
|
|
33
|
+
strapi?: Core.Strapi;
|
|
34
34
|
options?: TOptions;
|
|
35
35
|
}
|
|
36
36
|
declare const createBuildContext: <TOptions extends BaseOptions>({ cwd, logger, tsconfig, strapi, options, }: CreateBuildContextArgs<TOptions>) => Promise<BuildContext<TOptions>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-build-context.d.ts","sourceRoot":"","sources":["../../src/node/create-build-context.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"create-build-context.d.ts","sourceRoot":"","sources":["../../src/node/create-build-context.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,EAAE,UAAU,EAA+C,MAAM,gBAAgB,CAAC;AACzF,OAAO,EAAE,OAAO,EAAmB,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,YAAY,CAAC,QAAQ,GAAG,OAAO,CAAE,SAAQ,WAAW;IAC5D;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IACtD;;OAEG;IACH,OAAO,EAAE,WAAW,GAAG,QAAQ,CAAC;IAChC;;;OAGG;IACH,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,UAAU,sBAAsB,CAAC,QAAQ,GAAG,OAAO,CAAE,SAAQ,UAAU;IACrE,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,QAAQ,CAAC;CACpB;AASD,QAAA,MAAM,kBAAkB,kJAsGvB,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAC9B,YAAY,EAAE,YAAY,EAAE,sBAAsB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-build-context.js","sources":["../../src/node/create-build-context.ts"],"sourcesContent":["import os from 'node:os';\nimport path from 'node:path';\nimport fs from 'node:fs/promises';\nimport browserslist from 'browserslist';\nimport { strapiFactory } from '@strapi/core';\nimport {
|
|
1
|
+
{"version":3,"file":"create-build-context.js","sources":["../../src/node/create-build-context.ts"],"sourcesContent":["import os from 'node:os';\nimport path from 'node:path';\nimport fs from 'node:fs/promises';\nimport browserslist from 'browserslist';\nimport { strapiFactory } from '@strapi/core';\nimport { Core, Modules } from '@strapi/types';\n\nimport type { CLIContext } from '../cli/types';\nimport { getStrapiAdminEnvVars, loadEnv } from './core/env';\n\nimport { PluginMeta, getEnabledPlugins, getMapOfPluginsWithAdmin } from './core/plugins';\nimport { AppFile, loadUserAppFile } from './core/admin-customisations';\nimport type { BaseContext } from './types';\n\ninterface BaseOptions {\n stats?: boolean;\n minify?: boolean;\n sourcemaps?: boolean;\n bundler?: 'webpack' | 'vite';\n open?: boolean;\n}\n\ninterface BuildContext<TOptions = unknown> extends BaseContext {\n /**\n * The customisations defined by the user in their app.js file\n */\n customisations?: AppFile;\n /**\n * Features object with future flags\n */\n features?: Modules.Features.FeaturesService['config'];\n /**\n * The build options\n */\n options: BaseOptions & TOptions;\n /**\n * The plugins to be included in the JS bundle\n * incl. internal plugins, third party plugins & local plugins\n */\n plugins: PluginMeta[];\n}\n\ninterface CreateBuildContextArgs<TOptions = unknown> extends CLIContext {\n strapi?: Core.Strapi;\n options?: TOptions;\n}\n\nconst DEFAULT_BROWSERSLIST = [\n 'last 3 major versions',\n 'Firefox ESR',\n 'last 2 Opera versions',\n 'not dead',\n];\n\nconst createBuildContext = async <TOptions extends BaseOptions>({\n cwd,\n logger,\n tsconfig,\n strapi,\n options = {} as TOptions,\n}: CreateBuildContextArgs<TOptions>): Promise<BuildContext<TOptions>> => {\n /**\n * If you make a new strapi instance when one already exists,\n * you will overwrite the global and the app will _most likely_\n * crash and die.\n */\n const strapiInstance =\n strapi ??\n strapiFactory({\n // Directories\n appDir: cwd,\n distDir: tsconfig?.config.options.outDir ?? '',\n // Options\n autoReload: true,\n serveAdminPanel: false,\n });\n\n const serverUrl = strapiInstance.config.get<string>('server.url');\n const adminPath = strapiInstance.config.get<string>('admin.path');\n\n const appDir = strapiInstance.dirs.app.root;\n\n await loadEnv(cwd);\n\n const env = getStrapiAdminEnvVars({\n ADMIN_PATH: adminPath,\n STRAPI_ADMIN_BACKEND_URL: serverUrl,\n STRAPI_TELEMETRY_DISABLED: String(strapiInstance.telemetry.isDisabled),\n });\n\n const envKeys = Object.keys(env);\n\n if (envKeys.length > 0) {\n logger.info(\n [\n 'Including the following ENV variables as part of the JS bundle:',\n ...envKeys.map((key) => ` - ${key}`),\n ].join(os.EOL)\n );\n }\n\n const distPath = path.join(strapiInstance.dirs.dist.root, 'build');\n const distDir = path.relative(cwd, distPath);\n\n /**\n * If the distPath already exists, clean it\n */\n try {\n logger.debug(`Cleaning dist folder: ${distPath}`);\n await fs.rm(distPath, { recursive: true, force: true });\n logger.debug('Cleaned dist folder');\n } catch {\n // do nothing, it will fail if the folder does not exist\n logger.debug('There was no dist folder to clean');\n }\n\n const runtimeDir = path.join(cwd, '.strapi', 'client');\n const entry = path.relative(cwd, path.join(runtimeDir, 'app.js'));\n\n const plugins = await getEnabledPlugins({ cwd, logger, runtimeDir, strapi: strapiInstance });\n\n logger.debug('Enabled plugins', os.EOL, plugins);\n\n const pluginsWithFront = getMapOfPluginsWithAdmin(plugins);\n\n logger.debug('Enabled plugins with FE', os.EOL, pluginsWithFront);\n\n const target = browserslist.loadConfig({ path: cwd }) ?? DEFAULT_BROWSERSLIST;\n\n const customisations = await loadUserAppFile({ appDir, runtimeDir });\n\n const features = strapiInstance.config.get('features', undefined);\n\n const { bundler = 'webpack', ...restOptions } = options;\n\n const buildContext = {\n appDir,\n basePath: `${adminPath}/`,\n bundler,\n customisations,\n cwd,\n distDir,\n distPath,\n entry,\n env,\n features,\n logger,\n options: restOptions as BaseOptions & TOptions,\n plugins: pluginsWithFront,\n runtimeDir,\n strapi: strapiInstance,\n target,\n tsconfig,\n } satisfies BuildContext<TOptions>;\n\n return buildContext;\n};\n\nexport { createBuildContext };\nexport type { BuildContext, CreateBuildContextArgs };\n"],"names":["strapiFactory","loadEnv","env","getStrapiAdminEnvVars","os","path","fs","plugins","getEnabledPlugins","getMapOfPluginsWithAdmin","browserslist","loadUserAppFile"],"mappings":";;;;;;;;;;;;;;;AA+CA,MAAM,uBAAuB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,MAAM,qBAAqB,OAAqC;AAAA,EAC9D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU,CAAC;AACb,MAAyE;AAMjE,QAAA,iBACJ,UACAA,mBAAc;AAAA;AAAA,IAEZ,QAAQ;AAAA,IACR,SAAS,UAAU,OAAO,QAAQ,UAAU;AAAA;AAAA,IAE5C,YAAY;AAAA,IACZ,iBAAiB;AAAA,EAAA,CAClB;AAEH,QAAM,YAAY,eAAe,OAAO,IAAY,YAAY;AAChE,QAAM,YAAY,eAAe,OAAO,IAAY,YAAY;AAE1D,QAAA,SAAS,eAAe,KAAK,IAAI;AAEvC,QAAMC,IAAAA,QAAQ,GAAG;AAEjB,QAAMC,QAAMC,IAAAA,sBAAsB;AAAA,IAChC,YAAY;AAAA,IACZ,0BAA0B;AAAA,IAC1B,2BAA2B,OAAO,eAAe,UAAU,UAAU;AAAA,EAAA,CACtE;AAEK,QAAA,UAAU,OAAO,KAAKD,KAAG;AAE3B,MAAA,QAAQ,SAAS,GAAG;AACf,WAAA;AAAA,MACL;AAAA,QACE;AAAA,QACA,GAAG,QAAQ,IAAI,CAAC,QAAQ,SAAS,GAAG,EAAE;AAAA,MAAA,EACtC,KAAKE,YAAA,QAAG,GAAG;AAAA,IAAA;AAAA,EAEjB;AAEA,QAAM,WAAWC,cAAK,QAAA,KAAK,eAAe,KAAK,KAAK,MAAM,OAAO;AACjE,QAAM,UAAUA,cAAA,QAAK,SAAS,KAAK,QAAQ;AAKvC,MAAA;AACK,WAAA,MAAM,yBAAyB,QAAQ,EAAE;AAC1C,UAAAC,YAAA,QAAG,GAAG,UAAU,EAAE,WAAW,MAAM,OAAO,MAAM;AACtD,WAAO,MAAM,qBAAqB;AAAA,EAAA,QAC5B;AAEN,WAAO,MAAM,mCAAmC;AAAA,EAClD;AAEA,QAAM,aAAaD,cAAAA,QAAK,KAAK,KAAK,WAAW,QAAQ;AAC/C,QAAA,QAAQA,sBAAK,SAAS,KAAKA,sBAAK,KAAK,YAAY,QAAQ,CAAC;AAE1D,QAAAE,YAAU,MAAMC,QAAkB,kBAAA,EAAE,KAAK,QAAQ,YAAY,QAAQ,eAAA,CAAgB;AAE3F,SAAO,MAAM,mBAAmBJ,YAAG,QAAA,KAAKG,SAAO;AAEzC,QAAA,mBAAmBE,iCAAyBF,SAAO;AAEzD,SAAO,MAAM,2BAA2BH,YAAG,QAAA,KAAK,gBAAgB;AAEhE,QAAM,SAASM,sBAAAA,QAAa,WAAW,EAAE,MAAM,IAAA,CAAK,KAAK;AAEzD,QAAM,iBAAiB,MAAMC,oBAAA,gBAAgB,EAAE,QAAQ,WAAY,CAAA;AAEnE,QAAM,WAAW,eAAe,OAAO,IAAI,YAAY,MAAS;AAEhE,QAAM,EAAE,UAAU,WAAW,GAAG,gBAAgB;AAEhD,QAAM,eAAe;AAAA,IACnB;AAAA,IACA,UAAU,GAAG,SAAS;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAAA,KACAT;AAAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,SAAS;AAAA,IACT;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,EAAA;AAGK,SAAA;AACT;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"develop.d.ts","sourceRoot":"","sources":["../../src/node/develop.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAS/C,UAAU,cAAe,SAAQ,UAAU;IACzC;;;;OAIG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AA4CD,QAAA,MAAM,OAAO,+DAOV,cAAc,
|
|
1
|
+
{"version":3,"file":"develop.d.ts","sourceRoot":"","sources":["../../src/node/develop.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAS/C,UAAU,cAAe,SAAQ,UAAU;IACzC;;;;OAIG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AA4CD,QAAA,MAAM,OAAO,+DAOV,cAAc,kBA8PhB,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC;AACnB,YAAY,EAAE,cAAc,EAAE,CAAC"}
|
package/dist/node/develop.js
CHANGED
|
@@ -224,6 +224,11 @@ const develop = async ({
|
|
|
224
224
|
"**/plugins.json",
|
|
225
225
|
"**/build",
|
|
226
226
|
"**/build/**",
|
|
227
|
+
"**/log",
|
|
228
|
+
"**/log/**",
|
|
229
|
+
"**/logs",
|
|
230
|
+
"**/logs/**",
|
|
231
|
+
"**/*.log",
|
|
227
232
|
"**/index.html",
|
|
228
233
|
"**/public",
|
|
229
234
|
"**/public/**",
|
|
@@ -235,6 +240,7 @@ const develop = async ({
|
|
|
235
240
|
"**/*.d.ts",
|
|
236
241
|
"**/.yalc/**",
|
|
237
242
|
"**/yalc.lock",
|
|
243
|
+
// TODO v6: watch only src folder by default, and flip this to watchIncludeFiles
|
|
238
244
|
...strapiInstance.config.get("admin.watchIgnoreFiles", [])
|
|
239
245
|
]
|
|
240
246
|
}).on("add", (path2) => {
|
package/dist/node/develop.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"develop.js","sources":["../../src/node/develop.ts"],"sourcesContent":["import * as tsUtils from '@strapi/typescript-utils';\nimport { strings } from '@strapi/utils';\nimport chokidar from 'chokidar';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport cluster from 'node:cluster';\nimport { strapiFactory } from '@strapi/core';\n\nimport type { CLIContext } from '../cli/types';\nimport { checkRequiredDependencies } from './core/dependencies';\nimport { getTimer, prettyTime, type TimeMeasurer } from './core/timer';\nimport { createBuildContext } from './create-build-context';\nimport type { WebpackWatcher } from './webpack/watch';\nimport type { ViteWatcher } from './vite/watch';\n\nimport { writeStaticClientFiles } from './staticFiles';\n\ninterface DevelopOptions extends CLIContext {\n /**\n * Which bundler to use for building.\n *\n * @default webpack\n */\n bundler?: 'webpack' | 'vite';\n polling?: boolean;\n open?: boolean;\n watchAdmin?: boolean;\n}\n\n// This method removes all non-admin build files from the dist directory\nconst cleanupDistDirectory = async ({\n tsconfig,\n logger,\n timer,\n}: Pick<DevelopOptions, 'tsconfig' | 'logger'> & { timer: TimeMeasurer }) => {\n const distDir = tsconfig?.config?.options?.outDir;\n\n if (\n !distDir || // we don't have a dist dir\n (await fs\n .access(distDir)\n .then(() => false)\n .catch(() => true)) // it doesn't exist -- if it does but no access, that will be caught later\n ) {\n return;\n }\n\n const timerName = `cleaningDist${Date.now()}`;\n timer.start(timerName);\n const cleaningSpinner = logger.spinner(`Cleaning dist dir ${distDir}`).start();\n\n try {\n const dirContent = await fs.readdir(distDir);\n const validFilenames = dirContent\n // Ignore the admin build folder\n .filter((filename) => filename !== 'build');\n for (const filename of validFilenames) {\n await fs.rm(path.resolve(distDir, filename), { recursive: true });\n }\n } catch (err: unknown) {\n const generatingDuration = timer.end(timerName);\n cleaningSpinner.text = `Error cleaning dist dir: ${err} (${prettyTime(generatingDuration)})`;\n cleaningSpinner?.fail();\n return;\n }\n\n const generatingDuration = timer.end(timerName);\n cleaningSpinner.text = `Cleaning dist dir (${prettyTime(generatingDuration)})`;\n cleaningSpinner?.succeed();\n};\n\nconst develop = async ({\n cwd,\n polling,\n logger,\n tsconfig,\n watchAdmin,\n ...options\n}: DevelopOptions) => {\n const timer = getTimer();\n\n if (cluster.isPrimary) {\n const { didInstall } = await checkRequiredDependencies({ cwd, logger }).catch((err) => {\n logger.error(err.message);\n process.exit(1);\n });\n\n if (didInstall) {\n return;\n }\n\n if (tsconfig?.config) {\n // Build without diagnostics in case schemas have changed\n await cleanupDistDirectory({ tsconfig, logger, timer });\n await tsUtils.compile(cwd, { configOptions: { ignoreDiagnostics: true } });\n }\n\n /**\n * IF we're not watching the admin we're going to build it, this makes\n * sure that at least the admin is built for users & they can interact\n * with the application.\n */\n if (!watchAdmin) {\n timer.start('createBuildContext');\n const contextSpinner = logger.spinner(`Building build context`).start();\n console.log('');\n\n const ctx = await createBuildContext({\n cwd,\n logger,\n tsconfig,\n options,\n });\n const contextDuration = timer.end('createBuildContext');\n contextSpinner.text = `Building build context (${prettyTime(contextDuration)})`;\n contextSpinner.succeed();\n\n timer.start('creatingAdmin');\n const adminSpinner = logger.spinner(`Creating admin`).start();\n\n await writeStaticClientFiles(ctx);\n\n if (ctx.bundler === 'webpack') {\n const { build: buildWebpack } = await import('./webpack/build');\n await buildWebpack(ctx);\n } else if (ctx.bundler === 'vite') {\n const { build: buildVite } = await import('./vite/build');\n await buildVite(ctx);\n }\n\n const adminDuration = timer.end('creatingAdmin');\n adminSpinner.text = `Creating admin (${prettyTime(adminDuration)})`;\n adminSpinner.succeed();\n }\n\n cluster.on('message', async (worker, message) => {\n switch (message) {\n case 'reload': {\n if (tsconfig?.config) {\n // Build without diagnostics in case schemas have changed\n await cleanupDistDirectory({ tsconfig, logger, timer });\n await tsUtils.compile(cwd, { configOptions: { ignoreDiagnostics: true } });\n }\n logger.debug('cluster has the reload message, sending the worker kill message');\n worker.send('kill');\n break;\n }\n case 'killed': {\n logger.debug('cluster has the killed message, forking the cluster');\n cluster.fork();\n break;\n }\n case 'stop': {\n process.exit(1);\n break;\n }\n default:\n break;\n }\n });\n\n cluster.fork();\n }\n\n if (cluster.isWorker) {\n timer.start('loadStrapi');\n const loadStrapiSpinner = logger.spinner(`Loading Strapi`).start();\n\n const strapi = strapiFactory({\n appDir: cwd,\n distDir: tsconfig?.config.options.outDir ?? '',\n autoReload: true,\n serveAdminPanel: !watchAdmin,\n });\n\n /**\n * If we're watching the admin panel then we're going to attach the watcher\n * as a strapi middleware.\n */\n let bundleWatcher: WebpackWatcher | ViteWatcher | undefined;\n\n if (watchAdmin) {\n timer.start('createBuildContext');\n const contextSpinner = logger.spinner(`Building build context`).start();\n console.log('');\n\n const ctx = await createBuildContext({\n cwd,\n logger,\n strapi,\n tsconfig,\n options,\n });\n const contextDuration = timer.end('createBuildContext');\n contextSpinner.text = `Building build context (${prettyTime(contextDuration)})`;\n contextSpinner.succeed();\n\n timer.start('creatingAdmin');\n const adminSpinner = logger.spinner(`Creating admin`).start();\n\n await writeStaticClientFiles(ctx);\n\n if (ctx.bundler === 'webpack') {\n const { watch: watchWebpack } = await import('./webpack/watch');\n bundleWatcher = await watchWebpack(ctx);\n } else if (ctx.bundler === 'vite') {\n const { watch: watchVite } = await import('./vite/watch');\n bundleWatcher = await watchVite(ctx);\n }\n\n const adminDuration = timer.end('creatingAdmin');\n adminSpinner.text = `Creating admin (${prettyTime(adminDuration)})`;\n adminSpinner.succeed();\n }\n\n const strapiInstance = await strapi.load();\n\n const loadStrapiDuration = timer.end('loadStrapi');\n loadStrapiSpinner.text = `Loading Strapi (${prettyTime(loadStrapiDuration)})`;\n loadStrapiSpinner.succeed();\n\n // For TS projects, type generation is a requirement for the develop command so that the server can restart\n // For JS projects, we respect the experimental autogenerate setting\n if (tsconfig?.config || strapi.config.get('typescript.autogenerate') !== false) {\n timer.start('generatingTS');\n const generatingTsSpinner = logger.spinner(`Generating types`).start();\n\n await tsUtils.generators.generate({\n strapi: strapiInstance,\n pwd: cwd,\n rootDir: undefined,\n logger: { silent: true, debug: false },\n artifacts: { contentTypes: true, components: true },\n });\n\n const generatingDuration = timer.end('generatingTS');\n generatingTsSpinner.text = `Generating types (${prettyTime(generatingDuration)})`;\n generatingTsSpinner.succeed();\n }\n\n if (tsconfig?.config) {\n timer.start('compilingTS');\n const compilingTsSpinner = logger.spinner(`Compiling TS`).start();\n\n await cleanupDistDirectory({ tsconfig, logger, timer });\n await tsUtils.compile(cwd, { configOptions: { ignoreDiagnostics: false } });\n\n const compilingDuration = timer.end('compilingTS');\n compilingTsSpinner.text = `Compiling TS (${prettyTime(compilingDuration)})`;\n compilingTsSpinner.succeed();\n }\n\n const restart = async () => {\n if (strapiInstance.reload.isWatching && !strapiInstance.reload.isReloading) {\n strapiInstance.reload.isReloading = true;\n strapiInstance.reload();\n }\n };\n\n const watcher = chokidar\n .watch(cwd, {\n ignoreInitial: true,\n usePolling: polling,\n ignored: [\n /(^|[/\\\\])\\../, // dot files\n /tmp/,\n '**/src/admin/**',\n '**/src/plugins/**/admin/**',\n '**/dist/src/plugins/test/admin/**',\n '**/documentation',\n '**/documentation/**',\n '**/node_modules',\n '**/node_modules/**',\n '**/plugins.json',\n '**/build',\n '**/build/**',\n '**/index.html',\n '**/public',\n '**/public/**',\n strapiInstance.dirs.static.public,\n strings.joinBy('/', strapiInstance.dirs.static.public, '**'),\n '**/*.db*',\n '**/exports/**',\n '**/dist/**',\n '**/*.d.ts',\n '**/.yalc/**',\n '**/yalc.lock',\n ...strapiInstance.config.get('admin.watchIgnoreFiles', []),\n ],\n })\n .on('add', (path) => {\n strapiInstance.log.info(`File created: ${path}`);\n restart();\n })\n .on('change', (path) => {\n strapiInstance.log.info(`File changed: ${path}`);\n restart();\n })\n .on('unlink', (path) => {\n strapiInstance.log.info(`File deleted: ${path}`);\n restart();\n });\n\n process.on('message', async (message) => {\n switch (message) {\n case 'kill': {\n logger.debug(\n 'child process has the kill message, destroying the strapi instance and sending the killed process message'\n );\n await watcher.close();\n\n await strapiInstance.destroy();\n\n if (bundleWatcher) {\n bundleWatcher.close();\n }\n process.send?.('killed');\n break;\n }\n default:\n break;\n }\n });\n\n strapiInstance.start();\n }\n};\n\nexport { develop };\nexport type { DevelopOptions };\n"],"names":["timer","fs","path","generatingDuration","prettyTime","getTimer","cluster","checkRequiredDependencies","tsUtils","createBuildContext","writeStaticClientFiles","strapiFactory","chokidar","strings"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,MAAM,uBAAuB,OAAO;AAAA,EAClC;AAAA,EACA;AAAA,EAAA,OACAA;AACF,MAA6E;AACrE,QAAA,UAAU,UAAU,QAAQ,SAAS;AAE3C,MACE,CAAC;AAAA,EACA,MAAMC,YAAA,QACJ,OAAO,OAAO,EACd,KAAK,MAAM,KAAK,EAChB,MAAM,MAAM,IAAI,GACnB;AACA;AAAA,EACF;AAEA,QAAM,YAAY,eAAe,KAAK,IAAA,CAAK;AAC3CD,UAAM,MAAM,SAAS;AACrB,QAAM,kBAAkB,OAAO,QAAQ,qBAAqB,OAAO,EAAE,EAAE;AAEnE,MAAA;AACF,UAAM,aAAa,MAAMC,YAAAA,QAAG,QAAQ,OAAO;AAC3C,UAAM,iBAAiB,WAEpB,OAAO,CAAC,aAAa,aAAa,OAAO;AAC5C,eAAW,YAAY,gBAAgB;AAC/B,YAAAA,oBAAG,GAAGC,cAAA,QAAK,QAAQ,SAAS,QAAQ,GAAG,EAAE,WAAW,KAAA,CAAM;AAAA,IAClE;AAAA,WACO,KAAc;AACfC,UAAAA,sBAAqBH,QAAM,IAAI,SAAS;AAC9C,oBAAgB,OAAO,4BAA4B,GAAG,KAAKI,iBAAWD,mBAAkB,CAAC;AACzF,qBAAiB,KAAK;AACtB;AAAA,EACF;AAEM,QAAA,qBAAqBH,QAAM,IAAI,SAAS;AAC9C,kBAAgB,OAAO,sBAAsBI,MAAW,WAAA,kBAAkB,CAAC;AAC3E,mBAAiB,QAAQ;AAC3B;AAEA,MAAM,UAAU,OAAO;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAsB;AACpB,QAAMJ,UAAQK,MAAAA;AAEd,MAAIC,iBAAAA,QAAQ,WAAW;AACrB,UAAM,EAAE,eAAe,MAAMC,uCAA0B,EAAE,KAAK,QAAQ,EAAE,MAAM,CAAC,QAAQ;AAC9E,aAAA,MAAM,IAAI,OAAO;AACxB,cAAQ,KAAK,CAAC;AAAA,IAAA,CACf;AAED,QAAI,YAAY;AACd;AAAA,IACF;AAEA,QAAI,UAAU,QAAQ;AAEpB,YAAM,qBAAqB,EAAE,UAAU,QAAQP,OAAAA,QAAO,CAAA;AAChD,YAAAQ,mBAAQ,QAAQ,KAAK,EAAE,eAAe,EAAE,mBAAmB,KAAK,EAAA,CAAG;AAAA,IAC3E;AAOA,QAAI,CAAC,YAAY;AACfR,cAAM,MAAM,oBAAoB;AAChC,YAAM,iBAAiB,OAAO,QAAQ,wBAAwB,EAAE;AAChE,cAAQ,IAAI,EAAE;AAER,YAAA,MAAM,MAAMS,sCAAmB;AAAA,QACnC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,CACD;AACK,YAAA,kBAAkBT,QAAM,IAAI,oBAAoB;AACtD,qBAAe,OAAO,2BAA2BI,MAAW,WAAA,eAAe,CAAC;AAC5E,qBAAe,QAAQ;AAEvBJ,cAAM,MAAM,eAAe;AAC3B,YAAM,eAAe,OAAO,QAAQ,gBAAgB,EAAE;AAEtD,YAAMU,YAAAA,uBAAuB,GAAG;AAE5B,UAAA,IAAI,YAAY,WAAW;AAC7B,cAAM,EAAE,OAAO,aAAiB,IAAA,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,oBAAiB,CAAA;AAC9D,cAAM,aAAa,GAAG;AAAA,MAAA,WACb,IAAI,YAAY,QAAQ;AACjC,cAAM,EAAE,OAAO,UAAc,IAAA,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,iBAAc,CAAA;AACxD,cAAM,UAAU,GAAG;AAAA,MACrB;AAEM,YAAA,gBAAgBV,QAAM,IAAI,eAAe;AAC/C,mBAAa,OAAO,mBAAmBI,MAAW,WAAA,aAAa,CAAC;AAChE,mBAAa,QAAQ;AAAA,IACvB;AAEAE,qBAAAA,QAAQ,GAAG,WAAW,OAAO,QAAQ,YAAY;AAC/C,cAAQ,SAAS;AAAA,QACf,KAAK,UAAU;AACb,cAAI,UAAU,QAAQ;AAEpB,kBAAM,qBAAqB,EAAE,UAAU,QAAQN,OAAAA,QAAO,CAAA;AAChD,kBAAAQ,mBAAQ,QAAQ,KAAK,EAAE,eAAe,EAAE,mBAAmB,KAAK,EAAA,CAAG;AAAA,UAC3E;AACA,iBAAO,MAAM,iEAAiE;AAC9E,iBAAO,KAAK,MAAM;AAClB;AAAA,QACF;AAAA,QACA,KAAK,UAAU;AACb,iBAAO,MAAM,qDAAqD;AAClEF,2BAAA,QAAQ,KAAK;AACb;AAAA,QACF;AAAA,QACA,KAAK,QAAQ;AACX,kBAAQ,KAAK,CAAC;AACd;AAAA,QACF;AAAA,MAGF;AAAA,IAAA,CACD;AAEDA,qBAAA,QAAQ,KAAK;AAAA,EACf;AAEA,MAAIA,iBAAAA,QAAQ,UAAU;AACpBN,YAAM,MAAM,YAAY;AACxB,UAAM,oBAAoB,OAAO,QAAQ,gBAAgB,EAAE;AAE3D,UAAM,SAASW,KAAAA,cAAc;AAAA,MAC3B,QAAQ;AAAA,MACR,SAAS,UAAU,OAAO,QAAQ,UAAU;AAAA,MAC5C,YAAY;AAAA,MACZ,iBAAiB,CAAC;AAAA,IAAA,CACnB;AAMG,QAAA;AAEJ,QAAI,YAAY;AACdX,cAAM,MAAM,oBAAoB;AAChC,YAAM,iBAAiB,OAAO,QAAQ,wBAAwB,EAAE;AAChE,cAAQ,IAAI,EAAE;AAER,YAAA,MAAM,MAAMS,sCAAmB;AAAA,QACnC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,CACD;AACK,YAAA,kBAAkBT,QAAM,IAAI,oBAAoB;AACtD,qBAAe,OAAO,2BAA2BI,MAAW,WAAA,eAAe,CAAC;AAC5E,qBAAe,QAAQ;AAEvBJ,cAAM,MAAM,eAAe;AAC3B,YAAM,eAAe,OAAO,QAAQ,gBAAgB,EAAE;AAEtD,YAAMU,YAAAA,uBAAuB,GAAG;AAE5B,UAAA,IAAI,YAAY,WAAW;AAC7B,cAAM,EAAE,OAAO,aAAiB,IAAA,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,oBAAiB,CAAA;AAC9C,wBAAA,MAAM,aAAa,GAAG;AAAA,MAAA,WAC7B,IAAI,YAAY,QAAQ;AACjC,cAAM,EAAE,OAAO,UAAc,IAAA,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,iBAAc,CAAA;AACxC,wBAAA,MAAM,UAAU,GAAG;AAAA,MACrC;AAEM,YAAA,gBAAgBV,QAAM,IAAI,eAAe;AAC/C,mBAAa,OAAO,mBAAmBI,MAAW,WAAA,aAAa,CAAC;AAChE,mBAAa,QAAQ;AAAA,IACvB;AAEM,UAAA,iBAAiB,MAAM,OAAO;AAE9B,UAAA,qBAAqBJ,QAAM,IAAI,YAAY;AACjD,sBAAkB,OAAO,mBAAmBI,MAAW,WAAA,kBAAkB,CAAC;AAC1E,sBAAkB,QAAQ;AAI1B,QAAI,UAAU,UAAU,OAAO,OAAO,IAAI,yBAAyB,MAAM,OAAO;AAC9EJ,cAAM,MAAM,cAAc;AAC1B,YAAM,sBAAsB,OAAO,QAAQ,kBAAkB,EAAE;AAEzD,YAAAQ,mBAAQ,WAAW,SAAS;AAAA,QAChC,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,SAAS;AAAA,QACT,QAAQ,EAAE,QAAQ,MAAM,OAAO,MAAM;AAAA,QACrC,WAAW,EAAE,cAAc,MAAM,YAAY,KAAK;AAAA,MAAA,CACnD;AAEK,YAAA,qBAAqBR,QAAM,IAAI,cAAc;AACnD,0BAAoB,OAAO,qBAAqBI,MAAW,WAAA,kBAAkB,CAAC;AAC9E,0BAAoB,QAAQ;AAAA,IAC9B;AAEA,QAAI,UAAU,QAAQ;AACpBJ,cAAM,MAAM,aAAa;AACzB,YAAM,qBAAqB,OAAO,QAAQ,cAAc,EAAE;AAE1D,YAAM,qBAAqB,EAAE,UAAU,QAAQA,OAAAA,QAAO,CAAA;AAChD,YAAAQ,mBAAQ,QAAQ,KAAK,EAAE,eAAe,EAAE,mBAAmB,MAAM,EAAA,CAAG;AAEpE,YAAA,oBAAoBR,QAAM,IAAI,aAAa;AACjD,yBAAmB,OAAO,iBAAiBI,MAAW,WAAA,iBAAiB,CAAC;AACxE,yBAAmB,QAAQ;AAAA,IAC7B;AAEA,UAAM,UAAU,YAAY;AAC1B,UAAI,eAAe,OAAO,cAAc,CAAC,eAAe,OAAO,aAAa;AAC1E,uBAAe,OAAO,cAAc;AACpC,uBAAe,OAAO;AAAA,MACxB;AAAA,IAAA;AAGI,UAAA,UAAUQ,kBAAAA,QACb,MAAM,KAAK;AAAA,MACV,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,SAAS;AAAA,QACP;AAAA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,eAAe,KAAK,OAAO;AAAA,QAC3BC,cAAQ,OAAO,KAAK,eAAe,KAAK,OAAO,QAAQ,IAAI;AAAA,QAC3D;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG,eAAe,OAAO,IAAI,0BAA0B,CAAA,CAAE;AAAA,MAC3D;AAAA,IACD,CAAA,EACA,GAAG,OAAO,CAACX,UAAS;AACnB,qBAAe,IAAI,KAAK,iBAAiBA,KAAI,EAAE;AACvC;IACT,CAAA,EACA,GAAG,UAAU,CAACA,UAAS;AACtB,qBAAe,IAAI,KAAK,iBAAiBA,KAAI,EAAE;AACvC;IACT,CAAA,EACA,GAAG,UAAU,CAACA,UAAS;AACtB,qBAAe,IAAI,KAAK,iBAAiBA,KAAI,EAAE;AACvC;IAAA,CACT;AAEK,YAAA,GAAG,WAAW,OAAO,YAAY;AACvC,cAAQ,SAAS;AAAA,QACf,KAAK,QAAQ;AACJ,iBAAA;AAAA,YACL;AAAA,UAAA;AAEF,gBAAM,QAAQ;AAEd,gBAAM,eAAe;AAErB,cAAI,eAAe;AACjB,0BAAc,MAAM;AAAA,UACtB;AACA,kBAAQ,OAAO,QAAQ;AACvB;AAAA,QACF;AAAA,MAGF;AAAA,IAAA,CACD;AAED,mBAAe,MAAM;AAAA,EACvB;AACF;;"}
|
|
1
|
+
{"version":3,"file":"develop.js","sources":["../../src/node/develop.ts"],"sourcesContent":["import * as tsUtils from '@strapi/typescript-utils';\nimport { strings } from '@strapi/utils';\nimport chokidar from 'chokidar';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport cluster from 'node:cluster';\nimport { strapiFactory } from '@strapi/core';\n\nimport type { CLIContext } from '../cli/types';\nimport { checkRequiredDependencies } from './core/dependencies';\nimport { getTimer, prettyTime, type TimeMeasurer } from './core/timer';\nimport { createBuildContext } from './create-build-context';\nimport type { WebpackWatcher } from './webpack/watch';\nimport type { ViteWatcher } from './vite/watch';\n\nimport { writeStaticClientFiles } from './staticFiles';\n\ninterface DevelopOptions extends CLIContext {\n /**\n * Which bundler to use for building.\n *\n * @default webpack\n */\n bundler?: 'webpack' | 'vite';\n polling?: boolean;\n open?: boolean;\n watchAdmin?: boolean;\n}\n\n// This method removes all non-admin build files from the dist directory\nconst cleanupDistDirectory = async ({\n tsconfig,\n logger,\n timer,\n}: Pick<DevelopOptions, 'tsconfig' | 'logger'> & { timer: TimeMeasurer }) => {\n const distDir = tsconfig?.config?.options?.outDir;\n\n if (\n !distDir || // we don't have a dist dir\n (await fs\n .access(distDir)\n .then(() => false)\n .catch(() => true)) // it doesn't exist -- if it does but no access, that will be caught later\n ) {\n return;\n }\n\n const timerName = `cleaningDist${Date.now()}`;\n timer.start(timerName);\n const cleaningSpinner = logger.spinner(`Cleaning dist dir ${distDir}`).start();\n\n try {\n const dirContent = await fs.readdir(distDir);\n const validFilenames = dirContent\n // Ignore the admin build folder\n .filter((filename) => filename !== 'build');\n for (const filename of validFilenames) {\n await fs.rm(path.resolve(distDir, filename), { recursive: true });\n }\n } catch (err: unknown) {\n const generatingDuration = timer.end(timerName);\n cleaningSpinner.text = `Error cleaning dist dir: ${err} (${prettyTime(generatingDuration)})`;\n cleaningSpinner?.fail();\n return;\n }\n\n const generatingDuration = timer.end(timerName);\n cleaningSpinner.text = `Cleaning dist dir (${prettyTime(generatingDuration)})`;\n cleaningSpinner?.succeed();\n};\n\nconst develop = async ({\n cwd,\n polling,\n logger,\n tsconfig,\n watchAdmin,\n ...options\n}: DevelopOptions) => {\n const timer = getTimer();\n\n if (cluster.isPrimary) {\n const { didInstall } = await checkRequiredDependencies({ cwd, logger }).catch((err) => {\n logger.error(err.message);\n process.exit(1);\n });\n\n if (didInstall) {\n return;\n }\n\n if (tsconfig?.config) {\n // Build without diagnostics in case schemas have changed\n await cleanupDistDirectory({ tsconfig, logger, timer });\n await tsUtils.compile(cwd, { configOptions: { ignoreDiagnostics: true } });\n }\n\n /**\n * IF we're not watching the admin we're going to build it, this makes\n * sure that at least the admin is built for users & they can interact\n * with the application.\n */\n if (!watchAdmin) {\n timer.start('createBuildContext');\n const contextSpinner = logger.spinner(`Building build context`).start();\n console.log('');\n\n const ctx = await createBuildContext({\n cwd,\n logger,\n tsconfig,\n options,\n });\n const contextDuration = timer.end('createBuildContext');\n contextSpinner.text = `Building build context (${prettyTime(contextDuration)})`;\n contextSpinner.succeed();\n\n timer.start('creatingAdmin');\n const adminSpinner = logger.spinner(`Creating admin`).start();\n\n await writeStaticClientFiles(ctx);\n\n if (ctx.bundler === 'webpack') {\n const { build: buildWebpack } = await import('./webpack/build');\n await buildWebpack(ctx);\n } else if (ctx.bundler === 'vite') {\n const { build: buildVite } = await import('./vite/build');\n await buildVite(ctx);\n }\n\n const adminDuration = timer.end('creatingAdmin');\n adminSpinner.text = `Creating admin (${prettyTime(adminDuration)})`;\n adminSpinner.succeed();\n }\n\n cluster.on('message', async (worker, message) => {\n switch (message) {\n case 'reload': {\n if (tsconfig?.config) {\n // Build without diagnostics in case schemas have changed\n await cleanupDistDirectory({ tsconfig, logger, timer });\n await tsUtils.compile(cwd, { configOptions: { ignoreDiagnostics: true } });\n }\n logger.debug('cluster has the reload message, sending the worker kill message');\n worker.send('kill');\n break;\n }\n case 'killed': {\n logger.debug('cluster has the killed message, forking the cluster');\n cluster.fork();\n break;\n }\n case 'stop': {\n process.exit(1);\n break;\n }\n default:\n break;\n }\n });\n\n cluster.fork();\n }\n\n if (cluster.isWorker) {\n timer.start('loadStrapi');\n const loadStrapiSpinner = logger.spinner(`Loading Strapi`).start();\n\n const strapi = strapiFactory({\n appDir: cwd,\n distDir: tsconfig?.config.options.outDir ?? '',\n autoReload: true,\n serveAdminPanel: !watchAdmin,\n });\n\n /**\n * If we're watching the admin panel then we're going to attach the watcher\n * as a strapi middleware.\n */\n let bundleWatcher: WebpackWatcher | ViteWatcher | undefined;\n\n if (watchAdmin) {\n timer.start('createBuildContext');\n const contextSpinner = logger.spinner(`Building build context`).start();\n console.log('');\n\n const ctx = await createBuildContext({\n cwd,\n logger,\n strapi,\n tsconfig,\n options,\n });\n const contextDuration = timer.end('createBuildContext');\n contextSpinner.text = `Building build context (${prettyTime(contextDuration)})`;\n contextSpinner.succeed();\n\n timer.start('creatingAdmin');\n const adminSpinner = logger.spinner(`Creating admin`).start();\n\n await writeStaticClientFiles(ctx);\n\n if (ctx.bundler === 'webpack') {\n const { watch: watchWebpack } = await import('./webpack/watch');\n bundleWatcher = await watchWebpack(ctx);\n } else if (ctx.bundler === 'vite') {\n const { watch: watchVite } = await import('./vite/watch');\n bundleWatcher = await watchVite(ctx);\n }\n\n const adminDuration = timer.end('creatingAdmin');\n adminSpinner.text = `Creating admin (${prettyTime(adminDuration)})`;\n adminSpinner.succeed();\n }\n\n const strapiInstance = await strapi.load();\n\n const loadStrapiDuration = timer.end('loadStrapi');\n loadStrapiSpinner.text = `Loading Strapi (${prettyTime(loadStrapiDuration)})`;\n loadStrapiSpinner.succeed();\n\n // For TS projects, type generation is a requirement for the develop command so that the server can restart\n // For JS projects, we respect the experimental autogenerate setting\n if (tsconfig?.config || strapi.config.get('typescript.autogenerate') !== false) {\n timer.start('generatingTS');\n const generatingTsSpinner = logger.spinner(`Generating types`).start();\n\n await tsUtils.generators.generate({\n strapi: strapiInstance,\n pwd: cwd,\n rootDir: undefined,\n logger: { silent: true, debug: false },\n artifacts: { contentTypes: true, components: true },\n });\n\n const generatingDuration = timer.end('generatingTS');\n generatingTsSpinner.text = `Generating types (${prettyTime(generatingDuration)})`;\n generatingTsSpinner.succeed();\n }\n\n if (tsconfig?.config) {\n timer.start('compilingTS');\n const compilingTsSpinner = logger.spinner(`Compiling TS`).start();\n\n await cleanupDistDirectory({ tsconfig, logger, timer });\n await tsUtils.compile(cwd, { configOptions: { ignoreDiagnostics: false } });\n\n const compilingDuration = timer.end('compilingTS');\n compilingTsSpinner.text = `Compiling TS (${prettyTime(compilingDuration)})`;\n compilingTsSpinner.succeed();\n }\n\n const restart = async () => {\n if (strapiInstance.reload.isWatching && !strapiInstance.reload.isReloading) {\n strapiInstance.reload.isReloading = true;\n strapiInstance.reload();\n }\n };\n\n const watcher = chokidar\n .watch(cwd, {\n ignoreInitial: true,\n usePolling: polling,\n ignored: [\n /(^|[/\\\\])\\../, // dot files\n /tmp/,\n '**/src/admin/**',\n '**/src/plugins/**/admin/**',\n '**/dist/src/plugins/test/admin/**',\n '**/documentation',\n '**/documentation/**',\n '**/node_modules',\n '**/node_modules/**',\n '**/plugins.json',\n '**/build',\n '**/build/**',\n '**/log',\n '**/log/**',\n '**/logs',\n '**/logs/**',\n '**/*.log',\n '**/index.html',\n '**/public',\n '**/public/**',\n strapiInstance.dirs.static.public,\n strings.joinBy('/', strapiInstance.dirs.static.public, '**'),\n '**/*.db*',\n '**/exports/**',\n '**/dist/**',\n '**/*.d.ts',\n '**/.yalc/**',\n '**/yalc.lock',\n // TODO v6: watch only src folder by default, and flip this to watchIncludeFiles\n ...strapiInstance.config.get('admin.watchIgnoreFiles', []),\n ],\n })\n .on('add', (path) => {\n strapiInstance.log.info(`File created: ${path}`);\n restart();\n })\n .on('change', (path) => {\n strapiInstance.log.info(`File changed: ${path}`);\n restart();\n })\n .on('unlink', (path) => {\n strapiInstance.log.info(`File deleted: ${path}`);\n restart();\n });\n\n process.on('message', async (message) => {\n switch (message) {\n case 'kill': {\n logger.debug(\n 'child process has the kill message, destroying the strapi instance and sending the killed process message'\n );\n await watcher.close();\n\n await strapiInstance.destroy();\n\n if (bundleWatcher) {\n bundleWatcher.close();\n }\n process.send?.('killed');\n break;\n }\n default:\n break;\n }\n });\n\n strapiInstance.start();\n }\n};\n\nexport { develop };\nexport type { DevelopOptions };\n"],"names":["timer","fs","path","generatingDuration","prettyTime","getTimer","cluster","checkRequiredDependencies","tsUtils","createBuildContext","writeStaticClientFiles","strapiFactory","chokidar","strings"],"mappings":"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"}
|
package/dist/node/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Core } from '@strapi/types';
|
|
2
2
|
import type { CLIContext } from '../cli/types';
|
|
3
3
|
import { BuildOptions } from './build';
|
|
4
4
|
interface BaseContext {
|
|
@@ -43,7 +43,7 @@ interface BaseContext {
|
|
|
43
43
|
/**
|
|
44
44
|
* The Strapi instance
|
|
45
45
|
*/
|
|
46
|
-
strapi: Strapi;
|
|
46
|
+
strapi: Core.Strapi;
|
|
47
47
|
/**
|
|
48
48
|
* The browserslist target either loaded from the user's workspace or falling back to the default
|
|
49
49
|
*/
|
package/dist/node/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/node/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/node/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,UAAU,WAAW;IACnB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC;IAC5D;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAE7B;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;IACpB;;OAEG;IACH,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;CACnC;AAED,YAAY,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.js","sources":["../../../src/node/vite/watch.ts"],"sourcesContent":["import path from 'node:path';\nimport fs from 'node:fs/promises';\nimport type {
|
|
1
|
+
{"version":3,"file":"watch.js","sources":["../../../src/node/vite/watch.ts"],"sourcesContent":["import path from 'node:path';\nimport fs from 'node:fs/promises';\nimport type { Core } from '@strapi/types';\n\nimport { mergeConfigWithUserConfig, resolveDevelopmentConfig } from './config';\n\nimport type { BuildContext } from '../create-build-context';\n\ninterface ViteWatcher {\n close(): Promise<void>;\n}\n\nconst watch = async (ctx: BuildContext): Promise<ViteWatcher> => {\n const config = await resolveDevelopmentConfig(ctx);\n const finalConfig = await mergeConfigWithUserConfig(config, ctx);\n\n ctx.logger.debug('Vite config', finalConfig);\n\n const { createServer } = await import('vite');\n\n const vite = await createServer(finalConfig);\n\n ctx.strapi.server.app.use((ctx, next) => {\n return new Promise((resolve, reject) => {\n vite.middlewares(ctx.req, ctx.res, (err: unknown) => {\n if (err) {\n reject(err);\n } else {\n resolve(next());\n }\n });\n });\n });\n\n const serveAdmin: Core.MiddlewareHandler = async (koaCtx, next) => {\n await next();\n\n if (koaCtx.method !== 'HEAD' && koaCtx.method !== 'GET') {\n return;\n }\n\n if (koaCtx.body != null || koaCtx.status !== 404) {\n return;\n }\n\n const url = koaCtx.originalUrl;\n\n let template = await fs.readFile(path.relative(ctx.cwd, '.strapi/client/index.html'), 'utf-8');\n template = await vite.transformIndexHtml(url, template);\n\n koaCtx.type = 'html';\n koaCtx.body = template;\n };\n\n ctx.strapi.server.routes([\n {\n method: 'GET',\n path: `${ctx.basePath}:path*`,\n handler: serveAdmin,\n config: { auth: false },\n },\n ]);\n\n return {\n async close() {\n await vite.close();\n },\n };\n};\n\nexport { watch };\nexport type { ViteWatcher };\n"],"names":["config","resolveDevelopmentConfig","mergeConfigWithUserConfig","ctx","fs","path"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYM,MAAA,QAAQ,OAAO,QAA4C;AACzD,QAAAA,WAAS,MAAMC,gCAAyB,GAAG;AACjD,QAAM,cAAc,MAAMC,OAAAA,0BAA0BF,UAAQ,GAAG;AAE3D,MAAA,OAAO,MAAM,eAAe,WAAW;AAE3C,QAAM,EAAE,aAAA,IAAiB,MAAM,OAAO,MAAM;AAEtC,QAAA,OAAO,MAAM,aAAa,WAAW;AAE3C,MAAI,OAAO,OAAO,IAAI,IAAI,CAACG,MAAK,SAAS;AACvC,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,WAAK,YAAYA,KAAI,KAAKA,KAAI,KAAK,CAAC,QAAiB;AACnD,YAAI,KAAK;AACP,iBAAO,GAAG;AAAA,QAAA,OACL;AACL,kBAAQ,MAAM;AAAA,QAChB;AAAA,MAAA,CACD;AAAA,IAAA,CACF;AAAA,EAAA,CACF;AAEK,QAAA,aAAqC,OAAO,QAAQ,SAAS;AACjE,UAAM,KAAK;AAEX,QAAI,OAAO,WAAW,UAAU,OAAO,WAAW,OAAO;AACvD;AAAA,IACF;AAEA,QAAI,OAAO,QAAQ,QAAQ,OAAO,WAAW,KAAK;AAChD;AAAA,IACF;AAEA,UAAM,MAAM,OAAO;AAEf,QAAA,WAAW,MAAMC,oBAAG,SAASC,cAAA,QAAK,SAAS,IAAI,KAAK,2BAA2B,GAAG,OAAO;AAC7F,eAAW,MAAM,KAAK,mBAAmB,KAAK,QAAQ;AAEtD,WAAO,OAAO;AACd,WAAO,OAAO;AAAA,EAAA;AAGZ,MAAA,OAAO,OAAO,OAAO;AAAA,IACvB;AAAA,MACE,QAAQ;AAAA,MACR,MAAM,GAAG,IAAI,QAAQ;AAAA,MACrB,SAAS;AAAA,MACT,QAAQ,EAAE,MAAM,MAAM;AAAA,IACxB;AAAA,EAAA,CACD;AAEM,SAAA;AAAA,IACL,MAAM,QAAQ;AACZ,YAAM,KAAK;IACb;AAAA,EAAA;AAEJ;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.js","sources":["../../../src/node/webpack/watch.ts"],"sourcesContent":["import os from 'node:os';\nimport path from 'node:path';\nimport { promisify } from 'node:util';\nimport webpackDevMiddleware from 'webpack-dev-middleware';\nimport webpackHotMiddleware from 'webpack-hot-middleware';\nimport { webpack } from 'webpack';\nimport {
|
|
1
|
+
{"version":3,"file":"watch.js","sources":["../../../src/node/webpack/watch.ts"],"sourcesContent":["import os from 'node:os';\nimport path from 'node:path';\nimport { promisify } from 'node:util';\nimport webpackDevMiddleware from 'webpack-dev-middleware';\nimport webpackHotMiddleware from 'webpack-hot-middleware';\nimport { webpack } from 'webpack';\nimport { Core } from '@strapi/types';\nimport type { BuildContext } from '../create-build-context';\nimport { mergeConfigWithUserConfig, resolveDevelopmentConfig } from './config';\n\ninterface WebpackWatcher {\n close(): Promise<void>;\n}\n\nconst watch = async (ctx: BuildContext): Promise<WebpackWatcher> => {\n const config = await resolveDevelopmentConfig(ctx);\n const finalConfig = await mergeConfigWithUserConfig(config, ctx);\n\n ctx.logger.debug('Final webpack config:', os.EOL, finalConfig);\n\n return new Promise<WebpackWatcher>((res) => {\n const compiler = webpack(finalConfig);\n\n const devMiddleware = webpackDevMiddleware(compiler);\n\n // @ts-expect-error incompatible types between hotMiddleware and webpack\n const hotMiddleware = webpackHotMiddleware(compiler, {\n log: false,\n path: '/__webpack_hmr',\n });\n\n ctx.strapi.server.app.use((ctx, next) => {\n return new Promise((resolve, reject) => {\n hotMiddleware(ctx.req, ctx.res, (err) => {\n if (err) reject(err);\n else resolve(next());\n });\n });\n });\n\n ctx.strapi.server.app.use((context, next) => {\n // wait for webpack-dev-middleware to signal that the build is ready\n const ready = new Promise((resolve) => {\n devMiddleware.waitUntilValid(() => {\n resolve(true);\n });\n });\n // tell webpack-dev-middleware to handle the request\n const init = new Promise((resolve) => {\n devMiddleware(\n context.req,\n {\n // @ts-expect-error ignored\n end(content) {\n // eslint-disable-next-line no-param-reassign\n context.body = content;\n resolve(true);\n },\n getHeader: context.get.bind(context),\n // @ts-expect-error ignored\n setHeader: context.set.bind(context),\n locals: context.state,\n },\n () => resolve(next())\n );\n });\n\n return Promise.all([ready, init]);\n });\n\n const serveAdmin: Core.MiddlewareHandler = async (ctx, next) => {\n await next();\n\n if (devMiddleware.context.outputFileSystem.createReadStream) {\n if (ctx.method !== 'HEAD' && ctx.method !== 'GET') {\n return;\n }\n\n if (ctx.body != null || ctx.status !== 404) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain\n const filename = path.resolve(finalConfig.output?.path!, 'index.html');\n ctx.type = 'html';\n ctx.body = devMiddleware.context.outputFileSystem.createReadStream(filename);\n }\n };\n\n ctx.strapi.server.routes([\n {\n method: 'GET',\n path: `${ctx.basePath}:path*`,\n handler: serveAdmin,\n config: { auth: false },\n },\n ]);\n\n devMiddleware.waitUntilValid(() => {\n res({\n async close() {\n await Promise.all([\n promisify(devMiddleware.close.bind(devMiddleware))(),\n hotMiddleware.close(),\n promisify(compiler.close.bind(compiler))(),\n ]);\n },\n });\n });\n });\n};\n\nexport { watch };\nexport type { WebpackWatcher };\n"],"names":["config","resolveDevelopmentConfig","mergeConfigWithUserConfig","os","webpack","webpackDevMiddleware","webpackHotMiddleware","ctx","path","promisify"],"mappings":";;;;;;;;;;;;;;AAcM,MAAA,QAAQ,OAAO,QAA+C;AAC5D,QAAAA,WAAS,MAAMC,gCAAyB,GAAG;AACjD,QAAM,cAAc,MAAMC,OAAAA,0BAA0BF,UAAQ,GAAG;AAE/D,MAAI,OAAO,MAAM,yBAAyBG,YAAAA,QAAG,KAAK,WAAW;AAEtD,SAAA,IAAI,QAAwB,CAAC,QAAQ;AACpC,UAAA,WAAWC,gBAAQ,WAAW;AAE9B,UAAA,gBAAgBC,sCAAqB,QAAQ;AAG7C,UAAA,gBAAgBC,sCAAqB,UAAU;AAAA,MACnD,KAAK;AAAA,MACL,MAAM;AAAA,IAAA,CACP;AAED,QAAI,OAAO,OAAO,IAAI,IAAI,CAACC,MAAK,SAAS;AACvC,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,sBAAcA,KAAI,KAAKA,KAAI,KAAK,CAAC,QAAQ;AACnC,cAAA;AAAK,mBAAO,GAAG;AAAA;AACd,oBAAQ,MAAM;AAAA,QAAA,CACpB;AAAA,MAAA,CACF;AAAA,IAAA,CACF;AAED,QAAI,OAAO,OAAO,IAAI,IAAI,CAAC,SAAS,SAAS;AAE3C,YAAM,QAAQ,IAAI,QAAQ,CAAC,YAAY;AACrC,sBAAc,eAAe,MAAM;AACjC,kBAAQ,IAAI;AAAA,QAAA,CACb;AAAA,MAAA,CACF;AAED,YAAM,OAAO,IAAI,QAAQ,CAAC,YAAY;AACpC;AAAA,UACE,QAAQ;AAAA,UACR;AAAA;AAAA,YAEE,IAAI,SAAS;AAEX,sBAAQ,OAAO;AACf,sBAAQ,IAAI;AAAA,YACd;AAAA,YACA,WAAW,QAAQ,IAAI,KAAK,OAAO;AAAA;AAAA,YAEnC,WAAW,QAAQ,IAAI,KAAK,OAAO;AAAA,YACnC,QAAQ,QAAQ;AAAA,UAClB;AAAA,UACA,MAAM,QAAQ,MAAM;AAAA,QAAA;AAAA,MACtB,CACD;AAED,aAAO,QAAQ,IAAI,CAAC,OAAO,IAAI,CAAC;AAAA,IAAA,CACjC;AAEK,UAAA,aAAqC,OAAOA,MAAK,SAAS;AAC9D,YAAM,KAAK;AAEP,UAAA,cAAc,QAAQ,iBAAiB,kBAAkB;AAC3D,YAAIA,KAAI,WAAW,UAAUA,KAAI,WAAW,OAAO;AACjD;AAAA,QACF;AAEA,YAAIA,KAAI,QAAQ,QAAQA,KAAI,WAAW,KAAK;AAC1C;AAAA,QACF;AAGA,cAAM,WAAWC,cAAAA,QAAK,QAAQ,YAAY,QAAQ,MAAO,YAAY;AACrED,aAAI,OAAO;AACXA,aAAI,OAAO,cAAc,QAAQ,iBAAiB,iBAAiB,QAAQ;AAAA,MAC7E;AAAA,IAAA;AAGE,QAAA,OAAO,OAAO,OAAO;AAAA,MACvB;AAAA,QACE,QAAQ;AAAA,QACR,MAAM,GAAG,IAAI,QAAQ;AAAA,QACrB,SAAS;AAAA,QACT,QAAQ,EAAE,MAAM,MAAM;AAAA,MACxB;AAAA,IAAA,CACD;AAED,kBAAc,eAAe,MAAM;AAC7B,UAAA;AAAA,QACF,MAAM,QAAQ;AACZ,gBAAM,QAAQ,IAAI;AAAA,YAChBE,UAAAA,UAAU,cAAc,MAAM,KAAK,aAAa,CAAC,EAAE;AAAA,YACnD,cAAc,MAAM;AAAA,YACpBA,UAAAA,UAAU,SAAS,MAAM,KAAK,QAAQ,CAAC,EAAE;AAAA,UAAA,CAC1C;AAAA,QACH;AAAA,MAAA,CACD;AAAA,IAAA,CACF;AAAA,EAAA,CACF;AACH;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strapi/strapi",
|
|
3
|
-
"version": "5.0.0-alpha.
|
|
3
|
+
"version": "5.0.0-alpha.7",
|
|
4
4
|
"description": "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",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"strapi",
|
|
@@ -110,24 +110,24 @@
|
|
|
110
110
|
},
|
|
111
111
|
"dependencies": {
|
|
112
112
|
"@pmmmwh/react-refresh-webpack-plugin": "0.5.11",
|
|
113
|
-
"@strapi/admin": "5.0.0-alpha.
|
|
114
|
-
"@strapi/content-releases": "5.0.0-alpha.
|
|
115
|
-
"@strapi/core": "5.0.0-alpha.
|
|
116
|
-
"@strapi/data-transfer": "5.0.0-alpha.
|
|
117
|
-
"@strapi/database": "5.0.0-alpha.
|
|
118
|
-
"@strapi/generate-new": "5.0.0-alpha.
|
|
119
|
-
"@strapi/generators": "5.0.0-alpha.
|
|
120
|
-
"@strapi/logger": "5.0.0-alpha.
|
|
121
|
-
"@strapi/pack-up": "5.0.0-alpha.
|
|
122
|
-
"@strapi/permissions": "5.0.0-alpha.
|
|
123
|
-
"@strapi/plugin-content-manager": "5.0.0-alpha.
|
|
124
|
-
"@strapi/plugin-content-type-builder": "5.0.0-alpha.
|
|
125
|
-
"@strapi/plugin-email": "5.0.0-alpha.
|
|
126
|
-
"@strapi/plugin-i18n": "5.0.0-alpha.
|
|
127
|
-
"@strapi/plugin-upload": "5.0.0-alpha.
|
|
128
|
-
"@strapi/types": "5.0.0-alpha.
|
|
129
|
-
"@strapi/typescript-utils": "5.0.0-alpha.
|
|
130
|
-
"@strapi/utils": "5.0.0-alpha.
|
|
113
|
+
"@strapi/admin": "5.0.0-alpha.7",
|
|
114
|
+
"@strapi/content-releases": "5.0.0-alpha.7",
|
|
115
|
+
"@strapi/core": "5.0.0-alpha.7",
|
|
116
|
+
"@strapi/data-transfer": "5.0.0-alpha.7",
|
|
117
|
+
"@strapi/database": "5.0.0-alpha.7",
|
|
118
|
+
"@strapi/generate-new": "5.0.0-alpha.7",
|
|
119
|
+
"@strapi/generators": "5.0.0-alpha.7",
|
|
120
|
+
"@strapi/logger": "5.0.0-alpha.7",
|
|
121
|
+
"@strapi/pack-up": "5.0.0-alpha.7",
|
|
122
|
+
"@strapi/permissions": "5.0.0-alpha.7",
|
|
123
|
+
"@strapi/plugin-content-manager": "5.0.0-alpha.7",
|
|
124
|
+
"@strapi/plugin-content-type-builder": "5.0.0-alpha.7",
|
|
125
|
+
"@strapi/plugin-email": "5.0.0-alpha.7",
|
|
126
|
+
"@strapi/plugin-i18n": "5.0.0-alpha.7",
|
|
127
|
+
"@strapi/plugin-upload": "5.0.0-alpha.7",
|
|
128
|
+
"@strapi/types": "5.0.0-alpha.7",
|
|
129
|
+
"@strapi/typescript-utils": "5.0.0-alpha.7",
|
|
130
|
+
"@strapi/utils": "5.0.0-alpha.7",
|
|
131
131
|
"@types/nodemon": "1.19.6",
|
|
132
132
|
"@vitejs/plugin-react-swc": "3.6.0",
|
|
133
133
|
"boxen": "5.1.2",
|
|
@@ -187,18 +187,20 @@
|
|
|
187
187
|
"@types/node": "18.19.24",
|
|
188
188
|
"@types/webpack-bundle-analyzer": "4.7.0",
|
|
189
189
|
"@types/webpack-hot-middleware": "2.25.9",
|
|
190
|
-
"eslint-config-custom": "5.0.0-alpha.
|
|
190
|
+
"eslint-config-custom": "5.0.0-alpha.7",
|
|
191
191
|
"react": "^18.2.0",
|
|
192
192
|
"react-dom": "^18.2.0",
|
|
193
|
-
"tsconfig": "5.0.0-alpha.
|
|
193
|
+
"tsconfig": "5.0.0-alpha.7"
|
|
194
194
|
},
|
|
195
195
|
"peerDependencies": {
|
|
196
196
|
"react": "^17.0.0 || ^18.0.0",
|
|
197
|
-
"react-dom": "^17.0.0 || ^18.0.0"
|
|
197
|
+
"react-dom": "^17.0.0 || ^18.0.0",
|
|
198
|
+
"react-router-dom": "^6.0.0",
|
|
199
|
+
"styled-components": "^5.2.1"
|
|
198
200
|
},
|
|
199
201
|
"engines": {
|
|
200
202
|
"node": ">=18.0.0 <=20.x.x",
|
|
201
203
|
"npm": ">=6.0.0"
|
|
202
204
|
},
|
|
203
|
-
"gitHead": "
|
|
205
|
+
"gitHead": "9b94d7f8880803bb8e6acd52215588438793e160"
|
|
204
206
|
}
|