diff --git a/gulpfile.js b/gulpfile.js index 1dccc09c2d..da891b7e75 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -17,8 +17,8 @@ var fs = fsExtra; var docShredder = require('./public/doc-shredder/doc-shredder'); var _shredOptions = { - examplesDir: path.resolve('./public/docs/_examples'), - fragmentsDir: path.resolve('./public/docs/_fragments') + examplesDir: './public/docs/_examples', + fragmentsDir: './public/docs/_fragments' }; //var _apiShredOptions = { @@ -69,7 +69,7 @@ gulp.task('shred-full', ['shred-clean'], function() { }); gulp.task('shred-clean', function(cb) { - var cleanPath = path.join(_shredOptions.basePath, _shredOptions.fragmentsDir, '**/*.*') + var cleanPath = path.join(_shredOptions.fragmentsDir, '**/*.*') del([ cleanPath, '!**/*.ovr.*'], function (err, paths) { // console.log('Deleted files/folders:\n', paths.join('\n')); cb(); @@ -121,11 +121,11 @@ gulp.task('git-changed-examples', ['shred-full'], function(){ console.log(JSON.stringify(jadeExampleMap, null, " ")); console.log("-----"); }).catch(function(err) { + console.log(err); throw err; }); }); - gulp.task('build-api-docs', function() { if (!fs.existsSync('../angular')) { throw new Error('build-api-docs task requires the angular2 repo to be at ' + path.resolve('../angular')); @@ -133,15 +133,13 @@ gulp.task('build-api-docs', function() { try { var dgeni = new Dgeni([require('./public/api-builder/angular.io-package')]); return dgeni.generate(); - } catch(x) { - console.log(x); - console.log(x.stack); - throw x; + } catch(err) { + console.log(err); + console.log(err.stack); + throw err; } }); - - function filterOutExcludedPatterns(fileNames, excludeMatchers) { return fileNames.filter(function(fileName) { return !excludeMatchers.some(function(excludeMatcher) { @@ -152,8 +150,8 @@ function filterOutExcludedPatterns(fileNames, excludeMatchers) { function buildShredMaps(shouldWrite) { var options = _.extend(_shredOptions, { - jadeDir: '.', - outputDir: '.', + jadeDir: './public/docs', + outputDir: './public/docs', writeFilesEnabled: shouldWrite }); return docShredder.buildShredMap(options).then(function(docs) { @@ -163,7 +161,7 @@ function buildShredMaps(shouldWrite) { // returns a promise containing filePaths with any changed or added examples; function getChangedExamples(sha) { - var examplesPath = path.join(_shredOptions.basePath, _shredOptions.examplesDir); + var examplesPath = _shredOptions.examplesDir; var relativePath = path.relative(process.cwd(), examplesPath); return Git.Repository.open(".").then(function(repo) { if (sha.length) { @@ -179,7 +177,7 @@ function getChangedExamples(sha) { } function getChangedExamplesAfter(date, relativePath) { - var examplesPath = path.join(_shredOptions.basePath, _shredOptions.examplesDir); + var examplesPath = _shredOptions.examplesDir; var relativePath = path.relative(process.cwd(), examplesPath); return Git.Repository.open(".").then(function(repo) { return repo.getHeadCommit(); @@ -241,20 +239,21 @@ function shredWatch(shredOptions, postShredAction) { } function jadeShredMapToJadeExampleMap(jadeShredMap, examplePaths) { + // remove dups in examplePaths var exampleSet = {}; examplePaths.forEach(function(examplePath) { exampleSet[examplePath] = examplePath; }); - var basePath = jadeShredMap.basePath; + var basePath = path.resolve("."); var jadeToFragMap = jadeShredMap.jadeToFragMap; var jadeExampleMap = {}; for (var jadePath in jadeToFragMap) { - var fullJadePath = path.join(basePath, jadePath); + var relativeJadePath = path.relative(basePath, jadePath); var vals = jadeToFragMap[jadePath]; vals.forEach(function(val) { - var examplePath = path.join(basePath, val.examplePath); - if (exampleSet[examplePath] != null) { - addKeyValue(jadeExampleMap, fullJadePath, examplePath); + var relativeExamplePath = path.relative(basePath, val.examplePath); + if (exampleSet[relativeExamplePath] != null) { + addKeyValue(jadeExampleMap, relativeJadePath, relativeExamplePath); } }); } @@ -262,15 +261,14 @@ function jadeShredMapToJadeExampleMap(jadeShredMap, examplePaths) { } function jadeShredMapToExampleJadeMap(jadeShredMap) { - var basePath = jadeShredMap.basePath; + var jadeToFragMap = jadeShredMap.jadeToFragMap; var exampleJadeMap = {}; for (var jadePath in jadeToFragMap) { - var fullJadePath = path.join(basePath, jadePath); var vals = jadeToFragMap[jadePath]; vals.forEach(function(val) { - var examplePath = path.join(basePath, val.examplePath); - addKeyValue(exampleJadeMap, examplePath, fullJadePath); + var examplePath = val.examplePath; + addKeyValue(exampleJadeMap, examplePath, jadePath); }); } return exampleJadeMap; @@ -287,9 +285,10 @@ function addKeyValue(map, key, value) { } } - -// added options are: shouldLog -// cb is function(err, stdout, stderr); +// Synchronously execute a chain of commands. +// cmds: an array of commands +// options: { shouldLog: true, shouldThrow: true } +// cb: function(err, stdout, stderr) function execCommands(cmds, options, cb) { options = options || {}; options.shouldThrow = options.shouldThrow == null ? true : options.shouldThrow; diff --git a/public/doc-shredder/doc-shredder.js b/public/doc-shredder/doc-shredder.js index 51f04e7f45..9e3d96b065 100644 --- a/public/doc-shredder/doc-shredder.js +++ b/public/doc-shredder/doc-shredder.js @@ -7,16 +7,15 @@ var delPromise = Q.denodeify(del); var Dgeni = require('dgeni'); var _ = require('lodash'); - - var shred = function(shredOptions) { try { var pkg = createShredPackage(shredOptions); var dgeni = new Dgeni([ pkg]); return dgeni.generate(); - } catch(x) { - console.log(x.stack); - throw x; + } catch(err) { + console.log(err); + console.log(err.stack); + throw err; } } @@ -43,9 +42,10 @@ var buildShredMap = function(shredMapOptions) { var pkg = createShredMapPackage(shredMapOptions); var dgeni = new Dgeni([ pkg]); return dgeni.generate(); - } catch(x) { - console.log(x.stack); - throw x; + } catch(err) { + console.log(err); + console.log(err.stack); + throw err; } } @@ -94,7 +94,7 @@ function createShredPackage(shredOptions) { }) .config(function(writeFilesProcessor) { // Specify where the writeFilesProcessor will write our generated doc files - writeFilesProcessor.outputFolder = options.fragmentsDir; + writeFilesProcessor.outputFolder = path.resolve(options.fragmentsDir); }); return pkg; } @@ -118,7 +118,7 @@ var createShredMapPackage = function(mapOptions) { // default configs - may be overriden .config(function(readFilesProcessor) { // Specify the base path used when resolving relative paths to source and output files - readFilesProcessor.basePath = '/'; // options.basePath; + readFilesProcessor.basePath = '/'; // Specify collections of source files that should contain the documentation to extract var extns = ['*.jade' ]; @@ -145,7 +145,7 @@ var createShredMapPackage = function(mapOptions) { unescapeCommentsProcessor.$enabled = false; } else { // Specify where the writeFilesProcessor will write our generated doc files - writeFilesProcessor.outputFolder = options.outputDir; + writeFilesProcessor.outputFolder = path.resolve(options.outputDir); } }) .config(function(templateFinder) { @@ -181,25 +181,33 @@ var createShredMapPackage = function(mapOptions) { } function resolveShredOptions(shredOptions) { - return _.defaults({}, shredOptions, { + var so = _.defaults({}, shredOptions, { // read files from any subdir under here - examplesDir: path.resolve("./docs/_examples"), + examplesDir: "./docs/_examples", // shredded files get copied here with same subdir structure. - fragmentsDir: path.resolve("./docs/_fragments"), + fragmentsDir: "./docs/_fragments", // whether to include subdirectories when shredding. includeSubdirs: true }); + + so.examplesDir = path.resolve(so.examplesDir); + so.fragmentsDir = path.resolve(so.fragmentsDir); + return so; } function resolveMapOptions(mapOptions) { - return _.defaults({}, mapOptions, { + var so = _.defaults({}, mapOptions, { // read files from any subdir under here - jadeDir: path.resolve("./docs"), - fragmentsDir: path.resolve("./docs/_fragments"), - examplesDir: path.resolve("./docs/_examples"), + jadeDir: "./docs", + fragmentsDir: "./docs/_fragments", + examplesDir: "./docs/_examples", // whether to include subdirectories when shredding. includeSubdirs: true }); + so.jadeDir = path.resolve(so.jadeDir); + so.examplesDir = path.resolve(so.examplesDir); + so.fragmentsDir = path.resolve(so.fragmentsDir); + return so; } function initializePackage(pkg) { diff --git a/public/doc-shredder/fileShredder.js b/public/doc-shredder/fileShredder.js index 84f49845a5..0575b728e8 100644 --- a/public/doc-shredder/fileShredder.js +++ b/public/doc-shredder/fileShredder.js @@ -24,7 +24,7 @@ module.exports = function fileShredder(log, regionExtractor) { default: return []; } - log.info("fileShredder processing: " + fileInfo.projectRelativePath); + log.info("fileShredder processing: " + fileInfo.relativePath); if (commentMarkers) { return regionExtractor(fileInfo.content, commentMarkers); } else { diff --git a/public/doc-shredder/shredMapProcessor.js b/public/doc-shredder/shredMapProcessor.js index 29d3165d96..a3f98eb3e2 100644 --- a/public/doc-shredder/shredMapProcessor.js +++ b/public/doc-shredder/shredMapProcessor.js @@ -19,28 +19,29 @@ module.exports = function shredMapProcessor(log) { docs.forEach(function(doc) { var jadePath = path.join(options.jadeDir, doc.fileInfo.relativePath); - var fragInfos = doc.fragPaths.map(function(fragPath) { - var relativeFragPath = path.join(options.fragmentsDir, fragPath) + '.md'; - var fullPath = path.join(options.basePath, relativeFragPath); - + var fragInfoSet = {}; + doc.fragPaths.forEach(function(fragPath) { + var fullFragPath = path.join(options.fragmentsDir, fragPath) + '.md'; var examplePath = getExampleName(fragPath); - var relativeExamplePath = path.join(options.examplesDir, examplePath); - var fragInfo = { fragPath: relativeFragPath, examplePath: relativeExamplePath, exists: fs.existsSync(fullPath) }; + var fullExamplePath = path.join(options.examplesDir, examplePath); + var fragInfo = { fragPath: fullFragPath, examplePath: fullExamplePath, exists: fs.existsSync(fullFragPath) }; + fragInfoSet[fragPath] = fragInfo; if (fragInfo.exists) { - var jadePaths = fragToJadeMap[fragInfo]; - if (!jadePaths) { - jadePaths = []; - fragToJadeMap[fragPath] = jadePaths; + var jadePathsSet = fragToJadeMap[fragPath]; + if (!jadePathsSet) { + jadePathsSet = {}; + fragToJadeMap[fragPath] = jadePathsSet; } - jadePaths.push(jadePath); + jadePathsSet[jadePath] = jadePath; } - return fragInfo; }); - jadeToFragMap[jadePath] = fragInfos; + jadeToFragMap[jadePath] = _.values(fragInfoSet); }); - var basePath = path.relative(process.cwd(), this.options.basePath); + for (var key in fragToJadeMap) { + fragToJadeMap[key] = _.keys(fragToJadeMap[key]); + } + var shredMap = { - basePath: basePath, jadeToFragMap: jadeToFragMap }; @@ -53,12 +54,10 @@ module.exports = function shredMapProcessor(log) { outputPath: 'xref-jade.json' }, { docType: 'xref-jade.html', - basePath: basePath, jadeToFragMap: jadeToFragMap, outputPath: 'xref-jade-to-frag.html' }, { docType: 'xref-frag.html', - basePath: basePath, fragToJadeMap: fragToJadeMap, outputPath: 'xref-frag-to-jade.html' }]; diff --git a/public/doc-shredder/xref-frag.html.template b/public/doc-shredder/xref-frag.html.template index ba554c15e7..7ae0ce92f6 100644 --- a/public/doc-shredder/xref-frag.html.template +++ b/public/doc-shredder/xref-frag.html.template @@ -1,6 +1,5 @@
Base path: {{ doc.basePath }}
Base path: {{ doc.basePath }}