@strapi/strapi 5.0.0-beta.1 → 5.0.0-beta.2
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/admin.d.ts.map +1 -1
- package/dist/admin.js +5 -0
- package/dist/admin.js.map +1 -1
- package/dist/admin.mjs +4 -0
- package/dist/admin.mjs.map +1 -1
- package/dist/cli/commands/admin/create-user.js +2 -2
- package/dist/cli/commands/admin/create-user.js.map +1 -1
- package/dist/cli/commands/admin/create-user.mjs +88 -0
- package/dist/cli/commands/admin/create-user.mjs.map +1 -0
- package/dist/cli/commands/admin/reset-user-password.js +2 -2
- package/dist/cli/commands/admin/reset-user-password.js.map +1 -1
- package/dist/cli/commands/admin/reset-user-password.mjs +44 -0
- package/dist/cli/commands/admin/reset-user-password.mjs.map +1 -0
- package/dist/cli/commands/build.mjs +30 -0
- package/dist/cli/commands/build.mjs.map +1 -0
- package/dist/cli/commands/components/list.js +2 -2
- package/dist/cli/commands/components/list.js.map +1 -1
- package/dist/cli/commands/components/list.mjs +24 -0
- package/dist/cli/commands/components/list.mjs.map +1 -0
- package/dist/cli/commands/configuration/dump.js +2 -2
- package/dist/cli/commands/configuration/dump.js.map +1 -1
- package/dist/cli/commands/configuration/dump.mjs +41 -0
- package/dist/cli/commands/configuration/dump.mjs.map +1 -0
- package/dist/cli/commands/configuration/restore.js +2 -2
- package/dist/cli/commands/configuration/restore.js.map +1 -1
- package/dist/cli/commands/configuration/restore.mjs +140 -0
- package/dist/cli/commands/configuration/restore.mjs.map +1 -0
- package/dist/cli/commands/console.js +2 -2
- package/dist/cli/commands/console.js.map +1 -1
- package/dist/cli/commands/console.mjs +27 -0
- package/dist/cli/commands/console.mjs.map +1 -0
- package/dist/cli/commands/content-types/list.js +2 -2
- package/dist/cli/commands/content-types/list.js.map +1 -1
- package/dist/cli/commands/content-types/list.mjs +24 -0
- package/dist/cli/commands/content-types/list.mjs.map +1 -0
- package/dist/cli/commands/controllers/list.js +2 -2
- package/dist/cli/commands/controllers/list.js.map +1 -1
- package/dist/cli/commands/controllers/list.mjs +24 -0
- package/dist/cli/commands/controllers/list.mjs.map +1 -0
- package/dist/cli/commands/develop.mjs +27 -0
- package/dist/cli/commands/develop.mjs.map +1 -0
- package/dist/cli/commands/export/action.mjs +116 -0
- package/dist/cli/commands/export/action.mjs.map +1 -0
- package/dist/cli/commands/export/command.mjs +24 -0
- package/dist/cli/commands/export/command.mjs.map +1 -0
- package/dist/cli/commands/generate.mjs +13 -0
- package/dist/cli/commands/generate.mjs.map +1 -0
- package/dist/cli/commands/hooks/list.js +2 -2
- package/dist/cli/commands/hooks/list.js.map +1 -1
- package/dist/cli/commands/hooks/list.mjs +24 -0
- package/dist/cli/commands/hooks/list.mjs.map +1 -0
- package/dist/cli/commands/import/action.mjs +105 -0
- package/dist/cli/commands/import/action.mjs.map +1 -0
- package/dist/cli/commands/import/command.mjs +68 -0
- package/dist/cli/commands/import/command.mjs.map +1 -0
- package/dist/cli/commands/index.mjs +71 -0
- package/dist/cli/commands/index.mjs.map +1 -0
- package/dist/cli/commands/middlewares/list.js +2 -2
- package/dist/cli/commands/middlewares/list.js.map +1 -1
- package/dist/cli/commands/middlewares/list.mjs +24 -0
- package/dist/cli/commands/middlewares/list.mjs.map +1 -0
- package/dist/cli/commands/plugin/build.mjs +85 -0
- package/dist/cli/commands/plugin/build.mjs.map +1 -0
- package/dist/cli/commands/plugin/init/action.js +1 -1
- package/dist/cli/commands/plugin/init/action.js.map +1 -1
- package/dist/cli/commands/plugin/init/action.mjs +409 -0
- package/dist/cli/commands/plugin/init/action.mjs.map +1 -0
- package/dist/cli/commands/plugin/init/command.mjs +10 -0
- package/dist/cli/commands/plugin/init/command.mjs.map +1 -0
- package/dist/cli/commands/plugin/init/files/admin.mjs +283 -0
- package/dist/cli/commands/plugin/init/files/admin.mjs.map +1 -0
- package/dist/cli/commands/plugin/init/files/editorConfig.mjs +26 -0
- package/dist/cli/commands/plugin/init/files/editorConfig.mjs.map +1 -0
- package/dist/cli/commands/plugin/init/files/eslint.mjs +11 -0
- package/dist/cli/commands/plugin/init/files/eslint.mjs.map +1 -0
- package/dist/cli/commands/plugin/init/files/gitIgnore.mjs +34 -0
- package/dist/cli/commands/plugin/init/files/gitIgnore.mjs.map +1 -0
- package/dist/cli/commands/plugin/init/files/prettier.mjs +25 -0
- package/dist/cli/commands/plugin/init/files/prettier.mjs.map +1 -0
- package/dist/cli/commands/plugin/init/files/server.mjs +360 -0
- package/dist/cli/commands/plugin/init/files/server.mjs.map +1 -0
- package/dist/cli/commands/plugin/init/files/typescript.mjs +66 -0
- package/dist/cli/commands/plugin/init/files/typescript.mjs.map +1 -0
- package/dist/cli/commands/plugin/link-watch.mjs +82 -0
- package/dist/cli/commands/plugin/link-watch.mjs.map +1 -0
- package/dist/cli/commands/plugin/verify.mjs +34 -0
- package/dist/cli/commands/plugin/verify.mjs.map +1 -0
- package/dist/cli/commands/plugin/watch.mjs +83 -0
- package/dist/cli/commands/plugin/watch.mjs.map +1 -0
- package/dist/cli/commands/policies/list.js +2 -2
- package/dist/cli/commands/policies/list.js.map +1 -1
- package/dist/cli/commands/policies/list.mjs +24 -0
- package/dist/cli/commands/policies/list.mjs.map +1 -0
- package/dist/cli/commands/report.js +2 -2
- package/dist/cli/commands/report.js.map +1 -1
- package/dist/cli/commands/report.mjs +35 -0
- package/dist/cli/commands/report.mjs.map +1 -0
- package/dist/cli/commands/routes/list.js +2 -2
- package/dist/cli/commands/routes/list.js.map +1 -1
- package/dist/cli/commands/routes/list.mjs +28 -0
- package/dist/cli/commands/routes/list.mjs.map +1 -0
- package/dist/cli/commands/services/list.js +2 -2
- package/dist/cli/commands/services/list.js.map +1 -1
- package/dist/cli/commands/services/list.mjs +24 -0
- package/dist/cli/commands/services/list.mjs.map +1 -0
- package/dist/cli/commands/start.js +1 -1
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/start.mjs +24 -0
- package/dist/cli/commands/start.mjs.map +1 -0
- package/dist/cli/commands/telemetry/disable.mjs +67 -0
- package/dist/cli/commands/telemetry/disable.mjs.map +1 -0
- package/dist/cli/commands/telemetry/enable.mjs +86 -0
- package/dist/cli/commands/telemetry/enable.mjs.map +1 -0
- package/dist/cli/commands/templates/generate.mjs +74 -0
- package/dist/cli/commands/templates/generate.mjs.map +1 -0
- package/dist/cli/commands/transfer/action.mjs +131 -0
- package/dist/cli/commands/transfer/action.mjs.map +1 -0
- package/dist/cli/commands/transfer/command.mjs +84 -0
- package/dist/cli/commands/transfer/command.mjs.map +1 -0
- package/dist/cli/commands/ts/generate-types.js +2 -2
- package/dist/cli/commands/ts/generate-types.js.map +1 -1
- package/dist/cli/commands/ts/generate-types.mjs +35 -0
- package/dist/cli/commands/ts/generate-types.mjs.map +1 -0
- package/dist/cli/commands/version.mjs +13 -0
- package/dist/cli/commands/version.mjs.map +1 -0
- package/dist/cli/index.mjs +49 -0
- package/dist/cli/index.mjs.map +1 -0
- package/dist/cli/utils/commander.mjs +109 -0
- package/dist/cli/utils/commander.mjs.map +1 -0
- package/dist/cli/utils/data-transfer.js +2 -2
- package/dist/cli/utils/data-transfer.js.map +1 -1
- package/dist/cli/utils/data-transfer.mjs +339 -0
- package/dist/cli/utils/data-transfer.mjs.map +1 -0
- package/dist/cli/utils/helpers.mjs +100 -0
- package/dist/cli/utils/helpers.mjs.map +1 -0
- package/dist/cli/utils/logger.mjs +80 -0
- package/dist/cli/utils/logger.mjs.map +1 -0
- package/dist/cli/utils/pkg.d.ts.map +1 -1
- package/dist/cli/utils/pkg.js +18 -15
- package/dist/cli/utils/pkg.js.map +1 -1
- package/dist/cli/utils/pkg.mjs +87 -0
- package/dist/cli/utils/pkg.mjs.map +1 -0
- package/dist/cli/utils/telemetry.mjs +22 -0
- package/dist/cli/utils/telemetry.mjs.map +1 -0
- package/dist/cli/utils/tsconfig.mjs +23 -0
- package/dist/cli/utils/tsconfig.mjs.map +1 -0
- package/dist/node/build.mjs +58 -0
- package/dist/node/build.mjs.map +1 -0
- package/dist/node/core/admin-customisations.mjs +22 -0
- package/dist/node/core/admin-customisations.mjs.map +1 -0
- package/dist/node/core/aliases.d.ts.map +1 -1
- package/dist/node/core/aliases.js +3 -1
- package/dist/node/core/aliases.js.map +1 -1
- package/dist/node/core/aliases.mjs +30 -0
- package/dist/node/core/aliases.mjs.map +1 -0
- package/dist/node/core/config.mjs +16 -0
- package/dist/node/core/config.mjs.map +1 -0
- package/dist/node/core/dependencies.mjs +151 -0
- package/dist/node/core/dependencies.mjs.map +1 -0
- package/dist/node/core/env.d.ts.map +1 -1
- package/dist/node/core/env.js +7 -4
- package/dist/node/core/env.js.map +1 -1
- package/dist/node/core/env.mjs +23 -0
- package/dist/node/core/env.mjs.map +1 -0
- package/dist/node/core/errors.mjs +29 -0
- package/dist/node/core/errors.mjs.map +1 -0
- package/dist/node/core/files.mjs +43 -0
- package/dist/node/core/files.mjs.map +1 -0
- package/dist/node/core/managers.mjs +17 -0
- package/dist/node/core/managers.mjs.map +1 -0
- package/dist/node/core/monorepo.mjs +20 -0
- package/dist/node/core/monorepo.mjs.map +1 -0
- package/dist/node/core/plugins.mjs +93 -0
- package/dist/node/core/plugins.mjs.map +1 -0
- package/dist/node/core/timer.mjs +27 -0
- package/dist/node/core/timer.mjs.map +1 -0
- package/dist/node/create-build-context.js +1 -1
- package/dist/node/create-build-context.js.map +1 -1
- package/dist/node/create-build-context.mjs +91 -0
- package/dist/node/create-build-context.mjs.map +1 -0
- package/dist/node/develop.js +1 -1
- package/dist/node/develop.js.map +1 -1
- package/dist/node/develop.mjs +252 -0
- package/dist/node/develop.mjs.map +1 -0
- package/dist/node/staticFiles.d.ts.map +1 -1
- package/dist/node/staticFiles.js +25 -3
- package/dist/node/staticFiles.js.map +1 -1
- package/dist/node/staticFiles.mjs +76 -0
- package/dist/node/staticFiles.mjs.map +1 -0
- package/dist/node/vite/build.mjs +12 -0
- package/dist/node/vite/build.mjs.map +1 -0
- package/dist/node/vite/config.mjs +99 -0
- package/dist/node/vite/config.mjs.map +1 -0
- package/dist/node/vite/plugins.mjs +43 -0
- package/dist/node/vite/plugins.mjs.map +1 -0
- package/dist/node/vite/watch.mjs +52 -0
- package/dist/node/vite/watch.mjs.map +1 -0
- package/dist/node/webpack/build.mjs +39 -0
- package/dist/node/webpack/build.mjs.map +1 -0
- package/dist/node/webpack/config.mjs +228 -0
- package/dist/node/webpack/config.mjs.map +1 -0
- package/dist/node/webpack/watch.mjs +92 -0
- package/dist/node/webpack/watch.mjs.map +1 -0
- package/package.json +24 -24
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { isObject } from "lodash/fp";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { file, strapi as strapi$1, engine } from "@strapi/data-transfer";
|
|
4
|
+
import { createStrapiInstance, DEFAULT_IGNORED_CONTENT_TYPES, parseRestoreFromOptions, formatDiagnostic, getDiffHandler, getTransferTelemetryPayload, abortTransfer, setSignalHandler, buildTransferTable, exitMessageText, loadersFactory } from "../../utils/data-transfer.mjs";
|
|
5
|
+
import { exitWith } from "../../utils/helpers.mjs";
|
|
6
|
+
const {
|
|
7
|
+
providers: { createLocalFileSourceProvider }
|
|
8
|
+
} = file;
|
|
9
|
+
const {
|
|
10
|
+
providers: { createLocalStrapiDestinationProvider, DEFAULT_CONFLICT_STRATEGY }
|
|
11
|
+
} = strapi$1;
|
|
12
|
+
const { createTransferEngine, DEFAULT_VERSION_STRATEGY, DEFAULT_SCHEMA_STRATEGY } = engine;
|
|
13
|
+
const action = async (opts) => {
|
|
14
|
+
if (!isObject(opts)) {
|
|
15
|
+
exitWith(1, "Could not parse arguments");
|
|
16
|
+
}
|
|
17
|
+
const sourceOptions = getLocalFileSourceOptions(opts);
|
|
18
|
+
const source = createLocalFileSourceProvider(sourceOptions);
|
|
19
|
+
const strapiInstance = await createStrapiInstance();
|
|
20
|
+
const engineOptions = {
|
|
21
|
+
versionStrategy: DEFAULT_VERSION_STRATEGY,
|
|
22
|
+
schemaStrategy: DEFAULT_SCHEMA_STRATEGY,
|
|
23
|
+
exclude: opts.exclude,
|
|
24
|
+
only: opts.only,
|
|
25
|
+
throttle: opts.throttle,
|
|
26
|
+
transforms: {
|
|
27
|
+
links: [
|
|
28
|
+
{
|
|
29
|
+
filter(link) {
|
|
30
|
+
return !DEFAULT_IGNORED_CONTENT_TYPES.includes(link.left.type) && !DEFAULT_IGNORED_CONTENT_TYPES.includes(link.right.type);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
entities: [
|
|
35
|
+
{
|
|
36
|
+
filter: (entity) => !DEFAULT_IGNORED_CONTENT_TYPES.includes(entity.type)
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const destinationOptions = {
|
|
42
|
+
async getStrapi() {
|
|
43
|
+
return strapiInstance;
|
|
44
|
+
},
|
|
45
|
+
autoDestroy: false,
|
|
46
|
+
strategy: opts.conflictStrategy || DEFAULT_CONFLICT_STRATEGY,
|
|
47
|
+
restore: parseRestoreFromOptions(engineOptions)
|
|
48
|
+
};
|
|
49
|
+
const destination = createLocalStrapiDestinationProvider(destinationOptions);
|
|
50
|
+
destination.onWarning = (message) => console.warn(`
|
|
51
|
+
${chalk.yellow("warn")}: ${message}`);
|
|
52
|
+
const engine2 = createTransferEngine(source, destination, engineOptions);
|
|
53
|
+
engine2.diagnostics.onDiagnostic(formatDiagnostic("import"));
|
|
54
|
+
const progress = engine2.progress.stream;
|
|
55
|
+
const { updateLoader } = loadersFactory();
|
|
56
|
+
engine2.onSchemaDiff(getDiffHandler(engine2, { force: opts.force, action: "import" }));
|
|
57
|
+
progress.on(`stage::start`, ({ stage, data }) => {
|
|
58
|
+
updateLoader(stage, data).start();
|
|
59
|
+
});
|
|
60
|
+
progress.on("stage::finish", ({ stage, data }) => {
|
|
61
|
+
updateLoader(stage, data).succeed();
|
|
62
|
+
});
|
|
63
|
+
progress.on("stage::progress", ({ stage, data }) => {
|
|
64
|
+
updateLoader(stage, data);
|
|
65
|
+
});
|
|
66
|
+
progress.on("transfer::start", async () => {
|
|
67
|
+
console.log("Starting import...");
|
|
68
|
+
await strapiInstance.telemetry.send(
|
|
69
|
+
"didDEITSProcessStart",
|
|
70
|
+
getTransferTelemetryPayload(engine2)
|
|
71
|
+
);
|
|
72
|
+
});
|
|
73
|
+
let results;
|
|
74
|
+
try {
|
|
75
|
+
setSignalHandler(() => abortTransfer({ engine: engine2, strapi }));
|
|
76
|
+
results = await engine2.transfer();
|
|
77
|
+
try {
|
|
78
|
+
const table = buildTransferTable(results.engine);
|
|
79
|
+
console.log(table?.toString());
|
|
80
|
+
} catch (e) {
|
|
81
|
+
console.error("There was an error displaying the results of the transfer.");
|
|
82
|
+
}
|
|
83
|
+
await strapiInstance.telemetry.send(
|
|
84
|
+
"didDEITSProcessFinish",
|
|
85
|
+
getTransferTelemetryPayload(engine2)
|
|
86
|
+
);
|
|
87
|
+
await strapiInstance.destroy();
|
|
88
|
+
exitWith(0, exitMessageText("import"));
|
|
89
|
+
} catch (e) {
|
|
90
|
+
await strapiInstance.telemetry.send("didDEITSProcessFail", getTransferTelemetryPayload(engine2));
|
|
91
|
+
exitWith(1, exitMessageText("import", true));
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
const getLocalFileSourceOptions = (opts) => {
|
|
95
|
+
const options = {
|
|
96
|
+
file: { path: opts.file ?? "" },
|
|
97
|
+
compression: { enabled: !!opts.decompress },
|
|
98
|
+
encryption: { enabled: !!opts.decrypt, key: opts.key }
|
|
99
|
+
};
|
|
100
|
+
return options;
|
|
101
|
+
};
|
|
102
|
+
export {
|
|
103
|
+
action as default
|
|
104
|
+
};
|
|
105
|
+
//# sourceMappingURL=action.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.mjs","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","engine"],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import { createCommand, Option } from "commander";
|
|
3
|
+
import inquirer from "inquirer";
|
|
4
|
+
import { excludeOption, onlyOption, throttleOption, validateExcludeOnly } from "../../utils/data-transfer.mjs";
|
|
5
|
+
import { forceOption, getCommanderConfirmMessage } from "../../utils/commander.mjs";
|
|
6
|
+
import { exitWith } from "../../utils/helpers.mjs";
|
|
7
|
+
import action from "./action.mjs";
|
|
8
|
+
const command = () => {
|
|
9
|
+
return createCommand("import").description("Import data from file to Strapi").allowExcessArguments(false).requiredOption(
|
|
10
|
+
"-f, --file <file>",
|
|
11
|
+
"path and filename for the Strapi export file you want to import"
|
|
12
|
+
).addOption(
|
|
13
|
+
new Option(
|
|
14
|
+
"-k, --key <string>",
|
|
15
|
+
"Provide encryption key in command instead of using the prompt"
|
|
16
|
+
)
|
|
17
|
+
).addOption(forceOption).addOption(excludeOption).addOption(onlyOption).addOption(throttleOption).hook("preAction", validateExcludeOnly).hook("preAction", async (thisCommand) => {
|
|
18
|
+
const opts = thisCommand.opts();
|
|
19
|
+
const ext = path.extname(String(opts.file));
|
|
20
|
+
if (ext === ".enc") {
|
|
21
|
+
if (!opts.key) {
|
|
22
|
+
const answers = await inquirer.prompt([
|
|
23
|
+
{
|
|
24
|
+
type: "password",
|
|
25
|
+
message: "Please enter your decryption key",
|
|
26
|
+
name: "key"
|
|
27
|
+
}
|
|
28
|
+
]);
|
|
29
|
+
if (!answers.key?.length) {
|
|
30
|
+
exitWith(1, "No key entered, aborting import.");
|
|
31
|
+
}
|
|
32
|
+
opts.key = answers.key;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}).hook("preAction", (thisCommand) => {
|
|
36
|
+
const opts = thisCommand.opts();
|
|
37
|
+
const { extname, parse } = path;
|
|
38
|
+
let file = opts.file;
|
|
39
|
+
if (extname(file) === ".enc") {
|
|
40
|
+
file = parse(file).name;
|
|
41
|
+
thisCommand.opts().decrypt = true;
|
|
42
|
+
} else {
|
|
43
|
+
thisCommand.opts().decrypt = false;
|
|
44
|
+
}
|
|
45
|
+
if (extname(file) === ".gz") {
|
|
46
|
+
file = parse(file).name;
|
|
47
|
+
thisCommand.opts().decompress = true;
|
|
48
|
+
} else {
|
|
49
|
+
thisCommand.opts().decompress = false;
|
|
50
|
+
}
|
|
51
|
+
if (extname(file) !== ".tar") {
|
|
52
|
+
exitWith(
|
|
53
|
+
1,
|
|
54
|
+
`The file '${opts.file}' does not appear to be a valid Strapi data file. It must have an extension ending in .tar[.gz][.enc]`
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
}).hook(
|
|
58
|
+
"preAction",
|
|
59
|
+
getCommanderConfirmMessage(
|
|
60
|
+
"The import will delete your existing data! Are you sure you want to proceed?",
|
|
61
|
+
{ failMessage: "Import process aborted" }
|
|
62
|
+
)
|
|
63
|
+
).action(action);
|
|
64
|
+
};
|
|
65
|
+
export {
|
|
66
|
+
command as default
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=command.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.mjs","sources":["../../../../src/cli/commands/import/command.ts"],"sourcesContent":["import path from 'path';\nimport { createCommand, Option } from 'commander';\nimport inquirer from 'inquirer';\nimport {\n excludeOption,\n onlyOption,\n throttleOption,\n validateExcludeOnly,\n} from '../../utils/data-transfer';\nimport { getCommanderConfirmMessage, forceOption } from '../../utils/commander';\nimport { exitWith } from '../../utils/helpers';\nimport action from './action';\n\n/**\n * `$ strapi import`\n */\nconst command = () => {\n return (\n createCommand('import')\n .description('Import data from file to Strapi')\n .allowExcessArguments(false)\n .requiredOption(\n '-f, --file <file>',\n 'path and filename for the Strapi export file you want to import'\n )\n .addOption(\n new Option(\n '-k, --key <string>',\n 'Provide encryption key in command instead of using the prompt'\n )\n )\n .addOption(forceOption)\n .addOption(excludeOption)\n .addOption(onlyOption)\n .addOption(throttleOption)\n .hook('preAction', validateExcludeOnly)\n .hook('preAction', async (thisCommand) => {\n const opts = thisCommand.opts();\n const ext = path.extname(String(opts.file));\n\n // check extension to guess if we should prompt for key\n if (ext === '.enc') {\n if (!opts.key) {\n const answers = await inquirer.prompt([\n {\n type: 'password',\n message: 'Please enter your decryption key',\n name: 'key',\n },\n ]);\n if (!answers.key?.length) {\n exitWith(1, 'No key entered, aborting import.');\n }\n opts.key = answers.key;\n }\n }\n })\n // set decrypt and decompress options based on filename\n .hook('preAction', (thisCommand) => {\n const opts = thisCommand.opts();\n\n const { extname, parse } = path;\n\n let file = opts.file;\n\n if (extname(file) === '.enc') {\n file = parse(file).name; // trim the .enc extension\n thisCommand.opts().decrypt = true;\n } else {\n thisCommand.opts().decrypt = false;\n }\n\n if (extname(file) === '.gz') {\n file = parse(file).name; // trim the .gz extension\n thisCommand.opts().decompress = true;\n } else {\n thisCommand.opts().decompress = false;\n }\n\n if (extname(file) !== '.tar') {\n exitWith(\n 1,\n `The file '${opts.file}' does not appear to be a valid Strapi data file. It must have an extension ending in .tar[.gz][.enc]`\n );\n }\n })\n .hook(\n 'preAction',\n getCommanderConfirmMessage(\n 'The import will delete your existing data! Are you sure you want to proceed?',\n { failMessage: 'Import process aborted' }\n )\n )\n .action(action)\n );\n};\n\nexport default command;\n"],"names":[],"mappings":";;;;;;;AAgBA,MAAM,UAAU,MAAM;AAElB,SAAA,cAAc,QAAQ,EACnB,YAAY,iCAAiC,EAC7C,qBAAqB,KAAK,EAC1B;AAAA,IACC;AAAA,IACA;AAAA,EAAA,EAED;AAAA,IACC,IAAI;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EAAA,EAED,UAAU,WAAW,EACrB,UAAU,aAAa,EACvB,UAAU,UAAU,EACpB,UAAU,cAAc,EACxB,KAAK,aAAa,mBAAmB,EACrC,KAAK,aAAa,OAAO,gBAAgB;AAClC,UAAA,OAAO,YAAY;AACzB,UAAM,MAAM,KAAK,QAAQ,OAAO,KAAK,IAAI,CAAC;AAG1C,QAAI,QAAQ,QAAQ;AACd,UAAA,CAAC,KAAK,KAAK;AACP,cAAA,UAAU,MAAM,SAAS,OAAO;AAAA,UACpC;AAAA,YACE,MAAM;AAAA,YACN,SAAS;AAAA,YACT,MAAM;AAAA,UACR;AAAA,QAAA,CACD;AACG,YAAA,CAAC,QAAQ,KAAK,QAAQ;AACxB,mBAAS,GAAG,kCAAkC;AAAA,QAChD;AACA,aAAK,MAAM,QAAQ;AAAA,MACrB;AAAA,IACF;AAAA,EACD,CAAA,EAEA,KAAK,aAAa,CAAC,gBAAgB;AAC5B,UAAA,OAAO,YAAY;AAEnB,UAAA,EAAE,SAAS,MAAU,IAAA;AAE3B,QAAI,OAAO,KAAK;AAEZ,QAAA,QAAQ,IAAI,MAAM,QAAQ;AACrB,aAAA,MAAM,IAAI,EAAE;AACP,kBAAA,KAAA,EAAO,UAAU;AAAA,IAAA,OACxB;AACO,kBAAA,KAAA,EAAO,UAAU;AAAA,IAC/B;AAEI,QAAA,QAAQ,IAAI,MAAM,OAAO;AACpB,aAAA,MAAM,IAAI,EAAE;AACP,kBAAA,KAAA,EAAO,aAAa;AAAA,IAAA,OAC3B;AACO,kBAAA,KAAA,EAAO,aAAa;AAAA,IAClC;AAEI,QAAA,QAAQ,IAAI,MAAM,QAAQ;AAC5B;AAAA,QACE;AAAA,QACA,aAAa,KAAK,IAAI;AAAA,MAAA;AAAA,IAE1B;AAAA,EACD,CAAA,EACA;AAAA,IACC;AAAA,IACA;AAAA,MACE;AAAA,MACA,EAAE,aAAa,yBAAyB;AAAA,IAC1C;AAAA,EAAA,EAED,OAAO,MAAM;AAEpB;"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { command } from "./admin/create-user.mjs";
|
|
2
|
+
import { command as command$1 } from "./admin/reset-user-password.mjs";
|
|
3
|
+
import { command as command$2 } from "./components/list.mjs";
|
|
4
|
+
import { command as command$3 } from "./configuration/dump.mjs";
|
|
5
|
+
import { command as command$4 } from "./configuration/restore.mjs";
|
|
6
|
+
import { command as command$6 } from "./content-types/list.mjs";
|
|
7
|
+
import { command as command$7 } from "./controllers/list.mjs";
|
|
8
|
+
import { command as command$9 } from "./hooks/list.mjs";
|
|
9
|
+
import { command as command$a } from "./middlewares/list.mjs";
|
|
10
|
+
import { command as command$b } from "./policies/list.mjs";
|
|
11
|
+
import { command as command$d } from "./routes/list.mjs";
|
|
12
|
+
import { command as command$e } from "./services/list.mjs";
|
|
13
|
+
import { command as command$g } from "./telemetry/disable.mjs";
|
|
14
|
+
import { command as command$h } from "./telemetry/enable.mjs";
|
|
15
|
+
import { command as command$i } from "./templates/generate.mjs";
|
|
16
|
+
import { command as command$j } from "./ts/generate-types.mjs";
|
|
17
|
+
import { command as command$l } from "./build.mjs";
|
|
18
|
+
import { command as command$5 } from "./console.mjs";
|
|
19
|
+
import { command as command$m } from "./develop.mjs";
|
|
20
|
+
import { command as command$8 } from "./generate.mjs";
|
|
21
|
+
import { command as command$c } from "./report.mjs";
|
|
22
|
+
import { command as command$f } from "./start.mjs";
|
|
23
|
+
import { command as command$k } from "./version.mjs";
|
|
24
|
+
import command$n from "./export/command.mjs";
|
|
25
|
+
import command$o from "./import/command.mjs";
|
|
26
|
+
import command$p from "./transfer/command.mjs";
|
|
27
|
+
import { command as command$q } from "./plugin/build.mjs";
|
|
28
|
+
import command$r from "./plugin/init/command.mjs";
|
|
29
|
+
import { command as command$s } from "./plugin/link-watch.mjs";
|
|
30
|
+
import { command as command$t } from "./plugin/watch.mjs";
|
|
31
|
+
import { command as command$u } from "./plugin/verify.mjs";
|
|
32
|
+
const commands = [
|
|
33
|
+
command,
|
|
34
|
+
command$1,
|
|
35
|
+
command$2,
|
|
36
|
+
command$3,
|
|
37
|
+
command$4,
|
|
38
|
+
command$5,
|
|
39
|
+
command$6,
|
|
40
|
+
command$7,
|
|
41
|
+
command$8,
|
|
42
|
+
command$9,
|
|
43
|
+
command$a,
|
|
44
|
+
command$b,
|
|
45
|
+
command$c,
|
|
46
|
+
command$d,
|
|
47
|
+
command$e,
|
|
48
|
+
command$f,
|
|
49
|
+
command$g,
|
|
50
|
+
command$h,
|
|
51
|
+
command$i,
|
|
52
|
+
command$j,
|
|
53
|
+
command$k,
|
|
54
|
+
command$l,
|
|
55
|
+
command$m,
|
|
56
|
+
command$n,
|
|
57
|
+
command$o,
|
|
58
|
+
command$p,
|
|
59
|
+
/**
|
|
60
|
+
* Plugins
|
|
61
|
+
*/
|
|
62
|
+
command$q,
|
|
63
|
+
command$r,
|
|
64
|
+
command$s,
|
|
65
|
+
command$t,
|
|
66
|
+
command$u
|
|
67
|
+
];
|
|
68
|
+
export {
|
|
69
|
+
commands
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../src/cli/commands/index.ts"],"sourcesContent":["import { command as createAdminUser } from './admin/create-user';\nimport { command as resetAdminUserPassword } from './admin/reset-user-password';\nimport { command as listComponents } from './components/list';\nimport { command as configurationDump } from './configuration/dump';\nimport { command as configurationRestore } from './configuration/restore';\nimport { command as listContentTypes } from './content-types/list';\nimport { command as listControllers } from './controllers/list';\nimport { command as listHooks } from './hooks/list';\nimport { command as listMiddlewares } from './middlewares/list';\nimport { command as listPolicies } from './policies/list';\nimport { command as listRoutes } from './routes/list';\nimport { command as listServices } from './services/list';\nimport { command as disableTelemetry } from './telemetry/disable';\nimport { command as enableTelemetry } from './telemetry/enable';\nimport { command as generateTemplates } from './templates/generate';\nimport { command as generateTsTypes } from './ts/generate-types';\nimport { command as buildCommand } from './build';\nimport { command as consoleCommand } from './console';\nimport { command as developCommand } from './develop';\nimport { command as generateCommand } from './generate';\nimport { command as reportCommand } from './report';\nimport { command as startCommand } from './start';\nimport { command as versionCommand } from './version';\nimport exportCommand from './export/command';\nimport importCommand from './import/command';\nimport transferCommand from './transfer/command';\n\nimport { command as buildPluginCommand } from './plugin/build';\nimport { command as initPluginCommand } from './plugin/init';\nimport { command as linkWatchPluginCommand } from './plugin/link-watch';\nimport { command as watchPluginCommand } from './plugin/watch';\nimport { command as verifyPluginCommand } from './plugin/verify';\nimport { StrapiCommand } from '../types';\n\nexport const commands: StrapiCommand[] = [\n createAdminUser,\n resetAdminUserPassword,\n listComponents,\n configurationDump,\n configurationRestore,\n consoleCommand,\n listContentTypes,\n listControllers,\n generateCommand,\n listHooks,\n listMiddlewares,\n listPolicies,\n reportCommand,\n listRoutes,\n listServices,\n startCommand,\n disableTelemetry,\n enableTelemetry,\n generateTemplates,\n generateTsTypes,\n versionCommand,\n buildCommand,\n developCommand,\n exportCommand,\n importCommand,\n transferCommand,\n /**\n * Plugins\n */\n buildPluginCommand,\n initPluginCommand,\n linkWatchPluginCommand,\n watchPluginCommand,\n verifyPluginCommand,\n];\n"],"names":["createAdminUser","resetAdminUserPassword","listComponents","configurationDump","configurationRestore","consoleCommand","listContentTypes","listControllers","generateCommand","listHooks","listMiddlewares","listPolicies","reportCommand","listRoutes","listServices","startCommand","disableTelemetry","enableTelemetry","generateTemplates","generateTsTypes","versionCommand","buildCommand","developCommand","exportCommand","importCommand","transferCommand","buildPluginCommand","initPluginCommand","linkWatchPluginCommand","watchPluginCommand","verifyPluginCommand"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCO,MAAM,WAA4B;AAAA,EACvCA;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA;AAAAA;AAAAA;AAAAA,EAIAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AACF;"}
|
|
@@ -9,8 +9,8 @@ const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
|
9
9
|
const CLITable__default = /* @__PURE__ */ _interopDefault(CLITable);
|
|
10
10
|
const chalk__default = /* @__PURE__ */ _interopDefault(chalk);
|
|
11
11
|
const action = async () => {
|
|
12
|
-
const appContext = await core.
|
|
13
|
-
const app = await core.
|
|
12
|
+
const appContext = await core.compileStrapi();
|
|
13
|
+
const app = await core.createStrapi(appContext).register();
|
|
14
14
|
const list = app.get("middlewares").keys();
|
|
15
15
|
const infoTable = new CLITable__default.default({
|
|
16
16
|
head: [chalk__default.default.blue("Name")]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sources":["../../../../src/cli/commands/middlewares/list.ts"],"sourcesContent":["import { createCommand } from 'commander';\nimport CLITable from 'cli-table3';\nimport chalk from 'chalk';\nimport {
|
|
1
|
+
{"version":3,"file":"list.js","sources":["../../../../src/cli/commands/middlewares/list.ts"],"sourcesContent":["import { createCommand } from 'commander';\nimport CLITable from 'cli-table3';\nimport chalk from 'chalk';\nimport { createStrapi, compileStrapi } from '@strapi/core';\n\nimport type { StrapiCommand } from '../../types';\nimport { runAction } from '../../utils/helpers';\n\nconst action = async () => {\n const appContext = await compileStrapi();\n const app = await createStrapi(appContext).register();\n\n const list = app.get('middlewares').keys();\n\n const infoTable = new CLITable({\n head: [chalk.blue('Name')],\n });\n\n list.forEach((name: string) => infoTable.push([name]));\n\n console.log(infoTable.toString());\n\n await app.destroy();\n};\n\n/**\n * `$ strapi middlewares:list`\n */\nconst command: StrapiCommand = () => {\n return createCommand('middlewares:list')\n .description('List all the application middlewares')\n .action(runAction('middlewares:list', action));\n};\n\nexport { action, command };\n"],"names":["compileStrapi","createStrapi","CLITable","chalk","createCommand","runAction"],"mappings":";;;;;;;;;;AAQA,MAAM,SAAS,YAAY;AACnB,QAAA,aAAa,MAAMA,KAAAA;AACzB,QAAM,MAAM,MAAMC,KAAAA,aAAa,UAAU,EAAE,SAAS;AAEpD,QAAM,OAAO,IAAI,IAAI,aAAa,EAAE,KAAK;AAEnC,QAAA,YAAY,IAAIC,0BAAS;AAAA,IAC7B,MAAM,CAACC,eAAAA,QAAM,KAAK,MAAM,CAAC;AAAA,EAAA,CAC1B;AAEI,OAAA,QAAQ,CAAC,SAAiB,UAAU,KAAK,CAAC,IAAI,CAAC,CAAC;AAE7C,UAAA,IAAI,UAAU,SAAU,CAAA;AAEhC,QAAM,IAAI;AACZ;AAKA,MAAM,UAAyB,MAAM;AAC5B,SAAAC,wBAAc,kBAAkB,EACpC,YAAY,sCAAsC,EAClD,OAAOC,kBAAU,oBAAoB,MAAM,CAAC;AACjD;;;"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { createCommand } from "commander";
|
|
2
|
+
import CLITable from "cli-table3";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import { compileStrapi, createStrapi } from "@strapi/core";
|
|
5
|
+
import { runAction } from "../../utils/helpers.mjs";
|
|
6
|
+
const action = async () => {
|
|
7
|
+
const appContext = await compileStrapi();
|
|
8
|
+
const app = await createStrapi(appContext).register();
|
|
9
|
+
const list = app.get("middlewares").keys();
|
|
10
|
+
const infoTable = new CLITable({
|
|
11
|
+
head: [chalk.blue("Name")]
|
|
12
|
+
});
|
|
13
|
+
list.forEach((name) => infoTable.push([name]));
|
|
14
|
+
console.log(infoTable.toString());
|
|
15
|
+
await app.destroy();
|
|
16
|
+
};
|
|
17
|
+
const command = () => {
|
|
18
|
+
return createCommand("middlewares:list").description("List all the application middlewares").action(runAction("middlewares:list", action));
|
|
19
|
+
};
|
|
20
|
+
export {
|
|
21
|
+
action,
|
|
22
|
+
command
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=list.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.mjs","sources":["../../../../src/cli/commands/middlewares/list.ts"],"sourcesContent":["import { createCommand } from 'commander';\nimport CLITable from 'cli-table3';\nimport chalk from 'chalk';\nimport { createStrapi, compileStrapi } from '@strapi/core';\n\nimport type { StrapiCommand } from '../../types';\nimport { runAction } from '../../utils/helpers';\n\nconst action = async () => {\n const appContext = await compileStrapi();\n const app = await createStrapi(appContext).register();\n\n const list = app.get('middlewares').keys();\n\n const infoTable = new CLITable({\n head: [chalk.blue('Name')],\n });\n\n list.forEach((name: string) => infoTable.push([name]));\n\n console.log(infoTable.toString());\n\n await app.destroy();\n};\n\n/**\n * `$ strapi middlewares:list`\n */\nconst command: StrapiCommand = () => {\n return createCommand('middlewares:list')\n .description('List all the application middlewares')\n .action(runAction('middlewares:list', action));\n};\n\nexport { action, command };\n"],"names":[],"mappings":";;;;;AAQA,MAAM,SAAS,YAAY;AACnB,QAAA,aAAa,MAAM;AACzB,QAAM,MAAM,MAAM,aAAa,UAAU,EAAE,SAAS;AAEpD,QAAM,OAAO,IAAI,IAAI,aAAa,EAAE,KAAK;AAEnC,QAAA,YAAY,IAAI,SAAS;AAAA,IAC7B,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC;AAAA,EAAA,CAC1B;AAEI,OAAA,QAAQ,CAAC,SAAiB,UAAU,KAAK,CAAC,IAAI,CAAC,CAAC;AAE7C,UAAA,IAAI,UAAU,SAAU,CAAA;AAEhC,QAAM,IAAI;AACZ;AAKA,MAAM,UAAyB,MAAM;AAC5B,SAAA,cAAc,kBAAkB,EACpC,YAAY,sCAAsC,EAClD,OAAO,UAAU,oBAAoB,MAAM,CAAC;AACjD;"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { createCommand } from "commander";
|
|
2
|
+
import boxen from "boxen";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import { build } from "@strapi/pack-up";
|
|
5
|
+
import { forceOption } from "../../utils/commander.mjs";
|
|
6
|
+
import { runAction } from "../../utils/helpers.mjs";
|
|
7
|
+
import { loadPkg, validatePkg } from "../../utils/pkg.mjs";
|
|
8
|
+
const action = async ({ force, ...opts }, _cmd, { logger, cwd }) => {
|
|
9
|
+
try {
|
|
10
|
+
process.env.NODE_ENV = "production";
|
|
11
|
+
const pkg = await loadPkg({ cwd, logger });
|
|
12
|
+
const pkgJson = await validatePkg({ pkg });
|
|
13
|
+
if (!pkgJson.exports["./strapi-admin"] && !pkgJson.exports["./strapi-server"]) {
|
|
14
|
+
throw new Error(
|
|
15
|
+
"You need to have either a strapi-admin or strapi-server export in your package.json"
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
const bundles = [];
|
|
19
|
+
if (pkgJson.exports["./strapi-admin"]) {
|
|
20
|
+
const exp = pkgJson.exports["./strapi-admin"];
|
|
21
|
+
const bundle = {
|
|
22
|
+
source: exp.source,
|
|
23
|
+
import: exp.import,
|
|
24
|
+
require: exp.require,
|
|
25
|
+
runtime: "web"
|
|
26
|
+
};
|
|
27
|
+
if (exp.types) {
|
|
28
|
+
bundle.types = exp.types;
|
|
29
|
+
bundle.tsconfig = "./admin/tsconfig.build.json";
|
|
30
|
+
}
|
|
31
|
+
bundles.push(bundle);
|
|
32
|
+
}
|
|
33
|
+
if (pkgJson.exports["./strapi-server"]) {
|
|
34
|
+
const exp = pkgJson.exports["./strapi-server"];
|
|
35
|
+
const bundle = {
|
|
36
|
+
source: exp.source,
|
|
37
|
+
import: exp.import,
|
|
38
|
+
require: exp.require,
|
|
39
|
+
runtime: "node"
|
|
40
|
+
};
|
|
41
|
+
if (exp.types) {
|
|
42
|
+
bundle.types = exp.types;
|
|
43
|
+
bundle.tsconfig = "./server/tsconfig.build.json";
|
|
44
|
+
}
|
|
45
|
+
bundles.push(bundle);
|
|
46
|
+
}
|
|
47
|
+
await build({
|
|
48
|
+
cwd,
|
|
49
|
+
configFile: false,
|
|
50
|
+
config: {
|
|
51
|
+
bundles,
|
|
52
|
+
dist: "./dist",
|
|
53
|
+
/**
|
|
54
|
+
* ignore the exports map of a plugin, because we're streamlining the
|
|
55
|
+
* process and ensuring the server package and admin package are built
|
|
56
|
+
* with the correct runtime and their individual tsconfigs
|
|
57
|
+
*/
|
|
58
|
+
exports: {}
|
|
59
|
+
},
|
|
60
|
+
...opts
|
|
61
|
+
});
|
|
62
|
+
} catch (err) {
|
|
63
|
+
logger.error(
|
|
64
|
+
"There seems to be an unexpected error, try again with --debug for more information \n"
|
|
65
|
+
);
|
|
66
|
+
if (err instanceof Error && err.stack) {
|
|
67
|
+
console.log(
|
|
68
|
+
chalk.red(
|
|
69
|
+
boxen(err.stack, {
|
|
70
|
+
padding: 1,
|
|
71
|
+
align: "left"
|
|
72
|
+
})
|
|
73
|
+
)
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
const command = ({ ctx }) => {
|
|
80
|
+
return createCommand("plugin:build").description("Bundle your strapi plugin for publishing.").addOption(forceOption).option("-d, --debug", "Enable debugging mode with verbose logs", false).option("--silent", "Don't log anything", false).option("--sourcemap", "produce sourcemaps", false).option("--minify", "minify the output", false).action((...args) => runAction("plugin:build", action)(...args, ctx));
|
|
81
|
+
};
|
|
82
|
+
export {
|
|
83
|
+
command
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=build.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.mjs","sources":["../../../../src/cli/commands/plugin/build.ts"],"sourcesContent":["import { createCommand } from 'commander';\nimport boxen from 'boxen';\nimport chalk from 'chalk';\nimport { BuildCLIOptions, ConfigBundle, build } from '@strapi/pack-up';\n\nimport { forceOption } from '../../utils/commander';\nimport { runAction } from '../../utils/helpers';\nimport { Export, loadPkg, validatePkg } from '../../utils/pkg';\nimport type { CLIContext, StrapiCommand } from '../../types';\n\ninterface ActionOptions extends BuildCLIOptions {\n force?: boolean;\n}\n\nconst action = async (\n { force, ...opts }: ActionOptions,\n _cmd: unknown,\n { logger, cwd }: CLIContext\n) => {\n try {\n /**\n * ALWAYS set production for using plugin build CLI.\n */\n process.env.NODE_ENV = 'production';\n\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 build({\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:build`\n */\nconst command: StrapiCommand = ({ ctx }) => {\n return createCommand('plugin:build')\n .description('Bundle your strapi plugin for publishing.')\n .addOption(forceOption)\n .option('-d, --debug', 'Enable debugging mode with verbose logs', false)\n .option('--silent', \"Don't log anything\", false)\n .option('--sourcemap', 'produce sourcemaps', false)\n .option('--minify', 'minify the output', false)\n .action((...args) => runAction('plugin:build', action)(...args, ctx));\n};\n\nexport { command };\n"],"names":[],"mappings":";;;;;;;AAcA,MAAM,SAAS,OACb,EAAE,OAAO,GAAG,KAAK,GACjB,MACA,EAAE,QAAQ,UACP;AACC,MAAA;AAIF,YAAQ,IAAI,WAAW;AAEvB,UAAM,MAAM,MAAM,QAAQ,EAAE,KAAK,OAAQ,CAAA;AACzC,UAAM,UAAU,MAAM,YAAY,EAAE,IAAK,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,UAAM,MAAM;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,QACN,MAAM;AAAA,UACJ,MAAM,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;AAC1C,SAAO,cAAc,cAAc,EAChC,YAAY,2CAA2C,EACvD,UAAU,WAAW,EACrB,OAAO,eAAe,2CAA2C,KAAK,EACtE,OAAO,YAAY,sBAAsB,KAAK,EAC9C,OAAO,eAAe,sBAAsB,KAAK,EACjD,OAAO,YAAY,qBAAqB,KAAK,EAC7C,OAAO,IAAI,SAAS,UAAU,gBAAgB,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC;AACxE;"}
|
|
@@ -279,7 +279,7 @@ const PLUGIN_TEMPLATE = packUp.defineTemplate(async ({ logger, gitConfig, packag
|
|
|
279
279
|
...pkgJson.devDependencies,
|
|
280
280
|
"@types/react": "*",
|
|
281
281
|
"@types/react-dom": "*",
|
|
282
|
-
"@types/styled-components": "5.1.
|
|
282
|
+
"@types/styled-components": "5.1.32"
|
|
283
283
|
};
|
|
284
284
|
const { adminTsconfigFiles } = await Promise.resolve().then(() => require("./files/typescript.js"));
|
|
285
285
|
files.push(adminTsconfigFiles.tsconfigBuildFile, adminTsconfigFiles.tsconfigFile);
|
|
@@ -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\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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"}
|
|
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.32',\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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"}
|