@rushstack/rush-sdk 5.76.1 → 5.77.2-pr3481.5

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 (2) hide show
  1. package/dist/rush-lib.d.ts +257 -38
  2. package/package.json +8 -9
@@ -136,6 +136,59 @@ export declare class ApprovedPackagesPolicy {
136
136
  get nonbrowserApprovedPackages(): ApprovedPackagesConfiguration;
137
137
  }
138
138
 
139
+ /**
140
+ * A base class for flag file.
141
+ * @internal
142
+ */
143
+ export declare class _BaseFlag<T extends object = JsonObject> {
144
+ /**
145
+ * Flag file path
146
+ */
147
+ protected _path: string;
148
+ /**
149
+ * Content of the flag
150
+ */
151
+ protected _state: T;
152
+ /**
153
+ * Whether the current state is modified
154
+ */
155
+ protected _isModified: boolean;
156
+ /**
157
+ * Creates a new flag file
158
+ * @param folderPath - the folder that this flag is managing
159
+ * @param state - optional, the state that should be managed or compared
160
+ */
161
+ constructor(folderPath: string, state?: Partial<T>);
162
+ /**
163
+ * Returns true if the file exists and the contents match the current state.
164
+ */
165
+ isValid(): boolean;
166
+ /**
167
+ * Writes the flag file to disk with the current state
168
+ */
169
+ create(): void;
170
+ /**
171
+ * Merge new data into current state by lodash "merge"
172
+ */
173
+ mergeFromObject(data: JsonObject): void;
174
+ /**
175
+ * Writes the flag file to disk with the current state if modified
176
+ */
177
+ saveIfModified(): void;
178
+ /**
179
+ * Removes the flag file
180
+ */
181
+ clear(): void;
182
+ /**
183
+ * Returns the full path to the flag file
184
+ */
185
+ get path(): string;
186
+ /**
187
+ * Returns the name of the flag file
188
+ */
189
+ protected get flagName(): string;
190
+ }
191
+
139
192
  /**
140
193
  * Use this class to load and save the "common/config/rush/build-cache.json" config file.
141
194
  * This file provides configuration options for cached project build output.
@@ -517,12 +570,12 @@ export declare enum EnvironmentVariableNames {
517
570
  */
518
571
  RUSH_GLOBAL_FOLDER = "RUSH_GLOBAL_FOLDER",
519
572
  /**
520
- * Provides a credential for a remote build cache, if configured. Setting this environment variable
521
- * overrides whatever credential has been saved in the local cloud cache credentials using
522
- * `rush update-cloud-credentials`.
573
+ * Provides a credential for a remote build cache, if configured. This credential overrides any cached credentials.
523
574
  *
524
575
  * @remarks
525
- * This credential overrides any cached credentials.
576
+ * Setting this environment variable overrides whatever credential has been saved in the
577
+ * local cloud cache credentials using `rush update-cloud-credentials`.
578
+ *
526
579
  *
527
580
  * If Azure Blob Storage is used to store cache entries, this must be a SAS token serialized as query
528
581
  * parameters.
@@ -532,22 +585,28 @@ export declare enum EnvironmentVariableNames {
532
585
  RUSH_BUILD_CACHE_CREDENTIAL = "RUSH_BUILD_CACHE_CREDENTIAL",
533
586
  /**
534
587
  * Setting this environment variable overrides the value of `buildCacheEnabled` in the `build-cache.json`
535
- * configuration file. Specify `1` to enable the build cache or `0` to disable it.
588
+ * configuration file.
589
+ *
590
+ * @remarks
591
+ * Specify `1` to enable the build cache or `0` to disable it.
536
592
  *
537
593
  * If set to `0`, this is equivalent to passing the `--disable-build-cache` flag.
594
+ *
595
+ * If there is no build cache configured, then this environment variable is ignored.
538
596
  */
539
597
  RUSH_BUILD_CACHE_ENABLED = "RUSH_BUILD_CACHE_ENABLED",
540
598
  /**
541
- * Setting this environment variable overrides the value of `isCacheWriteAllowed` in the `build-cache.json`
542
- * configuration file. Specify `1` to allow cache write and `0` to disable it.
599
+ * Overrides the value of `isCacheWriteAllowed` in the `build-cache.json` configuration file. The value of this
600
+ * environment variable must be `1` (for true) or `0` (for false). If there is no build cache configured, then
601
+ * this environment variable is ignored.
543
602
  */
544
603
  RUSH_BUILD_CACHE_WRITE_ALLOWED = "RUSH_BUILD_CACHE_WRITE_ALLOWED",
545
604
  /**
546
- * Allows the git binary path to be explicitly specified.
605
+ * Explicitly specifies the path for the Git binary that is invoked by certain Rush operations.
547
606
  */
548
607
  RUSH_GIT_BINARY_PATH = "RUSH_GIT_BINARY_PATH",
549
608
  /**
550
- * Allows the tar binary path to be explicitly specified.
609
+ * Explicitly specifies the path for the `tar` binary that is invoked by certain Rush operations.
551
610
  */
552
611
  RUSH_TAR_BINARY_PATH = "RUSH_TAR_BINARY_PATH",
553
612
  /**
@@ -869,6 +928,11 @@ export declare interface IExperimentsJson {
869
928
  * in common/config/rush/command-line.json.
870
929
  */
871
930
  phasedCommands?: boolean;
931
+ /**
932
+ * If true, rush install or rush update implicitly specify --ignore-scripts during pnpm install,
933
+ * and run install lifecycle scripts by pnpm rebuild --pending after pnpm install successfully.
934
+ */
935
+ deferredInstallationScripts?: boolean;
872
936
  }
873
937
 
874
938
  /**
@@ -935,6 +999,50 @@ declare interface IIndividualVersionJson extends IVersionPolicyJson {
935
999
  lockedMajor?: number;
936
1000
  }
937
1001
 
1002
+ /**
1003
+ * This represents the JSON data structure for the "last-install.flag" file.
1004
+ * @internal
1005
+ */
1006
+ export declare interface _ILastInstallFlagJson {
1007
+ /**
1008
+ * Current node version
1009
+ */
1010
+ node: string;
1011
+ /**
1012
+ * Current package manager name
1013
+ */
1014
+ packageManager: PackageManagerName;
1015
+ /**
1016
+ * Current package manager version
1017
+ */
1018
+ packageManagerVersion: string;
1019
+ /**
1020
+ * Current rush json folder
1021
+ */
1022
+ rushJsonFolder: string;
1023
+ /**
1024
+ * The content of package.json, used in the flag file of autoinstaller
1025
+ */
1026
+ packageJson?: IPackageJson;
1027
+ /**
1028
+ * Same with pnpmOptions.pnpmStorePath in rush.json
1029
+ */
1030
+ storePath?: string;
1031
+ /**
1032
+ * True when "useWorkspaces" is true in rush.json
1033
+ */
1034
+ workspaces?: true;
1035
+ /**
1036
+ * True when user explicitly specify "--ignore-scripts" CLI parameter or deferredInstallationScripts
1037
+ */
1038
+ ignoreScripts?: true;
1039
+ /**
1040
+ * When specified, it is a list of selected projects during partial install
1041
+ * It is undefined when full install
1042
+ */
1043
+ selectedProjectNames?: string[];
1044
+ }
1045
+
938
1046
  /**
939
1047
  * Options to pass to the rush "launch" functions.
940
1048
  *
@@ -1300,6 +1408,7 @@ declare interface IRushConfigurationProjectJson {
1300
1408
  skipRushCheck?: boolean;
1301
1409
  publishFolder?: string;
1302
1410
  tags?: string[];
1411
+ splitWorkspace?: boolean;
1303
1412
  }
1304
1413
 
1305
1414
  /**
@@ -1324,6 +1433,16 @@ declare interface IRushConfigurationProjectOptions {
1324
1433
  allowedProjectTags: Set<string> | undefined;
1325
1434
  }
1326
1435
 
1436
+ /**
1437
+ * The filter parameters to search from all projects.
1438
+ */
1439
+ declare interface IRushConfigurationProjectsFilter {
1440
+ /**
1441
+ * If true, filter out projects that specify splitWorkspace as true.
1442
+ */
1443
+ splitWorkspace: boolean;
1444
+ }
1445
+
1327
1446
  /**
1328
1447
  * Part of IRushConfigurationJson.
1329
1448
  */
@@ -1440,7 +1559,7 @@ export declare interface IStopwatchResult {
1440
1559
  export declare interface ITelemetryData {
1441
1560
  /**
1442
1561
  * Command name
1443
- * @example 'build'
1562
+ * @example `"build"`
1444
1563
  */
1445
1564
  readonly name: string;
1446
1565
  /**
@@ -1452,25 +1571,86 @@ export declare interface ITelemetryData {
1452
1571
  */
1453
1572
  readonly result: 'Succeeded' | 'Failed';
1454
1573
  /**
1455
- * The timestamp of the telemetry logging
1574
+ * The millisecond-resolution timestamp of the telemetry logging
1456
1575
  * @example 1648001893024
1457
1576
  */
1458
- readonly timestamp?: number;
1577
+ readonly timestampMs?: number;
1459
1578
  /**
1460
- * The platform the command was executed on, reads from process.platform
1461
- * @example darwin, win32, linux...
1579
+ * The platform the command was executed on, based on the Node.js `process.platform()` API
1580
+ * @example `"darwin"`, `"win32"`, `"linux"`
1462
1581
  */
1463
1582
  readonly platform?: string;
1464
1583
  /**
1465
- * The rush version
1466
- * @example 5.63.0
1584
+ * The Rush version
1585
+ * @example `5.63.0`
1467
1586
  */
1468
1587
  readonly rushVersion?: string;
1588
+ /**
1589
+ * Detailed information about the host machine.
1590
+ */
1591
+ readonly machineInfo?: ITelemetryMachineInfo;
1592
+ /**
1593
+ * Only applicable to phased commands. Provides detailed results by operation.
1594
+ * Keys are operation names, values contain result, timing information, and dependencies.
1595
+ */
1596
+ readonly operationResults?: Record<string, ITelemetryOperationResult>;
1469
1597
  readonly extraData?: {
1470
1598
  [key: string]: string | number | boolean;
1471
1599
  };
1472
1600
  }
1473
1601
 
1602
+ /**
1603
+ * @beta
1604
+ */
1605
+ export declare interface ITelemetryMachineInfo {
1606
+ /**
1607
+ * The CPU architecture
1608
+ * @example `"AMD64"`
1609
+ */
1610
+ machineArchitecture: string;
1611
+ /**
1612
+ * The CPU model
1613
+ * * @example `"AMD Ryzen 7 3700X 8-Core Processor"`
1614
+ */
1615
+ machineCpu: string;
1616
+ /**
1617
+ * The number of logical CPU cores.
1618
+ */
1619
+ machineCores: number;
1620
+ /**
1621
+ * The total amount of RAM on the machine, in MiB.
1622
+ */
1623
+ machineTotalMemoryMiB: number;
1624
+ /**
1625
+ * The amount of free RAM on the machine at the end of execution, in MiB.
1626
+ */
1627
+ machineFreeMemoryMiB: number;
1628
+ }
1629
+
1630
+ /**
1631
+ * @beta
1632
+ */
1633
+ export declare interface ITelemetryOperationResult {
1634
+ /**
1635
+ * The names of operations that this operation depends on.
1636
+ */
1637
+ dependencies: string[];
1638
+ /**
1639
+ * The status code for the operation.
1640
+ */
1641
+ result: string;
1642
+ /**
1643
+ * A timestamp in milliseconds (from `performance.now()`) when the operation started.
1644
+ * If the operation was blocked, will be `undefined`.
1645
+ */
1646
+ startTimestampMs?: number;
1647
+ /**
1648
+ * A timestamp in milliseconds (from `performance.now()`) when the operation finished.
1649
+ * If the operation was blocked, will be `undefined`.
1650
+ */
1651
+ endTimestampMs?: number;
1652
+ }
1653
+
1474
1654
  /**
1475
1655
  * Options for `RushConfiguration.tryFindRushJsonLocation`.
1476
1656
  * @public
@@ -1521,16 +1701,9 @@ export declare interface _IYarnOptionsJson extends IPackageManagerOptionsJsonBas
1521
1701
  * it can invalidate the last install.
1522
1702
  * @internal
1523
1703
  */
1524
- export declare class _LastInstallFlag {
1525
- private _path;
1526
- private _state;
1527
- /**
1528
- * Creates a new LastInstall flag
1529
- * @param folderPath - the folder that this flag is managing
1530
- * @param state - optional, the state that should be managed or compared
1531
- */
1532
- constructor(folderPath: string, state?: JsonObject);
1704
+ export declare class _LastInstallFlag extends _BaseFlag<_ILastInstallFlagJson> {
1533
1705
  /**
1706
+ * @override
1534
1707
  * Returns true if the file exists and the contents match the current state.
1535
1708
  */
1536
1709
  isValid(): boolean;
@@ -1542,18 +1715,6 @@ export declare class _LastInstallFlag {
1542
1715
  */
1543
1716
  checkValidAndReportStoreIssues(): boolean;
1544
1717
  private _isValid;
1545
- /**
1546
- * Writes the flag file to disk with the current state
1547
- */
1548
- create(): void;
1549
- /**
1550
- * Removes the flag file
1551
- */
1552
- clear(): void;
1553
- /**
1554
- * Returns the full path to the flag file
1555
- */
1556
- get path(): string;
1557
1718
  /**
1558
1719
  * Returns the name of the flag file
1559
1720
  */
@@ -2206,6 +2367,7 @@ export declare class RushConfiguration {
2206
2367
  private _changesFolder;
2207
2368
  private _commonFolder;
2208
2369
  private _commonTempFolder;
2370
+ private _commonTempSplitFolder;
2209
2371
  private _commonScriptsFolder;
2210
2372
  private _commonRushConfigFolder;
2211
2373
  private _packageManager;
@@ -2214,8 +2376,10 @@ export declare class RushConfiguration {
2214
2376
  private _npmTmpFolder;
2215
2377
  private _yarnCacheFolder;
2216
2378
  private _shrinkwrapFilename;
2379
+ private _splitWorkspaceShrinkwrapFilename;
2217
2380
  private _tempShrinkwrapFilename;
2218
2381
  private _tempShrinkwrapPreinstallFilename;
2382
+ private _tempSplitWorkspaceShrinkwrapFilename;
2219
2383
  private _currentVariantJsonFilename;
2220
2384
  private _packageManagerToolVersion;
2221
2385
  private _packageManagerToolFilename;
@@ -2246,6 +2410,8 @@ export declare class RushConfiguration {
2246
2410
  private _projects;
2247
2411
  private _projectsByName;
2248
2412
  private _projectsByTag;
2413
+ private _filteredProjectsCache;
2414
+ private _hasSplitWorkspaceProject;
2249
2415
  private _commonVersionsConfigurationsByVariant;
2250
2416
  private _versionPolicyConfiguration;
2251
2417
  private _versionPolicyConfigurationFilePath;
@@ -2338,6 +2504,12 @@ export declare class RushConfiguration {
2338
2504
  * Example: `C:\MyRepo\common\temp`
2339
2505
  */
2340
2506
  get commonTempFolder(): string;
2507
+ /**
2508
+ * The folder where temporary files will be stored. This is always a subfolder called "temp"
2509
+ * under the common folder.
2510
+ * Example: `C:\MyRepo\common\temp-split`
2511
+ */
2512
+ get commonTempSplitFolder(): string;
2341
2513
  /**
2342
2514
  * The folder where automation scripts are stored. This is always a subfolder called "scripts"
2343
2515
  * under the common folder.
@@ -2395,6 +2567,7 @@ export declare class RushConfiguration {
2395
2567
  * Example: `npm-shrinkwrap.json` or `pnpm-lock.yaml`
2396
2568
  */
2397
2569
  get shrinkwrapFilename(): string;
2570
+ get splitWorkspaceShrinkwrapFilename(): string;
2398
2571
  /**
2399
2572
  * The full path of the temporary shrinkwrap file that is used during "rush install".
2400
2573
  * This file may get rewritten by the package manager during installation.
@@ -2403,6 +2576,14 @@ export declare class RushConfiguration {
2403
2576
  * Example: `C:\MyRepo\common\temp\npm-shrinkwrap.json` or `C:\MyRepo\common\temp\pnpm-lock.yaml`
2404
2577
  */
2405
2578
  get tempShrinkwrapFilename(): string;
2579
+ /**
2580
+ * The full path of the temporary shrinkwrap file for split workspace that is used during
2581
+ * "rush install". This file may get rewritten by the package manager during installation.
2582
+ * @remarks
2583
+ * This property merely reports the filename; the file itself may not actually exist.
2584
+ * Example: `C:\MyRepo\common\temp-split\pnpm-lock.yaml`
2585
+ */
2586
+ get tempSplitWorkspaceShrinkwrapFilename(): string;
2406
2587
  /**
2407
2588
  * The full path of a backup copy of tempShrinkwrapFilename. This backup copy is made
2408
2589
  * before installation begins, and can be compared to determine how the package manager
@@ -2562,6 +2743,11 @@ export declare class RushConfiguration {
2562
2743
  * @beta
2563
2744
  */
2564
2745
  get projectsByTag(): ReadonlyMap<string, ReadonlySet<RushConfigurationProject>>;
2746
+ /**
2747
+ * Search for projects according to filter
2748
+ * @beta
2749
+ */
2750
+ getFilteredProjects(filter: IRushConfigurationProjectsFilter): RushConfigurationProject[];
2565
2751
  /**
2566
2752
  * {@inheritDoc NpmOptionsConfiguration}
2567
2753
  */
@@ -2608,6 +2794,10 @@ export declare class RushConfiguration {
2608
2794
  * The rush hooks. It allows customized scripts to run at the specified point.
2609
2795
  */
2610
2796
  get packageNameParser(): PackageNameParser;
2797
+ /**
2798
+ * Is there any split workspace project.
2799
+ */
2800
+ get hasSplitWorkspaceProject(): boolean;
2611
2801
  /**
2612
2802
  * Gets the path to the common-versions.json config file for a specific variant.
2613
2803
  * @param variant - The name of the current variant in use by the active command.
@@ -2640,6 +2830,11 @@ export declare class RushConfiguration {
2640
2830
  * @param variant - The name of the current variant in use by the active command.
2641
2831
  */
2642
2832
  getCommittedShrinkwrapFilename(variant?: string | undefined): string;
2833
+ /**
2834
+ * Gets the committed shrinkwrap file name for split workspace.
2835
+ * @param variant - The name of the current variant in use by the active command.
2836
+ */
2837
+ getCommittedSplitWorkspaceShrinkwrapFilename(): string;
2643
2838
  /**
2644
2839
  * Gets the absolute path for "pnpmfile.js" for a specific variant.
2645
2840
  * @param variant - The name of the current variant in use by the active command.
@@ -2694,6 +2889,12 @@ export declare class RushConfiguration {
2694
2889
  */
2695
2890
  tryGetProjectForPath(currentFolderPath: string): RushConfigurationProject | undefined;
2696
2891
  private _getVariantConfigFolderPath;
2892
+ /**
2893
+ * Split workspace can only works on PNPM with "useWorkspaces" enabled.
2894
+ * The workspace project can NOT depend on a split workspace project.
2895
+ * The split workspace project CAN depend on a workspace project.
2896
+ */
2897
+ private _validateSplitWorkspaceRelationships;
2697
2898
  }
2698
2899
 
2699
2900
  /**
@@ -2719,6 +2920,7 @@ export declare class RushConfigurationProject {
2719
2920
  private readonly _publishFolder;
2720
2921
  private readonly _rushConfiguration;
2721
2922
  private readonly _tags;
2923
+ private readonly _splitWorkspace;
2722
2924
  private _versionPolicy;
2723
2925
  private _dependencyProjects;
2724
2926
  private _consumingProjects;
@@ -2876,10 +3078,21 @@ export declare class RushConfigurationProject {
2876
3078
  */
2877
3079
  get isMainProject(): boolean;
2878
3080
  /**
2879
- * The set of tags applied to this project.
3081
+ * An optional set of custom tags that can be used to select this project.
3082
+ *
3083
+ * @remarks
3084
+ * For example, adding `my-custom-tag` will allow this project to be selected by the
3085
+ * command `rush list --only tag:my-custom-tag`. The tag name must be one or more words separated
3086
+ * by hyphens, where a word may contain lowercase letters, digits, and the period character.
3087
+ *
2880
3088
  * @beta
2881
3089
  */
2882
3090
  get tags(): ReadonlySet<string>;
3091
+ /**
3092
+ * Whether this project is a split workspace project.
3093
+ * @beta
3094
+ */
3095
+ get splitWorkspace(): boolean;
2883
3096
  }
2884
3097
 
2885
3098
  /**
@@ -2927,6 +3140,12 @@ export declare class RushConstants {
2927
3140
  * Example: `C:\MyRepo\common\temp`
2928
3141
  */
2929
3142
  static readonly rushTempFolderName: string;
3143
+ /**
3144
+ * The folder name ("temp-split") under the common folder, or under the .rush folder in each project's directory where
3145
+ * temporary files will be stored.
3146
+ * Example: `C:\MyRepo\common\temp-split`
3147
+ */
3148
+ static readonly rushTempSplitFolderName: string;
2930
3149
  /**
2931
3150
  * The folder name ("projects") where temporary projects will be stored.
2932
3151
  * Example: `C:\MyRepo\common\temp\projects`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rushstack/rush-sdk",
3
- "version": "5.76.1",
3
+ "version": "5.77.2-pr3481.5",
4
4
  "description": "An API for interacting with the Rush engine",
5
5
  "repository": {
6
6
  "type": "git",
@@ -12,18 +12,18 @@
12
12
  "typings": "dist/rush-lib.d.ts",
13
13
  "license": "MIT",
14
14
  "dependencies": {
15
- "@rushstack/node-core-library": "3.50.1",
15
+ "@rushstack/node-core-library": "3.51.1",
16
16
  "@types/node-fetch": "1.6.9",
17
17
  "tapable": "2.2.1"
18
18
  },
19
19
  "devDependencies": {
20
- "@microsoft/rush-lib": "5.76.1",
20
+ "@microsoft/rush-lib": "5.77.2-pr3481.5",
21
21
  "@rushstack/eslint-config": "3.0.0",
22
- "@rushstack/heft": "0.47.0",
23
- "@rushstack/heft-node-rig": "1.10.0",
24
- "@rushstack/stream-collator": "4.0.193",
22
+ "@rushstack/heft": "0.47.5",
23
+ "@rushstack/heft-node-rig": "1.10.7",
24
+ "@rushstack/stream-collator": "4.0.200",
25
25
  "@rushstack/ts-command-line": "4.12.2",
26
- "@rushstack/terminal": "0.3.62",
26
+ "@rushstack/terminal": "0.3.69",
27
27
  "@types/heft-jest": "1.0.1",
28
28
  "@types/semver": "7.3.5",
29
29
  "@types/webpack-env": "1.13.0"
@@ -32,6 +32,5 @@
32
32
  "build": "heft build --clean",
33
33
  "_phase:build": "heft build --clean",
34
34
  "_phase:test": "heft test --no-build"
35
- },
36
- "readme": "## @rushstack/rush-sdk\n\nThis is a companion package for the Rush tool. See the [@microsoft/rush](https://www.npmjs.com/package/@microsoft/rush) package for details.\n\n⚠ ***THIS PACKAGE IS EXPERIMENTAL*** ⚠\n\nThe **@rushstack/rush-sdk** package acts as a lightweight proxy for accessing the APIs of the **@microsoft/rush-lib** engine. It is intended to support three different use cases:\n\n1. Rush plugins should import from **@rushstack/rush-sdk** instead of **@microsoft/rush-lib**. This gives plugins full access to Rush APIs while avoiding a redundant installation of those packages. At runtime, the APIs will be bound to the correct `rushVersion` from **rush.json**, and guaranteed to be the same **@microsoft/rush-lib** module instance as the plugin host.\n\n2. When authoring unit tests for a Rush plugin, developers should add **@microsoft/rush-lib** to their **package.json** `devDependencies`. In this context, **@rushstack/rush-sdk** will resolve to that instance for testing purposes.\n\n3. For scripts and tools that are designed to be used in a Rush monorepo, in the future **@rushstack/rush-sdk** will automatically invoke **install-run-rush.js** and load the local installation. This ensures that tools load a compatible version of the Rush engine for the given branch. Once this is implemented, **@rushstack/rush-sdk** can replace **@microsoft/rush-lib** entirely as the official API interface, with the latter serving as the underlying implementation.\n\n\nThe **@rushstack/rush-sdk** API declarations are identical to the corresponding version of **@microsoft/rush-lib**.\n\n## Debugging\n\nVerbose logging can be turn on by set environment variable `RUSH_SDK_DEBUG` to `1`\n\n\n## Links\n\n- [CHANGELOG.md](\n https://github.com/microsoft/rushstack/blob/main/apps/rush/CHANGELOG.md) - Find\n out what's new in the latest version\n- [API Reference](https://api.rushstack.io/pages/rush-lib/)\n\nRush is part of the [Rush Stack](https://rushstack.io/) family of projects.\n"
35
+ }
37
36
  }