openc3 5.15.1 → 5.16.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of openc3 might be problematic. Click here for more details.

Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/Rakefile +1 -0
  4. data/bin/openc3cli +20 -0
  5. data/bin/pipinstall +3 -0
  6. data/data/config/interface_modifiers.yaml +4 -1
  7. data/data/config/telemetry_modifiers.yaml +6 -1
  8. data/data/config/widgets.yaml +1 -1
  9. data/ext/openc3/ext/burst_protocol/burst_protocol.c +317 -0
  10. data/ext/openc3/ext/burst_protocol/extconf.rb +13 -0
  11. data/lib/openc3/accessors/accessor.rb +1 -1
  12. data/lib/openc3/accessors/json_accessor.rb +11 -3
  13. data/lib/openc3/api/tlm_api.rb +1 -1
  14. data/lib/openc3/interfaces/http_client_interface.rb +8 -4
  15. data/lib/openc3/interfaces/http_server_interface.rb +22 -6
  16. data/lib/openc3/interfaces/interface.rb +6 -0
  17. data/lib/openc3/interfaces/linc_interface.rb +5 -3
  18. data/lib/openc3/interfaces/mqtt_interface.rb +7 -3
  19. data/lib/openc3/interfaces/mqtt_stream_interface.rb +8 -1
  20. data/lib/openc3/interfaces/protocols/burst_protocol.rb +104 -100
  21. data/lib/openc3/interfaces/protocols/fixed_protocol.rb +11 -3
  22. data/lib/openc3/interfaces/serial_interface.rb +16 -1
  23. data/lib/openc3/interfaces/simulated_target_interface.rb +7 -3
  24. data/lib/openc3/interfaces/tcpip_client_interface.rb +18 -1
  25. data/lib/openc3/interfaces/tcpip_server_interface.rb +24 -15
  26. data/lib/openc3/interfaces/udp_interface.rb +11 -1
  27. data/lib/openc3/io/posix_serial_driver.rb +20 -5
  28. data/lib/openc3/logs/packet_log_writer.rb +1 -1
  29. data/lib/openc3/microservices/decom_microservice.rb +3 -2
  30. data/lib/openc3/microservices/interface_microservice.rb +5 -5
  31. data/lib/openc3/models/activity_model.rb +104 -40
  32. data/lib/openc3/models/gem_model.rb +1 -1
  33. data/lib/openc3/models/plugin_model.rb +5 -3
  34. data/lib/openc3/models/python_package_model.rb +15 -5
  35. data/lib/openc3/models/scope_model.rb +1 -1
  36. data/lib/openc3/models/target_model.rb +1 -1
  37. data/lib/openc3/packets/packet.rb +27 -24
  38. data/lib/openc3/packets/packet_config.rb +18 -1
  39. data/lib/openc3/packets/parsers/packet_item_parser.rb +10 -6
  40. data/lib/openc3/packets/structure.rb +7 -7
  41. data/lib/openc3/packets/structure_item.rb +4 -2
  42. data/lib/openc3/script/api_shared.rb +33 -29
  43. data/lib/openc3/script/plugins.rb +13 -13
  44. data/lib/openc3/script/storage.rb +3 -4
  45. data/lib/openc3/script/web_socket_api.rb +10 -0
  46. data/lib/openc3/version.rb +6 -6
  47. data/templates/target/targets/TARGET/lib/target.py +2 -0
  48. data/templates/tool_angular/package.json +8 -8
  49. data/templates/tool_react/package.json +2 -2
  50. data/templates/tool_svelte/build/smui.css +1 -5
  51. data/templates/tool_svelte/package.json +3 -3
  52. data/templates/tool_vue/package.json +12 -12
  53. data/templates/widget/package.json +11 -11
  54. metadata +21 -18
@@ -14,7 +14,7 @@
14
14
  # GNU Affero General Public License for more details.
15
15
 
16
16
  # Modified by OpenC3, Inc.
17
- # All changes Copyright 2022, OpenC3, Inc.
17
+ # All changes Copyright 2024, OpenC3, Inc.
18
18
  # All Rights Reserved
19
19
  #
20
20
  # This file may also be used under the terms of a commercial license
@@ -106,7 +106,7 @@ module OpenC3
106
106
  # @param buffer [String] The binary buffer to read the item from
107
107
  # @return Value based on the item definition. This could be a string, integer,
108
108
  # float, or array of values.
109
- def read_item(item, value_type = :RAW, buffer = @buffer)
109
+ def read_item(item, _value_type = :RAW, buffer = @buffer)
110
110
  buffer = allocate_buffer_if_needed() unless buffer
111
111
  return @accessor.read_item(item, buffer)
112
112
  end
@@ -139,10 +139,10 @@ module OpenC3
139
139
  # @param accessor [Accessor] The class to use as an accessor
140
140
  def accessor=(accessor)
141
141
  @accessor = accessor
142
- if @accessor.enforce_short_buffer_allowed
142
+ # Check for Accessor because sometimes we use PythonProxy
143
+ if @accessor.is_a? Accessor and @accessor.enforce_short_buffer_allowed
143
144
  @short_buffer_allowed = true
144
145
  end
145
- return accessor
146
146
  end
147
147
 
148
148
  # Read a list of items in the structure
@@ -152,7 +152,7 @@ module OpenC3
152
152
  # parameter to check whether to perform conversions on the item.
153
153
  # @param buffer [String] The binary buffer to read the item from
154
154
  # @return Hash of read names and values
155
- def read_items(items, value_type = :RAW, buffer = @buffer)
155
+ def read_items(items, _value_type = :RAW, buffer = @buffer)
156
156
  buffer = allocate_buffer_if_needed() unless buffer
157
157
  return @accessor.read_items(items, buffer)
158
158
  end
@@ -367,7 +367,7 @@ module OpenC3
367
367
  # @param value_type [Symbol] Not used. Subclasses should overload this
368
368
  # parameter to check whether to perform conversions on the item.
369
369
  # @param buffer [String] The binary buffer to write the value to
370
- def write_item(item, value, value_type = :RAW, buffer = @buffer)
370
+ def write_item(item, value, _value_type = :RAW, buffer = @buffer)
371
371
  buffer = allocate_buffer_if_needed() unless buffer
372
372
  return @accessor.write_item(item, value, buffer)
373
373
  end
@@ -379,7 +379,7 @@ module OpenC3
379
379
  # @param value_type [Symbol] Not used. Subclasses should overload this
380
380
  # parameter to check whether to perform conversions on the item.
381
381
  # @param buffer [String] The binary buffer to write the values to
382
- def write_items(items, values, value_type = :RAW, buffer = @buffer)
382
+ def write_items(items, values, _value_type = :RAW, buffer = @buffer)
383
383
  buffer = allocate_buffer_if_needed() unless buffer
384
384
  return @accessor.write_items(items, values, buffer)
385
385
  end
@@ -30,8 +30,8 @@ module OpenC3
30
30
 
31
31
  @@create_index = 0
32
32
 
33
- # Valid data types adds :DERIVED to those defined by BinaryAccessor
34
- DATA_TYPES = BinaryAccessor::DATA_TYPES << :DERIVED
33
+ # Valid data types adds :DERIVED, :ARRAY, :OBJECT to those defined by BinaryAccessor
34
+ DATA_TYPES = BinaryAccessor::DATA_TYPES << :DERIVED << :ARRAY << :OBJECT
35
35
 
36
36
  # Name is used by higher level classes to access the StructureItem.
37
37
  # @return [String] Name of the item
@@ -54,6 +54,8 @@ module OpenC3
54
54
  # numbers (Ruby Float). :STRING is turned into an ASCII string (Ruby
55
55
  # String). :BLOCK is turned into a binary buffer (Ruby String). :DERIVED is
56
56
  # interpreted by the subclass and can result in any type.
57
+ # :ARRAY is an array of unknown types
58
+ # :OBJECT is a Hash type object
57
59
  # @return [Symbol] {DATA_TYPES}
58
60
  attr_reader :data_type
59
61
 
@@ -68,8 +68,8 @@ module OpenC3
68
68
  method = "#{method_name}(#{args.join(", ")}"
69
69
  method += ", #{orig_kwargs}" unless orig_kwargs.empty?
70
70
  method += ")"
71
- rescue Exception => error
72
- puts "CHECK: #{method} raised #{error.class}:#{error.message}"
71
+ rescue Exception => e
72
+ puts "CHECK: #{method} raised #{e.class}:#{e.message}"
73
73
  else
74
74
  raise(CheckError, "#{method} should have raised an exception but did not.")
75
75
  end
@@ -172,6 +172,7 @@ module OpenC3
172
172
  openc3_script_sleep()
173
173
  time_diff = Time.now.sys - start_time
174
174
  puts "WAIT: Indefinite for actual time of #{time_diff} seconds" unless quiet
175
+ return time_diff
175
176
 
176
177
  # wait(5) # absolute wait time
177
178
  when 1
@@ -180,6 +181,7 @@ module OpenC3
180
181
  openc3_script_sleep(args[0])
181
182
  time_diff = Time.now.sys - start_time
182
183
  puts "WAIT: #{args[0]} seconds with actual time of #{time_diff} seconds" unless quiet
184
+ return time_diff
183
185
  else
184
186
  raise "Non-numeric wait time specified"
185
187
  end
@@ -193,7 +195,7 @@ module OpenC3
193
195
  else
194
196
  polling_rate = DEFAULT_TLM_POLLING_RATE
195
197
  end
196
- _execute_wait(target_name, packet_name, item_name, type, comparison_to_eval, timeout, polling_rate, quiet: quiet, scope: scope, token: token)
198
+ return _execute_wait(target_name, packet_name, item_name, type, comparison_to_eval, timeout, polling_rate, quiet: quiet, scope: scope, token: token)
197
199
 
198
200
  # wait('target_name', 'packet_name', 'item_name', comparison_to_eval, timeout, polling_rate) # polling_rate is optional
199
201
  when 5, 6
@@ -207,13 +209,12 @@ module OpenC3
207
209
  else
208
210
  polling_rate = DEFAULT_TLM_POLLING_RATE
209
211
  end
210
- _execute_wait(target_name, packet_name, item_name, type, comparison_to_eval, timeout, polling_rate, quiet: quiet, scope: scope, token: token)
212
+ return _execute_wait(target_name, packet_name, item_name, type, comparison_to_eval, timeout, polling_rate, quiet: quiet, scope: scope, token: token)
211
213
 
212
214
  else
213
215
  # Invalid number of arguments
214
216
  raise "ERROR: Invalid number of arguments (#{args.length}) passed to wait()"
215
217
  end
216
- time_diff
217
218
  end
218
219
 
219
220
  # @deprecated Use wait with type: :RAW
@@ -270,7 +271,7 @@ module OpenC3
270
271
  puts "WARN: #{wait_str} failed to be within #{range_str}" unless quiet
271
272
  end
272
273
  end
273
- time
274
+ return success
274
275
  end
275
276
 
276
277
  # @deprecated Use wait_tolerance with type: :RAW
@@ -288,7 +289,7 @@ module OpenC3
288
289
  else
289
290
  puts "WARN: WAIT: #{exp_to_eval} is FALSE after waiting #{time_diff} seconds" unless quiet
290
291
  end
291
- time_diff
292
+ return success
292
293
  end
293
294
 
294
295
  # Wait for the converted value of a telmetry item against a condition or for a timeout
@@ -321,7 +322,7 @@ module OpenC3
321
322
  raise CheckError, message
322
323
  end
323
324
  end
324
- time_diff
325
+ return time_diff
325
326
  end
326
327
 
327
328
  # @deprecated use wait_check with type: :RAW
@@ -388,7 +389,7 @@ module OpenC3
388
389
  end
389
390
  end
390
391
  end
391
- time_diff
392
+ return time_diff
392
393
  end
393
394
 
394
395
  # @deprecated Use wait_check_tolerance with type: :RAW
@@ -418,7 +419,7 @@ module OpenC3
418
419
  raise CheckError, message
419
420
  end
420
421
  end
421
- time_diff
422
+ return time_diff
422
423
  end
423
424
  alias wait_expression_stop_on_timeout wait_check_expression
424
425
 
@@ -429,7 +430,8 @@ module OpenC3
429
430
  polling_rate = DEFAULT_TLM_POLLING_RATE,
430
431
  quiet: false,
431
432
  scope: $openc3_scope, token: $openc3_token)
432
- _wait_packet(false, target_name, packet_name, num_packets, timeout, polling_rate, quiet: quiet, scope: scope, token: token)
433
+ success, _ = _wait_packet(false, target_name, packet_name, num_packets, timeout, polling_rate, quiet: quiet, scope: scope, token: token)
434
+ return success
433
435
  end
434
436
 
435
437
  # Wait for a telemetry packet to be received a certain number of times or timeout and raise an error
@@ -440,7 +442,8 @@ module OpenC3
440
442
  polling_rate = DEFAULT_TLM_POLLING_RATE,
441
443
  quiet: false,
442
444
  scope: $openc3_scope, token: $openc3_token)
443
- _wait_packet(true, target_name, packet_name, num_packets, timeout, polling_rate, quiet: quiet, scope: scope, token: token)
445
+ _, time_diff = _wait_packet(true, target_name, packet_name, num_packets, timeout, polling_rate, quiet: quiet, scope: scope, token: token)
446
+ return time_diff
444
447
  end
445
448
 
446
449
  def disable_instrumentation
@@ -491,8 +494,8 @@ module OpenC3
491
494
  cached = false
492
495
  begin
493
496
  Kernel::load(procedure_name)
494
- rescue LoadError => error
495
- raise LoadError, "Error loading -- #{procedure_name}\n#{error.message}"
497
+ rescue LoadError => e
498
+ raise LoadError, "Error loading -- #{procedure_name}\n#{e.message}"
496
499
  end
497
500
  # Return whether we had to load and instrument this file, i.e. it was not cached
498
501
  !cached
@@ -645,7 +648,7 @@ module OpenC3
645
648
  puts "WARN: #{message}" unless quiet
646
649
  end
647
650
  end
648
- time_diff
651
+ return success, time_diff
649
652
  end
650
653
 
651
654
  def _execute_wait(target_name, packet_name, item_name, value_type, comparison_to_eval, timeout, polling_rate, quiet: false, scope: $openc3_scope, token: $openc3_token)
@@ -660,6 +663,7 @@ module OpenC3
660
663
  else
661
664
  puts "WARN: #{wait_str} failed #{value_str}" unless quiet
662
665
  end
666
+ return success
663
667
  end
664
668
 
665
669
  def _wait_tolerance_process_args(args)
@@ -805,13 +809,13 @@ module OpenC3
805
809
  end
806
810
 
807
811
  return false, value
808
- rescue NameError => error
809
- if error.message =~ /uninitialized constant OpenC3::ApiShared::(\w+)/
812
+ rescue NameError => e
813
+ if e.message =~ /uninitialized constant OpenC3::ApiShared::(\w+)/
810
814
  new_error = NameError.new("Uninitialized constant #{$1}. Did you mean '#{$1}' as a string?")
811
- new_error.set_backtrace(error.backtrace)
815
+ new_error.set_backtrace(e.backtrace)
812
816
  raise new_error
813
817
  else
814
- raise error
818
+ raise e
815
819
  end
816
820
  end
817
821
 
@@ -860,19 +864,19 @@ module OpenC3
860
864
  if eval(exp_to_eval, context)
861
865
  return true
862
866
  else
863
- return nil
867
+ return false
864
868
  end
865
869
  end
866
870
  end
867
871
 
868
- return nil
869
- rescue NameError => error
870
- if error.message =~ /uninitialized constant OpenC3::ApiShared::(\w+)/
872
+ return false
873
+ rescue NameError => e
874
+ if e.message =~ /uninitialized constant OpenC3::ApiShared::(\w+)/
871
875
  new_error = NameError.new("Uninitialized constant #{$1}. Did you mean '#{$1}' as a string?")
872
- new_error.set_backtrace(error.backtrace)
876
+ new_error.set_backtrace(e.backtrace)
873
877
  raise new_error
874
878
  else
875
- raise error
879
+ raise e
876
880
  end
877
881
  end
878
882
 
@@ -893,13 +897,13 @@ module OpenC3
893
897
  raise CheckError, message
894
898
  end
895
899
  end
896
- rescue NameError => error
897
- if error.message =~ /uninitialized constant OpenC3::ApiShared::(\w+)/
900
+ rescue NameError => e
901
+ if e.message =~ /uninitialized constant OpenC3::ApiShared::(\w+)/
898
902
  new_error = NameError.new("Uninitialized constant #{$1}. Did you mean '#{$1}' as a string?")
899
- new_error.set_backtrace(error.backtrace)
903
+ new_error.set_backtrace(e.backtrace)
900
904
  raise new_error
901
905
  else
902
- raise error
906
+ raise e
903
907
  end
904
908
  end
905
909
  end
@@ -1,6 +1,6 @@
1
1
  # encoding: ascii-8bit
2
2
 
3
- # Copyright 2023 OpenC3, Inc.
3
+ # Copyright 2024 OpenC3, Inc.
4
4
  # All Rights Reserved.
5
5
  #
6
6
  # This program is free software; you can modify and/or redistribute it
@@ -38,8 +38,8 @@ module OpenC3
38
38
  return JSON.parse(response.body, allow_nan: true, create_additions: true)
39
39
  end
40
40
  end
41
- rescue => error
42
- raise "get_plugin_list failed due to #{error.formatted}\nResponse:\n#{response_body}"
41
+ rescue => e
42
+ raise "get_plugin_list failed due to #{e.formatted}\nURI:#{uri}\nResponse:\n#{response_body}"
43
43
  end
44
44
  end
45
45
 
@@ -61,8 +61,8 @@ module OpenC3
61
61
  return JSON.parse(response.body, allow_nan: true, create_additions: true)
62
62
  end
63
63
  end
64
- rescue => error
65
- raise "get_plugin failed due to #{error.formatted}\nResponse:\n#{response_body}"
64
+ rescue => e
65
+ raise "get_plugin failed due to #{e.formatted}\nURI:#{uri}\nResponse:\n#{response_body}"
66
66
  end
67
67
  end
68
68
 
@@ -95,8 +95,8 @@ module OpenC3
95
95
  end
96
96
  end
97
97
  end
98
- rescue => error
99
- raise "plugin_install_phase1 failed due to #{error.formatted}\nResponse:\n#{response_body}"
98
+ rescue => e
99
+ raise "plugin_install_phase1 failed due to #{e.formatted}\nURI:#{uri}\nResponse:\n#{response_body}"
100
100
  end
101
101
  end
102
102
 
@@ -129,8 +129,8 @@ module OpenC3
129
129
  return response_body.remove_quotes
130
130
  end
131
131
  end
132
- rescue => error
133
- raise "plugin_install_phase2 failed due to #{error.formatted}\nResponse:\n#{response_body}"
132
+ rescue => e
133
+ raise "plugin_install_phase2 failed due to #{e.formatted}\nURI:#{uri}\nResponse:\n#{response_body}"
134
134
  end
135
135
  end
136
136
 
@@ -154,8 +154,8 @@ module OpenC3
154
154
  return response_body.remove_quotes
155
155
  end
156
156
  end
157
- rescue => error
158
- raise "plugin_uninstall failed due to #{error.formatted}\nResponse:\n#{response_body}"
157
+ rescue => e
158
+ raise "plugin_uninstall failed due to #{e.formatted}\nURI:#{uri}\nResponse:\n#{response_body}"
159
159
  end
160
160
  end
161
161
 
@@ -177,8 +177,8 @@ module OpenC3
177
177
  return JSON.parse(response.body, allow_nan: true, create_additions: true)
178
178
  end
179
179
  end
180
- rescue => error
181
- raise "plugin_status failed due to #{error.formatted}\nResponse:\n#{response_body}"
180
+ rescue => e
181
+ raise "plugin_status failed due to #{e.formatted}\nURI:#{uri}\nResponse:\n#{response_body}"
182
182
  end
183
183
  end
184
184
 
@@ -14,7 +14,7 @@
14
14
  # GNU Affero General Public License for more details.
15
15
 
16
16
  # Modified by OpenC3, Inc.
17
- # All changes Copyright 2022, OpenC3, Inc.
17
+ # All changes Copyright 2024, OpenC3, Inc.
18
18
  # All Rights Reserved
19
19
  #
20
20
  # This file may also be used under the terms of a commercial license
@@ -175,9 +175,8 @@ module OpenC3
175
175
  if $openc3_in_cluster
176
176
  case ENV['OPENC3_CLOUD']
177
177
  when 'local'
178
- bucket_url = ENV["OPENC3_BUCKET_URL"] || "openc3-minio:9000"
179
- # TODO: Bucket schema for http vs https
180
- URI.parse("http://#{bucket_url}#{url}")
178
+ bucket_url = ENV["OPENC3_BUCKET_URL"] || "http://openc3-minio:9000"
179
+ URI.parse("#{bucket_url}#{url}")
181
180
  when 'aws'
182
181
  URI.parse("https://s3.#{ENV['AWS_REGION']}.amazonaws.com" + url)
183
182
  when 'gcp'
@@ -215,6 +215,16 @@ module OpenC3
215
215
  end
216
216
  end
217
217
 
218
+ # All Scripts WebSocket
219
+ class AllScriptsWebSocketApi < ScriptWebSocketApi
220
+ def initialize(url: nil, write_timeout: 10.0, read_timeout: 10.0, connect_timeout: 5.0, authentication: nil, scope: $openc3_scope)
221
+ @identifier = {
222
+ channel: "AllScriptsChannel",
223
+ }
224
+ super(url: url, write_timeout: write_timeout, read_timeout: read_timeout, connect_timeout: connect_timeout, authentication: authentication, scope: scope)
225
+ end
226
+ end
227
+
218
228
  # Log Messages WebSocket
219
229
  class MessagesWebSocketApi < CmdTlmWebSocketApi
220
230
  def initialize(history_count: 0, start_time: nil, end_time: nil, level: nil, types: nil, url: nil, write_timeout: 10.0, read_timeout: 10.0, connect_timeout: 5.0, authentication: nil, scope: $openc3_scope)
@@ -1,14 +1,14 @@
1
1
  # encoding: ascii-8bit
2
2
 
3
- OPENC3_VERSION = '5.15.1'
3
+ OPENC3_VERSION = '5.16.0'
4
4
  module OpenC3
5
5
  module Version
6
6
  MAJOR = '5'
7
- MINOR = '15'
8
- PATCH = '1'
7
+ MINOR = '16'
8
+ PATCH = '0'
9
9
  OTHER = ''
10
- BUILD = 'e825c03f698ac51170218e43cec3c3cecefe58fa'
10
+ BUILD = 'bbe7a70f0e976ed4ecb939a83633e4dee9a094bd'
11
11
  end
12
- VERSION = '5.15.1'
13
- GEM_VERSION = '5.15.1'
12
+ VERSION = '5.16.0'
13
+ GEM_VERSION = '5.16.0'
14
14
  end
@@ -4,6 +4,8 @@
4
4
  # <%= target_object %>.utility()
5
5
  # For more information see the OpenC3 scripting guide
6
6
 
7
+ from openc3.script import *
8
+
7
9
  class <%= target_class %>:
8
10
  def utility(self):
9
11
  pass
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "<%= tool_name %>",
3
- "version": "5.15.1",
3
+ "version": "5.16.0",
4
4
  "scripts": {
5
5
  "ng": "ng",
6
6
  "start": "ng serve",
@@ -12,18 +12,18 @@
12
12
  },
13
13
  "private": true,
14
14
  "dependencies": {
15
- "@openc3/tool-common": "5.15.1",
15
+ "@openc3/tool-common": "5.16.0",
16
16
  "@angular/animations": "^17.0.8",
17
17
  "@angular/cdk": "^17.0.4",
18
18
  "@angular/common": "^17.0.8",
19
19
  "@angular/compiler": "^17.0.8",
20
20
  "@angular/core": "^17.0.8",
21
21
  "@angular/forms": "^17.0.8",
22
- "@angular/material": "17.0.4",
22
+ "@angular/material": "17.3.6",
23
23
  "@angular/platform-browser": "^17.0.8",
24
24
  "@angular/platform-browser-dynamic": "^17.0.8",
25
25
  "@angular/router": "^17.0.8",
26
- "@astrouxds/astro-web-components": "7.20.0",
26
+ "@astrouxds/astro-web-components": "7.22.0",
27
27
  "rxjs": "~7.8.0",
28
28
  "single-spa": "5.9.5",
29
29
  "single-spa-angular": "^9.0.1",
@@ -31,9 +31,9 @@
31
31
  "zone.js": "~0.14.3"
32
32
  },
33
33
  "devDependencies": {
34
- "@angular-builders/custom-webpack": "17.0.0",
34
+ "@angular-builders/custom-webpack": "17.0.2",
35
35
  "@angular-devkit/build-angular": "^17.0.6",
36
- "@angular/cli": "~17.0.6",
36
+ "@angular/cli": "~17.3.6",
37
37
  "@angular/compiler-cli": "^17.0.6",
38
38
  "@types/jasmine": "~5.1.4",
39
39
  "jasmine-core": "~5.1.1",
@@ -42,7 +42,7 @@
42
42
  "karma-coverage": "~2.2.0",
43
43
  "karma-jasmine": "~5.1.0",
44
44
  "karma-jasmine-html-reporter": "~2.1.0",
45
- "style-loader": "^3.3.1",
46
- "typescript": "~5.3.3"
45
+ "style-loader": "^4.0.0",
46
+ "typescript": "~5.4.5"
47
47
  }
48
48
  }
@@ -41,11 +41,11 @@
41
41
  "jest": "^29.7.0",
42
42
  "jest-cli": "^29.7.0",
43
43
  "prettier": "^3.1.1",
44
- "pretty-quick": "^3.1.1",
44
+ "pretty-quick": "^4.0.0",
45
45
  "webpack": "^5.89.0",
46
46
  "webpack-cli": "^5.1.4",
47
47
  "webpack-config-single-spa-react": "^4.0.5",
48
- "webpack-dev-server": "^4.0.0",
48
+ "webpack-dev-server": "^5.0.4",
49
49
  "webpack-merge": "^5.10.0"
50
50
  }
51
51
  }