Skip to content

Commit a07e16d

Browse files
committed
Add convertToSingleHost.js to allow for removing test infra
1 parent 10648e1 commit a07e16d

File tree

2 files changed

+76
-0
lines changed

2 files changed

+76
-0
lines changed

convertToSingleHost.js

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
const fs = require("fs");
2+
const path = require("path");
3+
const util = require("util");
4+
const testPackages = ["@types/mocha", "@types/node", "current-processes", "mocha", "office-addin-test-helpers",
5+
"office-addin-test-server", "ts-node"];
6+
const readFileAsync = util.promisify(fs.readFile);
7+
const writeFileAsync = util.promisify(fs.writeFile);
8+
9+
async function removeTestInfraStructure() {
10+
deleteFolder(path.resolve(`${process.cwd()}/test`));
11+
await convertProjectToSingleHost(host);
12+
await updatePackageJsonFile(host);
13+
await updateLaunchJsonFile();
14+
}
15+
16+
async function updatePackageJsonFile() {
17+
// update package.json to reflect selected host
18+
const packageJson = `./package.json`;
19+
const data = await readFileAsync(packageJson, "utf8");
20+
let content = JSON.parse(data);
21+
22+
// remove scripts that are unrelated to the selected host
23+
Object.keys(content.scripts).forEach(function (key) {
24+
if (key === "convert-to-single-host" || key === "test") {
25+
delete content.scripts[key];
26+
}
27+
});
28+
29+
// remove test-related packages
30+
Object.keys(content.devDependencies).forEach(function (key) {
31+
if (testPackages.includes(key)) {
32+
delete content.devDependencies[key]
33+
}
34+
});
35+
36+
// write updated json to file
37+
await writeFileAsync(packageJson, JSON.stringify(content, null, 2));
38+
}
39+
40+
async function updateLaunchJsonFile() {
41+
// remove 'Debug Tests' configuration from launch.json
42+
const launchJson = `.vscode/launch.json`;
43+
const launchJsonContent = await readFileAsync(launchJson, "utf8");
44+
const regex = /"configurations": \[\r?\n(.*{(.*\r?\n)*?.*"name": "Debug Tests",\r?\n(.*\r?\n)*?.*},)/gm;
45+
const updatedContent = launchJsonContent.replace(regex, `"configurations": [`);
46+
await writeFileAsync(launchJson, updatedContent);
47+
}
48+
49+
function deleteFolder(folder) {
50+
try {
51+
if (fs.existsSync(folder)) {
52+
fs.readdirSync(folder).forEach(function (file, index) {
53+
const curPath = `${folder}/${file}`;
54+
55+
if (fs.lstatSync(curPath).isDirectory()) {
56+
deleteFolder(curPath);
57+
}
58+
else {
59+
fs.unlinkSync(curPath);
60+
}
61+
});
62+
fs.rmdirSync(folder);
63+
}
64+
} catch (err) {
65+
throw new Error(`Unable to delete folder "${folder}".\n${err}`);
66+
}
67+
}
68+
69+
/**
70+
* Remove test infrastructure from project.
71+
*/
72+
removeTestInfraStructure().catch(err => {
73+
console.error(`Error: ${err instanceof Error ? err.message : err}`);
74+
process.exitCode = 1;
75+
});

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"build": "webpack -p --mode production --https false",
1717
"build:dev": "webpack --mode development --https false",
1818
"build-dev": "webpack --mode development --https false && echo . && echo . && echo . && echo Please use 'build:dev' instead of 'build-dev'.",
19+
"convert-to-single-host": "node convertToSingleHost.js",
1920
"dev-server": "webpack-dev-server --mode development",
2021
"sideload": "office-toolbox sideload -m manifest.xml -a excel",
2122
"sideload:excel": "office-toolbox sideload -m manifest.xml -a excel",

0 commit comments

Comments
 (0)