webpacker 5.1.0 → 6.0.0.beta.1
Sign up to get free protection for your applications and to get access to all the features.
- 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 +42 -2
- data/CONTRIBUTING.md +1 -1
- data/Gemfile.lock +91 -85
- data/README.md +226 -113
- 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 -38
- 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 +20 -8
- data/lib/webpacker/configuration.rb +7 -23
- data/lib/webpacker/dev_server_runner.rb +23 -4
- data/lib/webpacker/helper.rb +51 -42
- data/lib/webpacker/manifest.rb +1 -1
- 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__/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/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 +19 -10
- data/package/rules/coffee.js +6 -0
- data/package/rules/erb.js +15 -0
- data/package/rules/file.js +17 -18
- data/package/rules/index.js +16 -18
- data/package/rules/less.js +22 -0
- data/package/rules/raw.js +5 -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/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 +50 -89
- 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 -63
- 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 -136
- data/docs/troubleshooting.md +0 -156
- data/docs/typescript.md +0 -109
- 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 -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/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/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 -42
- 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,42 +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 "Adding TypeScript preset to babel.config.js"
|
19
|
-
insert_into_file Rails.root.join("babel.config.js").to_s,
|
20
|
-
",\n ['@babel/preset-typescript', { 'allExtensions': true, 'isTSX': true }]",
|
21
|
-
before: /\s*\].filter\(Boolean\),\n\s*plugins: \[/
|
22
|
-
|
23
|
-
say "Copying tsconfig.json to the Rails root directory for typescript"
|
24
|
-
copy_file "#{__dir__}/examples/#{example_source}/tsconfig.json", "tsconfig.json"
|
25
|
-
|
26
|
-
say "Updating webpack paths to include .ts file extension"
|
27
|
-
insert_into_file Webpacker.config.config_path, "- .ts\n".indent(4), after: /\s+extensions:\n/
|
28
|
-
|
29
|
-
say "Updating webpack paths to include .tsx file extension"
|
30
|
-
insert_into_file Webpacker.config.config_path, "- .tsx\n".indent(4), after: /\s+extensions:\n/
|
31
|
-
|
32
|
-
say "Copying the example entry file to #{Webpacker.config.source_entry_path}"
|
33
|
-
copy_file "#{__dir__}/examples/typescript/hello_typescript.ts",
|
34
|
-
"#{Webpacker.config.source_entry_path}/hello_typescript.ts"
|
35
|
-
|
36
|
-
say "Installing all typescript dependencies"
|
37
|
-
run "yarn add typescript #{additional_packages}"
|
38
|
-
|
39
|
-
say "Installing all typescript dev-dependencies"
|
40
|
-
run "yarn add @babel/preset-typescript babel-preset-typescript-vue -D"
|
41
|
-
|
42
|
-
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