k_director 0.8.1 → 0.10.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5784bc2f8f9ea89bac4e9d195ed607c1785d1f92281ff7ed553f9edf47d5c29f
4
- data.tar.gz: cf9f19744ba09d4ef876a4114e4a4d52161d7355255c8393c726f78295ad44a5
3
+ metadata.gz: '080f78bce274be30bf0b77765c7fe6b40c56a9a5f40b385dd55ed96cd81b440b'
4
+ data.tar.gz: 7f12eeaf1ccdac94be739700260e30282766f85f9d4fad8f6e9cb81bd47359f0
5
5
  SHA512:
6
- metadata.gz: b5ae842246267f476569e932922db59431a4e5af70c164968a51e12447ab34ef0300aca3f9b2cf0fbb1574ca98c14a8ad857978e7ca672a9bfe38c3d1a55c91c
7
- data.tar.gz: 9b10d1b7ab087e22656a486439cf2c71cf7d9b8d93c3de87e6d3df49b71ad1156a90eb605f8dbe93246a83e3faea722572f64cb4e7bb6ceb30867736529485ab
6
+ metadata.gz: 20fb925316d432b16e5ac5b5074f5e2d86845225262dae2460962b51199555d757e889a8a3fdd62b86dab2f60b7f35c5892a875b530369b9d83268e52d657be2
7
+ data.tar.gz: 2e5d5485a94a94cbfa2a86110e7bea1a5af50b32febc51830d935b5e4592ddc1bcd9d4424044acbb3d0ec0b606197e1c674bac57e43ccd5386a70bd1a0663272
data/.builders/boot.rb CHANGED
@@ -40,10 +40,10 @@ def dasherize
40
40
  end
41
41
 
42
42
  def k_builder
43
- @k_builder ||= KBuilder::BaseBuilder.init(KBuilder.configuration(CONFIG_KEY))
43
+ @k_builder ||= KBuilder::BaseBuilder.init(KConfig.configuration(CONFIG_KEY))
44
44
  end
45
45
 
46
- KBuilder.configure(CONFIG_KEY) do |config|
46
+ KConfig.configure(CONFIG_KEY) do |config|
47
47
  builder_folder = Dir.pwd
48
48
  base_folder = File.expand_path('../', builder_folder)
49
49
  global_template = File.expand_path('~/dev/kgems/k_templates/templates')
@@ -58,7 +58,7 @@ KBuilder.configure(CONFIG_KEY) do |config|
58
58
  # config.target_folders.add(:database , :data, 'database')
59
59
  end
60
60
 
61
- KBuilder.configuration(CONFIG_KEY).debug
61
+ KConfig.configuration(CONFIG_KEY).debug
62
62
 
63
63
  area = KManager.add_area(CONFIG_KEY)
64
64
  resource_manager = area.resource_manager
@@ -0,0 +1,5 @@
1
+ {
2
+ "cSpell.words": [
3
+ "postcss"
4
+ ]
5
+ }
data/docs/CHANGELOG.md CHANGED
@@ -1,3 +1,37 @@
1
+ ## [0.10.1](https://github.com/klueless-io/k_director/compare/v0.10.0...v0.10.1) (2022-02-06)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * package_json, add set by group, remove and re ove by group ([93317f8](https://github.com/klueless-io/k_director/commit/93317f8b590ac2551e72072e93ca9b7f0d54f568))
7
+
8
+ # [0.10.0](https://github.com/klueless-io/k_director/compare/v0.9.0...v0.10.0) (2022-02-06)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * package_json set key converted to string and stripped ([784b33d](https://github.com/klueless-io/k_director/commit/784b33db2a045e8273e4e5a30747f0b05cc50cfd))
14
+
15
+
16
+ ### Features
17
+
18
+ * add package_json dsl support to nuxt3 and rubygem ([9b4650d](https://github.com/klueless-io/k_director/commit/9b4650d48deaeb158ef25300b12f9de5725bf2c0))
19
+ * add sort package json keys to package_json dsl ([90e2041](https://github.com/klueless-io/k_director/commit/90e2041759714faa1333c51226102e7ab8041a0a))
20
+
21
+ # [0.9.0](https://github.com/klueless-io/k_director/compare/v0.8.1...v0.9.0) (2022-02-05)
22
+
23
+
24
+ ### Features
25
+
26
+ * add package_json dsl support ([15b3ad7](https://github.com/klueless-io/k_director/commit/15b3ad7472a3374e646c391a7271fb7782636afe))
27
+
28
+ ## [0.8.1](https://github.com/klueless-io/k_director/compare/v0.8.0...v0.8.1) (2022-02-05)
29
+
30
+
31
+ ### Bug Fixes
32
+
33
+ * add tests for package_json configuration ([d900065](https://github.com/klueless-io/k_director/commit/d900065bf810771841b97de03dfa9011c48c8e43))
34
+
1
35
  # [0.8.0](https://github.com/klueless-io/k_director/compare/v0.7.3...v0.8.0) (2022-02-04)
2
36
 
3
37
 
@@ -59,6 +59,10 @@ module KDirector
59
59
  }.merge(opts)
60
60
  end
61
61
 
62
+ def configuration
63
+ k_builder.configuration
64
+ end
65
+
62
66
  def director_name
63
67
  @options.director_name
64
68
  end
@@ -17,14 +17,6 @@ module KDirector
17
17
 
18
18
  set_package_file('package.json')
19
19
  set_dependency_type(:development)
20
-
21
- # defaults = {
22
- # repo_name: opts[:repo_name], # || parent.builder.dom&[:PackageJson]&[:repo_name]
23
- # username: opts[:username] || default_PackageJson_username, # || parent.builder.dom&[:PackageJson]&[:username]
24
- # organization: opts[:organization] # || parent.builder.dom&[:PackageJson]&[:organization]
25
- # }
26
-
27
- # parent.builder.group_set(:PackageJson, **repo_info_hash(**defaults))
28
20
  end
29
21
 
30
22
  # ----------------------------------------------------------------------
@@ -44,6 +36,304 @@ module KDirector
44
36
 
45
37
  self
46
38
  end
39
+
40
+ # Init an NPN package
41
+ #
42
+ # run npm init -y
43
+ #
44
+ # Note: npm init does not support --silent operation
45
+ def npm_init
46
+ run_command 'npm init -y'
47
+
48
+ load
49
+
50
+ self
51
+ end
52
+
53
+ # Space separated list of packages
54
+ def npm_install(packages, options: nil)
55
+ npm_add_or_install(packages, parse_options(options))
56
+
57
+ self
58
+ end
59
+ alias npm_i npm_install
60
+
61
+ def npm_add(packages, options: nil)
62
+ npm_add_or_install(packages, parse_options(options, '--package-lock-only --no-package-lock'))
63
+
64
+ self
65
+ end
66
+ alias npm_a npm_add
67
+
68
+ def npm_add_group(key, options: nil)
69
+ group = get_group(key)
70
+
71
+ puts "Adding #{group.description}"
72
+
73
+ npm_add(group.package_names, options: options)
74
+
75
+ self
76
+ end
77
+ alias npm_ag npm_add_group
78
+
79
+ # Add a group of NPN packages which get defined in configuration
80
+ def npm_install_group(key, options: nil)
81
+ group = get_group(key)
82
+
83
+ puts "Installing #{group.description}"
84
+
85
+ npm_install(group.package_names, options: options)
86
+
87
+ self
88
+ end
89
+
90
+ # Load the existing package.json into memory
91
+ #
92
+ # ToDo: Would be useful to record the update timestamp on the package
93
+ # so that we only load if the in memory package is not the latest.
94
+ #
95
+ # The reason this can happen, is because external tools such are
96
+ # npm install are updating the package.json and after this happens
97
+ # we need to call load, but if there is any bug in the code we may
98
+ # for get to load, or we may load multiple times.
99
+ def load
100
+ raise KDirector::Error, 'package.json does not exist' unless File.exist?(package_file)
101
+
102
+ # puts 'loading...'
103
+
104
+ content = File.read(package_file)
105
+ @package = JSON.parse(content)
106
+
107
+ self
108
+ end
109
+
110
+ # Write the package.json file
111
+ def write
112
+ # puts 'writing...'
113
+
114
+ content = JSON.pretty_generate(@package)
115
+
116
+ File.write(package_file, content)
117
+
118
+ self
119
+ end
120
+
121
+ # Remove a script reference by key
122
+ def remove_script(key)
123
+ remove(key, group: 'scripts')
124
+ # load
125
+
126
+ # @package['scripts']&.delete(key)
127
+
128
+ # write
129
+
130
+ self
131
+ end
132
+
133
+ # Add a script with key and value (command line to run)
134
+ def add_script(key, value)
135
+ set(key, value, group: 'scripts')
136
+
137
+ self
138
+ end
139
+
140
+ # ----------------------------------------------------------------------
141
+ # Attributes: Think getter/setter
142
+ #
143
+ # The following getter/setters can be referenced both inside and outside
144
+ # of the fluent builder fluent API. They do not implement the fluent
145
+ # interface unless prefixed by set_.
146
+ #
147
+ # set_: Only setters with the prefix _set are considered fluent.
148
+ # ----------------------------------------------------------------------
149
+
150
+ # Package
151
+ # ----------------------------------------------------------------------
152
+
153
+ # Load the package.json into a memory as object
154
+ def package
155
+ return @package if defined? @package
156
+
157
+ load
158
+
159
+ @package
160
+ end
161
+
162
+ # Package.set
163
+ # ----------------------------------------------------------------------
164
+
165
+ # Set a property value in the package
166
+ def set(key, value, group: nil)
167
+ load
168
+
169
+ key = key.to_s.strip
170
+
171
+ if group.nil?
172
+ @package[key] = value
173
+ else
174
+ group = group.to_s.strip
175
+ @package[group] = {} unless @package[group]
176
+ @package[group][key] = value
177
+ end
178
+
179
+ write
180
+
181
+ self
182
+ end
183
+
184
+ def remove(key, group: nil)
185
+ load
186
+
187
+ key = key.to_s.strip
188
+
189
+ if group.nil?
190
+ @package.delete(key)
191
+ else
192
+ group = group.to_s.strip
193
+ @package[group]&.delete(key)
194
+ end
195
+
196
+ @package['scripts']&.delete(key)
197
+
198
+ write
199
+
200
+ self
201
+ end
202
+
203
+ # Package.sort using `npx sort-package-json`
204
+ # ----------------------------------------------------------------------
205
+
206
+ # Sort the package.json keys using `npx sort-package-json`
207
+ def sort
208
+ run_command 'npx sort-package-json'
209
+
210
+ load
211
+
212
+ self
213
+ end
214
+
215
+ # Dependency option
216
+ # ----------------------------------------------------------------------
217
+
218
+ # Getter for dependency option
219
+ def dependency_option
220
+ dependency_type == :development ? '-D' : '-P'
221
+ end
222
+
223
+ # Dependency type
224
+ # ----------------------------------------------------------------------
225
+
226
+ # Fluent setter for target folder
227
+ # rubocop:disable Naming/AccessorMethodName
228
+ def set_dependency_type(value)
229
+ self.dependency_type = value
230
+
231
+ self
232
+ end
233
+ # rubocop:enable Naming/AccessorMethodName
234
+
235
+ # Package file
236
+ # ----------------------------------------------------------------------
237
+
238
+ # Fluent setter for package file
239
+ # rubocop:disable Naming/AccessorMethodName
240
+ def set_package_file(value)
241
+ self.package_file = value
242
+
243
+ self
244
+ end
245
+ # rubocop:enable Naming/AccessorMethodName
246
+
247
+ # Setter for package file
248
+ def package_file=(_value)
249
+ @package_file = File.join(k_builder.target_folder, 'package.json')
250
+ end
251
+
252
+ # Remove package-lock.json
253
+ # ----------------------------------------------------------------------
254
+
255
+ def remove_package_lock
256
+ file = File.join(k_builder.target_folder, 'package-lock.json')
257
+
258
+ File.delete(file) if File.exist?(file)
259
+
260
+ self
261
+ end
262
+
263
+ # Remove yarn.lock
264
+ # ----------------------------------------------------------------------
265
+
266
+ def remove_yarn_lock
267
+ file = File.join(k_builder.target_folder, 'yarn.lock')
268
+
269
+ File.delete(file) if File.exist?(file)
270
+
271
+ self
272
+ end
273
+
274
+ # Create yarn.lock
275
+ # ----------------------------------------------------------------------
276
+
277
+ def create_yarn_lock
278
+ run_command 'yarn install --check-files'
279
+
280
+ self
281
+ end
282
+
283
+ # -----------------------------------
284
+ # Helpers
285
+ # -----------------------------------
286
+
287
+ def parse_options(options = nil, required_options = nil)
288
+ options = [] if options.nil?
289
+ options = options.split if options.is_a?(String)
290
+ options.reject(&:empty?)
291
+
292
+ required_options = [] if required_options.nil?
293
+ required_options = required_options.split if required_options.is_a?(String)
294
+
295
+ options | required_options
296
+ end
297
+
298
+ def options_any?(options, *any_options)
299
+ (options & any_options).any?
300
+ end
301
+
302
+ def execute(command)
303
+ puts "RUN: #{command}"
304
+ run_command command
305
+ load
306
+ end
307
+
308
+ def npm_add_or_install(packages, options)
309
+ # if -P or -D is not in the options then use the current builder dependency option
310
+ options.push dependency_option unless options_any?(options, '-P', '-D')
311
+ packages = packages.join(' ') if packages.is_a?(Array)
312
+ command = "npm install #{options.join(' ')} #{packages}"
313
+ execute command
314
+ end
315
+
316
+ # # Debug method to open the package file in vscode
317
+ # # ToDo: Maybe remove
318
+ # def vscode
319
+ # puts "cd #{output_path}"
320
+ # puts package_file
321
+ # run_command "code #{package_file}"
322
+ # end
323
+
324
+ private
325
+
326
+ def get_group(key)
327
+ group = configuration.package_json.package_groups[key]
328
+
329
+ raise KConfig::PackageJson::Error, "unknown package group: #{key}" if group.nil?
330
+
331
+ group
332
+ end
333
+
334
+ def run_command(command)
335
+ parent.k_builder.run_command(command)
336
+ end
47
337
  end
48
338
  end
49
339
  end
@@ -37,11 +37,35 @@ module KDirector
37
37
 
38
38
  # Setup the default package groups
39
39
  def set_default_package_groups
40
- set_package_group('webpack' , 'Webpack V5', %w[webpack webpack-cli webpack-dev-server])
41
- set_package_group('swc' , 'SWC Transpiler', %w[@swc/cli @swc/core swc-loader])
42
- set_package_group('babel' , 'Babel Transpiler', %w[@babel/core @babel/cli @babel/preset-env babel-loader])
43
- set_package_group('typescript' , 'Typescript', %w[typescript ts-loader])
44
- set_package_group('semantic-release', 'Semantic Release', %w[semantic-release github:klueless-js/semantic-release-rubygem @semantic-release/changelog @semantic-release/git])
40
+ set_package_group('webpack' , 'Webpack V5' , %w[webpack webpack-cli webpack-dev-server])
41
+ set_package_group('swc' , 'SWC Transpiler' , %w[@swc/cli @swc/core swc-loader])
42
+ set_package_group('babel' , 'Babel Transpiler' , %w[@babel/core @babel/cli @babel/preset-env babel-loader])
43
+ set_package_group('typescript' , 'Typescript' , %w[typescript ts-loader])
44
+ set_package_group('semver-ruby' , 'Semantic Release for Ruby' , %w[semantic-release github:klueless-js/semantic-release-rubygem @semantic-release/changelog @semantic-release/git])
45
+
46
+ set_package_group('semver-nuxt' , 'Semantic Release for Nuxt' , %w[
47
+ semantic-release
48
+ @semantic-release/changelog
49
+ @semantic-release/git
50
+ ])
51
+
52
+ set_package_group('tailwind-nuxt' , 'TailwindCSS for Nuxt' , %w[
53
+ tailwindcss@latest
54
+ postcss@latest
55
+ autoprefixer@latest
56
+ ])
57
+
58
+ # this does not work yet
59
+ set_package_group('storybook-nuxt' , 'Storybook for (Vite/Nuxt)' , %w[
60
+ @storybook/vue3@6.4.18
61
+ @storybook/addon-postcss@2.0.0
62
+ @storybook/addon-storysource@6.4.18
63
+ storybook-builder-vite
64
+ ])
65
+
66
+ # Currently these two need to be foreced
67
+ # @storybook/addon-docs@6.4.18
68
+ # @storybook/addon-essentials@6.4.18
45
69
  end
46
70
 
47
71
  def debug
@@ -10,14 +10,21 @@ module KDirector
10
10
 
11
11
  def github(**opts, &block)
12
12
  github = KDirector::Dsls::Children::Github.new(self, **opts)
13
- github.instance_eval(&block)
13
+ github.instance_eval(&block) if block_given?
14
+
15
+ self
16
+ end
17
+
18
+ def package_json(**opts, &block)
19
+ package_json = KDirector::Dsls::Children::PackageJson.new(self, **opts)
20
+ package_json.instance_eval(&block) if block_given?
14
21
 
15
22
  self
16
23
  end
17
24
 
18
25
  def blueprint(**opts, &block)
19
26
  blueprint = KDirector::Dsls::Children::Blueprint.new(self, **opts)
20
- blueprint.instance_eval(&block)
27
+ blueprint.instance_eval(&block) if block_given?
21
28
 
22
29
  self
23
30
  end
@@ -15,6 +15,13 @@ module KDirector
15
15
  self
16
16
  end
17
17
 
18
+ def package_json(**opts, &block)
19
+ package_json = KDirector::Dsls::Children::PackageJson.new(self, **opts)
20
+ package_json.instance_eval(&block) if block_given?
21
+
22
+ self
23
+ end
24
+
18
25
  def blueprint(**opts, &block)
19
26
  blueprint = KDirector::Dsls::Children::Blueprint.new(self, **opts)
20
27
  blueprint.instance_eval(&block) if block_given?
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KDirector
4
- VERSION = '0.8.1'
4
+ VERSION = '0.10.2'
5
5
  end
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "k_director",
3
- "version": "0.8.1",
3
+ "version": "0.10.2",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "k_director",
9
- "version": "0.8.1",
9
+ "version": "0.10.2",
10
10
  "devDependencies": {
11
11
  "@klueless-js/semantic-release-rubygem": "github:klueless-js/semantic-release-rubygem",
12
12
  "@semantic-release/changelog": "^6.0.1",
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "k_director",
3
- "version": "0.8.1",
3
+ "version": "0.10.2",
4
4
  "description": "Command line and CI/CD tools for k_director",
5
5
  "scripts": {
6
6
  "release": "semantic-release"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: k_director
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.10.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Cruwys
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-02-05 00:00:00.000000000 Z
11
+ date: 2022-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: k_config
@@ -100,6 +100,7 @@ files:
100
100
  - ".releaserc.json"
101
101
  - ".rspec"
102
102
  - ".rubocop.yml"
103
+ - ".vscode/settings.json"
103
104
  - Gemfile
104
105
  - Guardfile
105
106
  - README.md