@atlaskit/eslint-plugin-platform 2.8.0 → 2.9.1
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.
- package/CHANGELOG.md +16 -0
- package/dist/cjs/index.js +8 -1
- package/dist/cjs/rules/ensure-critical-dependency-resolutions/index.js +0 -1
- package/dist/cjs/rules/ensure-use-sync-external-store-server-snapshot/index.js +41 -0
- package/dist/cjs/rules/import/no-barrel-entry-imports/index.js +534 -74
- package/dist/cjs/rules/import/no-barrel-entry-jest-mock/index.js +428 -119
- package/dist/cjs/rules/import/no-jest-mock-barrel-files/index.js +3 -2
- package/dist/cjs/rules/import/no-relative-barrel-file-imports/index.js +7 -3
- package/dist/cjs/rules/import/shared/jest-utils.js +62 -9
- package/dist/cjs/rules/import/shared/package-resolution.js +300 -22
- package/dist/cjs/rules/no-restricted-fedramp-imports/index.js +65 -0
- package/dist/cjs/rules/visit-example-type-import-required/index.js +409 -0
- package/dist/es2019/index.js +8 -1
- package/dist/es2019/rules/ensure-critical-dependency-resolutions/index.js +0 -1
- package/dist/es2019/rules/ensure-use-sync-external-store-server-snapshot/index.js +43 -0
- package/dist/es2019/rules/import/no-barrel-entry-imports/index.js +431 -25
- package/dist/es2019/rules/import/no-barrel-entry-jest-mock/index.js +287 -25
- package/dist/es2019/rules/import/no-jest-mock-barrel-files/index.js +3 -2
- package/dist/es2019/rules/import/no-relative-barrel-file-imports/index.js +7 -3
- package/dist/es2019/rules/import/shared/jest-utils.js +44 -0
- package/dist/es2019/rules/import/shared/package-resolution.js +211 -4
- package/dist/es2019/rules/no-restricted-fedramp-imports/index.js +47 -0
- package/dist/es2019/rules/visit-example-type-import-required/index.js +375 -0
- package/dist/esm/index.js +8 -1
- package/dist/esm/rules/ensure-critical-dependency-resolutions/index.js +0 -1
- package/dist/esm/rules/ensure-use-sync-external-store-server-snapshot/index.js +35 -0
- package/dist/esm/rules/import/no-barrel-entry-imports/index.js +535 -75
- package/dist/esm/rules/import/no-barrel-entry-jest-mock/index.js +430 -121
- package/dist/esm/rules/import/no-jest-mock-barrel-files/index.js +3 -2
- package/dist/esm/rules/import/no-relative-barrel-file-imports/index.js +7 -3
- package/dist/esm/rules/import/shared/jest-utils.js +61 -9
- package/dist/esm/rules/import/shared/package-resolution.js +298 -24
- package/dist/esm/rules/no-restricted-fedramp-imports/index.js +59 -0
- package/dist/esm/rules/visit-example-type-import-required/index.js +402 -0
- package/dist/types/index.d.ts +14 -0
- package/dist/types/rules/ensure-use-sync-external-store-server-snapshot/index.d.ts +3 -0
- package/dist/types/rules/import/shared/jest-utils.d.ts +8 -0
- package/dist/types/rules/import/shared/package-resolution.d.ts +47 -2
- package/dist/types/rules/no-restricted-fedramp-imports/index.d.ts +3 -0
- package/dist/types/rules/visit-example-type-import-required/index.d.ts +4 -0
- package/dist/types-ts4.5/index.d.ts +14 -0
- package/dist/types-ts4.5/rules/ensure-use-sync-external-store-server-snapshot/index.d.ts +3 -0
- package/dist/types-ts4.5/rules/import/shared/jest-utils.d.ts +8 -0
- package/dist/types-ts4.5/rules/import/shared/package-resolution.d.ts +47 -2
- package/dist/types-ts4.5/rules/no-restricted-fedramp-imports/index.d.ts +3 -0
- package/dist/types-ts4.5/rules/visit-example-type-import-required/index.d.ts +4 -0
- package/package.json +3 -1
|
@@ -671,7 +671,9 @@ function traceSymbolsToExports(_ref10) {
|
|
|
671
671
|
exportMap = _ref10.exportMap,
|
|
672
672
|
exportsMap = _ref10.exportsMap,
|
|
673
673
|
currentExportPath = _ref10.currentExportPath,
|
|
674
|
-
fs = _ref10.fs
|
|
674
|
+
fs = _ref10.fs,
|
|
675
|
+
barrelPackageName = _ref10.barrelPackageName,
|
|
676
|
+
preferImportedPackageSubpath = _ref10.preferImportedPackageSubpath;
|
|
675
677
|
var groupedByExport = new Map();
|
|
676
678
|
var crossPackageGroups = new Map();
|
|
677
679
|
var unmappedSymbols = [];
|
|
@@ -679,6 +681,7 @@ function traceSymbolsToExports(_ref10) {
|
|
|
679
681
|
_step13;
|
|
680
682
|
try {
|
|
681
683
|
for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
|
|
684
|
+
var _findExportForSourceF, _findExportForSourceF2;
|
|
682
685
|
var symbolName = _step13.value;
|
|
683
686
|
var exportInfo = exportMap.get(symbolName);
|
|
684
687
|
if (!exportInfo) {
|
|
@@ -688,25 +691,47 @@ function traceSymbolsToExports(_ref10) {
|
|
|
688
691
|
|
|
689
692
|
// Check for cross-package source first
|
|
690
693
|
if (exportInfo.crossPackageSource) {
|
|
691
|
-
var key =
|
|
694
|
+
var key = void 0;
|
|
695
|
+
var tracedOriginalName = exportInfo.originalName;
|
|
696
|
+
var barrelBridgeExportPath = void 0;
|
|
697
|
+
if (preferImportedPackageSubpath) {
|
|
698
|
+
var bridge = (0, _packageResolution.findCrossPackageBridgeExportPath)({
|
|
699
|
+
exportsMap: exportsMap,
|
|
700
|
+
crossPackageName: exportInfo.crossPackageSource.packageName,
|
|
701
|
+
exportedName: symbolName,
|
|
702
|
+
fs: fs
|
|
703
|
+
});
|
|
704
|
+
if (bridge) {
|
|
705
|
+
key = "".concat(barrelPackageName).concat(bridge.exportPath.slice(1));
|
|
706
|
+
barrelBridgeExportPath = bridge.exportPath;
|
|
707
|
+
if (bridge.entryPointExportName !== undefined) {
|
|
708
|
+
tracedOriginalName = bridge.entryPointExportName === symbolName ? undefined : bridge.entryPointExportName;
|
|
709
|
+
}
|
|
710
|
+
} else {
|
|
711
|
+
key = "".concat(exportInfo.crossPackageSource.packageName).concat(exportInfo.crossPackageSource.exportPath === '.' ? '' : exportInfo.crossPackageSource.exportPath.slice(1));
|
|
712
|
+
}
|
|
713
|
+
} else {
|
|
714
|
+
key = "".concat(exportInfo.crossPackageSource.packageName).concat(exportInfo.crossPackageSource.exportPath === '.' ? '' : exportInfo.crossPackageSource.exportPath.slice(1));
|
|
715
|
+
}
|
|
692
716
|
if (!crossPackageGroups.has(key)) {
|
|
693
717
|
crossPackageGroups.set(key, []);
|
|
694
718
|
}
|
|
695
719
|
crossPackageGroups.get(key).push({
|
|
696
720
|
symbolName: symbolName,
|
|
697
|
-
originalName:
|
|
721
|
+
originalName: tracedOriginalName,
|
|
698
722
|
sourceFilePath: exportInfo.path,
|
|
699
723
|
isTypeOnly: exportInfo.isTypeOnly,
|
|
700
|
-
crossPackageSource: exportInfo.crossPackageSource
|
|
724
|
+
crossPackageSource: exportInfo.crossPackageSource,
|
|
725
|
+
barrelBridgeExportPath: barrelBridgeExportPath
|
|
701
726
|
});
|
|
702
727
|
continue;
|
|
703
728
|
}
|
|
704
729
|
|
|
705
730
|
// First try to find an export that directly exposes the source file
|
|
706
|
-
var targetExportPath = (0, _packageResolution.findExportForSourceFile)({
|
|
731
|
+
var targetExportPath = (_findExportForSourceF = (_findExportForSourceF2 = (0, _packageResolution.findExportForSourceFile)({
|
|
707
732
|
sourceFilePath: exportInfo.path,
|
|
708
733
|
exportsMap: exportsMap
|
|
709
|
-
});
|
|
734
|
+
})) === null || _findExportForSourceF2 === void 0 ? void 0 : _findExportForSourceF2.exportPath) !== null && _findExportForSourceF !== void 0 ? _findExportForSourceF : null;
|
|
710
735
|
|
|
711
736
|
// If no direct match, check which export can provide this symbol
|
|
712
737
|
// (handles nested barrels where the symbol is re-exported through intermediate files)
|
|
@@ -766,16 +791,80 @@ function escapeRegExp(str) {
|
|
|
766
791
|
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
767
792
|
}
|
|
768
793
|
|
|
794
|
+
/** Mock object keys that are module interop metadata, not package exports. */
|
|
795
|
+
var ESM_INTEROP_MOCK_KEYS = new Set(['__esModule']);
|
|
796
|
+
|
|
797
|
+
/**
|
|
798
|
+
* If a preamble line is `const|let actual = jest.requireActual('<barrel>')`, rewrite the specifier to
|
|
799
|
+
* `targetImportPathForThisMock` when every `binding.<prop>` read in this split mock's implementation
|
|
800
|
+
* resolves to that same path via `symbolToNewImportPath`. Otherwise leave unchanged (e.g. mixed paths
|
|
801
|
+
* still need the barrel module).
|
|
802
|
+
*/
|
|
803
|
+
function rewritePreambleLineBarrelRequireActual(_ref12) {
|
|
804
|
+
var lineText = _ref12.lineText,
|
|
805
|
+
oldBarrelPath = _ref12.oldBarrelPath,
|
|
806
|
+
targetImportPathForThisMock = _ref12.targetImportPathForThisMock,
|
|
807
|
+
mockImplementationTextForGroup = _ref12.mockImplementationTextForGroup,
|
|
808
|
+
symbolToNewImportPath = _ref12.symbolToNewImportPath;
|
|
809
|
+
var requireActualRe = /jest\.requireActual(?:<[^>]*>)?\((['"])([^'"]+)\1\)/;
|
|
810
|
+
var requireMatch = requireActualRe.exec(lineText);
|
|
811
|
+
if (!requireMatch || requireMatch[2] !== oldBarrelPath) {
|
|
812
|
+
return lineText;
|
|
813
|
+
}
|
|
814
|
+
var quote = requireMatch[1];
|
|
815
|
+
var bindingMatch = /^\s*(?:const|let)\s+(\w+)\s*=/m.exec(lineText);
|
|
816
|
+
if (!bindingMatch) {
|
|
817
|
+
return lineText;
|
|
818
|
+
}
|
|
819
|
+
var binding = bindingMatch[1];
|
|
820
|
+
var propAccessRe = new RegExp("\\b".concat(escapeRegExp(binding), "\\.(\\w+)"), 'g');
|
|
821
|
+
var accessedProps = new Set();
|
|
822
|
+
var propMatch;
|
|
823
|
+
while ((propMatch = propAccessRe.exec(mockImplementationTextForGroup)) !== null) {
|
|
824
|
+
accessedProps.add(propMatch[1]);
|
|
825
|
+
}
|
|
826
|
+
if (accessedProps.size === 0) {
|
|
827
|
+
return lineText;
|
|
828
|
+
}
|
|
829
|
+
var resolvedPaths = [];
|
|
830
|
+
var _iterator14 = _createForOfIteratorHelper(accessedProps),
|
|
831
|
+
_step14;
|
|
832
|
+
try {
|
|
833
|
+
for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
|
|
834
|
+
var prop = _step14.value;
|
|
835
|
+
var mapped = symbolToNewImportPath.get(prop);
|
|
836
|
+
if (mapped) {
|
|
837
|
+
resolvedPaths.push(mapped);
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
} catch (err) {
|
|
841
|
+
_iterator14.e(err);
|
|
842
|
+
} finally {
|
|
843
|
+
_iterator14.f();
|
|
844
|
+
}
|
|
845
|
+
if (resolvedPaths.length === 0) {
|
|
846
|
+
return lineText;
|
|
847
|
+
}
|
|
848
|
+
var uniquePaths = new Set(resolvedPaths);
|
|
849
|
+
if (uniquePaths.size !== 1 || !uniquePaths.has(targetImportPathForThisMock)) {
|
|
850
|
+
return lineText;
|
|
851
|
+
}
|
|
852
|
+
return lineText.replace("jest.requireActual(".concat(quote).concat(oldBarrelPath).concat(quote, ")"), "jest.requireActual(".concat(quote).concat(targetImportPathForThisMock).concat(quote, ")"));
|
|
853
|
+
}
|
|
854
|
+
|
|
769
855
|
/**
|
|
770
856
|
* Generate fix text for multiple jest.mock calls
|
|
771
857
|
*/
|
|
772
|
-
function generateMockFixes(
|
|
773
|
-
var groups =
|
|
774
|
-
crossPackageGroups =
|
|
775
|
-
packageName =
|
|
776
|
-
mockProperties =
|
|
777
|
-
quote =
|
|
778
|
-
preambleStatements =
|
|
858
|
+
function generateMockFixes(_ref13) {
|
|
859
|
+
var groups = _ref13.groups,
|
|
860
|
+
crossPackageGroups = _ref13.crossPackageGroups,
|
|
861
|
+
packageName = _ref13.packageName,
|
|
862
|
+
mockProperties = _ref13.mockProperties,
|
|
863
|
+
quote = _ref13.quote,
|
|
864
|
+
preambleStatements = _ref13.preambleStatements,
|
|
865
|
+
propagateEsModuleFromOriginalMock = _ref13.propagateEsModuleFromOriginalMock,
|
|
866
|
+
oldBarrelImportPath = _ref13.oldBarrelImportPath,
|
|
867
|
+
symbolToNewImportPath = _ref13.symbolToNewImportPath;
|
|
779
868
|
var mockCalls = [];
|
|
780
869
|
|
|
781
870
|
// Helper to generate a single mock call
|
|
@@ -783,15 +872,15 @@ function generateMockFixes(_ref12) {
|
|
|
783
872
|
var propTexts = [];
|
|
784
873
|
propTexts.push("...jest.requireActual(".concat(quote).concat(fullImportPath).concat(quote, ")"));
|
|
785
874
|
|
|
786
|
-
// Add __esModule: true when mocking default exports
|
|
787
|
-
if (group.hasDefaultExport) {
|
|
875
|
+
// Add __esModule: true when mocking default exports, or when the original mock already used __esModule (apply to every split).
|
|
876
|
+
if (group.hasDefaultExport || propagateEsModuleFromOriginalMock) {
|
|
788
877
|
propTexts.push('__esModule: true');
|
|
789
878
|
}
|
|
790
|
-
var
|
|
791
|
-
|
|
879
|
+
var _iterator15 = _createForOfIteratorHelper(group.propertyNames),
|
|
880
|
+
_step15;
|
|
792
881
|
try {
|
|
793
|
-
for (
|
|
794
|
-
var propName =
|
|
882
|
+
for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
|
|
883
|
+
var propName = _step15.value;
|
|
795
884
|
// First try to get from group's propertyTexts (used for merged mocks)
|
|
796
885
|
var groupPropText = group.propertyTexts.get(propName);
|
|
797
886
|
if (groupPropText) {
|
|
@@ -825,21 +914,34 @@ function generateMockFixes(_ref12) {
|
|
|
825
914
|
}
|
|
826
915
|
}
|
|
827
916
|
}
|
|
828
|
-
|
|
829
|
-
// Determine if we need preamble for this group
|
|
830
917
|
} catch (err) {
|
|
831
|
-
|
|
918
|
+
_iterator15.e(err);
|
|
832
919
|
} finally {
|
|
833
|
-
|
|
920
|
+
_iterator15.f();
|
|
834
921
|
}
|
|
922
|
+
var combinedGroupImplText = group.propertyNames.map(function (name) {
|
|
923
|
+
var _ref14, _group$propertyTexts$, _mockProperties$get;
|
|
924
|
+
return (_ref14 = (_group$propertyTexts$ = group.propertyTexts.get(name)) !== null && _group$propertyTexts$ !== void 0 ? _group$propertyTexts$ : (_mockProperties$get = mockProperties.get(name)) === null || _mockProperties$get === void 0 ? void 0 : _mockProperties$get.text) !== null && _ref14 !== void 0 ? _ref14 : '';
|
|
925
|
+
}).join('\n');
|
|
926
|
+
|
|
927
|
+
// Determine if we need preamble for this group
|
|
835
928
|
var neededPreamble = getNeededPreamble({
|
|
836
929
|
propertyTexts: propTexts,
|
|
837
930
|
allPreamble: preambleStatements
|
|
838
931
|
});
|
|
932
|
+
var rewrittenPreamble = neededPreamble.map(function (p) {
|
|
933
|
+
return rewritePreambleLineBarrelRequireActual({
|
|
934
|
+
lineText: p.text,
|
|
935
|
+
oldBarrelPath: oldBarrelImportPath,
|
|
936
|
+
targetImportPathForThisMock: fullImportPath,
|
|
937
|
+
mockImplementationTextForGroup: combinedGroupImplText,
|
|
938
|
+
symbolToNewImportPath: symbolToNewImportPath
|
|
939
|
+
});
|
|
940
|
+
});
|
|
839
941
|
if (neededPreamble.length > 0) {
|
|
840
942
|
// Generate block body arrow function with preamble
|
|
841
|
-
var preambleLines =
|
|
842
|
-
return "\t".concat(
|
|
943
|
+
var preambleLines = rewrittenPreamble.map(function (text) {
|
|
944
|
+
return "\t".concat(text);
|
|
843
945
|
}).join('\n');
|
|
844
946
|
var formattedProps = propTexts.map(function (p) {
|
|
845
947
|
return "\t\t".concat(p, ",");
|
|
@@ -855,34 +957,34 @@ function generateMockFixes(_ref12) {
|
|
|
855
957
|
};
|
|
856
958
|
|
|
857
959
|
// Generate mocks for cross-package groups first
|
|
858
|
-
var
|
|
859
|
-
|
|
960
|
+
var _iterator16 = _createForOfIteratorHelper(crossPackageGroups),
|
|
961
|
+
_step16;
|
|
860
962
|
try {
|
|
861
|
-
for (
|
|
862
|
-
var group =
|
|
963
|
+
for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
|
|
964
|
+
var group = _step16.value;
|
|
863
965
|
mockCalls.push(generateMockCall(group, group.importPath));
|
|
864
966
|
}
|
|
865
967
|
|
|
866
968
|
// Generate mocks for same-package groups
|
|
867
969
|
} catch (err) {
|
|
868
|
-
|
|
970
|
+
_iterator16.e(err);
|
|
869
971
|
} finally {
|
|
870
|
-
|
|
972
|
+
_iterator16.f();
|
|
871
973
|
}
|
|
872
|
-
var
|
|
873
|
-
|
|
974
|
+
var _iterator17 = _createForOfIteratorHelper(groups),
|
|
975
|
+
_step17;
|
|
874
976
|
try {
|
|
875
|
-
for (
|
|
876
|
-
var _group =
|
|
977
|
+
for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
|
|
978
|
+
var _group = _step17.value;
|
|
877
979
|
var fullImportPath = "".concat(packageName).concat(_group.exportPath.slice(1));
|
|
878
980
|
mockCalls.push(generateMockCall(_group, fullImportPath));
|
|
879
981
|
}
|
|
880
982
|
|
|
881
983
|
// Join with semicolons but don't add trailing semicolon
|
|
882
984
|
} catch (err) {
|
|
883
|
-
|
|
985
|
+
_iterator17.e(err);
|
|
884
986
|
} finally {
|
|
885
|
-
|
|
987
|
+
_iterator17.f();
|
|
886
988
|
}
|
|
887
989
|
return mockCalls.join(';\n');
|
|
888
990
|
}
|
|
@@ -895,11 +997,11 @@ function generateMockFixes(_ref12) {
|
|
|
895
997
|
* Resolves jest.mock context for barrel file analysis.
|
|
896
998
|
* Returns null if the mock should not be processed.
|
|
897
999
|
*/
|
|
898
|
-
function resolveJestMockContext(
|
|
899
|
-
var importPath =
|
|
900
|
-
workspaceRoot =
|
|
901
|
-
fs =
|
|
902
|
-
applyToImportsFrom =
|
|
1000
|
+
function resolveJestMockContext(_ref15) {
|
|
1001
|
+
var importPath = _ref15.importPath,
|
|
1002
|
+
workspaceRoot = _ref15.workspaceRoot,
|
|
1003
|
+
fs = _ref15.fs,
|
|
1004
|
+
applyToImportsFrom = _ref15.applyToImportsFrom;
|
|
903
1005
|
if ((0, _fileSystem.isRelativeImport)(importPath)) {
|
|
904
1006
|
return null;
|
|
905
1007
|
}
|
|
@@ -962,9 +1064,9 @@ function resolveJestMockContext(_ref13) {
|
|
|
962
1064
|
/**
|
|
963
1065
|
* Check if the entry file is a barrel file (re-exports from other files)
|
|
964
1066
|
*/
|
|
965
|
-
function isBarrelFile(
|
|
966
|
-
var exportMap =
|
|
967
|
-
entryFilePath =
|
|
1067
|
+
function isBarrelFile(_ref16) {
|
|
1068
|
+
var exportMap = _ref16.exportMap,
|
|
1069
|
+
entryFilePath = _ref16.entryFilePath;
|
|
968
1070
|
return (0, _barrelParsing.hasReExportsFromOtherFiles)({
|
|
969
1071
|
exportMap: exportMap,
|
|
970
1072
|
sourceFilePath: entryFilePath
|
|
@@ -991,12 +1093,17 @@ var ruleMeta = {
|
|
|
991
1093
|
type: 'string'
|
|
992
1094
|
},
|
|
993
1095
|
description: 'The folder paths (relative to workspace root) containing packages whose imports will be checked and autofixed.'
|
|
1096
|
+
},
|
|
1097
|
+
preferImportedPackageSubpath: {
|
|
1098
|
+
type: 'boolean',
|
|
1099
|
+
description: 'Prefer subpaths on the mocked barrel package when they bridge to the dependency.'
|
|
994
1100
|
}
|
|
995
1101
|
},
|
|
996
1102
|
additionalProperties: false
|
|
997
1103
|
}],
|
|
998
1104
|
messages: {
|
|
999
|
-
barrelEntryMock: "jest.mock('{{path}}') is mocking a barrel file entry point. Split into separate mocks for each source file using package.json exports."
|
|
1105
|
+
barrelEntryMock: "jest.mock('{{path}}') is mocking a barrel file entry point. Split into separate mocks for each source file using package.json exports.",
|
|
1106
|
+
barrelEntryRequireActual: "jest.requireActual('{{path}}') references a barrel file entry point. Use a specific package.json export path instead."
|
|
1000
1107
|
}
|
|
1001
1108
|
};
|
|
1002
1109
|
|
|
@@ -1008,9 +1115,10 @@ function createRule(fs) {
|
|
|
1008
1115
|
return {
|
|
1009
1116
|
meta: ruleMeta,
|
|
1010
1117
|
create: function create(context) {
|
|
1011
|
-
var _options$applyToImpor;
|
|
1118
|
+
var _options$applyToImpor, _options$preferImport;
|
|
1012
1119
|
var options = context.options[0] || {};
|
|
1013
1120
|
var applyToImportsFrom = (_options$applyToImpor = options.applyToImportsFrom) !== null && _options$applyToImpor !== void 0 ? _options$applyToImpor : _fileSystem.DEFAULT_TARGET_FOLDERS;
|
|
1121
|
+
var preferImportedPackageSubpath = (_options$preferImport = options.preferImportedPackageSubpath) !== null && _options$preferImport !== void 0 ? _options$preferImport : false;
|
|
1014
1122
|
var workspaceRoot = (0, _fileSystem.findWorkspaceRoot)({
|
|
1015
1123
|
startPath: (0, _path.dirname)(context.filename),
|
|
1016
1124
|
fs: fs,
|
|
@@ -1019,6 +1127,136 @@ function createRule(fs) {
|
|
|
1019
1127
|
return {
|
|
1020
1128
|
CallExpression: function CallExpression(rawNode) {
|
|
1021
1129
|
var node = rawNode;
|
|
1130
|
+
|
|
1131
|
+
// Handle standalone jest.requireActual() calls that reference barrel entries.
|
|
1132
|
+
// e.g. jest.requireActual('@atlaskit/pkg').Foo or const { Foo } = jest.requireActual('@atlaskit/pkg')
|
|
1133
|
+
if ((0, _jestUtils.isJestRequireActual)(node)) {
|
|
1134
|
+
var raImportPath = (0, _jestUtils.extractImportPath)(node);
|
|
1135
|
+
if (!raImportPath) {
|
|
1136
|
+
return;
|
|
1137
|
+
}
|
|
1138
|
+
var raContext = resolveJestMockContext({
|
|
1139
|
+
importPath: raImportPath,
|
|
1140
|
+
workspaceRoot: workspaceRoot,
|
|
1141
|
+
fs: fs,
|
|
1142
|
+
applyToImportsFrom: applyToImportsFrom
|
|
1143
|
+
});
|
|
1144
|
+
if (!raContext) {
|
|
1145
|
+
return;
|
|
1146
|
+
}
|
|
1147
|
+
if (!isBarrelFile({
|
|
1148
|
+
exportMap: raContext.exportMap,
|
|
1149
|
+
entryFilePath: raContext.entryFilePath
|
|
1150
|
+
})) {
|
|
1151
|
+
return;
|
|
1152
|
+
}
|
|
1153
|
+
|
|
1154
|
+
// `jest.requireActual('<barrel>')` inside `jest.mock('<barrel>')` is handled by the mock
|
|
1155
|
+
// rule's fix (preamble retargeting + `jest.requireActual('barrel').x` rewriting), including
|
|
1156
|
+
// `const actual = jest.requireActual('<barrel>')` with no member access on the call.
|
|
1157
|
+
// Skip standalone handling here to avoid duplicate diagnostics.
|
|
1158
|
+
var ancestor = node.parent;
|
|
1159
|
+
while (ancestor) {
|
|
1160
|
+
if (ancestor.type === 'CallExpression' && (0, _jestUtils.isJestMockCall)(ancestor)) {
|
|
1161
|
+
var ancestorPath = (0, _jestUtils.extractImportPath)(ancestor);
|
|
1162
|
+
if (ancestorPath) {
|
|
1163
|
+
var ancestorCtx = resolveJestMockContext({
|
|
1164
|
+
importPath: ancestorPath,
|
|
1165
|
+
workspaceRoot: workspaceRoot,
|
|
1166
|
+
fs: fs,
|
|
1167
|
+
applyToImportsFrom: applyToImportsFrom
|
|
1168
|
+
});
|
|
1169
|
+
if (ancestorCtx && isBarrelFile({
|
|
1170
|
+
exportMap: ancestorCtx.exportMap,
|
|
1171
|
+
entryFilePath: ancestorCtx.entryFilePath
|
|
1172
|
+
})) {
|
|
1173
|
+
return;
|
|
1174
|
+
}
|
|
1175
|
+
}
|
|
1176
|
+
}
|
|
1177
|
+
ancestor = ancestor.parent;
|
|
1178
|
+
}
|
|
1179
|
+
|
|
1180
|
+
// Determine which symbols are accessed from the barrel
|
|
1181
|
+
var parent = node.parent;
|
|
1182
|
+
var accessedSymbols = [];
|
|
1183
|
+
if ((parent === null || parent === void 0 ? void 0 : parent.type) === 'MemberExpression' && parent.property.type === 'Identifier') {
|
|
1184
|
+
accessedSymbols.push(parent.property.name);
|
|
1185
|
+
} else if ((parent === null || parent === void 0 ? void 0 : parent.type) === 'VariableDeclarator' && parent.id.type === 'ObjectPattern') {
|
|
1186
|
+
var _iterator18 = _createForOfIteratorHelper(parent.id.properties),
|
|
1187
|
+
_step18;
|
|
1188
|
+
try {
|
|
1189
|
+
for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {
|
|
1190
|
+
var prop = _step18.value;
|
|
1191
|
+
if (prop.type === 'Property' && prop.key.type === 'Identifier') {
|
|
1192
|
+
accessedSymbols.push(prop.key.name);
|
|
1193
|
+
}
|
|
1194
|
+
}
|
|
1195
|
+
} catch (err) {
|
|
1196
|
+
_iterator18.e(err);
|
|
1197
|
+
} finally {
|
|
1198
|
+
_iterator18.f();
|
|
1199
|
+
}
|
|
1200
|
+
}
|
|
1201
|
+
if (accessedSymbols.length === 0) {
|
|
1202
|
+
context.report({
|
|
1203
|
+
node: node,
|
|
1204
|
+
messageId: 'barrelEntryRequireActual',
|
|
1205
|
+
data: {
|
|
1206
|
+
path: raImportPath
|
|
1207
|
+
}
|
|
1208
|
+
});
|
|
1209
|
+
return;
|
|
1210
|
+
}
|
|
1211
|
+
var _traceSymbolsToExport = traceSymbolsToExports({
|
|
1212
|
+
symbolNames: accessedSymbols,
|
|
1213
|
+
exportMap: raContext.exportMap,
|
|
1214
|
+
exportsMap: raContext.exportsMap,
|
|
1215
|
+
currentExportPath: raContext.currentExportPath,
|
|
1216
|
+
fs: fs,
|
|
1217
|
+
barrelPackageName: raContext.packageName,
|
|
1218
|
+
preferImportedPackageSubpath: preferImportedPackageSubpath
|
|
1219
|
+
}),
|
|
1220
|
+
_groupedByExport = _traceSymbolsToExport.groupedByExport,
|
|
1221
|
+
_crossPackageGroups = _traceSymbolsToExport.crossPackageGroups;
|
|
1222
|
+
var newPath = null;
|
|
1223
|
+
if (_groupedByExport.size === 1 && _crossPackageGroups.size === 0) {
|
|
1224
|
+
var _groupedByExport$keys = _groupedByExport.keys(),
|
|
1225
|
+
_groupedByExport$keys2 = (0, _slicedToArray2.default)(_groupedByExport$keys, 1),
|
|
1226
|
+
exportPath = _groupedByExport$keys2[0];
|
|
1227
|
+
newPath = "".concat(raContext.packageName).concat(exportPath.slice(1));
|
|
1228
|
+
} else if (_crossPackageGroups.size === 1 && _groupedByExport.size === 0) {
|
|
1229
|
+
var _crossPackageGroups$k = _crossPackageGroups.keys(),
|
|
1230
|
+
_crossPackageGroups$k2 = (0, _slicedToArray2.default)(_crossPackageGroups$k, 1),
|
|
1231
|
+
cpImportPath = _crossPackageGroups$k2[0];
|
|
1232
|
+
newPath = cpImportPath;
|
|
1233
|
+
}
|
|
1234
|
+
var _sourceCode = context.getSourceCode();
|
|
1235
|
+
if (newPath) {
|
|
1236
|
+
var resolvedNewPath = newPath;
|
|
1237
|
+
context.report({
|
|
1238
|
+
node: node,
|
|
1239
|
+
messageId: 'barrelEntryRequireActual',
|
|
1240
|
+
data: {
|
|
1241
|
+
path: raImportPath
|
|
1242
|
+
},
|
|
1243
|
+
fix: function fix(fixer) {
|
|
1244
|
+
var firstArg = node.arguments[0];
|
|
1245
|
+
var quote = _sourceCode.getText(firstArg)[0];
|
|
1246
|
+
return fixer.replaceText(firstArg, "".concat(quote).concat(resolvedNewPath).concat(quote));
|
|
1247
|
+
}
|
|
1248
|
+
});
|
|
1249
|
+
} else {
|
|
1250
|
+
context.report({
|
|
1251
|
+
node: node,
|
|
1252
|
+
messageId: 'barrelEntryRequireActual',
|
|
1253
|
+
data: {
|
|
1254
|
+
path: raImportPath
|
|
1255
|
+
}
|
|
1256
|
+
});
|
|
1257
|
+
}
|
|
1258
|
+
return;
|
|
1259
|
+
}
|
|
1022
1260
|
if (!(0, _jestUtils.isJestMockCall)(node)) {
|
|
1023
1261
|
return;
|
|
1024
1262
|
}
|
|
@@ -1065,17 +1303,22 @@ function createRule(fs) {
|
|
|
1065
1303
|
if (mockProperties.size === 0) {
|
|
1066
1304
|
return;
|
|
1067
1305
|
}
|
|
1068
|
-
var
|
|
1069
|
-
var
|
|
1306
|
+
var originalMockHadEsModule = mockProperties.has('__esModule');
|
|
1307
|
+
var symbolNames = Array.from(mockProperties.keys()).filter(function (name) {
|
|
1308
|
+
return !ESM_INTEROP_MOCK_KEYS.has(name);
|
|
1309
|
+
});
|
|
1310
|
+
var _traceSymbolsToExport2 = traceSymbolsToExports({
|
|
1070
1311
|
symbolNames: symbolNames,
|
|
1071
1312
|
exportMap: mockContext.exportMap,
|
|
1072
1313
|
exportsMap: mockContext.exportsMap,
|
|
1073
1314
|
currentExportPath: mockContext.currentExportPath,
|
|
1074
|
-
fs: fs
|
|
1315
|
+
fs: fs,
|
|
1316
|
+
barrelPackageName: mockContext.packageName,
|
|
1317
|
+
preferImportedPackageSubpath: preferImportedPackageSubpath
|
|
1075
1318
|
}),
|
|
1076
|
-
groupedByExport =
|
|
1077
|
-
crossPackageGroups =
|
|
1078
|
-
unmappedSymbols =
|
|
1319
|
+
groupedByExport = _traceSymbolsToExport2.groupedByExport,
|
|
1320
|
+
crossPackageGroups = _traceSymbolsToExport2.crossPackageGroups,
|
|
1321
|
+
unmappedSymbols = _traceSymbolsToExport2.unmappedSymbols;
|
|
1079
1322
|
|
|
1080
1323
|
// If no symbols can be mapped to specific exports or cross-package sources,
|
|
1081
1324
|
// there's nothing to fix so don't report an error
|
|
@@ -1083,20 +1326,20 @@ function createRule(fs) {
|
|
|
1083
1326
|
return;
|
|
1084
1327
|
}
|
|
1085
1328
|
var groups = [];
|
|
1086
|
-
var
|
|
1087
|
-
|
|
1329
|
+
var _iterator19 = _createForOfIteratorHelper(groupedByExport),
|
|
1330
|
+
_step19;
|
|
1088
1331
|
try {
|
|
1089
|
-
for (
|
|
1090
|
-
var
|
|
1091
|
-
|
|
1092
|
-
symbols =
|
|
1332
|
+
for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {
|
|
1333
|
+
var _step19$value = (0, _slicedToArray2.default)(_step19.value, 2),
|
|
1334
|
+
_exportPath = _step19$value[0],
|
|
1335
|
+
symbols = _step19$value[1];
|
|
1093
1336
|
// Build name mapping for aliased exports
|
|
1094
1337
|
var nameMapping = new Map();
|
|
1095
|
-
var
|
|
1096
|
-
|
|
1338
|
+
var _iterator25 = _createForOfIteratorHelper(symbols),
|
|
1339
|
+
_step25;
|
|
1097
1340
|
try {
|
|
1098
|
-
for (
|
|
1099
|
-
var s =
|
|
1341
|
+
for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) {
|
|
1342
|
+
var s = _step25.value;
|
|
1100
1343
|
if (s.originalName) {
|
|
1101
1344
|
nameMapping.set(s.symbolName, s.originalName);
|
|
1102
1345
|
}
|
|
@@ -1104,16 +1347,16 @@ function createRule(fs) {
|
|
|
1104
1347
|
|
|
1105
1348
|
// Check if any symbol in this group is a default export
|
|
1106
1349
|
} catch (err) {
|
|
1107
|
-
|
|
1350
|
+
_iterator25.e(err);
|
|
1108
1351
|
} finally {
|
|
1109
|
-
|
|
1352
|
+
_iterator25.f();
|
|
1110
1353
|
}
|
|
1111
1354
|
var hasDefaultExport = symbols.some(function (s) {
|
|
1112
1355
|
return s.originalName === 'default';
|
|
1113
1356
|
});
|
|
1114
1357
|
groups.push({
|
|
1115
|
-
exportPath:
|
|
1116
|
-
importPath: "".concat(mockContext.packageName).concat(
|
|
1358
|
+
exportPath: _exportPath,
|
|
1359
|
+
importPath: "".concat(mockContext.packageName).concat(_exportPath.slice(1)),
|
|
1117
1360
|
propertyNames: symbols.map(function (s) {
|
|
1118
1361
|
return s.symbolName;
|
|
1119
1362
|
}),
|
|
@@ -1127,25 +1370,25 @@ function createRule(fs) {
|
|
|
1127
1370
|
|
|
1128
1371
|
// Build cross-package groups
|
|
1129
1372
|
} catch (err) {
|
|
1130
|
-
|
|
1373
|
+
_iterator19.e(err);
|
|
1131
1374
|
} finally {
|
|
1132
|
-
|
|
1375
|
+
_iterator19.f();
|
|
1133
1376
|
}
|
|
1134
1377
|
var crossPackageMockGroups = [];
|
|
1135
|
-
var
|
|
1136
|
-
|
|
1378
|
+
var _iterator20 = _createForOfIteratorHelper(crossPackageGroups),
|
|
1379
|
+
_step20;
|
|
1137
1380
|
try {
|
|
1138
|
-
for (
|
|
1139
|
-
var
|
|
1140
|
-
_importPath =
|
|
1141
|
-
_symbols =
|
|
1381
|
+
for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {
|
|
1382
|
+
var _step20$value = (0, _slicedToArray2.default)(_step20.value, 2),
|
|
1383
|
+
_importPath = _step20$value[0],
|
|
1384
|
+
_symbols = _step20$value[1];
|
|
1142
1385
|
// Build name mapping for aliased exports
|
|
1143
1386
|
var _nameMapping = new Map();
|
|
1144
|
-
var
|
|
1145
|
-
|
|
1387
|
+
var _iterator26 = _createForOfIteratorHelper(_symbols),
|
|
1388
|
+
_step26;
|
|
1146
1389
|
try {
|
|
1147
|
-
for (
|
|
1148
|
-
var _s =
|
|
1390
|
+
for (_iterator26.s(); !(_step26 = _iterator26.n()).done;) {
|
|
1391
|
+
var _s = _step26.value;
|
|
1149
1392
|
if (_s.originalName) {
|
|
1150
1393
|
_nameMapping.set(_s.symbolName, _s.originalName);
|
|
1151
1394
|
}
|
|
@@ -1153,9 +1396,9 @@ function createRule(fs) {
|
|
|
1153
1396
|
|
|
1154
1397
|
// Check if any symbol in this group is a default export
|
|
1155
1398
|
} catch (err) {
|
|
1156
|
-
|
|
1399
|
+
_iterator26.e(err);
|
|
1157
1400
|
} finally {
|
|
1158
|
-
|
|
1401
|
+
_iterator26.f();
|
|
1159
1402
|
}
|
|
1160
1403
|
var _hasDefaultExport = _symbols.some(function (s) {
|
|
1161
1404
|
return s.originalName === 'default';
|
|
@@ -1163,8 +1406,9 @@ function createRule(fs) {
|
|
|
1163
1406
|
|
|
1164
1407
|
// Get cross-package source info from the first symbol (all symbols in same group have same source)
|
|
1165
1408
|
var crossPackageSource = _symbols[0].crossPackageSource;
|
|
1409
|
+
var bridgeExportPath = _symbols[0].barrelBridgeExportPath;
|
|
1166
1410
|
crossPackageMockGroups.push({
|
|
1167
|
-
exportPath: crossPackageSource.exportPath,
|
|
1411
|
+
exportPath: bridgeExportPath !== null && bridgeExportPath !== void 0 ? bridgeExportPath : crossPackageSource.exportPath,
|
|
1168
1412
|
importPath: _importPath,
|
|
1169
1413
|
propertyNames: _symbols.map(function (s) {
|
|
1170
1414
|
return s.symbolName;
|
|
@@ -1177,9 +1421,9 @@ function createRule(fs) {
|
|
|
1177
1421
|
});
|
|
1178
1422
|
}
|
|
1179
1423
|
} catch (err) {
|
|
1180
|
-
|
|
1424
|
+
_iterator20.e(err);
|
|
1181
1425
|
} finally {
|
|
1182
|
-
|
|
1426
|
+
_iterator20.f();
|
|
1183
1427
|
}
|
|
1184
1428
|
if (unmappedSymbols.length > 0) {
|
|
1185
1429
|
groups.push({
|
|
@@ -1221,11 +1465,11 @@ function createRule(fs) {
|
|
|
1221
1465
|
if (existingMock && existingMock.node !== node) {
|
|
1222
1466
|
// Merge properties from existing mock with new properties
|
|
1223
1467
|
var newPropertiesMap = new Map();
|
|
1224
|
-
var
|
|
1225
|
-
|
|
1468
|
+
var _iterator21 = _createForOfIteratorHelper(group.propertyNames),
|
|
1469
|
+
_step21;
|
|
1226
1470
|
try {
|
|
1227
|
-
for (
|
|
1228
|
-
var propName =
|
|
1471
|
+
for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {
|
|
1472
|
+
var propName = _step21.value;
|
|
1229
1473
|
var propInfo = mockProperties.get(propName);
|
|
1230
1474
|
if (propInfo) {
|
|
1231
1475
|
// Check if this property needs to be renamed (aliased export)
|
|
@@ -1246,9 +1490,9 @@ function createRule(fs) {
|
|
|
1246
1490
|
}
|
|
1247
1491
|
}
|
|
1248
1492
|
} catch (err) {
|
|
1249
|
-
|
|
1493
|
+
_iterator21.e(err);
|
|
1250
1494
|
} finally {
|
|
1251
|
-
|
|
1495
|
+
_iterator21.f();
|
|
1252
1496
|
}
|
|
1253
1497
|
var mergedProperties = mergeMockProperties({
|
|
1254
1498
|
existingProperties: existingMock.properties,
|
|
@@ -1260,10 +1504,10 @@ function createRule(fs) {
|
|
|
1260
1504
|
exportPath: group.exportPath,
|
|
1261
1505
|
importPath: group.importPath,
|
|
1262
1506
|
propertyNames: Array.from(mergedProperties.keys()),
|
|
1263
|
-
propertyTexts: new Map(Array.from(mergedProperties.entries()).map(function (
|
|
1264
|
-
var
|
|
1265
|
-
k =
|
|
1266
|
-
v =
|
|
1507
|
+
propertyTexts: new Map(Array.from(mergedProperties.entries()).map(function (_ref17) {
|
|
1508
|
+
var _ref18 = (0, _slicedToArray2.default)(_ref17, 2),
|
|
1509
|
+
k = _ref18[0],
|
|
1510
|
+
v = _ref18[1];
|
|
1267
1511
|
return [k, v.text];
|
|
1268
1512
|
})),
|
|
1269
1513
|
nameMapping: new Map(),
|
|
@@ -1278,32 +1522,46 @@ function createRule(fs) {
|
|
|
1278
1522
|
mergedGroups.push(group);
|
|
1279
1523
|
}
|
|
1280
1524
|
}
|
|
1281
|
-
var fixText = generateMockFixes({
|
|
1282
|
-
groups: mergedGroups,
|
|
1283
|
-
crossPackageGroups: crossPackageMockGroups,
|
|
1284
|
-
packageName: mockContext.packageName,
|
|
1285
|
-
mockProperties: mockProperties,
|
|
1286
|
-
quote: quote,
|
|
1287
|
-
preambleStatements: preambleStatements
|
|
1288
|
-
});
|
|
1289
|
-
|
|
1290
|
-
// Build a map of symbol name -> new import path for jest.requireMock() rewriting
|
|
1291
1525
|
var symbolToNewImportPath = new Map();
|
|
1292
1526
|
for (var _i4 = 0, _arr = [].concat(mergedGroups, crossPackageMockGroups); _i4 < _arr.length; _i4++) {
|
|
1293
1527
|
var _group2 = _arr[_i4];
|
|
1294
|
-
var
|
|
1295
|
-
|
|
1528
|
+
var _iterator22 = _createForOfIteratorHelper(_group2.propertyNames),
|
|
1529
|
+
_step22;
|
|
1296
1530
|
try {
|
|
1297
|
-
for (
|
|
1298
|
-
var _propName =
|
|
1531
|
+
for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {
|
|
1532
|
+
var _propName = _step22.value;
|
|
1299
1533
|
symbolToNewImportPath.set(_propName, _group2.importPath);
|
|
1300
1534
|
}
|
|
1301
1535
|
} catch (err) {
|
|
1302
|
-
|
|
1536
|
+
_iterator22.e(err);
|
|
1303
1537
|
} finally {
|
|
1304
|
-
|
|
1538
|
+
_iterator22.f();
|
|
1305
1539
|
}
|
|
1306
1540
|
}
|
|
1541
|
+
var fixText = generateMockFixes({
|
|
1542
|
+
groups: mergedGroups,
|
|
1543
|
+
crossPackageGroups: crossPackageMockGroups,
|
|
1544
|
+
packageName: mockContext.packageName,
|
|
1545
|
+
mockProperties: mockProperties,
|
|
1546
|
+
quote: quote,
|
|
1547
|
+
preambleStatements: preambleStatements,
|
|
1548
|
+
propagateEsModuleFromOriginalMock: originalMockHadEsModule,
|
|
1549
|
+
oldBarrelImportPath: oldImportPath,
|
|
1550
|
+
symbolToNewImportPath: symbolToNewImportPath
|
|
1551
|
+
});
|
|
1552
|
+
|
|
1553
|
+
// Post-process fixText to update jest.requireActual('barrel').Symbol
|
|
1554
|
+
// references embedded in property texts (e.g. inside jest.fn callbacks)
|
|
1555
|
+
fixText = fixText.replace(/jest\.requireActual(?:<[^>]*>)?\((['"])([^'"]+)\1\)\.(\w+)/g, function (match, _q, path, symbol) {
|
|
1556
|
+
if (path !== oldImportPath) {
|
|
1557
|
+
return match;
|
|
1558
|
+
}
|
|
1559
|
+
var newPath = symbolToNewImportPath.get(symbol);
|
|
1560
|
+
if (newPath && newPath !== path) {
|
|
1561
|
+
return match.replace(path, newPath);
|
|
1562
|
+
}
|
|
1563
|
+
return match;
|
|
1564
|
+
});
|
|
1307
1565
|
|
|
1308
1566
|
// Sort nodes by position
|
|
1309
1567
|
var sortedNodesToRemove = nodesToRemove.sort(function (a, b) {
|
|
@@ -1350,27 +1608,78 @@ function createRule(fs) {
|
|
|
1350
1608
|
return candidatePath === oldImportPath;
|
|
1351
1609
|
}
|
|
1352
1610
|
});
|
|
1353
|
-
var
|
|
1354
|
-
|
|
1611
|
+
var _iterator23 = _createForOfIteratorHelper(requireMockCalls),
|
|
1612
|
+
_step23;
|
|
1355
1613
|
try {
|
|
1356
|
-
for (
|
|
1357
|
-
var requireMockNode =
|
|
1614
|
+
for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {
|
|
1615
|
+
var requireMockNode = _step23.value;
|
|
1358
1616
|
var requireMockArg = requireMockNode.arguments[0];
|
|
1359
1617
|
if (!requireMockArg) {
|
|
1360
1618
|
continue;
|
|
1361
1619
|
}
|
|
1362
|
-
var
|
|
1620
|
+
var _newPath = (0, _jestUtils.resolveNewPathForRequireMock)({
|
|
1363
1621
|
requireMockNode: requireMockNode,
|
|
1364
1622
|
symbolToNewPath: symbolToNewImportPath
|
|
1365
1623
|
});
|
|
1366
|
-
if (
|
|
1367
|
-
fixes.push(fixer.replaceText(requireMockArg, "".concat(quote).concat(
|
|
1624
|
+
if (_newPath) {
|
|
1625
|
+
fixes.push(fixer.replaceText(requireMockArg, "".concat(quote).concat(_newPath).concat(quote)));
|
|
1368
1626
|
}
|
|
1369
1627
|
}
|
|
1628
|
+
|
|
1629
|
+
// Fix jest.requireActual() calls that reference the old barrel path.
|
|
1630
|
+
// Only fix calls OUTSIDE the replaced jest.mock node range
|
|
1631
|
+
// (calls inside it are handled via fixText string replacement below).
|
|
1632
|
+
} catch (err) {
|
|
1633
|
+
_iterator23.e(err);
|
|
1634
|
+
} finally {
|
|
1635
|
+
_iterator23.f();
|
|
1636
|
+
}
|
|
1637
|
+
var replacedRanges = sortedNodesToRemove.map(function (n) {
|
|
1638
|
+
return n.range;
|
|
1639
|
+
});
|
|
1640
|
+
var requireActualCalls = (0, _jestUtils.findJestRequireActualCalls)({
|
|
1641
|
+
ast: ast,
|
|
1642
|
+
matchPath: function matchPath(candidatePath) {
|
|
1643
|
+
return candidatePath === oldImportPath;
|
|
1644
|
+
}
|
|
1645
|
+
});
|
|
1646
|
+
var _iterator24 = _createForOfIteratorHelper(requireActualCalls),
|
|
1647
|
+
_step24;
|
|
1648
|
+
try {
|
|
1649
|
+
var _loop = function _loop() {
|
|
1650
|
+
var raNode = _step24.value;
|
|
1651
|
+
var raArg = raNode.arguments[0];
|
|
1652
|
+
if (!raArg || !raNode.range) {
|
|
1653
|
+
return 0; // continue
|
|
1654
|
+
}
|
|
1655
|
+
|
|
1656
|
+
// Skip calls inside any node being replaced (ranges overlap)
|
|
1657
|
+
var insideReplacedNode = replacedRanges.some(function (_ref19) {
|
|
1658
|
+
var _ref20 = (0, _slicedToArray2.default)(_ref19, 2),
|
|
1659
|
+
start = _ref20[0],
|
|
1660
|
+
end = _ref20[1];
|
|
1661
|
+
return raNode.range[0] >= start && raNode.range[1] <= end;
|
|
1662
|
+
});
|
|
1663
|
+
if (insideReplacedNode) {
|
|
1664
|
+
return 0; // continue
|
|
1665
|
+
}
|
|
1666
|
+
var newPath = (0, _jestUtils.resolveNewPathForRequireMock)({
|
|
1667
|
+
requireMockNode: raNode,
|
|
1668
|
+
symbolToNewPath: symbolToNewImportPath
|
|
1669
|
+
});
|
|
1670
|
+
if (newPath) {
|
|
1671
|
+
fixes.push(fixer.replaceText(raArg, "".concat(quote).concat(newPath).concat(quote)));
|
|
1672
|
+
}
|
|
1673
|
+
},
|
|
1674
|
+
_ret;
|
|
1675
|
+
for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {
|
|
1676
|
+
_ret = _loop();
|
|
1677
|
+
if (_ret === 0) continue;
|
|
1678
|
+
}
|
|
1370
1679
|
} catch (err) {
|
|
1371
|
-
|
|
1680
|
+
_iterator24.e(err);
|
|
1372
1681
|
} finally {
|
|
1373
|
-
|
|
1682
|
+
_iterator24.f();
|
|
1374
1683
|
}
|
|
1375
1684
|
return fixes;
|
|
1376
1685
|
}
|