diff --git a/.babelrc b/.babelrc new file mode 100644 index 000000000..f064025a2 --- /dev/null +++ b/.babelrc @@ -0,0 +1,7 @@ +{ + "presets": [ + "es2015", + "react", + "stage-0" + ] +} diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 000000000..da79aafb1 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,34 @@ +rules: + indent: + - 2 + - tab + quotes: + - 2 + - single + linebreak-style: + - 2 + - unix + semi: + - 2 + - never + curly: + - 2 + - multi-or-nest + space-before-blocks: 2 + no-console: 1 + react/prop-types: 0 + react/display-name: 0 + +parser: babel-eslint + +env: + browser: true + commonjs: true +extends: + - eslint:recommended + - plugin:react/recommended +plugins: + - react +parserOptions: + ecmaFeatures: +jsx: true diff --git a/.gitignore b/.gitignore index 0588e6ced..1f829970b 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .tags* +node_modules/ diff --git a/DevTools.js b/DevTools.js new file mode 100644 index 000000000..81ada61ed --- /dev/null +++ b/DevTools.js @@ -0,0 +1,24 @@ +import React from 'react' + +// Exported from redux-devtools +import { createDevTools } from 'redux-devtools' + +// Monitors are separate packages, and you can make a custom one +import LogMonitor from 'redux-devtools-log-monitor' +import DockMonitor from 'redux-devtools-dock-monitor' + +// createDevTools takes a monitor and produces a DevTools component +const DevTools = createDevTools( + // Monitors are individually adjustable with props. + // Consult their repositories to learn about those props. + // Here, we put LogMonitor inside a DockMonitor. + // Note: DockMonitor is visible by default. + + + +) + +export default DevTools diff --git a/actions.js b/actions.js new file mode 100644 index 000000000..74949ba98 --- /dev/null +++ b/actions.js @@ -0,0 +1,5 @@ +export const SELECT_TAG = 'SELECT_TAG' + +export function selectTag(tagName, tagValue) { + return {type: SELECT_TAG, tagName, tagValue} +} diff --git a/containers/App.css b/containers/App.css new file mode 100644 index 000000000..25fa51c5a --- /dev/null +++ b/containers/App.css @@ -0,0 +1,2 @@ +body { +} diff --git a/containers/App.dev.js b/containers/App.dev.js new file mode 100644 index 000000000..9f901ec09 --- /dev/null +++ b/containers/App.dev.js @@ -0,0 +1,21 @@ +import React, {Component} from 'react' + +import Explorer from './Explorer' +import { Provider } from 'react-redux' +import DevTools from '../DevTools' + +import './App.css' + +export default class App extends Component { + render() { + const { store } = this.props + return ( + +
+ + +
+
+ ) + } +} diff --git a/containers/App.js b/containers/App.js new file mode 100644 index 000000000..31b7445de --- /dev/null +++ b/containers/App.js @@ -0,0 +1,4 @@ +if (process.env.NODE_ENV === 'production') + module.exports = require('./App.prod') +else + module.exports = require('./App.dev') diff --git a/containers/App.prod.js b/containers/App.prod.js new file mode 100644 index 000000000..7b1894fe6 --- /dev/null +++ b/containers/App.prod.js @@ -0,0 +1,17 @@ +import React, {Component} from 'react' + +import Explorer from './Explorer' +import { Provider } from 'react-redux' + +import './App.css' + +export default class App extends Component { + render() { + const { store } = this.props + return ( + + + + ) + } +} diff --git a/containers/Explorer.js b/containers/Explorer.js new file mode 100644 index 000000000..69309ac38 --- /dev/null +++ b/containers/Explorer.js @@ -0,0 +1,52 @@ +import React from 'react' +import parameters from '../load-parameters' +import deepAssign from 'deep-assign' + +let + groupedByVariableName = parameters + .filter(p => p && p.variable) + .reduce((acc, p) => { + let variableName = p.variable + if (acc[variableName]) + acc[variableName].push(p) + else + acc[variableName] = [p] + return acc + }, {}), + + conflictingTags = (tags1, tags2) => + Object.keys(tags1).reduce((conflicts, k) => { + if (typeof tags2[k] != 'undefined' && tags2[k] !== tags1[k]) + conflicts.push(k) + return conflicts + }, []), + + groupedMergedVariables = + Object.keys(groupedByVariableName) + .reduce((list, name) => { + let items = groupedByVariableName[name] + /* Les items sont des fragments de variables. + Les premiers fragments vont être fusionnés dans les suivants, + sauf s'il introduit un écrasement d'un tag */ + let variableList = items.slice(1).reduce((mergedItems, item) => { + let mergedItem = mergedItems.reduce((final, itemBefore) => { + let oups = conflictingTags(itemBefore.tags, item.tags) + //console.log('conflicts for ', itemBefore.tags, item.tags) + return oups.length ? item : deepAssign({}, item, itemBefore) + }, + item) + mergedItems.push(mergedItem) + return mergedItems + }, + [items[0]]) + return [...variableList, ...list] + }, []) + console.log('groupedMergedVariables', groupedMergedVariables) + + + +export default class Explorer extends React.Component { + render() { + return
{JSON.stringify(groupedMergedVariables['agff'], null, 2)}
+ } +} diff --git a/cotisations/afaire.CRDS.yaml b/cotisations/afaire.CRDS.yaml deleted file mode 100644 index e69de29bb..000000000 diff --git a/cotisations/afaire.CSG.yaml b/cotisations/afaire.CSG.yaml deleted file mode 100644 index e69de29bb..000000000 diff --git a/cotisations/afaire.gmp.yaml b/cotisations/afaire.gmp.yaml deleted file mode 100644 index c672200a2..000000000 --- a/cotisations/afaire.gmp.yaml +++ /dev/null @@ -1,4 +0,0 @@ -# Cotisation non triviale. -# C'est pas juste ça ? -si < PSS -> cotisation forfaitaire GMP -si > PSS alors le mec va payer une cotisation AGIRC, et la GMP sera le complément pour arriver à un montant total = cotisation forfaitaire GMP diff --git a/entry.js b/entry.js new file mode 100644 index 000000000..36cca79a0 --- /dev/null +++ b/entry.js @@ -0,0 +1,47 @@ +import React from 'react' +import { render } from 'react-dom' +import { compose, createStore, applyMiddleware } from 'redux' +import App from './containers/App' +import reducers from './reducers' +import DevTools from './DevTools' +import { AppContainer } from 'react-hot-loader' +import createSagaMiddleware from 'redux-saga' +import rootSaga from './sagas' + +const sagaMiddleware = createSagaMiddleware() + +const createFinalStore = compose( + // Enables your middleware: + applyMiddleware(sagaMiddleware), // any Redux middleware, e.g. redux-thunk + // Provides support for DevTools: + DevTools.instrument() +)(createStore) + + +const store = createFinalStore(reducers) +sagaMiddleware.run(rootSaga) + +let anchor = document.querySelector('#js') + +render( + + + , + anchor +) + +if (module.hot) { + module.hot.accept('./containers/App', () => { + // If you use Webpack 2 in ES modules mode, you can + // use here rather than require() a . + const NextApp = require('./containers/App').default + render( + + + , + anchor + ) + }) +} + +export {anchor} diff --git a/index.html b/index.html new file mode 100644 index 000000000..687b8fb8e --- /dev/null +++ b/index.html @@ -0,0 +1,14 @@ + + + + + + prel2 + + + + +
lOl
+ + + diff --git a/load-parameters.js b/load-parameters.js new file mode 100644 index 000000000..2133fb1fa --- /dev/null +++ b/load-parameters.js @@ -0,0 +1,6 @@ +/* Load all yaml files in a dir */ +let requireContext = require.context('./parameters/cotisations', false, /(agirc|arrco|agff).yaml$/) +export default requireContext.keys() + .map( requireContext ) + //flatten + .reduce((acc, next) => acc.concat(next), []) diff --git a/package.json b/package.json new file mode 100644 index 000000000..018f122cc --- /dev/null +++ b/package.json @@ -0,0 +1,53 @@ +{ + "name": "prel2", + "version": "0.0.1", + "license": "AGPL-3.0", + "repository": { + "type": "git", + "url": "git@github.com:laem/prel2.git" + }, + "description": "Expérimentation sur les prélèvements sociaux en code", + "engines": { + "node": ">=6.2.0" + }, + "dependencies": { + "babel-runtime": "^6.6.1", + "classnames": "^2.2.1", + "deep-assign": "^2.0.0", + "react": "^15.0.1", + "react-dom": "^15.0.1", + "react-hot-loader": "3.0.0-beta.1", + "react-redux": "^4.4.5", + "redux": "^3.5.2", + "redux-saga": "^0.10.5", + "whatwg-fetch": "^1.0.0" + }, + "devDependencies": { + "autoprefixer": "^6.3.3", + "babel-core": "^6.7.4", + "babel-eslint": "^6.0.0-beta.6", + "babel-loader": "^6.2.4", + "babel-polyfill": "^6.9.1", + "babel-preset-es2015": "^6.6.0", + "babel-preset-react": "^6.5.0", + "babel-preset-stage-0": "^6.5.0", + "core-js": "^2.2.0", + "css-loader": "^0.23.1", + "eslint": "^2.3.0", + "eslint-plugin-react": "^5.1.1", + "express": "^4.13.3", + "file-loader": "^0.8.5", + "html-loader": "^0.4.2", + "img-loader": "^1.2.2", + "json-loader": "^0.5.4", + "postcss-loader": "^0.8.0", + "redux-devtools": "^3.2.0", + "redux-devtools-dock-monitor": "^1.1.1", + "redux-devtools-log-monitor": "^1.0.9", + "style-loader": "^0.13.0", + "url-loader": "^0.5.7", + "webpack": "^1.12.14", + "webpack-dev-server": "^1.14.1", + "yaml-loader": "^0.2.0" + } +} diff --git a/cotisations/_cotisations.yaml b/parameters/cotisations/_cotisations.yaml similarity index 66% rename from cotisations/_cotisations.yaml rename to parameters/cotisations/_cotisations.yaml index a9e1f26fe..d9c32eb4d 100644 --- a/cotisations/_cotisations.yaml +++ b/parameters/cotisations/_cotisations.yaml @@ -1,7 +1,7 @@ # Les tags communs à toutes les variables de ce répertoire sont renseignés # dans ce fichier du même nom, # pour éviter de polluer les déclarations de variables. - -domaine: prélèvements sociaux -revenus: salaires -type: cotisation sociale +- + domaine: prélèvements sociaux + revenus: salaires + type: cotisation sociale diff --git a/parameters/cotisations/afaire.CRDS.yaml b/parameters/cotisations/afaire.CRDS.yaml new file mode 100644 index 000000000..792d60054 --- /dev/null +++ b/parameters/cotisations/afaire.CRDS.yaml @@ -0,0 +1 @@ +# diff --git a/parameters/cotisations/afaire.CSG.yaml b/parameters/cotisations/afaire.CSG.yaml new file mode 100644 index 000000000..792d60054 --- /dev/null +++ b/parameters/cotisations/afaire.CSG.yaml @@ -0,0 +1 @@ +# diff --git a/parameters/cotisations/afaire.gmp.yaml b/parameters/cotisations/afaire.gmp.yaml new file mode 100644 index 000000000..5863ea2df --- /dev/null +++ b/parameters/cotisations/afaire.gmp.yaml @@ -0,0 +1,4 @@ +# Cotisation non triviale. +# C'est pas juste ça ? +#si < PSS -> cotisation forfaitaire GMP +#si > PSS alors le mec va payer une cotisation AGIRC, et la GMP sera le complément pour arriver à un montant total = cotisation #forfaitaire GMP diff --git a/cotisations/agff.yaml b/parameters/cotisations/agff.yaml similarity index 91% rename from cotisations/agff.yaml rename to parameters/cotisations/agff.yaml index b58faf362..8213e8743 100644 --- a/cotisations/agff.yaml +++ b/parameters/cotisations/agff.yaml @@ -2,7 +2,7 @@ description: | Cotisation de retraite complémentaire (Cotisation pour l'Association pour la Gestion du Fonds de Financement de l’AGIRC et de l’ARRCO) - @: + tags: branche: retraite type de retraite: complémentaire destinataire: AGFF @@ -13,27 +13,10 @@ marginalRateTaxScale: base: plafond_securite_sociale -- variable: agff - ?: - categorie_salarié: privé non cadre - @: +- variable: AGFF + tags: au nom de: employeur - marginalRateTaxScale: - - threshold: 0 - rate: - values: - 2001-04-01: .008 - - threshold: 1 - rate: - values: - 2001-04-01: .009 - - threshold: 3 - rate: 0 - -- variable: agff - @: - au nom de: salarié - ?: + conditions: categorie_salarié: privé non cadre marginalRateTaxScale: @@ -48,10 +31,28 @@ - threshold: 3 rate: 0 -- variable: agff - @: +- variable: AGFF + tags: au nom de: salarié - ?: + conditions: + categorie_salarié: privé non cadre + + marginalRateTaxScale: + - threshold: 0 + rate: + values: + 2001-04-01: .008 + - threshold: 1 + rate: + values: + 2001-04-01: .009 + - threshold: 3 + rate: 0 + +- variable: AGFF + tags: + au nom de: salarié + conditions: categorie_salarié: privé cadre marginalRateTaxScale: @@ -71,10 +72,10 @@ - threshold: 8 rate: 0 -- variable: agff - @: +- variable: AGFF + tags: au nom de: employeur - ?: + conditions: categorie_salarié: privé cadre marginalRateTaxScale: diff --git a/cotisations/agirc.yaml b/parameters/cotisations/agirc.yaml similarity index 95% rename from cotisations/agirc.yaml rename to parameters/cotisations/agirc.yaml index b40573e9d..9b9b50ba8 100644 --- a/cotisations/agirc.yaml +++ b/parameters/cotisations/agirc.yaml @@ -2,12 +2,12 @@ description: | Cotisation de retraite complémentaire cadre, complémentant le régime ARRCO (pour l'Association Générale des Institutions de Retraite des Cadres) - @: + tags: branche: retraite type de retraite: complémentaire destinataire: AGIRC reference: http://www.agirc-arrco.fr/l-agirc-et-larrco/chiffres-cles - ?: + conditions: categorie_salarié: privé cadre commentaires: | Il éxiste une tranche C, de 4 à 8 fois la base, sur laquelle la répartition des cotisations est décidée au sein de l’entreprise jusqu’à 20 %. De 20 % à 20,30 %, la répartition est la suivante : 66,67 % à la charge du salarié et 33,33 % pour l’employeur. @@ -15,8 +15,8 @@ marginalRateTaxScale: base: plafond_securite_sociale -- variable: agirc - @: +- variable: AGIRC + tags: au nom de: employeur marginalRateTaxScale: - threshold: 0 @@ -38,8 +38,8 @@ - threshold: 8 rate: 0 -- variable: agirc - @: +- variable: AGIRC + tags: au nom de: salarié marginalRateTaxScale: - threshold: 0 diff --git a/cotisations/apec.yaml b/parameters/cotisations/apec.yaml similarity index 94% rename from cotisations/apec.yaml rename to parameters/cotisations/apec.yaml index 72ba4f811..fb298e63b 100644 --- a/cotisations/apec.yaml +++ b/parameters/cotisations/apec.yaml @@ -2,7 +2,7 @@ description: | Cotisation de retraite complémentaire cadre, pour le fonctionnement de l'APEC (Association Pour l’Emploi des Cadres) - @: + tags: branche: retraite type de retraite: complémentaire destinataire: APEC @@ -11,8 +11,8 @@ avertissements: | Avant 2011, il y avait une cotisation forfaitaire au lieu de la tranche A -- variable: apec - @: +- variable: APEC + tags: au nom de: employeur marginalRateTaxScale: - threshold: 0 @@ -29,8 +29,8 @@ - threshold: 4 rate: 0 -- variable: apec - @: +- variable: APEC + tags: au nom de: salarié marginalRateTaxScale: - threshold: 0 diff --git a/cotisations/arrco.yaml b/parameters/cotisations/arrco.yaml similarity index 93% rename from cotisations/arrco.yaml rename to parameters/cotisations/arrco.yaml index 0503e1efd..fa7115b45 100644 --- a/cotisations/arrco.yaml +++ b/parameters/cotisations/arrco.yaml @@ -3,7 +3,7 @@ Cotisation de retraite complémentaire pour tous les salariés du secteur privé, (pour l'Association pour le Régime de Retraite Complémentaire des salariés) reference: http://www.agirc-arrco.fr/l-agirc-et-larrco/chiffres-cles - @: + tags: branche: retraite type de retraite: complémentaire destinataire: ARRCO @@ -12,10 +12,10 @@ base: plafond_securite_sociale -- variable: arrco - @: +- variable: ARRCO + tags: au nom de: employeur - ?: + conditions: categorie_salarié: privé cadre marginalRateTaxScale: - threshold: 0 @@ -32,10 +32,10 @@ - threshold: 1 rate: 0 -- variable: arrco - @: +- variable: ARRCO + tags: au nom de: salarié - ?: + conditions: categorie_salarié: privé cadre marginalRateTaxScale: - threshold: 0 @@ -52,10 +52,10 @@ - threshold: 1 rate: 0 -- variable: arrco - @: +- variable: ARRCO + tags: au nom de: employeur - ?: + conditions: categorie_salarié: privé non cadre marginalRateTaxScale: - threshold: 0 @@ -82,9 +82,10 @@ - threshold: 3 rate: 0 - @: +- variable: ARRCO + tags: au nom de: salarié - ?: + conditions: categorie_salarié: privé non cadre marginalRateTaxScale: - threshold: 0 diff --git a/cotisations/chomage.yaml b/parameters/cotisations/chomage.yaml similarity index 94% rename from cotisations/chomage.yaml rename to parameters/cotisations/chomage.yaml index 05306ed15..29811d9d3 100644 --- a/cotisations/chomage.yaml +++ b/parameters/cotisations/chomage.yaml @@ -1,5 +1,5 @@ - variable: chomage - @: + tags: branche: chomage recouvreur: URSSAF destinataire: Pôle emploi @@ -8,7 +8,7 @@ base: assiette_cotisations_sociales - variable: chomage - @: + tags: au nom de: employeur linear: values: @@ -17,7 +17,7 @@ 1992-07-01: 0.128 - variable: chomage - @: + tags: au nom de: salarié linear: values: diff --git a/cotisations/contribution_solidarité_autonomie.yaml b/parameters/cotisations/contribution_solidarité_autonomie.yaml similarity index 96% rename from cotisations/contribution_solidarité_autonomie.yaml rename to parameters/cotisations/contribution_solidarité_autonomie.yaml index d6b52e825..ce91fd6a0 100644 --- a/cotisations/contribution_solidarité_autonomie.yaml +++ b/parameters/cotisations/contribution_solidarité_autonomie.yaml @@ -1,6 +1,6 @@ - variable: contribution solidarité autonomie abbreviation: CSA - @: + tags: au nom de: employeur contribution: oui branche: vieillesse diff --git a/cotisations/cotisation_exceptionnelle_temporaire.yaml b/parameters/cotisations/cotisation_exceptionnelle_temporaire.yaml similarity index 95% rename from cotisations/cotisation_exceptionnelle_temporaire.yaml rename to parameters/cotisations/cotisation_exceptionnelle_temporaire.yaml index 65833eff5..f29168de6 100644 --- a/cotisations/cotisation_exceptionnelle_temporaire.yaml +++ b/parameters/cotisations/cotisation_exceptionnelle_temporaire.yaml @@ -1,12 +1,12 @@ - variable: cotisation exceptionnelle temporaire - ?: + conditions: categorie salarie: prive cadre linear: base: assiette cotisations sociales limit: 8 * plafond_securite_sociale - variable: cotisation exceptionnelle temporaire - @: + tags: au nom de: employeur linear: values: @@ -18,7 +18,7 @@ 1997-01-01: .00044 - variable: cotisation exceptionnelle temporaire - @: + tags: au nom de: salarié linear: values: diff --git a/cotisations/maladie.yaml b/parameters/cotisations/maladie.yaml similarity index 95% rename from cotisations/maladie.yaml rename to parameters/cotisations/maladie.yaml index 4f0f98840..6dc31b056 100644 --- a/cotisations/maladie.yaml +++ b/parameters/cotisations/maladie.yaml @@ -1,5 +1,5 @@ - variable: maladie - @: + tags: branche: maladie plafonnée: oui linear: @@ -7,7 +7,7 @@ limit: 4 - variable: maladie - @: + tags: au nom de: employeur linear: values: @@ -25,7 +25,7 @@ 1993-07-01: 0.0483 - variable: maladie - @: + tags: au nom de: salarié linear: values: @@ -46,9 +46,9 @@ complete la variable: maladie # Ceci signifie que cette spécification ne remplace pas # la variable de base du même nom, mais s'y ajoute ! - @: + tags: au nom de: salarié - ?: + conditions: régime géographique: Alsace-Moselle linear: values: @@ -63,9 +63,9 @@ 1989-09-01: 0.75 - variable: maladie alsace moselle - @: + tags: au nom de: salarié - ?: + conditions: régime géographique: Alsace-Moselle régime: agricole linear: diff --git a/cotisations/vieillesse.yaml b/parameters/cotisations/vieillesse.yaml similarity index 96% rename from cotisations/vieillesse.yaml rename to parameters/cotisations/vieillesse.yaml index da9f5c98e..d7e1a94ce 100644 --- a/cotisations/vieillesse.yaml +++ b/parameters/cotisations/vieillesse.yaml @@ -1,5 +1,5 @@ - variable: vieillesse - @: + tags: branche: retraite type de retraite: base recouvreur: URSSAF @@ -9,7 +9,7 @@ base: assiette_cotisations_sociales - variable: vieillesse - @: + tags: au nom de: salarié plafonnée: non linear: @@ -22,7 +22,7 @@ 2004-07-01: .001 - variable: vieillesse - @: + tags: au nom de: employeur plafonnée: non linear: @@ -35,13 +35,13 @@ 1991-02-01: 0.016 - variable: vieillesse - @: + tags: plafonnée: oui linear: limit: 4 * plafond_securite_sociale - variable: vieillesse - @: + tags: au nom de: salarié plafonnée: oui linear: @@ -55,7 +55,7 @@ 1993-07-01: .0655 - variable: vieillesse - @: + tags: au nom de: employeur plafonnée: oui linear: diff --git a/reducers.js b/reducers.js new file mode 100644 index 000000000..6ae6b6dda --- /dev/null +++ b/reducers.js @@ -0,0 +1,19 @@ + +import { combineReducers } from 'redux' +import { SELECT_TAG } from './actions' + +function selectTag(state = {}, action) { + switch (action.type) { + case SELECT_TAG: + return Object.assign({}, state, { + [action.tagName]: action.tagValue + }) + default: + return state + } +} + + +export default combineReducers({ + selectTag +}) diff --git a/sagas.js b/sagas.js new file mode 100644 index 000000000..55164391f --- /dev/null +++ b/sagas.js @@ -0,0 +1,16 @@ +import { takeEvery} from 'redux-saga' +import { call, put} from 'redux-saga/effects' +import Promise from 'core-js/fn/promise' + + +function* handleSubmitStep() { + console.log('salut') +} + +function* watchSteps() { + yield* takeEvery('SUBMIT_STEP', handleSubmitStep) +} + +export default function* rootSaga() { + yield [ watchSteps() ] +} diff --git a/server.js b/server.js new file mode 100644 index 000000000..77065882e --- /dev/null +++ b/server.js @@ -0,0 +1,17 @@ +var webpack = require('webpack') +var WebpackDevServer = require('webpack-dev-server') +var config = require('./webpack.config') + +new WebpackDevServer(webpack(config), { + publicPath: config.output.publicPath, + hot: true, + historyApiFallback: true, + stats: { + colors: true + }, + noInfo: false +}).listen(3000, 'localhost', function (err) { + if (err) + console.log(err) + console.log('Bonjour ! Je vous sers sur localhost:3000') +}) diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 000000000..8a93520dc --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,53 @@ +var webpack = require('webpack'), + autoprefixer = require('autoprefixer') + +module.exports = { + devtool: 'cheap-module-source-map', + entry: [ + 'webpack-dev-server/client?http://localhost:3000/', + 'webpack/hot/only-dev-server', + 'react-hot-loader/patch', + 'babel-polyfill', + './entry.js' + ], + output: { + path: require('path').resolve('./dist/'), + filename: 'bundle.js', + publicPath: '/dist/' + }, + module: { + loaders: [ { + test: /\.css$/, + loader: 'style!css!postcss-loader' + }, { + test: /\.html$/, + loader: 'html' + }, + { + test: /\.yaml$/, + loader: 'json!yaml' + }, + { + test: /\.js$/, + exclude: /node_modules/, + loader: 'babel-loader' + }, + { + test: /\.(jpe?g|png|gif|svg)$/i, + loader: 'url?limit=10000!img?progressive=true' + } ] + }, + postcss: [ + autoprefixer({ + browsers: [ '> 1% in FR', 'not ie < 10' ] + }) + ], + plugins: [ + new webpack.HotModuleReplacementPlugin(), + new webpack.NoErrorsPlugin(), + // in order to use the fetch polyfill: + new webpack.ProvidePlugin({ + 'fetch': 'imports?this=>global!exports?global.fetch!whatwg-fetch' + }) + ] +}