@proteinjs/reflection-build 1.4.8 → 1.4.10

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.
Files changed (42) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/modules/typescript-parser/node-parser/function-parser.js +2 -1
  3. package/dist/test/ParseTupleParams.test.d.ts +1 -0
  4. package/dist/test/ParseTupleParams.test.js +108 -0
  5. package/dist/test/ParseTupleParams.test.js.map +1 -0
  6. package/modules/typescript-parser/node-parser/function-parser.js +2 -1
  7. package/package.json +7 -5
  8. package/test/ParseTupleParams.test.ts +46 -0
  9. package/test/examples/source-repository/a/node_modules/.package-lock.json +16 -16
  10. package/test/examples/source-repository/a/node_modules/@proteinjs/reflection/package.json +2 -2
  11. package/test/examples/source-repository/a/node_modules/@proteinjs/util/package.json +2 -3
  12. package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/CHANGELOG.md +11 -0
  13. package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/dist/src/PackageUtil.d.ts +4 -1
  14. package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/dist/src/PackageUtil.js +3 -0
  15. package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/dist/src/PackageUtil.js.map +1 -1
  16. package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/package.json +3 -4
  17. package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/src/PackageUtil.ts +4 -1
  18. package/test/examples/source-repository/a/node_modules/glob-watcher/node_modules/fsevents/build/Makefile +5 -5
  19. package/test/examples/source-repository/a/node_modules/glob-watcher/node_modules/fsevents/build/gyp-mac-tool +106 -100
  20. package/test/examples/source-repository/a/package-lock.json +20 -20
  21. package/test/examples/source-repository/a/package.json +4 -4
  22. package/test/examples/source-repository/b/node_modules/.package-lock.json +12 -12
  23. package/test/examples/source-repository/b/node_modules/@proteinjs/reflection/package.json +2 -2
  24. package/test/examples/source-repository/b/node_modules/@proteinjs/util/package.json +2 -3
  25. package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/CHANGELOG.md +11 -0
  26. package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/dist/src/PackageUtil.d.ts +4 -1
  27. package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/dist/src/PackageUtil.js +3 -0
  28. package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/dist/src/PackageUtil.js.map +1 -1
  29. package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/package.json +3 -4
  30. package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/src/PackageUtil.ts +4 -1
  31. package/test/examples/source-repository/b/node_modules/glob-watcher/node_modules/fsevents/build/Makefile +5 -5
  32. package/test/examples/source-repository/b/node_modules/glob-watcher/node_modules/fsevents/build/gyp-mac-tool +106 -100
  33. package/test/examples/source-repository/b/package-lock.json +16 -16
  34. package/test/examples/source-repository/b/package.json +4 -4
  35. package/dist/modules/typescript-parser/package-lock.json +0 -16793
  36. package/dist/modules/typescript-parser/package.json +0 -55
  37. package/modules/typescript-parser/package-lock.json +0 -16793
  38. package/modules/typescript-parser/package.json +0 -55
  39. package/test/examples/source-repository/a/node_modules/@proteinjs/util/LICENSE +0 -21
  40. package/test/examples/source-repository/a/node_modules/@proteinjs/util-node/LICENSE +0 -21
  41. package/test/examples/source-repository/b/node_modules/@proteinjs/util/LICENSE +0 -21
  42. package/test/examples/source-repository/b/node_modules/@proteinjs/util-node/LICENSE +0 -21
@@ -9,6 +9,7 @@
9
9
  These functions are executed via gyp-mac-tool when using the Makefile generator.
10
10
  """
11
11
 
12
+
12
13
  import fcntl
13
14
  import fnmatch
14
15
  import glob
@@ -25,13 +26,14 @@ import tempfile
25
26
 
26
27
  def main(args):
27
28
  executor = MacTool()
28
- if (exit_code := executor.Dispatch(args)) is not None:
29
+ exit_code = executor.Dispatch(args)
30
+ if exit_code is not None:
29
31
  sys.exit(exit_code)
30
32
 
31
33
 
32
34
  class MacTool:
33
35
  """This class performs all the Mac tooling steps. The methods can either be
34
- executed directly, or dispatched from an argument list."""
36
+ executed directly, or dispatched from an argument list."""
35
37
 
36
38
  def Dispatch(self, args):
37
39
  """Dispatches a string command to a method."""
@@ -47,7 +49,7 @@ class MacTool:
47
49
 
48
50
  def ExecCopyBundleResource(self, source, dest, convert_to_binary):
49
51
  """Copies a resource file to the bundle/Resources directory, performing any
50
- necessary compilation on each resource."""
52
+ necessary compilation on each resource."""
51
53
  convert_to_binary = convert_to_binary == "True"
52
54
  extension = os.path.splitext(source)[1].lower()
53
55
  if os.path.isdir(source):
@@ -58,7 +60,9 @@ class MacTool:
58
60
  if os.path.exists(dest):
59
61
  shutil.rmtree(dest)
60
62
  shutil.copytree(source, dest)
61
- elif extension in {".xib", ".storyboard"}:
63
+ elif extension == ".xib":
64
+ return self._CopyXIBFile(source, dest)
65
+ elif extension == ".storyboard":
62
66
  return self._CopyXIBFile(source, dest)
63
67
  elif extension == ".strings" and not convert_to_binary:
64
68
  self._CopyStringsFile(source, dest)
@@ -67,7 +71,7 @@ class MacTool:
67
71
  os.unlink(dest)
68
72
  shutil.copy(source, dest)
69
73
 
70
- if convert_to_binary and extension in {".plist", ".strings"}:
74
+ if convert_to_binary and extension in (".plist", ".strings"):
71
75
  self._ConvertToBinary(dest)
72
76
 
73
77
  def _CopyXIBFile(self, source, dest):
@@ -141,7 +145,7 @@ class MacTool:
141
145
  # CFPropertyListCreateFromXMLData(): Old-style plist parser: missing
142
146
  # semicolon in dictionary.
143
147
  # on invalid files. Do the same kind of validation.
144
- import CoreFoundation # noqa: PLC0415
148
+ import CoreFoundation
145
149
 
146
150
  with open(source, "rb") as in_file:
147
151
  s = in_file.read()
@@ -155,15 +159,17 @@ class MacTool:
155
159
 
156
160
  def _DetectInputEncoding(self, file_name):
157
161
  """Reads the first few bytes from file_name and tries to guess the text
158
- encoding. Returns None as a guess if it can't detect it."""
162
+ encoding. Returns None as a guess if it can't detect it."""
159
163
  with open(file_name, "rb") as fp:
160
164
  try:
161
165
  header = fp.read(3)
162
166
  except Exception:
163
167
  return None
164
- if header.startswith((b"\xfe\xff", b"\xff\xfe")):
168
+ if header.startswith(b"\xFE\xFF"):
165
169
  return "UTF-16"
166
- elif header.startswith(b"\xef\xbb\xbf"):
170
+ elif header.startswith(b"\xFF\xFE"):
171
+ return "UTF-16"
172
+ elif header.startswith(b"\xEF\xBB\xBF"):
167
173
  return "UTF-8"
168
174
  else:
169
175
  return None
@@ -254,9 +260,9 @@ class MacTool:
254
260
 
255
261
  def ExecFilterLibtool(self, *cmd_list):
256
262
  """Calls libtool and filters out '/path/to/libtool: file: foo.o has no
257
- symbols'."""
263
+ symbols'."""
258
264
  libtool_re = re.compile(
259
- r"^.*libtool: (?:for architecture: \S* )?file: .* has no symbols$"
265
+ r"^.*libtool: (?:for architecture: \S* )?" r"file: .* has no symbols$"
260
266
  )
261
267
  libtool_re5 = re.compile(
262
268
  r"^.*libtool: warning for library: "
@@ -303,7 +309,7 @@ class MacTool:
303
309
 
304
310
  def ExecPackageFramework(self, framework, version):
305
311
  """Takes a path to Something.framework and the Current version of that and
306
- sets up all the symlinks."""
312
+ sets up all the symlinks."""
307
313
  # Find the name of the binary based on the part before the ".framework".
308
314
  binary = os.path.basename(framework).split(".")[0]
309
315
 
@@ -332,7 +338,7 @@ class MacTool:
332
338
 
333
339
  def _Relink(self, dest, link):
334
340
  """Creates a symlink to |dest| named |link|. If |link| already exists,
335
- it is overwritten."""
341
+ it is overwritten."""
336
342
  if os.path.lexists(link):
337
343
  os.remove(link)
338
344
  os.symlink(dest, link)
@@ -357,14 +363,14 @@ class MacTool:
357
363
  def ExecCompileXcassets(self, keys, *inputs):
358
364
  """Compiles multiple .xcassets files into a single .car file.
359
365
 
360
- This invokes 'actool' to compile all the inputs .xcassets files. The
361
- |keys| arguments is a json-encoded dictionary of extra arguments to
362
- pass to 'actool' when the asset catalogs contains an application icon
363
- or a launch image.
366
+ This invokes 'actool' to compile all the inputs .xcassets files. The
367
+ |keys| arguments is a json-encoded dictionary of extra arguments to
368
+ pass to 'actool' when the asset catalogs contains an application icon
369
+ or a launch image.
364
370
 
365
- Note that 'actool' does not create the Assets.car file if the asset
366
- catalogs does not contains imageset.
367
- """
371
+ Note that 'actool' does not create the Assets.car file if the asset
372
+ catalogs does not contains imageset.
373
+ """
368
374
  command_line = [
369
375
  "xcrun",
370
376
  "actool",
@@ -437,13 +443,13 @@ class MacTool:
437
443
  def ExecCodeSignBundle(self, key, entitlements, provisioning, path, preserve):
438
444
  """Code sign a bundle.
439
445
 
440
- This function tries to code sign an iOS bundle, following the same
441
- algorithm as Xcode:
442
- 1. pick the provisioning profile that best match the bundle identifier,
443
- and copy it into the bundle as embedded.mobileprovision,
444
- 2. copy Entitlements.plist from user or SDK next to the bundle,
445
- 3. code sign the bundle.
446
- """
446
+ This function tries to code sign an iOS bundle, following the same
447
+ algorithm as Xcode:
448
+ 1. pick the provisioning profile that best match the bundle identifier,
449
+ and copy it into the bundle as embedded.mobileprovision,
450
+ 2. copy Entitlements.plist from user or SDK next to the bundle,
451
+ 3. code sign the bundle.
452
+ """
447
453
  substitutions, overrides = self._InstallProvisioningProfile(
448
454
  provisioning, self._GetCFBundleIdentifier()
449
455
  )
@@ -462,16 +468,16 @@ class MacTool:
462
468
  def _InstallProvisioningProfile(self, profile, bundle_identifier):
463
469
  """Installs embedded.mobileprovision into the bundle.
464
470
 
465
- Args:
466
- profile: string, optional, short name of the .mobileprovision file
467
- to use, if empty or the file is missing, the best file installed
468
- will be used
469
- bundle_identifier: string, value of CFBundleIdentifier from Info.plist
471
+ Args:
472
+ profile: string, optional, short name of the .mobileprovision file
473
+ to use, if empty or the file is missing, the best file installed
474
+ will be used
475
+ bundle_identifier: string, value of CFBundleIdentifier from Info.plist
470
476
 
471
- Returns:
472
- A tuple containing two dictionary: variables substitutions and values
473
- to overrides when generating the entitlements file.
474
- """
477
+ Returns:
478
+ A tuple containing two dictionary: variables substitutions and values
479
+ to overrides when generating the entitlements file.
480
+ """
475
481
  source_path, provisioning_data, team_id = self._FindProvisioningProfile(
476
482
  profile, bundle_identifier
477
483
  )
@@ -487,24 +493,24 @@ class MacTool:
487
493
  def _FindProvisioningProfile(self, profile, bundle_identifier):
488
494
  """Finds the .mobileprovision file to use for signing the bundle.
489
495
 
490
- Checks all the installed provisioning profiles (or if the user specified
491
- the PROVISIONING_PROFILE variable, only consult it) and select the most
492
- specific that correspond to the bundle identifier.
496
+ Checks all the installed provisioning profiles (or if the user specified
497
+ the PROVISIONING_PROFILE variable, only consult it) and select the most
498
+ specific that correspond to the bundle identifier.
493
499
 
494
- Args:
495
- profile: string, optional, short name of the .mobileprovision file
496
- to use, if empty or the file is missing, the best file installed
497
- will be used
498
- bundle_identifier: string, value of CFBundleIdentifier from Info.plist
500
+ Args:
501
+ profile: string, optional, short name of the .mobileprovision file
502
+ to use, if empty or the file is missing, the best file installed
503
+ will be used
504
+ bundle_identifier: string, value of CFBundleIdentifier from Info.plist
499
505
 
500
- Returns:
501
- A tuple of the path to the selected provisioning profile, the data of
502
- the embedded plist in the provisioning profile and the team identifier
503
- to use for code signing.
506
+ Returns:
507
+ A tuple of the path to the selected provisioning profile, the data of
508
+ the embedded plist in the provisioning profile and the team identifier
509
+ to use for code signing.
504
510
 
505
- Raises:
506
- SystemExit: if no .mobileprovision can be used to sign the bundle.
507
- """
511
+ Raises:
512
+ SystemExit: if no .mobileprovision can be used to sign the bundle.
513
+ """
508
514
  profiles_dir = os.path.join(
509
515
  os.environ["HOME"], "Library", "MobileDevice", "Provisioning Profiles"
510
516
  )
@@ -552,12 +558,12 @@ class MacTool:
552
558
  def _LoadProvisioningProfile(self, profile_path):
553
559
  """Extracts the plist embedded in a provisioning profile.
554
560
 
555
- Args:
556
- profile_path: string, path to the .mobileprovision file
561
+ Args:
562
+ profile_path: string, path to the .mobileprovision file
557
563
 
558
- Returns:
559
- Content of the plist embedded in the provisioning profile as a dictionary.
560
- """
564
+ Returns:
565
+ Content of the plist embedded in the provisioning profile as a dictionary.
566
+ """
561
567
  with tempfile.NamedTemporaryFile() as temp:
562
568
  subprocess.check_call(
563
569
  ["security", "cms", "-D", "-i", profile_path, "-o", temp.name]
@@ -580,16 +586,16 @@ class MacTool:
580
586
  def _LoadPlistMaybeBinary(self, plist_path):
581
587
  """Loads into a memory a plist possibly encoded in binary format.
582
588
 
583
- This is a wrapper around plistlib.readPlist that tries to convert the
584
- plist to the XML format if it can't be parsed (assuming that it is in
585
- the binary format).
589
+ This is a wrapper around plistlib.readPlist that tries to convert the
590
+ plist to the XML format if it can't be parsed (assuming that it is in
591
+ the binary format).
586
592
 
587
- Args:
588
- plist_path: string, path to a plist file, in XML or binary format
593
+ Args:
594
+ plist_path: string, path to a plist file, in XML or binary format
589
595
 
590
- Returns:
591
- Content of the plist as a dictionary.
592
- """
596
+ Returns:
597
+ Content of the plist as a dictionary.
598
+ """
593
599
  try:
594
600
  # First, try to read the file using plistlib that only supports XML,
595
601
  # and if an exception is raised, convert a temporary copy to XML and
@@ -605,13 +611,13 @@ class MacTool:
605
611
  def _GetSubstitutions(self, bundle_identifier, app_identifier_prefix):
606
612
  """Constructs a dictionary of variable substitutions for Entitlements.plist.
607
613
 
608
- Args:
609
- bundle_identifier: string, value of CFBundleIdentifier from Info.plist
610
- app_identifier_prefix: string, value for AppIdentifierPrefix
614
+ Args:
615
+ bundle_identifier: string, value of CFBundleIdentifier from Info.plist
616
+ app_identifier_prefix: string, value for AppIdentifierPrefix
611
617
 
612
- Returns:
613
- Dictionary of substitutions to apply when generating Entitlements.plist.
614
- """
618
+ Returns:
619
+ Dictionary of substitutions to apply when generating Entitlements.plist.
620
+ """
615
621
  return {
616
622
  "CFBundleIdentifier": bundle_identifier,
617
623
  "AppIdentifierPrefix": app_identifier_prefix,
@@ -620,9 +626,9 @@ class MacTool:
620
626
  def _GetCFBundleIdentifier(self):
621
627
  """Extracts CFBundleIdentifier value from Info.plist in the bundle.
622
628
 
623
- Returns:
624
- Value of CFBundleIdentifier in the Info.plist located in the bundle.
625
- """
629
+ Returns:
630
+ Value of CFBundleIdentifier in the Info.plist located in the bundle.
631
+ """
626
632
  info_plist_path = os.path.join(
627
633
  os.environ["TARGET_BUILD_DIR"], os.environ["INFOPLIST_PATH"]
628
634
  )
@@ -632,19 +638,19 @@ class MacTool:
632
638
  def _InstallEntitlements(self, entitlements, substitutions, overrides):
633
639
  """Generates and install the ${BundleName}.xcent entitlements file.
634
640
 
635
- Expands variables "$(variable)" pattern in the source entitlements file,
636
- add extra entitlements defined in the .mobileprovision file and the copy
637
- the generated plist to "${BundlePath}.xcent".
641
+ Expands variables "$(variable)" pattern in the source entitlements file,
642
+ add extra entitlements defined in the .mobileprovision file and the copy
643
+ the generated plist to "${BundlePath}.xcent".
638
644
 
639
- Args:
640
- entitlements: string, optional, path to the Entitlements.plist template
641
- to use, defaults to "${SDKROOT}/Entitlements.plist"
642
- substitutions: dictionary, variable substitutions
643
- overrides: dictionary, values to add to the entitlements
645
+ Args:
646
+ entitlements: string, optional, path to the Entitlements.plist template
647
+ to use, defaults to "${SDKROOT}/Entitlements.plist"
648
+ substitutions: dictionary, variable substitutions
649
+ overrides: dictionary, values to add to the entitlements
644
650
 
645
- Returns:
646
- Path to the generated entitlements file.
647
- """
651
+ Returns:
652
+ Path to the generated entitlements file.
653
+ """
648
654
  source_path = entitlements
649
655
  target_path = os.path.join(
650
656
  os.environ["BUILT_PRODUCTS_DIR"], os.environ["PRODUCT_NAME"] + ".xcent"
@@ -664,15 +670,15 @@ class MacTool:
664
670
  def _ExpandVariables(self, data, substitutions):
665
671
  """Expands variables "$(variable)" in data.
666
672
 
667
- Args:
668
- data: object, can be either string, list or dictionary
669
- substitutions: dictionary, variable substitutions to perform
673
+ Args:
674
+ data: object, can be either string, list or dictionary
675
+ substitutions: dictionary, variable substitutions to perform
670
676
 
671
- Returns:
672
- Copy of data where each references to "$(variable)" has been replaced
673
- by the corresponding value found in substitutions, or left intact if
674
- the key was not found.
675
- """
677
+ Returns:
678
+ Copy of data where each references to "$(variable)" has been replaced
679
+ by the corresponding value found in substitutions, or left intact if
680
+ the key was not found.
681
+ """
676
682
  if isinstance(data, str):
677
683
  for key, value in substitutions.items():
678
684
  data = data.replace("$(%s)" % key, value)
@@ -691,15 +697,15 @@ def NextGreaterPowerOf2(x):
691
697
  def WriteHmap(output_name, filelist):
692
698
  """Generates a header map based on |filelist|.
693
699
 
694
- Per Mark Mentovai:
695
- A header map is structured essentially as a hash table, keyed by names used
696
- in #includes, and providing pathnames to the actual files.
700
+ Per Mark Mentovai:
701
+ A header map is structured essentially as a hash table, keyed by names used
702
+ in #includes, and providing pathnames to the actual files.
697
703
 
698
- The implementation below and the comment above comes from inspecting:
699
- http://www.opensource.apple.com/source/distcc/distcc-2503/distcc_dist/include_server/headermap.py?txt
700
- while also looking at the implementation in clang in:
701
- https://llvm.org/svn/llvm-project/cfe/trunk/lib/Lex/HeaderMap.cpp
702
- """
704
+ The implementation below and the comment above comes from inspecting:
705
+ http://www.opensource.apple.com/source/distcc/distcc-2503/distcc_dist/include_server/headermap.py?txt
706
+ while also looking at the implementation in clang in:
707
+ https://llvm.org/svn/llvm-project/cfe/trunk/lib/Lex/HeaderMap.cpp
708
+ """
703
709
  magic = 1751998832
704
710
  version = 1
705
711
  _reserved = 0
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "name": "@proteinjs/reflection-build-test-a",
3
- "version": "0.0.21",
3
+ "version": "0.0.22",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@proteinjs/reflection-build-test-a",
9
- "version": "0.0.21",
9
+ "version": "0.0.22",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "@dagrejs/graphlib": "2.1.4",
13
- "@proteinjs/reflection": "^1.1.11",
13
+ "@proteinjs/reflection": "^1.1.12",
14
14
  "@proteinjs/reflection-build-test-b": "file:../b",
15
- "@proteinjs/util": "^1.6.0",
16
- "@proteinjs/util-node": "^1.9.0",
15
+ "@proteinjs/util": "^1.6.1",
16
+ "@proteinjs/util-node": "^1.10.1",
17
17
  "globby": "11.0.1",
18
18
  "gulp": "4.0.2",
19
19
  "gulp-shell": "0.8.0",
@@ -32,13 +32,13 @@
32
32
  },
33
33
  "../b": {
34
34
  "name": "@proteinjs/reflection-build-test-b",
35
- "version": "0.0.21",
35
+ "version": "0.0.22",
36
36
  "license": "ISC",
37
37
  "dependencies": {
38
38
  "@dagrejs/graphlib": "2.1.4",
39
- "@proteinjs/reflection": "^1.1.11",
40
- "@proteinjs/util": "^1.6.0",
41
- "@proteinjs/util-node": "^1.9.0",
39
+ "@proteinjs/reflection": "^1.1.12",
40
+ "@proteinjs/util": "^1.6.1",
41
+ "@proteinjs/util-node": "^1.10.1",
42
42
  "globby": "11.0.1",
43
43
  "gulp": "4.0.2",
44
44
  "gulp-shell": "0.8.0",
@@ -1105,13 +1105,13 @@
1105
1105
  }
1106
1106
  },
1107
1107
  "node_modules/@proteinjs/reflection": {
1108
- "version": "1.1.11",
1109
- "resolved": "https://registry.npmjs.org/@proteinjs/reflection/-/reflection-1.1.11.tgz",
1110
- "integrity": "sha512-ErhLtcMS+uTsbwNpf6GDVPs+mvQ2AjkvxIkWD8cxsXv25bRGFib4wNhevn1pro2IyMgL+x8Zwime/wQr+S3R2A==",
1108
+ "version": "1.1.12",
1109
+ "resolved": "https://registry.npmjs.org/@proteinjs/reflection/-/reflection-1.1.12.tgz",
1110
+ "integrity": "sha512-w+sL7Nqppk4DXdFxrfwjEGHSPykCwB3GWaiQXcP6X+8Qtj32BI0wmTvAt6hXvtbXPhvIHPFnTfSs9qlW0FYf9Q==",
1111
1111
  "license": "ISC",
1112
1112
  "dependencies": {
1113
1113
  "@dagrejs/graphlib": "2.1.4",
1114
- "@proteinjs/util": "^1.6.0"
1114
+ "@proteinjs/util": "^1.6.1"
1115
1115
  }
1116
1116
  },
1117
1117
  "node_modules/@proteinjs/reflection-build-test-b": {
@@ -1119,9 +1119,9 @@
1119
1119
  "link": true
1120
1120
  },
1121
1121
  "node_modules/@proteinjs/util": {
1122
- "version": "1.6.0",
1123
- "resolved": "https://registry.npmjs.org/@proteinjs/util/-/util-1.6.0.tgz",
1124
- "integrity": "sha512-U1N6ZhA00VtZcdokBJ3g6yd+BH7+ZKSezfS/h80OgCLVu9pMXMwWqkeAy2rHlmLxQ9MEWwK4axkXyB1QMmrTcg==",
1122
+ "version": "1.6.1",
1123
+ "resolved": "https://registry.npmjs.org/@proteinjs/util/-/util-1.6.1.tgz",
1124
+ "integrity": "sha512-bFy6++l1u6RtMMeZEDYvMQWg14SAG2gCgUrcPy9M0Ctl0ATVMdQbU3h4IUQOlxwW32mWoni0qDTt9BkmHwAQjg==",
1125
1125
  "license": "ISC",
1126
1126
  "dependencies": {
1127
1127
  "@dagrejs/graphlib": "2.1.4",
@@ -1129,13 +1129,13 @@
1129
1129
  }
1130
1130
  },
1131
1131
  "node_modules/@proteinjs/util-node": {
1132
- "version": "1.9.0",
1133
- "resolved": "https://registry.npmjs.org/@proteinjs/util-node/-/util-node-1.9.0.tgz",
1134
- "integrity": "sha512-kn9zzmm7tUmlZiiJxGjkekhwsNprUzZM2r5rWZYgDD/BWdGCTA1QCfKEhmjCHLJutR1J+i4NmWcSfuYdyt+hjw==",
1132
+ "version": "1.10.1",
1133
+ "resolved": "https://registry.npmjs.org/@proteinjs/util-node/-/util-node-1.10.1.tgz",
1134
+ "integrity": "sha512-950BkiO4ccf9Bbt0CpvPj5pUalNH9dV1zqr7Cw1Dh3tg9xny6R02p1QrKvPU7anoZcnSp2Us6lBv0rlutYoSWw==",
1135
1135
  "license": "ISC",
1136
1136
  "dependencies": {
1137
1137
  "@dagrejs/graphlib": "2.1.4",
1138
- "@proteinjs/util": "^1.6.0",
1138
+ "@proteinjs/util": "^1.6.1",
1139
1139
  "fs-extra": "11.1.1",
1140
1140
  "globby": "11.0.1",
1141
1141
  "typescript": "5.2.2"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@proteinjs/reflection-build-test-a",
3
- "version": "0.0.21",
3
+ "version": "0.0.22",
4
4
  "private": true,
5
5
  "description": "Test package a",
6
6
  "repository": {
@@ -19,10 +19,10 @@
19
19
  },
20
20
  "dependencies": {
21
21
  "@dagrejs/graphlib": "2.1.4",
22
- "@proteinjs/reflection": "^1.1.11",
22
+ "@proteinjs/reflection": "^1.1.12",
23
23
  "@proteinjs/reflection-build-test-b": "file:../b",
24
- "@proteinjs/util": "^1.6.0",
25
- "@proteinjs/util-node": "^1.9.0",
24
+ "@proteinjs/util": "^1.6.1",
25
+ "@proteinjs/util-node": "^1.10.1",
26
26
  "globby": "11.0.1",
27
27
  "gulp": "4.0.2",
28
28
  "gulp-shell": "0.8.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@proteinjs/reflection-build-test-b",
3
- "version": "0.0.21",
3
+ "version": "0.0.22",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
@@ -1054,19 +1054,19 @@
1054
1054
  }
1055
1055
  },
1056
1056
  "node_modules/@proteinjs/reflection": {
1057
- "version": "1.1.11",
1058
- "resolved": "https://registry.npmjs.org/@proteinjs/reflection/-/reflection-1.1.11.tgz",
1059
- "integrity": "sha512-ErhLtcMS+uTsbwNpf6GDVPs+mvQ2AjkvxIkWD8cxsXv25bRGFib4wNhevn1pro2IyMgL+x8Zwime/wQr+S3R2A==",
1057
+ "version": "1.1.12",
1058
+ "resolved": "https://registry.npmjs.org/@proteinjs/reflection/-/reflection-1.1.12.tgz",
1059
+ "integrity": "sha512-w+sL7Nqppk4DXdFxrfwjEGHSPykCwB3GWaiQXcP6X+8Qtj32BI0wmTvAt6hXvtbXPhvIHPFnTfSs9qlW0FYf9Q==",
1060
1060
  "license": "ISC",
1061
1061
  "dependencies": {
1062
1062
  "@dagrejs/graphlib": "2.1.4",
1063
- "@proteinjs/util": "^1.6.0"
1063
+ "@proteinjs/util": "^1.6.1"
1064
1064
  }
1065
1065
  },
1066
1066
  "node_modules/@proteinjs/util": {
1067
- "version": "1.6.0",
1068
- "resolved": "https://registry.npmjs.org/@proteinjs/util/-/util-1.6.0.tgz",
1069
- "integrity": "sha512-U1N6ZhA00VtZcdokBJ3g6yd+BH7+ZKSezfS/h80OgCLVu9pMXMwWqkeAy2rHlmLxQ9MEWwK4axkXyB1QMmrTcg==",
1067
+ "version": "1.6.1",
1068
+ "resolved": "https://registry.npmjs.org/@proteinjs/util/-/util-1.6.1.tgz",
1069
+ "integrity": "sha512-bFy6++l1u6RtMMeZEDYvMQWg14SAG2gCgUrcPy9M0Ctl0ATVMdQbU3h4IUQOlxwW32mWoni0qDTt9BkmHwAQjg==",
1070
1070
  "license": "ISC",
1071
1071
  "dependencies": {
1072
1072
  "@dagrejs/graphlib": "2.1.4",
@@ -1074,13 +1074,13 @@
1074
1074
  }
1075
1075
  },
1076
1076
  "node_modules/@proteinjs/util-node": {
1077
- "version": "1.9.0",
1078
- "resolved": "https://registry.npmjs.org/@proteinjs/util-node/-/util-node-1.9.0.tgz",
1079
- "integrity": "sha512-kn9zzmm7tUmlZiiJxGjkekhwsNprUzZM2r5rWZYgDD/BWdGCTA1QCfKEhmjCHLJutR1J+i4NmWcSfuYdyt+hjw==",
1077
+ "version": "1.10.1",
1078
+ "resolved": "https://registry.npmjs.org/@proteinjs/util-node/-/util-node-1.10.1.tgz",
1079
+ "integrity": "sha512-950BkiO4ccf9Bbt0CpvPj5pUalNH9dV1zqr7Cw1Dh3tg9xny6R02p1QrKvPU7anoZcnSp2Us6lBv0rlutYoSWw==",
1080
1080
  "license": "ISC",
1081
1081
  "dependencies": {
1082
1082
  "@dagrejs/graphlib": "2.1.4",
1083
- "@proteinjs/util": "^1.6.0",
1083
+ "@proteinjs/util": "^1.6.1",
1084
1084
  "fs-extra": "11.1.1",
1085
1085
  "globby": "11.0.1",
1086
1086
  "typescript": "5.2.2"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@proteinjs/reflection",
3
- "version": "1.1.11",
3
+ "version": "1.1.12",
4
4
  "description": "Source introspection and loader apis",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -24,7 +24,7 @@
24
24
  },
25
25
  "dependencies": {
26
26
  "@dagrejs/graphlib": "2.1.4",
27
- "@proteinjs/util": "^1.6.0"
27
+ "@proteinjs/util": "^1.6.1"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@types/graphlib": "2.1.6",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@proteinjs/util",
3
- "version": "1.6.0",
3
+ "version": "1.6.1",
4
4
  "description": "Runtime-agnostic util libs",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -36,6 +36,5 @@
36
36
  "eslint-config-prettier": "9.1.0",
37
37
  "eslint-plugin-prettier": "5.1.3",
38
38
  "typescript": "5.2.2"
39
- },
40
- "gitHead": "44d96f568d374f78c3adc6fa6d130bc5b060220f"
39
+ }
41
40
  }
@@ -3,6 +3,17 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [1.10.0](https://github.com/proteinjs/util/compare/@proteinjs/util-node@1.9.0...@proteinjs/util-node@1.10.0) (2026-07-28)
7
+
8
+
9
+ ### Features
10
+
11
+ * expose PackageUtil.getTransitiveWorkspaceDependencies ([72fa5b8](https://github.com/proteinjs/util/commit/72fa5b8208e38e04ab06a27446e21b549d21b1c9))
12
+
13
+
14
+
15
+
16
+
6
17
  # [1.9.0](https://github.com/proteinjs/util/compare/@proteinjs/util-node@1.8.1...@proteinjs/util-node@1.9.0) (2026-06-24)
7
18
 
8
19
 
@@ -132,9 +132,12 @@ export declare class PackageUtil {
132
132
  * filters to file:/relative/workspace deps in `addDependencies`, but we filter
133
133
  * again here so the result is exactly the set of linkable packages).
134
134
  *
135
+ * Public: WorkspaceDoctor (@proteinjs/build) diagnoses the same closure this method links —
136
+ * verification and repair must agree on the set of packages that ought to be symlinked.
137
+ *
135
138
  * @returns workspace package names this package transitively depends on
136
139
  */
137
- private static getTransitiveWorkspaceDependencies;
140
+ static getTransitiveWorkspaceDependencies(localPackage: LocalPackage, localPackageMap: LocalPackageMap): Promise<string[]>;
138
141
  /**
139
142
  * Symlink a single workspace package into `nodeModulesPath`, and create
140
143
  * `node_modules/.bin/<name>` shims for any `bin` it declares.
@@ -507,6 +507,9 @@ var PackageUtil = /** @class */ (function () {
507
507
  * filters to file:/relative/workspace deps in `addDependencies`, but we filter
508
508
  * again here so the result is exactly the set of linkable packages).
509
509
  *
510
+ * Public: WorkspaceDoctor (@proteinjs/build) diagnoses the same closure this method links —
511
+ * verification and repair must agree on the set of packages that ought to be symlinked.
512
+ *
510
513
  * @returns workspace package names this package transitively depends on
511
514
  */
512
515
  PackageUtil.getTransitiveWorkspaceDependencies = function (localPackage, localPackageMap) {