mirror of
https://github.com/jsdoc/jsdoc.git
synced 2025-12-08 19:46:11 +00:00
- In the default template, look for the list of static file paths in the config property `templates.default.staticFiles.include`. (You can still use `paths` instead of `include`.) - Handle path-normalization issues that prevented the default template from copying user-specified static files on Windows. - Normalize paths in `fs.toDir` so that callers get the correct path separator on Windows.
168 lines
4.3 KiB
JavaScript
168 lines
4.3 KiB
JavaScript
/**
|
|
* Partial Rhino shim for Node.js' `fs` module.
|
|
* @see http://nodejs.org/api/fs.html
|
|
*/
|
|
'use strict';
|
|
|
|
var path = require('path');
|
|
var util = require('util');
|
|
|
|
var asyncify = path._asyncify;
|
|
|
|
function checkEncoding(enc, name) {
|
|
// we require the `encoding` parameter for Node.js compatibility; on Node.js, if you omit the
|
|
// encoding, you get a stream instead of a string
|
|
if (!enc || typeof enc === 'function') {
|
|
throw new Error(name + ' requires an encoding on Rhino!');
|
|
}
|
|
|
|
// Node.js wants 'utf8', but Java wants 'utf-8'
|
|
if (enc === 'utf8') {
|
|
enc = 'utf-8';
|
|
}
|
|
|
|
return enc;
|
|
}
|
|
|
|
// provide an error that's consistent with Node.js
|
|
function errorFactory(filepath) {
|
|
return new Error( util.format("ENOENT, no such file or directory '%s'", filepath) );
|
|
}
|
|
|
|
exports.readFileSync = function readFileSync(filename, encoding) {
|
|
encoding = checkEncoding(encoding, 'fs.readFile[Sync]');
|
|
|
|
return readFile(filename, encoding);
|
|
};
|
|
exports.readFile = asyncify(exports.readFileSync);
|
|
|
|
// in node 0.8, path.exists() and path.existsSync() moved to the "fs" module
|
|
exports.existsSync = path.existsSync;
|
|
exports.exists = path.exists;
|
|
|
|
var statSync = exports.statSync = function statSync(_path) {
|
|
var f = new java.io.File(_path);
|
|
if (!f) {
|
|
throw errorFactory(_path);
|
|
}
|
|
|
|
return {
|
|
isFile: function isFile() {
|
|
return f.isFile();
|
|
},
|
|
isDirectory: function isDirectory() {
|
|
return f.isDirectory();
|
|
},
|
|
isSymlink: function isSymlink() {
|
|
// java.io.File resolves symlinks
|
|
return false;
|
|
}
|
|
};
|
|
};
|
|
exports.stat = asyncify(statSync);
|
|
|
|
// java.io.File resolves symlinks, so we can alias `lstat` to `stat`
|
|
var lstatSync = exports.lstatSync = statSync;
|
|
exports.lstat = asyncify(lstatSync);
|
|
|
|
var readdirSync = exports.readdirSync = function readdirSync(_path) {
|
|
var dir;
|
|
var files;
|
|
|
|
dir = new java.io.File(_path);
|
|
if (!dir.directory) {
|
|
throw errorFactory(_path);
|
|
}
|
|
|
|
files = dir.list()
|
|
.map(function(fileName) {
|
|
return String(fileName);
|
|
});
|
|
|
|
return files;
|
|
};
|
|
exports.readdir = asyncify(readdirSync);
|
|
|
|
// JSDoc extension to `fs` module
|
|
var toDir = exports.toDir = function toDir(_path) {
|
|
var f;
|
|
|
|
_path = path.normalize(_path);
|
|
f = new java.io.File( path.resolve(global.env.pwd, _path) );
|
|
|
|
if ( f.isDirectory() ){
|
|
return _path;
|
|
} else {
|
|
return path.dirname(_path);
|
|
}
|
|
};
|
|
|
|
var mkdirSync = exports.mkdirSync = function mkdirSync(_path) {
|
|
var dir_path = toDir(_path);
|
|
( new java.io.File(dir_path) ).mkdir();
|
|
};
|
|
exports.mkdir = asyncify(mkdirSync);
|
|
|
|
// JSDoc extension to `fs` module
|
|
exports.mkPath = function mkPath(_path) {
|
|
if ( Array.isArray(_path) ) {
|
|
_path = _path.join('');
|
|
}
|
|
|
|
( new java.io.File(path.resolve(global.env.pwd, _path)) ).mkdirs();
|
|
};
|
|
|
|
// JSDoc extension to `fs` module
|
|
exports.copyFileSync = function copyFileSync(inFile, outDir, fileName) {
|
|
if (fileName === undefined || fileName === null) {
|
|
fileName = path.basename(inFile);
|
|
}
|
|
|
|
outDir = toDir(outDir);
|
|
|
|
inFile = new java.io.File(inFile);
|
|
var outFile = new java.io.File(outDir + '/' + fileName);
|
|
|
|
var bis = new java.io.BufferedInputStream(new java.io.FileInputStream(inFile), 4096);
|
|
var bos = new java.io.BufferedOutputStream(new java.io.FileOutputStream(outFile), 4096);
|
|
var theChar = bis.read();
|
|
while (theChar !== -1) {
|
|
bos.write(theChar);
|
|
theChar = bis.read();
|
|
}
|
|
|
|
bos.close();
|
|
bis.close();
|
|
};
|
|
exports.copyFile = asyncify(exports.copyFileSync);
|
|
|
|
exports.writeFileSync = function writeFileSync(filename, data, encoding) {
|
|
encoding = checkEncoding(encoding, 'fs.writeFile[Sync]');
|
|
|
|
var out = new java.io.PrintWriter(
|
|
new java.io.OutputStreamWriter(
|
|
new java.io.FileOutputStream(filename),
|
|
encoding
|
|
)
|
|
);
|
|
|
|
try {
|
|
out.write(data);
|
|
}
|
|
finally {
|
|
out.flush();
|
|
out.close();
|
|
}
|
|
};
|
|
exports.writeFile = asyncify(exports.writeFileSync);
|
|
|
|
exports.rmdirSync = function rmdirSync(_path) {
|
|
throw new Error('not implemented');
|
|
};
|
|
exports.rmdir = asyncify(exports.rmdirSync);
|
|
|
|
exports.unlinkSync = function unlinkSync(_path) {
|
|
throw new Error('not implemented');
|
|
};
|
|
exports.unlink = asyncify(exports.unlinkSync);
|