Merge pull request #19 from EbookFoundation/staging

merge staging into standardjs
pull/20/head
Theodore Kluge 2018-11-07 15:17:56 -05:00 committed by GitHub
commit 33db934cf6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
51 changed files with 203 additions and 262 deletions

View File

@ -1,4 +1,5 @@
language: node_js
warnings_are_errors: false
node_js:
- "node"
deploy:
@ -11,4 +12,7 @@ deploy:
env: "example-app-environment"
bucket_name: "the-target-S3-bucket"
#script: node testfile
before_script:
- npm install
script: npm run lint && npm run custom-tests && echo 'Done.'

View File

@ -12,12 +12,10 @@
* For more information see:
* https://sailsjs.com/anatomy/Gruntfile.js
*/
module.exports = function(grunt) {
var loadGruntTasks = require('sails-hook-grunt/accessible/load-grunt-tasks');
module.exports = function (grunt) {
var loadGruntTasks = require('sails-hook-grunt/accessible/load-grunt-tasks')
// Load Grunt task configurations (from `tasks/config/`) and Grunt
// task registrations (from `tasks/register/`).
loadGruntTasks(__dirname, grunt);
};
loadGruntTasks(__dirname, grunt)
}

View File

@ -26,4 +26,3 @@ Note: Generators are usually run using the globally-installed `sails` CLI (comm
-->
[![Build Status](https://travis-ci.org/miacona96/RoE-pipe.svg?branch=master)](https://travis-ci.org/miacona96/RoE-pipe)

View File

@ -114,7 +114,7 @@ module.exports = {
}
}
passportHelper.callback(req, res, function (err, user, info, status) {
passportHelper.callback(req, res, (err, user, info, status) => {
if (err || !user) {
sails.log.warn(user, err, info, status)
if (!err && info) {
@ -123,7 +123,7 @@ module.exports = {
return negotiateError(err)
}
req.login(user, function (err) {
req.login(user, (err) => {
if (err) {
sails.log.warn(err)
return negotiateError(err)

View File

@ -12,8 +12,8 @@ module.exports = {
const host = req.hostname
let result
if (!host) throw new Error('Missing hostname')
if (!body) throw new Error('Missing body')
if (!host) { throw new Error('Missing hostname') }
if (!body) { throw new Error('Missing body') }
const bookExists = await Book.findOne(body)
@ -36,7 +36,7 @@ module.exports = {
list: async function (req, res) {
try {
const body = req.allParams()
if (!body) throw new Error('Missing parameters')
if (!body) { throw new Error('Missing parameters') }
const books = await Book.find(body)

View File

@ -2,6 +2,7 @@ module.exports = {
show: function (req, res) {
res.view('pages/temp', {
email: req.user.email
})
}
}

View File

@ -11,10 +11,11 @@ module.exports = {
*/
create: async function (req, res, next) {
const passportHelper = await sails.helpers.passport()
passportHelper.protocols.local.register(req.body, function (err, user) {
if (err) return res.status(500).json({
error: err.toString()
})
passportHelper.protocols.local.register(req.body, (err, user) => {
if (err) {
return res.status(500).json({
error: err.toString() })
}
res.json(user)
})
@ -22,10 +23,12 @@ module.exports = {
update: async function (req, res, next) {
const passportHelper = await sails.helpers.passport()
passportHelper.protocols.local.update(req.body, function (err, user) {
if (err) return res.status(500).json({
error: err.toString()
})
passportHelper.protocols.local.update(req.body, (err, user) => {
if (err) {
return res.status(500).json({
error: err.toString()
})
}
res.json(user)
})

View File

@ -19,12 +19,12 @@ module.exports = {
}
const passport = require('passport')
passport.serializeUser(function (user, next) {
passport.serializeUser((user, next) => {
next(null, user.id)
})
passport.deserializeUser(function (id, next) {
passport.deserializeUser((id, next) => {
return User.findOne({id: id})
.then(function (user) {
.then((user) => {
next(null, user)
return user
}).catch(next)
@ -72,7 +72,7 @@ function PassportHelper () {
const strategies = sails.config.passport
const provider = req.param('provider')
if (!_.has(strategies, provider)) return res.redirect('/login')
if (!_.has(strategies, provider)) { return res.redirect('/login') }
passport.authenticate(provider, {})(req, res, req.next)
}
@ -89,7 +89,7 @@ function PassportHelper () {
} else if (action === 'disconnect' && req.user) {
this.protocols.local.disconnect(req, res, next)
} else {
next(new Error('Invalid action'))
return next(new Error('Invalid action'))
}
} else {
if (action === 'disconnect' && req.user) {
@ -111,8 +111,8 @@ function PassportHelper () {
}
// if the profile object from passport has an email, use it
if (profile.emails && profile.emails[0]) userAttrs.email = profile.emails[0].value
if (!userAttrs.email) return next(new Error('No email available'))
if (profile.emails && profile.emails[0]) { userAttrs.email = profile.emails[0].value }
if (!userAttrs.email) { return next(new Error('No email available')) }
const pass = await Passport.findOne({
provider,
@ -128,14 +128,14 @@ function PassportHelper () {
...q,
user: user.id
})
next(null, user)
return next(null, user)
} else { // existing user logging in
if (_.has(q, 'tokens') && q.tokens !== passport.tokens) {
passport.tokens = q.tokens
}
await passport.save()
user = User.findOne(passport.user)
next(null, user)
return next(null, user)
}
} else { // user logged in and trying to add new Passport
if (!passport) {
@ -143,9 +143,9 @@ function PassportHelper () {
...q,
user: req.user.id
})
next(null, req.user)
return next(null, req.user)
} else { // no action, user already logged in and passport exists
next(null, user)
return next(null, user)
}
}
}
@ -162,7 +162,7 @@ function PassportHelper () {
next(null, user)
return user
} catch (e) {
next(e)
return next(e)
}
}
this.getPassport = function () {

View File

@ -20,17 +20,16 @@ module.exports = {
title: {type: 'string', required: true},
author: {type: 'string'},
isbn: {type: 'string'},
version: {type: 'string'},
version: {type: 'string'}
// ╔═╗╔╦╗╔╗ ╔═╗╔╦╗╔═╗
// ║╣ ║║║╠╩╗║╣ ║║╚═╗
// ╚═╝╩ ╩╚═╝╚═╝═╩╝╚═╝
// ╔═╗╔═╗╔═╗╔═╗╔═╗╦╔═╗╔╦╗╦╔═╗╔╗╔╔═╗
// ╠═╣╚═╗╚═╗║ ║║ ║╠═╣ ║ ║║ ║║║║╚═╗
// ╩ ╩╚═╝╚═╝╚═╝╚═╝╩╩ ╩ ╩ ╩╚═╝╝╚╝╚═╝
},
}
}

View File

@ -13,45 +13,45 @@ class AjaxError extends Error {
export default class Ajax {
static async get (opts) {
if (!opts) opts = {}
if (!opts) { opts = {} }
opts.method = 'get'
return Ajax.ajax(opts)
}
static async post (opts) {
if (!opts) opts = {}
if (!opts) { opts = {} }
opts.method = 'post'
return Ajax.ajax(opts)
}
static async put (opts) {
if (!opts) opts = {}
if (!opts) { opts = {} }
opts.method = 'put'
return Ajax.ajax(opts)
}
static async patch (opts) {
if (!opts) opts = {}
if (!opts) { opts = {} }
opts.method = 'patch'
return Ajax.ajax(opts)
}
static async delete (opts) {
if (!opts) opts = {}
if (!opts) { opts = {} }
opts.method = 'delete'
return Ajax.ajax(opts)
}
static async head (opts) {
if (!opts) opts = {}
if (!opts) { opts = {} }
opts.method = 'head'
return Ajax.ajax(opts)
}
static async options (opts) {
if (!opts) opts = {}
if (!opts) { opts = {} }
opts.method = 'options'
return Ajax.ajax(opts)
}
static ajax (opts) {
return new Promise((resolve, reject) => {
if (!opts) reject(new Error('Missing required options parameter.'))
if (!opts) { reject(new Error('Missing required options parameter.')) }
if (opts.method) {
if (!['get', 'post', 'put', 'patch', 'delete', 'head', 'options'].includes(opts.method.toLowerCase())) reject(new Error('opts.method must be one of: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS.'))
if (!['get', 'post', 'put', 'patch', 'delete', 'head', 'options'].includes(opts.method.toLowerCase())) { reject(new Error('opts.method must be one of: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS.')) }
opts.method = opts.method.toUpperCase()
}
@ -74,7 +74,7 @@ export default class Ajax {
}
xhr.onload = () => {
if (xhr.status !== 200) return xhr.onerror()
if (xhr.status !== 200) { return xhr.onerror() }
var data = xhr.response
resolve({
data,
@ -110,9 +110,9 @@ export default class Ajax {
xhr.open(opts.method || 'GET', opts.url + qs || window.location.href)
if (opts.headers) {
for (let key in opts.headers) xhr.setRequestHeader(key, opts.headers[key])
for (let key in opts.headers) { xhr.setRequestHeader(key, opts.headers[key]) }
}
if (ajaxcfg.access_token && !(opts.headers || {}).Authorization) xhr.setRequestHeader('Authorization', 'Bearer ' + ajaxcfg.access_token)
if (ajaxcfg.access_token && !(opts.headers || {}).Authorization) { xhr.setRequestHeader('Authorization', 'Bearer ' + ajaxcfg.access_token) }
xhr.send(fd)
})
}
@ -132,8 +132,8 @@ export default class Ajax {
}
// try original request
xhr.onload = () => {
if (xhr.status !== 200) return xhr.onerror()
if (ajaxcfg.refresh) ajaxcfg.refresh(xhr.response)
if (xhr.status !== 200) { return xhr.onerror() }
if (ajaxcfg.refresh) { ajaxcfg.refresh(xhr.response) }
var json = JSON.parse(xhr.response)
ajaxcfg.access_token = json.access_token
ajaxcfg.refresh_token = json.refresh_token
@ -149,11 +149,11 @@ export default class Ajax {
})
}
static setTokenData (tokens) {
if (!tokens) throw new Error('Missing tokens.')
if (!tokens.access_token && !tokens.refresh_token && !tokens.refresh_url) throw new Error('Missing at least one of: access_token, refresh_token, refresh_url.')
if (tokens.access_token) ajaxcfg.access_token = tokens.access_token
if (tokens.refresh_token) ajaxcfg.refresh_token = tokens.refresh_token
if (tokens.refresh_url) ajaxcfg.refresh_url = tokens.refresh_url
if (!tokens) { throw new Error('Missing tokens.') }
if (!tokens.access_token && !tokens.refresh_token && !tokens.refresh_url) { throw new Error('Missing at least one of: access_token, refresh_token, refresh_url.') }
if (tokens.access_token) { ajaxcfg.access_token = tokens.access_token }
if (tokens.refresh_token) { ajaxcfg.refresh_token = tokens.refresh_token }
if (tokens.refresh_url) { ajaxcfg.refresh_url = tokens.refresh_url }
return true
}
static onRefresh (func) {

View File

@ -19,7 +19,6 @@ module.exports.blueprints = {
// actions: false,
/***************************************************************************
* *
* Automatically expose RESTful routes for your models? *
@ -28,7 +27,6 @@ module.exports.blueprints = {
// rest: true,
/***************************************************************************
* *
* Automatically expose CRUD "shortcut" routes to GET requests? *
@ -38,4 +36,4 @@ module.exports.blueprints = {
// shortcuts: true,
};
}

View File

@ -9,8 +9,7 @@
* https://sailsjs.com/config/bootstrap
*/
module.exports.bootstrap = async function(done) {
module.exports.bootstrap = async function (done) {
// By convention, this is a good place to set up fake data during development.
//
// For example:
@ -29,6 +28,5 @@ module.exports.bootstrap = async function(done) {
// Don't forget to trigger `done()` when this bootstrap function's logic is finished.
// (otherwise your server will never lift, since it's waiting on the bootstrap)
return done();
};
return done()
}

View File

@ -20,4 +20,4 @@ module.exports.custom = {
// stripeSecret: 'sk_test_Zzd814nldl91104qor5911gjald',
// …
};
}

View File

@ -15,7 +15,6 @@
module.exports.datastores = {
/***************************************************************************
* *
* Your app's default datastore. *
@ -51,7 +50,6 @@ module.exports.datastores = {
// adapter: 'sails-mysql',
// url: 'mysql://user:password@host:port/database',
},
}
};
}

View File

@ -238,8 +238,8 @@ module.exports = {
* *
***************************************************************************/
onlyAllowOrigins: [
'https://ec2-18-219-76-43.us-east-2.compute.amazonaws.com',
],
'https://ec2-18-219-76-43.us-east-2.compute.amazonaws.com'
]
/***************************************************************************
* *

View File

@ -47,6 +47,6 @@ module.exports.globals = {
* *
****************************************************************************/
sails: true,
sails: true
};
}

View File

@ -53,7 +53,7 @@ module.exports.http = {
],
rateLimit: rateLimiter,
passportInit: require('passport').initialize(),
passportSession: require('passport').session(),
passportSession: require('passport').session()
/***************************************************************************
* *

View File

@ -20,7 +20,7 @@ module.exports.i18n = {
* *
***************************************************************************/
locales: ['en', 'es', 'fr', 'de'],
locales: ['en', 'es', 'fr', 'de']
/****************************************************************************
* *
@ -42,4 +42,4 @@ module.exports.i18n = {
// localesDirectory: 'config/locales'
};
}

View File

@ -26,4 +26,4 @@ module.exports.log = {
// level: 'info'
};
}

View File

@ -15,7 +15,6 @@
module.exports.models = {
/***************************************************************************
* *
* Whether the `.create()` and `.update()` model methods should ignore *
@ -37,7 +36,6 @@ module.exports.models = {
// schema: true,
/***************************************************************************
* *
* How and whether Sails will attempt to automatically rebuild the *
@ -55,7 +53,6 @@ module.exports.models = {
// migrate: 'alter',
/***************************************************************************
* *
* Base attributes that are included in all of your models by default. *
@ -69,10 +66,10 @@ module.exports.models = {
***************************************************************************/
attributes: {
createdAt: { type: 'number', autoCreatedAt: true, },
updatedAt: { type: 'number', autoUpdatedAt: true, },
id: { type: 'number', autoIncrement: true, },
//--------------------------------------------------------------------------
createdAt: { type: 'number', autoCreatedAt: true },
updatedAt: { type: 'number', autoUpdatedAt: true },
id: { type: 'number', autoIncrement: true }
// --------------------------------------------------------------------------
// /\ Using MongoDB?
// || Replace `id` above with this instead:
//
@ -82,10 +79,9 @@ module.exports.models = {
//
// Plus, don't forget to configure MongoDB as your default datastore:
// https://sailsjs.com/docs/tutorials/using-mongo-db
//--------------------------------------------------------------------------
// --------------------------------------------------------------------------
},
/******************************************************************************
* *
* The set of DEKs (data encryption keys) for at-rest encryption. *
@ -104,7 +100,6 @@ module.exports.models = {
default: 'nuF29j3StsGhRTut9dIrCxCNyYegcwH30FxnZ3kkdiA='
},
/***************************************************************************
* *
* Whether or not implicit records for associations should be cleaned up *
@ -120,5 +115,4 @@ module.exports.models = {
cascadeOnDestroy: true
};
}

View File

@ -24,7 +24,7 @@ module.exports.protocols = {
const user = await User.findOne({
email: identifier
})
if (!user) throw new Error('an account with that email was not found')
if (!user) { throw new Error('an account with that email was not found') }
const passport = await Passport.findOne({
protocol: 'local',
@ -32,7 +32,7 @@ module.exports.protocols = {
})
if (passport) {
const res = await Passport.validatePassword(password, passport)
if (!res) throw new Error('incorrect password')
if (!res) { throw new Error('incorrect password') }
return next(null, user)
} else {
throw new Error('that account does not have password login enabled')
@ -45,7 +45,7 @@ module.exports.protocols = {
try {
const token = generateToken()
const password = user.password
if (!password.length) throw new Error('password cannot be blank')
if (!password.length) { throw new Error('password cannot be blank') }
delete user.password
const newUser = await User.create(user).fetch()

View File

@ -66,17 +66,14 @@ module.exports.routes = {
'POST /api/publish': 'BooksController.publish',
'GET /api/books': 'BooksController.list',
'GET /api/me': 'UserController.me',
'GET /api/me': 'UserController.me'
// ╦ ╦╔═╗╔╗ ╦ ╦╔═╗╔═╗╦╔═╔═╗
// ║║║║╣ ╠╩╗╠═╣║ ║║ ║╠╩╗╚═╗
// ╚╩╝╚═╝╚═╝╩ ╩╚═╝╚═╝╩ ╩╚═╝
// ╔╦╗╦╔═╗╔═╗
// ║║║║╚═╗║
// ╩ ╩╩╚═╝╚═╝
}

View File

@ -34,7 +34,6 @@ module.exports.security = {
// allowCredentials: false,
// },
/****************************************************************************
* *
* By default, Sails' built-in CSRF protection is disabled to facilitate *
@ -51,4 +50,4 @@ module.exports.security = {
// csrf: false
};
}

View File

@ -18,8 +18,7 @@ module.exports.session = {
* of your users, forcing them to log in again. *
* *
***************************************************************************/
secret: 'b7f0374251c4d79227067c286fe97ea5',
secret: 'b7f0374251c4d79227067c286fe97ea5'
/***************************************************************************
* *
@ -36,4 +35,4 @@ module.exports.session = {
// return !!req.path.match(req._sails.LOOKS_LIKE_ASSET_RX);
// },
};
}

View File

@ -29,7 +29,6 @@ module.exports.sockets = {
// transports: [ 'websocket' ],
/***************************************************************************
* *
* `beforeConnect` *
@ -50,7 +49,6 @@ module.exports.sockets = {
//
// },
/***************************************************************************
* *
* `afterDisconnect` *
@ -68,7 +66,6 @@ module.exports.sockets = {
//
// },
/***************************************************************************
* *
* Whether to expose a 'GET /__getcookie' route that sets an HTTP-only *
@ -78,5 +75,4 @@ module.exports.sockets = {
// grant3rdPartyCookie: true,
};
}

View File

@ -38,4 +38,4 @@ module.exports.views = {
layout: 'layouts/layout'
};
}

View File

@ -11,6 +11,7 @@
"async": "2.0.1",
"base64url": "^3.0.0",
"bcrypt": "^3.0.2",
"eslint-plugin-react": "^7.11.1",
"express-rate-limit": "^3.2.1",
"forever": "^0.15.3",
"grunt": "^1.0.3",
@ -33,6 +34,7 @@
"@babel/preset-react": "^7.0.0",
"babel-loader": "^8.0.4",
"css-loader": "^1.0.1",
"eslint": "^5.8.0",
"html-webpack-plugin": "^3.2.0",
"mini-css-extract-plugin": "^0.4.4",
"node-sass": "^4.9.4",

View File

@ -9,8 +9,7 @@
* https://sailsjs.com/anatomy/tasks/config/babel.js
*
*/
module.exports = function(grunt) {
module.exports = function (grunt) {
grunt.config.set('babel', {
dist: {
options: {
@ -25,7 +24,7 @@ module.exports = function(grunt) {
}
]
}
});
})
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// This Grunt plugin is part of the default asset pipeline in Sails,
@ -50,5 +49,4 @@ module.exports = function(grunt) {
// grunt.loadNpmTasks('grunt-babel');
// ```
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
};
}

View File

@ -9,8 +9,7 @@
* https://sailsjs.com/anatomy/tasks/config/clean.js
*
*/
module.exports = function(grunt) {
module.exports = function (grunt) {
grunt.config.set('clean', {
dev: ['.tmp/public/**'],
build: ['www'],
@ -23,7 +22,7 @@ module.exports = function(grunt) {
'www/templates',
'www/dependencies'
]
});
})
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// This Grunt plugin is part of the default asset pipeline in Sails,
@ -48,5 +47,4 @@ module.exports = function(grunt) {
// grunt.loadNpmTasks('grunt-contrib-clean');
// ```
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
};
}

View File

@ -10,8 +10,7 @@
* https://sailsjs.com/anatomy/tasks/config/coffee.js
*
*/
module.exports = function(grunt) {
module.exports = function (grunt) {
grunt.config.set('coffee', {
dev: {
options: {
@ -27,7 +26,7 @@ module.exports = function(grunt) {
ext: '.js'
}]
}
});
})
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// This Grunt plugin is part of the default asset pipeline in Sails,
@ -52,5 +51,4 @@ module.exports = function(grunt) {
// grunt.loadNpmTasks('grunt-contrib-coffee');
// ```
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
};
}

View File

@ -10,8 +10,7 @@
* https://sailsjs.com/anatomy/tasks/config/concat.js
*
*/
module.exports = function(grunt) {
module.exports = function (grunt) {
grunt.config.set('concat', {
js: {
src: require('../pipeline').jsFilesToInject,
@ -21,7 +20,7 @@ module.exports = function(grunt) {
src: require('../pipeline').cssFilesToInject,
dest: '.tmp/public/concat/production.css'
}
});
})
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// This Grunt plugin is part of the default asset pipeline in Sails,
@ -46,5 +45,4 @@ module.exports = function(grunt) {
// grunt.loadNpmTasks('grunt-contrib-concat');
// ```
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
};
}

View File

@ -9,8 +9,7 @@
* https://sailsjs.com/anatomy/tasks/config/copy.js
*
*/
module.exports = function(grunt) {
module.exports = function (grunt) {
grunt.config.set('copy', {
dev: {
files: [{
@ -35,8 +34,8 @@ module.exports = function(grunt) {
src: ['**/*'],
dest: '.tmp/public/dist'
}]
},
});
}
})
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// This Grunt plugin is part of the default asset pipeline in Sails,
@ -61,5 +60,4 @@ module.exports = function(grunt) {
// grunt.loadNpmTasks('grunt-contrib-copy');
// ```
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
};
}

View File

@ -11,14 +11,13 @@
* https://sailsjs.com/anatomy/tasks/config/cssmin.js
*
*/
module.exports = function(grunt) {
module.exports = function (grunt) {
grunt.config.set('cssmin', {
dist: {
src: ['.tmp/public/concat/production.css'],
dest: '.tmp/public/min/production.min.css'
}
});
})
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// This Grunt plugin is part of the default asset pipeline in Sails,
@ -43,5 +42,4 @@ module.exports = function(grunt) {
// grunt.loadNpmTasks('grunt-contrib-cssmin');
// ```
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
};
}

View File

@ -9,8 +9,7 @@
* https://sailsjs.com/anatomy/tasks/config/hash.js
*
*/
module.exports = function(grunt) {
module.exports = function (grunt) {
grunt.config.set('hash', {
options: {
mapping: '',
@ -18,11 +17,11 @@ module.exports = function(grunt) {
destBasePath: '',
flatten: false,
hashLength: 8,
hashFunction: function(source, encoding){
hashFunction: function (source, encoding) {
if (!source || !encoding) {
throw new Error('Consistency violation: Cannot compute unique hash for production .css/.js cache-busting suffix, because `source` and/or `encoding` are falsey-- but they should be truthy strings! Here they are, respectively:\nsource: '+require('util').inspect(source, {depth:null})+'\nencoding: '+require('util').inspect(encoding, {depth:null}));
throw new Error('Consistency violation: Cannot compute unique hash for production .css/.js cache-busting suffix, because `source` and/or `encoding` are falsey-- but they should be truthy strings! Here they are, respectively:\nsource: ' + require('util').inspect(source, {depth: null}) + '\nencoding: ' + require('util').inspect(encoding, {depth: null}))
}
return require('crypto').createHash('sha1').update(source, encoding).digest('hex');
return require('crypto').createHash('sha1').update(source, encoding).digest('hex')
}
},
js: {
@ -33,7 +32,7 @@ module.exports = function(grunt) {
src: '.tmp/public/min/*.css',
dest: '.tmp/public/hash/'
}
});
})
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// This Grunt plugin is part of the default asset pipeline in Sails,
@ -58,5 +57,4 @@ module.exports = function(grunt) {
// grunt.loadNpmTasks('grunt-hash');
// ```
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
};
}

View File

@ -10,8 +10,7 @@
*
*/
module.exports = function(grunt) {
module.exports = function (grunt) {
grunt.config.set('jst', {
dev: {
@ -26,14 +25,13 @@ module.exports = function(grunt) {
// default interpolation. If you want to parse templates with the default _.template behavior
// (i.e. using <div><%= this.id %></div>), there's no need to overwrite `templateSettings.interpolate`.
files: {
// e.g.
// 'relative/path/from/gruntfile/to/compiled/template/destination' : ['relative/path/to/sourcefiles/**/*.html']
'.tmp/public/jst.js': require('../pipeline').templateFilesToInject
}
}
});
})
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// This Grunt plugin is part of the default asset pipeline in Sails,
@ -58,5 +56,4 @@ module.exports = function(grunt) {
// grunt.loadNpmTasks('grunt-contrib-jst');
// ```
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
};
}

View File

@ -9,8 +9,7 @@
* https://sailsjs.com/anatomy/tasks/config/less.js
*
*/
module.exports = function(grunt) {
module.exports = function (grunt) {
grunt.config.set('less', {
dev: {
files: [{
@ -21,7 +20,7 @@ module.exports = function(grunt) {
ext: '.css'
}]
}
});
})
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// This Grunt plugin is part of the default asset pipeline in Sails,
@ -46,5 +45,4 @@ module.exports = function(grunt) {
// grunt.loadNpmTasks('grunt-contrib-less');
// ```
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
};
}

View File

@ -11,11 +11,9 @@
* https://sailsjs.com/anatomy/tasks/config/sails-linker.js
*
*/
module.exports = function(grunt) {
module.exports = function (grunt) {
grunt.config.set('sails-linker', {
// ╦╔═╗╦ ╦╔═╗╔═╗╔═╗╦═╗╦╔═╗╔╦╗
// ║╠═╣╚╗╔╝╠═╣╚═╗║ ╠╦╝║╠═╝ ║
// ╚╝╩ ╩ ╚╝ ╩ ╩╚═╝╚═╝╩╚═╩╩ ╩
@ -41,7 +39,7 @@ module.exports = function(grunt) {
startTag: '<!--SCRIPTS-->',
endTag: '<!--SCRIPTS END-->',
fileTmpl: '<script src="%s"></script>',
appRoot: '.tmp/public',
appRoot: '.tmp/public'
// relative: true
// ^^ Uncomment this if compiling assets for use in PhoneGap, CDN, etc.
// (but be note that this can break custom font URLs)
@ -72,7 +70,7 @@ module.exports = function(grunt) {
startTag: '<!--SCRIPTS-->',
endTag: '<!--SCRIPTS END-->',
fileTmpl: '<script src="%s"></script>',
appRoot: '.tmp/public',
appRoot: '.tmp/public'
// relative: true
// ^^ Uncomment this if compiling assets for use in PhoneGap, CDN, etc.
// (but be note that this can break custom font URLs)
@ -84,7 +82,6 @@ module.exports = function(grunt) {
}
},
// ╔═╗╔╦╗╦ ╦╦ ╔═╗╔═╗╦ ╦╔═╗╔═╗╔╦╗╔═╗
// ╚═╗ ║ ╚╦╝║ ║╣ ╚═╗╠═╣║╣ ║╣ ║ ╚═╗
// ╚═╝ ╩ ╩ ╩═╝╚═╝╚═╝╩ ╩╚═╝╚═╝ ╩ ╚═╝
@ -111,7 +108,7 @@ module.exports = function(grunt) {
startTag: '<!--STYLES-->',
endTag: '<!--STYLES END-->',
fileTmpl: '<link rel="stylesheet" href="%s">',
appRoot: '.tmp/public',
appRoot: '.tmp/public'
// relative: true
// ^^ Uncomment this if compiling assets for use in PhoneGap, CDN, etc.
// (but be note that this can break custom font URLs)
@ -143,7 +140,7 @@ module.exports = function(grunt) {
startTag: '<!--STYLES-->',
endTag: '<!--STYLES END-->',
fileTmpl: '<link rel="stylesheet" href="%s">',
appRoot: '.tmp/public',
appRoot: '.tmp/public'
// relative: true
// ^^ Uncomment this if compiling assets for use in PhoneGap, CDN, etc.
// (but be note that this can break custom font URLs)
@ -155,7 +152,6 @@ module.exports = function(grunt) {
}
},
// ╔═╗╦═╗╔═╗╔═╗╔═╗╔╦╗╔═╗╦╦ ╔═╗╔╦╗ ╦ ╦╔╦╗╔╦╗╦ ╔╦╗╔═╗╔╦╗╔═╗╦ ╔═╗╔╦╗╔═╗╔═╗
// ╠═╝╠╦╝║╣ ║ ║ ║║║║╠═╝║║ ║╣ ║║ ╠═╣ ║ ║║║║ ║ ║╣ ║║║╠═╝║ ╠═╣ ║ ║╣ ╚═╗
// ╩ ╩╚═╚═╝╚═╝╚═╝╩ ╩╩ ╩╩═╝╚═╝═╩╝ ╩ ╩ ╩ ╩ ╩╩═╝ ╩ ╚═╝╩ ╩╩ ╩═╝╩ ╩ ╩ ╚═╝╚═╝
@ -180,7 +176,7 @@ module.exports = function(grunt) {
startTag: '<!--TEMPLATES-->',
endTag: '<!--TEMPLATES END-->',
fileTmpl: '<script type="text/javascript" src="%s"></script>',
appRoot: '.tmp/public',
appRoot: '.tmp/public'
// relative: true
// ^^ Uncomment this if compiling assets for use in PhoneGap, CDN, etc.
// (but be note that this can break custom font URLs)
@ -190,9 +186,9 @@ module.exports = function(grunt) {
'views/**/*.html': ['.tmp/public/jst.js'],
'views/**/*.ejs': ['.tmp/public/jst.js']
}
},
}
});//</ grunt.config.set() >
})// </ grunt.config.set() >
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// This Grunt plugin is part of the default asset pipeline in Sails,
@ -217,5 +213,4 @@ module.exports = function(grunt) {
// grunt.loadNpmTasks('grunt-sails-linker');
// ```
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
};
}

View File

@ -10,8 +10,7 @@
* https://sailsjs.com/anatomy/tasks/config/sync.js
*
*/
module.exports = function(grunt) {
module.exports = function (grunt) {
grunt.config.set('sync', {
dev: {
files: [{
@ -20,7 +19,7 @@ module.exports = function(grunt) {
dest: '.tmp/public'
}]
}
});
})
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// This Grunt plugin is part of the default asset pipeline in Sails,
@ -45,5 +44,4 @@ module.exports = function(grunt) {
// grunt.loadNpmTasks('grunt-sync');
// ```
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
};
}

View File

@ -9,8 +9,7 @@
* https://sailsjs.com/anatomy/tasks/config/uglify.js
*
*/
module.exports = function(grunt) {
module.exports = function (grunt) {
grunt.config.set('uglify', {
dist: {
src: ['.tmp/public/concat/production.js'],
@ -24,7 +23,7 @@ module.exports = function(grunt) {
'Promise',
'File',
'Location',
'RttcRefPlaceholder',
'RttcRefPlaceholder'
],
keep_fnames: true//eslint-disable-line
},
@ -32,7 +31,7 @@ module.exports = function(grunt) {
keep_fnames: true//eslint-disable-line
}
}
});
})
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// This Grunt plugin is part of the default asset pipeline in Sails,
@ -57,6 +56,4 @@ module.exports = function(grunt) {
// grunt.loadNpmTasks('grunt-contrib-uglify');
// ```
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
};
}

View File

@ -9,8 +9,7 @@
* https://sailsjs.com/anatomy/tasks/config/watch.js
*
*/
module.exports = function(grunt) {
module.exports = function (grunt) {
grunt.config.set('watch', {
assets: {
@ -27,7 +26,7 @@ module.exports = function(grunt) {
'linkAssets'
]
}
});
})
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// This Grunt plugin is part of the default asset pipeline in Sails,
@ -52,5 +51,4 @@ module.exports = function(grunt) {
// grunt.loadNpmTasks('grunt-contrib-watch');
// ```
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
};
}

View File

@ -10,8 +10,6 @@
* https://sailsjs.com/anatomy/tasks/pipeline.js
*/
// ██████╗ ██╗ █████╗ ██╗███╗ ██╗ ██████╗███████╗███████╗
// ██╔══██╗██║ ██╔══██╗██║████╗ ██║ ██╔════╝██╔════╝██╔════╝
// ██████╔╝██║ ███████║██║██╔██╗ ██║ ██║ ███████╗███████╗
@ -40,8 +38,7 @@ var cssFilesToInject = [
// in no particular order. To customize the ordering, add additional
// items here, _above_ this one.
'styles/**/*.css'
];
]
// ██████╗██╗ ██╗███████╗███╗ ██╗████████╗ ███████╗██╗██████╗ ███████╗
// ██╔════╝██║ ██║██╔════╝████╗ ██║╚══██╔══╝ ██╔════╝██║██╔══██╗██╔════╝
@ -73,8 +70,7 @@ var jsFilesToInject = [
// in no particular order. To customize the ordering, add additional items
// here, _above_ this one.
'js/**/*.js'
];
]
// ██████╗██╗ ██╗███████╗███╗ ██╗████████╗ ███████╗██╗██████╗ ███████╗
// ██╔════╝██║ ██║██╔════╝████╗ ██║╚══██╔══╝ ██╔════╝██║██╔══██╗██╔════╝
@ -103,9 +99,7 @@ var jsFilesToInject = [
//
var templateFilesToInject = [
'templates/**/*.html'
];
]
// ███╗ ███╗██╗███████╗ ██████╗ ███████╗███████╗████████╗██╗ ██╗██████╗
// ████╗ ████║██║██╔════╝██╔════╝ ██╔════╝██╔════╝╚══██╔══╝██║ ██║██╔══██╗
@ -119,29 +113,29 @@ var templateFilesToInject = [
// the code below, unless you are modifying the default asset pipeline.**
// Default path for public folder (see documentation on sailsjs.com for more information)
var tmpPath = '.tmp/public/';
var tmpPath = '.tmp/public/'
// Prefix relative paths to source files so they point to the proper locations
// (i.e. where the other Grunt tasks spit them out, or in some cases, where
// they reside in the first place)
module.exports.cssFilesToInject = cssFilesToInject.map((cssPath)=>{
module.exports.cssFilesToInject = cssFilesToInject.map((cssPath) => {
// If we're ignoring the file, make sure the ! is at the beginning of the path
if (cssPath[0] === '!') {
return require('path').join('!' + tmpPath, cssPath.substr(1));
return require('path').join('!' + tmpPath, cssPath.substr(1))
}
return require('path').join(tmpPath, cssPath);
});
module.exports.jsFilesToInject = jsFilesToInject.map((jsPath)=>{
return require('path').join(tmpPath, cssPath)
})
module.exports.jsFilesToInject = jsFilesToInject.map((jsPath) => {
// If we're ignoring the file, make sure the ! is at the beginning of the path
if (jsPath[0] === '!') {
return require('path').join('!' + tmpPath, jsPath.substr(1));
return require('path').join('!' + tmpPath, jsPath.substr(1))
}
return require('path').join(tmpPath, jsPath);
});
module.exports.templateFilesToInject = templateFilesToInject.map((tplPath)=>{
return require('path').join(tmpPath, jsPath)
})
module.exports.templateFilesToInject = templateFilesToInject.map((tplPath) => {
// If we're ignoring the file, make sure the ! is at the beginning of the path
if (tplPath[0] === '!') {
return require('path').join('!assets/', tplPath.substr(1));
return require('path').join('!assets/', tplPath.substr(1))
}
return require('path').join('assets/', tplPath);
});
return require('path').join('assets/', tplPath)
})

View File

@ -10,7 +10,7 @@
* https://sailsjs.com/anatomy/tasks/register/build.js
*
*/
module.exports = function(grunt) {
module.exports = function (grunt) {
grunt.registerTask('build', [
// 'polyfill:dev', //« uncomment to ALSO transpile during development (for broader browser compat.)
'compileAssets',
@ -18,5 +18,5 @@ module.exports = function(grunt) {
'linkAssetsBuild',
'clean:build',
'copy:build'
]);
};
])
}

View File

@ -11,20 +11,19 @@
* https://sailsjs.com/anatomy/tasks/register/build-prod.js
*
*/
module.exports = function(grunt) {
module.exports = function (grunt) {
grunt.registerTask('buildProd', [
'polyfill:prod', //« Remove this to skip transpilation in production (not recommended)
'polyfill:prod', // « Remove this to skip transpilation in production (not recommended)
'compileAssets',
'babel', //« Remove this to skip transpilation in production (not recommended)
'babel', // « Remove this to skip transpilation in production (not recommended)
'concat',
'uglify',
'cssmin',
'hash',//« Cache-busting
'copy:beforeLinkBuildProd',//« For prettier URLs after cache-busting
'hash', // « Cache-busting
'copy:beforeLinkBuildProd', // « For prettier URLs after cache-busting
'linkAssetsBuildProd',
'clean:build',
'copy:build',
'clean:afterBuildProd'
]);
};
])
}

View File

@ -7,12 +7,12 @@
* https://sailsjs.com/anatomy/tasks/register/compile-assets.js
*
*/
module.exports = function(grunt) {
module.exports = function (grunt) {
grunt.registerTask('compileAssets', [
'clean:dev',
'jst:dev',
'less:dev',
'copy:dev',
'coffee:dev'
]);
};
])
}

View File

@ -13,15 +13,11 @@
*
*/
module.exports = function (grunt) {
grunt.registerTask('default', [
// 'polyfill:dev', //« uncomment to ALSO transpile during development (for broader browser compat.)
'compileAssets',
// 'babel', //« uncomment to ALSO transpile during development (for broader browser compat.)
'linkAssets',
'watch'
]);
};
])
}

View File

@ -7,10 +7,10 @@
* https://sailsjs.com/anatomy/tasks/register/link-assets.js
*
*/
module.exports = function(grunt) {
module.exports = function (grunt) {
grunt.registerTask('linkAssets', [
'sails-linker:devJs',
'sails-linker:devStyles',
'sails-linker:clientSideTemplates'
]);
};
])
}

View File

@ -7,10 +7,10 @@
* https://sailsjs.com/anatomy/tasks/register/link-assets-build.js
*
*/
module.exports = function(grunt) {
module.exports = function (grunt) {
grunt.registerTask('linkAssetsBuild', [
'sails-linker:devJsBuild',
'sails-linker:devStylesBuild',
'sails-linker:clientSideTemplatesBuild'
]);
};
])
}

View File

@ -7,10 +7,10 @@
* https://sailsjs.com/anatomy/tasks/register/link-assets-build-prod.js
*
*/
module.exports = function(grunt) {
module.exports = function (grunt) {
grunt.registerTask('linkAssetsBuildProd', [
'sails-linker:prodJsBuild',
'sails-linker:prodStylesBuild',
'sails-linker:clientSideTemplatesBuild'
]);
};
])
}

View File

@ -7,22 +7,21 @@
* https://sailsjs.com/anatomy/tasks/register/polyfill.js
*
*/
module.exports = function(grunt) {
grunt.registerTask('polyfill:prod', 'Add the polyfill file to the top of the list of files to concatenate', ()=>{
grunt.config.set('concat.js.src', [require('sails-hook-grunt/accessible/babel-polyfill')].concat(grunt.config.get('concat.js.src')));
});
grunt.registerTask('polyfill:dev', 'Add the polyfill file to the top of the list of files to copy and link', ()=>{
module.exports = function (grunt) {
grunt.registerTask('polyfill:prod', 'Add the polyfill file to the top of the list of files to concatenate', () => {
grunt.config.set('concat.js.src', [require('sails-hook-grunt/accessible/babel-polyfill')].concat(grunt.config.get('concat.js.src')))
})
grunt.registerTask('polyfill:dev', 'Add the polyfill file to the top of the list of files to copy and link', () => {
grunt.config.set('copy.dev.files', grunt.config.get('copy.dev.files').concat({
expand: true,
cwd: require('path').dirname(require('sails-hook-grunt/accessible/babel-polyfill')),
src: require('path').basename(require('sails-hook-grunt/accessible/babel-polyfill')),
dest: '.tmp/public/polyfill'
}));
var devLinkFiles = grunt.config.get('sails-linker.devJs.files');
grunt.config.set('sails-linker.devJs.files', Object.keys(devLinkFiles).reduce((linkerConfigSoFar, glob)=>{
linkerConfigSoFar[glob] = ['.tmp/public/polyfill/polyfill.min.js'].concat(devLinkFiles[glob]);
return linkerConfigSoFar;
}, {}));
});
};
}))
var devLinkFiles = grunt.config.get('sails-linker.devJs.files')
grunt.config.set('sails-linker.devJs.files', Object.keys(devLinkFiles).reduce((linkerConfigSoFar, glob) => {
linkerConfigSoFar[glob] = ['.tmp/public/polyfill/polyfill.min.js'].concat(devLinkFiles[glob])
return linkerConfigSoFar
}, {}))
})
}

View File

@ -11,17 +11,16 @@
* https://sailsjs.com/anatomy/tasks/register/prod.js
*
*/
module.exports = function(grunt) {
module.exports = function (grunt) {
grunt.registerTask('prod', [
'polyfill:prod', //« Remove this to skip transpilation in production (not recommended)
'polyfill:prod', // « Remove this to skip transpilation in production (not recommended)
'compileAssets',
'babel', //« Remove this to skip transpilation in production (not recommended)
'babel', // « Remove this to skip transpilation in production (not recommended)
'concat',
'uglify',
'cssmin',
'sails-linker:prodJs',
'sails-linker:prodStyles',
'sails-linker:clientSideTemplates',
]);
};
'sails-linker:clientSideTemplates'
])
}

View File

@ -7,11 +7,11 @@
* https://sailsjs.com/anatomy/tasks/register/sync-assets.js
*
*/
module.exports = function(grunt) {
module.exports = function (grunt) {
grunt.registerTask('syncAssets', [
'jst:dev',
'less:dev',
'sync:dev',
'coffee:dev'
]);
};
])
}