diff --git a/.gitignore b/.gitignore index 387ff62..d80c229 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ docSet.dsidx reference.html +node_modules/ \ No newline at end of file diff --git a/README.md b/README.md index 8b107da..0dcb81d 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,12 @@ # joi.docset -Just a simple dash docset for joi (https://github.com/spumko/joi). Available through dashs "user contributed" channel ;-) +Just a simple dash docset for joi (https://github.com/hapijs/joi). Available through dashs "user contributed" channel ;-) ## Generate Docset +This requires [Node.js](https://nodejs.org/en/download/) and [sqlite](https://www.sqlite.org/) to be installed. + ```bash +npm install node generate tar --exclude='.DS_Store' -cvzf ./releases/joi-XXX.tgz joi.docset -``` \ No newline at end of file +``` diff --git a/generate.js b/generate.js index 6a23b47..e3e25d8 100644 --- a/generate.js +++ b/generate.js @@ -5,12 +5,14 @@ var sqlite3 = require('sqlite3'); var _ = require('lodash'); var mkdirp = require('mkdirp'); var docsetName = 'joi.docset'; -var referenceUrl = 'https://raw.githubusercontent.com/hapijs/joi/master/README.md'; +var referenceUrl = 'https://raw.githubusercontent.com/hapijs/joi/master/API.md'; var Path = require('path'); var documentsPath = Path.join(__dirname, './' + docsetName + '/Contents/Resources/Documents/'); var dbFile = Path.join(__dirname, './' + docsetName + '/Contents/Resources/docSet.dsidx'); -var db; +var db; + +var joiVersion = "NO-VERSION"; var prepareIndexEntry = function (method, anchor) { var type = 'Guide'; @@ -34,7 +36,6 @@ var prepareIndexEntry = function (method, anchor) { type = 'Constructor'; } - if (method.indexOf('new ') === 0) { type = 'Constructor'; } @@ -66,8 +67,29 @@ var fetchRawMarkdown = function (url) { }; var removeHeader = function (markdown) { + return Q.Promise(function (resolve, reject) { + var replaced = false; + markdown = markdown.replace(/^\s*?(# [\d\.xX]* API Reference)\s*?\s*?\s*?/, function (match, $1) { + replaced = true; + return $1; + }); + if (replaced) { + return resolve(markdown); + } + else { + return reject(new Error('Unable to match header for removal')); + } + }); +}; + +var echoVersion = function (markdown) { return Q.Promise(function (resolve) { - markdown = "# Joi Reference" + markdown.split('')[1]; + var versionMatcher = /^# ([\d\.xX]*)/g; + var match = versionMatcher.exec(markdown); + if (match) { + console.log('Joi version: '+match[1]); + joiVersion = match[1]; + } resolve(markdown); }); }; @@ -97,7 +119,6 @@ var createSearchIndex = function (markdown) { }); }; - var generateHtml = function (markdown) { var payload = { text: markdown, @@ -146,7 +167,7 @@ var addDashAnchors = function (text) { return resolve(text); }); }); -} +}; var wrapInDocument = function (text) { return Q.Promise(function (resolve) { @@ -170,23 +191,20 @@ var writeFile = function (text) { }); }; - - - mkdirp(documentsPath, function (err) { fs.unlink(dbFile, function(error) { if (!error) { console.log('Previous database deleted!'); - }; + } - db = new sqlite3.Database(dbFile); + db = new sqlite3.Database(dbFile); db.serialize(function () { db.run("CREATE TABLE searchIndex(id INTEGER PRIMARY KEY, name TEXT, type TEXT, path TEXT);"); db.run("CREATE UNIQUE INDEX anchor ON searchIndex (name, type, path);"); - fetchRawMarkdown(referenceUrl) .then(removeHeader) + .then(echoVersion) .then(createSearchIndex) .then(generateHtml) .then(replaceUserContent) @@ -194,7 +212,7 @@ mkdirp(documentsPath, function (err) { .then(wrapInDocument) .then(writeFile) .then(function (markdown) { - console.log('Generation completed!'); + console.log('Generation of joi.docset version '+joiVersion+' completed!'); }).catch(function (e) { console.log(e); }); diff --git a/package.json b/package.json index 9dba0a9..95d6c4d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "joi-docset", - "version": "1.0.0", + "version": "1.1.0", "description": "Dash docset for joi", "main": "generate.js", "scripts": { @@ -13,6 +13,6 @@ "mkdirp": "^0.5.0", "q": "^1.0.1", "request": "^2.36.0", - "sqlite3": "^2.2.3" + "sqlite3": "^3.0.10" } } diff --git a/releases/joi-9.0.1.tgz b/releases/joi-9.0.1.tgz new file mode 100644 index 0000000..9cb9d30 Binary files /dev/null and b/releases/joi-9.0.1.tgz differ