jsdoc2md / dmd

The default output template for jsdoc2md
MIT License
39 stars 49 forks source link

Handlebars Partials #82

Closed mdelbuono closed 2 months ago

mdelbuono commented 4 years ago

In index.js, line 92 loads the default partials as follows:

 registerPartials(path.resolve(__dirname, './partials/**/*.hbs'))  

The glob path gests unfolded usign FileSet which in turns uses glob. The problem is that, if __dirname contains special glob characters (e.g. [ ] like in my case), FileSet will fail listing all the .hbs files and no partial will be registered.

Bottomline is: __dirname should be escaped.

mdelbuono commented 4 years ago

I fixed it as follows:

registerPartials(path.resolve(escapeGlob(__dirname), './partials/**/*.hbs'))

Where the escapeGlob function is defined below:

function escapeGlob (glob) {
  return glob
    .replace(/\\/g, '\\\\')
    .replace(/\*/g, '\\*')
    .replace(/\?/g, '\\?')
    .replace(/\[/g, '\\[')
    .replace(/\]/g, '\\]')
    .replace(/\{/g, '\\{')
    .replace(/\}/g, '\\}')
    .replace(/\)/g, '\\)')
    .replace(/\(/g, '\\(')
    .replace(/\!/g, '\\!');
}
75lb commented 2 months ago

A fix for this has been implemented and will be in the next version of dmd & jsdoc2md.. All internal partials are now cached and imported as a module at run time, removing the requirement to load each partial file on every invocation..

Closing for now, watch this space for the new version..