webpacker 5.0.1 → 6.0.0.beta
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 +8 -8
- data/.github/workflows/jest.yml +38 -0
- data/.github/workflows/js-lint.yml +39 -0
- data/.github/workflows/rubocop.yml +39 -0
- data/.github/workflows/ruby.yml +70 -0
- data/.gitignore +2 -0
- data/.node-version +1 -1
- data/.rubocop.yml +11 -16
- data/6_0_upgrade.md +43 -0
- data/CHANGELOG.md +49 -3
- data/CONTRIBUTING.md +1 -1
- data/Gemfile.lock +91 -85
- data/README.md +233 -133
- 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 +9 -42
- data/lib/install/javascript/packs/application.css +9 -0
- data/lib/install/javascript/packs/application.js +3 -1
- 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_node.rake +1 -1
- data/lib/tasks/webpacker/check_yarn.rake +2 -3
- 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 +22 -11
- data/lib/webpacker/configuration.rb +7 -27
- data/lib/webpacker/dev_server_proxy.rb +3 -1
- data/lib/webpacker/dev_server_runner.rb +23 -4
- data/lib/webpacker/helper.rb +55 -46
- data/lib/webpacker/manifest.rb +1 -1
- data/lib/webpacker/railtie.rb +0 -43
- data/lib/webpacker/runner.rb +1 -0
- data/lib/webpacker/version.rb +1 -1
- data/lib/webpacker/webpack_runner.rb +7 -2
- data/package.json +27 -43
- data/package/__tests__/config.js +6 -27
- data/package/__tests__/dev_server.js +2 -0
- data/package/__tests__/development.js +18 -7
- 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.js +55 -0
- data/package/config.js +4 -9
- data/package/configPath.js +3 -0
- data/package/dev_server.js +1 -1
- data/package/env.js +9 -4
- data/package/environments/__tests__/base.js +21 -36
- data/package/environments/base.js +63 -127
- data/package/environments/development.js +46 -39
- data/package/environments/production.js +63 -70
- data/package/environments/test.js +2 -2
- data/package/index.js +13 -8
- data/package/rules/babel.js +20 -11
- data/package/rules/coffee.js +6 -0
- data/package/rules/erb.js +15 -0
- data/package/rules/file.js +19 -18
- data/package/rules/index.js +15 -18
- data/package/rules/less.js +22 -0
- data/package/rules/sass.js +13 -10
- data/package/rules/svg.js +20 -0
- data/package/utils/get_style_rule.js +26 -36
- data/package/utils/helpers.js +26 -35
- data/test/compiler_test.rb +4 -11
- data/test/configuration_test.rb +2 -32
- data/test/dev_server_runner_test.rb +25 -6
- data/test/engine_rake_tasks_test.rb +39 -0
- data/test/helper_test.rb +18 -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/application.rb +0 -1
- data/test/test_app/config/webpacker.yml +3 -21
- data/test/test_app/config/webpacker_public_root.yml +0 -1
- data/test/test_app/public/packs/manifest.json +18 -13
- data/test/test_app/some.config.js +0 -0
- data/test/webpack_runner_test.rb +10 -4
- data/webpacker.gemspec +1 -1
- data/yarn.lock +2657 -6224
- metadata +49 -90
- data/.travis.yml +0 -43
- data/docs/assets.md +0 -119
- data/docs/cloud9.md +0 -310
- data/docs/css.md +0 -253
- data/docs/deployment.md +0 -130
- data/docs/docker.md +0 -68
- data/docs/engines.md +0 -213
- data/docs/env.md +0 -65
- data/docs/es6.md +0 -72
- data/docs/folder-structure.md +0 -66
- data/docs/integrations.md +0 -220
- data/docs/misc.md +0 -23
- data/docs/props.md +0 -223
- data/docs/testing.md +0 -137
- data/docs/troubleshooting.md +0 -156
- data/docs/typescript.md +0 -125
- data/docs/v4-upgrade.md +0 -142
- data/docs/webpack-dev-server.md +0 -92
- data/docs/webpack.md +0 -364
- data/docs/yarn.md +0 -23
- 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 -72
- 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 -20
- 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 -23
- data/lib/install/examples/vue/app.vue +0 -22
- 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/typescript.js +0 -11
- 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 -46
- 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 -24
- 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
data/lib/install/typescript.rb
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
require "webpacker/configuration"
|
|
2
|
-
|
|
3
|
-
additional_packages = ""
|
|
4
|
-
example_source = "typescript"
|
|
5
|
-
|
|
6
|
-
# Additional configuration is required for React projects
|
|
7
|
-
package_json = Rails.root.join("package.json")
|
|
8
|
-
if File.exist?(package_json)
|
|
9
|
-
package = JSON.parse(File.read(package_json))
|
|
10
|
-
package["dependencies"] ||= {}
|
|
11
|
-
|
|
12
|
-
if package["dependencies"].keys.include?("react")
|
|
13
|
-
additional_packages = "@types/react @types/react-dom"
|
|
14
|
-
example_source = "react"
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
say "Copying typescript loader to config/webpack/loaders"
|
|
19
|
-
copy_file "#{__dir__}/loaders/typescript.js", Rails.root.join("config/webpack/loaders/typescript.js").to_s
|
|
20
|
-
|
|
21
|
-
say "Adding typescript loader to config/webpack/environment.js"
|
|
22
|
-
insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
|
|
23
|
-
"const typescript = require('./loaders/typescript')\n",
|
|
24
|
-
after: /require\(('|")@rails\/webpacker\1\);?\n/
|
|
25
|
-
|
|
26
|
-
insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
|
|
27
|
-
"environment.loaders.prepend('typescript', typescript)\n",
|
|
28
|
-
before: "module.exports"
|
|
29
|
-
|
|
30
|
-
say "Copying tsconfig.json to the Rails root directory for typescript"
|
|
31
|
-
copy_file "#{__dir__}/examples/#{example_source}/tsconfig.json", "tsconfig.json"
|
|
32
|
-
|
|
33
|
-
say "Updating webpack paths to include .ts file extension"
|
|
34
|
-
insert_into_file Webpacker.config.config_path, "- .ts\n".indent(4), after: /\s+extensions:\n/
|
|
35
|
-
|
|
36
|
-
say "Updating webpack paths to include .tsx file extension"
|
|
37
|
-
insert_into_file Webpacker.config.config_path, "- .tsx\n".indent(4), after: /\s+extensions:\n/
|
|
38
|
-
|
|
39
|
-
say "Copying the example entry file to #{Webpacker.config.source_entry_path}"
|
|
40
|
-
copy_file "#{__dir__}/examples/typescript/hello_typescript.ts",
|
|
41
|
-
"#{Webpacker.config.source_entry_path}/hello_typescript.ts"
|
|
42
|
-
|
|
43
|
-
say "Installing all typescript dependencies"
|
|
44
|
-
run "yarn add typescript ts-loader #{additional_packages}"
|
|
45
|
-
|
|
46
|
-
say "Webpacker now supports typescript 🎉", :green
|
data/lib/install/vue.rb
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
require "webpacker/configuration"
|
|
2
|
-
|
|
3
|
-
say "Copying vue loader to config/webpack/loaders"
|
|
4
|
-
copy_file "#{__dir__}/loaders/vue.js", Rails.root.join("config/webpack/loaders/vue.js").to_s
|
|
5
|
-
|
|
6
|
-
say "Adding vue loader plugin to config/webpack/environment.js"
|
|
7
|
-
insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
|
|
8
|
-
"const { VueLoaderPlugin } = require('vue-loader')\n",
|
|
9
|
-
after: /require\(('|")@rails\/webpacker\1\);?\n/
|
|
10
|
-
|
|
11
|
-
insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
|
|
12
|
-
"environment.plugins.prepend('VueLoaderPlugin', new VueLoaderPlugin())\n",
|
|
13
|
-
before: "module.exports"
|
|
14
|
-
|
|
15
|
-
say "Adding vue loader to config/webpack/environment.js"
|
|
16
|
-
insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
|
|
17
|
-
"const vue = require('./loaders/vue')\n",
|
|
18
|
-
after: "require('vue-loader')\n"
|
|
19
|
-
|
|
20
|
-
insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
|
|
21
|
-
"environment.loaders.prepend('vue', vue)\n",
|
|
22
|
-
before: "module.exports"
|
|
23
|
-
|
|
24
|
-
say "Updating webpack paths to include .vue file extension"
|
|
25
|
-
insert_into_file Webpacker.config.config_path, "- .vue\n".indent(4), after: /\s+extensions:\n/
|
|
26
|
-
|
|
27
|
-
say "Copying the example entry file to #{Webpacker.config.source_entry_path}"
|
|
28
|
-
copy_file "#{__dir__}/examples/vue/hello_vue.js",
|
|
29
|
-
"#{Webpacker.config.source_entry_path}/hello_vue.js"
|
|
30
|
-
|
|
31
|
-
say "Copying Vue app file to #{Webpacker.config.source_entry_path}"
|
|
32
|
-
copy_file "#{__dir__}/examples/vue/app.vue",
|
|
33
|
-
"#{Webpacker.config.source_path}/app.vue"
|
|
34
|
-
|
|
35
|
-
say "Installing all Vue dependencies"
|
|
36
|
-
run "yarn add vue vue-loader vue-template-compiler"
|
|
37
|
-
|
|
38
|
-
if Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR > 1
|
|
39
|
-
say "You need to enable unsafe-eval rule.", :yellow
|
|
40
|
-
say "This can be done in Rails 5.2+ for development environment in the CSP initializer", :yellow
|
|
41
|
-
say "config/initializers/content_security_policy.rb with a snippet like this:", :yellow
|
|
42
|
-
say "if Rails.env.development?", :yellow
|
|
43
|
-
say " policy.script_src :self, :https, :unsafe_eval", :yellow
|
|
44
|
-
say "else", :yellow
|
|
45
|
-
say " policy.script_src :self, :https", :yellow
|
|
46
|
-
say "end", :yellow
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
say "Webpacker now supports Vue.js 🎉", :green
|
data/lib/tasks/installers.rake
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
installers = {
|
|
2
|
-
"Angular": :angular,
|
|
3
|
-
"Elm": :elm,
|
|
4
|
-
"React": :react,
|
|
5
|
-
"Vue": :vue,
|
|
6
|
-
"Erb": :erb,
|
|
7
|
-
"Coffee": :coffee,
|
|
8
|
-
"Typescript": :typescript,
|
|
9
|
-
"Svelte": :svelte,
|
|
10
|
-
"Stimulus": :stimulus
|
|
11
|
-
}.freeze
|
|
12
|
-
|
|
13
|
-
dependencies = {
|
|
14
|
-
"Angular": [:typescript]
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
bin_path = ENV["BUNDLE_BIN"] || "./bin"
|
|
18
|
-
|
|
19
|
-
namespace :webpacker do
|
|
20
|
-
namespace :install do
|
|
21
|
-
installers.each do |name, task_name|
|
|
22
|
-
desc "Install everything needed for #{name}"
|
|
23
|
-
task task_name => ["webpacker:verify_install"] do
|
|
24
|
-
template = File.expand_path("../install/#{task_name}.rb", __dir__)
|
|
25
|
-
base_path =
|
|
26
|
-
if Rails::VERSION::MAJOR >= 5
|
|
27
|
-
"#{RbConfig.ruby} #{bin_path}/rails app:template"
|
|
28
|
-
else
|
|
29
|
-
"#{RbConfig.ruby} #{bin_path}/rake rails:template"
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
dependencies[name] ||= []
|
|
33
|
-
dependencies[name].each do |dependency|
|
|
34
|
-
dependency_template = File.expand_path("../install/#{dependency}.rb", __dir__)
|
|
35
|
-
system "#{base_path} LOCATION=#{dependency_template}"
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
exec "#{base_path} LOCATION=#{template}"
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
/* global test expect */
|
|
2
|
-
|
|
3
|
-
const ConfigList = require('../config_list')
|
|
4
|
-
|
|
5
|
-
test('new', () => {
|
|
6
|
-
const list = new ConfigList()
|
|
7
|
-
expect(list).toBeInstanceOf(ConfigList)
|
|
8
|
-
expect(list).toBeInstanceOf(Array)
|
|
9
|
-
})
|
|
10
|
-
|
|
11
|
-
test('get', () => {
|
|
12
|
-
const list = new ConfigList()
|
|
13
|
-
list.append('key', 'value')
|
|
14
|
-
expect(list.get('key')).toEqual('value')
|
|
15
|
-
})
|
|
16
|
-
|
|
17
|
-
test('append', () => {
|
|
18
|
-
const list = new ConfigList()
|
|
19
|
-
list.append('key', 'value')
|
|
20
|
-
expect(list.append('key1', 'value1')).toEqual([
|
|
21
|
-
{ key: 'key', value: 'value' },
|
|
22
|
-
{ key: 'key1', value: 'value1' }
|
|
23
|
-
])
|
|
24
|
-
})
|
|
25
|
-
|
|
26
|
-
test('prepend', () => {
|
|
27
|
-
const list = new ConfigList()
|
|
28
|
-
list.append('key', 'value')
|
|
29
|
-
expect(list.prepend('key1', 'value1')).toEqual([
|
|
30
|
-
{ key: 'key1', value: 'value1' },
|
|
31
|
-
{ key: 'key', value: 'value' }
|
|
32
|
-
])
|
|
33
|
-
})
|
|
34
|
-
|
|
35
|
-
test('insert without position', () => {
|
|
36
|
-
const list = new ConfigList()
|
|
37
|
-
list.append('key', 'value')
|
|
38
|
-
|
|
39
|
-
expect(list.insert('key1', 'value1')).toEqual([
|
|
40
|
-
{ key: 'key', value: 'value' },
|
|
41
|
-
{ key: 'key1', value: 'value1' }
|
|
42
|
-
])
|
|
43
|
-
|
|
44
|
-
expect(list.insert('key2', 'value2')).toEqual([
|
|
45
|
-
{ key: 'key', value: 'value' },
|
|
46
|
-
{ key: 'key1', value: 'value1' },
|
|
47
|
-
{ key: 'key2', value: 'value2' }
|
|
48
|
-
])
|
|
49
|
-
})
|
|
50
|
-
|
|
51
|
-
test('insert before an item', () => {
|
|
52
|
-
const list = new ConfigList()
|
|
53
|
-
list.append('key', 'value')
|
|
54
|
-
list.append('key1', 'value1')
|
|
55
|
-
|
|
56
|
-
expect(list.insert('key2', 'value2', { before: 'key' })).toEqual([
|
|
57
|
-
{ key: 'key2', value: 'value2' },
|
|
58
|
-
{ key: 'key', value: 'value' },
|
|
59
|
-
{ key: 'key1', value: 'value1' }
|
|
60
|
-
])
|
|
61
|
-
|
|
62
|
-
expect(list.insert('key3', 'value3', { before: 'key2' })).toEqual([
|
|
63
|
-
{ key: 'key3', value: 'value3' },
|
|
64
|
-
{ key: 'key2', value: 'value2' },
|
|
65
|
-
{ key: 'key', value: 'value' },
|
|
66
|
-
{ key: 'key1', value: 'value1' }
|
|
67
|
-
])
|
|
68
|
-
})
|
|
69
|
-
|
|
70
|
-
test('insert after an item', () => {
|
|
71
|
-
const list = new ConfigList()
|
|
72
|
-
list.append('key', 'value')
|
|
73
|
-
list.append('key1', 'value1')
|
|
74
|
-
|
|
75
|
-
expect(list.insert('key2', 'value2', { after: 'key' })).toEqual([
|
|
76
|
-
{ key: 'key', value: 'value' },
|
|
77
|
-
{ key: 'key2', value: 'value2' },
|
|
78
|
-
{ key: 'key1', value: 'value1' }
|
|
79
|
-
])
|
|
80
|
-
|
|
81
|
-
expect(list.insert('key3', 'value3', { after: 'key2' })).toEqual([
|
|
82
|
-
{ key: 'key', value: 'value' },
|
|
83
|
-
{ key: 'key2', value: 'value2' },
|
|
84
|
-
{ key: 'key3', value: 'value3' },
|
|
85
|
-
{ key: 'key1', value: 'value1' }
|
|
86
|
-
])
|
|
87
|
-
})
|
|
88
|
-
|
|
89
|
-
test('delete', () => {
|
|
90
|
-
const list = new ConfigList()
|
|
91
|
-
list.append('key', 'value')
|
|
92
|
-
list.append('key1', 'value1')
|
|
93
|
-
expect(list.delete('key')).toEqual([{ key: 'key1', value: 'value1' }])
|
|
94
|
-
expect(list.delete('key1')).toEqual([])
|
|
95
|
-
})
|
|
96
|
-
|
|
97
|
-
test('getIndex', () => {
|
|
98
|
-
const list = new ConfigList()
|
|
99
|
-
list.append('key', 'value')
|
|
100
|
-
list.append('key1', 'value1')
|
|
101
|
-
expect(list.getIndex('key')).toEqual(0)
|
|
102
|
-
expect(list.getIndex('key2')).toEqual(-1)
|
|
103
|
-
expect(() => list.getIndex('key2', true)).toThrow('Item key2 not found')
|
|
104
|
-
})
|
|
105
|
-
|
|
106
|
-
test('values', () => {
|
|
107
|
-
const list = new ConfigList()
|
|
108
|
-
list.append('key', 'value')
|
|
109
|
-
list.append('key1', 'value1')
|
|
110
|
-
expect(list.values()).toEqual(['value', 'value1'])
|
|
111
|
-
})
|
|
112
|
-
|
|
113
|
-
test('keys', () => {
|
|
114
|
-
const list = new ConfigList()
|
|
115
|
-
list.append('key', 'value')
|
|
116
|
-
list.append('key1', 'value1')
|
|
117
|
-
expect(list.keys()).toEqual(['key', 'key1'])
|
|
118
|
-
})
|
|
@@ -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