Skip to content

Commit f876acb

Browse files
committed
Add installPlugin support for single plugin files
1 parent 00efc7c commit f876acb

File tree

1 file changed

+38
-16
lines changed

1 file changed

+38
-16
lines changed

packages/playground/blueprints/src/lib/steps/install-plugin.ts

+38-16
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { StepHandler } from '.';
22
import { InstallAssetOptions, installAsset } from './install-asset';
33
import { activatePlugin } from './activate-plugin';
4+
import { writeFile } from './write-file';
45
import { zipNameToHumanName } from '../utils/zip-name-to-human-name';
56
import { Directory } from '../resources';
67
import { joinPaths } from '@php-wasm/util';
@@ -99,31 +100,52 @@ export const installPlugin: StepHandler<
99100
);
100101
}
101102

102-
const targetFolderName = 'targetFolderName' in options ? options.targetFolderName : '';
103+
const pluginsDirectoryPath = joinPaths(
104+
await playground.documentRoot,
105+
'wp-content',
106+
'plugins'
107+
);
108+
const targetFolderName =
109+
'targetFolderName' in options ? options.targetFolderName : '';
103110
let assetFolderPath = '';
104111
let assetNiceName = '';
105112
if (pluginData instanceof File) {
106-
// @TODO: Consider validating whether this is a zip file?
107-
const zipFileName = pluginData.name.split('/').pop() || 'plugin.zip';
108-
assetNiceName = zipNameToHumanName(zipFileName);
113+
if (pluginData.name.endsWith('.php')) {
114+
const destinationFilePath = joinPaths(
115+
pluginsDirectoryPath,
116+
pluginData.name
117+
);
118+
await writeFile(playground, {
119+
path: destinationFilePath,
120+
data: pluginData,
121+
});
122+
assetFolderPath = pluginsDirectoryPath;
123+
assetNiceName = pluginData.name;
124+
} else {
125+
// Assume any other file is a zip file
126+
// @TODO: Consider validating whether this is a zip file?
127+
const zipFileName =
128+
pluginData.name.split('/').pop() || 'plugin.zip';
129+
assetNiceName = zipNameToHumanName(zipFileName);
109130

110-
progress?.tracker.setCaption(`Installing the ${assetNiceName} plugin`);
111-
const assetResult = await installAsset(playground, {
112-
ifAlreadyInstalled,
113-
zipFile: pluginData,
114-
targetPath: `${await playground.documentRoot}/wp-content/plugins`,
115-
targetFolderName: targetFolderName
116-
});
117-
assetFolderPath = assetResult.assetFolderPath;
118-
assetNiceName = assetResult.assetFolderName;
131+
progress?.tracker.setCaption(
132+
`Installing the ${assetNiceName} plugin`
133+
);
134+
const assetResult = await installAsset(playground, {
135+
ifAlreadyInstalled,
136+
zipFile: pluginData,
137+
targetPath: `${await playground.documentRoot}/wp-content/plugins`,
138+
targetFolderName: targetFolderName,
139+
});
140+
assetFolderPath = assetResult.assetFolderPath;
141+
assetNiceName = assetResult.assetFolderName;
142+
}
119143
} else if (pluginData) {
120144
assetNiceName = pluginData.name;
121145
progress?.tracker.setCaption(`Installing the ${assetNiceName} plugin`);
122146

123147
const pluginDirectoryPath = joinPaths(
124-
await playground.documentRoot,
125-
'wp-content',
126-
'plugins',
148+
pluginsDirectoryPath,
127149
targetFolderName || pluginData.name
128150
);
129151
await writeFiles(playground, pluginDirectoryPath, pluginData.files, {

0 commit comments

Comments
 (0)