Socket
Socket
Sign inDemoInstall

apidoc-core

Package Overview
Dependencies
Maintainers
1
Versions
25
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

apidoc-core - npm Package Compare versions

Comparing version 0.3.0 to 0.3.1

12

lib/index.js
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 @@

215

lib/parser.js

@@ -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.
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc