webpacker 5.2.1 → 6.0.0.pre.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.eslintrc.js +1 -1
- data/.gitignore +2 -0
- data/.node-version +1 -1
- data/.rubocop.yml +11 -16
- data/CHANGELOG.md +15 -4
- data/CONTRIBUTING.md +1 -1
- data/Gemfile.lock +17 -11
- data/README.md +8 -4
- data/docs/assets.md +21 -5
- data/docs/css.md +24 -29
- data/docs/deployment.md +18 -0
- data/docs/docker.md +2 -2
- data/docs/engines.md +1 -1
- data/docs/env.md +5 -0
- data/docs/es6.md +1 -1
- data/docs/integrations.md +1 -1
- data/docs/props.md +2 -38
- data/docs/react.md +183 -0
- data/docs/testing.md +11 -0
- data/docs/typescript.md +2 -2
- data/docs/webpack-dev-server.md +17 -15
- data/docs/webpack.md +58 -107
- data/lib/install/config/webpack/base.js +3 -0
- data/lib/install/config/webpack/development.js +2 -2
- data/lib/install/config/webpack/production.js +2 -2
- data/lib/install/config/webpack/test.js +2 -2
- data/lib/install/config/webpacker.yml +8 -37
- data/lib/install/examples/{vue → vue3}/app.vue +10 -5
- data/lib/install/examples/vue3/hello_vue.js +15 -0
- data/lib/install/javascript/packs/application.css +9 -0
- data/lib/install/template.rb +33 -19
- data/lib/tasks/webpacker.rake +2 -11
- data/lib/tasks/webpacker/binstubs.rake +6 -4
- data/lib/tasks/webpacker/check_binstubs.rake +4 -4
- data/lib/tasks/webpacker/check_yarn.rake +1 -2
- data/lib/tasks/webpacker/compile.rake +4 -2
- data/lib/tasks/webpacker/info.rake +12 -10
- data/lib/tasks/webpacker/install.rake +6 -4
- data/lib/tasks/webpacker/verify_install.rake +2 -1
- data/lib/tasks/webpacker/yarn_install.rake +9 -1
- data/lib/webpacker/commands.rb +1 -1
- data/lib/webpacker/compiler.rb +7 -6
- data/lib/webpacker/configuration.rb +6 -30
- data/lib/webpacker/dev_server_runner.rb +21 -2
- data/lib/webpacker/helper.rb +22 -32
- data/lib/webpacker/manifest.rb +1 -1
- data/lib/webpacker/version.rb +1 -1
- data/lib/webpacker/webpack_runner.rb +5 -0
- data/package.json +23 -39
- data/package/__tests__/config.js +5 -37
- data/package/__tests__/development.js +9 -11
- data/package/__tests__/env.js +12 -4
- data/package/__tests__/production.js +6 -6
- data/package/__tests__/staging.js +7 -6
- data/package/__tests__/test.js +4 -5
- data/package/babel/preset-react.js +62 -0
- data/package/babel/preset.js +44 -0
- data/package/config.js +3 -11
- data/package/env.js +8 -2
- data/package/environments/__tests__/base.js +15 -47
- data/package/environments/base.js +66 -126
- data/package/environments/development.js +45 -44
- data/package/environments/production.js +69 -65
- data/package/environments/test.js +2 -2
- data/package/index.js +6 -6
- data/package/rules/babel.js +9 -7
- data/package/rules/coffee.js +6 -0
- data/package/rules/erb.js +13 -0
- data/package/rules/file.js +19 -19
- data/package/rules/index.js +24 -18
- data/package/rules/less.js +18 -0
- data/package/rules/sass.js +5 -6
- data/package/rules/svg.js +23 -0
- data/package/utils/get_style_rule.js +22 -28
- data/package/utils/helpers.js +3 -35
- data/test/compiler_test.rb +0 -12
- data/test/configuration_test.rb +1 -32
- data/test/dev_server_runner_test.rb +24 -5
- data/test/engine_rake_tasks_test.rb +39 -0
- data/test/helper_test.rb +15 -9
- data/test/mounted_app/Rakefile +4 -0
- data/test/mounted_app/test/dummy/Rakefile +3 -0
- data/test/mounted_app/test/dummy/bin/rails +3 -0
- data/test/mounted_app/test/dummy/bin/rake +3 -0
- data/test/mounted_app/test/dummy/config.ru +5 -0
- data/test/mounted_app/test/dummy/config/application.rb +10 -0
- data/test/mounted_app/test/dummy/config/environment.rb +3 -0
- data/test/mounted_app/test/dummy/config/webpacker.yml +75 -0
- data/test/mounted_app/test/dummy/package.json +7 -0
- data/test/rake_tasks_test.rb +1 -10
- data/test/test_app/config/webpacker.yml +1 -25
- data/test/test_app/config/webpacker_public_root.yml +0 -1
- data/test/test_app/public/packs/manifest.json +17 -13
- data/test/test_app/some.config.js +0 -0
- data/test/webpack_runner_test.rb +9 -3
- data/webpacker.gemspec +1 -1
- data/yarn.lock +1858 -4915
- metadata +47 -70
- data/.travis.yml +0 -43
- data/lib/install/angular.rb +0 -23
- data/lib/install/coffee.rb +0 -25
- data/lib/install/config/.browserslistrc +0 -1
- data/lib/install/config/babel.config.js +0 -70
- data/lib/install/config/postcss.config.js +0 -12
- data/lib/install/config/webpack/environment.js +0 -3
- data/lib/install/elm.rb +0 -39
- data/lib/install/erb.rb +0 -25
- data/lib/install/examples/angular/hello_angular.js +0 -7
- data/lib/install/examples/angular/hello_angular/app/app.component.ts +0 -9
- data/lib/install/examples/angular/hello_angular/app/app.module.ts +0 -16
- data/lib/install/examples/angular/hello_angular/index.ts +0 -8
- data/lib/install/examples/angular/hello_angular/polyfills.ts +0 -73
- data/lib/install/examples/coffee/hello_coffee.coffee +0 -4
- data/lib/install/examples/elm/Main.elm +0 -55
- data/lib/install/examples/elm/hello_elm.js +0 -16
- data/lib/install/examples/erb/hello_erb.js.erb +0 -6
- data/lib/install/examples/react/babel.config.js +0 -87
- data/lib/install/examples/react/hello_react.jsx +0 -26
- data/lib/install/examples/react/tsconfig.json +0 -21
- data/lib/install/examples/stimulus/application.js +0 -1
- data/lib/install/examples/stimulus/controllers/hello_controller.js +0 -18
- data/lib/install/examples/stimulus/controllers/index.js +0 -9
- data/lib/install/examples/svelte/app.svelte +0 -11
- data/lib/install/examples/svelte/hello_svelte.js +0 -20
- data/lib/install/examples/typescript/hello_typescript.ts +0 -4
- data/lib/install/examples/typescript/tsconfig.json +0 -24
- data/lib/install/examples/vue/hello_vue.js +0 -72
- data/lib/install/loaders/coffee.js +0 -6
- data/lib/install/loaders/elm.js +0 -25
- data/lib/install/loaders/erb.js +0 -11
- data/lib/install/loaders/svelte.js +0 -9
- data/lib/install/loaders/vue.js +0 -6
- data/lib/install/react.rb +0 -18
- data/lib/install/stimulus.rb +0 -12
- data/lib/install/svelte.rb +0 -29
- data/lib/install/typescript.rb +0 -39
- data/lib/install/vue.rb +0 -49
- data/lib/tasks/installers.rake +0 -42
- data/package/config_types/__tests__/config_list.js +0 -118
- data/package/config_types/__tests__/config_object.js +0 -43
- data/package/config_types/config_list.js +0 -75
- data/package/config_types/config_object.js +0 -55
- data/package/config_types/index.js +0 -7
- data/package/rules/module.css.js +0 -3
- data/package/rules/module.sass.js +0 -8
- data/package/rules/node_modules.js +0 -22
- data/package/utils/__tests__/deep_assign.js +0 -32
- data/package/utils/__tests__/deep_merge.js +0 -10
- data/package/utils/__tests__/get_style_rule.js +0 -65
- data/package/utils/__tests__/objectify.js +0 -9
- data/package/utils/deep_assign.js +0 -22
- data/package/utils/deep_merge.js +0 -22
- data/package/utils/objectify.js +0 -3
@@ -1,43 +0,0 @@
|
|
1
|
-
/* global test expect */
|
2
|
-
|
3
|
-
const ConfigObject = require('../config_object')
|
4
|
-
|
5
|
-
test('new', () => {
|
6
|
-
const object = new ConfigObject()
|
7
|
-
expect(object).toBeInstanceOf(ConfigObject)
|
8
|
-
expect(object).toBeInstanceOf(Object)
|
9
|
-
})
|
10
|
-
|
11
|
-
test('set', () => {
|
12
|
-
const object = new ConfigObject()
|
13
|
-
expect(object.set('key', 'value')).toEqual({ key: 'value' })
|
14
|
-
})
|
15
|
-
|
16
|
-
test('get', () => {
|
17
|
-
const object = new ConfigObject()
|
18
|
-
object.set('key', 'value')
|
19
|
-
object.set('key1', 'value1')
|
20
|
-
expect(object.get('key')).toEqual('value')
|
21
|
-
})
|
22
|
-
|
23
|
-
test('delete', () => {
|
24
|
-
const object = new ConfigObject()
|
25
|
-
object.set('key', { key1: 'value' })
|
26
|
-
expect(object.delete('key.key1')).toEqual({ key: {} })
|
27
|
-
expect(object.delete('key')).toEqual({})
|
28
|
-
})
|
29
|
-
|
30
|
-
test('toObject', () => {
|
31
|
-
const object = new ConfigObject()
|
32
|
-
object.set('key', 'value')
|
33
|
-
object.set('key1', 'value1')
|
34
|
-
expect(object.toObject()).toEqual({ key: 'value', key1: 'value1' })
|
35
|
-
})
|
36
|
-
|
37
|
-
test('merge', () => {
|
38
|
-
const object = new ConfigObject()
|
39
|
-
object.set('foo', {})
|
40
|
-
expect(object.merge({ key: 'foo', value: 'bar' })).toEqual(
|
41
|
-
{ foo: {}, key: 'foo', value: 'bar' }
|
42
|
-
)
|
43
|
-
})
|
@@ -1,75 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* @class
|
3
|
-
* @extends { Array }
|
4
|
-
*/
|
5
|
-
class ConfigList extends Array {
|
6
|
-
static get [Symbol.species]() { return Array }
|
7
|
-
|
8
|
-
get(key) {
|
9
|
-
const index = this.getIndex(key, true)
|
10
|
-
return this[index].value
|
11
|
-
}
|
12
|
-
|
13
|
-
append(key, value) {
|
14
|
-
return this.add({ key, value })
|
15
|
-
}
|
16
|
-
|
17
|
-
prepend(key, value) {
|
18
|
-
return this.add({ key, value }, 'prepend')
|
19
|
-
}
|
20
|
-
|
21
|
-
insert(key, value, pos = {}) {
|
22
|
-
if (!(pos.before || pos.after)) return this.append(key, value)
|
23
|
-
|
24
|
-
const currentIndex = this.getIndex(key)
|
25
|
-
if (currentIndex >= 0) this.splice(currentIndex, 1)
|
26
|
-
|
27
|
-
let newIndex = this.getIndex(pos.before || pos.after)
|
28
|
-
if (pos.after) newIndex += 1
|
29
|
-
|
30
|
-
this.splice(newIndex, 0, { key, value })
|
31
|
-
return this
|
32
|
-
}
|
33
|
-
|
34
|
-
delete(key) {
|
35
|
-
const index = this.getIndex(key, true)
|
36
|
-
this.splice(index, 1)
|
37
|
-
return this
|
38
|
-
}
|
39
|
-
|
40
|
-
getIndex(key, shouldThrow = false) {
|
41
|
-
const index = this.findIndex((entry) => (
|
42
|
-
entry === key
|
43
|
-
|| entry.key === key
|
44
|
-
|| (entry.constructor && entry.constructor.name === key)
|
45
|
-
))
|
46
|
-
|
47
|
-
if (shouldThrow && index < 0) throw new Error(`Item ${key} not found`)
|
48
|
-
return index
|
49
|
-
}
|
50
|
-
|
51
|
-
add({ key, value }, strategy = 'append') {
|
52
|
-
const index = this.getIndex(key)
|
53
|
-
if (index >= 0) this.delete(key)
|
54
|
-
|
55
|
-
switch (strategy) {
|
56
|
-
case 'prepend':
|
57
|
-
this.unshift({ key, value })
|
58
|
-
break
|
59
|
-
default:
|
60
|
-
this.push({ key, value })
|
61
|
-
}
|
62
|
-
|
63
|
-
return this
|
64
|
-
}
|
65
|
-
|
66
|
-
values() {
|
67
|
-
return this.map((item) => item.value)
|
68
|
-
}
|
69
|
-
|
70
|
-
keys() {
|
71
|
-
return this.map((item) => item.key)
|
72
|
-
}
|
73
|
-
}
|
74
|
-
|
75
|
-
module.exports = ConfigList
|
@@ -1,55 +0,0 @@
|
|
1
|
-
const objectify = require('../utils/objectify')
|
2
|
-
const deepAssign = require('../utils/deep_assign')
|
3
|
-
const deepMerge = require('../utils/deep_merge')
|
4
|
-
const { isStrPath, prettyPrint } = require('../utils/helpers')
|
5
|
-
|
6
|
-
/**
|
7
|
-
* @class
|
8
|
-
* @extends { Object }
|
9
|
-
*/
|
10
|
-
class ConfigObject extends Object {
|
11
|
-
constructor(props = {}) {
|
12
|
-
super()
|
13
|
-
this.merge(props)
|
14
|
-
}
|
15
|
-
|
16
|
-
get(key) {
|
17
|
-
return isStrPath(key) ? objectify(key, this) : this[key]
|
18
|
-
}
|
19
|
-
|
20
|
-
set(key, value) {
|
21
|
-
Object.assign(this, deepAssign(this, key, value))
|
22
|
-
return this
|
23
|
-
}
|
24
|
-
|
25
|
-
delete(key) {
|
26
|
-
let obj = this
|
27
|
-
let propKey = key
|
28
|
-
|
29
|
-
if (isStrPath(key)) {
|
30
|
-
const keys = key.split('.')
|
31
|
-
propKey = keys.pop()
|
32
|
-
const parentObjPath = keys.join('.')
|
33
|
-
obj = objectify(parentObjPath, this)
|
34
|
-
}
|
35
|
-
|
36
|
-
if (!obj) throw new Error(`Prop not found: ${key} in ${prettyPrint(obj)}`)
|
37
|
-
delete obj[propKey]
|
38
|
-
|
39
|
-
return this
|
40
|
-
}
|
41
|
-
|
42
|
-
toObject() {
|
43
|
-
const object = {}
|
44
|
-
/* eslint no-return-assign: 0 */
|
45
|
-
Object.keys(this).forEach((key) => (object[key] = this[key]))
|
46
|
-
return object
|
47
|
-
}
|
48
|
-
|
49
|
-
merge(config) {
|
50
|
-
Object.assign(this, deepMerge(this, config))
|
51
|
-
return this
|
52
|
-
}
|
53
|
-
}
|
54
|
-
|
55
|
-
module.exports = ConfigObject
|
data/package/rules/module.css.js
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
const { nodeEnv } = require('../env')
|
2
|
-
|
3
|
-
// Compile standard ES features for JS in node_modules with Babel.
|
4
|
-
// Regex details for exclude: https://regex101.com/r/SKPnnv/1
|
5
|
-
module.exports = {
|
6
|
-
test: /\.(js|mjs)$/,
|
7
|
-
include: /node_modules/,
|
8
|
-
exclude: /(?:@?babel(?:\/|\\{1,2}|-).+)|regenerator-runtime|core-js|^webpack$|^webpack-assets-manifest$|^webpack-cli$|^webpack-sources$|^@rails\/webpacker$/,
|
9
|
-
use: [
|
10
|
-
{
|
11
|
-
loader: 'babel-loader',
|
12
|
-
options: {
|
13
|
-
babelrc: false,
|
14
|
-
presets: [['@babel/preset-env', { modules: false }]],
|
15
|
-
cacheDirectory: true,
|
16
|
-
cacheCompression: nodeEnv === 'production',
|
17
|
-
compact: false,
|
18
|
-
sourceMaps: false
|
19
|
-
}
|
20
|
-
}
|
21
|
-
]
|
22
|
-
}
|
@@ -1,32 +0,0 @@
|
|
1
|
-
/* global test expect */
|
2
|
-
|
3
|
-
const deepAssign = require('../deep_assign')
|
4
|
-
|
5
|
-
describe('deepAssign()', () => {
|
6
|
-
test('deeply assigns nested properties', () => {
|
7
|
-
const object = { foo: { bar: { } } }
|
8
|
-
const path = 'foo.bar'
|
9
|
-
const value = { x: 1, y: 2 }
|
10
|
-
const expectation = { foo: { bar: { x: 1, y: 2 } } }
|
11
|
-
expect(deepAssign(object, path, value)).toEqual(expectation)
|
12
|
-
})
|
13
|
-
|
14
|
-
test('allows assignment of a literal false', () => {
|
15
|
-
const object = { foo: { bar: { } } }
|
16
|
-
const path = 'foo.bar'
|
17
|
-
const value = false
|
18
|
-
const expectation = { foo: { bar: false } }
|
19
|
-
expect(deepAssign(object, path, value)).toEqual(expectation)
|
20
|
-
})
|
21
|
-
|
22
|
-
test('does not allow assignment of other falsy values', () => {
|
23
|
-
const object = { foo: { bar: { } } }
|
24
|
-
const path = 'foo.bar'
|
25
|
-
const values = [undefined, null, 0, '']
|
26
|
-
|
27
|
-
values.forEach(value => {
|
28
|
-
const expectation = new Error(`Value can't be ${value}`)
|
29
|
-
expect(() => deepAssign(object, path, value)).toThrow(expectation)
|
30
|
-
})
|
31
|
-
})
|
32
|
-
})
|
@@ -1,10 +0,0 @@
|
|
1
|
-
/* global test expect */
|
2
|
-
|
3
|
-
const deepMerge = require('../deep_merge')
|
4
|
-
|
5
|
-
test('deep merge objects together', () => {
|
6
|
-
const object1 = { foo: { bar: [1, 2, 3], z: 1 }, x: 0 }
|
7
|
-
const object2 = { foo: { bar: ['x', 'y'] }, x: 1, y: 2 }
|
8
|
-
const expectation = { foo: { bar: [1, 2, 3, 'x', 'y'], z: 1 }, x: 1, y: 2 }
|
9
|
-
expect(deepMerge(object1, object2)).toEqual(expectation)
|
10
|
-
})
|
@@ -1,65 +0,0 @@
|
|
1
|
-
const { chdirTestApp, chdirCwd } = require('../helpers')
|
2
|
-
|
3
|
-
chdirTestApp()
|
4
|
-
|
5
|
-
const getStyleRule = require('../get_style_rule')
|
6
|
-
|
7
|
-
describe('getStyleRule', () => {
|
8
|
-
afterAll(chdirCwd)
|
9
|
-
|
10
|
-
test('excludes modules by default', () => {
|
11
|
-
const cssRule = getStyleRule(/\.(css)$/i)
|
12
|
-
const expectation = {
|
13
|
-
test: /\.(css)$/i,
|
14
|
-
exclude: /\.module\.[a-z]+$/
|
15
|
-
}
|
16
|
-
|
17
|
-
expect(cssRule).toMatchObject(expectation)
|
18
|
-
})
|
19
|
-
|
20
|
-
test('includes modules if set to true', () => {
|
21
|
-
const cssRule = getStyleRule(/\.(scss)$/i, true)
|
22
|
-
const expectation = {
|
23
|
-
test: /\.(scss)$/i,
|
24
|
-
include: /\.module\.[a-z]+$/
|
25
|
-
}
|
26
|
-
|
27
|
-
expect(cssRule).toMatchObject(expectation)
|
28
|
-
})
|
29
|
-
|
30
|
-
test('adds extra preprocessors if supplied', () => {
|
31
|
-
const expectation = [{ foo: 'bar' }]
|
32
|
-
const cssRule = getStyleRule(/\.(css)$/i, true, expectation)
|
33
|
-
|
34
|
-
expect(cssRule.use).toMatchObject(expect.arrayContaining(expectation))
|
35
|
-
})
|
36
|
-
|
37
|
-
test('adds mini-css-extract-plugin when extract_css is true', () => {
|
38
|
-
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
|
39
|
-
const expectation = [MiniCssExtractPlugin.loader]
|
40
|
-
|
41
|
-
require('../../config').extract_css = true
|
42
|
-
const cssRule = getStyleRule(/\.(css)$/i)
|
43
|
-
|
44
|
-
expect(cssRule.use).toMatchObject(expect.arrayContaining(expectation))
|
45
|
-
})
|
46
|
-
|
47
|
-
test('adds style-loader when extract_css is true', () => {
|
48
|
-
const expectation = [{loader: 'style-loader'}]
|
49
|
-
|
50
|
-
require('../../config').extract_css = false
|
51
|
-
const cssRule = getStyleRule(/\.(css)$/i)
|
52
|
-
|
53
|
-
expect(cssRule.use).toMatchObject(expect.objectContaining(expectation))
|
54
|
-
})
|
55
|
-
|
56
|
-
test(`doesn't add mini-css-extract-plugin when extract_css is false`, () => {
|
57
|
-
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
|
58
|
-
const expectation = [MiniCssExtractPlugin.loader]
|
59
|
-
|
60
|
-
require('../../config').extract_css = false
|
61
|
-
const cssRule = getStyleRule(/\.(css)$/i)
|
62
|
-
|
63
|
-
expect(cssRule.use).toMatchObject(expect.not.arrayContaining(expectation))
|
64
|
-
})
|
65
|
-
})
|
@@ -1,9 +0,0 @@
|
|
1
|
-
/* global test expect */
|
2
|
-
|
3
|
-
const objectify = require('../objectify')
|
4
|
-
|
5
|
-
test('Get object from a string path', () => {
|
6
|
-
const object = { foo: { bar: { x: 1 } } }
|
7
|
-
expect(objectify('foo.bar', object)).toEqual({ x: 1 })
|
8
|
-
expect(objectify('some.bar', object)).toEqual(undefined)
|
9
|
-
})
|
@@ -1,22 +0,0 @@
|
|
1
|
-
const { canMerge, prettyPrint } = require('./helpers')
|
2
|
-
const deepMerge = require('./deep_merge')
|
3
|
-
|
4
|
-
const deepAssign = (obj, path, value) => {
|
5
|
-
if (!value && value !== false) throw new Error(`Value can't be ${value}`)
|
6
|
-
|
7
|
-
const keys = path.split('.')
|
8
|
-
const key = keys.pop()
|
9
|
-
|
10
|
-
const objRef = keys.reduce((acc, currentValue) => {
|
11
|
-
/* eslint no-param-reassign: 0 */
|
12
|
-
if (!acc[currentValue]) acc[currentValue] = {}
|
13
|
-
return acc[currentValue]
|
14
|
-
}, obj)
|
15
|
-
|
16
|
-
if (!objRef) throw new Error(`Prop not found: ${path} in ${prettyPrint(obj)}`)
|
17
|
-
|
18
|
-
objRef[key] = canMerge(value) ? deepMerge(objRef[key], value) : value
|
19
|
-
return obj
|
20
|
-
}
|
21
|
-
|
22
|
-
module.exports = deepAssign
|
data/package/utils/deep_merge.js
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
const {
|
2
|
-
isObject, isArray, isEqual, isEmpty
|
3
|
-
} = require('./helpers')
|
4
|
-
|
5
|
-
const deepMerge = (target, source) => {
|
6
|
-
if (isEmpty(target)) return source
|
7
|
-
if (isEmpty(source)) return target
|
8
|
-
if (isEqual(target, source)) return source
|
9
|
-
if (isArray(target) && isArray(source)) return [...new Set([...target, ...source])]
|
10
|
-
if (!(isObject(target) && isObject(source))) return source
|
11
|
-
|
12
|
-
return [...Object.keys(target), ...Object.keys(source)].reduce(
|
13
|
-
(result, key) => ({
|
14
|
-
|
15
|
-
...result,
|
16
|
-
[key]: deepMerge(target[key], source[key])
|
17
|
-
}),
|
18
|
-
{}
|
19
|
-
)
|
20
|
-
}
|
21
|
-
|
22
|
-
module.exports = deepMerge
|
data/package/utils/objectify.js
DELETED