mirror of https://github.com/requarks/wiki
parent
d4e0b74975
commit
5189ec3835
@ -0,0 +1,15 @@
|
|||||||
|
client/js
|
||||||
|
client/scss
|
||||||
|
coverage
|
||||||
|
data
|
||||||
|
logs
|
||||||
|
node_modules
|
||||||
|
npm
|
||||||
|
repo
|
||||||
|
test
|
||||||
|
.*
|
||||||
|
*.log
|
||||||
|
*.tar.gz
|
||||||
|
*.zip
|
||||||
|
config.yml
|
||||||
|
fuse.js
|
@ -0,0 +1,7 @@
|
|||||||
|
**/node_modules/**
|
||||||
|
**/*.min.js
|
||||||
|
assets/**
|
||||||
|
coverage/**
|
||||||
|
repo/**
|
||||||
|
data/**
|
||||||
|
logs/**
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,20 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
let logic = document.documentElement.dataset.logic
|
||||||
|
|
||||||
|
switch (logic) {
|
||||||
|
case 'login':
|
||||||
|
require('./scss/login.scss')
|
||||||
|
require('./js/login.js')
|
||||||
|
break
|
||||||
|
case 'configure':
|
||||||
|
require('./scss/configure.scss')
|
||||||
|
require('./js/configure.js')
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
require('./node_modules/highlight.js/styles/tomorrow.css')
|
||||||
|
require('./node_modules/simplemde/dist/simplemde.min.css')
|
||||||
|
require('./scss/app.scss')
|
||||||
|
require('./js/app.js')
|
||||||
|
break
|
||||||
|
}
|
@ -0,0 +1,127 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FUSEBOX
|
||||||
|
*
|
||||||
|
* Client & Server compiler / watcher
|
||||||
|
*/
|
||||||
|
|
||||||
|
const fsbx = require('fuse-box')
|
||||||
|
const colors = require('colors/safe')
|
||||||
|
const _ = require('lodash')
|
||||||
|
|
||||||
|
// Parse cmd arguments
|
||||||
|
|
||||||
|
const args = require('yargs')
|
||||||
|
.option('d', {
|
||||||
|
alias: 'dev',
|
||||||
|
describe: 'Start in Developer mode',
|
||||||
|
type: 'boolean'
|
||||||
|
})
|
||||||
|
.option('c', {
|
||||||
|
alias: 'configure',
|
||||||
|
describe: 'Use Configure mode',
|
||||||
|
type: 'boolean',
|
||||||
|
implies: 'd'
|
||||||
|
})
|
||||||
|
.help('h')
|
||||||
|
.alias('h', 'help')
|
||||||
|
.argv
|
||||||
|
|
||||||
|
if (args.d) {
|
||||||
|
// =============================================
|
||||||
|
// DEVELOPER MODE
|
||||||
|
// =============================================
|
||||||
|
|
||||||
|
console.info(colors.bgWhite.black(' Starting Fuse in DEVELOPER mode... '))
|
||||||
|
|
||||||
|
const nodemon = require('nodemon')
|
||||||
|
|
||||||
|
// Client
|
||||||
|
|
||||||
|
const fuse = fsbx.FuseBox.init({
|
||||||
|
homeDir: './client',
|
||||||
|
outFile: './assets/js/bundle.min.js',
|
||||||
|
alias: {
|
||||||
|
vue: 'vue/dist/vue.js'
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
[ fsbx.SassPlugin({ includePaths: ['../core'] }), fsbx.CSSPlugin() ],
|
||||||
|
fsbx.BabelPlugin({ comments: false, presets: ['es2015'] }),
|
||||||
|
fsbx.JSONPlugin()
|
||||||
|
],
|
||||||
|
debug: false,
|
||||||
|
log: true
|
||||||
|
})
|
||||||
|
|
||||||
|
fuse.devServer('>index.js', {
|
||||||
|
port: 4444,
|
||||||
|
httpServer: false
|
||||||
|
})
|
||||||
|
|
||||||
|
// Server
|
||||||
|
|
||||||
|
_.delay(() => {
|
||||||
|
if (args.c) {
|
||||||
|
nodemon({
|
||||||
|
exec: 'node wiki configure',
|
||||||
|
ignore: ['assets/', 'client/', 'data/', 'repo/', 'tests/'],
|
||||||
|
ext: 'js json',
|
||||||
|
watch: [
|
||||||
|
'configure.js'
|
||||||
|
],
|
||||||
|
env: { 'NODE_ENV': 'development' }
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
nodemon({
|
||||||
|
script: './server.js',
|
||||||
|
args: [],
|
||||||
|
ignore: ['assets/', 'client/', 'data/', 'repo/', 'tests/'],
|
||||||
|
ext: 'js json',
|
||||||
|
watch: [
|
||||||
|
'controllers',
|
||||||
|
'libs',
|
||||||
|
'locales',
|
||||||
|
'middlewares',
|
||||||
|
'models',
|
||||||
|
'agent.js',
|
||||||
|
'server.js'
|
||||||
|
],
|
||||||
|
env: { 'NODE_ENV': 'development' }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}, 1000)
|
||||||
|
} else {
|
||||||
|
// =============================================
|
||||||
|
// BUILD MODE
|
||||||
|
// =============================================
|
||||||
|
|
||||||
|
console.info(colors.bgWhite.black(' Starting Fuse in BUILD mode... '))
|
||||||
|
|
||||||
|
const fuse = fsbx.FuseBox.init({
|
||||||
|
homeDir: './client',
|
||||||
|
outFile: './assets/js/bundle.min.js',
|
||||||
|
plugins: [
|
||||||
|
[ fsbx.SassPlugin({ outputStyle: 'compressed', includePaths: ['./node_modules/requarks-core'] }), fsbx.CSSPlugin() ],
|
||||||
|
fsbx.BabelPlugin({
|
||||||
|
config: {
|
||||||
|
comments: false,
|
||||||
|
presets: ['es2015']
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
fsbx.JSONPlugin(),
|
||||||
|
fsbx.UglifyJSPlugin({
|
||||||
|
compress: { unused: false }
|
||||||
|
})
|
||||||
|
],
|
||||||
|
debug: false,
|
||||||
|
log: true
|
||||||
|
})
|
||||||
|
|
||||||
|
fuse.bundle('>index.js').then(() => {
|
||||||
|
console.info(colors.green.bold('Assets compilation + bundling completed.'))
|
||||||
|
}).catch(err => {
|
||||||
|
console.error(colors.green.red(' X Bundle compilation failed! ' + err.message))
|
||||||
|
process.exit(1)
|
||||||
|
})
|
||||||
|
}
|
@ -1,3 +0,0 @@
|
|||||||
'use strict'
|
|
||||||
|
|
||||||
// TODO
|
|
@ -0,0 +1,77 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
const fs = require('fs-extra')
|
||||||
|
const colors = require('colors')
|
||||||
|
|
||||||
|
expect.extend({
|
||||||
|
/**
|
||||||
|
* Expect ESLint results to have no errors
|
||||||
|
* @param {*} received ESLint results
|
||||||
|
* @param {*} argument Arguments
|
||||||
|
* @returns {object} Matcher result
|
||||||
|
*/
|
||||||
|
toESLint (received, argument) {
|
||||||
|
if (received && received.errorCount > 0) {
|
||||||
|
let errorMsgBuf = []
|
||||||
|
for (let i = 0; i < received.results.length; i++) {
|
||||||
|
const result = received.results[i]
|
||||||
|
if (result.errorCount <= 0) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let x = 0; x < result.messages.length; x++) {
|
||||||
|
const m = result.messages[x]
|
||||||
|
errorMsgBuf.push(colors.grey(`└── ${result.filePath}\t${m.line}:${m.column}\t${m.message}`))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (errorMsgBuf.length > 0) {
|
||||||
|
return {
|
||||||
|
message: () => (errorMsgBuf.join(`\n`)),
|
||||||
|
pass: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
pass: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* Expect PugLint results to have no errors
|
||||||
|
* @param {*} received PugLint results
|
||||||
|
* @param {*} argument Arguments
|
||||||
|
* @returns {object} Matcher result
|
||||||
|
*/
|
||||||
|
toPugLint (received, argument) {
|
||||||
|
if (received && received.length > 0) {
|
||||||
|
let errorMsgBuf = []
|
||||||
|
for (let i = 0; i < received.length; i++) {
|
||||||
|
errorMsgBuf.push(colors.grey(`└── ${received[i].message}`))
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
message: () => (errorMsgBuf.join(`\n`)),
|
||||||
|
pass: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
pass: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('Code Linting', () => {
|
||||||
|
it('should pass ESLint validation', () => {
|
||||||
|
const CLIEngine = require('eslint').CLIEngine
|
||||||
|
const cli = new CLIEngine()
|
||||||
|
let report = cli.executeOnFiles(['**/*.js'])
|
||||||
|
expect(report).toESLint()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should pass PugLint validation', () => {
|
||||||
|
const PugLint = require('pug-lint')
|
||||||
|
const lint = new PugLint()
|
||||||
|
const pugConfig = fs.readJsonSync('.pug-lintrc.json')
|
||||||
|
lint.configure(pugConfig)
|
||||||
|
let report = lint.checkPath('./views')
|
||||||
|
expect(report).toPugLint()
|
||||||
|
})
|
||||||
|
})
|
@ -0,0 +1,39 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
const colors = require('colors')
|
||||||
|
|
||||||
|
expect.extend({
|
||||||
|
/**
|
||||||
|
* Expect Snyk results to have no errors
|
||||||
|
* @param {*} received Snyk results
|
||||||
|
* @param {*} argument Arguments
|
||||||
|
* @returns {object} Matcher result
|
||||||
|
*/
|
||||||
|
toPassSnyk (received, argument) {
|
||||||
|
if (received && received.ok === false) {
|
||||||
|
let errorMsgBuf = []
|
||||||
|
for (let i = 0; i < received.vulnerabilities.length; i++) {
|
||||||
|
const result = received.vulnerabilities[i]
|
||||||
|
let vulnPath = result.from.slice(1).join(' > ')
|
||||||
|
errorMsgBuf.push(colors.red(`└──[${result.severity}] ${result.packageName}\t${result.title}`))
|
||||||
|
errorMsgBuf.push(colors.grey(`\t${vulnPath}`))
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
message: () => (errorMsgBuf.join(`\n`)),
|
||||||
|
pass: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
pass: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('Security', () => {
|
||||||
|
it('should pass Snyk test', () => {
|
||||||
|
const snyk = require('snyk').test
|
||||||
|
return snyk('./').then(report => {
|
||||||
|
expect(report).toPassSnyk()
|
||||||
|
})
|
||||||
|
}, 20000)
|
||||||
|
})
|
Loading…
Reference in new issue