Skip to content

Commit 15b5c09

Browse files
authored
refactor: streamline extension registration process in patch-gui.js (#12)
1 parent 8308fc9 commit 15b5c09

File tree

1 file changed

+44
-58
lines changed

1 file changed

+44
-58
lines changed
Lines changed: 44 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,53 @@
11
const path = require("path");
22
const fs = require("fs");
33

4-
const BaseDir = path.resolve(__dirname, "../"); // base dir is the 'scratch-arduino-extensions'
5-
6-
const ScratchVmExtensionsManagerFile = path.resolve(
7-
BaseDir,
8-
"../scratch-editor/packages/scratch-vm/src/extension-support/extension-manager.js"
9-
);
10-
11-
const ScratchVmVirtualMachineFile = path.resolve(
12-
BaseDir,
13-
"../scratch-editor/packages/scratch-vm/src/virtual-machine.js",
14-
);
15-
16-
const ExtIds = ["Scratch3Arduino"];
17-
const ExtDirName = "scratch3_arduino";
18-
19-
const PatchedExtensionDir = path.resolve(
20-
BaseDir,
21-
"./packages/scratch-vm/src/extensions/",
22-
ExtDirName,
23-
);
24-
const ScratchVmExtensionsDir = path.resolve(
25-
BaseDir,
26-
"../scratch-editor/packages/scratch-vm/src/extensions",
27-
ExtDirName,
28-
);
29-
30-
if (!fs.existsSync(ScratchVmExtensionsDir)) {
31-
fs.symlinkSync(PatchedExtensionDir, ScratchVmExtensionsDir, "dir");
32-
console.log("Set symbolic link to", ScratchVmExtensionsDir);
33-
} else {
34-
console.log("Symbolic link already set to", ScratchVmExtensionsDir);
35-
}
36-
37-
let managerCode = fs.readFileSync(ScratchVmExtensionsManagerFile, "utf-8");
38-
for (const ExtId of ExtIds) {
39-
if (managerCode.includes(ExtId)) {
40-
console.log(`Already registered in manager: ${ExtId}`);
41-
} else {
42-
fs.copyFileSync(ScratchVmExtensionsManagerFile, `${ScratchVmExtensionsManagerFile}.orig`);
4+
const extensions = [
5+
{ name: "Scratch3Arduino", directory: "scratch3_arduino" },
6+
];
7+
8+
// base dir is the 'scratch-arduino-extensions' folder
9+
const BaseDir = path.resolve(__dirname, "../");
10+
11+
extensions.forEach(extension => {
12+
console.log(`${extension.name} (${extension.directory})`);
13+
14+
process.stdout.write("\t - add symbolic link: ");
15+
const scratchVmExtensionsDir = path.resolve(BaseDir,"../scratch-editor/packages/scratch-vm/src/extensions",extension.directory);
16+
if (!fs.existsSync(scratchVmExtensionsDir)) {
17+
const patchedExtensionDir = path.resolve(BaseDir,"./packages/scratch-vm/src/extensions/",extension.directory);
18+
fs.symlinkSync(patchedExtensionDir, scratchVmExtensionsDir, "dir");
19+
process.stdout.write("done");
20+
} else process.stdout.write("skip");
21+
22+
23+
process.stdout.write("\n\t - register builtin: ");
24+
const scratchVmExtensionsManagerFile = path.resolve(BaseDir, "../scratch-editor/packages/scratch-vm/src/extension-support/extension-manager.js");
25+
let managerCode = fs.readFileSync(scratchVmExtensionsManagerFile, "utf-8");
26+
if (!managerCode.includes(extension.name)) {
27+
fs.copyFileSync(scratchVmExtensionsManagerFile, `${scratchVmExtensionsManagerFile}.orig`);
4328
managerCode = managerCode.replace(
4429
/builtinExtensions = {[\s\S]*?};/,
45-
`$&\n\nbuiltinExtensions.${ExtId} = () => require('../extensions/${ExtDirName}');`,
30+
`$&\n\nbuiltinExtensions.${extension.name} = () => require('../extensions/${extension.directory}');`,
4631
);
47-
fs.writeFileSync(ScratchVmExtensionsManagerFile, managerCode);
48-
console.log(`Registered in manager: ${ExtId}`);
49-
}
50-
}
51-
52-
53-
// Add the extension as a core extension.
54-
let vmCode = fs.readFileSync(ScratchVmVirtualMachineFile, "utf-8");
55-
for (const ExtId of ExtIds) {
56-
if (vmCode.includes(ExtId)) {
57-
console.log(`Already added as a core extension: ${ExtId}`);
58-
} else {
59-
fs.copyFileSync(ScratchVmVirtualMachineFile, `${ScratchVmVirtualMachineFile}.orig`);
32+
fs.writeFileSync(scratchVmExtensionsManagerFile, managerCode);
33+
process.stdout.write("done");
34+
} else process.stdout.write("skip");
35+
36+
process.stdout.write("\n\t - register core: ");
37+
const scratchVmVirtualMachineFile = path.resolve(BaseDir, "../scratch-editor/packages/scratch-vm/src/virtual-machine.js");
38+
let vmCode = fs.readFileSync(scratchVmVirtualMachineFile, "utf-8");
39+
if (!vmCode.includes(extension.name)) {
40+
fs.copyFileSync(scratchVmVirtualMachineFile, `${scratchVmVirtualMachineFile}.orig`);
6041
vmCode = vmCode.replace(
6142
/CORE_EXTENSIONS = \[[\s\S]*?\];/,
62-
`$&\n\nCORE_EXTENSIONS.push('${ExtId}');`,
43+
`$&\n\nCORE_EXTENSIONS.push('${extension.name}');`,
6344
);
64-
fs.writeFileSync(ScratchVmVirtualMachineFile, vmCode);
65-
console.log(`Add as a core extension: ${ExtId}`);
66-
}
67-
}
45+
fs.writeFileSync(scratchVmVirtualMachineFile, vmCode);
46+
process.stdout.write("done\n");
47+
} else process.stdout.write("skip");
48+
});
49+
50+
51+
52+
53+

0 commit comments

Comments
 (0)