|
1 | 1 | const path = require("path"); |
2 | 2 | const fs = require("fs"); |
3 | 3 |
|
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`); |
43 | 28 | managerCode = managerCode.replace( |
44 | 29 | /builtinExtensions = {[\s\S]*?};/, |
45 | | - `$&\n\nbuiltinExtensions.${ExtId} = () => require('../extensions/${ExtDirName}');`, |
| 30 | + `$&\n\nbuiltinExtensions.${extension.name} = () => require('../extensions/${extension.directory}');`, |
46 | 31 | ); |
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`); |
60 | 41 | vmCode = vmCode.replace( |
61 | 42 | /CORE_EXTENSIONS = \[[\s\S]*?\];/, |
62 | | - `$&\n\nCORE_EXTENSIONS.push('${ExtId}');`, |
| 43 | + `$&\n\nCORE_EXTENSIONS.push('${extension.name}');`, |
63 | 44 | ); |
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