@unic/estatico-boilerplate
Advanced tools
Comparing version 0.0.7 to 0.0.8
134
gulpfile.js
@@ -520,2 +520,134 @@ /* eslint-disable global-require */ | ||
/** | ||
* Scaffolding task | ||
* Uses `node-plop` to interactively scaffold files. | ||
*/ | ||
gulp.task('scaffold', () => { | ||
const task = require('@unic/estatico-scaffold'); | ||
const instance = task({ | ||
types: [ | ||
{ | ||
name: 'Module', | ||
src: './src/modules/.scaffold/*', | ||
dest: './src/modules/', | ||
transformName: (name, prefix) => { | ||
const changeCase = require('change-case'); | ||
return { | ||
[prefix ? 'newFileName' : 'fileName']: changeCase.snake(path.basename(name)), | ||
[prefix ? 'newClassName' : 'className']: changeCase.pascal(path.basename(name)), | ||
[prefix ? 'newModuleName' : 'moduleName']: changeCase.camel(path.basename(name)), | ||
}; | ||
}, | ||
modifications: (answers) => { | ||
const moduleName = answers.newModuleName || answers.moduleName; | ||
const className = answers.newClassName || answers.className; | ||
const fileName = answers.newFileName || answers.fileName; | ||
const isRemove = (answers.action === 'Remove'); | ||
const hasJs = answers.files ? answers.files.find(file => file.match(/{{fileName}}\.js/)) : true; | ||
const hasCss = answers.files ? answers.files.find(file => file.match(/{{fileName}}\.scss/)) : true; | ||
switch (answers.action) { | ||
case 'Add': | ||
case 'Copy': | ||
return [].concat(hasJs ? [ | ||
{ | ||
type: 'modify', | ||
path: './src/assets/js/helpers/estaticoapp.js', | ||
pattern: /(\s+)(\/\* autoinsertmodule \*\/)/m, | ||
template: `$1this.modules.${moduleName} = ${className};$1$2`, | ||
abortOnFail: true, | ||
}, | ||
{ | ||
type: 'modify', | ||
path: './src/assets/js/helpers/estaticoapp.js', | ||
pattern: /(\s+)(\/\* autoinsertmodulereference \*\/)/m, | ||
template: `$1import ${className} from '../../../modules/${fileName}/${fileName}';$1$2`, | ||
abortOnFail: true, | ||
}, | ||
] : []).concat(hasCss ? [ | ||
{ | ||
type: 'modify', | ||
path: './src/assets/css/main.scss', | ||
pattern: /(\s+)(\/\/\*autoinsertmodule\*)/m, | ||
template: `$1@import "../../modules/${fileName}/${fileName}";$1$2`, | ||
abortOnFail: true, | ||
}, | ||
] : []); | ||
case 'Rename': | ||
case 'Remove': | ||
return [ | ||
{ | ||
type: 'modify', | ||
path: './src/assets/js/helpers/estaticoapp.js', | ||
pattern: new RegExp(`(\\s+)?this.modules.${answers.moduleName} = ${answers.className};`, 'm'), | ||
template: isRemove ? '' : `$1this.modules.${answers.newModuleName} = ${answers.newClassName};`, | ||
abortOnFail: true, | ||
}, | ||
{ | ||
type: 'modify', | ||
path: './src/assets/js/helpers/estaticoapp.js', | ||
pattern: new RegExp(`(\\s+)?import ${answers.className} from '../../../modules/${answers.fileName}/${answers.fileName}';`, 'm'), | ||
template: isRemove ? '' : `$1import ${answers.newClassName} from '../../../modules/${answers.newFileName}/${answers.newFileName}';`, | ||
abortOnFail: true, | ||
}, | ||
{ | ||
type: 'modify', | ||
path: './src/assets/css/main.scss', | ||
pattern: new RegExp(`(\\s+)?@import "../../modules/${answers.fileName}/${answers.fileName}";`, 'm'), | ||
template: isRemove ? '' : `$1@import "../../modules/${answers.newFileName}/${answers.newFileName}";`, | ||
abortOnFail: true, | ||
}, | ||
]; | ||
default: | ||
return []; | ||
} | ||
}, | ||
}, | ||
{ | ||
name: 'Page', | ||
src: './src/pages/.scaffold/*', | ||
dest: './src/pages/', | ||
transformName: (name) => { | ||
const changeCase = require('change-case'); | ||
return { | ||
fileName: changeCase.snake(path.basename(name)), | ||
}; | ||
}, | ||
}, | ||
], | ||
}, env); | ||
return instance(); | ||
}); | ||
/** | ||
* Copy files | ||
* Copies files, optionally renames them. | ||
* | ||
* Using `--watch` (or manually setting `env` to `{ dev: true }`) starts file watcher | ||
*/ | ||
gulp.task('copy', () => { | ||
const task = require('@unic/estatico-copy'); | ||
const instance = task({ | ||
src: [ | ||
'./src/**/*.{png,gif,jpg,woff,ttf}', | ||
], | ||
srcBase: './src', | ||
dest: './dist', | ||
watch: { | ||
src: [ | ||
'./src/**/*.{png,gif,jpg,woff,ttf}', | ||
], | ||
name: 'copy', | ||
}, | ||
}, env); | ||
return instance(); | ||
}); | ||
/** | ||
* Clean build directory | ||
@@ -543,3 +675,3 @@ */ | ||
const inquirer = require('inquirer'); | ||
const build = gulp.parallel('html', gulp.series('css:fonts', 'css'), 'js', 'js:mocks', 'media:svgsprite', 'media:imageversions'); | ||
const build = gulp.parallel('html', gulp.series('css:fonts', 'css'), 'js', 'js:mocks', 'media:svgsprite', 'media:imageversions', 'copy'); | ||
@@ -546,0 +678,0 @@ const cb = (skipTests) => { |
{ | ||
"name": "@unic/estatico-boilerplate", | ||
"version": "0.0.7", | ||
"version": "0.0.8", | ||
"description": "", | ||
@@ -15,2 +15,3 @@ "main": "index.js", | ||
"@unic/estatico-browsersync": "0.0.6", | ||
"@unic/estatico-copy": "0.0.7", | ||
"@unic/estatico-data": "0.0.6", | ||
@@ -20,3 +21,3 @@ "@unic/estatico-eslint": "0.0.7", | ||
"@unic/estatico-handlebars": "0.0.6", | ||
"@unic/estatico-imageversions": "0.0.6", | ||
"@unic/estatico-imageversions": "0.0.7", | ||
"@unic/estatico-json-mocks": "0.0.6", | ||
@@ -26,2 +27,3 @@ "@unic/estatico-puppeteer": "0.0.6", | ||
"@unic/estatico-sass": "0.0.6", | ||
"@unic/estatico-scaffold": "0.0.7", | ||
"@unic/estatico-stylelint": "0.0.6", | ||
@@ -33,2 +35,3 @@ "@unic/estatico-svgsprite": "0.0.6", | ||
"autoprefixer": "^7.2.5", | ||
"change-case": "^3.0.1", | ||
"del": "^3.0.0", | ||
@@ -35,0 +38,0 @@ "glob": "^7.1.2", |
318982
2288
26