New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

functional-docs

Package Overview
Dependencies
Maintainers
1
Versions
26
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

functional-docs - npm Package Compare versions

Comparing version 0.0.2 to 0.0.3

96

index.js

@@ -11,2 +11,3 @@ var fs = require('fs'),

jsdom = require('jsdom'),
wrench = require('wrench'),
colors = require('colors');

@@ -16,2 +17,4 @@

var readFiles = {};
exports.runTests = function(srcDir, options, callback) {

@@ -21,3 +24,4 @@ var stopOnFail = options.stopOnFail || false;

console.log("Running tests...");
console.log("Running tests on " + srcDir);
loadFiles(srcDir, function(err, srcFiles) {

@@ -29,10 +33,15 @@ if (err) {

async.forEach(srcFiles, function(file, forEachCB) {
async.forEach(srcFiles, function(file, forEachCB) { // slower, but using batches to prevent EMFILE, Too many open files
fs.readFile(file, 'utf8', function(err, content) {
if (err) {
console.error(err);
process.exit(1);
if (!fs.lstatSync(file).isDirectory()) {
console.error("Error starting to read file " + file);
console.error(err);
process.exit(1);
}
}
var doc = jsdom.jsdom(content);
readFiles[file] = doc;
async.parallel([

@@ -55,3 +64,3 @@ function(cb) {

function(cb) {
postTest.checkBrokenLocalLink(file, doc, function(errors) {
postTest.checkBrokenLocalLink(file, doc, readFiles, function(errors) {
checkForErrors(errors, stopOnFail, cb);

@@ -65,3 +74,3 @@ });

}, function (err, results) {
console.log("Finished running tests!");
console.log("Finished running tests on " + srcDir);
callback(err);

@@ -74,6 +83,6 @@ })

for (var e in errors) {
console.error(errors[e].red);
console.error(errors[e].magenta);
}
if (breakOnFail) {
console.error("Halting due to failures".red);
console.error("Halting due to failures".magenta);
process.exit(1);

@@ -84,68 +93,7 @@ }

function loadFiles(dir, callback) {
async.map(dir, checkDir, function(err, results) {
// unfortunate necessity; .on('directory') below returns an array, there's no way
// that I can tell to actually replace an element with many more elements
var subArray = [];
for (var i = 0; i < results.length; i++) {
if (Array.isArray(results[i])) {
var dirArray = results[i];
dirArray.forEach(function (f) {
subArray.push(f);
});
results.splice(i, 1);
i--;
}
}
results = results.concat(subArray);
callback(err, eliminateDuplicates(results));
});
}
function checkDir(item, callback) {
var results = [], item = path.resolve(process.cwd(), item);
fs.stat(item, function(err, stats) {
if (stats === undefined) {
console.error("stats is undefined for " + item);
}
if (stats.isDirectory()) {
var finder = findit.find(item);
finder.on('file', function (file, stat) {
if (path.extname(file) == ext) {
results.push(file);
}
});
finder.on('directory', function (dir, stat) {
//console.log("Digging into " + dir);
});
finder.on('end', function () {
callback(err, results);
});
}
else if (path.extname(item) == ext) {
callback(err, item);
}
});
}
function eliminateDuplicates(arr) {
var i,
len=arr.length,
out=[],
obj={};
for (i=0;i<len;i++) {
obj[arr[i]]=0;
}
for (i in obj) {
if (i !== undefined && i !== '') {
out.push(i);
}
}
return out;
function loadFiles(dirs, callback) {
async.forEach(dirs, function(dir, cb) {
var listOfFiles = wrench.readdirSyncRecursive(dir);
callback(null, listOfFiles);
});
}
{
"name": "functional-docs",
"version": "0.0.2",
"version": "0.0.3",
"author": "Garen Torikian",

@@ -20,3 +20,3 @@ "keywords": ["documentation", "docs", "testing", "html"],

"wrench": "~1.3.7",
"jsdom": "~0.2.13",
"jsdom": "~0.2.14",
"findit": "~0.1.2",

@@ -23,0 +23,0 @@ "colors": "~0.6.0"

var util = require("util");
var fs = require('fs');
var path = require('path');
var wrench = require('wrench');
var jsdom = require('jsdom');
var async = require('async');

@@ -20,3 +21,3 @@ exports.checkMissingImage = function(filename, doc, callback) {

try {
fs.statSync(path.resolve(path.dirname(filename), src));
fs.lstatSync(path.resolve(path.dirname(filename), src));
} catch (err) {

@@ -32,3 +33,3 @@ errors.push(printMessage("Image " + src + " file does not exist", filename));//, l, lines[l]));

exports.checkBrokenLocalLink = function(filename, doc, callback) {
exports.checkBrokenLocalLink = function(filename, doc, readFiles, callback) {
var errors = [];

@@ -58,16 +59,19 @@ var aList = doc.getElementsByTagName("a");

// then, validate the hash ref
var content = fs.readFileSync(filepath, 'utf8');
/*if (err) {
console.error("Error: " + err);
process.exit(1);
}*/
var hashDoc = jsdom.jsdom(content);
if (hashDoc.getElementById(hashId) === null) {
errors.push(printMessage(hashFile + " has an incorrect external hash to '#" + hashId +"'", filename));
}
else {
//console.log("Yes, " + hashFile + "#" + hashId + " is okay.");
}
//});
// prevent too many files from being read--just see if the content exists already
var hashDoc = readFiles[filepath];
if (hashDoc == undefined) {
var content = fs.readFileSync(filepath, 'utf8');
hashDoc = jsdom.jsdom(content);
readFiles[filepath] = hashDoc;
}
// do the actual check (finally!)
if (hashDoc.getElementById(hashId) === null) {
errors.push(printMessage(hashFile + " has an incorrect external hash to '#" + hashId +"'", filename));
}
else {
//console.log("Yes, " + hashFile + "#" + hashId + " is okay.");
}
}

@@ -104,18 +108,20 @@ }

if (refDirName.length == 0 || lastSlashPos < 0) {
refDirName = "./";
refDirName = path.dirname(filepath);
}
var refFiles = wrench.readdirSyncRecursive(refDirName);
try {
fs.lstatSync(refDirName);
}
catch (e) {
errors.push(printMessage(file + " is trying to link to " + refDirName + ", which isn't a directory", file));
return false;
}
for (var r in refFiles)
{
if (refFiles[r].indexOf(refFileName) >=0) {
found = true;
}
}
if (found == false && href.length > 0) {
try {
fs.lstatSync(refDirName + "/" + refFileName);
}
catch (e) {
errors.push(printMessage(file + " is trying to incorrectly link to " + href + " as " + filepath, file));
return false;
}
}

@@ -122,0 +128,0 @@ return true;

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