├── .eslintignore
├── templates
└── app
│ ├── src
│ ├── styles
│ │ └── main.css
│ ├── app
│ │ ├── shared
│ │ │ └── .gitkeep
│ │ ├── app.html
│ │ ├── app.component.js
│ │ ├── app.route.js
│ │ ├── app.config.js
│ │ └── app.js
│ ├── public
│ │ ├── img
│ │ │ └── .gitkeep
│ │ └── index.html
│ ├── config
│ │ ├── config.prod.json
│ │ ├── i18n
│ │ │ ├── en.json
│ │ │ └── fr.json
│ │ ├── config.dev.json
│ │ └── README.md
│ ├── styles-sass
│ │ ├── main.scss
│ │ ├── themes
│ │ │ └── README.md
│ │ ├── pages
│ │ │ └── README.md
│ │ ├── base
│ │ │ └── README.md
│ │ ├── layout
│ │ │ └── README.md
│ │ ├── components
│ │ │ └── README.md
│ │ ├── vendors
│ │ │ └── README.md
│ │ ├── abstracts
│ │ │ └── README.md
│ │ └── README.md
│ ├── styles-less
│ │ ├── main.less
│ │ ├── themes
│ │ │ └── README.md
│ │ ├── pages
│ │ │ └── README.md
│ │ ├── base
│ │ │ └── README.md
│ │ ├── layout
│ │ │ └── README.md
│ │ ├── components
│ │ │ └── README.md
│ │ ├── vendors
│ │ │ └── README.md
│ │ ├── abstracts
│ │ │ └── README.md
│ │ └── README.md
│ ├── _.htmlhintrc
│ ├── ui-angular-material
│ │ ├── styles-less
│ │ │ ├── base
│ │ │ │ └── _typography.less
│ │ │ └── vendors
│ │ │ │ └── _material-icons.less
│ │ ├── styles-sass
│ │ │ ├── base
│ │ │ │ └── _typography.scss
│ │ │ └── vendors
│ │ │ │ └── _material-icons.scss
│ │ └── styles
│ │ │ └── main.css
│ └── _.csslintrc
│ ├── _.babelrc
│ ├── json-server
│ ├── routes.json
│ └── db.json
│ ├── test
│ ├── .eslintrc
│ ├── unit.spec.js
│ └── unit
│ │ └── app.spec.js
│ ├── docs
│ ├── guide.ngdoc
│ ├── guide
│ │ └── howToUse.ngdoc
│ ├── _index.ngdoc
│ └── api.ngdoc
│ ├── _.editorconfig
│ ├── filepath-loader.js
│ ├── _.gitignore
│ ├── postcss.config.js
│ ├── _sonar-project.properties
│ ├── _.sreporterrc
│ ├── CHANGELOG.md
│ ├── COMMITS-CONVENTION.md
│ ├── README.md
│ ├── tools
│ └── git
│ │ └── commit-msg.js
│ ├── karma.conf.js
│ ├── _.sass-lint.yml
│ ├── _.eslintrc
│ ├── _package.json
│ └── webpack.config.js
├── .travis.yml
├── test
├── .eslintrc
├── app
│ ├── linters.spec.js
│ ├── environments.spec.js
│ ├── dgeni.spec.js
│ ├── json-server.spec.js
│ ├── app-name.spec.js
│ ├── resource.spec.js
│ ├── tests.spec.js
│ ├── angular-translate.spec.js
│ ├── css-preprocessors.spec.js
│ ├── sonar.spec.js
│ └── ui-frameworks.spec.js
└── app.js
├── .npmignore
├── assets
├── css3.png
├── less.png
├── npm.png
├── sass.png
├── yarn.png
├── dgeni.png
├── eslint.png
├── karma.png
├── webpack.png
├── angularjs.png
├── bootstrap.png
├── ui-router.png
├── foundation.png
├── json-server.png
├── sonar-qube.png
├── angular-translate.png
└── angularjs-material.png
├── .gitignore
├── .editorconfig
├── package.json
├── LICENSE
├── CHANGELOG.md
├── docs
└── STACK.md
├── README.md
├── .eslintrc
├── generators
└── app
│ ├── prompt.js
│ ├── index.js
│ └── write.js
└── yarn.lock
/.eslintignore:
--------------------------------------------------------------------------------
1 | templates
2 |
--------------------------------------------------------------------------------
/templates/app/src/styles/main.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/templates/app/src/app/shared/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/templates/app/src/public/img/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - "6"
4 |
--------------------------------------------------------------------------------
/templates/app/_.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["es2015"]
3 | }
4 |
--------------------------------------------------------------------------------
/templates/app/json-server/routes.json:
--------------------------------------------------------------------------------
1 | {
2 | "/api/": "/"
3 | }
4 |
--------------------------------------------------------------------------------
/test/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "mocha": true
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | !._*
2 |
3 | test/
4 | docs/
5 | assets/
6 |
7 | yarn.lock
8 |
--------------------------------------------------------------------------------
/templates/app/test/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "mocha": true
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/templates/app/src/config/config.prod.json:
--------------------------------------------------------------------------------
1 | {
2 | "REST_URL": "PUT_YOUR_REST_URL_HERE"
3 | }
4 |
--------------------------------------------------------------------------------
/assets/css3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/groupe-sii/generator-webpack-angular/HEAD/assets/css3.png
--------------------------------------------------------------------------------
/assets/less.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/groupe-sii/generator-webpack-angular/HEAD/assets/less.png
--------------------------------------------------------------------------------
/assets/npm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/groupe-sii/generator-webpack-angular/HEAD/assets/npm.png
--------------------------------------------------------------------------------
/assets/sass.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/groupe-sii/generator-webpack-angular/HEAD/assets/sass.png
--------------------------------------------------------------------------------
/assets/yarn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/groupe-sii/generator-webpack-angular/HEAD/assets/yarn.png
--------------------------------------------------------------------------------
/templates/app/src/config/i18n/en.json:
--------------------------------------------------------------------------------
1 | {
2 | "app.title": "generator-webpack-angular.EN"
3 | }
4 |
--------------------------------------------------------------------------------
/templates/app/src/config/i18n/fr.json:
--------------------------------------------------------------------------------
1 | {
2 | "app.title": "generator-webpack-angular.FR"
3 | }
4 |
--------------------------------------------------------------------------------
/assets/dgeni.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/groupe-sii/generator-webpack-angular/HEAD/assets/dgeni.png
--------------------------------------------------------------------------------
/assets/eslint.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/groupe-sii/generator-webpack-angular/HEAD/assets/eslint.png
--------------------------------------------------------------------------------
/assets/karma.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/groupe-sii/generator-webpack-angular/HEAD/assets/karma.png
--------------------------------------------------------------------------------
/assets/webpack.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/groupe-sii/generator-webpack-angular/HEAD/assets/webpack.png
--------------------------------------------------------------------------------
/assets/angularjs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/groupe-sii/generator-webpack-angular/HEAD/assets/angularjs.png
--------------------------------------------------------------------------------
/assets/bootstrap.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/groupe-sii/generator-webpack-angular/HEAD/assets/bootstrap.png
--------------------------------------------------------------------------------
/assets/ui-router.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/groupe-sii/generator-webpack-angular/HEAD/assets/ui-router.png
--------------------------------------------------------------------------------
/assets/foundation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/groupe-sii/generator-webpack-angular/HEAD/assets/foundation.png
--------------------------------------------------------------------------------
/assets/json-server.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/groupe-sii/generator-webpack-angular/HEAD/assets/json-server.png
--------------------------------------------------------------------------------
/assets/sonar-qube.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/groupe-sii/generator-webpack-angular/HEAD/assets/sonar-qube.png
--------------------------------------------------------------------------------
/templates/app/src/app/app.html:
--------------------------------------------------------------------------------
1 | <% if (angularTranslate) { -%>{{ 'app.title' | translate }}<% } else { -%>My App<% } -%>
2 |
--------------------------------------------------------------------------------
/assets/angular-translate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/groupe-sii/generator-webpack-angular/HEAD/assets/angular-translate.png
--------------------------------------------------------------------------------
/assets/angularjs-material.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/groupe-sii/generator-webpack-angular/HEAD/assets/angularjs-material.png
--------------------------------------------------------------------------------
/templates/app/src/app/app.component.js:
--------------------------------------------------------------------------------
1 | import template from './app.html';
2 |
3 | export default {
4 | template: template
5 | };
6 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 |
6 | # Dependency directories
7 | node_modules
8 |
9 | # WebStorm
10 | .idea/
11 |
--------------------------------------------------------------------------------
/templates/app/docs/guide.ngdoc:
--------------------------------------------------------------------------------
1 | @ngdoc overview
2 |
3 | @name Guide
4 |
5 | @description
6 |
7 | # Guide
8 |
9 | A sélectionner à gauche.
10 |
--------------------------------------------------------------------------------
/templates/app/src/config/config.dev.json:
--------------------------------------------------------------------------------
1 | {
2 | "REST_URL": "<% if (jsonServer) { -%>http://localhost:3000/<% }else{ -%>PUT_YOUR_REST_URL_HERE<% } -%>"
3 | }
4 |
--------------------------------------------------------------------------------
/templates/app/src/styles-sass/main.scss:
--------------------------------------------------------------------------------
1 | <% if (uiFramework === 'ngMaterial') { -%>
2 | // Vendors
3 | @import 'vendors/material-icons';
4 |
5 | // Base
6 | @import 'base/typography';
7 | <% } -%>
8 |
--------------------------------------------------------------------------------
/templates/app/docs/guide/howToUse.ngdoc:
--------------------------------------------------------------------------------
1 | @ngdoc overview
2 |
3 | @name howToUse
4 |
5 | @description
6 |
7 | # How To Use this module
8 |
9 | 1. aaaaaa
10 |
11 | 1. bbbbbb
12 |
13 |
--------------------------------------------------------------------------------
/templates/app/src/styles-less/main.less:
--------------------------------------------------------------------------------
1 | <% if (uiFramework === 'ngMaterial') { -%>
2 | // Vendors
3 | @import 'vendors/material-icons';
4 |
5 | // Base
6 | @import 'base/typography';
7 | <% } -%>
8 |
--------------------------------------------------------------------------------
/templates/app/test/unit.spec.js:
--------------------------------------------------------------------------------
1 | import 'angular';
2 | import 'angular-mocks';
3 |
4 | let testsContext = require.context('./unit', true, /\.spec\.js$/);
5 | testsContext.keys().forEach(testsContext);
6 |
--------------------------------------------------------------------------------
/templates/app/json-server/db.json:
--------------------------------------------------------------------------------
1 | {
2 | "posts": [
3 | { "id": 1, "title": "json-server", "author": "typicode" }
4 | ],
5 | "comments": [
6 | { "id": 1, "body": "some comment", "postId": 1 }
7 | ],
8 | "profile": { "name": "typicode" }
9 | }
10 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # http://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | indent_style = space
6 | indent_size = 2
7 | end_of_line = lf
8 | charset = utf-8
9 | trim_trailing_whitespace = true
10 | insert_final_newline = true
11 |
12 | [*.md]
13 | trim_trailing_whitespace = false
14 |
--------------------------------------------------------------------------------
/templates/app/_.editorconfig:
--------------------------------------------------------------------------------
1 | # http://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | indent_style = space
6 | indent_size = 2
7 | end_of_line = lf
8 | charset = utf-8
9 | trim_trailing_whitespace = true
10 | insert_final_newline = true
11 |
12 | [*.md]
13 | trim_trailing_whitespace = false
14 |
--------------------------------------------------------------------------------
/templates/app/docs/_index.ngdoc:
--------------------------------------------------------------------------------
1 | @ngdoc overview
2 |
3 | @name Docs Top
4 |
5 | @description
6 |
7 | ## Documentation du projet <%= appName %>
8 |
9 | Page d'accueil de la documentation.
10 |
11 | La documentation du code est disponible ici.
12 |
13 | Le guide d'utilisation est disponible ici.
14 |
--------------------------------------------------------------------------------
/templates/app/filepath-loader.js:
--------------------------------------------------------------------------------
1 | /**
2 | * This Webpack loader adds file path in unit test files.
3 | */
4 | module.exports = function (content) {
5 | let path = this.resourcePath.replace(/\\/g, '\\\\');
6 | return content.replace(/^(describe\(([^{])+{)/m, '$1beforeEach(function() {window.__setCurrentFile(\'' + path + '\')});\n');
7 | };
8 |
--------------------------------------------------------------------------------
/templates/app/src/app/app.route.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Application route definition.
3 | */
4 | export default function ($stateProvider, $urlRouterProvider) {
5 | 'ngInject';
6 |
7 | $stateProvider
8 | .state('app', {
9 | url : '/',
10 | component: 'app'
11 | });
12 |
13 | $urlRouterProvider.otherwise('/');
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/templates/app/_.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 |
6 | # Dependency directories
7 | node_modules
8 |
9 | # Optional npm cache directory
10 | .npm
11 |
12 | # Build folder
13 | dist/
14 |
15 | # Reporters
16 | reports/
17 |
18 | # IDE files
19 | .idea
20 | *.iml
21 | out
22 | gen
23 | .vscode
24 |
25 | # logs folder
26 | dist-docs/
27 |
--------------------------------------------------------------------------------
/templates/app/src/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | <%= appName %>
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/templates/app/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: [
3 | // Reference: https://github.com/sebastian-software/postcss-smart-import
4 | // require('postcss-smart-import')(),
5 |
6 | // Reference: https://github.com/jonathantneal/precss
7 | // require('precss')(),
8 |
9 | // Reference: https://github.com/postcss/autoprefixer
10 | require('autoprefixer')()
11 | ]
12 | };
13 |
--------------------------------------------------------------------------------
/templates/app/docs/api.ngdoc:
--------------------------------------------------------------------------------
1 | @ngdoc overview
2 |
3 | @name API Top
4 |
5 | @description
6 |
7 | # API
8 |
9 | L'architecture du projet est située ci-dessous :
10 |
11 | ### Légende
12 |
13 | [](./images/png/legend.png)
14 |
15 | ### Tout confondu
16 |
17 | [](./images/png/all.png)
18 |
19 | ### Les modules
20 |
21 | [](./images/png/modules.png)
22 |
--------------------------------------------------------------------------------
/templates/app/src/_.htmlhintrc:
--------------------------------------------------------------------------------
1 | {
2 | "attr-lowercase": true,
3 | "attr-value-double-quotes": true,
4 | "doctype-first": false,
5 | "doctype-html5": true,
6 | "force": true,
7 | "id-unique": true,
8 | "alt-require": true,
9 | "spec-char-escape": true,
10 | "src-not-empty": true,
11 | "style-disabled": false,
12 | "tagname-lowercase": true,
13 | "tag-pair": true,
14 | "inline-style-disabled": true,
15 | "space-tab-mixed-disabled": "space",
16 | "tag-self-close": true,
17 | "title-require": true,
18 | "id-class-value": "dash",
19 | "attr-unsafe-chars": true
20 | }
21 |
--------------------------------------------------------------------------------
/templates/app/src/styles-sass/themes/README.md:
--------------------------------------------------------------------------------
1 | # Themes
2 |
3 | This `themes/` folder contains themes files.
4 |
5 | * `_theme.scss`
6 | * `_admin.scss`
7 |
8 | This folder is very project-specific and is likely to be non-existent on many projects.
9 |
10 | ## Structure
11 |
12 | ```
13 | styles/
14 | |
15 | |– themes/
16 | | |– _theme.scss # Default theme
17 | | |– _admin.scss # Admin theme
18 | | … # Etc.
19 | ```
20 |
21 | ## Source
22 |
23 | [https://sass-guidelin.es](https://sass-guidelin.es/?utm_source=CSS-Weekly&utm_campaign=Issue-145&utm_medium=RSS#architecture)
24 |
--------------------------------------------------------------------------------
/templates/app/src/styles-less/themes/README.md:
--------------------------------------------------------------------------------
1 | # Themes
2 |
3 | This `themes/` folder contains themes files.
4 |
5 | * `_theme.less`
6 | * `_admin.less`
7 |
8 | This folder is very project-specific and is likely to be non-existent on many projects.
9 |
10 | ## Structure
11 |
12 | ```
13 | styles/
14 | |
15 | |– themes/
16 | | |– _theme.less # Default theme
17 | | |– _admin.less # Admin theme
18 | | … # Etc.
19 | ```
20 |
21 | ## Source
22 |
23 | Source (SASS guidelines applied to LESS):
24 |
25 | [https://sass-guidelin.es](https://sass-guidelin.es/?utm_source=CSS-Weekly&utm_campaign=Issue-145&utm_medium=RSS#architecture)
26 |
--------------------------------------------------------------------------------
/test/app/linters.spec.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const path = require('path');
4 | const helpers = require('yeoman-test');
5 | const assert = require('yeoman-assert');
6 |
7 | module.exports = () => {
8 |
9 | describe('linters', () => {
10 |
11 | before(done => {
12 | this.generator = helpers
13 | .run(path.join(__dirname, '../../generators/app'))
14 | .toPromise()
15 | .then(() => done());
16 | });
17 |
18 | it('should add HTMLHint rules', () => {
19 | assert.file('src/.htmlhintrc');
20 | });
21 |
22 | it('should add ESLint rules', () => {
23 | assert.file('.eslintrc');
24 | });
25 |
26 | });
27 |
28 | };
29 |
--------------------------------------------------------------------------------
/templates/app/_sonar-project.properties:
--------------------------------------------------------------------------------
1 | sonar.projectKey=<%= _.slugify(appName) %>
2 | sonar.projectName=<%= appName %>
3 | sonar.projectVersion=0.0.0
4 |
5 | sonar.sources=src/app,src/public,src/styles
6 | sonar.sourceEncoding=UTF-8
7 |
8 | sonar.exclusions=node_modules/**/*,reports/**/*
9 | sonar.tests=test
10 |
11 | sonar.sii.quality.html.report.path=reports/sonar/htmlhint.json
12 | <% if (cssPreprocessor === 'css') { -%>
13 | sonar.sii.quality.css.report.path=reports/sonar/csslint.json
14 | <% } -%>
15 | <% if (cssPreprocessor === 'sass') { -%>
16 | sonar.sii.quality.scss.report.path=reports/sonar/scsslint.json
17 | <% } -%>
18 | sonar.sii.quality.js.eslint.report.path=reports/sonar/eslint.json
19 | sonar.sii.quality.angular.eslint.report.path=reports/sonar/eslint-angular.json
20 |
--------------------------------------------------------------------------------
/test/app/environments.spec.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const path = require('path');
4 | const helpers = require('yeoman-test');
5 | const assert = require('yeoman-assert');
6 |
7 | module.exports = () => {
8 |
9 | describe('environments settings', () => {
10 |
11 | before(done => {
12 | this.generator = helpers
13 | .run(path.join(__dirname, '../../generators/app'))
14 | .toPromise()
15 | .then(() => done());
16 | });
17 |
18 | it('should generate a README', () => {
19 | assert.file('src/config/README.md');
20 | });
21 |
22 | it('should generate default config files', () => {
23 | assert.file('src/config/config.dev.json');
24 | assert.file('src/config/config.prod.json');
25 | });
26 |
27 | });
28 |
29 | };
30 |
--------------------------------------------------------------------------------
/templates/app/src/ui-angular-material/styles-less/base/_typography.less:
--------------------------------------------------------------------------------
1 | //----------------------------------------
2 | // Typography
3 | //----------------------------------------
4 |
5 | // Material Design Icons
6 | //----------------------------------------
7 |
8 | @font-face {
9 | font-family: 'Material Icons';
10 | font-style: normal;
11 | font-weight: 400;
12 | src: url('~material-design-icons/iconfont/MaterialIcons-Regular.eot'); // For IE6-8
13 | src: local('Material Icons'),
14 | local('MaterialIcons-Regular'),
15 | url('~material-design-icons/iconfont/MaterialIcons-Regular.woff2') format('woff2'),
16 | url('~material-design-icons/iconfont/MaterialIcons-Regular.woff') format('woff'),
17 | url('~material-design-icons/iconfont/MaterialIcons-Regular.ttf') format('truetype');
18 | }
19 |
--------------------------------------------------------------------------------
/templates/app/src/ui-angular-material/styles-less/vendors/_material-icons.less:
--------------------------------------------------------------------------------
1 | //----------------------------------------
2 | // Material Design Icons
3 | //----------------------------------------
4 |
5 | .material-icons {
6 | direction: ltr;
7 | display: inline-block;
8 | font-family: 'Material Icons';
9 | font-feature-settings: 'liga'; // Support for IE
10 | font-size: 24px; // Preferred icon size
11 | -moz-osx-font-smoothing: grayscale; // Support for Firefox
12 | -webkit-font-smoothing: antialiased; // Support for all WebKit browsers
13 | font-style: normal;
14 | font-weight: normal;
15 | letter-spacing: normal;
16 | line-height: 1;
17 | text-rendering: optimizeLegibility; // Support for Safari and Chrome
18 | text-transform: none;
19 | white-space: nowrap;
20 | word-wrap: normal;
21 | }
22 |
--------------------------------------------------------------------------------
/templates/app/src/ui-angular-material/styles-sass/base/_typography.scss:
--------------------------------------------------------------------------------
1 | //----------------------------------------
2 | // Typography
3 | //----------------------------------------
4 |
5 | // Material Design Icons
6 | //----------------------------------------
7 |
8 | @font-face {
9 | // sass-lint:disable no-duplicate-properties
10 | font-family: 'Material Icons';
11 | font-style: normal;
12 | font-weight: 400;
13 | src: url('~material-design-icons/iconfont/MaterialIcons-Regular.eot'); // For IE6-8
14 | src: local('Material Icons'),
15 | local('MaterialIcons-Regular'),
16 | url('~material-design-icons/iconfont/MaterialIcons-Regular.woff2') format('woff2'),
17 | url('~material-design-icons/iconfont/MaterialIcons-Regular.woff') format('woff'),
18 | url('~material-design-icons/iconfont/MaterialIcons-Regular.ttf') format('truetype');
19 | }
20 |
--------------------------------------------------------------------------------
/templates/app/src/ui-angular-material/styles-sass/vendors/_material-icons.scss:
--------------------------------------------------------------------------------
1 | //----------------------------------------
2 | // Material Design Icons
3 | //----------------------------------------
4 |
5 | .material-icons {
6 | // sass-lint:disable no-vendor-prefixes
7 | direction: ltr;
8 | display: inline-block;
9 | font-family: 'Material Icons';
10 | font-feature-settings: 'liga'; // Support for IE
11 | font-size: 24px; // Preferred icon size
12 | -moz-osx-font-smoothing: grayscale; // Support for Firefox
13 | -webkit-font-smoothing: antialiased; // Support for all WebKit browsers
14 | font-style: normal;
15 | font-weight: normal;
16 | letter-spacing: normal;
17 | line-height: 1;
18 | text-rendering: optimizeLegibility; // Support for Safari and Chrome
19 | text-transform: none;
20 | white-space: nowrap;
21 | word-wrap: normal;
22 | }
23 |
--------------------------------------------------------------------------------
/templates/app/src/styles-sass/pages/README.md:
--------------------------------------------------------------------------------
1 | # Pages
2 |
3 | If you have page-specific styles, it is better to put them in a `pages/` folder, in a file named after the page. For instance, it’s not uncommon to have very specific styles for the home page hence the need for a `_home.scss` file in `pages/`.
4 |
5 | * `_home.scss`
6 | * `_contact.scss`
7 |
8 | Depending on your deployment process, these files could be called on their own to avoid merging them with the others in the resulting stylesheet. It is really up to you.
9 |
10 | ## Structure
11 |
12 | ```
13 | styles/
14 | |
15 | |– pages/
16 | | |– _home.scss # Home specific styles
17 | | |– _contact.scss # Contact specific styles
18 | | … # Etc.
19 | ```
20 |
21 | ## Source
22 |
23 | [https://sass-guidelin.es](https://sass-guidelin.es/?utm_source=CSS-Weekly&utm_campaign=Issue-145&utm_medium=RSS#architecture)
24 |
--------------------------------------------------------------------------------
/templates/app/_.sreporterrc:
--------------------------------------------------------------------------------
1 | {
2 | "projectName": "<%= appName %>",
3 | "eslint": {
4 | "src": "src/**/*.js",
5 | "report": "reports/sonar/eslint.json",
6 | "rulesFile": ".eslintrc"
7 | },
8 | "eslintangular": {
9 | "src": "src/**/*.js",
10 | "report": "reports/sonar/eslint-angular.json",
11 | "rulesFile": ".eslintrc"
12 | },
13 | "htmlhint": {
14 | "src": "src/**/*.html",
15 | "report": "reports/sonar/htmlhint.json",
16 | "rulesFile": "src/.htmlhintrc"
17 | },
18 | <% if (cssPreprocessor === 'css') { -%>
19 | "csslint": {
20 | "src": "src/**/*.css",
21 | "report": "reports/sonar/csslint.json",
22 | "rulesFile": "src/.csslintrc"
23 | }
24 | <% } -%>
25 | <% if (cssPreprocessor === 'sass') { -%>
26 | "sass-to-scsslint": {
27 | "src": "src/**/*.s+(a|c)ss",
28 | "report": "reports/sonar/sass-to-scsslint.json",
29 | "rulesFile": ".sass-lint.yml"
30 | }
31 | <% } -%>
32 | }
33 |
--------------------------------------------------------------------------------
/templates/app/src/_.csslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "errors": [
3 | "duplicate-properties",
4 | "empty-rules",
5 | "known-properties",
6 | "text-indent",
7 | "vendor-prefix",
8 | "star-property-hack",
9 | "underscore-property-hack",
10 | "bulletproof-font-face",
11 | "import",
12 | "regex-selectors",
13 | "universal-selector",
14 | "shorthand",
15 | "duplicate-background-images",
16 | "ids"
17 | ],
18 | "warnings": [
19 | "display-property-grouping",
20 | "font-faces",
21 | "zero-units",
22 | "overqualified-elements",
23 | "floats"
24 | ],
25 | "ignore": [
26 | "box-model",
27 | "adjoining-classes",
28 | "box-sizing",
29 | "compatible-vendor-prefixes",
30 | "gradients",
31 | "fallback-colors",
32 | "unqualified-attributes",
33 | "font-sizes",
34 | "important",
35 | "outline-none",
36 | "qualified-headings",
37 | "unique-headings"
38 | ]
39 | }
40 |
--------------------------------------------------------------------------------
/templates/app/src/styles-less/pages/README.md:
--------------------------------------------------------------------------------
1 | # Pages
2 |
3 | If you have page-specific styles, it is better to put them in this `pages/` folder, in a file named after the page. For instance, it’s not uncommon to have very specific styles for the home page hence the need for a `_home.less` file in `pages/`.
4 |
5 | * `_home.less`
6 | * `_contact.less`
7 |
8 | Depending on your deployment process, these files could be called on their own to avoid merging them with the others in the resulting stylesheet. It is really up to you.
9 |
10 | ## Structure
11 |
12 | ```
13 | styles/
14 | |
15 | |– pages/
16 | | |– _home.less # Home specific styles
17 | | |– _contact.less # Contact specific styles
18 | | … # Etc.
19 | ```
20 |
21 | ## Source
22 |
23 | Source (SASS guidelines applied to LESS):
24 |
25 | [https://sass-guidelin.es](https://sass-guidelin.es/?utm_source=CSS-Weekly&utm_campaign=Issue-145&utm_medium=RSS#architecture)
26 |
--------------------------------------------------------------------------------
/templates/app/src/styles-sass/base/README.md:
--------------------------------------------------------------------------------
1 | # Base
2 |
3 | The `base/` folder holds what we might call the boilerplate code for the project. In there, you might find the reset file, some typographic rules, and probably a stylesheet defining some standard styles for commonly used HTML elements (that I like to call `_base.scss`).
4 |
5 | * `_base.scss`
6 | * `_reset.scss`
7 | * `_typography.scss`
8 |
9 | If your project uses a lot of CSS animations, you might consider adding an `\_animations.scss` file in there containing the @keyframes definitions of all your animations. If you only use a them sporadically, let them live along the selectors that use them.
10 |
11 | ## Structure
12 |
13 | ```
14 | styles/
15 | |
16 | |– base/
17 | | |– _reset.scss # Reset/normalize
18 | | |– _typography.scss # Typography rules
19 | | … # Etc.
20 | ```
21 |
22 | ## Source
23 |
24 | [https://sass-guidelin.es](https://sass-guidelin.es/?utm_source=CSS-Weekly&utm_campaign=Issue-145&utm_medium=RSS#architecture)
25 |
--------------------------------------------------------------------------------
/templates/app/src/app/app.config.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Application configuration.
3 | */
4 | export default function (ENVIRONNEMENT, $compileProvider, $locationProvider<% if (angularTranslate) { -%>, $translateProvider<% } -%>) {
5 | 'ngInject';
6 |
7 | // Reference: https://docs.angularjs.org/api/ng/provider/$locationProvider#html5Mode
8 | $locationProvider.html5Mode(true);
9 |
10 | // Reference : http://blog.thoughtram.io/angularjs/2014/12/22/exploring-angular-1.3-disabling-debug-info.html
11 | $compileProvider.debugInfoEnabled(ENVIRONNEMENT !== 'prod' && ENVIRONNEMENT !== 'production');
12 |
13 | <% if (angularTranslate) { -%>
14 | // Reference: https://angular-translate.github.io/docs/#/guide/12_asynchronous-loading#asynchronous-loading_using-staticfilesloader
15 | $translateProvider
16 | .useStaticFilesLoader({
17 | prefix: '',
18 | suffix: '.json'
19 | })
20 | .useSanitizeValueStrategy('sanitize')
21 | .preferredLanguage(navigator.browserLanguage || navigator.language);
22 | <% } -%>
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/templates/app/src/styles-sass/layout/README.md:
--------------------------------------------------------------------------------
1 | # Layout
2 |
3 | The `layout/` folder contains everything that takes part in laying out the site or application. This folder could have stylesheets for the main parts of the site (header, footer, navigation, sidebar...), the grid system or even CSS styles for all the forms.
4 |
5 | * `_grid.scss`
6 | * `_header.scss`
7 | * `_footer.scss`
8 | * `_sidebar.scss`
9 | * `_forms.scss`
10 | * `_navigation.scss`
11 |
12 | The `layout/` folder might also be called `partials/`, depending on what you prefer.
13 |
14 | ## Structure
15 |
16 | ```
17 | styles/
18 | |
19 | |– layout/
20 | | |– _navigation.scss # Navigation
21 | | |– _grid.scss # Grid system
22 | | |– _header.scss # Header
23 | | |– _footer.scss # Footer
24 | | |– _sidebar.scss # Sidebar
25 | | |– _forms.scss # Forms
26 | | … # Etc.
27 | ```
28 |
29 | ## Source
30 |
31 | [https://sass-guidelin.es](https://sass-guidelin.es/?utm_source=CSS-Weekly&utm_campaign=Issue-145&utm_medium=RSS#architecture)
32 |
--------------------------------------------------------------------------------
/test/app/dgeni.spec.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const path = require('path');
4 | const helpers = require('yeoman-test');
5 | const assert = require('yeoman-assert');
6 |
7 | module.exports = () => {
8 |
9 | describe('when using docs', () => {
10 |
11 | before(done => {
12 | this.generator = helpers
13 | .run(path.join(__dirname, '../../generators/app'))
14 | .withPrompts({
15 | appName: 'Webpack Generator'
16 | })
17 | .toPromise()
18 | .then(() => done());
19 | });
20 |
21 | it('should add webpack-angular-dgeni-plugin to the package.json', () => {
22 | assert.fileContent('package.json', /"webpack-angular-dgeni-plugin"/);
23 | });
24 |
25 | it('should have default ngdocs files', () => {
26 | assert.file('docs/api.ngdoc');
27 | assert.file('docs/guide.ngdoc');
28 | assert.file('docs/guide/howToUse.ngdoc');
29 | assert.noFile('docs/_index.ngdoc');
30 | assert.fileContent('docs/index.ngdoc', /Webpack Generator/);
31 | });
32 |
33 | });
34 |
35 | };
36 |
--------------------------------------------------------------------------------
/templates/app/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Change Log
2 |
3 | All notable changes to this project will be documented in this file.
4 |
5 | The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/).
6 |
7 | ## [Unreleased]
8 |
9 | ### Added
10 |
11 | - **i18n**: zh-CN and zh-TW translations from [@tianshuo].
12 | - **i18n**: de translation from [@mpbzh].
13 | - **i18n**: it-IT translation from [@roalz].
14 | - **i18n**: sv translation from [@magol].
15 | - **i18n**: tr-TR translation from [@karalamalar].
16 |
17 | ### Fixed
18 |
19 | - **scope**: correct fr-FR translation typos from [Closes #1234] [@roalz].
20 |
21 | ## [0.0.1] - 2015-12-03
22 |
23 | ### Added
24 |
25 | - **scope**: RU translation from [@aishek].
26 | - **scope**: pt-BR translation from [@tallesl].
27 | - **scope**: es-ES translation from [@ZeliosAriex].
28 |
29 | [Unreleased]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.3.0...HEAD
30 | [0.0.1]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.2.0...v0.3.0
31 |
--------------------------------------------------------------------------------
/templates/app/src/styles-sass/components/README.md:
--------------------------------------------------------------------------------
1 | # Components
2 |
3 | For smaller components, there is the `components/` folder. While `layout/` is macro (defining the global wireframe), `components/` is more focused on widgets. It contains all kind of specific modules like a slider, a loader, a widget, and basically anything along those lines. There are usually a lot of files in `components/` since the whole site/application should be mostly composed of tiny modules.
4 |
5 | * `_media.scss`
6 | * `_carousel.scss`
7 | * `_thumbnails.scss`
8 |
9 | The `components/` folder might also be called modules/, depending on what you prefer.
10 |
11 | ## Structure
12 |
13 | ```
14 | styles/
15 | |
16 | |– components/
17 | | |– _buttons.scss # Buttons
18 | | |– _carousel.scss # Carousel
19 | | |– _cover.scss # Cover
20 | | |– _dropdown.scss # Dropdown
21 | | … # Etc.
22 | ```
23 |
24 | ## Source
25 |
26 | [https://sass-guidelin.es](https://sass-guidelin.es/?utm_source=CSS-Weekly&utm_campaign=Issue-145&utm_medium=RSS#architecture)
27 |
--------------------------------------------------------------------------------
/templates/app/src/styles-less/base/README.md:
--------------------------------------------------------------------------------
1 | # Base
2 |
3 | The `base/` folder holds what we might call the boilerplate code for the project. In there, you might find the reset file, some typographic rules, and probably a stylesheet defining some standard styles for commonly used HTML elements (that I like to call `_base.less`).
4 |
5 | * `_base.less`
6 | * `_reset.less`
7 | * `_typography.less`
8 |
9 | If your project uses a lot of CSS animations, you might consider adding an `_animations.less` file in there containing the `@keyframes` definitions of all your animations. If you only use them sporadically, let them live along the selectors that use them.
10 |
11 | ## Structure
12 |
13 | ```
14 | styles/
15 | |
16 | |– base/
17 | | |– _reset.less # Reset/normalize
18 | | |– _typography.less # Typography rules
19 | | … # Etc.
20 | ```
21 |
22 | ## Source
23 |
24 | Source (SASS guidelines applied to LESS):
25 |
26 | [https://sass-guidelin.es](https://sass-guidelin.es/?utm_source=CSS-Weekly&utm_campaign=Issue-145&utm_medium=RSS#architecture)
27 |
--------------------------------------------------------------------------------
/templates/app/src/styles-less/layout/README.md:
--------------------------------------------------------------------------------
1 | # Layout
2 |
3 | The `layout/` folder contains everything that takes part in laying out the site or application. This folder could have stylesheets for the main parts of the site (header, footer, navigation, sidebar...), the grid system or even CSS styles for all the forms.
4 |
5 | * `_grid.less`
6 | * `_header.less`
7 | * `_footer.less`
8 | * `_sidebar.less`
9 | * `_forms.less`
10 | * `_navigation.less`
11 |
12 | The `layout/` folder might also be called `partials/`, depending on what you prefer.
13 |
14 | ## Structure
15 |
16 | ```
17 | styles/
18 | |
19 | |– layout/
20 | | |– _navigation.less # Navigation
21 | | |– _grid.less # Grid system
22 | | |– _header.less # Header
23 | | |– _footer.less # Footer
24 | | |– _sidebar.less # Sidebar
25 | | |– _forms.less # Forms
26 | | … # Etc.
27 | ```
28 |
29 | ## Source
30 |
31 | Source (SASS guidelines applied to LESS):
32 |
33 | [https://sass-guidelin.es](https://sass-guidelin.es/?utm_source=CSS-Weekly&utm_campaign=Issue-145&utm_medium=RSS#architecture)
34 |
--------------------------------------------------------------------------------
/templates/app/src/styles-sass/vendors/README.md:
--------------------------------------------------------------------------------
1 | # Vendors
2 |
3 | The `vendors/` folder contains all the CSS files from external libraries and frameworks – Normalize, Bootstrap, jQueryUI, FancyCarouselSliderjQueryPowered, and so on.
4 |
5 | * `_normalize.scss`
6 | * `_bootstrap.scss`
7 | * `_jquery-ui.scss`
8 | * `_select2.scss`
9 |
10 | If you have to override a section of any vendor, you should have another folder called `vendors-extensions/` in which you may have files named exactly after the vendors they overwrite.
11 |
12 | For instance, `vendors-extensions/_bootstrap.scss` is a file containing all CSS rules intended to re-declare some of Bootstrap’s default CSS. This is to avoid editing the vendor files themselves, which is generally not a good idea.
13 |
14 | ## Structure
15 |
16 | ```
17 | styles/
18 | |
19 | |– vendors/
20 | | |– _bootstrap.scss # Bootstrap
21 | | |– _jquery-ui.scss # jQuery UI
22 | | … # Etc.
23 | ```
24 |
25 | ## Source
26 |
27 | [https://sass-guidelin.es](https://sass-guidelin.es/?utm_source=CSS-Weekly&utm_campaign=Issue-145&utm_medium=RSS#architecture)
28 |
--------------------------------------------------------------------------------
/templates/app/src/styles-less/components/README.md:
--------------------------------------------------------------------------------
1 | # Components
2 |
3 | For smaller components, there is the `components/` folder. While `layout/` is macro (defining the global wireframe), `components/` is more focused on widgets. It contains all kind of specific modules like a slider, a loader, a widget, and basically anything along those lines. There are usually a lot of files in `components/` since the whole site/application should be mostly composed of tiny modules.
4 |
5 | * `_media.less`
6 | * `_carousel.less`
7 | * `_thumbnails.less`
8 |
9 | The `components/` folder might also be called `modules/`, depending on what you prefer.
10 |
11 | ## Structure
12 |
13 | ```
14 | styles/
15 | |
16 | |– components/
17 | | |– _buttons.less # Buttons
18 | | |– _carousel.less # Carousel
19 | | |– _cover.less # Cover
20 | | |– _dropdown.less # Dropdown
21 | | … # Etc.
22 | ```
23 |
24 | ## Source
25 |
26 | Source (SASS guidelines applied to LESS):
27 |
28 | [https://sass-guidelin.es](https://sass-guidelin.es/?utm_source=CSS-Weekly&utm_campaign=Issue-145&utm_medium=RSS#architecture)
29 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "generator-webpack-angular",
3 | "version": "0.0.4",
4 | "description": "Yeoman generator for creating AngularJS apps with Webpack",
5 | "keywords": [
6 | "yeoman-generator",
7 | "angular",
8 | "webpack"
9 | ],
10 | "license": "MIT",
11 | "author": "SII",
12 | "contributors": [
13 | "Jérémie Ledentu ",
14 | "Valentin Got ",
15 | "Olivier Le Lay "
16 | ],
17 | "main": "generators/app/index.js",
18 | "repository": {
19 | "type": "git",
20 | "url": "https://github.com/groupe-sii/generator-webpack-angular.git"
21 | },
22 | "scripts": {
23 | "test": "npm run lint && mocha",
24 | "lint": "eslint ."
25 | },
26 | "dependencies": {
27 | "chalk": "^1.1.3",
28 | "underscore.string": "^3.3.4",
29 | "yeoman-generator": "^0.24.1",
30 | "yosay": "^1.2.0"
31 | },
32 | "devDependencies": {
33 | "eslint": "~3.7.1",
34 | "mocha": "^3.1.0",
35 | "yeoman-assert": "^2.2.1",
36 | "yeoman-test": "^1.5.1"
37 | },
38 | "engines": {
39 | "node": ">=4.6.0"
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2016 Groupe SII
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/test/app/json-server.spec.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const path = require('path');
4 | const helpers = require('yeoman-test');
5 | const assert = require('yeoman-assert');
6 |
7 | module.exports = () => {
8 |
9 | describe('when using json-server', () => {
10 |
11 | before(done => {
12 | this.generator = helpers
13 | .run(path.join(__dirname, '../../generators/app'))
14 | .withPrompts({
15 | otherModules: 'json-server'
16 | })
17 | .toPromise()
18 | .then(() => done());
19 | });
20 |
21 | it('should add json-server to the package.json', () => {
22 | assert.fileContent('package.json', /"json-server"/);
23 | assert.fileContent('package.json', /"npm-run-all --parallel serve json-server"/);
24 | });
25 |
26 | it('should add localhost configuration in dev config file', () => {
27 | assert.fileContent('src/config/config.dev.json', /"http:\/\/localhost:3000\/"/);
28 | });
29 |
30 | it('should generate default server files', () => {
31 | assert.file('json-server/db.json');
32 | assert.file('json-server/routes.json');
33 | });
34 |
35 | });
36 |
37 | };
38 |
--------------------------------------------------------------------------------
/templates/app/src/styles-less/vendors/README.md:
--------------------------------------------------------------------------------
1 | # Vendors
2 |
3 | The `vendors/` folder contains all the CSS files from external libraries and frameworks – Normalize, Bootstrap, jQueryUI, FancyCarouselSliderjQueryPowered, and so on.
4 |
5 | * `_normalize.less`
6 | * `_bootstrap.less`
7 | * `_jquery-ui.less`
8 | * `_select2.less`
9 |
10 | If you have to override a section of any vendor, you should have another folder called `vendors-extensions/` in which you may have files named exactly after the vendors they overwrite.
11 |
12 | For instance, `vendors-extensions/_bootstrap.less` is a file containing all CSS rules intended to re-declare some of Bootstrap’s default CSS. This is to avoid editing the vendor files themselves, which is generally not a good idea.
13 |
14 | ## Structure
15 |
16 | ```
17 | styles/
18 | |
19 | |– vendors/
20 | | |– _bootstrap.less # Bootstrap
21 | | |– _jquery-ui.less # jQuery UI
22 | | … # Etc.
23 | ```
24 |
25 | ## Source
26 |
27 | Source (SASS guidelines applied to LESS):
28 |
29 | [https://sass-guidelin.es](https://sass-guidelin.es/?utm_source=CSS-Weekly&utm_campaign=Issue-145&utm_medium=RSS#architecture)
30 |
--------------------------------------------------------------------------------
/templates/app/src/ui-angular-material/styles/main.css:
--------------------------------------------------------------------------------
1 | /* Material Icons */
2 |
3 | @font-face {
4 | font-family: 'Material Icons';
5 | font-style: normal;
6 | font-weight: 400;
7 | src: url('~material-design-icons/iconfont/MaterialIcons-Regular.eot'); /* For IE6-8 */
8 | src: local('Material Icons'),
9 | local('MaterialIcons-Regular'),
10 | url('~material-design-icons/iconfont/MaterialIcons-Regular.woff2') format('woff2'),
11 | url('~material-design-icons/iconfont/MaterialIcons-Regular.woff') format('woff'),
12 | url('~material-design-icons/iconfont/MaterialIcons-Regular.ttf') format('truetype');
13 | }
14 |
15 | .material-icons {
16 | direction: ltr;
17 | display: inline-block;
18 | font-family: 'Material Icons';
19 | font-feature-settings: 'liga'; /* Support for IE */
20 | font-size: 24px; /* Preferred icon size */
21 | -moz-osx-font-smoothing: grayscale; /* Support for Firefox */
22 | -webkit-font-smoothing: antialiased; /* Support for all WebKit browsers */
23 | font-style: normal;
24 | font-weight: normal;
25 | letter-spacing: normal;
26 | line-height: 1;
27 | text-rendering: optimizeLegibility; /* Support for Safari and Chrome */
28 | text-transform: none;
29 | white-space: nowrap;
30 | word-wrap: normal;
31 | }
32 |
--------------------------------------------------------------------------------
/test/app/app-name.spec.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const path = require('path');
4 | const helpers = require('yeoman-test');
5 | const assert = require('yeoman-assert');
6 |
7 | module.exports = () => {
8 |
9 | describe('when changing app name', () => {
10 |
11 | before(done => {
12 | this.generator = helpers
13 | .run(path.join(__dirname, '../../generators/app'))
14 | .withPrompts({
15 | appName: 'Webpack Generator'
16 | })
17 | .toPromise()
18 | .then(() => done());
19 | });
20 |
21 | it('should use the slugified app name as the angular package', () => {
22 | assert.fileContent('src/app/app.js', /angular\.module\('webpack-generator'/);
23 | });
24 |
25 | it('should use the app name in the package.json', () => {
26 | assert.jsonFileContent('package.json', {name: 'webpack-generator'});
27 | });
28 |
29 | it('should use the app name for the HTML title', () => {
30 | assert.fileContent('src/public/index.html', /Webpack Generator<\/title>/);
31 | });
32 |
33 | it('should use the slugified app name for the ng-app directive', () => {
34 | assert.fileContent('src/public/index.html', /ng-app="webpack-generator"/);
35 | });
36 |
37 | });
38 |
39 | };
40 |
--------------------------------------------------------------------------------
/templates/app/src/config/README.md:
--------------------------------------------------------------------------------
1 | # Configuration
2 |
3 | ## Environments
4 |
5 | To add an environment configuration file, just create a new `config.ENV.json` file.
6 | To use the new environment, you must create the related npm script.
7 |
8 | ##### e.g for an `integration` environment:
9 |
10 | - Create the `src/config/config.int.json` file
11 | - Create the related scripts in `package.json`:
12 |
13 | ```json
14 | "scripts": {
15 | "build:int": "rimraf dist && webpack --bail --progress --profile --env int",
16 | "serve:int": "webpack-dev-server --history-api-fallback --inline --progress --hot --env int"
17 | }
18 | ```
19 |
20 | By default, the application is launched in `dev` environment.
21 |
22 | <% if (angularTranslate) { -%>
23 | ## [Angular Translate](https://angular-translate.github.io/)
24 |
25 | ### Configuration
26 |
27 | Locale translation files are located under `/src/config/i18n` folder.
28 |
29 | angular-translate is configured via the `$translateProvider` under `src/app/app.config.js` file.
30 |
31 | ### Asynchronous
32 |
33 | All translations from different languages are loaded asynchronously via a static asynchronous loader.
34 |
35 | https://angular-translate.github.io/docs/#/guide/12_asynchronous-loading#asynchronous-loading_using-staticfilesloader
36 | <% } -%>
37 |
--------------------------------------------------------------------------------
/templates/app/test/unit/app.spec.js:
--------------------------------------------------------------------------------
1 | import AppModule from '../../src/app/app';
2 |
3 | describe('App', () => {
4 | let <% if (angularTranslate) { %>$httpBackend, <% } %>$rootScope, $state, $location, $compile;
5 |
6 | beforeEach(window.module(AppModule));
7 |
8 | beforeEach(inject(($injector) => {
9 | $rootScope = $injector.get('$rootScope');
10 | $state = $injector.get('$state');
11 | $location = $injector.get('$location');
12 | $compile = $injector.get('$compile');
13 | <% if (angularTranslate) { -%>
14 | $httpBackend = $injector.get('$httpBackend');
15 | $httpBackend.whenGET('fr-FR.json').respond(200, {});
16 | <% } -%>
17 | }));
18 |
19 | describe('Module', () => {
20 | it('App component should be visible when navigates to /', () => {
21 | $location.url('/');
22 | $rootScope.$digest();
23 | $state.current.component.should.equal('app');
24 | });
25 | });
26 |
27 | describe('View', () => {
28 | let scope, template;
29 |
30 | beforeEach(() => {
31 | scope = $rootScope.$new();
32 | template = $compile('')(scope);
33 | scope.$apply();
34 | });
35 |
36 | it('Template should contains a title', () => {
37 | template.html().should.equal(<% if (angularTranslate) { -%>'app.title'<% } else { -%>'My App'<% } -%>);
38 | });
39 |
40 | });
41 | });
42 |
--------------------------------------------------------------------------------
/templates/app/src/styles-sass/abstracts/README.md:
--------------------------------------------------------------------------------
1 | # Abstracts
2 |
3 | The `abstracts/` folder gathers all Sass tools and helpers used across the project. Every global variable, function, mixin and placeholder should be put in here.
4 |
5 | The rule of thumb for this folder is that it should not output a single line of CSS when compiled on its own. These are nothing but Sass helpers.
6 |
7 | * `_variables.scss`
8 | * `_mixins.scss`
9 | * `_functions.scss`
10 | * `_placeholders.scss`
11 |
12 | When working on a very large project with a lot of abstract utilities, it might be interesting to group them by topic rather than type, for instance typography (`_typography.scss`), theming (`_theming.scss`), etc. Each file contains all the related helpers: variables, functions, mixins and placeholders. Doing so can make the code easier to browse and maintain, especially when files are getting very long.
13 |
14 | The `abstracts/` folder might also be called `utilities/` or `helpers/`, depending on what you prefer.
15 |
16 | ## Structure
17 |
18 | ```
19 | styles/
20 | |
21 | |– abstracts/
22 | | |– _variables.scss # Sass Variables
23 | | |– _functions.scss # Sass Functions
24 | | |– _mixins.scss # Sass Mixins
25 | | |– _placeholders.scss # Sass Placeholders
26 | ```
27 |
28 | ## Source
29 |
30 | [https://sass-guidelin.es](https://sass-guidelin.es/?utm_source=CSS-Weekly&utm_campaign=Issue-145&utm_medium=RSS#architecture)
31 |
--------------------------------------------------------------------------------
/templates/app/src/styles-less/abstracts/README.md:
--------------------------------------------------------------------------------
1 | # Abstracts
2 |
3 | The `abstracts/` folder gathers all Less tools and helpers used across the project. Every global variable, function, mixin and placeholder should be put in here.
4 |
5 | The rule of thumb for this folder is that it should not output a single line of CSS when compiled on its own. These are nothing but Less helpers.
6 |
7 | * `_variables.less`
8 | * `_mixins.less`
9 | * `_functions.less`
10 | * `_placeholders.less`
11 |
12 | When working on a very large project with a lot of abstract utilities, it might be interesting to group them by topic rather than type, for instance typography (`_typography.less`), theming (`_theming.less`), etc. Each file contains all the related helpers: variables, functions, mixins and placeholders. Doing so can make the code easier to browse and maintain, especially when files are getting very long.
13 |
14 | The `abstracts/` folder might also be called `utilities/` or `helpers/`, depending on what you prefer.
15 |
16 | ## Structure
17 |
18 | ```
19 | styles/
20 | |
21 | |– abstracts/
22 | | |– _variables.less # Less Variables
23 | | |– _functions.less # Less Functions
24 | | |– _mixins.less # Less Mixins
25 | | |– _placeholders.less # Less Placeholders
26 | ```
27 |
28 | ## Source
29 |
30 | Source (SASS guidelines applied to LESS):
31 |
32 | [https://sass-guidelin.es](https://sass-guidelin.es/?utm_source=CSS-Weekly&utm_campaign=Issue-145&utm_medium=RSS#architecture)
33 |
--------------------------------------------------------------------------------
/test/app/resource.spec.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const path = require('path');
4 | const helpers = require('yeoman-test');
5 | const assert = require('yeoman-assert');
6 |
7 | module.exports = () => {
8 |
9 | describe('when using restangular', () => {
10 |
11 | before(done => {
12 | this.generator = helpers
13 | .run(path.join(__dirname, '../../generators/app'))
14 | .withPrompts({
15 | resource: 'restangular'
16 | })
17 | .toPromise()
18 | .then(() => done());
19 | });
20 |
21 | it('should add restangular to the package.json', () => {
22 | assert.fileContent('package.json', 'restangular');
23 | });
24 |
25 | it('should import restangular in the angular modules', () => {
26 | assert.fileContent('src/app/app.js', 'import \'lodash\'');
27 | assert.fileContent('src/app/app.js', 'import \'restangular\'');
28 | assert.fileContent('src/app/app.js', /angular\.module\([\s\S]*, [\s\S]*?restangular/);
29 | });
30 | });
31 |
32 | describe('when using ngResource', () => {
33 |
34 | before(done => {
35 | this.generator = helpers
36 | .run(path.join(__dirname, '../../generators/app'))
37 | .withPrompts({
38 | resource: 'ngResource'
39 | })
40 | .toPromise()
41 | .then(() => done());
42 | });
43 |
44 | it('should add angular-resource to the package.json', () => {
45 | assert.fileContent('package.json', 'angular-resource');
46 | });
47 |
48 | it('should import angular-resource in the angular modules', () => {
49 | assert.fileContent('src/app/app.js', 'import ngResource from \'angular-resource\'');
50 | assert.fileContent('src/app/app.js', /angular\.module\([\s\S]*, [\s\S]*?ngResource/);
51 | });
52 | });
53 | };
54 |
--------------------------------------------------------------------------------
/test/app/tests.spec.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const path = require('path');
4 | const helpers = require('yeoman-test');
5 | const assert = require('yeoman-assert');
6 |
7 | module.exports = () => {
8 |
9 | describe('Unit tests', () => {
10 |
11 | before(done => {
12 | this.generator = helpers
13 | .run(path.join(__dirname, '../../generators/app'))
14 | .toPromise()
15 | .then(() => done());
16 | });
17 |
18 | it('should write karma.conf.js', () => {
19 | assert.file('karma.conf.js');
20 | });
21 |
22 | it('should add karma/mocha packages to the package.json', () => {
23 | assert.fileContent('package.json', /"devDependencies": {[^}]*"babel-plugin-istanbul": "\^[\w\.\-]+"/);
24 | assert.fileContent('package.json', /"devDependencies": {[^}]*"karma": "\^[\w\.\-]+"/);
25 | assert.fileContent('package.json', /"devDependencies": {[^}]*"mocha": "\^[\w\.\-]+"/);
26 | assert.fileContent('package.json', /"devDependencies": {[^}]*"chai": "\^[\w\.\-]+"/);
27 | assert.fileContent('package.json', /"devDependencies": {[^}]*"karma-webpack": "\^[\w\.\-]+"/);
28 | assert.fileContent('package.json', /"devDependencies": {[^}]*"karma-mocha": "\^[\w\.\-]+"/);
29 | assert.fileContent('package.json', /"devDependencies": {[^}]*"karma-chai": "\^[\w\.\-]+"/);
30 | assert.fileContent('package.json', /"devDependencies": {[^}]*"karma-phantomjs-launcher": "\^[\w\.\-]+"/);
31 | assert.fileContent('package.json', /"devDependencies": {[^}]*"karma-sourcemap-loader": "\^[\w\.\-]+"/);
32 | assert.fileContent('package.json', /"devDependencies": {[^}]*"karma-spec-reporter": "[\w\.\-]+"/);
33 | });
34 |
35 | it('should write test files', () => {
36 | assert.file('test/unit.spec.js');
37 | assert.file('test/unit/app.spec.js');
38 | });
39 |
40 | });
41 |
42 | };
43 |
--------------------------------------------------------------------------------
/templates/app/COMMITS-CONVENTION.md:
--------------------------------------------------------------------------------
1 | # Git commit message convention
2 |
3 | ```
4 | ():
5 |
6 |
7 | ```
8 |
9 | All lines are wrapped at 100 characters !
10 |
11 | ## Allowed ``
12 |
13 | * feat (feature)
14 | * fix (bug fix)
15 | * docs (documentation)
16 | * style (formatting, missing semi colons, …)
17 | * refactor
18 | * test (when adding missing tests)
19 | * chore (maintain)
20 |
21 | ## Allowed ``:
22 |
23 | Scope could be anything specifying place of the commit change. For example $location, $browser, compiler, scope, ng:href, etc...
24 |
25 | ## Breaking changes
26 |
27 | All breaking changes have to be mentioned in message body, on separated line:
28 |
29 | ```
30 | Breaks removed $browser.setUrl() method (use $browser.url(newUrl))
31 | Breaks ng:repeat option is no longer supported on selects (use ng:options)
32 | ```
33 |
34 | ## Message body
35 |
36 | uses the imperative, present tense: “change” not “changed” nor “changes”
37 | includes motivation for the change and contrasts with previous behavior
38 |
39 | ### Referencing issues
40 |
41 | Closed bugs should be listed on a separate line in the body prefixed with "Closes" keyword like this:
42 |
43 | ```
44 | Closes #234
45 | ```
46 |
47 | or in case of multiple issues:
48 |
49 | ```
50 | Closes #123, #245, #992
51 | ```
52 |
53 | ## Commit message hook
54 |
55 | To contribute, commit messages must follow the abobe convention.
56 | To be certain this convention is followed, install the given hook.
57 |
58 | Copy `tools/git/commit-msg.js` file to `.git/hooks/commit-msg` location:
59 |
60 | ```sh
61 | $ ln -s tools/git/commit-msg.js .git/hooks/commit-msg
62 | ```
63 |
64 | ## Rebase
65 |
66 | Configure your local git yo pull in `rebase` mode instead of default `merge` mode:
67 |
68 | ```sh
69 | $ git config pull.rebase true
70 | ```
71 |
72 | Among other things, this will avoid this king of messages:
73 |
74 | ```
75 | Merge branch 'develop' of https://[URL] into develop
76 | ```
77 |
--------------------------------------------------------------------------------
/test/app/angular-translate.spec.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const path = require('path');
4 | const helpers = require('yeoman-test');
5 | const assert = require('yeoman-assert');
6 |
7 | module.exports = () => {
8 |
9 | describe('when using angular-translate', () => {
10 |
11 | before(done => {
12 | this.generator = helpers
13 | .run(path.join(__dirname, '../../generators/app'))
14 | .withPrompts({
15 | otherModules: 'angular-translate'
16 | })
17 | .toPromise()
18 | .then(() => done());
19 | });
20 |
21 | it('should add angular-translate to the package.json', () => {
22 | assert.fileContent('package.json', /"angular-translate"/);
23 | assert.fileContent('package.json', /"angular-translate-loader-static-files"/);
24 | });
25 |
26 | it('should import angular-translate module', () => {
27 | assert.fileContent('src/app/app.js', 'import ngTranslate from \'angular-translate\'');
28 | assert.fileContent('src/app/app.js', 'import ngTranslateLoaderStaticFiles from \'angular-translate-loader-static-files\'');
29 | assert.fileContent('src/app/app.js', /angular\.module\([\s\S]*, [\s\S]*?ngTranslate/);
30 | assert.fileContent('src/app/app.js', /angular\.module\([\s\S]*, [\s\S]*?ngTranslateLoaderStaticFiles/);
31 | });
32 |
33 | it('should copy locale files to build the build folder', () => {
34 | assert.fileContent('webpack.config.js', '{ from: \'src/config/i18n\' }');
35 | });
36 |
37 | it('should generate default locale files', () => {
38 | assert.file('src/config/i18n/fr.json');
39 | assert.file('src/config/i18n/en.json');
40 | });
41 |
42 | it('should create an angular-translate section in config README', () => {
43 | assert.fileContent('src/config/README.md', 'Angular Translate');
44 | });
45 |
46 | it('should activate angular-sanitize no matter the user selection (angular-translate peer dependency)', () => {
47 | assert.fileContent('package.json', 'angular-sanitize');
48 | assert.fileContent('src/app/app.js', 'import ngSanitize from \'angular-sanitize\'');
49 | assert.fileContent('src/app/app.js', /angular\.module\([\s\S]*, [\s\S]*?ngSanitize/);
50 | });
51 |
52 | });
53 |
54 | };
55 |
--------------------------------------------------------------------------------
/test/app.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const path = require('path');
4 | const helpers = require('yeoman-test');
5 | const assert = require('yeoman-assert');
6 |
7 | let testEnvironments = require('./app/environments.spec');
8 | let testResource = require('./app/resource.spec');
9 | let testAngularTranslate = require('./app/angular-translate.spec');
10 | let testUIFrameworks = require('./app/ui-frameworks.spec');
11 | let testLinters = require('./app/linters.spec');
12 | let testCSSPreprocessors = require('./app/css-preprocessors.spec');
13 | let testSonar = require('./app/sonar.spec');
14 | let testJSONServer = require('./app/json-server.spec');
15 | let testAppName = require('./app/app-name.spec');
16 | let testDocsGenerator = require('./app/dgeni.spec');
17 | let testTests = require('./app/tests.spec');
18 |
19 | /**
20 | * Test app generator.
21 | */
22 | describe('app', () => {
23 |
24 | describe('default settings', () => {
25 | before(done => {
26 | this.generator = helpers
27 | .run(path.join(__dirname, '../generators/app'))
28 | .toPromise()
29 | .then(() => done());
30 | });
31 |
32 | it('should generate a README file', () => {
33 | assert.file('README.md');
34 | });
35 |
36 | it('should generate a CHANGELOG.md file', () => {
37 | assert.file('CHANGELOG.md');
38 | });
39 |
40 | it('should generate a commits convention', () => {
41 | assert.file('COMMITS-CONVENTION.md');
42 | assert.file('tools/git/commit-msg.js');
43 | });
44 |
45 | it('should generate the PostCSS configuration file', () => {
46 | assert.file('postcss.config.js');
47 | });
48 |
49 | it('should generate a main SASS file', () => {
50 | assert.file('src/styles/main.scss');
51 | assert.fileContent('src/styles/main.scss', '');
52 | });
53 |
54 | it('should add ui-router to the package.json', () => {
55 | assert.fileContent('package.json', /"dependencies": {[^}]*"angular-ui-router": "\^[\w\.\-]+"/);
56 | });
57 |
58 | it('should import ui-router in the app modules', () => {
59 | assert.fileContent('src/app/app.js', 'import uiRouter from \'angular-ui-router\';');
60 | assert.fileContent('src/app/app.js', /angular\.module\([\s\S]*, [\s\S]*?uiRouter/);
61 | });
62 | });
63 |
64 | testResource();
65 | testEnvironments();
66 | testAngularTranslate();
67 | testUIFrameworks();
68 | testLinters();
69 | testCSSPreprocessors();
70 | testSonar();
71 | testJSONServer();
72 | testAppName();
73 | testDocsGenerator();
74 | testTests();
75 |
76 | });
77 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Change Log
2 |
3 | All notable changes to this project will be documented in this file.
4 |
5 | The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/).
6 |
7 | ## Unreleased
8 |
9 | ### Fixed
10 |
11 | - **sonar**: path to rules files from `.sreporterrc` were not good from [@ValentinGot]
12 | - **sonar**: path to tests folder were not good from [@ValentinGot]
13 | - **npm**: include `templates` folder in generated npm package (Closes [#2](https://github.com/groupe-sii/generator-webpack-angular/issues/2)) from [@ValentinGot]
14 | - **npm**: ._* files where globally ignored by npm (Closes [#2](https://github.com/groupe-sii/generator-webpack-angular/issues/2)) from [@ValentinGot]
15 |
16 | ## 0.0.3 - 2016-12-09
17 |
18 | ### Fixed
19 |
20 | - missing package version
21 | - **README**: add npm package version
22 |
23 | ## 0.0.2 - 2016-12-09
24 |
25 | ### Fixed
26 |
27 | - remove npm organization from [@ValentinGot]
28 |
29 | ## 0.0.1 - 2016-12-09
30 |
31 | ### Added
32 |
33 | - **css-preprocessors**: which CSS preprocessor do you want? from [@aguele] & [@jledentu]
34 | - **resource**: would you like to use a REST resource library? from [@ValentinGot]
35 | - **environments**: management application environments from [@ValentinGot]
36 | - **angular-translate**: angular-translate (18n for your Angular app, made easy!) from [@ValentinGot]
37 | - **ui-router**: use [AngularUI Router](https://github.com/angular-ui/ui-router) by default from [@jledentu]
38 | - **ui-frameworks**: Which UI framework do you want? from [@ValentinGot]
39 | - **linting**: Add ESLint, HTMLHint, SCSSLint & CSSLint support from [@ValentinGot]
40 | - **package-manager**: Let's you choose between **npm** or **Yarn** package manager from [@ValentinGot]
41 | - **postcss**: Add PostCSS treatments from [@ValentinGot]
42 | - **debug**: Disable the [debug info](https://docs.angularjs.org/api/ng/provider/$compileProvider#debugInfoEnabled) in production environement from [@ole]
43 | - **sonar**: Generate linters reporters for the [SonarQube](https://github.com/groupe-sii/sonar-web-frontend-plugin) plugin from [@ValentinGot]
44 | - **json-server**: Allows you to easily create a RESTFull API for your application from [@ole]
45 | - **application name**: Let's you choose the name of your application from [@ole]
46 | - **documentation**: Generate documentation with dgeni from [@ole]
47 | - **tests**: Create unit tests with Karma from [@jledentu]
48 |
49 | [@aguele]: https://github.com/aguele
50 | [@jledentu]: https://github.com/jledentu
51 | [@ole]: https://github.com/liollury
52 | [@ValentinGot]: https://github.com/ValentinGot
53 |
--------------------------------------------------------------------------------
/templates/app/src/styles-sass/README.md:
--------------------------------------------------------------------------------
1 | # SASS
2 |
3 | Sources:
4 |
5 | [https://sass-guidelin.es](https://sass-guidelin.es/?utm_source=CSS-Weekly&utm_campaign=Issue-145&utm_medium=RSS#architecture)
6 |
7 | ## MAIN FILE
8 |
9 | The main file (usually labelled main.scss) should be the only Sass file from the whole code base not to begin with an underscore. This file should not contain anything but @import and comments.
10 |
11 | Files should be imported according to the folder they live in, one after the other in the following order:
12 |
13 | * abstracts/
14 | * vendors/
15 | * base/
16 | * layout/
17 | * components/
18 | * pages/
19 | * themes/
20 |
21 | In order to preserve readability, the main file should respect these guidelines:
22 |
23 | * one file per @import;
24 | * one @import per line;
25 | * no new line between two imports from the same folder;
26 | * a new line after the last import from a folder;
27 | * file extensions and leading underscores omitted.
28 |
29 | ```scss
30 | @import 'abstracts/variables';
31 | @import 'abstracts/functions';
32 | @import 'abstracts/mixins';
33 | @import 'abstracts/placeholders';
34 |
35 | @import 'vendors/bootstrap';
36 | @import 'vendors/jquery-ui';
37 |
38 | @import 'base/reset';
39 | @import 'base/typography';
40 |
41 | @import 'layout/navigation';
42 | @import 'layout/grid';
43 | @import 'layout/header';
44 | @import 'layout/footer';
45 | @import 'layout/sidebar';
46 | @import 'layout/forms';
47 |
48 | @import 'components/buttons';
49 | @import 'components/carousel';
50 | @import 'components/cover';
51 | @import 'components/dropdown';
52 |
53 | @import 'pages/home';
54 | @import 'pages/contact';
55 |
56 | @import 'themes/theme';
57 | @import 'themes/admin';
58 | ```
59 |
60 | There is another way of importing partials that I deem valid as well. On the bright side, it makes the file more readable. On the other hand, it makes updating it slightly more painful. Anyway, I’ll let you decide which is best, it does not matter much. For this way of doing, the main file should respect these guidelines:
61 |
62 | * one @import per folder;
63 | * a linebreak after @import;
64 | * each file on its own line;
65 | * a new line after the last import from a folder;
66 | * file extensions and leading underscores omitted.
67 |
68 | ```scss
69 | @import
70 | 'abstracts/variables',
71 | 'abstracts/functions',
72 | 'abstracts/mixins',
73 | 'abstracts/placeholders';
74 |
75 | @import
76 | 'vendors/bootstrap',
77 | 'vendors/jquery-ui';
78 |
79 | @import
80 | 'base/reset',
81 | 'base/typography';
82 |
83 | @import
84 | 'layout/navigation',
85 | 'layout/grid',
86 | 'layout/header',
87 | 'layout/footer',
88 | 'layout/sidebar',
89 | 'layout/forms';
90 |
91 | @import
92 | 'components/buttons',
93 | 'components/carousel',
94 | 'components/cover',
95 | 'components/dropdown';
96 |
97 | @import
98 | 'pages/home',
99 | 'pages/contact';
100 |
101 | @import
102 | 'themes/theme',
103 | 'themes/admin';
104 | ```
--------------------------------------------------------------------------------
/test/app/css-preprocessors.spec.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const path = require('path');
4 | const helpers = require('yeoman-test');
5 | const assert = require('yeoman-assert');
6 |
7 | module.exports = () => {
8 |
9 | describe('when using CSS', () => {
10 |
11 | before(done => {
12 | this.generator = helpers
13 | .run(path.join(__dirname, '../../generators/app'))
14 | .withPrompts({
15 | cssPreprocessor: 'css'
16 | })
17 | .toPromise()
18 | .then(() => done());
19 | });
20 |
21 | it('should add a main.css file', () => {
22 | assert.file('src/styles/main.css');
23 | });
24 |
25 | it('should use CSSLint rules', () => {
26 | assert.file('src/.csslintrc');
27 | assert.fileContent('package.json', 'csslint src/styles/');
28 | assert.fileContent('package.json', '"csslint"');
29 | });
30 |
31 | });
32 |
33 | describe('when using Sass', () => {
34 |
35 | before(done => {
36 | this.generator = helpers
37 | .run(path.join(__dirname, '../../generators/app'))
38 | .withPrompts({
39 | cssPreprocessor: 'sass'
40 | })
41 | .toPromise()
42 | .then(() => done());
43 | });
44 |
45 | it('should add a main.scss file', () => {
46 | assert.file('src/styles/main.scss');
47 | });
48 |
49 | it('should create a 7-1 pattern', () => {
50 | assert.file('src/styles/README.md');
51 | assert.file('src/styles/abstracts/README.md');
52 | assert.file('src/styles/base/README.md');
53 | assert.file('src/styles/components/README.md');
54 | assert.file('src/styles/layout/README.md');
55 | assert.file('src/styles/pages/README.md');
56 | assert.file('src/styles/themes/README.md');
57 | assert.file('src/styles/vendors/README.md');
58 | });
59 |
60 | it('should use SASSLint rules', () => {
61 | assert.file('.sass-lint.yml');
62 | assert.fileContent('package.json', 'sass-lint -v');
63 | assert.fileContent('package.json', '"sasslintConfig": ".sass-lint.yml",');
64 | });
65 |
66 | });
67 |
68 | describe('when using Less', () => {
69 |
70 | before(done => {
71 | this.generator = helpers
72 | .run(path.join(__dirname, '../../generators/app'))
73 | .withPrompts({
74 | cssPreprocessor: 'less'
75 | })
76 | .toPromise()
77 | .then(() => done());
78 | });
79 |
80 | it('should add a main.less file', () => {
81 | assert.file('src/styles/main.less');
82 | });
83 |
84 | it('should create a 7-1 pattern', () => {
85 | assert.file('src/styles/README.md');
86 | assert.file('src/styles/abstracts/README.md');
87 | assert.file('src/styles/base/README.md');
88 | assert.file('src/styles/components/README.md');
89 | assert.file('src/styles/layout/README.md');
90 | assert.file('src/styles/pages/README.md');
91 | assert.file('src/styles/themes/README.md');
92 | assert.file('src/styles/vendors/README.md');
93 | });
94 |
95 | });
96 |
97 | };
98 |
--------------------------------------------------------------------------------
/templates/app/src/styles-less/README.md:
--------------------------------------------------------------------------------
1 | # LESS
2 |
3 | Sources (SASS guidelines applied to LESS):
4 |
5 | [https://sass-guidelin.es](https://sass-guidelin.es/?utm_source=CSS-Weekly&utm_campaign=Issue-145&utm_medium=RSS#architecture)
6 |
7 | ## MAIN FILE
8 |
9 | The main file (usually labelled `main.less`) should be the only Less file from the whole code base not to begin with an underscore. This file should not contain anything but `@import` and comments.
10 |
11 | Files should be imported according to the folder they live in, one after the other in the following order:
12 |
13 | * `abstracts/`
14 | * `vendors/`
15 | * `base/`
16 | * `layout/`
17 | * `components/`
18 | * `pages/`
19 | * `themes/`
20 |
21 | In order to preserve readability, the main file should respect these guidelines:
22 |
23 | * one file per `@import`;
24 | * one `@import` per line;
25 | * no new line between two imports from the same folder;
26 | * a new line after the last import from a folder;
27 | * file extensions and leading underscores omitted.
28 |
29 | ```less
30 | @import 'abstracts/variables';
31 | @import 'abstracts/functions';
32 | @import 'abstracts/mixins';
33 | @import 'abstracts/placeholders';
34 |
35 | @import 'vendors/bootstrap';
36 | @import 'vendors/jquery-ui';
37 |
38 | @import 'base/reset';
39 | @import 'base/typography';
40 |
41 | @import 'layout/navigation';
42 | @import 'layout/grid';
43 | @import 'layout/header';
44 | @import 'layout/footer';
45 | @import 'layout/sidebar';
46 | @import 'layout/forms';
47 |
48 | @import 'components/buttons';
49 | @import 'components/carousel';
50 | @import 'components/cover';
51 | @import 'components/dropdown';
52 |
53 | @import 'pages/home';
54 | @import 'pages/contact';
55 |
56 | @import 'themes/theme';
57 | @import 'themes/admin';
58 | ```
59 |
60 | There is another way of importing partials that I deem valid as well. On the bright side, it makes the file more readable. On the other hand, it makes updating it slightly more painful. Anyway, I’ll let you decide which is best, it does not matter much. For this way of doing, the main file should respect these guidelines:
61 |
62 | * one `@import` per folder;
63 | * a linebreak after `@import`;
64 | * each file on its own line;
65 | * a new line after the last import from a folder;
66 | * file extensions and leading underscores omitted.
67 |
68 | ```less
69 | @import
70 | 'abstracts/variables',
71 | 'abstracts/functions',
72 | 'abstracts/mixins',
73 | 'abstracts/placeholders';
74 |
75 | @import
76 | 'vendors/bootstrap',
77 | 'vendors/jquery-ui';
78 |
79 | @import
80 | 'base/reset',
81 | 'base/typography';
82 |
83 | @import
84 | 'layout/navigation',
85 | 'layout/grid',
86 | 'layout/header',
87 | 'layout/footer',
88 | 'layout/sidebar',
89 | 'layout/forms';
90 |
91 | @import
92 | 'components/buttons',
93 | 'components/carousel',
94 | 'components/cover',
95 | 'components/dropdown';
96 |
97 | @import
98 | 'pages/home',
99 | 'pages/contact';
100 |
101 | @import
102 | 'themes/theme',
103 | 'themes/admin';
104 | ```
105 |
--------------------------------------------------------------------------------
/templates/app/src/app/app.js:
--------------------------------------------------------------------------------
1 | /* global process */
2 | import angular from 'angular';
3 | <% if (ngAnimate || uiFramework === 'ngMaterial' || uiFramework === 'bootstrap') { -%>
4 | import ngAnimate from 'angular-animate';
5 | <% } -%>
6 | import ngAria from 'angular-aria';
7 | <% if (ngCookies) { -%>
8 | import ngCookies from 'angular-cookies';
9 | <% } -%>
10 | <% if (ngMessages) { -%>
11 | import ngMessages from 'angular-messages';
12 | <% } -%>
13 | <% if (ngSanitize || angularTranslate) { -%>
14 | import ngSanitize from 'angular-sanitize';
15 | <% } -%>
16 | <% if ((ngTouch || uiFramework === 'bootstrap') && uiFramework !== 'ngMaterial') { -%>
17 | import ngTouch from 'angular-touch';
18 | <% } -%>
19 | <% if (uiFramework === 'ngMaterial') { -%>
20 | import ngMaterial from 'angular-material';
21 | <% } -%>
22 | <% if (uiFramework === 'bootstrap') { -%>
23 | import ngBootstrap from 'angular-ui-bootstrap';
24 | <% } -%>
25 | <% if (angularTranslate) { -%>
26 | import ngTranslate from 'angular-translate';
27 | import ngTranslateLoaderStaticFiles from 'angular-translate-loader-static-files';
28 | <% } -%>
29 | import uiRouter from 'angular-ui-router';
30 | <% if (resource === 'ngResource') { -%>
31 | import ngResource from 'angular-resource';
32 | <% } -%>
33 | <% if (resource === 'restangular') { -%>
34 | import 'lodash';
35 | import 'restangular';
36 | <% } -%>
37 |
38 | <% if (cssPreprocessor === 'sass') { -%>
39 | import '../styles/main.scss';
40 | <% } else if (cssPreprocessor === 'less') { -%>
41 | import '../styles/main.less';
42 | <% } else { -%>
43 | import '../styles/main.css';
44 | <% } -%>
45 | <% if (uiFramework === 'ngMaterial') { -%>
46 | import 'angular-material/angular-material.css';
47 | <% } -%>
48 | <% if (uiFramework === 'bootstrap') { -%>
49 | import 'bootstrap/dist/css/bootstrap.min.css';
50 | <% } -%>
51 |
52 | import config from 'app.config';
53 |
54 | import appConfig from './app.config';
55 | import appRoute from './app.route';
56 | import appComponent from './app.component';
57 |
58 | export default angular.module('<%= _.slugify(appName) %>', [
59 | <% if (ngAnimate || uiFramework === 'ngMaterial' || uiFramework === 'bootstrap') { -%>
60 | ngAnimate,
61 | <% } -%>
62 | ngAria,
63 | <% if (ngCookies) { -%>
64 | ngCookies,
65 | <% } -%>
66 | <% if (ngMessages) { -%>
67 | ngMessages,
68 | <% } -%>
69 | <% if (ngSanitize || angularTranslate) { -%>
70 | ngSanitize,
71 | <% } -%>
72 | <% if ((ngTouch || uiFramework === 'bootstrap') && uiFramework !== 'ngMaterial') { -%>
73 | ngTouch,
74 | <% } -%>
75 | <% if (uiFramework === 'ngMaterial') { -%>
76 | ngMaterial,
77 | <% } -%>
78 | <% if (uiFramework === 'bootstrap') { -%>
79 | ngBootstrap,
80 | <% } -%>
81 | <% if (angularTranslate) { -%>
82 | ngTranslate,
83 | ngTranslateLoaderStaticFiles,
84 | <% } -%>
85 | <% if (resource === 'ngResource') { -%>
86 | ngResource,
87 | <% } -%>
88 | <% if (resource === 'restangular') { -%>
89 | 'restangular',
90 | <% } -%>
91 | uiRouter
92 | ])
93 | .config(appConfig)
94 | .config(appRoute)
95 | .constant('CONFIG', config)
96 | .constant('ENVIRONNEMENT', process.env.ENV_NAME)
97 | .component('app', appComponent)
98 | .name;
99 |
--------------------------------------------------------------------------------
/test/app/sonar.spec.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const path = require('path');
4 | const helpers = require('yeoman-test');
5 | const assert = require('yeoman-assert');
6 |
7 | module.exports = () => {
8 |
9 | describe('when using sonar-web-frontend-reporters', () => {
10 |
11 | before(done => {
12 | this.generator = helpers
13 | .run(path.join(__dirname, '../../generators/app'))
14 | .withPrompts({
15 | appName: 'Webpack Generator',
16 | otherModules: 'sonar-web-frontend-reporters'
17 | })
18 | .toPromise()
19 | .then(() => done());
20 | });
21 |
22 | it('should add sonar-web-frontend-reporters to the package.json', () => {
23 | assert.fileContent('package.json', /"sonar-web-frontend-reporters"/);
24 | });
25 |
26 | it('should create the reporters script', () => {
27 | assert.fileContent('package.json', /"sonar:reporters": "node_modules\/.bin\/sreporter"/);
28 | });
29 |
30 | it('should generate the sonar-web-frontend-reporters configuration file', () => {
31 | assert.file('.sreporterrc');
32 | });
33 |
34 | it('should use the app name in the sonar-web-frontend-reporters configuration file', () => {
35 | assert.jsonFileContent('.sreporterrc', {projectName: 'Webpack Generator'});
36 | });
37 |
38 | it('should generate the sonar-web-frontend-plugin configuration file', () => {
39 | assert.file('sonar-project.properties');
40 | });
41 |
42 | it('should use the app name in the sonar-web-frontend-plugin configuration file', () => {
43 | assert.fileContent('sonar-project.properties', /sonar.projectKey=webpack-generator/);
44 | assert.fileContent('sonar-project.properties', /sonar.projectName=Webpack Generator/);
45 | });
46 |
47 | it('should generate the filepath-loader.js file', () => {
48 | assert.file('filepath-loader.js');
49 | });
50 |
51 | it('should add filepath-loader in Webpack preLoaders', () => {
52 | assert.fileContent('webpack.config.js', `loader: path.join(__dirname, 'filepath-loader.js')`);
53 | });
54 |
55 | describe('when using CSS', () => {
56 |
57 | before(done => {
58 | this.generator = helpers
59 | .run(path.join(__dirname, '../../generators/app'))
60 | .withPrompts({
61 | cssPreprocessor: 'css',
62 | otherModules: 'sonar-web-frontend-reporters'
63 | })
64 | .toPromise()
65 | .then(() => done());
66 | });
67 |
68 | it('should create CSSLint reporter', () => {
69 | assert.fileContent('.sreporterrc', 'csslint');
70 | });
71 | });
72 |
73 | describe('when using SASS', () => {
74 |
75 | before(done => {
76 | this.generator = helpers
77 | .run(path.join(__dirname, '../../generators/app'))
78 | .withPrompts({
79 | cssPreprocessor: 'sass',
80 | otherModules: 'sonar-web-frontend-reporters'
81 | })
82 | .toPromise()
83 | .then(() => done());
84 | });
85 |
86 | it('should create SASSLint reporter', () => {
87 | assert.fileContent('.sreporterrc', 'sass-to-scsslint');
88 | });
89 | });
90 | });
91 | };
92 |
--------------------------------------------------------------------------------
/docs/STACK.md:
--------------------------------------------------------------------------------
1 | # Generator - Stack
2 |
3 | - [**AngularJS**](https://angularjs.org/): HTML enhanced for web apps!
4 | - [**Webpack**](https://webpack.github.io/): A bundler for javascript and friends.
5 |
6 | ## CSS preprocessors
7 |
8 | Let's you choose between these CSS preprocessors:
9 |
10 | - **CSS**: Pure CSS3.
11 | - [**Sass**](http://sass-lang.com/): CSS with superpowers.
12 | - [**Less**](http://lesscss.org/): The dynamic stylesheet language.
13 |
14 | ## UI Frameworks
15 |
16 | Let's you choose between these frameworks:
17 |
18 | - [**Bootstrap**](http://getbootstrap.com/): The most popular HTML, CSS, and JS framework.
19 | - [**Angular Material**](https://material.angularjs.org/latest/): The reference implementation of the Google's Material Design specification.
20 |
21 | ## Testing
22 |
23 | - [**Karma**](https://karma-runner.github.io/): Spectacular Test Runner for JavaScript.
24 |
25 | ## Linting
26 |
27 | - [**ESLint**](http://eslint.org/): The pluggable linting utility for JavaScript and JSX.
28 | - [**HTMLHint**](http://htmlhint.com/): A Static Code Analysis Tool for HTML.
29 | - [**SASSLint**](https://github.com/sasstools/sass-lint): Pure Node.js Sass linting.
30 | - [**CSSLint**](https://github.com/CSSLint/csslint): Automated linting of Cascading Stylesheets.
31 |
32 | ## Angular modules
33 |
34 | Let's you choose between these modules:
35 |
36 | - [**ngAnimate**](https://docs.angularjs.org/api/ngAnimate): Provides support for CSS-based animations (keyframes and transitions) as well as JavaScript-based animations via callback hooks.
37 | - [**ngCookies**](https://docs.angularjs.org/api/ngCookies): Provides a convenient wrapper for reading and writing browser cookies.
38 | - [**ngTouch**](https://docs.angularjs.org/api/ngTouch): Provides touch events and other helpers for touch-enabled devices.
39 | - [**ngSanitize**](https://docs.angularjs.org/api/ngSanitize): Provides functionality to sanitize HTML.
40 | - [**ngMessages**](https://docs.angularjs.org/api/ngMessages): Provides enhanced support for displaying messages within templates.
41 |
42 | ## Modules
43 |
44 | Let's you choose between these modules:
45 |
46 | - [**angular-translate**](https://angular-translate.github.io/): i18n in your Angular apps, made easy.
47 | - [**sonar-web-frontend-reporters**](https://github.com/groupe-sii/sonar-web-frontend-reporters): Create Front-End reporters for SonarQube.
48 | - [**json-server**](https://github.com/typicode/json-server): Allows you to easily create a RESTFull API for your application.
49 |
50 | ## Features
51 |
52 | - [**Babel**](https://babeljs.io/): Babel is a compiler for writing next generation JavaScript.
53 | - [**ng-annotate**](https://github.com/olov/ng-annotate): Add, remove and rebuild AngularJS dependency injection annotations.
54 | - [**PostCSS**](https://github.com/postcss/postcss): Transforming styles with JS plugins.
55 | - [**Autoprefixer**](https://github.com/postcss/autoprefixer): Parse CSS and add vendor prefixes to rules by [Can I Use](http://caniuse.com/).
56 | - [**Restangular**](https://github.com/mgonto/restangular): AngularJS service to handle Rest API Restful Resources properly and easily.
57 | - [**Commits conventions**](../templates/app/COMMITS-CONVENTION.md): Google for AngularJS Git commit guidelines.
58 |
--------------------------------------------------------------------------------
/templates/app/README.md:
--------------------------------------------------------------------------------
1 | # README
2 |
3 | ## Table of contents
4 |
5 | 1. [Prerequisites](#prerequisites)
6 | 1. [Installation](#installation)
7 | 1. [Scripts](#scripts)
8 | 1. [Contribute - Git](#contribute-git)
9 | 1. [Configuration](#configuration)
10 | 1. [Documentation](#documentation)
11 | <% if (cssPreprocessor === 'sass' || cssPreprocessor === 'less') { -%>
12 | 1. [Styling](#styling)
13 | <% } -%>
14 |
15 | ## Prerequisites
16 |
17 | These modules must be globally installed:
18 |
19 | * [`eslint`](https://www.npmjs.com/package/eslint): Code analysis for JavaScript & AngularJS.
20 | * [`htmlhint`](https://www.npmjs.com/package/htmlhint): Code analysis for HTML.
21 | <% if (cssPreprocessor === 'css') { -%>
22 | * [`csslint`](https://www.npmjs.com/package/csslint): Code analysis for CSS.
23 | <% } else if (cssPreprocessor === 'sass') { -%>
24 | * [`sass-lint`](https://github.com/sasstools/sass-lint): Code analysis for Sass.
25 | <% } -%>
26 |
27 | ## Installation
28 |
29 | ```sh
30 | $ npm install # Development
31 | $ npm install --production # Production (only `dependencies`)
32 | ```
33 |
34 | ## Scripts
35 |
36 | - `<%=packageManager -%> start` to launch `npm run server` and `json-server` (if checked) in parallel
37 | - `<%=packageManager -%> run serve` to launch a webpack-dev-server server on your source files
38 | - `<%=packageManager -%> run serve:prod` to launch a webpack-dev-server server on your source files in a **production** environment
39 | - `<%=packageManager -%> run build` to build an optimized version of your application in /dist
40 | - `<%=packageManager -%> run build:prod` to build an optimized version of your application in /dist in a **production** environment
41 | - `<%=packageManager -%> run test` to launch your unit tests with Karma
42 | - `<%=packageManager -%> run lint` to launch linting process
43 | <% if (sonarWebFrontendReporters) { -%>
44 | - `<%=packageManager -%> run sonar:reporters` to create the linters reporters for SonarQube plugin
45 | <% } -%>
46 | <% if (jsonServer) { -%>
47 | - `<%=packageManager -%> run json-server` to start a json-server
48 | <% } -%>
49 |
50 | ## Contribute - Git
51 |
52 | See [commits convention](COMMITS-CONVENTION.md).
53 |
54 | ## Configuration
55 |
56 | See [configuration documentation](src/config/README.md).
57 |
58 | ## Documentation
59 |
60 | Angular documentation is generated with [DGeni](https://github.com/angular/dgeni)
61 |
62 | Docs generation is performed by [webpack-angular-dgeni-plugin](https://github.com/groupe-sii/webpack-angular-dgeni-plugin/)
63 |
64 | Please refer to [Angular documentation](https://github.com/angular/angular.js/wiki/Writing-AngularJS-Documentation) for documentation comments.
65 |
66 | ### Configuration
67 |
68 | It's possible to include or exclude other glob link (default: `src/app/**/*`) in file `webpack.config.js` in `build` target.
69 |
70 | For more details about configuration, please refer to the [plugin documentation](https://github.com/groupe-sii/webpack-angular-dgeni-plugin).
71 |
72 | ### Launch
73 |
74 | Documentation is launched by adding `--docs` argument to webpack. Which is already done by default for `build` and `build:prod` NPM scripts.
75 |
76 | ### Static documentation
77 |
78 | Static documentation is written in markdown format under `docs` folder.
79 |
80 | <% if (cssPreprocessor === 'sass' || cssPreprocessor === 'less') { -%>
81 | ## Styling
82 |
83 | See styling [guidelines](src/styles/README.md).
84 | <% } -%>
85 |
--------------------------------------------------------------------------------
/templates/app/tools/git/commit-msg.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | /**
4 | * Git COMMIT-MSG hook for validating commit message
5 | * See https://docs.google.com/document/d/1rk04jEuGfk9kYzfqCuOlPTSJw3hEDZJTBN5E5f1SALo/edit
6 | *
7 | * Installation:
8 | * $ ln -s tools/git/commit-msg.js .git/hooks/commit-msg
9 | */
10 |
11 | 'use strict';
12 |
13 | const fs = require('fs'),
14 | util = require('util');
15 |
16 | const MAX_LENGTH = 100,
17 | PATTERN = /^(?:fixup!\s*)?(\w*)(\(([\w\$\.\*/-]*)\))?\: (.*)$/,
18 | IGNORED = /^WIP\:/,
19 | TYPES = {
20 | feat: true,
21 | fix: true,
22 | docs: true,
23 | style: true,
24 | refactor: true,
25 | perf: true,
26 | test: true,
27 | chore: true,
28 | revert: true
29 | };
30 |
31 | let error = function () {
32 | let allowedTypes = [];
33 |
34 | for (let type in TYPES) {
35 | if (TYPES[type]) {
36 | allowedTypes.push(type);
37 | }
38 | }
39 |
40 | // gitx does not display it
41 | // http://gitx.lighthouseapp.com/projects/17830/tickets/294-feature-display-hook-error-message-when-hook-fails
42 | // https://groups.google.com/group/gitx/browse_thread/thread/a03bcab60844b812
43 | console.error('INVALID COMMIT MSG: ' + util.format.apply(null, arguments) + '.\nAllowed : ' + allowedTypes.join(', '));
44 | };
45 |
46 | let validateMessage = function (message) {
47 | let isValid = true;
48 |
49 | if (IGNORED.test(message)) {
50 | console.log('Commit message validation ignored.');
51 | return true;
52 | }
53 |
54 | if (message.length > MAX_LENGTH) {
55 | error('is longer than %d characters !', MAX_LENGTH);
56 | isValid = false;
57 | }
58 |
59 | let match = PATTERN.exec(message);
60 |
61 | if (!match) {
62 | error('does not match "(): " ! was: ' + message);
63 | return false;
64 | }
65 |
66 | let type = match[1];
67 | let scope = match[3];
68 | let subject = match[4];
69 |
70 | if (!TYPES.hasOwnProperty(type)) {
71 | error('"%s" is not allowed type !', type);
72 | return false;
73 | }
74 |
75 | // Some more ideas, do want anything like this ?
76 | // - allow only specific scopes (eg. fix(docs) should not be allowed ?
77 | // - auto correct the type to lower case ?
78 | // - auto correct first letter of the subject to lower case ?
79 | // - auto add empty line after subject ?
80 | // - auto remove empty () ?
81 | // - auto correct typos in type ?
82 | // - store incorrect messages, so that we can learn
83 |
84 | return isValid;
85 | };
86 |
87 |
88 | let firstLineFromBuffer = function (buffer) {
89 | return buffer.toString().split('\n').shift();
90 | };
91 |
92 | // Publish for testing
93 | exports.validateMessage = validateMessage;
94 |
95 | // Hacky start if not run by jasmine :-D
96 | if (process.argv.join('').indexOf('jasmine-node') === -1) {
97 | let commitMsgFile = process.argv[2];
98 | let incorrectLogFile = commitMsgFile.replace('COMMIT_EDITMSG', 'logs/incorrect-commit-msgs');
99 |
100 | fs.readFile(commitMsgFile, function(err, buffer) {
101 | let msg = firstLineFromBuffer(buffer);
102 |
103 | if (!validateMessage(msg)) {
104 | fs.appendFile(incorrectLogFile, msg + '\n', function() {
105 | process.exit(1);
106 | });
107 | } else {
108 | process.exit(0);
109 | }
110 | });
111 | }
112 |
--------------------------------------------------------------------------------
/templates/app/karma.conf.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | let webpackConfig = require('./webpack.config');
4 |
5 | module.exports = function (config) {
6 |
7 | config.set({
8 |
9 | // base path that will be used to resolve all patterns (eg. files, exclude)
10 | basePath: '',
11 |
12 | // frameworks to use
13 | // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
14 | frameworks: ['mocha', 'chai'],
15 |
16 | // list of files / patterns to load in the browser
17 | files: [
18 | {pattern: 'test/unit.spec.js'}
19 | ],
20 |
21 | // list of files to exclude
22 | exclude: [],
23 |
24 | // preprocess matching files before serving them to the browser
25 | // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
26 | preprocessors: {
27 | 'test/unit.spec.js': ['webpack', 'sourcemap'<% if (sonarWebFrontendReporters) { -%>, 'junit'<% } -%>]
28 | },
29 |
30 | // test results reporter to use
31 | // possible values: 'dots', 'progress', 'spec'
32 | // available reporters: https://npmjs.org/browse/keyword/karma-reporter
33 | reporters: ['spec', <% if (sonarWebFrontendReporters) { -%>'junit', <% } -%>'coverage'],
34 |
35 | // enable / disable colors in the output (reporters and logs)
36 | colors: true,
37 |
38 | // level of logging
39 | // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
40 | logLevel: config.LOG_INFO,
41 |
42 | // enable / disable watching file and executing tests whenever any file changes
43 | autoWatch: false,
44 |
45 | // start these browsers
46 | // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
47 | browsers: ['PhantomJS'],
48 |
49 | specReporter: {
50 | maxLogLines: 5, // limit number of lines logged per test
51 | suppressErrorSummary: true, // do not print error summary
52 | suppressFailed: false, // do not print information about failed tests
53 | suppressPassed: false, // do not print information about passed tests
54 | suppressSkipped: true, // do not print information about skipped tests
55 | showSpecTiming: false // print the time elapsed for each spec
56 | },
57 |
58 | <% if (sonarWebFrontendReporters) { -%>
59 | // Reference: https://github.com/groupe-sii/karma-junit7-sonarqube-reporter
60 | junitReporter: {
61 | outputFile: 'reports/sonar/js-ut.xml',
62 | suite: ''
63 | },
64 | <% } -%>
65 |
66 | coverageReporter: {
67 | dir: '<%= (sonarWebFrontendReporters) ? "reports/sonar/" : "coverage/" -%>',
68 | reporters: [
69 | {
70 | type: 'lcovonly',
71 | subdir: '.',
72 | file: 'js-ut.lcov'
73 | }<% if (!sonarWebFrontendReporters) { -%>,
74 | {
75 | type: 'html',
76 | subdir: 'html'
77 | }
78 | <% } -%>
79 |
80 | ]
81 | },
82 |
83 | webpack: webpackConfig,
84 |
85 | webpackMiddleware: {
86 | noInfo: true,
87 | quiet: false,
88 | stats: {
89 | hash: false,
90 | version: false,
91 | assets: false,
92 | chunks: false,
93 | timings: false
94 | }
95 | },
96 |
97 | // Continuous Integration mode
98 | // if true, Karma captures browsers, runs the tests and exits
99 | singleRun: true,
100 |
101 | // Concurrency level
102 | // how many browser should be started simultaneous
103 | concurrency: Infinity
104 | });
105 |
106 | };
107 |
--------------------------------------------------------------------------------
/templates/app/_.sass-lint.yml:
--------------------------------------------------------------------------------
1 | # sass-lint config generated by make-sass-lint-config v0.1.2
2 | #
3 | # The following scss-lint Linters are not yet supported by sass-lint:
4 | # ElsePlacement, PropertyCount, SelectorDepth, UnnecessaryParentReference
5 | # Compass::*
6 | #
7 | # The following settings/values are unsupported by sass-lint:
8 | # Linter Indentation, option "allow_non_nested_indentation"
9 | # Linter Indentation, option "character"
10 | # Linter PropertySortOrder, option "separate_groups"
11 | # Linter SpaceBeforeBrace, option "allow_single_line_padding"
12 | # Linter VendorPrefix, option "identifier_list"
13 |
14 | files:
15 | include: './src/**/*.s+(a|c)ss'
16 | options:
17 | formatter: stylish
18 | merge-default-rules: false
19 | rules:
20 | border-zero:
21 | - 1
22 | - convention: zero
23 | brace-style:
24 | - 1
25 | - allow-single-line: true
26 | class-name-format:
27 | - 1
28 | - convention: hyphenatedlowercase
29 | clean-import-paths:
30 | - 1
31 | - filename-extension: false
32 | leading-underscore: false
33 | empty-line-between-blocks:
34 | - 1
35 | - ignore-single-line-rulesets: true
36 | extends-before-declarations: 1
37 | extends-before-mixins: 1
38 | final-newline:
39 | - 1
40 | - include: true
41 | force-attribute-nesting: 1
42 | force-element-nesting: 1
43 | force-pseudo-nesting: 1
44 | function-name-format:
45 | - 1
46 | - allow-leading-underscore: true
47 | convention: hyphenatedlowercase
48 | hex-length:
49 | - 1
50 | - style: long
51 | hex-notation:
52 | - 1
53 | - style: uppercase
54 | id-name-format:
55 | - 1
56 | - convention: hyphenatedlowercase
57 | indentation:
58 | - 1
59 | - size: 2
60 | leading-zero:
61 | - 1
62 | - include: false
63 | mixin-name-format:
64 | - 1
65 | - allow-leading-underscore: true
66 | convention: hyphenatedlowercase
67 | mixins-before-declarations: 1
68 | nesting-depth:
69 | - 1
70 | - max-depth: 6
71 | no-color-keywords: 1
72 | no-color-literals: 1
73 | no-css-comments: 1
74 | no-debug: 1
75 | no-duplicate-properties: 1
76 | no-empty-rulesets: 1
77 | no-ids: 1
78 | no-important: 0
79 | no-invalid-hex: 1
80 | no-mergeable-selectors: 1
81 | no-misspelled-properties:
82 | - 1
83 | - extra-properties: []
84 | no-qualifying-elements:
85 | - 0
86 | - allow-element-with-attribute: false
87 | allow-element-with-class: false
88 | allow-element-with-id: false
89 | no-trailing-zero: 1
90 | no-url-protocols: 1
91 | no-vendor-prefixes:
92 | - 1
93 | - additional-identifiers: []
94 | excluded-identifiers: []
95 | placeholder-in-extend: 1
96 | placeholder-name-format:
97 | - 1
98 | - convention: hyphenatedlowercase
99 | property-sort-order:
100 | - 0
101 | - ignore-custom-properties: false
102 | quotes:
103 | - 1
104 | - style: single
105 | shorthand-values: 1
106 | single-line-per-selector: 1
107 | space-after-bang:
108 | - 1
109 | - include: false
110 | space-after-colon:
111 | - 1
112 | - include: true
113 | space-after-comma: 1
114 | space-before-bang:
115 | - 1
116 | - include: true
117 | space-before-brace:
118 | - 1
119 | - include: true
120 | space-before-colon: 1
121 | space-between-parens:
122 | - 1
123 | - include: false
124 | trailing-semicolon: 1
125 | url-quotes: 1
126 | variable-for-property:
127 | - 0
128 | - properties: []
129 | variable-name-format:
130 | - 1
131 | - allow-leading-underscore: true
132 | convention: hyphenatedlowercase
133 | zero-unit: 1
134 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Generator Webpack Angular
2 | [](https://travis-ci.org/groupe-sii/generator-webpack-angular)
3 | [![NPM version][npm-image]][npm-url]
4 |
5 | [npm-image]: https://badge.fury.io/js/generator-webpack-angular.svg
6 | [npm-url]: https://npmjs.org/package/generator-webpack-angular
7 |
8 | > Yeoman generator for building Single Page Apps with AngularJS, ES6, Webpack.
9 |
10 | ### This project is no longer maintained. Please use [Clea CLI](https://github.com/groupe-sii/clea-cli) instead, which is way more complete.
11 |
12 | ## Generator
13 |
14 | What's included in details over [here](docs/STACK.md)
15 |
16 | ### Stack
17 |
18 | [](https://angularjs.org/)
19 | [](https://webpack.github.io/)
20 | [](https://karma-runner.github.io)
21 | [](http://eslint.org/)
22 |
23 | ### CSS preprocessors
24 |
25 | 
26 | [](http://sass-lang.com/)
27 | [](http://lesscss.org/)
28 |
29 | ### UI Frameworks
30 |
31 | [](https://material.angularjs.org/latest/)
32 | [](http://getbootstrap.com/)
33 |
34 | ### Modules
35 |
36 | [](https://angular-translate.github.io/)
37 | [](https://github.com/typicode/json-server)
38 | [](https://github.com/groupe-sii/sonar-web-frontend-reporters)
39 |
40 | ### Doc generator
41 | [](https://github.com/angular/dgeni)
42 |
43 | ### Package Managers
44 |
45 | [](https://www.npmjs.com/)
46 | [](https://yarnpkg.com/)
47 |
48 | ## Usage
49 |
50 | ### Install
51 |
52 | #### Install required tools `yo`:
53 |
54 | ```sh
55 | $ npm install -g yo
56 | ```
57 |
58 | #### Install `generator-webpack-angular`:
59 |
60 | ```sh
61 | $ npm install generator-webpack-angular
62 | ```
63 |
64 | ### Run
65 |
66 | #### Create a new directory, and go into:
67 |
68 | ```sh
69 | $ mkdir my-new-project && cd my-new-project
70 | ```
71 |
72 | #### Run `yo webpack-angular`, and select desired technologies:
73 |
74 | ```sh
75 | $ yo webpack-angular
76 | ```
77 |
78 | #### Use NPM scripts
79 |
80 | - `npm start` to launch `npm run server` and `json-server` (if checked) in parallel
81 | - `npm run serve` to launch a webpack-dev-server server on your source files
82 | - `npm run serve:prod` to launch a webpack-dev-server server on your source files in a **production** environment
83 | - `npm run build` to build an optimized version of your application in /dist + docs generation
84 | - `npm run build:prod` to build an optimized version of your application in /dist in a **production** environment + docs generation
85 | - `npm run test` to launch your unit tests with Karma
86 | - `npm run lint` to launch linting process
87 | - `npm run sonar:reporters` to create the linters reporters for SonarQube plugin (Only if it was chosen)
88 | - `npm run json-server` to start a json-server (Only if it was chosen)
89 |
90 | ## [Changelog](https://github.com/groupe-sii/generator-webpack-angular/blob/master/CHANGELOG.md)
91 |
92 | ## Roadmap
93 |
94 | - [x] How to call REST APIs ? ($resource, Restangular)
95 | - [x] Handle environments
96 | - [x] angular-translate support
97 | - [x] UI Router as default router
98 | - [x] CSS preprocessors (CSS, Sass, Less)
99 | - [x] Angular modules choice (angular-animate, angular-touch, ...)
100 | - [x] UI Frameworks choice (angular-material, bootstrap)
101 | - [x] Linters (ESLint, HTMLHint, SASSLint, CSSLint)
102 | - [x] PostCSS integration
103 | - [x] Mock server REST API with json-server
104 | - [x] Sonar reporters
105 | - [x] Ask user for application name
106 | - [x] Unit tests with Karma and Mocha
107 | - [x] Code coverage
108 | - [ ] Landing page post generation
109 | - [x] Dgeni to generate documentation
110 |
111 | ## License
112 |
113 | MIT License
114 |
115 | Copyright (c) 2016 Groupe SII
116 |
--------------------------------------------------------------------------------
/templates/app/_.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": [ "eslint:recommended", "angular" ],
3 | "parserOptions": {
4 | "ecmaVersion": 6,
5 | "sourceType": "module"
6 | },
7 | "rules": {
8 | "angular/no-service-method": 0,
9 | "no-template-curly-in-string": "error",
10 | "no-unsafe-negation": "error",
11 | "block-scoped-var": "error",
12 | "curly": "error",
13 | "default-case": "error",
14 | "dot-notation": "error",
15 | "eqeqeq": "error",
16 | "no-alert": "error",
17 | "no-caller": "error",
18 | "no-else-return": "error",
19 | "no-eq-null": "error",
20 | "no-eval": "error",
21 | "no-extra-bind": "error",
22 | "no-extra-label": "error",
23 | "no-floating-decimal": "error",
24 | "no-global-assign": "error",
25 | "no-implicit-coercion": "error",
26 | "no-implied-eval": "error",
27 | "no-iterator": "error",
28 | "no-labels": "error",
29 | "no-lone-blocks": "error",
30 | "no-loop-func": "error",
31 | "no-multi-spaces": "error",
32 | "no-multi-str": "error",
33 | "no-new-func": "error",
34 | "no-new-wrappers": "error",
35 | "no-new": "error",
36 | "no-octal-escape": "error",
37 | "no-param-reassign": "error",
38 | "no-proto": "error",
39 | "no-return-assign": ["error", "always"],
40 | "no-self-compare": "error",
41 | "no-sequences": "error",
42 | "no-throw-literal": "error",
43 | "no-unmodified-loop-condition": "error",
44 | "no-unused-expressions": "error",
45 | "no-unused-labels": "error",
46 | "no-useless-call": "error",
47 | "no-useless-concat": "error",
48 | "no-useless-escape": "error",
49 | "no-void": "error",
50 | "no-with": "error",
51 | "radix": "error",
52 | "no-label-var": "error",
53 | "no-shadow-restricted-names": "error",
54 | "no-undef-init": "error",
55 | "no-undef": ["error", {
56 | "typeof": true
57 | }],
58 | "no-use-before-define": ["error", "nofunc"],
59 | "strict": ["error", "safe"],
60 | "brace-style": "error",
61 | "comma-dangle": ["error", "never"],
62 | "comma-spacing": "error",
63 | "comma-style": "error",
64 | "func-call-spacing": ["error", "never"],
65 | "func-names": ["error", "never"],
66 | "indent": ["error", 2, {
67 | "SwitchCase": 2
68 | }],
69 | "key-spacing": ["error", {
70 | "align": "colon"
71 | }],
72 | "keyword-spacing": "error",
73 | "linebreak-style": ["error", "unix"],
74 | "max-depth": "warn",
75 | "space-before-function-paren": ["error", "always"],
76 | "max-nested-callbacks": ["warn", 4],
77 | "max-statements-per-line": "error",
78 | "new-cap": "error",
79 | "new-parens": "error",
80 | "no-array-constructor": "error",
81 | "no-lonely-if": "error",
82 | "no-mixed-operators": "error",
83 | "no-mixed-spaces-and-tabs": "error",
84 | "no-multiple-empty-lines": "error",
85 | "no-negated-condition": "error",
86 | "no-new-object": "error",
87 | "no-restricted-syntax": ["error", "WithStatement"],
88 | "no-trailing-spaces": "error",
89 | "no-unneeded-ternary": "error",
90 | "no-whitespace-before-property": "error",
91 | "object-curly-spacing": ["error", "always"],
92 | "operator-assignment": "error",
93 | "operator-linebreak": "error",
94 | "quote-props": ["error", "as-needed"],
95 | "quotes": ["error", "single", {
96 | "allowTemplateLiterals": true
97 | }],
98 | "semi-spacing": ["error", {
99 | "before": false,
100 | "after": true
101 | }],
102 | "semi": "error",
103 | "space-before-blocks": "error",
104 | "space-in-parens": "error",
105 | "space-infix-ops": "error",
106 | "space-unary-ops": "error",
107 | "spaced-comment": ["error", "always", {
108 | "line": {
109 | "exceptions": ["-"]
110 | },
111 | "block": {
112 | "markers": ["!"],
113 | "balanced": true
114 | }
115 | }],
116 | "unicode-bom": "error",
117 | "arrow-parens": "error",
118 | "arrow-spacing": ["error", {
119 | "before": true,
120 | "after": true
121 | }],
122 | "generator-star-spacing": ["error", "both"],
123 | "no-duplicate-imports": ["error", {
124 | "includeExports": true
125 | }],
126 | "no-useless-computed-key": "error",
127 | "no-useless-constructor": "error",
128 | "no-useless-rename": "error",
129 | "rest-spread-spacing": "error",
130 | "symbol-description": "error",
131 | "template-curly-spacing": "error",
132 | "yield-star-spacing": ["error", "both"]
133 | },
134 | "env": {
135 | "browser": true
136 | },
137 | "globals": {
138 | "angular": true,
139 | "module": true,
140 | "inject": true,
141 | "require": true
142 | }
143 | }
144 |
--------------------------------------------------------------------------------
/templates/app/_package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "<%= _.slugify(appName) %>",
3 | "version": "0.0.1",
4 | "private": true,
5 | <% if (cssPreprocessor === 'sass') { -%>
6 | "sasslintConfig": ".sass-lint.yml",
7 | <% } -%>
8 | "scripts": {
9 | "build": "rimraf dist && webpack --bail --progress --profile --docs --env dev",
10 | "build:prod": "rimraf dist && webpack --bail --progress --profile --docs --env prod",
11 | "start": "npm-run-all --parallel serve<% if (jsonServer) { -%> json-server<% } -%>",
12 | "serve": "webpack-dev-server --history-api-fallback --inline --progress --hot --env dev",
13 | "serve:prod": "webpack-dev-server --history-api-fallback --inline --progress --hot --env prod",
14 | "test": "npm run lint && karma start",
15 | "test-watch": "karma start --auto-watch --no-single-run",
16 | "lint": "eslint src/ && htmlhint src/<% if (cssPreprocessor === 'css') { -%> && csslint src/styles/<% } else if (cssPreprocessor === 'sass') { -%> && sass-lint -v<% } -%>"<% if (sonarWebFrontendReporters || jsonServer) { -%>,
17 | <% } -%>
18 | <% if (sonarWebFrontendReporters) { -%>
19 | "sonar:reporters": "node_modules/.bin/sreporter"<% if (jsonServer) { -%>,
20 | <% } else { -%>
21 |
22 | <% } -%>
23 | <% } -%>
24 | <% if (jsonServer) { -%>
25 | "json-server": "json-server json-server/db.json --routes json-server/routes.json"
26 | <% } -%>
27 | },
28 | "dependencies": {
29 | "angular": "^1.6.0",
30 | <% if (ngAnimate || uiFramework === 'ngMaterial' || uiFramework === 'bootstrap') { -%>
31 | "angular-animate": "^1.6.0",
32 | <% } -%>
33 | "angular-aria": "^1.6.0",
34 | <% if (ngCookies) { -%>
35 | "angular-cookies": "^1.6.0",
36 | <% } -%>
37 | <% if (uiFramework === 'ngMaterial') { -%>
38 | "angular-material": "^1.1.1",
39 | <% } -%>
40 | <% if (ngMessages) { -%>
41 | "angular-messages": "^1.6.0",
42 | <% } -%>
43 | <% if (ngSanitize || angularTranslate) { -%>
44 | "angular-sanitize": "^1.6.0",
45 | <% } -%>
46 | <% if ((ngTouch || uiFramework === 'bootstrap') && uiFramework !== 'ngMaterial') { -%>
47 | "angular-touch": "^1.6.0",
48 | <% } -%>
49 | <% if (resource === 'ngResource') { -%>
50 | "angular-resource": "^1.6.0",
51 | <% } -%>
52 | <% if (angularTranslate) { -%>
53 | "angular-translate": "^2.13.0",
54 | "angular-translate-loader-static-files": "^2.13.0",
55 | <% } -%>
56 | <% if (uiFramework === 'bootstrap') { -%>
57 | "angular-ui-bootstrap": "^2.2.0",
58 | "bootstrap": "^3.3.7",
59 | <% } -%>
60 | "angular-ui-router": "^1.0.0-beta.3"<% if (uiFramework === 'ngMaterial') { -%>,
61 | "material-design-icons": "^3.0.1"<% } -%>
62 | <% if (resource === 'restangular') { %>,
63 | "restangular": "^1.5.2"<% } %>
64 | },
65 | "devDependencies": {
66 | "angular-mocks": "^1.6.0",
67 | "babel-core": "^6.17.0",
68 | "babel-loader": "^6.2.5",
69 | "babel-plugin-istanbul": "^3.0.0",
70 | "babel-preset-es2015": "^6.16.0",
71 | "chai": "^3.5.0",
72 | "copy-webpack-plugin": "^3.0.1",
73 | "css-loader": "^0.25.0",
74 | "webpack-angular-dgeni-plugin": "^0.0.1",
75 | "npm-run-all": "^3.1.2",
76 | <% if (cssPreprocessor === 'css') { -%>
77 | "csslint": "^1.0.4",
78 | <% } -%>
79 | "eslint": "^3.9.1",
80 | "eslint-config-angular": "^0.5.0",
81 | "eslint-plugin-angular": "^1.4.1",
82 | "extract-text-webpack-plugin": "^1.0.1",
83 | "file-loader": "^0.9.0",
84 | "html-webpack-plugin": "^2.7.1",
85 | "htmlhint": "^0.9.13",
86 | "json-loader": "^0.5.4",
87 | "karma": "^1.3.0",
88 | "karma-chai": "^0.1.0",
89 | "karma-coverage": "^1.1.1",
90 | <% if (sonarWebFrontendReporters) { -%>
91 | "karma-junit7-sonarqube-reporter": "^0.0.6",
92 | <% } -%>
93 | "karma-mocha": "^1.3.0",
94 | "karma-phantomjs-launcher": "^1.0.2",
95 | "karma-sourcemap-loader": "^0.3.7",
96 | "karma-spec-reporter": "0.0.26",
97 | "karma-webpack": "^1.8.0",
98 | <% if (cssPreprocessor === 'less') { -%>
99 | "less": "^2.7.1",
100 | "less-loader": "^2.2.3",
101 | <% } -%>
102 | "mocha": "^3.2.0",
103 | "ng-annotate-loader": "^0.2.0",
104 | <% if (cssPreprocessor === 'sass') { -%>
105 | "node-sass": "^3.10.1",
106 | <% } -%>
107 | "postcss-loader": "^1.1.1",
108 | "raw-loader": "^0.5.1",
109 | "rimraf": "^2.5.1",
110 | <% if (cssPreprocessor === 'sass') { -%>
111 | "sass-lint": "^1.10.2",
112 | "sass-loader": "^4.0.2",
113 | <% } -%>
114 | <% if (sonarWebFrontendReporters) { -%>
115 | "sonar-web-frontend-reporters": "^3.0.0",
116 | <% } -%>
117 | <% if (jsonServer) { -%>
118 | "json-server": "^0.9.2",
119 | <% } -%>
120 | "style-loader": "^0.13.1",
121 | "webpack": "^1.13.2",
122 | "webpack-dev-server": "^1.16.1",
123 | "webpack-merge": "^0.14.1"
124 | }
125 | }
126 |
--------------------------------------------------------------------------------
/test/app/ui-frameworks.spec.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const path = require('path');
4 | const helpers = require('yeoman-test');
5 | const assert = require('yeoman-assert');
6 |
7 | module.exports = () => {
8 |
9 | describe('when using AngularJS Material', () => {
10 |
11 | before(done => {
12 | this.generator = helpers
13 | .run(path.join(__dirname, '../../generators/app'))
14 | .withPrompts({
15 | uiFramework: 'ngMaterial'
16 | })
17 | .toPromise()
18 | .then(() => done());
19 | });
20 |
21 | it('should add angular-material to the package.json', () => {
22 | assert.fileContent('package.json', 'angular-material');
23 | });
24 |
25 | it('should import angular-material in the angular modules', () => {
26 | assert.fileContent('src/app/app.js', 'import ngMaterial from \'angular-material\'');
27 | assert.fileContent('src/app/app.js', 'import \'angular-material/angular-material.css\'');
28 | assert.fileContent('src/app/app.js', /angular\.module\([\s\S]*, [\s\S]*?ngMaterial/);
29 | });
30 |
31 | it('should activate angular-animate no matter the user selection (angular-material peer dependency)', () => {
32 | assert.fileContent('package.json', 'angular-animate');
33 | assert.fileContent('src/app/app.js', 'import ngAnimate from \'angular-animate\'');
34 | assert.fileContent('src/app/app.js', /angular\.module\([\s\S]*, [\s\S]*?ngAnimate/);
35 | });
36 |
37 | it('should add material-design-icons', () => {
38 | assert.fileContent('package.json', 'material-design-icons');
39 | });
40 |
41 | it('shouldn\'t add angular-touch', () => {
42 | assert.noFileContent('package.json', 'angular-touch');
43 | assert.noFileContent('src/app/app.js', 'import ngTouch from \'angular-touch\'');
44 | assert.noFileContent('src/app/app.js', /angular\.module\([\s\S]*, [\s\S]*?ngTouch/);
45 | });
46 |
47 | describe('when using Sass', () => {
48 |
49 | before(done => {
50 | this.generator = helpers
51 | .run(path.join(__dirname, '../../generators/app'))
52 | .withPrompts({
53 | cssPreprocessor: 'sass',
54 | uiFramework: 'ngMaterial'
55 | })
56 | .toPromise()
57 | .then(() => done());
58 | });
59 |
60 | it('should add material-design-icons', () => {
61 | assert.file('src/styles/base/_typography.scss');
62 | assert.file('src/styles/vendors/_material-icons.scss');
63 | assert.fileContent('src/styles/main.scss', '@import \'vendors/material-icons\'');
64 | assert.fileContent('src/styles/main.scss', '@import \'base/typography\'');
65 | });
66 |
67 | });
68 |
69 | describe('when using Less', () => {
70 |
71 | before(done => {
72 | this.generator = helpers
73 | .run(path.join(__dirname, '../../generators/app'))
74 | .withPrompts({
75 | cssPreprocessor: 'less',
76 | uiFramework: 'ngMaterial'
77 | })
78 | .toPromise()
79 | .then(() => done());
80 | });
81 |
82 | it('should add material-design-icons', () => {
83 | assert.file('src/styles/base/_typography.less');
84 | assert.file('src/styles/vendors/_material-icons.less');
85 | assert.fileContent('src/styles/main.less', '@import \'vendors/material-icons\'');
86 | assert.fileContent('src/styles/main.less', '@import \'base/typography\'');
87 | });
88 |
89 | });
90 |
91 | });
92 |
93 | describe('when using Bootstrap', () => {
94 |
95 | before(done => {
96 | this.generator = helpers
97 | .run(path.join(__dirname, '../../generators/app'))
98 | .withPrompts({
99 | uiFramework: 'bootstrap'
100 | })
101 | .toPromise()
102 | .then(() => done());
103 | });
104 |
105 | it('should add bootstrap & angular-ui-bootstrap to the package.json', () => {
106 | assert.fileContent('package.json', 'bootstrap');
107 | assert.fileContent('package.json', 'angular-ui-bootstrap');
108 | });
109 |
110 | it('should activate angular-animate no matter the user selection (ui-bootstrap peer dependency)', () => {
111 | assert.fileContent('package.json', 'angular-animate');
112 | assert.fileContent('src/app/app.js', 'import ngAnimate from \'angular-animate\'');
113 | assert.fileContent('src/app/app.js', /angular\.module\([\s\S]*, [\s\S]*?ngAnimate/);
114 | });
115 |
116 | it('should activate angular-touch no matter the user selection (ui-bootstrap peer dependency)', () => {
117 | assert.fileContent('package.json', 'angular-touch');
118 | assert.fileContent('src/app/app.js', 'import ngTouch from \'angular-touch\'');
119 | assert.fileContent('src/app/app.js', /angular\.module\([\s\S]*, [\s\S]*?ngTouch/);
120 | });
121 |
122 | it('should import bootstrap & angular-ui-bootstrap in the angular modules', () => {
123 | assert.fileContent('src/app/app.js', 'import ngBootstrap from \'angular-ui-bootstrap\'');
124 | assert.fileContent('src/app/app.js', 'import \'bootstrap/dist/css/bootstrap.min.css\'');
125 | assert.fileContent('src/app/app.js', /angular\.module\([\s\S]*, [\s\S]*?ngBootstrap/);
126 | });
127 |
128 | });
129 |
130 | };
131 |
--------------------------------------------------------------------------------
/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "eslint:recommended",
3 | "env": {
4 | "node": true,
5 | "mocha": true
6 | },
7 | "parserOptions": {
8 | "ecmaVersion": 6
9 | },
10 | "rules": {
11 | "no-template-curly-in-string": "error",
12 | "no-unsafe-negation": "error",
13 | "block-scoped-var": "error",
14 | "curly": "error",
15 | "default-case": "error",
16 | "dot-notation": "error",
17 | "dot-location": ["warn", "property"],
18 | "eqeqeq": "error",
19 | "guard-for-in": "error",
20 | "no-alert": "error",
21 | "no-caller": "error",
22 | "no-div-regex": "error",
23 | "no-else-return": "error",
24 | "no-eq-null": "error",
25 | "no-eval": "error",
26 | "no-extend-native": "error",
27 | "no-extra-bind": "error",
28 | "no-extra-label": "error",
29 | "no-floating-decimal": "error",
30 | "no-global-assign": "error",
31 | "no-implicit-coercion": "error",
32 | "no-implicit-globals": "error",
33 | "no-implied-eval": "error",
34 | "no-iterator": "error",
35 | "no-labels": "error",
36 | "no-lone-blocks": "error",
37 | "no-loop-func": "error",
38 | "no-multi-spaces": "error",
39 | "no-multi-str": "error",
40 | "no-new-func": "error",
41 | "no-new-wrappers": "error",
42 | "no-new": "error",
43 | "no-octal-escape": "error",
44 | "no-param-reassign": "error",
45 | "no-proto": "error",
46 | "no-return-assign": ["error", "always"],
47 | "no-self-compare": "error",
48 | "no-sequences": "error",
49 | "no-throw-literal": "error",
50 | "no-unmodified-loop-condition": "error",
51 | "no-unused-expressions": "error",
52 | "no-unused-labels": "error",
53 | "no-useless-call": "error",
54 | "no-useless-concat": "error",
55 | "no-useless-escape": "error",
56 | "no-void": "error",
57 | "no-warning-comments": "warn",
58 | "no-with": "error",
59 | "radix": "error",
60 | "no-label-var": "error",
61 | "no-restricted-globals": ["error", "event"],
62 | "no-shadow-restricted-names": "error",
63 | "no-undef-init": "error",
64 | "no-undef": ["error", {
65 | "typeof": true
66 | }],
67 | "no-use-before-define": ["error", "nofunc"],
68 | "strict": ["error", "safe"],
69 | "brace-style": "error",
70 | "comma-dangle": ["error", "never"],
71 | "comma-spacing": "error",
72 | "comma-style": "error",
73 | "func-call-spacing": ["error", "never"],
74 | "func-names": ["error", "never"],
75 | "indent": ["error", 2, {
76 | "SwitchCase": 1
77 | }],
78 | "key-spacing": ["error", {
79 | "beforeColon": false,
80 | "afterColon": true
81 | }],
82 | "keyword-spacing": "error",
83 | "linebreak-style": ["error", "unix"],
84 | "max-depth": "warn",
85 | "space-before-function-paren": ["error", "always"],
86 | "max-nested-callbacks": ["warn", 4],
87 | "max-params": ["warn", {
88 | "max": 4
89 | }],
90 | "max-statements-per-line": "error",
91 | "new-cap": ["error", {
92 | "newIsCap": true,
93 | "capIsNew": true
94 | }],
95 | "new-parens": "error",
96 | "no-array-constructor": "error",
97 | "no-lonely-if": "error",
98 | "no-mixed-operators": "error",
99 | "no-mixed-spaces-and-tabs": "error",
100 | "no-multiple-empty-lines": ["error", {
101 | "max": 1
102 | }],
103 | "no-negated-condition": "error",
104 | "no-new-object": "error",
105 | "no-restricted-syntax": ["error", "WithStatement"],
106 | "no-whitespace-before-property": "error",
107 | "no-trailing-spaces": "error",
108 | "no-unneeded-ternary": "error",
109 | "object-curly-spacing": ["error", "never"],
110 | "one-var": ["error", "never"],
111 | "one-var-declaration-per-line": "error",
112 | "operator-assignment": ["error", "always"],
113 | "operator-linebreak": ["error", "after"],
114 | "quote-props": ["error", "as-needed"],
115 | "quotes": ["error", "single", {
116 | "allowTemplateLiterals": true
117 | }],
118 | "semi-spacing": ["error", {
119 | "before": false,
120 | "after": true
121 | }],
122 | "semi": ["error", "always"],
123 | "space-before-blocks": ["error", "always"],
124 | "space-in-parens": ["error", "never"],
125 | "space-infix-ops": "error",
126 | "space-unary-ops": "error",
127 | "spaced-comment": ["error", "always", {
128 | "line": {
129 | "exceptions": ["-"]
130 | },
131 | "block": {
132 | "markers": ["!"],
133 | "balanced": true
134 | }
135 | }],
136 | "unicode-bom": ["error", "never"],
137 | "arrow-parens": ["error", "as-needed"],
138 | "arrow-spacing": ["error", {
139 | "before": true,
140 | "after": true
141 | }],
142 | "constructor-super": "error",
143 | "generator-star-spacing": ["error", "both"],
144 | "no-class-assign": "error",
145 | "no-const-assign": "error",
146 | "no-dupe-class-members": "error",
147 | "no-duplicate-imports": ["error", {
148 | "includeExports": true
149 | }],
150 | "no-new-symbol": "error",
151 | "no-this-before-super": "error",
152 | "no-useless-computed-key": "error",
153 | "no-useless-constructor": "error",
154 | "no-useless-rename": "error",
155 | "require-yield": "error",
156 | "rest-spread-spacing": ["error", "never"],
157 | "symbol-description": "error",
158 | "template-curly-spacing": "error",
159 | "yield-star-spacing": ["error", "both"]
160 | }
161 | }
162 |
--------------------------------------------------------------------------------
/generators/app/prompt.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | /**
4 | * This class manages App Generator prompts.
5 | */
6 | module.exports = class Prompt {
7 |
8 | /**
9 | * Ask the user to answer some questions.
10 | */
11 | static questions (generator) {
12 | return generator.prompt([{
13 | type: 'input',
14 | name: 'appName',
15 | message: 'What\'s the name of your application package?'
16 | }, {
17 | type: 'checkbox',
18 | name: 'ngModules',
19 | message: 'What Angular modules do you want?',
20 | store: true,
21 | choices: [
22 | {
23 | name: 'ngAnimate',
24 | value: 'ngAnimate'
25 | },
26 | {
27 | name: 'ngCookies',
28 | value: 'ngCookies'
29 | },
30 | {
31 | name: 'ngTouch',
32 | value: 'ngTouch'
33 | },
34 | {
35 | name: 'ngSanitize',
36 | value: 'ngSanitize'
37 | },
38 | {
39 | name: 'ngMessages',
40 | value: 'ngMessages'
41 | }
42 | ]
43 | }, {
44 | type: 'list',
45 | name: 'resource',
46 | message: 'Would you like to use a REST resource library?',
47 | default: 'restangular',
48 | store: true,
49 | choices: [
50 | {
51 | name: 'Restangular, an alternative service to handles RESTful requests',
52 | value: 'restangular'
53 | },
54 | {
55 | name: 'ngResource, the official support for RESTful services',
56 | value: 'ngResource'
57 | },
58 | {
59 | name: 'None, $http is enough!',
60 | value: '$http'
61 | }
62 | ]
63 | }, {
64 | type: 'list',
65 | name: 'uiFramework',
66 | message: 'Which UI framework do you want?',
67 | default: 'ngMaterial',
68 | store: true,
69 | choices: [
70 | {
71 | name: 'Angular Material, the reference implementation of the Google\'s Material Design specification',
72 | value: 'ngMaterial'
73 | },
74 | {
75 | name: 'Bootstrap, the most popular HTML, CSS, and JS framework',
76 | value: 'bootstrap'
77 | },
78 | {
79 | name: 'None',
80 | value: 'none'
81 | }
82 | ]
83 | }, {
84 | type: 'list',
85 | name: 'cssPreprocessor',
86 | message: 'Which CSS preprocessor do you want?',
87 | default: 'sass',
88 | store: true,
89 | choices: [
90 | {
91 | name: 'Sass (with Node-sass)',
92 | value: 'sass'
93 | },
94 | {
95 | name: 'Less',
96 | value: 'less'
97 | },
98 | {
99 | name: 'Plain CSS',
100 | value: 'css'
101 | }
102 | ]
103 | }, {
104 | type: 'checkbox',
105 | name: 'otherModules',
106 | message: 'Here are some modules you might be interested in',
107 | store: true,
108 | choices: [
109 | {
110 | name: 'angular-translate (18n for your Angular app, made easy!)',
111 | value: 'angular-translate'
112 | },
113 | {
114 | name: 'sonar-web-frontend-reporters, generate linters reporters for the SonarQube plugin',
115 | value: 'sonar-web-frontend-reporters'
116 | },
117 | {
118 | name: 'json-server, a full fake REST API with zero coding in less than 30 seconds',
119 | value: 'json-server'
120 | }
121 | ]
122 | }, {
123 | type: 'list',
124 | name: 'packageManager',
125 | message: 'What package manager should i use to install your dependencies ?',
126 | default: 'npm',
127 | store: true,
128 | choices: [
129 | {
130 | name: 'npm, a package manager for javascript',
131 | value: 'npm'
132 | },
133 | {
134 | name: 'Yarn, Fast, reliable, and secure dependency management',
135 | value: 'yarn'
136 | }
137 | ]
138 | }]).then(answers => {
139 |
140 | // App name
141 | generator.props.appName = answers.appName;
142 |
143 | // Angular modules
144 | generator.props.ngAnimate = answers.ngModules && answers.ngModules.includes('ngAnimate');
145 | generator.props.ngCookies = answers.ngModules && answers.ngModules.includes('ngCookies');
146 | generator.props.ngTouch = answers.ngModules && answers.ngModules.includes('ngTouch');
147 | generator.props.ngSanitize = answers.ngModules && answers.ngModules.includes('ngSanitize');
148 | generator.props.ngMessages = answers.ngModules && answers.ngModules.includes('ngMessages');
149 |
150 | // Resource
151 | generator.props.resource = answers.resource;
152 |
153 | // UI Framework
154 | generator.props.uiFramework = answers.uiFramework;
155 |
156 | // CSS preprocessor
157 | generator.props.cssPreprocessor = answers.cssPreprocessor;
158 |
159 | // Other modules
160 | generator.props.angularTranslate = answers.otherModules && answers.otherModules.includes('angular-translate');
161 | generator.props.sonarWebFrontendReporters = answers.otherModules && answers.otherModules.includes('sonar-web-frontend-reporters');
162 | generator.props.jsonServer = answers.otherModules && answers.otherModules.includes('json-server');
163 |
164 | // Package manager
165 | generator.props.packageManager = answers.packageManager;
166 |
167 | });
168 | }
169 | };
170 |
--------------------------------------------------------------------------------
/generators/app/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const _ = require('underscore.string');
4 | const path = require('path');
5 | const Base = require('yeoman-generator').Base;
6 | const yosay = require('yosay');
7 | const chalk = require('chalk');
8 |
9 | const prompt = require('./prompt');
10 | const write = require('./write');
11 | const pkg = require('../../package.json');
12 |
13 | module.exports = class AppGenerator extends Base {
14 |
15 | /**
16 | * Constructor.
17 | */
18 | constructor (...args) {
19 | super(...args);
20 |
21 | this.argument('appname', {
22 | type: String,
23 | required: false
24 | });
25 |
26 | this.props = {_};
27 | }
28 |
29 | /**
30 | * Initialize this generator.
31 | */
32 | get initializing () {
33 | return {
34 |
35 | /**
36 | * Get version.
37 | */
38 | version () {
39 | this.version = pkg.version;
40 | },
41 |
42 | /**
43 | * Set app name.
44 | */
45 | appName () {
46 | this.props.appname = this.appname || path.basename(process.cwd());
47 | this.props.appname = _.slugify(_.humanize(this.props.appname));
48 | },
49 |
50 | /**
51 | * Define template context.
52 | */
53 | paths () {
54 | this.sourceRoot(path.join(__dirname, '../../templates/app'));
55 | },
56 |
57 | /**
58 | * Display a welcome message.
59 | */
60 | welcome () {
61 | this.log(yosay(
62 | `Welcome to the ${chalk.red('Webpack Angular')} generator!`
63 | ));
64 | }
65 | };
66 | }
67 |
68 | /**
69 | * Prompt the user for options.
70 | */
71 | prompting () {
72 | return prompt.questions(this);
73 | }
74 |
75 | /**
76 | * Write configuration files.
77 | */
78 | get configuring () {
79 | return {
80 |
81 | /**
82 | * Write configuration files.
83 | */
84 | configFiles () {
85 | this.fs.copyTpl(
86 | this.templatePath('_.babelrc'),
87 | this.destinationPath('.babelrc')
88 | );
89 |
90 | this.fs.copyTpl(
91 | this.templatePath('_.editorconfig'),
92 | this.destinationPath('.editorconfig')
93 | );
94 |
95 | this.fs.copyTpl(
96 | this.templatePath('_.gitignore'),
97 | this.destinationPath('.gitignore')
98 | );
99 | },
100 |
101 | /**
102 | * Write package.json.
103 | */
104 | packageJSON () {
105 | this.fs.copyTpl(
106 | this.templatePath('_package.json'),
107 | this.destinationPath('package.json'),
108 | this.props
109 | );
110 | },
111 |
112 | /**
113 | * Write linter files
114 | */
115 | linters () {
116 | this.fs.copyTpl(
117 | this.templatePath('src/_.htmlhintrc'),
118 | this.destinationPath('src/.htmlhintrc')
119 | );
120 |
121 | this.fs.copyTpl(
122 | this.templatePath('_.eslintrc'),
123 | this.destinationPath('.eslintrc')
124 | );
125 |
126 | switch (this.props.cssPreprocessor) {
127 | case 'css':
128 | this.fs.copyTpl(
129 | this.templatePath('src/_.csslintrc'),
130 | this.destinationPath('src/.csslintrc')
131 | );
132 | break;
133 |
134 | default:
135 | case 'sass':
136 | this.fs.copyTpl(
137 | this.templatePath('_.sass-lint.yml'),
138 | this.destinationPath('.sass-lint.yml')
139 | );
140 | break;
141 | }
142 | }
143 | };
144 | }
145 |
146 | /**
147 | * Write project files.
148 | */
149 | get writing () {
150 | return write;
151 | }
152 |
153 | /**
154 | * Install dependencies.
155 | */
156 | install () {
157 | switch (this.props.packageManager) {
158 | case 'yarn':
159 | this.runInstall('yarn', '--ignore-optional');
160 | break;
161 |
162 | default:
163 | case 'npm':
164 | this.npmInstall();
165 | break;
166 | }
167 | }
168 |
169 | /**
170 | * Say goodbye.
171 | */
172 | end () {
173 | this.log(`It's time to use ${this.props.packageManager.charAt(0).toUpperCase() + this.props.packageManager.slice(1)} scripts:`);
174 | this.log(`- ${chalk.yellow.bold(`${this.props.packageManager} start`)} to launch ${chalk.bold('npm run server')} and ${chalk.bold('json-server')} (if checked in generator) in parallel`);
175 | this.log(`- ${chalk.yellow.bold(`${this.props.packageManager} run serve`)} to launch a webpack-dev-server server on your source files`);
176 | this.log(`- ${chalk.yellow.bold(`${this.props.packageManager} run serve:prod`)} to launch a webpack-dev-server server on your source files in a ${chalk.yellow.bold('production')} environment`);
177 | this.log(`- ${chalk.yellow.bold(`${this.props.packageManager} run build`)} to build an optimized version of your application in folder /dist`);
178 | this.log(`- ${chalk.yellow.bold(`${this.props.packageManager} run build:prod`)} to build an optimized version of your application in folder /dist in a ${chalk.yellow.bold('production')} environment`);
179 | this.log(`- ${chalk.yellow.bold(`${this.props.packageManager} run test`)} to launch your unit tests with Karma`);
180 | this.log(`- ${chalk.yellow.bold(`${this.props.packageManager} run lint`)} to launch linting process`);
181 | if (this.props.sonarWebFrontendReporters) {
182 | this.log(`- ${chalk.yellow.bold(`${this.props.packageManager} run sonar:reporters`)} to create the linters reporters for SonarQube plugin`);
183 | }
184 | if (this.props.jsonServer) {
185 | this.log(`- ${chalk.yellow.bold(`${this.props.packageManager} run json-server`)} to start a json-server`);
186 | }
187 | }
188 | };
189 |
--------------------------------------------------------------------------------
/generators/app/write.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | /**
4 | * This class manages App Generator writings.
5 | */
6 | module.exports = {
7 |
8 | /**
9 | * Write README.
10 | */
11 | readme () {
12 | this.fs.copyTpl(
13 | this.templatePath('README.md'),
14 | this.destinationPath('README.md'),
15 | this.props
16 | );
17 | },
18 |
19 | /**
20 | * Write COMMITS-CONVENTION.
21 | */
22 | commitsConvention () {
23 | this.fs.copyTpl(
24 | this.templatePath('COMMITS-CONVENTION.md'),
25 | this.destinationPath('COMMITS-CONVENTION.md'),
26 | this.props
27 | );
28 | },
29 |
30 | /**
31 | * Write CHANGELOG.
32 | */
33 | changelog () {
34 | this.fs.copyTpl(
35 | this.templatePath('CHANGELOG.md'),
36 | this.destinationPath('CHANGELOG.md'),
37 | this.props
38 | );
39 | },
40 |
41 | /**
42 | * Write webpack.config.js.
43 | */
44 | webpack () {
45 | this.fs.copyTpl(
46 | this.templatePath('webpack.config.js'),
47 | this.destinationPath('webpack.config.js'),
48 | this.props
49 | );
50 |
51 | this.fs.copyTpl(
52 | this.templatePath('postcss.config.js'),
53 | this.destinationPath('postcss.config.js')
54 | );
55 | },
56 |
57 | /**
58 | * Write src directory.
59 | */
60 | src () {
61 | this.fs.copyTpl(
62 | this.templatePath('src/app'),
63 | this.destinationPath('src/app'),
64 | this.props
65 | );
66 |
67 | this.fs.copyTpl(
68 | this.templatePath('src/config/**!(i18n)'),
69 | this.destinationPath('src/config'),
70 | this.props
71 | );
72 |
73 | this.fs.copyTpl(
74 | this.templatePath('src/public'),
75 | this.destinationPath('src/public'),
76 | this.props
77 | );
78 | },
79 |
80 | /**
81 | * Write tools directory
82 | */
83 | tools () {
84 | this.fs.copyTpl(
85 | this.templatePath('tools/git'),
86 | this.destinationPath('tools/git'),
87 | this.props
88 | );
89 | },
90 |
91 | /**
92 | * Write styles.
93 | */
94 | styles () {
95 | switch (this.props.cssPreprocessor) {
96 | case 'sass':
97 | this.fs.copyTpl(
98 | this.templatePath('src/styles-sass'),
99 | this.destinationPath('src/styles'),
100 | this.props
101 | );
102 | break;
103 |
104 | case 'less':
105 | this.fs.copyTpl(
106 | this.templatePath('src/styles-less'),
107 | this.destinationPath('src/styles'),
108 | this.props
109 | );
110 | break;
111 |
112 | default:
113 | this.fs.copyTpl(
114 | this.templatePath('src/styles'),
115 | this.destinationPath('src/styles'),
116 | this.props
117 | );
118 | }
119 | },
120 |
121 | /**
122 | * Write ui frameworks related files
123 | */
124 | ui () {
125 | switch (this.props.uiFramework) {
126 | case 'ngMaterial':
127 | switch (this.props.cssPreprocessor) {
128 | case 'css':
129 | default:
130 | this.fs.copyTpl(
131 | this.templatePath('src/ui-angular-material/styles'),
132 | this.destinationPath('src/styles')
133 | );
134 | break;
135 |
136 | case 'sass':
137 | this.fs.copyTpl(
138 | this.templatePath('src/ui-angular-material/styles-sass'),
139 | this.destinationPath('src/styles'),
140 | this.props
141 | );
142 | break;
143 |
144 | case 'less':
145 | this.fs.copyTpl(
146 | this.templatePath('src/ui-angular-material/styles-less'),
147 | this.destinationPath('src/styles'),
148 | this.props
149 | );
150 | break;
151 | }
152 | break;
153 |
154 | default:
155 | break;
156 | }
157 | },
158 |
159 | /**
160 | * Write angular-translate locales
161 | */
162 | angularTranslate () {
163 | if (this.props.angularTranslate) {
164 | this.fs.copyTpl(
165 | this.templatePath('src/config/i18n'),
166 | this.destinationPath('src/config/i18n'),
167 | this.props
168 | );
169 | }
170 | },
171 |
172 | /**
173 | * Write configuration for sonar-web-frontend-reporters
174 | */
175 | sonarWebFrontendReporters () {
176 | if (this.props.sonarWebFrontendReporters) {
177 | this.fs.copyTpl(
178 | this.templatePath('_.sreporterrc'),
179 | this.destinationPath('.sreporterrc'),
180 | this.props
181 | );
182 |
183 | this.fs.copyTpl(
184 | this.templatePath('_sonar-project.properties'),
185 | this.destinationPath('sonar-project.properties'),
186 | this.props
187 | );
188 |
189 | this.fs.copyTpl(
190 | this.templatePath('filepath-loader.js'),
191 | this.destinationPath('filepath-loader.js'),
192 | this.props
193 | );
194 | }
195 | },
196 |
197 | /**
198 | * Write json-server examples
199 | */
200 | jsonServer () {
201 | if (this.props.jsonServer) {
202 | this.fs.copyTpl(
203 | this.templatePath('json-server'),
204 | this.destinationPath('json-server'),
205 | this.props
206 | );
207 | }
208 | },
209 |
210 | /**
211 | * Write docs config
212 | */
213 | docs () {
214 | this.fs.copyTpl(
215 | this.templatePath('docs/**/!(_index.ngdoc)'),
216 | this.destinationPath('docs'),
217 | this.props
218 | );
219 | this.fs.copyTpl(
220 | this.templatePath('docs/_index.ngdoc'),
221 | this.destinationPath('docs/index.ngdoc'),
222 | this.props
223 | );
224 | },
225 |
226 | /**
227 | * Write test files
228 | */
229 | tests () {
230 | this.fs.copyTpl(
231 | this.templatePath('test'),
232 | this.destinationPath('test'),
233 | this.props
234 | );
235 |
236 | this.fs.copyTpl(
237 | this.templatePath('karma.conf.js'),
238 | this.destinationPath('karma.conf.js'),
239 | this.props
240 | );
241 | }
242 |
243 | };
244 |
--------------------------------------------------------------------------------
/templates/app/webpack.config.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const path = require('path'),
4 | fs = require('fs'),
5 | webpack = require('webpack'),
6 | merge = require('webpack-merge'),
7 | HtmlWebpackPlugin = require('html-webpack-plugin'),
8 | ExtractTextPlugin = require('extract-text-webpack-plugin'),
9 | CopyWebpackPlugin = require('copy-webpack-plugin'),
10 | DocsGeneratorPlugin = require('webpack-angular-dgeni-plugin');
11 |
12 | let TARGET = process.env.npm_lifecycle_event;
13 |
14 | // If a reference to 'karma' is found on the process arguments, then we should launch webpack in `test` mode
15 | let hasKarmaRef = process.argv.map((arg) => arg.includes('karma')).some((arg) => arg);
16 | if (TARGET === undefined && hasKarmaRef) {
17 | TARGET = 'test';
18 | }
19 |
20 | // Determinate application environment
21 | let configPath = `${__dirname}/src/config`;
22 | let envPos = process.argv.indexOf('--env');
23 | let docEnable = process.argv.indexOf('--docs') !== -1;
24 | let env = (envPos !== -1 && fs.existsSync(`${configPath}/config.${process.argv[++envPos]}.json`)) ? process.argv[envPos] : 'dev';
25 |
26 | let common = {
27 |
28 | entry: path.join(__dirname, 'src/app/app.js'),
29 |
30 | module: {
31 | preLoaders: [],
32 | loaders: [{
33 | test: /\.js$/,
34 | loaders: ['ng-annotate', 'babel'],
35 | exclude: /node_modules/
36 | },
37 | {
38 | test: /\.html$/,
39 | loader: 'raw'
40 | },
41 | {
42 | test: /\.css$/,
43 | loaders: [ 'style-loader', 'css-loader?importLoaders=1', 'postcss-loader' ]
44 | },
45 | {
46 | test: /\.json$/,
47 | loader: 'json'
48 | },
49 | {
50 | test: /\.(png|jpg|jpeg|gif|svg|woff|woff2|ttf|eot)$/,
51 | loader: 'file'
52 | }]
53 | },
54 |
55 | plugins: [
56 | new HtmlWebpackPlugin({
57 | template: './src/public/index.html',
58 | inject: 'body'
59 | }),
60 |
61 | new webpack.DefinePlugin({
62 | 'process.env':{
63 | 'ENV_NAME': JSON.stringify(env)
64 | }
65 | }),
66 |
67 | new CopyWebpackPlugin([
68 | <% if (angularTranslate) { -%>
69 | { from: 'src/config/i18n' }
70 | <% } -%>
71 | ])
72 | ],
73 |
74 | devServer: {
75 | contentBase: './src/public',
76 | stats: 'minimal'
77 | },
78 |
79 | resolve: {
80 | alias: {
81 | 'app.config': `${configPath}/config.${env}.json`
82 | }
83 | }
84 | };
85 |
86 | // Development
87 | if (TARGET !== undefined && TARGET.startsWith('serve')) {
88 | module.exports = merge.smart(common, {
89 | module: {
90 | loaders: [<% if (cssPreprocessor === 'sass') { %>
91 | {
92 | test: /\.scss$/,
93 | loaders: ['style-loader', 'css-loader?sourceMap&importLoaders=1', 'postcss-loader', 'sass-loader?sourceMap']
94 | }<% } else if (cssPreprocessor === 'less') { %>
95 | {
96 | test: /\.less$/,
97 | loaders: ['style-loader', 'css-loader?sourceMap&importLoaders=1', 'postcss-loader', 'less-loader?sourceMap']
98 | }<% } else { %>
99 | {
100 | test: /\.css$/,
101 | loaders: [ 'style-loader', 'css-loader?importLoaders=1', 'postcss-loader' ]
102 | }<% } %>]
103 | },
104 | devtool: 'cheap-module-eval-source-map'
105 | });
106 | }
107 |
108 | // Production
109 | if (TARGET !== undefined && TARGET.startsWith('build')) {
110 | module.exports = merge.smart(common, {
111 | output: {
112 | path: __dirname + '/dist',
113 | publicPath: '/',
114 | filename: '[name].[hash].js',
115 | chunkFilename: '[name].[hash].js'
116 | },
117 |
118 | module: {
119 | loaders: [<% if (cssPreprocessor === 'sass') { %>
120 | {
121 | test: /\.scss$/,
122 | loader: ExtractTextPlugin.extract('style-loader', ['css-loader?importLoaders=1', 'postcss-loader', 'sass-loader'])
123 | }<% } else if (cssPreprocessor === 'less') { %>
124 | {
125 | test: /\.less$/,
126 | loader: ExtractTextPlugin.extract('style-loader', ['css-loader?importLoaders=1', 'postcss-loader', 'less-loader'])
127 | }<% } else { %>
128 | {
129 | test: /\.css$/,
130 | loader: ExtractTextPlugin.extract('style-loader', ['css-loader?importLoaders=1', 'postcss-loader'])
131 | }<% } %>
132 | ]
133 | },
134 |
135 | plugins: [
136 | new webpack.NoErrorsPlugin(),
137 | new webpack.optimize.DedupePlugin(),
138 | new webpack.optimize.UglifyJsPlugin(),
139 | new CopyWebpackPlugin([{
140 | from: __dirname + '/src/public'
141 | }]),
142 | new ExtractTextPlugin('[name].[hash].css'),
143 |
144 | new DocsGeneratorPlugin({
145 | enable : docEnable,
146 | staticContent: './docs',
147 | sources : {
148 | include : 'src/app/**/**/*.js',
149 | basePath: 'src/app'
150 | },
151 | output : 'dist-docs'
152 | })
153 | ],
154 | });
155 | }
156 |
157 | // Test
158 | if (TARGET !== undefined && (TARGET === 'test' || TARGET === 'test-watch')) {
159 | module.exports = merge.smart(common, {
160 | entry: {},
161 |
162 | devtool: 'inline-source-map',
163 |
164 | module: {
165 | <% if (sonarWebFrontendReporters) { -%>
166 | preLoaders: [
167 | // Add file path info in source code files
168 | {
169 | test: /\.spec\.js$/,
170 | loader: path.join(__dirname, 'filepath-loader.js'),
171 | include: path.resolve('test/unit')
172 | }
173 | ],
174 | <% } -%>
175 | loaders: [{
176 | test: /\.js$/,
177 | loaders: ['ng-annotate', 'babel?' + JSON.stringify({
178 | presets: ['es2015'],
179 | plugins: ['istanbul']
180 | })],
181 | exclude: /node_modules/
182 | },<% if (cssPreprocessor === 'sass') { %>
183 | {
184 | test: /\.scss$/,
185 | loaders: ['style-loader', 'css-loader', 'postcss-loader', 'sass-loader']
186 | }<% } else if (cssPreprocessor === 'less') { %>
187 | {
188 | test: /\.less$/,
189 | loaders: ['style-loader', 'css-loader', 'postcss-loader', 'less-loader']
190 | }<% } else { %>
191 | {
192 | test: /\.css$/,
193 | loaders: ['style-loader', 'css-loader', 'postcss-loader']
194 | }<% } %>
195 | ]}
196 | });
197 | }
198 |
199 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | abbrev@1:
6 | version "1.0.9"
7 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
8 |
9 | acorn-jsx@^3.0.0, acorn-jsx@^3.0.1:
10 | version "3.0.1"
11 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
12 | dependencies:
13 | acorn "^3.0.4"
14 |
15 | acorn@^3.0.4:
16 | version "3.3.0"
17 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
18 |
19 | acorn@^4.0.1:
20 | version "4.0.3"
21 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.3.tgz#1a3e850b428e73ba6b09d1cc527f5aaad4d03ef1"
22 |
23 | ajv-keywords@^1.0.0:
24 | version "1.2.0"
25 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.2.0.tgz#676c4f087bfe1e8b12dca6fda2f3c74f417b099c"
26 |
27 | ajv@^4.7.0:
28 | version "4.10.0"
29 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.10.0.tgz#7ae6169180eb199192a8b9a19fd0f47fc9ac8764"
30 | dependencies:
31 | co "^4.6.0"
32 | json-stable-stringify "^1.0.1"
33 |
34 | amdefine@>=0.0.4:
35 | version "1.0.1"
36 | resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
37 |
38 | ansi-escapes@^1.1.0:
39 | version "1.4.0"
40 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
41 |
42 | ansi-regex@^2.0.0:
43 | version "2.0.0"
44 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107"
45 |
46 | ansi-styles@^2.0.0, ansi-styles@^2.2.1:
47 | version "2.2.1"
48 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
49 |
50 | argparse@^1.0.7:
51 | version "1.0.9"
52 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
53 | dependencies:
54 | sprintf-js "~1.0.2"
55 |
56 | array-differ@^1.0.0:
57 | version "1.0.0"
58 | resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031"
59 |
60 | array-find-index@^1.0.1:
61 | version "1.0.2"
62 | resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
63 |
64 | array-union@^1.0.1:
65 | version "1.0.2"
66 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
67 | dependencies:
68 | array-uniq "^1.0.1"
69 |
70 | array-uniq@^1.0.1:
71 | version "1.0.3"
72 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
73 |
74 | arrify@^1.0.0:
75 | version "1.0.1"
76 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
77 |
78 | ast-query@^2.0.0:
79 | version "2.0.0"
80 | resolved "https://registry.yarnpkg.com/ast-query/-/ast-query-2.0.0.tgz#3588e79ad8de07ce50df1e781cc2bda1fd69a453"
81 | dependencies:
82 | acorn-jsx "^3.0.1"
83 | class-extend "^0.1.1"
84 | escodegen-wallaby "^1.6.7"
85 | lodash "^4.6.1"
86 | traverse "^0.6.6"
87 |
88 | async@^2.0.0:
89 | version "2.1.4"
90 | resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4"
91 | dependencies:
92 | lodash "^4.14.0"
93 |
94 | balanced-match@^0.4.1:
95 | version "0.4.2"
96 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
97 |
98 | "binaryextensions@1 || 2":
99 | version "2.0.0"
100 | resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.0.0.tgz#e597d1a7a6a3558a2d1c7241a16c99965e6aa40f"
101 |
102 | boolbase@~1.0.0:
103 | version "1.0.0"
104 | resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
105 |
106 | brace-expansion@^1.0.0:
107 | version "1.1.6"
108 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9"
109 | dependencies:
110 | balanced-match "^0.4.1"
111 | concat-map "0.0.1"
112 |
113 | browser-stdout@1.3.0:
114 | version "1.3.0"
115 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f"
116 |
117 | buffer-shims@^1.0.0:
118 | version "1.0.0"
119 | resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
120 |
121 | builtin-modules@^1.0.0:
122 | version "1.1.1"
123 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
124 |
125 | caller-path@^0.1.0:
126 | version "0.1.0"
127 | resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
128 | dependencies:
129 | callsites "^0.2.0"
130 |
131 | callsites@^0.2.0:
132 | version "0.2.0"
133 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
134 |
135 | camelcase-keys@^2.0.0:
136 | version "2.1.0"
137 | resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
138 | dependencies:
139 | camelcase "^2.0.0"
140 | map-obj "^1.0.0"
141 |
142 | camelcase@^2.0.0:
143 | version "2.1.1"
144 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
145 |
146 | capture-stack-trace@^1.0.0:
147 | version "1.0.0"
148 | resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d"
149 |
150 | chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
151 | version "1.1.3"
152 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
153 | dependencies:
154 | ansi-styles "^2.2.1"
155 | escape-string-regexp "^1.0.2"
156 | has-ansi "^2.0.0"
157 | strip-ansi "^3.0.0"
158 | supports-color "^2.0.0"
159 |
160 | cheerio@^0.19.0:
161 | version "0.19.0"
162 | resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.19.0.tgz#772e7015f2ee29965096d71ea4175b75ab354925"
163 | dependencies:
164 | css-select "~1.0.0"
165 | dom-serializer "~0.1.0"
166 | entities "~1.1.1"
167 | htmlparser2 "~3.8.1"
168 | lodash "^3.2.0"
169 |
170 | circular-json@^0.3.0:
171 | version "0.3.1"
172 | resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d"
173 |
174 | class-extend@^0.1.0, class-extend@^0.1.1:
175 | version "0.1.2"
176 | resolved "https://registry.yarnpkg.com/class-extend/-/class-extend-0.1.2.tgz#8057a82b00f53f82a5d62c50ef8cffdec6fabc34"
177 | dependencies:
178 | object-assign "^2.0.0"
179 |
180 | cli-boxes@^1.0.0:
181 | version "1.0.0"
182 | resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
183 |
184 | cli-cursor@^1.0.1:
185 | version "1.0.2"
186 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
187 | dependencies:
188 | restore-cursor "^1.0.1"
189 |
190 | cli-table@^0.3.1:
191 | version "0.3.1"
192 | resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23"
193 | dependencies:
194 | colors "1.0.3"
195 |
196 | cli-width@^2.0.0:
197 | version "2.1.0"
198 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a"
199 |
200 | clone-stats@^0.0.1:
201 | version "0.0.1"
202 | resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1"
203 |
204 | clone@^1.0.0:
205 | version "1.0.2"
206 | resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149"
207 |
208 | co@^4.6.0:
209 | version "4.6.0"
210 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
211 |
212 | code-point-at@^1.0.0:
213 | version "1.1.0"
214 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
215 |
216 | colors@1.0.3:
217 | version "1.0.3"
218 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
219 |
220 | commander@2.9.0:
221 | version "2.9.0"
222 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
223 | dependencies:
224 | graceful-readlink ">= 1.0.0"
225 |
226 | commondir@^1.0.1:
227 | version "1.0.1"
228 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
229 |
230 | concat-map@0.0.1:
231 | version "0.0.1"
232 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
233 |
234 | concat-stream@^1.4.6, concat-stream@^1.4.7:
235 | version "1.5.2"
236 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266"
237 | dependencies:
238 | inherits "~2.0.1"
239 | readable-stream "~2.0.0"
240 | typedarray "~0.0.5"
241 |
242 | core-util-is@~1.0.0:
243 | version "1.0.2"
244 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
245 |
246 | create-error-class@^3.0.1:
247 | version "3.0.2"
248 | resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6"
249 | dependencies:
250 | capture-stack-trace "^1.0.0"
251 |
252 | cross-spawn@^4.0.0:
253 | version "4.0.2"
254 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41"
255 | dependencies:
256 | lru-cache "^4.0.1"
257 | which "^1.2.9"
258 |
259 | css-select@~1.0.0:
260 | version "1.0.0"
261 | resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.0.0.tgz#b1121ca51848dd264e2244d058cee254deeb44b0"
262 | dependencies:
263 | boolbase "~1.0.0"
264 | css-what "1.0"
265 | domutils "1.4"
266 | nth-check "~1.0.0"
267 |
268 | css-what@1.0:
269 | version "1.0.0"
270 | resolved "https://registry.yarnpkg.com/css-what/-/css-what-1.0.0.tgz#d7cc2df45180666f99d2b14462639469e00f736c"
271 |
272 | currently-unhandled@^0.4.1:
273 | version "0.4.1"
274 | resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
275 | dependencies:
276 | array-find-index "^1.0.1"
277 |
278 | d@^0.1.1, d@~0.1.1:
279 | version "0.1.1"
280 | resolved "https://registry.yarnpkg.com/d/-/d-0.1.1.tgz#da184c535d18d8ee7ba2aa229b914009fae11309"
281 | dependencies:
282 | es5-ext "~0.10.2"
283 |
284 | dargs@^4.0.0:
285 | version "4.1.0"
286 | resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17"
287 | dependencies:
288 | number-is-nan "^1.0.0"
289 |
290 | dateformat@^1.0.11:
291 | version "1.0.12"
292 | resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9"
293 | dependencies:
294 | get-stdin "^4.0.1"
295 | meow "^3.3.0"
296 |
297 | debug@2.2.0:
298 | version "2.2.0"
299 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
300 | dependencies:
301 | ms "0.7.1"
302 |
303 | debug@^2.0.0, debug@^2.1.0, debug@^2.1.1:
304 | version "2.4.5"
305 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.4.5.tgz#34c7b12a1ca96674428f41fe92c49b4ce7cd0607"
306 | dependencies:
307 | ms "0.7.2"
308 |
309 | decamelize@^1.1.2:
310 | version "1.2.0"
311 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
312 |
313 | deep-extend@^0.4.0:
314 | version "0.4.1"
315 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253"
316 |
317 | deep-is@~0.1.3:
318 | version "0.1.3"
319 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
320 |
321 | del@^2.0.2:
322 | version "2.2.2"
323 | resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8"
324 | dependencies:
325 | globby "^5.0.0"
326 | is-path-cwd "^1.0.0"
327 | is-path-in-cwd "^1.0.0"
328 | object-assign "^4.0.1"
329 | pify "^2.0.0"
330 | pinkie-promise "^2.0.0"
331 | rimraf "^2.2.8"
332 |
333 | detect-conflict@^1.0.0:
334 | version "1.0.1"
335 | resolved "https://registry.yarnpkg.com/detect-conflict/-/detect-conflict-1.0.1.tgz#088657a66a961c05019db7c4230883b1c6b4176e"
336 |
337 | detect-newline@^1.0.3:
338 | version "1.0.3"
339 | resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-1.0.3.tgz#e97b1003877d70c09af1af35bfadff168de4920d"
340 | dependencies:
341 | get-stdin "^4.0.1"
342 | minimist "^1.1.0"
343 |
344 | diff@1.4.0:
345 | version "1.4.0"
346 | resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf"
347 |
348 | diff@^2.1.2:
349 | version "2.2.3"
350 | resolved "https://registry.yarnpkg.com/diff/-/diff-2.2.3.tgz#60eafd0d28ee906e4e8ff0a52c1229521033bf99"
351 |
352 | doctrine@^1.2.2:
353 | version "1.5.0"
354 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
355 | dependencies:
356 | esutils "^2.0.2"
357 | isarray "^1.0.0"
358 |
359 | dom-serializer@0, dom-serializer@~0.1.0:
360 | version "0.1.0"
361 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82"
362 | dependencies:
363 | domelementtype "~1.1.1"
364 | entities "~1.1.1"
365 |
366 | domelementtype@1, domelementtype@~1.1.1:
367 | version "1.1.3"
368 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
369 |
370 | domhandler@2.3:
371 | version "2.3.0"
372 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738"
373 | dependencies:
374 | domelementtype "1"
375 |
376 | domutils@1.4:
377 | version "1.4.3"
378 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.4.3.tgz#0865513796c6b306031850e175516baf80b72a6f"
379 | dependencies:
380 | domelementtype "1"
381 |
382 | domutils@1.5:
383 | version "1.5.1"
384 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
385 | dependencies:
386 | dom-serializer "0"
387 | domelementtype "1"
388 |
389 | duplexer2@^0.1.4:
390 | version "0.1.4"
391 | resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1"
392 | dependencies:
393 | readable-stream "^2.0.2"
394 |
395 | editions@^1.1.1:
396 | version "1.3.3"
397 | resolved "https://registry.yarnpkg.com/editions/-/editions-1.3.3.tgz#0907101bdda20fac3cbe334c27cbd0688dc99a5b"
398 |
399 | ejs@^2.3.1:
400 | version "2.5.5"
401 | resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.5.tgz#6ef4e954ea7dcf54f66aad2fe7aa421932d9ed77"
402 |
403 | entities@1.0:
404 | version "1.0.0"
405 | resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26"
406 |
407 | entities@~1.1.1:
408 | version "1.1.1"
409 | resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
410 |
411 | error-ex@^1.2.0:
412 | version "1.3.0"
413 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9"
414 | dependencies:
415 | is-arrayish "^0.2.1"
416 |
417 | error@^7.0.2:
418 | version "7.0.2"
419 | resolved "https://registry.yarnpkg.com/error/-/error-7.0.2.tgz#a5f75fff4d9926126ddac0ea5dc38e689153cb02"
420 | dependencies:
421 | string-template "~0.2.1"
422 | xtend "~4.0.0"
423 |
424 | es5-ext@^0.10.7, es5-ext@^0.10.8, es5-ext@~0.10.11, es5-ext@~0.10.2, es5-ext@~0.10.7:
425 | version "0.10.12"
426 | resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.12.tgz#aa84641d4db76b62abba5e45fd805ecbab140047"
427 | dependencies:
428 | es6-iterator "2"
429 | es6-symbol "~3.1"
430 |
431 | es6-iterator@2:
432 | version "2.0.0"
433 | resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.0.tgz#bd968567d61635e33c0b80727613c9cb4b096bac"
434 | dependencies:
435 | d "^0.1.1"
436 | es5-ext "^0.10.7"
437 | es6-symbol "3"
438 |
439 | es6-map@^0.1.3:
440 | version "0.1.4"
441 | resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.4.tgz#a34b147be224773a4d7da8072794cefa3632b897"
442 | dependencies:
443 | d "~0.1.1"
444 | es5-ext "~0.10.11"
445 | es6-iterator "2"
446 | es6-set "~0.1.3"
447 | es6-symbol "~3.1.0"
448 | event-emitter "~0.3.4"
449 |
450 | es6-set@~0.1.3:
451 | version "0.1.4"
452 | resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.4.tgz#9516b6761c2964b92ff479456233a247dc707ce8"
453 | dependencies:
454 | d "~0.1.1"
455 | es5-ext "~0.10.11"
456 | es6-iterator "2"
457 | es6-symbol "3"
458 | event-emitter "~0.3.4"
459 |
460 | es6-symbol@3, es6-symbol@~3.1, es6-symbol@~3.1.0:
461 | version "3.1.0"
462 | resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.0.tgz#94481c655e7a7cad82eba832d97d5433496d7ffa"
463 | dependencies:
464 | d "~0.1.1"
465 | es5-ext "~0.10.11"
466 |
467 | es6-weak-map@^2.0.1:
468 | version "2.0.1"
469 | resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.1.tgz#0d2bbd8827eb5fb4ba8f97fbfea50d43db21ea81"
470 | dependencies:
471 | d "^0.1.1"
472 | es5-ext "^0.10.8"
473 | es6-iterator "2"
474 | es6-symbol "3"
475 |
476 | escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
477 | version "1.0.5"
478 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
479 |
480 | escodegen-wallaby@^1.6.7:
481 | version "1.6.8"
482 | resolved "https://registry.yarnpkg.com/escodegen-wallaby/-/escodegen-wallaby-1.6.8.tgz#903afc307b1a0df4a79797e523157fade70b1165"
483 | dependencies:
484 | esprima "^2.7.1"
485 | estraverse "^1.9.1"
486 | esutils "^2.0.2"
487 | optionator "^0.8.1"
488 | optionalDependencies:
489 | source-map "~0.2.0"
490 |
491 | escope@^3.6.0:
492 | version "3.6.0"
493 | resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
494 | dependencies:
495 | es6-map "^0.1.3"
496 | es6-weak-map "^2.0.1"
497 | esrecurse "^4.1.0"
498 | estraverse "^4.1.1"
499 |
500 | eslint@~3.7.1:
501 | version "3.7.1"
502 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.7.1.tgz#7faa84599e0fea422f04bc32db49054051a3f11a"
503 | dependencies:
504 | chalk "^1.1.3"
505 | concat-stream "^1.4.6"
506 | debug "^2.1.1"
507 | doctrine "^1.2.2"
508 | escope "^3.6.0"
509 | espree "^3.3.1"
510 | estraverse "^4.2.0"
511 | esutils "^2.0.2"
512 | file-entry-cache "^2.0.0"
513 | glob "^7.0.3"
514 | globals "^9.2.0"
515 | ignore "^3.1.5"
516 | imurmurhash "^0.1.4"
517 | inquirer "^0.12.0"
518 | is-my-json-valid "^2.10.0"
519 | is-resolvable "^1.0.0"
520 | js-yaml "^3.5.1"
521 | json-stable-stringify "^1.0.0"
522 | levn "^0.3.0"
523 | lodash "^4.0.0"
524 | mkdirp "^0.5.0"
525 | natural-compare "^1.4.0"
526 | optionator "^0.8.1"
527 | path-is-inside "^1.0.1"
528 | pluralize "^1.2.1"
529 | progress "^1.1.8"
530 | require-uncached "^1.0.2"
531 | shelljs "^0.6.0"
532 | strip-bom "^3.0.0"
533 | strip-json-comments "~1.0.1"
534 | table "^3.7.8"
535 | text-table "~0.2.0"
536 | user-home "^2.0.0"
537 |
538 | espree@^3.3.1:
539 | version "3.3.2"
540 | resolved "https://registry.yarnpkg.com/espree/-/espree-3.3.2.tgz#dbf3fadeb4ecb4d4778303e50103b3d36c88b89c"
541 | dependencies:
542 | acorn "^4.0.1"
543 | acorn-jsx "^3.0.0"
544 |
545 | esprima@^2.6.0, esprima@^2.7.1:
546 | version "2.7.3"
547 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
548 |
549 | esrecurse@^4.1.0:
550 | version "4.1.0"
551 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220"
552 | dependencies:
553 | estraverse "~4.1.0"
554 | object-assign "^4.0.1"
555 |
556 | estraverse@^1.9.1:
557 | version "1.9.3"
558 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
559 |
560 | estraverse@^4.1.1, estraverse@^4.2.0:
561 | version "4.2.0"
562 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
563 |
564 | estraverse@~4.1.0:
565 | version "4.1.1"
566 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2"
567 |
568 | esutils@^2.0.2:
569 | version "2.0.2"
570 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
571 |
572 | event-emitter@~0.3.4:
573 | version "0.3.4"
574 | resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.4.tgz#8d63ddfb4cfe1fae3b32ca265c4c720222080bb5"
575 | dependencies:
576 | d "~0.1.1"
577 | es5-ext "~0.10.7"
578 |
579 | exit-hook@^1.0.0:
580 | version "1.1.1"
581 | resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
582 |
583 | extend@^3.0.0:
584 | version "3.0.0"
585 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4"
586 |
587 | external-editor@^1.1.0:
588 | version "1.1.1"
589 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-1.1.1.tgz#12d7b0db850f7ff7e7081baf4005700060c4600b"
590 | dependencies:
591 | extend "^3.0.0"
592 | spawn-sync "^1.0.15"
593 | tmp "^0.0.29"
594 |
595 | fast-levenshtein@~2.0.4:
596 | version "2.0.5"
597 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.5.tgz#bd33145744519ab1c36c3ee9f31f08e9079b67f2"
598 |
599 | figures@^1.3.5:
600 | version "1.7.0"
601 | resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
602 | dependencies:
603 | escape-string-regexp "^1.0.5"
604 | object-assign "^4.1.0"
605 |
606 | file-entry-cache@^2.0.0:
607 | version "2.0.0"
608 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
609 | dependencies:
610 | flat-cache "^1.2.1"
611 | object-assign "^4.0.1"
612 |
613 | find-up@^1.0.0:
614 | version "1.1.2"
615 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
616 | dependencies:
617 | path-exists "^2.0.0"
618 | pinkie-promise "^2.0.0"
619 |
620 | first-chunk-stream@^2.0.0:
621 | version "2.0.0"
622 | resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz#1bdecdb8e083c0664b91945581577a43a9f31d70"
623 | dependencies:
624 | readable-stream "^2.0.2"
625 |
626 | flat-cache@^1.2.1:
627 | version "1.2.1"
628 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.1.tgz#6c837d6225a7de5659323740b36d5361f71691ff"
629 | dependencies:
630 | circular-json "^0.3.0"
631 | del "^2.0.2"
632 | graceful-fs "^4.1.2"
633 | write "^0.2.1"
634 |
635 | formatio@1.1.1:
636 | version "1.1.1"
637 | resolved "https://registry.yarnpkg.com/formatio/-/formatio-1.1.1.tgz#5ed3ccd636551097383465d996199100e86161e9"
638 | dependencies:
639 | samsam "~1.1"
640 |
641 | fs.realpath@^1.0.0:
642 | version "1.0.0"
643 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
644 |
645 | generate-function@^2.0.0:
646 | version "2.0.0"
647 | resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
648 |
649 | generate-object-property@^1.1.0:
650 | version "1.2.0"
651 | resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
652 | dependencies:
653 | is-property "^1.0.0"
654 |
655 | get-stdin@^4.0.1:
656 | version "4.0.1"
657 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
658 |
659 | gh-got@^2.2.0:
660 | version "2.4.0"
661 | resolved "https://registry.yarnpkg.com/gh-got/-/gh-got-2.4.0.tgz#aa51418911ca5e4f92437114cd1209383a4aa019"
662 | dependencies:
663 | got "^5.2.0"
664 | object-assign "^4.0.1"
665 | pinkie-promise "^2.0.0"
666 |
667 | github-username@^2.0.0:
668 | version "2.1.0"
669 | resolved "https://registry.yarnpkg.com/github-username/-/github-username-2.1.0.tgz#200e5a104af42ba08a54096c708d4b6ec2fa256b"
670 | dependencies:
671 | gh-got "^2.2.0"
672 | meow "^3.5.0"
673 |
674 | glob@7.0.5:
675 | version "7.0.5"
676 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95"
677 | dependencies:
678 | fs.realpath "^1.0.0"
679 | inflight "^1.0.4"
680 | inherits "2"
681 | minimatch "^3.0.2"
682 | once "^1.3.0"
683 | path-is-absolute "^1.0.0"
684 |
685 | glob@^6.0.1:
686 | version "6.0.4"
687 | resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"
688 | dependencies:
689 | inflight "^1.0.4"
690 | inherits "2"
691 | minimatch "2 || 3"
692 | once "^1.3.0"
693 | path-is-absolute "^1.0.0"
694 |
695 | glob@^7.0.0, glob@^7.0.3, glob@^7.0.5:
696 | version "7.1.1"
697 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
698 | dependencies:
699 | fs.realpath "^1.0.0"
700 | inflight "^1.0.4"
701 | inherits "2"
702 | minimatch "^3.0.2"
703 | once "^1.3.0"
704 | path-is-absolute "^1.0.0"
705 |
706 | globals@^9.2.0:
707 | version "9.14.0"
708 | resolved "https://registry.yarnpkg.com/globals/-/globals-9.14.0.tgz#8859936af0038741263053b39d0e76ca241e4034"
709 |
710 | globby@^4.0.0:
711 | version "4.1.0"
712 | resolved "https://registry.yarnpkg.com/globby/-/globby-4.1.0.tgz#080f54549ec1b82a6c60e631fc82e1211dbe95f8"
713 | dependencies:
714 | array-union "^1.0.1"
715 | arrify "^1.0.0"
716 | glob "^6.0.1"
717 | object-assign "^4.0.1"
718 | pify "^2.0.0"
719 | pinkie-promise "^2.0.0"
720 |
721 | globby@^5.0.0:
722 | version "5.0.0"
723 | resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"
724 | dependencies:
725 | array-union "^1.0.1"
726 | arrify "^1.0.0"
727 | glob "^7.0.3"
728 | object-assign "^4.0.1"
729 | pify "^2.0.0"
730 | pinkie-promise "^2.0.0"
731 |
732 | got@^5.2.0:
733 | version "5.7.1"
734 | resolved "https://registry.yarnpkg.com/got/-/got-5.7.1.tgz#5f81635a61e4a6589f180569ea4e381680a51f35"
735 | dependencies:
736 | create-error-class "^3.0.1"
737 | duplexer2 "^0.1.4"
738 | is-redirect "^1.0.0"
739 | is-retry-allowed "^1.0.0"
740 | is-stream "^1.0.0"
741 | lowercase-keys "^1.0.0"
742 | node-status-codes "^1.0.0"
743 | object-assign "^4.0.1"
744 | parse-json "^2.1.0"
745 | pinkie-promise "^2.0.0"
746 | read-all-stream "^3.0.0"
747 | readable-stream "^2.0.5"
748 | timed-out "^3.0.0"
749 | unzip-response "^1.0.2"
750 | url-parse-lax "^1.0.0"
751 |
752 | graceful-fs@^4.1.2:
753 | version "4.1.11"
754 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
755 |
756 | "graceful-readlink@>= 1.0.0":
757 | version "1.0.1"
758 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
759 |
760 | grouped-queue@^0.3.0:
761 | version "0.3.3"
762 | resolved "https://registry.yarnpkg.com/grouped-queue/-/grouped-queue-0.3.3.tgz#c167d2a5319c5a0e0964ef6a25b7c2df8996c85c"
763 | dependencies:
764 | lodash "^4.17.2"
765 |
766 | growl@1.9.2:
767 | version "1.9.2"
768 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f"
769 |
770 | gruntfile-editor@^1.0.0:
771 | version "1.2.1"
772 | resolved "https://registry.yarnpkg.com/gruntfile-editor/-/gruntfile-editor-1.2.1.tgz#366fc1f93cbf045813e1448aef1da9f18289d5eb"
773 | dependencies:
774 | ast-query "^2.0.0"
775 | lodash "^4.6.1"
776 |
777 | has-ansi@^2.0.0:
778 | version "2.0.0"
779 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
780 | dependencies:
781 | ansi-regex "^2.0.0"
782 |
783 | has-flag@^1.0.0:
784 | version "1.0.0"
785 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
786 |
787 | hosted-git-info@^2.1.4:
788 | version "2.1.5"
789 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b"
790 |
791 | html-wiring@^1.0.0:
792 | version "1.2.0"
793 | resolved "https://registry.yarnpkg.com/html-wiring/-/html-wiring-1.2.0.tgz#c5f90a776e0a27241dc6df9022c37186d0270f9e"
794 | dependencies:
795 | cheerio "^0.19.0"
796 | detect-newline "^1.0.3"
797 |
798 | htmlparser2@~3.8.1:
799 | version "3.8.3"
800 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068"
801 | dependencies:
802 | domelementtype "1"
803 | domhandler "2.3"
804 | domutils "1.5"
805 | entities "1.0"
806 | readable-stream "1.1"
807 |
808 | ignore@^3.1.5:
809 | version "3.2.0"
810 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.0.tgz#8d88f03c3002a0ac52114db25d2c673b0bf1e435"
811 |
812 | imurmurhash@^0.1.4:
813 | version "0.1.4"
814 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
815 |
816 | indent-string@^2.1.0:
817 | version "2.1.0"
818 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
819 | dependencies:
820 | repeating "^2.0.0"
821 |
822 | inflight@^1.0.4:
823 | version "1.0.6"
824 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
825 | dependencies:
826 | once "^1.3.0"
827 | wrappy "1"
828 |
829 | inherits@2, inherits@~2.0.1:
830 | version "2.0.3"
831 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
832 |
833 | inherits@2.0.1:
834 | version "2.0.1"
835 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
836 |
837 | inquirer@^0.12.0:
838 | version "0.12.0"
839 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e"
840 | dependencies:
841 | ansi-escapes "^1.1.0"
842 | ansi-regex "^2.0.0"
843 | chalk "^1.0.0"
844 | cli-cursor "^1.0.1"
845 | cli-width "^2.0.0"
846 | figures "^1.3.5"
847 | lodash "^4.3.0"
848 | readline2 "^1.0.1"
849 | run-async "^0.1.0"
850 | rx-lite "^3.1.2"
851 | string-width "^1.0.1"
852 | strip-ansi "^3.0.0"
853 | through "^2.3.6"
854 |
855 | inquirer@^1.0.2:
856 | version "1.2.3"
857 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-1.2.3.tgz#4dec6f32f37ef7bb0b2ed3f1d1a5c3f545074918"
858 | dependencies:
859 | ansi-escapes "^1.1.0"
860 | chalk "^1.0.0"
861 | cli-cursor "^1.0.1"
862 | cli-width "^2.0.0"
863 | external-editor "^1.1.0"
864 | figures "^1.3.5"
865 | lodash "^4.3.0"
866 | mute-stream "0.0.6"
867 | pinkie-promise "^2.0.0"
868 | run-async "^2.2.0"
869 | rx "^4.1.0"
870 | string-width "^1.0.1"
871 | strip-ansi "^3.0.0"
872 | through "^2.3.6"
873 |
874 | interpret@^1.0.0:
875 | version "1.0.1"
876 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c"
877 |
878 | is-arrayish@^0.2.1:
879 | version "0.2.1"
880 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
881 |
882 | is-builtin-module@^1.0.0:
883 | version "1.0.0"
884 | resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
885 | dependencies:
886 | builtin-modules "^1.0.0"
887 |
888 | is-finite@^1.0.0:
889 | version "1.0.2"
890 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
891 | dependencies:
892 | number-is-nan "^1.0.0"
893 |
894 | is-fullwidth-code-point@^1.0.0:
895 | version "1.0.0"
896 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
897 | dependencies:
898 | number-is-nan "^1.0.0"
899 |
900 | is-fullwidth-code-point@^2.0.0:
901 | version "2.0.0"
902 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
903 |
904 | is-my-json-valid@^2.10.0:
905 | version "2.15.0"
906 | resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b"
907 | dependencies:
908 | generate-function "^2.0.0"
909 | generate-object-property "^1.1.0"
910 | jsonpointer "^4.0.0"
911 | xtend "^4.0.0"
912 |
913 | is-path-cwd@^1.0.0:
914 | version "1.0.0"
915 | resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
916 |
917 | is-path-in-cwd@^1.0.0:
918 | version "1.0.0"
919 | resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc"
920 | dependencies:
921 | is-path-inside "^1.0.0"
922 |
923 | is-path-inside@^1.0.0:
924 | version "1.0.0"
925 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f"
926 | dependencies:
927 | path-is-inside "^1.0.1"
928 |
929 | is-promise@^2.1.0:
930 | version "2.1.0"
931 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
932 |
933 | is-property@^1.0.0:
934 | version "1.0.2"
935 | resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
936 |
937 | is-redirect@^1.0.0:
938 | version "1.0.0"
939 | resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
940 |
941 | is-resolvable@^1.0.0:
942 | version "1.0.0"
943 | resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62"
944 | dependencies:
945 | tryit "^1.0.1"
946 |
947 | is-retry-allowed@^1.0.0:
948 | version "1.1.0"
949 | resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34"
950 |
951 | is-stream@^1.0.0:
952 | version "1.1.0"
953 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
954 |
955 | is-utf8@^0.2.0:
956 | version "0.2.1"
957 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
958 |
959 | isarray@0.0.1:
960 | version "0.0.1"
961 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
962 |
963 | isarray@^1.0.0, isarray@~1.0.0:
964 | version "1.0.0"
965 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
966 |
967 | isexe@^1.1.1:
968 | version "1.1.2"
969 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0"
970 |
971 | istextorbinary@^2.1.0:
972 | version "2.1.0"
973 | resolved "https://registry.yarnpkg.com/istextorbinary/-/istextorbinary-2.1.0.tgz#dbed2a6f51be2f7475b68f89465811141b758874"
974 | dependencies:
975 | binaryextensions "1 || 2"
976 | editions "^1.1.1"
977 | textextensions "1 || 2"
978 |
979 | js-yaml@^3.5.1:
980 | version "3.7.0"
981 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80"
982 | dependencies:
983 | argparse "^1.0.7"
984 | esprima "^2.6.0"
985 |
986 | json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1:
987 | version "1.0.1"
988 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
989 | dependencies:
990 | jsonify "~0.0.0"
991 |
992 | json3@3.3.2:
993 | version "3.3.2"
994 | resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
995 |
996 | jsonify@~0.0.0:
997 | version "0.0.0"
998 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
999 |
1000 | jsonpointer@^4.0.0:
1001 | version "4.0.0"
1002 | resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.0.tgz#6661e161d2fc445f19f98430231343722e1fcbd5"
1003 |
1004 | levn@^0.3.0, levn@~0.3.0:
1005 | version "0.3.0"
1006 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
1007 | dependencies:
1008 | prelude-ls "~1.1.2"
1009 | type-check "~0.3.2"
1010 |
1011 | load-json-file@^1.0.0:
1012 | version "1.1.0"
1013 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
1014 | dependencies:
1015 | graceful-fs "^4.1.2"
1016 | parse-json "^2.2.0"
1017 | pify "^2.0.0"
1018 | pinkie-promise "^2.0.0"
1019 | strip-bom "^2.0.0"
1020 |
1021 | lodash._baseassign@^3.0.0:
1022 | version "3.2.0"
1023 | resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e"
1024 | dependencies:
1025 | lodash._basecopy "^3.0.0"
1026 | lodash.keys "^3.0.0"
1027 |
1028 | lodash._basecopy@^3.0.0:
1029 | version "3.0.1"
1030 | resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
1031 |
1032 | lodash._basecreate@^3.0.0:
1033 | version "3.0.3"
1034 | resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821"
1035 |
1036 | lodash._getnative@^3.0.0:
1037 | version "3.9.1"
1038 | resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
1039 |
1040 | lodash._isiterateecall@^3.0.0:
1041 | version "3.0.9"
1042 | resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c"
1043 |
1044 | lodash.create@3.1.1:
1045 | version "3.1.1"
1046 | resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7"
1047 | dependencies:
1048 | lodash._baseassign "^3.0.0"
1049 | lodash._basecreate "^3.0.0"
1050 | lodash._isiterateecall "^3.0.0"
1051 |
1052 | lodash.isarguments@^3.0.0:
1053 | version "3.1.0"
1054 | resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
1055 |
1056 | lodash.isarray@^3.0.0:
1057 | version "3.0.4"
1058 | resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
1059 |
1060 | lodash.keys@^3.0.0:
1061 | version "3.1.2"
1062 | resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
1063 | dependencies:
1064 | lodash._getnative "^3.0.0"
1065 | lodash.isarguments "^3.0.0"
1066 | lodash.isarray "^3.0.0"
1067 |
1068 | lodash@^3.2.0, lodash@^3.6.0:
1069 | version "3.10.1"
1070 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
1071 |
1072 | lodash@^4.0.0, lodash@^4.11.1, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.3.0, lodash@^4.6.1:
1073 | version "4.17.2"
1074 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.2.tgz#34a3055babe04ce42467b607d700072c7ff6bf42"
1075 |
1076 | log-symbols@^1.0.1:
1077 | version "1.0.2"
1078 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18"
1079 | dependencies:
1080 | chalk "^1.0.0"
1081 |
1082 | lolex@1.3.2:
1083 | version "1.3.2"
1084 | resolved "https://registry.yarnpkg.com/lolex/-/lolex-1.3.2.tgz#7c3da62ffcb30f0f5a80a2566ca24e45d8a01f31"
1085 |
1086 | loud-rejection@^1.0.0:
1087 | version "1.6.0"
1088 | resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
1089 | dependencies:
1090 | currently-unhandled "^0.4.1"
1091 | signal-exit "^3.0.0"
1092 |
1093 | lowercase-keys@^1.0.0:
1094 | version "1.0.0"
1095 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306"
1096 |
1097 | lru-cache@^4.0.1:
1098 | version "4.0.2"
1099 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e"
1100 | dependencies:
1101 | pseudomap "^1.0.1"
1102 | yallist "^2.0.0"
1103 |
1104 | map-obj@^1.0.0, map-obj@^1.0.1:
1105 | version "1.0.1"
1106 | resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
1107 |
1108 | mem-fs-editor@^2.0.0:
1109 | version "2.3.0"
1110 | resolved "https://registry.yarnpkg.com/mem-fs-editor/-/mem-fs-editor-2.3.0.tgz#42a0ae1f55e76fd03f09e7c7b15b6307bdf5cb13"
1111 | dependencies:
1112 | commondir "^1.0.1"
1113 | deep-extend "^0.4.0"
1114 | ejs "^2.3.1"
1115 | glob "^7.0.3"
1116 | globby "^4.0.0"
1117 | mkdirp "^0.5.0"
1118 | multimatch "^2.0.0"
1119 | rimraf "^2.2.8"
1120 | through2 "^2.0.0"
1121 | vinyl "^1.1.0"
1122 |
1123 | mem-fs@^1.1.0:
1124 | version "1.1.3"
1125 | resolved "https://registry.yarnpkg.com/mem-fs/-/mem-fs-1.1.3.tgz#b8ae8d2e3fcb6f5d3f9165c12d4551a065d989cc"
1126 | dependencies:
1127 | through2 "^2.0.0"
1128 | vinyl "^1.1.0"
1129 | vinyl-file "^2.0.0"
1130 |
1131 | meow@^3.3.0, meow@^3.5.0:
1132 | version "3.7.0"
1133 | resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
1134 | dependencies:
1135 | camelcase-keys "^2.0.0"
1136 | decamelize "^1.1.2"
1137 | loud-rejection "^1.0.0"
1138 | map-obj "^1.0.1"
1139 | minimist "^1.1.3"
1140 | normalize-package-data "^2.3.4"
1141 | object-assign "^4.0.1"
1142 | read-pkg-up "^1.0.1"
1143 | redent "^1.0.0"
1144 | trim-newlines "^1.0.0"
1145 |
1146 | "minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2:
1147 | version "3.0.3"
1148 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
1149 | dependencies:
1150 | brace-expansion "^1.0.0"
1151 |
1152 | minimist@0.0.8:
1153 | version "0.0.8"
1154 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
1155 |
1156 | minimist@^1.1.0, minimist@^1.1.3:
1157 | version "1.2.0"
1158 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
1159 |
1160 | mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1:
1161 | version "0.5.1"
1162 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
1163 | dependencies:
1164 | minimist "0.0.8"
1165 |
1166 | mocha@^3.1.0:
1167 | version "3.2.0"
1168 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.2.0.tgz#7dc4f45e5088075171a68896814e6ae9eb7a85e3"
1169 | dependencies:
1170 | browser-stdout "1.3.0"
1171 | commander "2.9.0"
1172 | debug "2.2.0"
1173 | diff "1.4.0"
1174 | escape-string-regexp "1.0.5"
1175 | glob "7.0.5"
1176 | growl "1.9.2"
1177 | json3 "3.3.2"
1178 | lodash.create "3.1.1"
1179 | mkdirp "0.5.1"
1180 | supports-color "3.1.2"
1181 |
1182 | ms@0.7.1:
1183 | version "0.7.1"
1184 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
1185 |
1186 | ms@0.7.2:
1187 | version "0.7.2"
1188 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
1189 |
1190 | multimatch@^2.0.0:
1191 | version "2.1.0"
1192 | resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b"
1193 | dependencies:
1194 | array-differ "^1.0.0"
1195 | array-union "^1.0.1"
1196 | arrify "^1.0.0"
1197 | minimatch "^3.0.0"
1198 |
1199 | mute-stream@0.0.5:
1200 | version "0.0.5"
1201 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0"
1202 |
1203 | mute-stream@0.0.6:
1204 | version "0.0.6"
1205 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.6.tgz#48962b19e169fd1dfc240b3f1e7317627bbc47db"
1206 |
1207 | natural-compare@^1.4.0:
1208 | version "1.4.0"
1209 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
1210 |
1211 | node-status-codes@^1.0.0:
1212 | version "1.0.0"
1213 | resolved "https://registry.yarnpkg.com/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f"
1214 |
1215 | nopt@^3.0.0:
1216 | version "3.0.6"
1217 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
1218 | dependencies:
1219 | abbrev "1"
1220 |
1221 | normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
1222 | version "2.3.5"
1223 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df"
1224 | dependencies:
1225 | hosted-git-info "^2.1.4"
1226 | is-builtin-module "^1.0.0"
1227 | semver "2 || 3 || 4 || 5"
1228 | validate-npm-package-license "^3.0.1"
1229 |
1230 | nth-check@~1.0.0:
1231 | version "1.0.1"
1232 | resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4"
1233 | dependencies:
1234 | boolbase "~1.0.0"
1235 |
1236 | number-is-nan@^1.0.0:
1237 | version "1.0.1"
1238 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
1239 |
1240 | object-assign@^2.0.0:
1241 | version "2.1.1"
1242 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa"
1243 |
1244 | object-assign@^4.0.1, object-assign@^4.1.0:
1245 | version "4.1.0"
1246 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"
1247 |
1248 | once@^1.3.0:
1249 | version "1.4.0"
1250 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1251 | dependencies:
1252 | wrappy "1"
1253 |
1254 | onetime@^1.0.0:
1255 | version "1.1.0"
1256 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
1257 |
1258 | optionator@^0.8.1:
1259 | version "0.8.2"
1260 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
1261 | dependencies:
1262 | deep-is "~0.1.3"
1263 | fast-levenshtein "~2.0.4"
1264 | levn "~0.3.0"
1265 | prelude-ls "~1.1.2"
1266 | type-check "~0.3.2"
1267 | wordwrap "~1.0.0"
1268 |
1269 | os-homedir@^1.0.0:
1270 | version "1.0.2"
1271 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
1272 |
1273 | os-shim@^0.1.2:
1274 | version "0.1.3"
1275 | resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917"
1276 |
1277 | os-tmpdir@~1.0.1:
1278 | version "1.0.2"
1279 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
1280 |
1281 | pad-component@0.0.1:
1282 | version "0.0.1"
1283 | resolved "https://registry.yarnpkg.com/pad-component/-/pad-component-0.0.1.tgz#ad1f22ce1bf0fdc0d6ddd908af17f351a404b8ac"
1284 |
1285 | parse-json@^2.1.0, parse-json@^2.2.0:
1286 | version "2.2.0"
1287 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
1288 | dependencies:
1289 | error-ex "^1.2.0"
1290 |
1291 | path-exists@^2.0.0, path-exists@^2.1.0:
1292 | version "2.1.0"
1293 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
1294 | dependencies:
1295 | pinkie-promise "^2.0.0"
1296 |
1297 | path-is-absolute@^1.0.0:
1298 | version "1.0.1"
1299 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1300 |
1301 | path-is-inside@^1.0.1:
1302 | version "1.0.2"
1303 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
1304 |
1305 | path-type@^1.0.0:
1306 | version "1.1.0"
1307 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
1308 | dependencies:
1309 | graceful-fs "^4.1.2"
1310 | pify "^2.0.0"
1311 | pinkie-promise "^2.0.0"
1312 |
1313 | pify@^2.0.0, pify@^2.3.0:
1314 | version "2.3.0"
1315 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
1316 |
1317 | pinkie-promise@^2.0.0, pinkie-promise@^2.0.1:
1318 | version "2.0.1"
1319 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
1320 | dependencies:
1321 | pinkie "^2.0.0"
1322 |
1323 | pinkie@^2.0.0:
1324 | version "2.0.4"
1325 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
1326 |
1327 | pluralize@^1.2.1:
1328 | version "1.2.1"
1329 | resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45"
1330 |
1331 | prelude-ls@~1.1.2:
1332 | version "1.1.2"
1333 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
1334 |
1335 | prepend-http@^1.0.1:
1336 | version "1.0.4"
1337 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
1338 |
1339 | pretty-bytes@^3.0.1:
1340 | version "3.0.1"
1341 | resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-3.0.1.tgz#27d0008d778063a0b4811bb35c79f1bd5d5fbccf"
1342 | dependencies:
1343 | number-is-nan "^1.0.0"
1344 |
1345 | process-nextick-args@~1.0.6:
1346 | version "1.0.7"
1347 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
1348 |
1349 | progress@^1.1.8:
1350 | version "1.1.8"
1351 | resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
1352 |
1353 | pseudomap@^1.0.1:
1354 | version "1.0.2"
1355 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
1356 |
1357 | read-all-stream@^3.0.0:
1358 | version "3.1.0"
1359 | resolved "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa"
1360 | dependencies:
1361 | pinkie-promise "^2.0.0"
1362 | readable-stream "^2.0.0"
1363 |
1364 | read-chunk@^1.0.0:
1365 | version "1.0.1"
1366 | resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-1.0.1.tgz#5f68cab307e663f19993527d9b589cace4661194"
1367 |
1368 | read-pkg-up@^1.0.1:
1369 | version "1.0.1"
1370 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
1371 | dependencies:
1372 | find-up "^1.0.0"
1373 | read-pkg "^1.0.0"
1374 |
1375 | read-pkg@^1.0.0:
1376 | version "1.1.0"
1377 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
1378 | dependencies:
1379 | load-json-file "^1.0.0"
1380 | normalize-package-data "^2.3.2"
1381 | path-type "^1.0.0"
1382 |
1383 | readable-stream@1.1:
1384 | version "1.1.13"
1385 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e"
1386 | dependencies:
1387 | core-util-is "~1.0.0"
1388 | inherits "~2.0.1"
1389 | isarray "0.0.1"
1390 | string_decoder "~0.10.x"
1391 |
1392 | readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.5:
1393 | version "2.2.2"
1394 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e"
1395 | dependencies:
1396 | buffer-shims "^1.0.0"
1397 | core-util-is "~1.0.0"
1398 | inherits "~2.0.1"
1399 | isarray "~1.0.0"
1400 | process-nextick-args "~1.0.6"
1401 | string_decoder "~0.10.x"
1402 | util-deprecate "~1.0.1"
1403 |
1404 | readable-stream@~2.0.0:
1405 | version "2.0.6"
1406 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e"
1407 | dependencies:
1408 | core-util-is "~1.0.0"
1409 | inherits "~2.0.1"
1410 | isarray "~1.0.0"
1411 | process-nextick-args "~1.0.6"
1412 | string_decoder "~0.10.x"
1413 | util-deprecate "~1.0.1"
1414 |
1415 | readline2@^1.0.1:
1416 | version "1.0.1"
1417 | resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35"
1418 | dependencies:
1419 | code-point-at "^1.0.0"
1420 | is-fullwidth-code-point "^1.0.0"
1421 | mute-stream "0.0.5"
1422 |
1423 | rechoir@^0.6.2:
1424 | version "0.6.2"
1425 | resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
1426 | dependencies:
1427 | resolve "^1.1.6"
1428 |
1429 | redent@^1.0.0:
1430 | version "1.0.0"
1431 | resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
1432 | dependencies:
1433 | indent-string "^2.1.0"
1434 | strip-indent "^1.0.1"
1435 |
1436 | repeating@^2.0.0:
1437 | version "2.0.1"
1438 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
1439 | dependencies:
1440 | is-finite "^1.0.0"
1441 |
1442 | replace-ext@0.0.1:
1443 | version "0.0.1"
1444 | resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924"
1445 |
1446 | require-uncached@^1.0.2:
1447 | version "1.0.3"
1448 | resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
1449 | dependencies:
1450 | caller-path "^0.1.0"
1451 | resolve-from "^1.0.0"
1452 |
1453 | resolve-from@^1.0.0:
1454 | version "1.0.1"
1455 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
1456 |
1457 | resolve@^1.1.6:
1458 | version "1.2.0"
1459 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c"
1460 |
1461 | restore-cursor@^1.0.1:
1462 | version "1.0.1"
1463 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541"
1464 | dependencies:
1465 | exit-hook "^1.0.0"
1466 | onetime "^1.0.0"
1467 |
1468 | rimraf@^2.2.0, rimraf@^2.2.8, rimraf@^2.4.4:
1469 | version "2.5.4"
1470 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
1471 | dependencies:
1472 | glob "^7.0.5"
1473 |
1474 | run-async@^0.1.0:
1475 | version "0.1.0"
1476 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389"
1477 | dependencies:
1478 | once "^1.3.0"
1479 |
1480 | run-async@^2.0.0, run-async@^2.2.0:
1481 | version "2.3.0"
1482 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
1483 | dependencies:
1484 | is-promise "^2.1.0"
1485 |
1486 | rx-lite@^3.1.2:
1487 | version "3.1.2"
1488 | resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102"
1489 |
1490 | rx@^4.1.0:
1491 | version "4.1.0"
1492 | resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782"
1493 |
1494 | samsam@1.1.2, samsam@~1.1:
1495 | version "1.1.2"
1496 | resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.1.2.tgz#bec11fdc83a9fda063401210e40176c3024d1567"
1497 |
1498 | "semver@2 || 3 || 4 || 5":
1499 | version "5.3.0"
1500 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
1501 |
1502 | shelljs@^0.6.0:
1503 | version "0.6.1"
1504 | resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.6.1.tgz#ec6211bed1920442088fe0f70b2837232ed2c8a8"
1505 |
1506 | shelljs@^0.7.0:
1507 | version "0.7.5"
1508 | resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.5.tgz#2eef7a50a21e1ccf37da00df767ec69e30ad0675"
1509 | dependencies:
1510 | glob "^7.0.0"
1511 | interpret "^1.0.0"
1512 | rechoir "^0.6.2"
1513 |
1514 | signal-exit@^3.0.0:
1515 | version "3.0.2"
1516 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
1517 |
1518 | sinon@^1.17.2:
1519 | version "1.17.6"
1520 | resolved "https://registry.yarnpkg.com/sinon/-/sinon-1.17.6.tgz#a43116db59577c8296356afee13fafc2332e58e1"
1521 | dependencies:
1522 | formatio "1.1.1"
1523 | lolex "1.3.2"
1524 | samsam "1.1.2"
1525 | util ">=0.10.3 <1"
1526 |
1527 | slice-ansi@0.0.4:
1528 | version "0.0.4"
1529 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
1530 |
1531 | source-map@~0.2.0:
1532 | version "0.2.0"
1533 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"
1534 | dependencies:
1535 | amdefine ">=0.0.4"
1536 |
1537 | spawn-sync@^1.0.15:
1538 | version "1.0.15"
1539 | resolved "https://registry.yarnpkg.com/spawn-sync/-/spawn-sync-1.0.15.tgz#b00799557eb7fb0c8376c29d44e8a1ea67e57476"
1540 | dependencies:
1541 | concat-stream "^1.4.7"
1542 | os-shim "^0.1.2"
1543 |
1544 | spdx-correct@~1.0.0:
1545 | version "1.0.2"
1546 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
1547 | dependencies:
1548 | spdx-license-ids "^1.0.2"
1549 |
1550 | spdx-expression-parse@~1.0.0:
1551 | version "1.0.4"
1552 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
1553 |
1554 | spdx-license-ids@^1.0.2:
1555 | version "1.2.2"
1556 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
1557 |
1558 | sprintf-js@^1.0.3, sprintf-js@~1.0.2:
1559 | version "1.0.3"
1560 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
1561 |
1562 | string-template@~0.2.1:
1563 | version "0.2.1"
1564 | resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add"
1565 |
1566 | string-width@^1.0.0, string-width@^1.0.1:
1567 | version "1.0.2"
1568 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
1569 | dependencies:
1570 | code-point-at "^1.0.0"
1571 | is-fullwidth-code-point "^1.0.0"
1572 | strip-ansi "^3.0.0"
1573 |
1574 | string-width@^2.0.0:
1575 | version "2.0.0"
1576 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e"
1577 | dependencies:
1578 | is-fullwidth-code-point "^2.0.0"
1579 | strip-ansi "^3.0.0"
1580 |
1581 | string_decoder@~0.10.x:
1582 | version "0.10.31"
1583 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
1584 |
1585 | strip-ansi@^3.0.0, strip-ansi@^3.0.1:
1586 | version "3.0.1"
1587 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
1588 | dependencies:
1589 | ansi-regex "^2.0.0"
1590 |
1591 | strip-bom-stream@^2.0.0:
1592 | version "2.0.0"
1593 | resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz#f87db5ef2613f6968aa545abfe1ec728b6a829ca"
1594 | dependencies:
1595 | first-chunk-stream "^2.0.0"
1596 | strip-bom "^2.0.0"
1597 |
1598 | strip-bom@^2.0.0:
1599 | version "2.0.0"
1600 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
1601 | dependencies:
1602 | is-utf8 "^0.2.0"
1603 |
1604 | strip-bom@^3.0.0:
1605 | version "3.0.0"
1606 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
1607 |
1608 | strip-indent@^1.0.1:
1609 | version "1.0.1"
1610 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
1611 | dependencies:
1612 | get-stdin "^4.0.1"
1613 |
1614 | strip-json-comments@~1.0.1:
1615 | version "1.0.4"
1616 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91"
1617 |
1618 | supports-color@3.1.2:
1619 | version "3.1.2"
1620 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5"
1621 | dependencies:
1622 | has-flag "^1.0.0"
1623 |
1624 | supports-color@^2.0.0:
1625 | version "2.0.0"
1626 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
1627 |
1628 | table@^3.7.8:
1629 | version "3.8.3"
1630 | resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f"
1631 | dependencies:
1632 | ajv "^4.7.0"
1633 | ajv-keywords "^1.0.0"
1634 | chalk "^1.1.1"
1635 | lodash "^4.0.0"
1636 | slice-ansi "0.0.4"
1637 | string-width "^2.0.0"
1638 |
1639 | taketalk@^1.0.0:
1640 | version "1.0.0"
1641 | resolved "https://registry.yarnpkg.com/taketalk/-/taketalk-1.0.0.tgz#b4d4f0deed206ae7df775b129ea2ca6de52f26dd"
1642 | dependencies:
1643 | get-stdin "^4.0.1"
1644 | minimist "^1.1.0"
1645 |
1646 | text-table@^0.2.0, text-table@~0.2.0:
1647 | version "0.2.0"
1648 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
1649 |
1650 | "textextensions@1 || 2":
1651 | version "2.0.1"
1652 | resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-2.0.1.tgz#be8cf22d65379c151319f88f0335ad8f667abdca"
1653 |
1654 | through2@^2.0.0:
1655 | version "2.0.3"
1656 | resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
1657 | dependencies:
1658 | readable-stream "^2.1.5"
1659 | xtend "~4.0.1"
1660 |
1661 | through@^2.3.6:
1662 | version "2.3.8"
1663 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
1664 |
1665 | timed-out@^3.0.0:
1666 | version "3.1.0"
1667 | resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-3.1.0.tgz#43b98b14bb712c9161c28f4dc1f3068d67a04ec2"
1668 |
1669 | tmp@^0.0.29:
1670 | version "0.0.29"
1671 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.29.tgz#f25125ff0dd9da3ccb0c2dd371ee1288bb9128c0"
1672 | dependencies:
1673 | os-tmpdir "~1.0.1"
1674 |
1675 | traverse@^0.6.6:
1676 | version "0.6.6"
1677 | resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137"
1678 |
1679 | trim-newlines@^1.0.0:
1680 | version "1.0.0"
1681 | resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
1682 |
1683 | tryit@^1.0.1:
1684 | version "1.0.3"
1685 | resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb"
1686 |
1687 | type-check@~0.3.2:
1688 | version "0.3.2"
1689 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
1690 | dependencies:
1691 | prelude-ls "~1.1.2"
1692 |
1693 | typedarray@~0.0.5:
1694 | version "0.0.6"
1695 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
1696 |
1697 | underscore.string@^3.0.3, underscore.string@^3.3.4:
1698 | version "3.3.4"
1699 | resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.4.tgz#2c2a3f9f83e64762fdc45e6ceac65142864213db"
1700 | dependencies:
1701 | sprintf-js "^1.0.3"
1702 | util-deprecate "^1.0.2"
1703 |
1704 | untildify@^2.0.0:
1705 | version "2.1.0"
1706 | resolved "https://registry.yarnpkg.com/untildify/-/untildify-2.1.0.tgz#17eb2807987f76952e9c0485fc311d06a826a2e0"
1707 | dependencies:
1708 | os-homedir "^1.0.0"
1709 |
1710 | unzip-response@^1.0.2:
1711 | version "1.0.2"
1712 | resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe"
1713 |
1714 | url-parse-lax@^1.0.0:
1715 | version "1.0.0"
1716 | resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
1717 | dependencies:
1718 | prepend-http "^1.0.1"
1719 |
1720 | user-home@^2.0.0:
1721 | version "2.0.0"
1722 | resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f"
1723 | dependencies:
1724 | os-homedir "^1.0.0"
1725 |
1726 | util-deprecate@^1.0.2, util-deprecate@~1.0.1:
1727 | version "1.0.2"
1728 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
1729 |
1730 | "util@>=0.10.3 <1":
1731 | version "0.10.3"
1732 | resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
1733 | dependencies:
1734 | inherits "2.0.1"
1735 |
1736 | validate-npm-package-license@^3.0.1:
1737 | version "3.0.1"
1738 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
1739 | dependencies:
1740 | spdx-correct "~1.0.0"
1741 | spdx-expression-parse "~1.0.0"
1742 |
1743 | vinyl-file@^2.0.0:
1744 | version "2.0.0"
1745 | resolved "https://registry.yarnpkg.com/vinyl-file/-/vinyl-file-2.0.0.tgz#a7ebf5ffbefda1b7d18d140fcb07b223efb6751a"
1746 | dependencies:
1747 | graceful-fs "^4.1.2"
1748 | pify "^2.3.0"
1749 | pinkie-promise "^2.0.0"
1750 | strip-bom "^2.0.0"
1751 | strip-bom-stream "^2.0.0"
1752 | vinyl "^1.1.0"
1753 |
1754 | vinyl@^1.1.0:
1755 | version "1.2.0"
1756 | resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-1.2.0.tgz#5c88036cf565e5df05558bfc911f8656df218884"
1757 | dependencies:
1758 | clone "^1.0.0"
1759 | clone-stats "^0.0.1"
1760 | replace-ext "0.0.1"
1761 |
1762 | which@^1.2.9:
1763 | version "1.2.12"
1764 | resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192"
1765 | dependencies:
1766 | isexe "^1.1.1"
1767 |
1768 | wordwrap@~1.0.0:
1769 | version "1.0.0"
1770 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
1771 |
1772 | wrap-ansi@^2.0.0:
1773 | version "2.1.0"
1774 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
1775 | dependencies:
1776 | string-width "^1.0.1"
1777 | strip-ansi "^3.0.1"
1778 |
1779 | wrappy@1:
1780 | version "1.0.2"
1781 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1782 |
1783 | write@^0.2.1:
1784 | version "0.2.1"
1785 | resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
1786 | dependencies:
1787 | mkdirp "^0.5.1"
1788 |
1789 | xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1:
1790 | version "4.0.1"
1791 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
1792 |
1793 | yallist@^2.0.0:
1794 | version "2.0.0"
1795 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.0.0.tgz#306c543835f09ee1a4cb23b7bce9ab341c91cdd4"
1796 |
1797 | yeoman-assert@^2.0.0, yeoman-assert@^2.2.1:
1798 | version "2.2.2"
1799 | resolved "https://registry.yarnpkg.com/yeoman-assert/-/yeoman-assert-2.2.2.tgz#d2b15982f6a438a0d2319d8b5c1d65abc5b6dbea"
1800 | dependencies:
1801 | lodash "^3.6.0"
1802 | path-exists "^2.1.0"
1803 |
1804 | yeoman-environment@^1.1.0, yeoman-environment@^1.5.2:
1805 | version "1.6.6"
1806 | resolved "https://registry.yarnpkg.com/yeoman-environment/-/yeoman-environment-1.6.6.tgz#cd85fa67d156060e440d7807d7ef7cf0d2d1d671"
1807 | dependencies:
1808 | chalk "^1.0.0"
1809 | debug "^2.0.0"
1810 | diff "^2.1.2"
1811 | escape-string-regexp "^1.0.2"
1812 | globby "^4.0.0"
1813 | grouped-queue "^0.3.0"
1814 | inquirer "^1.0.2"
1815 | lodash "^4.11.1"
1816 | log-symbols "^1.0.1"
1817 | mem-fs "^1.1.0"
1818 | text-table "^0.2.0"
1819 | untildify "^2.0.0"
1820 |
1821 | yeoman-generator@^0.24.1:
1822 | version "0.24.1"
1823 | resolved "https://registry.yarnpkg.com/yeoman-generator/-/yeoman-generator-0.24.1.tgz#1ca74429d9c5c95db0b22859ec180a2599bc1f8e"
1824 | dependencies:
1825 | async "^2.0.0"
1826 | chalk "^1.0.0"
1827 | class-extend "^0.1.0"
1828 | cli-table "^0.3.1"
1829 | cross-spawn "^4.0.0"
1830 | dargs "^4.0.0"
1831 | dateformat "^1.0.11"
1832 | debug "^2.1.0"
1833 | detect-conflict "^1.0.0"
1834 | error "^7.0.2"
1835 | find-up "^1.0.0"
1836 | github-username "^2.0.0"
1837 | glob "^7.0.3"
1838 | gruntfile-editor "^1.0.0"
1839 | html-wiring "^1.0.0"
1840 | istextorbinary "^2.1.0"
1841 | lodash "^4.11.1"
1842 | mem-fs-editor "^2.0.0"
1843 | mkdirp "^0.5.0"
1844 | nopt "^3.0.0"
1845 | path-exists "^2.0.0"
1846 | path-is-absolute "^1.0.0"
1847 | pretty-bytes "^3.0.1"
1848 | read-chunk "^1.0.0"
1849 | read-pkg-up "^1.0.1"
1850 | rimraf "^2.2.0"
1851 | run-async "^2.0.0"
1852 | shelljs "^0.7.0"
1853 | text-table "^0.2.0"
1854 | through2 "^2.0.0"
1855 | underscore.string "^3.0.3"
1856 | user-home "^2.0.0"
1857 | yeoman-assert "^2.0.0"
1858 | yeoman-environment "^1.1.0"
1859 | yeoman-test "^1.0.0"
1860 | yeoman-welcome "^1.0.0"
1861 |
1862 | yeoman-test@^1.0.0, yeoman-test@^1.5.1:
1863 | version "1.6.0"
1864 | resolved "https://registry.yarnpkg.com/yeoman-test/-/yeoman-test-1.6.0.tgz#abff291733e16e8923d9eefc8691c632888bf948"
1865 | dependencies:
1866 | inquirer "^1.0.2"
1867 | lodash "^4.3.0"
1868 | mkdirp "^0.5.1"
1869 | pinkie-promise "^2.0.1"
1870 | rimraf "^2.4.4"
1871 | sinon "^1.17.2"
1872 | yeoman-environment "^1.5.2"
1873 | yeoman-generator "^0.24.1"
1874 |
1875 | yeoman-welcome@^1.0.0:
1876 | version "1.0.1"
1877 | resolved "https://registry.yarnpkg.com/yeoman-welcome/-/yeoman-welcome-1.0.1.tgz#f6cf198fd4fba8a771672c26cdfb8a64795c84ec"
1878 | dependencies:
1879 | chalk "^1.0.0"
1880 |
1881 | yosay@^1.2.0:
1882 | version "1.2.1"
1883 | resolved "https://registry.yarnpkg.com/yosay/-/yosay-1.2.1.tgz#9466ef969830e85b474e267b50f7688693ed3b5b"
1884 | dependencies:
1885 | ansi-regex "^2.0.0"
1886 | ansi-styles "^2.0.0"
1887 | chalk "^1.0.0"
1888 | cli-boxes "^1.0.0"
1889 | pad-component "0.0.1"
1890 | repeating "^2.0.0"
1891 | string-width "^1.0.0"
1892 | strip-ansi "^3.0.0"
1893 | taketalk "^1.0.0"
1894 | wrap-ansi "^2.0.0"
1895 |
--------------------------------------------------------------------------------