@atomicsmash/cli 7.0.0-beta.8 → 7.0.0
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/commands/blocks.d.ts +23 -2
- package/dist/commands/blocks.d.ts.map +1 -1
- package/dist/commands/blocks.js +305 -176
- package/dist/commands/blocks.js.map +1 -1
- package/dist/external/utils.cjs +232 -0
- package/dist/external/utils.cjs.map +1 -0
- package/dist/external/utils.d.cts +19 -0
- package/dist/external/utils.d.cts.map +1 -0
- package/dist/external/wordpress.webpack.config.cjs +437 -0
- package/dist/external/wordpress.webpack.config.cjs.map +1 -0
- package/dist/external/wordpress.webpack.config.d.cts +6 -0
- package/dist/external/wordpress.webpack.config.d.cts.map +1 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +2 -1
- package/dist/utils.js.map +1 -1
- package/package.json +36 -18
|
@@ -1,3 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import type { BlockMetaData } from "@atomicsmash/blocks-helpers";
|
|
2
|
+
import webpack from "webpack";
|
|
3
|
+
export declare const blocksHelpMessage = "\n Atomic Smash CLI - Blocks command.\n\n A command to generate WordPress blocks from a src folder.\n\n Options:\n --in The directory where the WP blocks can be found. Relative to cwd.\n --out The directory where the WP blocks will be output. Relative to cwd.\n --tsConfigPath (optional) The directory where the tsconfig file can be found. Relative to cwd. Defaults to the in folder.\n --postcssConfigPath (optional) The directory where the postcss config file can be found. Relative to cwd. Defaults to the in folder and then searches up the directory tree.\n --watch (optional) Watch the blocks in folder for changes and compile.\n --excludeBlocks (optional) A comma separated list of the folder names of blocks to exclude from compilation. Defaults to \"__TEMPLATE__\".\n --excludeRootFiles (optional) A comma separated list of the root file names to exclude from compilation. Nothing is excluded by default.\n --alwaysCompileRootFiles (optional) By default, we won't compile root files if no blocks are found, this allows you to override that setting. Defaults to false.\n --watch (optional) Run compiler in watch mode. Default to false.\n\n Example usage:\n $ smash-cli blocks --watch --in src --out build --tsConfigPath tsconfig.json\n";
|
|
4
|
+
export default function blocks(args: string[]): Promise<void>;
|
|
5
|
+
export declare function getRootFileJSEntryPoints({ srcFolder, excludeRootFiles, }: {
|
|
6
|
+
srcFolder: string;
|
|
7
|
+
excludeRootFiles: string[];
|
|
8
|
+
}): Promise<webpack.EntryObject>;
|
|
9
|
+
export declare function getAllBlocksJSEntryPoints({ srcFolder, blocks, }: {
|
|
10
|
+
srcFolder: string;
|
|
11
|
+
blocks: Record<string, {
|
|
12
|
+
blockFolder: string;
|
|
13
|
+
blockJson: BlockJson;
|
|
14
|
+
}>;
|
|
15
|
+
}): webpack.EntryObject;
|
|
16
|
+
type BlockJson = BlockMetaData<never, never>;
|
|
17
|
+
export declare function getBlockJsonFiles(srcFolder: string, excludeBlocks: string[]): Promise<Record<string, {
|
|
18
|
+
blockFolder: string;
|
|
19
|
+
blockJson: BlockJson;
|
|
20
|
+
}>>;
|
|
21
|
+
export declare function getBlockJsonScriptFields(blockJson: BlockJson): Partial<Pick<BlockJson, "viewScript" | "script" | "editorScript">> | null;
|
|
22
|
+
export declare function getBlockJsonStyleFields(blockJson: BlockJson): Partial<Pick<BlockJson, "editorStyle" | "style" | "viewStyle">> | null;
|
|
23
|
+
export {};
|
|
3
24
|
//# sourceMappingURL=blocks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../src/commands/blocks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../src/commands/blocks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AA0BjE,OAAO,OAAO,MAAM,SAAS,CAAC;AAM9B,eAAO,MAAM,iBAAiB,u2CAkB7B,CAAC;AAEF,wBAA8B,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,iBAyClD;AAoID,wBAAsB,wBAAwB,CAAC,EAC9C,SAAS,EACT,gBAAgB,GAChB,EAAE;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC3B,gCAmCA;AAED,wBAAgB,yBAAyB,CAAC,EACzC,SAAS,EACT,MAAM,GACN,EAAE;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CACb,MAAM,EACN;QACC,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,SAAS,CAAC;KACrB,CACD,CAAC;CACF,uBAkCA;AAED,KAAK,SAAS,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAE7C,wBAAsB,iBAAiB,CACtC,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EAAE;iBAUqB,MAAM;eAAa,SAAS;IAmBxE;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,SAAS,6EAa5D;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,SAAS,0EAa3D"}
|
package/dist/commands/blocks.js
CHANGED
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
import crypto from "node:crypto";
|
|
2
|
-
import { readFileSync
|
|
3
|
-
import { readdir } from "node:fs/promises";
|
|
4
|
-
import { resolve as resolvePath } from "node:path";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { readdir, readFile, writeFile } from "node:fs/promises";
|
|
4
|
+
import { basename, dirname, extname, join, resolve as resolvePath, sep as pathSeparator, } from "node:path";
|
|
5
5
|
import { pathToFileURL } from "node:url";
|
|
6
|
-
import DependencyExtractionWebpackPlugin from "@wordpress/dependency-extraction-webpack-plugin";
|
|
7
|
-
import defaultConfig from "@wordpress/scripts/config/webpack.config.js";
|
|
8
6
|
import autoprefixer from "autoprefixer";
|
|
9
7
|
import CopyWebpackPlugin from "copy-webpack-plugin";
|
|
10
8
|
import cssnano from "cssnano";
|
|
11
|
-
import { deleteAsync } from "del";
|
|
12
9
|
import glob from "glob-promise";
|
|
13
10
|
import postcss from "postcss";
|
|
14
11
|
import postcssLoadConfig from "postcss-load-config";
|
|
15
12
|
import { compileStringAsync } from "sass";
|
|
16
13
|
import { TsconfigPathsPlugin } from "tsconfig-paths-webpack-plugin";
|
|
14
|
+
import { tsImport } from "tsx/esm/api";
|
|
17
15
|
import webpack from "webpack";
|
|
16
|
+
import defaultConfig from "../external/wordpress.webpack.config.cjs";
|
|
18
17
|
import { hasHelpFlag, interpretFlag, toCamelCase } from "../utils.js";
|
|
19
18
|
const isProduction = process.env.NODE_ENV === "production";
|
|
20
19
|
export const blocksHelpMessage = `
|
|
@@ -31,11 +30,12 @@ export const blocksHelpMessage = `
|
|
|
31
30
|
--excludeBlocks (optional) A comma separated list of the folder names of blocks to exclude from compilation. Defaults to "__TEMPLATE__".
|
|
32
31
|
--excludeRootFiles (optional) A comma separated list of the root file names to exclude from compilation. Nothing is excluded by default.
|
|
33
32
|
--alwaysCompileRootFiles (optional) By default, we won't compile root files if no blocks are found, this allows you to override that setting. Defaults to false.
|
|
33
|
+
--watch (optional) Run compiler in watch mode. Default to false.
|
|
34
34
|
|
|
35
35
|
Example usage:
|
|
36
36
|
$ smash-cli blocks --watch --in src --out build --tsConfigPath tsconfig.json
|
|
37
37
|
`;
|
|
38
|
-
export default function blocks(args) {
|
|
38
|
+
export default async function blocks(args) {
|
|
39
39
|
if (hasHelpFlag(args)) {
|
|
40
40
|
console.log(blocksHelpMessage);
|
|
41
41
|
return;
|
|
@@ -56,127 +56,56 @@ export default function blocks(args) {
|
|
|
56
56
|
.value ?? ["__TEMPLATE__"];
|
|
57
57
|
const excludeRootFiles = interpretFlag(args, "--excludeRootFiles", "list").value ?? [];
|
|
58
58
|
const shouldAlwaysCompileRootFiles = interpretFlag(args, "--alwaysCompileRootFiles", "boolean").value;
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
globOptions: {
|
|
75
|
-
ignore: excludeBlocks.map((blockName) => `${srcFolder}/${blockName}/**/*`),
|
|
76
|
-
},
|
|
77
|
-
},
|
|
78
|
-
],
|
|
79
|
-
}),
|
|
80
|
-
{
|
|
81
|
-
apply: (compiler) => {
|
|
82
|
-
compiler.hooks.afterEmit.tapPromise("Build CSS and copy to test area", async () => {
|
|
83
|
-
await glob
|
|
84
|
-
.promise(`${srcFolder}/**/*.{css,scss}`, {
|
|
85
|
-
ignore: excludeBlocks.map((blockName) => `${srcFolder}/${blockName}/**/*`),
|
|
86
|
-
})
|
|
87
|
-
.then(async (globMatches) => {
|
|
88
|
-
const currentCSSFileNames = [];
|
|
89
|
-
for (const match of globMatches) {
|
|
90
|
-
const fileNameWithExtension = match.split("/").pop();
|
|
91
|
-
if (!fileNameWithExtension) {
|
|
92
|
-
console.error(`Failed to get filename of ${match}`);
|
|
93
|
-
continue;
|
|
94
|
-
}
|
|
95
|
-
let css = readFileSync(match, "utf8");
|
|
96
|
-
if (fileNameWithExtension.split(".").pop() === "scss") {
|
|
97
|
-
css = await compileStringAsync(css, {
|
|
98
|
-
importers: [
|
|
99
|
-
{
|
|
100
|
-
findFileUrl(url) {
|
|
101
|
-
if (!url.startsWith("sitecss:"))
|
|
102
|
-
return null;
|
|
103
|
-
const pathname = url.substring(8);
|
|
104
|
-
return pathToFileURL(`${resolvePath(srcFolder, "../css")}${pathname.startsWith("/") ? pathname : `/${pathname}`}`);
|
|
105
|
-
},
|
|
106
|
-
},
|
|
107
|
-
],
|
|
108
|
-
}).then((result) => result.css);
|
|
109
|
-
}
|
|
110
|
-
let newFileNameWithExtension = fileNameWithExtension;
|
|
111
|
-
let newMatch = match.replace(srcFolder, distFolder);
|
|
112
|
-
if (isProduction) {
|
|
113
|
-
const fileBuffer = readFileSync(match);
|
|
114
|
-
const contentHash = crypto.createHash("shake256", {
|
|
115
|
-
outputLength: 10,
|
|
116
|
-
});
|
|
117
|
-
contentHash.update(fileBuffer);
|
|
118
|
-
newFileNameWithExtension = `${fileNameWithExtension.split(".")[0]}.${contentHash.digest("hex")}.css`;
|
|
119
|
-
newMatch = newMatch.replace(fileNameWithExtension, newFileNameWithExtension);
|
|
120
|
-
currentCSSFileNames.push(`!${newMatch}`);
|
|
121
|
-
}
|
|
122
|
-
const { plugins, options } = await postcssLoadConfig({}, postcssConfigLocation)
|
|
123
|
-
.then(({ plugins, options }) => {
|
|
124
|
-
options.from = match;
|
|
125
|
-
options.to = newMatch;
|
|
126
|
-
return { plugins, options };
|
|
127
|
-
})
|
|
128
|
-
.catch((error) => {
|
|
129
|
-
if (error &&
|
|
130
|
-
error instanceof Error &&
|
|
131
|
-
error.message.startsWith("No PostCSS Config found")) {
|
|
132
|
-
const postCSSPlugins = [autoprefixer];
|
|
133
|
-
if (isProduction) {
|
|
134
|
-
postCSSPlugins.push(cssnano({ preset: "default" }));
|
|
135
|
-
}
|
|
136
|
-
return {
|
|
137
|
-
plugins: postCSSPlugins,
|
|
138
|
-
options: {
|
|
139
|
-
from: match,
|
|
140
|
-
to: newMatch,
|
|
141
|
-
},
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
throw error;
|
|
145
|
-
});
|
|
146
|
-
await postcss(plugins)
|
|
147
|
-
.process(css, options)
|
|
148
|
-
.then((result) => {
|
|
149
|
-
writeFileSync(newMatch, result.css);
|
|
150
|
-
if (result.map) {
|
|
151
|
-
writeFileSync(`${newMatch}.map`, result.map.toString());
|
|
152
|
-
}
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
deleteAsync([
|
|
156
|
-
`${distFolder}/**/*.css`,
|
|
157
|
-
...currentCSSFileNames,
|
|
158
|
-
]).catch((error) => {
|
|
159
|
-
console.log(error);
|
|
160
|
-
});
|
|
161
|
-
})
|
|
162
|
-
.catch((error) => {
|
|
163
|
-
console.error(error);
|
|
164
|
-
throw error;
|
|
165
|
-
});
|
|
166
|
-
});
|
|
167
|
-
},
|
|
168
|
-
},
|
|
169
|
-
];
|
|
59
|
+
const isWatch = interpretFlag(args, "--watch", "boolean").value;
|
|
60
|
+
await runCommand({
|
|
61
|
+
srcFolder,
|
|
62
|
+
distFolder,
|
|
63
|
+
tsConfigLocation,
|
|
64
|
+
postcssConfigLocation,
|
|
65
|
+
excludeBlocks,
|
|
66
|
+
excludeRootFiles,
|
|
67
|
+
shouldAlwaysCompileRootFiles,
|
|
68
|
+
isWatch,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
async function runCommand({ srcFolder, distFolder, tsConfigLocation, postcssConfigLocation, excludeBlocks, excludeRootFiles, shouldAlwaysCompileRootFiles, isWatch, }) {
|
|
72
|
+
const blocks = await getBlockJsonFiles(srcFolder, excludeBlocks);
|
|
73
|
+
const isNoBlocks = Object.keys(blocks).length === 0;
|
|
170
74
|
const compiler = webpack({
|
|
171
75
|
...defaultConfig,
|
|
172
|
-
entry: () =>
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
76
|
+
entry: async () => {
|
|
77
|
+
const entryPoints = {
|
|
78
|
+
...(isNoBlocks && !shouldAlwaysCompileRootFiles
|
|
79
|
+
? {}
|
|
80
|
+
: await getRootFileJSEntryPoints({ srcFolder, excludeRootFiles })),
|
|
81
|
+
...getAllBlocksJSEntryPoints({
|
|
82
|
+
srcFolder,
|
|
83
|
+
blocks,
|
|
84
|
+
}),
|
|
85
|
+
};
|
|
86
|
+
// TODO: improve this console output
|
|
87
|
+
// eslint-disable-next-line no-console
|
|
88
|
+
console.log({ entryPoints });
|
|
89
|
+
return entryPoints;
|
|
90
|
+
},
|
|
178
91
|
context: srcFolder,
|
|
179
|
-
plugins:
|
|
92
|
+
plugins: [
|
|
93
|
+
...(defaultConfig.plugins?.filter((plugin) => {
|
|
94
|
+
return ![
|
|
95
|
+
"CopyPlugin", // CopyWebpackPlugin
|
|
96
|
+
].includes(plugin?.constructor.name ?? "");
|
|
97
|
+
}) ?? []),
|
|
98
|
+
new CopyWebpackPlugin({
|
|
99
|
+
patterns: [...getCopyPatternsForBlocks(blocks, distFolder)],
|
|
100
|
+
}),
|
|
101
|
+
new CustomBlocksCSSHandler({
|
|
102
|
+
blocks,
|
|
103
|
+
srcFolder,
|
|
104
|
+
distFolder,
|
|
105
|
+
postcssConfigLocation,
|
|
106
|
+
}),
|
|
107
|
+
new BlockJsonAssetTransformer({ distFolder }),
|
|
108
|
+
],
|
|
180
109
|
output: {
|
|
181
110
|
path: distFolder,
|
|
182
111
|
clean: true,
|
|
@@ -191,7 +120,7 @@ export default function blocks(args) {
|
|
|
191
120
|
},
|
|
192
121
|
mode: isProduction ? "production" : "development",
|
|
193
122
|
});
|
|
194
|
-
if (
|
|
123
|
+
if (isWatch) {
|
|
195
124
|
const watching = compiler.watch({
|
|
196
125
|
// Example
|
|
197
126
|
aggregateTimeout: 300,
|
|
@@ -245,7 +174,7 @@ export default function blocks(args) {
|
|
|
245
174
|
});
|
|
246
175
|
}
|
|
247
176
|
}
|
|
248
|
-
async function
|
|
177
|
+
export async function getRootFileJSEntryPoints({ srcFolder, excludeRootFiles, }) {
|
|
249
178
|
const entryPoints = {};
|
|
250
179
|
const rootFiles = await readdir(srcFolder, {
|
|
251
180
|
withFileTypes: true,
|
|
@@ -268,63 +197,263 @@ async function getAllBlocksJSEntryPoints({ srcFolder, shouldAlwaysCompileRootFil
|
|
|
268
197
|
continue;
|
|
269
198
|
}
|
|
270
199
|
entryPoints[toCamelCase(entryName)] = {
|
|
271
|
-
import:
|
|
200
|
+
import: [srcFolder, fileNameAndExtension].join(pathSeparator),
|
|
272
201
|
filename: `${entryName}${isProduction ? `.[contenthash]` : ""}.js`,
|
|
273
202
|
};
|
|
274
203
|
}
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
console.log({ entryPoints: {} });
|
|
289
|
-
return {};
|
|
290
|
-
}
|
|
291
|
-
for (const block of blockFolders) {
|
|
292
|
-
const blockFiles = await readdir(`${srcFolder}/${block}`, {
|
|
293
|
-
withFileTypes: true,
|
|
294
|
-
}).then((blockDirFiles) => {
|
|
295
|
-
return blockDirFiles
|
|
296
|
-
.filter((file) => !file.isDirectory())
|
|
297
|
-
.map((file) => file.name)
|
|
298
|
-
.filter((file) => file.endsWith(".js") ||
|
|
299
|
-
file.endsWith(".ts") ||
|
|
300
|
-
file.endsWith(".jsx") ||
|
|
301
|
-
file.endsWith(".tsx"));
|
|
302
|
-
});
|
|
303
|
-
for (const blockJSFile of blockFiles) {
|
|
304
|
-
let blockBonusScriptNumber = 1;
|
|
305
|
-
const [filename] = blockJSFile.split(".");
|
|
306
|
-
let entryName;
|
|
307
|
-
if (filename === "index") {
|
|
308
|
-
entryName = block;
|
|
309
|
-
}
|
|
310
|
-
else if (filename === "editor") {
|
|
311
|
-
entryName = `${block}-editor`;
|
|
312
|
-
}
|
|
313
|
-
else if (filename === "view") {
|
|
314
|
-
entryName = `${block}-view`;
|
|
315
|
-
}
|
|
316
|
-
else {
|
|
317
|
-
entryName = `${block}-bonus${blockBonusScriptNumber}`;
|
|
318
|
-
blockBonusScriptNumber++;
|
|
204
|
+
return entryPoints;
|
|
205
|
+
}
|
|
206
|
+
export function getAllBlocksJSEntryPoints({ srcFolder, blocks, }) {
|
|
207
|
+
const entryPoints = {};
|
|
208
|
+
const blocksJsonObjects = Object.values(blocks);
|
|
209
|
+
for (const { blockFolder, blockJson } of blocksJsonObjects) {
|
|
210
|
+
const fields = getBlockJsonScriptFields(blockJson);
|
|
211
|
+
if (!fields) {
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
for (const value of Object.values(fields).flat()) {
|
|
215
|
+
if ("string" !== typeof value || !value.startsWith("file:")) {
|
|
216
|
+
continue;
|
|
319
217
|
}
|
|
218
|
+
// Removes the `file:` prefix.
|
|
219
|
+
const filepath = join(blockFolder, value.replace("file:", ""));
|
|
220
|
+
const entryName = filepath
|
|
221
|
+
.replace(srcFolder, "")
|
|
222
|
+
.replace(extname(filepath), "")
|
|
223
|
+
.replace(/\\/g, "/")
|
|
224
|
+
.split("/")
|
|
225
|
+
.filter((string) => string !== "")
|
|
226
|
+
.join("-");
|
|
320
227
|
entryPoints[toCamelCase(entryName)] = {
|
|
321
|
-
import:
|
|
322
|
-
filename: `${
|
|
228
|
+
import: filepath,
|
|
229
|
+
filename: `${filepath.replace(`${srcFolder}${pathSeparator}`, "").replace(extname(filepath), "")}${isProduction ? `.[contenthash]` : ""}.js`,
|
|
323
230
|
};
|
|
324
231
|
}
|
|
325
232
|
}
|
|
326
|
-
// eslint-disable-next-line no-console
|
|
327
|
-
console.log({ entryPoints });
|
|
328
233
|
return entryPoints;
|
|
329
234
|
}
|
|
235
|
+
export async function getBlockJsonFiles(srcFolder, excludeBlocks) {
|
|
236
|
+
const blockJsonFiles = await glob
|
|
237
|
+
.promise(`${srcFolder.replaceAll(pathSeparator, "/")}/**/block.json.ts`, {
|
|
238
|
+
ignore: excludeBlocks.map((blockName) => `${srcFolder.replaceAll(pathSeparator, "/")}/**/${blockName}/block.json.ts`),
|
|
239
|
+
})
|
|
240
|
+
.then((paths) => paths.map((path) => path.replaceAll("/", pathSeparator)));
|
|
241
|
+
const blocks = {};
|
|
242
|
+
for (const blockJsonFile of blockJsonFiles) {
|
|
243
|
+
const blockJson = await tsImport(`${blockJsonFile.split(pathSeparator).shift()?.includes(":") ? `file:///` : ""}${blockJsonFile}`, import.meta.url).then((loadedFile) => {
|
|
244
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
245
|
+
return loadedFile.default;
|
|
246
|
+
});
|
|
247
|
+
const blockName = blockJsonFile
|
|
248
|
+
.replace(`${pathSeparator}block.json.ts`, "")
|
|
249
|
+
.split(pathSeparator)
|
|
250
|
+
.pop();
|
|
251
|
+
blocks[blockName] = { blockFolder: dirname(blockJsonFile), blockJson };
|
|
252
|
+
}
|
|
253
|
+
return blocks;
|
|
254
|
+
}
|
|
255
|
+
export function getBlockJsonScriptFields(blockJson) {
|
|
256
|
+
const scriptFields = ["viewScript", "script", "editorScript"];
|
|
257
|
+
let result = null;
|
|
258
|
+
for (const field of scriptFields) {
|
|
259
|
+
if (Object.hasOwn(blockJson, field)) {
|
|
260
|
+
if (result === null) {
|
|
261
|
+
result = {};
|
|
262
|
+
}
|
|
263
|
+
result[field] = blockJson[field];
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return result;
|
|
267
|
+
}
|
|
268
|
+
export function getBlockJsonStyleFields(blockJson) {
|
|
269
|
+
const styleFields = ["viewStyle", "style", "editorStyle"];
|
|
270
|
+
let result = null;
|
|
271
|
+
for (const field of styleFields) {
|
|
272
|
+
if (Object.hasOwn(blockJson, field)) {
|
|
273
|
+
if (result === null) {
|
|
274
|
+
result = {};
|
|
275
|
+
}
|
|
276
|
+
result[field] = blockJson[field];
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return result;
|
|
280
|
+
}
|
|
281
|
+
function getSassOptions(srcFolder) {
|
|
282
|
+
return {
|
|
283
|
+
importers: [
|
|
284
|
+
{
|
|
285
|
+
findFileUrl(url) {
|
|
286
|
+
if (!url.startsWith("sitecss:"))
|
|
287
|
+
return null;
|
|
288
|
+
const pathname = url.substring(8);
|
|
289
|
+
return pathToFileURL(`${resolvePath(srcFolder, "../css")}${pathname.startsWith("/") ? pathname : `/${pathname}`}`);
|
|
290
|
+
},
|
|
291
|
+
},
|
|
292
|
+
],
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
function getCopyPatternsForBlocks(blocks, distFolder) {
|
|
296
|
+
const blocksCopyPatterns = [];
|
|
297
|
+
const blocksEntries = Object.entries(blocks);
|
|
298
|
+
for (const [blockName, { blockFolder, blockJson }] of blocksEntries) {
|
|
299
|
+
// Generate block.json file.
|
|
300
|
+
blocksCopyPatterns.push({
|
|
301
|
+
from: `${blockFolder}/block.json.ts`,
|
|
302
|
+
to: `${distFolder}/${blockName}/block.json`,
|
|
303
|
+
noErrorOnMissing: true,
|
|
304
|
+
transform: {
|
|
305
|
+
transformer() {
|
|
306
|
+
return JSON.stringify(blockJson, null, 2);
|
|
307
|
+
},
|
|
308
|
+
cache: true,
|
|
309
|
+
},
|
|
310
|
+
});
|
|
311
|
+
// Copy render.php file
|
|
312
|
+
blocksCopyPatterns.push({
|
|
313
|
+
from: `${blockFolder}/render.php`,
|
|
314
|
+
to: `${distFolder}/${blockName}/render.php`,
|
|
315
|
+
noErrorOnMissing: true,
|
|
316
|
+
});
|
|
317
|
+
// Copy index.php file
|
|
318
|
+
blocksCopyPatterns.push({
|
|
319
|
+
from: `${blockFolder}/index.php`,
|
|
320
|
+
to: `${distFolder}/${blockName}/index.php`,
|
|
321
|
+
noErrorOnMissing: true,
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
return blocksCopyPatterns;
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* This class handles CSS compilation for blocks.
|
|
328
|
+
*/
|
|
329
|
+
class CustomBlocksCSSHandler {
|
|
330
|
+
blocks;
|
|
331
|
+
distFolder;
|
|
332
|
+
srcFolder;
|
|
333
|
+
postcssConfigLocation;
|
|
334
|
+
constructor({ blocks, srcFolder, distFolder, postcssConfigLocation, }) {
|
|
335
|
+
this.blocks = blocks;
|
|
336
|
+
this.srcFolder = srcFolder;
|
|
337
|
+
this.distFolder = distFolder;
|
|
338
|
+
this.postcssConfigLocation = postcssConfigLocation;
|
|
339
|
+
}
|
|
340
|
+
apply(compiler) {
|
|
341
|
+
// RawSource is one of the "sources" classes that should be used
|
|
342
|
+
// to represent asset sources in compilation.
|
|
343
|
+
const { RawSource } = webpack.sources;
|
|
344
|
+
compiler.hooks.thisCompilation.tap({
|
|
345
|
+
name: "CustomBlocksCSSHandler",
|
|
346
|
+
stage: webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL,
|
|
347
|
+
}, (compilation) => {
|
|
348
|
+
compilation.hooks.processAssets.tapPromise("CustomBlocksCSSHandler", async () => {
|
|
349
|
+
const blocksJsonObjects = Object.values(this.blocks);
|
|
350
|
+
for (const { blockFolder, blockJson } of blocksJsonObjects) {
|
|
351
|
+
const fields = getBlockJsonStyleFields(blockJson);
|
|
352
|
+
if (!fields) {
|
|
353
|
+
continue;
|
|
354
|
+
}
|
|
355
|
+
for (const value of Object.values(fields).flat()) {
|
|
356
|
+
if ("string" !== typeof value || !value.startsWith("file:")) {
|
|
357
|
+
continue;
|
|
358
|
+
}
|
|
359
|
+
// Removes the `file:` prefix.
|
|
360
|
+
const filepath = join(blockFolder, value.replace("file:", ""));
|
|
361
|
+
const fileNameWithExtension = basename(filepath);
|
|
362
|
+
let css = readFileSync(filepath, "utf8");
|
|
363
|
+
if (extname(fileNameWithExtension) === ".scss") {
|
|
364
|
+
css = await compileStringAsync(css, getSassOptions(this.srcFolder)).then((result) => result.css);
|
|
365
|
+
}
|
|
366
|
+
let newFileNameWithExtension = fileNameWithExtension;
|
|
367
|
+
let newMatch = filepath.replace(`${this.srcFolder}/`, "");
|
|
368
|
+
if (isProduction) {
|
|
369
|
+
const fileBuffer = readFileSync(filepath);
|
|
370
|
+
const contentHash = crypto.createHash("shake256", {
|
|
371
|
+
outputLength: 10,
|
|
372
|
+
});
|
|
373
|
+
contentHash.update(fileBuffer);
|
|
374
|
+
newFileNameWithExtension = `${fileNameWithExtension.split(".")[0]}.${contentHash.digest("hex")}.css`;
|
|
375
|
+
newMatch = newMatch.replace(fileNameWithExtension, newFileNameWithExtension);
|
|
376
|
+
}
|
|
377
|
+
const { plugins, options } = await postcssLoadConfig({}, this.postcssConfigLocation)
|
|
378
|
+
.then(({ plugins, options }) => {
|
|
379
|
+
options.from = filepath;
|
|
380
|
+
options.to = newMatch;
|
|
381
|
+
return { plugins, options };
|
|
382
|
+
})
|
|
383
|
+
.catch((error) => {
|
|
384
|
+
if (error &&
|
|
385
|
+
error instanceof Error &&
|
|
386
|
+
error.message.startsWith("No PostCSS Config found")) {
|
|
387
|
+
const postCSSPlugins = [autoprefixer];
|
|
388
|
+
if (isProduction) {
|
|
389
|
+
postCSSPlugins.push(cssnano({ preset: "default" }));
|
|
390
|
+
}
|
|
391
|
+
return {
|
|
392
|
+
plugins: postCSSPlugins,
|
|
393
|
+
options: {
|
|
394
|
+
from: filepath,
|
|
395
|
+
to: newMatch,
|
|
396
|
+
},
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
throw error;
|
|
400
|
+
});
|
|
401
|
+
const result = await postcss(plugins).process(css, options);
|
|
402
|
+
compilation.emitAsset(newMatch, new RawSource(result.css));
|
|
403
|
+
if (result.map) {
|
|
404
|
+
compilation.emitAsset(`${newMatch}.map`, new RawSource(result.map.toString()));
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
});
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
class BlockJsonAssetTransformer {
|
|
413
|
+
distFolder;
|
|
414
|
+
constructor({ distFolder }) {
|
|
415
|
+
this.distFolder = distFolder;
|
|
416
|
+
}
|
|
417
|
+
apply(compiler) {
|
|
418
|
+
compiler.hooks.afterEmit.tapPromise("BlockJsonAssetTransformer", async (compilation) => {
|
|
419
|
+
const blockJsonFiles = Object.keys(compilation.assets).filter((asset) => asset.endsWith("block.json"));
|
|
420
|
+
for (const blockJsonFile of blockJsonFiles) {
|
|
421
|
+
await readFile(`${this.distFolder}/${blockJsonFile}`, "utf-8")
|
|
422
|
+
.then((data) => {
|
|
423
|
+
return JSON.parse(data);
|
|
424
|
+
})
|
|
425
|
+
.then((json) => {
|
|
426
|
+
const blockName = blockJsonFile.replace("/block.json", "");
|
|
427
|
+
[
|
|
428
|
+
getBlockJsonScriptFields(json),
|
|
429
|
+
getBlockJsonStyleFields(json),
|
|
430
|
+
].forEach((fields) => {
|
|
431
|
+
if (fields === null) {
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
434
|
+
Object.entries(fields).forEach(([fieldName, value]) => {
|
|
435
|
+
const values = [value].flat(1);
|
|
436
|
+
json[fieldName] = values.map((srcFilePath) => {
|
|
437
|
+
const fileName = srcFilePath
|
|
438
|
+
.replace("file:./", "")
|
|
439
|
+
.replace(extname(srcFilePath), "");
|
|
440
|
+
const hashedAsset = Object.keys(compilation.assets).find((asset) => {
|
|
441
|
+
return (asset.startsWith(`${blockName}/${fileName}`) &&
|
|
442
|
+
!asset.endsWith(".php"));
|
|
443
|
+
});
|
|
444
|
+
return hashedAsset
|
|
445
|
+
? `file:./${hashedAsset.replace(`${blockName}/`, "")}`
|
|
446
|
+
: srcFilePath;
|
|
447
|
+
});
|
|
448
|
+
});
|
|
449
|
+
});
|
|
450
|
+
return json;
|
|
451
|
+
})
|
|
452
|
+
.then(async (transformedJson) => {
|
|
453
|
+
await writeFile(`${this.distFolder}/${blockJsonFile}`, JSON.stringify(transformedJson, undefined, 2), "utf-8");
|
|
454
|
+
});
|
|
455
|
+
}
|
|
456
|
+
});
|
|
457
|
+
}
|
|
458
|
+
}
|
|
330
459
|
//# sourceMappingURL=blocks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blocks.js","sourceRoot":"","sources":["../../src/commands/blocks.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"blocks.js","sourceRoot":"","sources":["../../src/commands/blocks.ts"],"names":[],"mappings":"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"}
|