mirror of
https://github.com/abrendan/MicDropMessages.git
synced 2025-06-16 20:55:00 +02:00
132 lines
3.2 KiB
JavaScript
132 lines
3.2 KiB
JavaScript
const filters = require("./docs/filters.js");
|
|
const files = require("./docs/files.js");
|
|
const sass = require("node-sass");
|
|
|
|
const fs = require("fs");
|
|
|
|
function extract(src) {
|
|
const data = {};
|
|
const readme = fs.readFileSync(src + "README.md", "utf-8");
|
|
data.title = (readme.match(/^\#\s(.+)/gm) || []).map(one =>
|
|
one.replace(/^\#\s/, "")
|
|
)[0];
|
|
if (!data.title)
|
|
throw new Error("Your file " + file + "/README.md has no h1 in markdown");
|
|
data.sections = (readme.match(/^\#\#[\s](.+)/gm) || []).map(one =>
|
|
one.replace(/^\#\#\s/, "")
|
|
);
|
|
return data;
|
|
}
|
|
|
|
function getInfo(src) {
|
|
delete require.cache[require.resolve(src)];
|
|
const info = {};
|
|
if (/documentation/.test(src)) {
|
|
const base = { title: "Introduction", url: "/documentation/" };
|
|
info.introduction = Object.assign({}, extract(src), base);
|
|
}
|
|
return require(src).reduce((obj, one) => {
|
|
return Object.assign({}, obj, { [one]: extract(src + one + "/") });
|
|
}, info);
|
|
}
|
|
|
|
// Generate the documentation final:origin pairs
|
|
const transform = dir =>
|
|
files(__dirname + "/" + dir)
|
|
.filter(str => /\.html\.pug$/.test(str))
|
|
.reduce((docs, one) => {
|
|
docs[one.replace(/\.pug$/, "")] = one;
|
|
return docs;
|
|
}, {});
|
|
|
|
// This builds the library itself
|
|
module.exports = function(grunt) {
|
|
// Configuration
|
|
grunt.initConfig({
|
|
bytesize: {
|
|
all: {
|
|
src: ["docs/assets/style.min.css", "docs/assets/javascript.js"]
|
|
}
|
|
},
|
|
|
|
jshint: {
|
|
options: { esversion: 6 },
|
|
src: ["Gruntfile.js", "server.js", "src"]
|
|
},
|
|
|
|
// Launch a small static server
|
|
connect: {
|
|
server: {
|
|
options: {
|
|
port: 3000,
|
|
hostname: "*",
|
|
base: "docs",
|
|
livereload: true,
|
|
useAvailablePort: false
|
|
}
|
|
}
|
|
},
|
|
|
|
sass: {
|
|
dist: {
|
|
options: { implementation: sass, outputStyle: "compressed" },
|
|
files: { "docs/assets/style.min.css": "docs/assets/style.scss" }
|
|
}
|
|
},
|
|
|
|
pug: {
|
|
compile: {
|
|
options: {
|
|
client: false,
|
|
data: file => {
|
|
return {
|
|
require,
|
|
file,
|
|
tutorials: getInfo("./docs/tutorials/"),
|
|
documentation: getInfo("./docs/documentation/"),
|
|
slug: str => str.toLowerCase().replace(/[^\w]+/g, "-")
|
|
};
|
|
},
|
|
filters: filters
|
|
},
|
|
files: transform("docs")
|
|
}
|
|
},
|
|
|
|
watch: {
|
|
scripts: {
|
|
files: [
|
|
"Gruntfile.js",
|
|
|
|
// Docs
|
|
"docs/**/*.*",
|
|
"README.md",
|
|
|
|
// For testing:
|
|
"server.js",
|
|
"src/**/*.js",
|
|
|
|
// To bump versions
|
|
"package.js"
|
|
],
|
|
tasks: ["default"],
|
|
options: {
|
|
spawn: false,
|
|
livereload: true
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
grunt.loadNpmTasks("grunt-contrib-connect");
|
|
grunt.loadNpmTasks("grunt-contrib-jshint");
|
|
grunt.loadNpmTasks("grunt-contrib-pug");
|
|
grunt.loadNpmTasks("grunt-contrib-watch");
|
|
grunt.loadNpmTasks("grunt-bytesize");
|
|
grunt.loadNpmTasks("grunt-sass");
|
|
|
|
grunt.registerTask("build", ["sass", "pug"]);
|
|
grunt.registerTask("test", ["bytesize"]);
|
|
grunt.registerTask("default", ["build", "test", "connect"]);
|
|
};
|