Nouvelle configuration webpack pour la librairie de calcul

publicodes
Mael 2018-10-08 15:10:39 +00:00
parent 0b52e8d230
commit 30ab11439f
7 changed files with 167 additions and 69 deletions

View File

@ -1,7 +1,7 @@
{
"name": "syso",
"license": "MIT",
"version": "0.6.2",
"version": "0.0.7",
"description": "Library to compute the french social security contributions. Also a website that explains the calculations, and a generic engine to build similar simulators and computations.",
"main": "./dist/engine.js",
"files": ["dist/engine.js"],
@ -69,7 +69,8 @@
"test-common": "mocha-webpack --webpack-config source/webpack.test.js --require source-map-support/register --include componentTestSetup.js --require mock-local-storage --require test/helpers/browser.js \"./{,!(node_modules)/**/}!(webpack).test.js\"",
"test": "yarn test-common",
"test-components": "mocha-webpack --webpack-config source/webpack.test.js --require source-map-support/register --include componentTestSetup.js --require mock-local-storage ---require test/helpers/browser.js \"source/components/**/*.test.js\" --watch",
"test-lib": "yarn test-common --grep 'library'"
"test-lib": "yarn test-common --grep 'library'",
"compile-lib": "yarn webpack --config source/webpack.lib.js"
},
"devDependencies": {
"@babel/core": "^7.1.0",
@ -115,6 +116,7 @@
"http-server": "^0.11.1",
"intl": "^1.2.5",
"intl-locales-supported": "^1.0.0",
"isomorphic-style-loader": "^4.0.0",
"js-yaml": "^3.12.0",
"jsdom": "^12.0.0",
"json-loader": "^0.5.7",
@ -132,7 +134,7 @@
"sinon": "^4.5.0",
"sinon-chai": "^3.0.0",
"source-map-support": "^0.5.4",
"style-loader": "^0.20.3",
"style-loader": "^0.23.1",
"url-loader": "^1.0.1",
"webpack": "^4.20.1",
"webpack-cli": "^3.1.1",

View File

@ -19,10 +19,10 @@ let enrichRules = input =>
(typeof input === 'string' ? yaml.safeLoad(input) : input).map(enrichRule)
export default {
evaluate: (targetInput, nestedSituation, rulesConfig) => {
let rules = rulesConfig
evaluate: (targetInput, nestedSituation, config) => {
let rules = config
? do {
let { base, extra } = rulesConfig
let { base, extra } = config
;[
...(base ? enrichRules(base) : rulesFr),
...(extra ? enrichRules(extra) : [])
@ -35,7 +35,10 @@ export default {
Array.isArray(targetInput) ? targetInput : [targetInput]
)(nestedSituationToStateSelector(rules)(nestedSituation))
if (config.debug) return evaluation
let values = evaluation.targets.map(t => t.nodeValue)
return Array.isArray(targetInput) ? values : values[0]
}
}

View File

@ -2,6 +2,7 @@
const HTMLPlugin = require('html-webpack-plugin')
const CopyPlugin = require('copy-webpack-plugin')
const path = require('path')
const { universal, web } = require('./webpack.commonLoaders.js')
module.exports = {
resolve: {
@ -21,70 +22,17 @@ module.exports = {
infrance: ['./source/sites/mycompanyinfrance.fr/entry.js'],
embauche: ['./source/sites/embauche.gouv.fr/entry.js'],
// To not introduce breaking into the iframe integration, we serve simulateur.js from a 'dist' subdirectory
'dist/simulateur': ['./source/sites/embauche.gouv.fr/iframe-script.js'],
engine: ['./source/engine/index.js']
'dist/simulateur': ['./source/sites/embauche.gouv.fr/iframe-script.js']
},
output: {
path: path.resolve('./dist/'),
filename: ({ chunk }) =>
['dist/simulateur', 'engine'].includes(chunk.name)
['dist/simulateur'].includes(chunk.name)
? '[name].js'
: '[name].[hash].js',
libraryTarget: 'umd',
library: 'Syso'
: '[name].[hash].js'
},
module: {
rules: [
{
test: /\.css$/,
use: [
{
loader: 'style-loader'
},
{
loader: 'css-loader',
options: {
sourceMap: true,
importLoaders: 1
}
},
{
loader: 'postcss-loader'
}
]
},
{
test: /\.(jpe?g|png|svg)$/,
use: {
loader: 'file-loader',
options: {
name: 'images/[name].[ext]'
}
}
},
{
test: /\.yaml$/,
loader: 'json-loader!yaml-loader'
},
{
test: /\.js$/,
exclude: /node_modules|dist/,
loader: 'babel-loader'
},
{
test: /\.csv$/,
loader: 'csv-loader',
options: {
dynamicTyping: true,
header: true,
skipEmptyLines: true
}
},
{
test: /\.ne$/,
loader: 'babel-loader!nearley-loader'
}
]
rules: [...web, ...universal]
},
plugins: [
new HTMLPlugin({

View File

@ -0,0 +1,44 @@
module.exports = {
web: [
{
test: /\.css$/,
use: [
'style-loader',
{
loader: 'css-loader',
options: {
sourceMap: true,
importLoaders: 1
}
},
{
loader: 'postcss-loader'
}
]
}
],
universal: [
{
test: /\.(jpe?g|png|svg)$/,
use: {
loader: 'file-loader',
options: {
name: 'images/[name].[ext]'
}
}
},
{
test: /\.yaml$/,
loader: 'json-loader!yaml-loader'
},
{
test: /\.js$/,
exclude: /node_modules|dist/,
loader: 'babel-loader'
},
{
test: /\.ne$/,
loader: 'babel-loader!nearley-loader'
}
]
}

38
source/webpack.lib.js Normal file
View File

@ -0,0 +1,38 @@
const common = require('./webpack.common.js')
const { universal } = require('./webpack.commonLoaders.js')
const path = require('path')
module.exports = {
resolve: common.resolve,
entry: './source/engine/index.js',
mode: 'development',
devtool: 'source-map',
output: {
path: path.resolve('./dist/'),
filename: 'engine.js',
library: 'Syso',
libraryTarget: 'umd',
globalObject: "(typeof window !== 'undefined' ? window : this)"
},
module: {
rules: [
...universal,
{
test: /\.css$/,
use: [
'isomorphic-style-loader',
{
loader: 'css-loader',
options: {
sourceMap: true,
importLoaders: 1
}
},
{
loader: 'postcss-loader'
}
]
}
]
}
}

View File

@ -75,4 +75,58 @@ describe('library', function() {
)
console.log({ revenuDisponible, dividendes })
})
it('temp', function() {
let règles = `
- nom: revenu imposable
question: Quel est votre revenu imposable ?
format: euros
- nom: revenu abattu
formule:
allègement:
assiette: revenu imposable
abattement: 10%
- nom: impôt sur le revenu
formule:
barème:
assiette: revenu abattu
tranches:
- en-dessous de: 9807
taux: 0%
- de: 9807
à: 27086
taux: 14%
- de: 27086
à: 72617
taux: 30%
- de: 72617
à: 153783
taux: 41%
- au-dessus de: 153783
taux: 45%
- nom: impôt sur le revenu à payer
formule:
allègement:
assiette: impôt sur le revenu
décote:
plafond: 1177
taux: 75%
`
let target = 'impôt sur le revenu à payer'
let value = Syso.evaluate(
target,
{ 'revenu imposable': '48000' },
{ extra: règles }
)
console.log(value)
expect(value).to.equal(7000)
})
})

View File

@ -1512,7 +1512,7 @@ babel-polyfill@^6.26.0:
core-js "^2.5.0"
regenerator-runtime "^0.10.5"
babel-runtime@6.x, babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0:
babel-runtime@6.x, babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.25.0, babel-runtime@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
dependencies:
@ -4003,7 +4003,7 @@ hoek@4.x.x:
version "4.2.1"
resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb"
hoist-non-react-statics@^2.3.1, hoist-non-react-statics@^2.5.0, hoist-non-react-statics@^2.5.4:
hoist-non-react-statics@^2.2.2, hoist-non-react-statics@^2.3.1, hoist-non-react-statics@^2.5.0, hoist-non-react-statics@^2.5.4:
version "2.5.5"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47"
@ -4593,6 +4593,15 @@ isobject@^3.0.0, isobject@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
isomorphic-style-loader@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/isomorphic-style-loader/-/isomorphic-style-loader-4.0.0.tgz#0d8faa12885e2830918c54815042c0e3b55dc38d"
dependencies:
babel-runtime "^6.25.0"
hoist-non-react-statics "^2.2.2"
loader-utils "^1.1.0"
prop-types "^15.5.10"
isstream@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
@ -7753,12 +7762,12 @@ strip-json-comments@^2.0.1, strip-json-comments@~2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
style-loader@^0.20.3:
version "0.20.3"
resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.20.3.tgz#ebef06b89dec491bcb1fdb3452e913a6fd1c10c4"
style-loader@^0.23.1:
version "0.23.1"
resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925"
dependencies:
loader-utils "^1.1.0"
schema-utils "^0.4.5"
schema-utils "^1.0.0"
supports-color@5.1.0:
version "5.1.0"