apidoc-core
Advanced tools
Comparing version 0.3.0 to 0.3.1
var _ = require('lodash'); | ||
var fs = require('fs'); | ||
var path = require('path'); | ||
@@ -173,2 +174,10 @@ var semver = require('semver'); | ||
try { | ||
// Log version information | ||
var filename = path.join(__dirname, '../', './package.json'); | ||
var packageJson = JSON.parse( fs.readFileSync( filename , 'utf8') ); | ||
app.log.verbose('apidoc-generator name: ' + app.generator.name); | ||
app.log.verbose('apidoc-generator version: ' + app.generator.version); | ||
app.log.verbose('apidoc-core version: ' + packageJson.version); | ||
app.log.verbose('apidoc-spec version: ' + getSpecificationVersion()); | ||
var parser = new Parser(app); | ||
@@ -180,2 +189,3 @@ var worker = new Worker(app); | ||
// parse each folder in the order provided. | ||
app.log.verbose('run parser'); | ||
if (options.src instanceof Array) { | ||
@@ -198,5 +208,7 @@ options.src.forEach(function(folder) { | ||
// process transformations and assignments | ||
app.log.verbose('run worker'); | ||
worker.process(parsedFiles, parsedFilenames, app.packageInfos); | ||
// cleanup | ||
app.log.verbose('run filter'); | ||
var blocks = filter.process(parsedFiles, parsedFilenames); | ||
@@ -203,0 +215,0 @@ |
@@ -162,141 +162,140 @@ var _ = require('lodash'); | ||
if ( ! elementParser) { | ||
app.log.warn('parser plugin \'' + element.name + '\' not found.'); | ||
break; | ||
} | ||
app.log.warn('parser plugin \'' + element.name + '\' not found in block: ' + blockIndex); | ||
} else { | ||
app.log.debug('found @' + element.sourceName + ' in block: ' + blockIndex); | ||
app.log.debug('found @' + element.sourceName + ', in block: ' + i); | ||
// Deprecation warning | ||
if (elementParser.deprecated) { | ||
self.countDeprecated[element.sourceName] = self.countDeprecated[element.sourceName] ? self.countDeprecated[element.sourceName] + 1 : 1; | ||
// Deprecation warning | ||
if (elementParser.deprecated) { | ||
self.countDeprecated[element.sourceName] = self.countDeprecated[element.sourceName] ? self.countDeprecated[element.sourceName] + 1 : 1; | ||
var message = '@' + element.sourceName + ' is deprecated'; | ||
if (elementParser.alternative) | ||
message = '@' + element.sourceName + ' is deprecated, please use ' + elementParser.alternative; | ||
var message = '@' + element.sourceName + ' is deprecated'; | ||
if (elementParser.alternative) | ||
message = '@' + element.sourceName + ' is deprecated, please use ' + elementParser.alternative; | ||
if (self.countDeprecated[element.sourceName] === 1) | ||
// show deprecated message only 1 time as warning | ||
app.log.warn(message); | ||
else | ||
// show deprecated message more than 1 time as verbose message | ||
app.log.verbose(message); | ||
if (self.countDeprecated[element.sourceName] === 1) | ||
// show deprecated message only 1 time as warning | ||
app.log.warn(message); | ||
else | ||
// show deprecated message more than 1 time as verbose message | ||
app.log.verbose(message); | ||
app.log.verbose('in file: ' + filename + ', block: ' + blockIndex); | ||
} | ||
app.log.verbose('in file: ' + filename + ', block: ' + blockIndex); | ||
} | ||
var values; | ||
var preventGlobal; | ||
var allowMultiple; | ||
var pathTo; | ||
var attachMethod; | ||
try { | ||
// parse element and retrieve values | ||
values = elementParser.parse(element.content, element.source); | ||
var values; | ||
var preventGlobal; | ||
var allowMultiple; | ||
var pathTo; | ||
var attachMethod; | ||
try { | ||
// parse element and retrieve values | ||
values = elementParser.parse(element.content, element.source); | ||
// HINT: pathTo MUST be read after elementParser.parse, because of dynamic paths | ||
// Add all other options after parse too, in case of a custom plugin need to modify params. | ||
// HINT: pathTo MUST be read after elementParser.parse, because of dynamic paths | ||
// Add all other options after parse too, in case of a custom plugin need to modify params. | ||
// check if it is allowed to add to global namespace | ||
preventGlobal = elementParser.preventGlobal === true; | ||
// check if it is allowed to add to global namespace | ||
preventGlobal = elementParser.preventGlobal === true; | ||
// allow multiple inserts into pathTo | ||
allowMultiple = elementParser.allowMultiple === true; | ||
// allow multiple inserts into pathTo | ||
allowMultiple = elementParser.allowMultiple === true; | ||
// path to an array, where the values should be attached | ||
pathTo = ''; | ||
if (elementParser.path) { | ||
if (typeof elementParser.path === 'string') | ||
pathTo = elementParser.path; | ||
else | ||
pathTo = elementParser.path(); // for dynamic paths | ||
} | ||
// path to an array, where the values should be attached | ||
pathTo = ''; | ||
if (elementParser.path) { | ||
if (typeof elementParser.path === 'string') | ||
pathTo = elementParser.path; | ||
else | ||
pathTo = elementParser.path(); // for dynamic paths | ||
} | ||
if ( ! pathTo) | ||
throw new ParserError('pathTo is not defined in the parser file.', '', '', element.sourceName); | ||
if ( ! pathTo) | ||
throw new ParserError('pathTo is not defined in the parser file.', '', '', element.sourceName); | ||
// method how the values should be attached (insert or push) | ||
attachMethod = elementParser.method || 'push'; | ||
// method how the values should be attached (insert or push) | ||
attachMethod = elementParser.method || 'push'; | ||
if (attachMethod !== 'insert' && attachMethod !== 'push') | ||
throw new ParserError('Only push or insert are allowed parser method values.', '', '', element.sourceName); | ||
if (attachMethod !== 'insert' && attachMethod !== 'push') | ||
throw new ParserError('Only push or insert are allowed parser method values.', '', '', element.sourceName); | ||
// TODO: put this into "converters" | ||
if (values) { | ||
// Markdown | ||
if ( app.markdown && | ||
elementParser.markdownFields && | ||
elementParser.markdownFields.length > 0 | ||
) { | ||
for (var markdownIndex = 0; markdownIndex < elementParser.markdownFields.length; markdownIndex += 1) { | ||
var field = elementParser.markdownFields[markdownIndex]; | ||
if (values[field]) { | ||
values[field] = app.markdown(values[field]); | ||
// remove line breaks | ||
values[field] = values[field].replace(/(\r\n|\n|\r)/g, ' '); | ||
// TODO: put this into "converters" | ||
if (values) { | ||
// Markdown | ||
if ( app.markdown && | ||
elementParser.markdownFields && | ||
elementParser.markdownFields.length > 0 | ||
) { | ||
for (var markdownIndex = 0; markdownIndex < elementParser.markdownFields.length; markdownIndex += 1) { | ||
var field = elementParser.markdownFields[markdownIndex]; | ||
if (values[field]) { | ||
values[field] = app.markdown(values[field]); | ||
// remove line breaks | ||
values[field] = values[field].replace(/(\r\n|\n|\r)/g, ' '); | ||
} | ||
} | ||
} | ||
} | ||
} catch(e) { | ||
if (e instanceof ParameterError) { | ||
var extra = []; | ||
if (e.definition) | ||
extra.push({ 'Definition': e.definition }); | ||
if (e.example) | ||
extra.push({ 'Example': e.example }); | ||
throw new ParserError(e.message, | ||
self.filename, (blockIndex + 1), element.sourceName, element.source, extra); | ||
} | ||
throw new ParserError('Undefined error.', | ||
self.filename, (blockIndex + 1), element.sourceName, element.source); | ||
} | ||
} catch(e) { | ||
if (e instanceof ParameterError) { | ||
var extra = []; | ||
if (e.definition) | ||
extra.push({ 'Definition': e.definition }); | ||
if (e.example) | ||
extra.push({ 'Example': e.example }); | ||
throw new ParserError(e.message, | ||
self.filename, (blockIndex + 1), element.sourceName, element.source, extra); | ||
} | ||
throw new ParserError('Undefined error.', | ||
self.filename, (blockIndex + 1), element.sourceName, element.source); | ||
} | ||
if ( ! values) | ||
throw new ParserError('Empty parser result.', | ||
self.filename, (blockIndex + 1), element.sourceName, element.source); | ||
if (preventGlobal) { | ||
// Check if count global namespace entries > count allowed | ||
// (e.g. @successTitle is global, but should co-exist with @apiErrorStructure) | ||
if (Object.keys(blockData.global).length > countAllowedMultiple) | ||
throw new ParserError('Only one definition or usage is allowed in the same block.', | ||
if ( ! values) | ||
throw new ParserError('Empty parser result.', | ||
self.filename, (blockIndex + 1), element.sourceName, element.source); | ||
} | ||
// only one global allowed per block | ||
if (pathTo === 'global' || pathTo.substr(0, 7) === 'global.') { | ||
if (allowMultiple) { | ||
countAllowedMultiple += 1; | ||
} else { | ||
if (Object.keys(blockData.global).length > 0) | ||
throw new ParserError('Only one definition is allowed in the same block.', | ||
self.filename, (blockIndex + 1), element.sourceName, element.source); | ||
if (preventGlobal === true) | ||
if (preventGlobal) { | ||
// Check if count global namespace entries > count allowed | ||
// (e.g. @successTitle is global, but should co-exist with @apiErrorStructure) | ||
if (Object.keys(blockData.global).length > countAllowedMultiple) | ||
throw new ParserError('Only one definition or usage is allowed in the same block.', | ||
self.filename, (blockIndex + 1), element.sourceName, element.source); | ||
} | ||
} | ||
if ( ! blockData[pathTo]) | ||
self._createObjectPath(blockData, pathTo, attachMethod); | ||
// only one global allowed per block | ||
if (pathTo === 'global' || pathTo.substr(0, 7) === 'global.') { | ||
if (allowMultiple) { | ||
countAllowedMultiple += 1; | ||
} else { | ||
if (Object.keys(blockData.global).length > 0) | ||
throw new ParserError('Only one definition is allowed in the same block.', | ||
self.filename, (blockIndex + 1), element.sourceName, element.source); | ||
var blockDataPath = self._pathToObject(pathTo, blockData); | ||
if (preventGlobal === true) | ||
throw new ParserError('Only one definition or usage is allowed in the same block.', | ||
self.filename, (blockIndex + 1), element.sourceName, element.source); | ||
} | ||
} | ||
// insert Fieldvalues in Path-Array | ||
if (attachMethod === 'push') | ||
blockDataPath.push(values); | ||
else | ||
_.extend(blockDataPath, values); | ||
if ( ! blockData[pathTo]) | ||
self._createObjectPath(blockData, pathTo, attachMethod); | ||
// insert Fieldvalues in Mainpath | ||
if (elementParser.extendRoot === true) | ||
_.extend(blockData, values); | ||
var blockDataPath = self._pathToObject(pathTo, blockData); | ||
blockData.index = blockIndex + 1; | ||
// insert Fieldvalues in Path-Array | ||
if (attachMethod === 'push') | ||
blockDataPath.push(values); | ||
else | ||
_.extend(blockDataPath, values); | ||
// insert Fieldvalues in Mainpath | ||
if (elementParser.extendRoot === true) | ||
_.extend(blockData, values); | ||
blockData.index = blockIndex + 1; | ||
} | ||
} | ||
parsedBlocks.push(blockData); | ||
if (blockData.index && blockData.index > 0) | ||
parsedBlocks.push(blockData); | ||
} | ||
return parsedBlocks; | ||
@@ -303,0 +302,0 @@ }; |
{ | ||
"name": "apidoc-core", | ||
"version": "0.3.0", | ||
"version": "0.3.1", | ||
"description": "Core parser library to generate apidoc result following the apidoc-spec", | ||
@@ -36,3 +36,3 @@ "author": "Peter Rottmann <rottmann@inveris.de>", | ||
"lodash": "~2.4.1", | ||
"semver": "~4.1.0", | ||
"semver": "~4.2.0", | ||
"wrench": "~1.5.8" | ||
@@ -44,4 +44,4 @@ }, | ||
"marked": "~0.3.2", | ||
"mocha": "~2.0.1", | ||
"should": "~4.2.1" | ||
"mocha": "~2.1.0", | ||
"should": "~4.6.0" | ||
}, | ||
@@ -48,0 +48,0 @@ "jshintConfig": { |
@@ -12,3 +12,1 @@ # apidoc-core | ||
[Changelog](https://github.com/apidoc/apidoc/blob/master/CHANGELOG.md). | ||
The apidoc-core major and minor version represent the used apidoc-spec version. |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
104875
2991
12
7
+ Addedsemver@4.2.2(transitive)
- Removedsemver@4.1.1(transitive)
Updatedsemver@~4.2.0