diff --git a/packages/assemble-lite/helper/io-helper.js b/packages/assemble-lite/helper/io-helper.js index 72823dc..e07f7b6 100644 --- a/packages/assemble-lite/helper/io-helper.js +++ b/packages/assemble-lite/helper/io-helper.js @@ -7,7 +7,9 @@ const asyncGlob = async (globPattern) => { return []; } - const files = await glob(globPattern, {}); + // consumers (e.g. pv-stylemark) build absolute patterns via path.resolve, which uses + // backslashes on windows — since glob v9 those count as escape characters and match nothing + const files = await glob(globPattern, { windowsPathsNoEscape: true }); // sort to keep partial/page/data registration order deterministic // make sure to use absolute paths and that platform separator is used diff --git a/packages/pv-stylemark/tasks/lsg/getLsgData.js b/packages/pv-stylemark/tasks/lsg/getLsgData.js index 6e5ad46..d0087cb 100644 --- a/packages/pv-stylemark/tasks/lsg/getLsgData.js +++ b/packages/pv-stylemark/tasks/lsg/getLsgData.js @@ -3,6 +3,7 @@ const { resolve, parse: pathParse, normalize, relative: relPath, join } = requir const { marked } = require("marked"); const frontmatter = require("front-matter"); const { glob } = require("glob"); +const slash = require("slash"); const { resolveApp, getAppConfig } = require("../../helper/paths"); @@ -113,8 +114,9 @@ const getLsgDataForPath = async (markdownPath) => { const { name, dir } = pathParse(markdownPath); const componentsSrc = resolveApp(getAppConfig().componentsSrc); - const componentPath = relPath(componentsSrc, dir); - const srcPath = relPath(componentsSrc, markdownPath); + // forward slashes even on windows — these end up in urls and rendered markup + const componentPath = slash(relPath(componentsSrc, dir)); + const srcPath = slash(relPath(componentsSrc, markdownPath)); const { attributes: frontmatterData, body: fileContentBody } = frontmatter(fileContent); @@ -241,7 +243,7 @@ function cleanMarkdownFromExecutableCodeBlocks(markdownContent, name, componentP if (groups.language === "html") { // html file will be generated for html code blocks without a referenced file const examplePath = groups.examplePath ? groups.examplePath : `${groups.exampleName}.html`; - const markupUrl = join("../components", componentPath, examplePath); + const markupUrl = slash(join("../components", componentPath, examplePath)); replacement += `` } if (groups.content && !groups.params.hidden) { diff --git a/packages/pv-stylemark/webpack-plugin/getFilesToWatch.js b/packages/pv-stylemark/webpack-plugin/getFilesToWatch.js index a8775b3..22d1c03 100644 --- a/packages/pv-stylemark/webpack-plugin/getFilesToWatch.js +++ b/packages/pv-stylemark/webpack-plugin/getFilesToWatch.js @@ -1,13 +1,14 @@ const { asyncGlob } = require("@pro-vision/assemble-lite/helper/io-helper"); -const { getAppConfig, join } = require("../helper/paths"); +const { getAppConfig, join, resolveApp } = require("../helper/paths"); const { componentsSrc, cdPagesSrc, cdTemplatesSrc, lsgIndex, hbsHelperSrc } = getAppConfig(); const getFilesToWatch = async () => { const files = { staticStylemarkFiles: [ - lsgIndex, + // absolute native path, comparable to webpack's modifiedFiles / fileDependencies + resolveApp(lsgIndex), // stylemark .md files ...(await asyncGlob(join(componentsSrc, "**/*.md"))), ],