From 5718c87a0ba46bf503657af18e55a715de2ff196 Mon Sep 17 00:00:00 2001 From: Merlin Beutlberger Date: Mon, 11 Mar 2019 13:43:06 +0100 Subject: [PATCH] JSDoc config JSON: Fix paths on Windows --- lib/processors/jsdoc/jsdocGenerator.js | 25 +++++++++++++---- test/lib/processors/jsdoc/jsdocGenerator.js | 31 ++++++++++++++++----- 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/lib/processors/jsdoc/jsdocGenerator.js b/lib/processors/jsdoc/jsdocGenerator.js index 6821421d8..10c98a434 100644 --- a/lib/processors/jsdoc/jsdocGenerator.js +++ b/lib/processors/jsdoc/jsdocGenerator.js @@ -77,27 +77,40 @@ const jsdocGenerator = async function({sourcePath, targetPath, tmpPath, options} * @returns {string} jsdoc-config.json content string */ async function generateJsdocConfig({targetPath, tmpPath, namespace, projectName, version, variants}) { + // Backlash needs to be escaped as double-backslash + // This is not only relevant for win32 paths but also for + // Unix directory names that contain a backslash in their name + const backslashRegex = /\\/g; + // Resolve path to this script to get the path to the JSDoc extensions folder const jsdocPath = path.normalize(__dirname); + const pluginPath = path.join(jsdocPath, "lib", "ui5", "plugin.js").replace(backslashRegex, "\\\\"); + const templatePath = path.join(jsdocPath, "lib", "ui5", "template").replace(backslashRegex, "\\\\"); + const destinationPath = path.normalize(tmpPath).replace(backslashRegex, "\\\\"); + const jsapiFilePath = path.join(targetPath, "libraries", projectName + ".js").replace(backslashRegex, "\\\\"); + const apiJsonFolderPath = path.join(tmpPath, "dependency-apis").replace(backslashRegex, "\\\\"); + const apiJsonFilePath = + path.join(targetPath, "test-resources", path.normalize(namespace), "designtime", "api.json") + .replace(backslashRegex, "\\\\"); const config = `{ - "plugins": ["${jsdocPath}/lib/ui5/plugin.js"], + "plugins": ["${pluginPath}"], "opts": { "recurse": true, "lenient": true, - "template": "${jsdocPath}/lib/ui5/template", + "template": "${templatePath}", "ui5": { "saveSymbols": true }, - "destination": "${tmpPath}" + "destination": "${destinationPath}" }, "templates": { "ui5": { "variants": ${JSON.stringify(variants)}, "version": "${version}", - "jsapiFile": "${targetPath}/libraries/${projectName}.js", - "apiJsonFolder": "${tmpPath}/dependency-apis", - "apiJsonFile": "${targetPath}/test-resources/${namespace}/designtime/api.json" + "jsapiFile": "${jsapiFilePath}", + "apiJsonFolder": "${apiJsonFolderPath}", + "apiJsonFile": "${apiJsonFilePath}" } } }`; diff --git a/test/lib/processors/jsdoc/jsdocGenerator.js b/test/lib/processors/jsdoc/jsdocGenerator.js index 5a344c47c..d0e531c2e 100644 --- a/test/lib/processors/jsdoc/jsdocGenerator.js +++ b/test/lib/processors/jsdoc/jsdocGenerator.js @@ -8,7 +8,7 @@ test("generateJsdocConfig", async (t) => { const res = await jsdocGenerator._generateJsdocConfig({ sourcePath: "/some/source/path", targetPath: "/some/target/path", - tmpPath: "/some/tmp/path", + tmpPath: "/some/tm\\p/path", namespace: "some/namespace", projectName: "some.namespace", version: "1.0.0", @@ -18,24 +18,41 @@ test("generateJsdocConfig", async (t) => { const jsdocGeneratorPath = path.resolve(__dirname, "..", "..", "..", "..", "lib", "processors", "jsdoc"); + const backslashRegex = /\\/g; + + const pluginPath = path.join(jsdocGeneratorPath, "lib", "ui5", "plugin.js") + .replace(backslashRegex, "\\\\"); + const templatePath = path.join(jsdocGeneratorPath, "lib", "ui5", "template") + .replace(backslashRegex, "\\\\"); + const destinationPath = path.join("/", "some", "tm\\p", "path") + .replace(backslashRegex, "\\\\"); + const jsapiFilePath = path.join("/", "some", "target", "path", "libraries", "some.namespace.js") + .replace(backslashRegex, "\\\\"); + const apiJsonFolderPath = path.join("/", "some", "tm\\p", "path", "dependency-apis") + .replace(backslashRegex, "\\\\"); + const apiJsonFilePath = + path.join("/", "some", "target", "path", "test-resources", "some", "namespace", "designtime", "api.json") + .replace(backslashRegex, "\\\\"); + + t.deepEqual(res, `{ - "plugins": ["${jsdocGeneratorPath}/lib/ui5/plugin.js"], + "plugins": ["${pluginPath}"], "opts": { "recurse": true, "lenient": true, - "template": "${jsdocGeneratorPath}/lib/ui5/template", + "template": "${templatePath}", "ui5": { "saveSymbols": true }, - "destination": "/some/tmp/path" + "destination": "${destinationPath}" }, "templates": { "ui5": { "variants": ["apijson"], "version": "1.0.0", - "jsapiFile": "/some/target/path/libraries/some.namespace.js", - "apiJsonFolder": "/some/tmp/path/dependency-apis", - "apiJsonFile": "/some/target/path/test-resources/some/namespace/designtime/api.json" + "jsapiFile": "${jsapiFilePath}", + "apiJsonFolder": "${apiJsonFolderPath}", + "apiJsonFile": "${apiJsonFilePath}" } } }`, "Correct config generated");