-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcore-api-import-external-example.mjs
More file actions
39 lines (32 loc) · 1.29 KB
/
Copy pathcore-api-import-external-example.mjs
File metadata and controls
39 lines (32 loc) · 1.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import fs from "node:fs";
import path from "node:path";
import { fileURLToPath } from "node:url";
import { loadMikuprojectCoreApi } from "./lib/core-api-loader.mjs";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const repoRoot = path.resolve(__dirname, "..");
const dependencyXmlPath = path.resolve(repoRoot, "testdata/dependency.xml");
const { api, dispose } = loadMikuprojectCoreApi({ rootDir: repoRoot });
try {
const xmlText = fs.readFileSync(dependencyXmlPath, "utf8");
const xmlResult = api.importExternal({
source: { format: "ms_project_xml", text: xmlText },
mode: "replace"
});
const workbookJson = api.workbookJson.exportDocument(xmlResult.model);
workbookJson.sheets.Project.find((row) => row.Field === "Name").Value = "Example Merge Import";
const mergeResult = api.importExternal({
source: { format: "workbook_json", document: workbookJson },
mode: "merge",
baseModel: xmlResult.model
});
process.stdout.write(JSON.stringify({
replaceKind: xmlResult.kind,
replaceMode: xmlResult.mode,
mergedProjectName: mergeResult.model.project.name,
mergedChangeCount: Array.isArray(mergeResult.changes) ? mergeResult.changes.length : 0
}, null, 2));
process.stdout.write("\n");
} finally {
dispose();
}