nodejs/corepack

Corepack strips empty lines from package.json when inserting `packageManager`

msbit opened this issue · 1 comments

If I have a package.json with some empty lines (in this case intentionally), that doesn't specify packageManager, then running a shim (for example yarn install) adds the packageManager attribute but removes the empty lines. I would expect that any existing whitespace in the file would be preserved.

Versions

$ corepack --version
0.28.2
$ node --version
v18.20.2

Reproduction

For example, starting with:

{
  "name": "example",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "android": "react-native run-android",
    "ios": "react-native run-ios",
    "lint": "eslint .",
    "start": "react-native start",
    "test": "jest",

    "postinstall": "patch-package"
  },
  "dependencies": {
    "react": "18.2.0",
    "react-native": "0.73.8",

    "@react-native-async-storage/async-storage": "1.23.1",
    "@react-native-community/datetimepicker": "8.0.1",
    "@react-native-community/netinfo": "11.3.1",
    "@react-navigation/native": "~6.0.13",
    "@react-navigation/stack": "~6.3.2",
    "Base64": "^1.1.0",
    "deprecated-react-native-prop-types": "~4.1.0",
    "lodash": "^4.17.15",
    "moment": "^2.24.0",
    "moment-range": "^4.0.2",
    "rc-swipeout": "~2.0.11",
    "react-native-animatable": "^1.3.3",
    "react-native-blob-util": "~0.18.3",
    "react-native-camera": "~4.2.1",
    "react-native-draggable-flatlist": "~4.0.1",
    "react-native-elements": "~2.1.0",
    "react-native-fs": "~2.18.0",
    "react-native-gesture-handler": "~2.16.1",
    "react-native-image-picker": "2.3.0",
    "react-native-keyboard-aware-scroll-view": "~0.9.5",
    "react-native-linear-gradient": "^2.5.6",
    "react-native-markdown-renderer": "^3.2.8",
    "react-native-modal-selector": "~2.0.9",
    "react-native-orientation-locker": "1.4.0",
    "react-native-pdf": "~6.6.2",
    "react-native-reanimated": "~3.10.1",
    "react-native-safe-area-context": "4.10.1",
    "react-native-screens": "3.31.1",
    "react-native-signature-capture": "^0.4.10",
    "react-native-svg": "15.2.0",
    "react-native-svg-charts": "^5.3.0",
    "react-native-table-component": "~1.2.2",
    "react-native-vector-icons": "~9.2.0",
    "react-native-video": "~5.2.1",
    "react-native-webview": "13.8.6",
    "react-redux": "~7.2.9",
    "redux": "^4.0.4",
    "redux-persist": "^6.0.0",
    "redux-persist-filesystem-storage": "~4.2.0"
  },
  "devDependencies": {
    "@babel/core": "^7.20.0",
    "@babel/preset-env": "^7.20.0",
    "@babel/runtime": "^7.20.0",
    "@react-native/babel-preset": "0.73.21",
    "@react-native/eslint-config": "0.73.2",
    "@react-native/metro-config": "0.73.5",
    "@react-native/typescript-config": "0.73.1",
    "@types/react": "^18.2.6",
    "@types/react-test-renderer": "^18.0.0",
    "babel-jest": "^29.6.3",
    "eslint": "^8.19.0",
    "jest": "^29.6.3",
    "prettier": "2.8.8",
    "react-test-renderer": "18.2.0",
    "typescript": "5.0.4",

    "@babel/plugin-transform-class-properties": "~7.22.5",
    "@babel/plugin-transform-private-methods": "~7.22.5",
    "@testing-library/jest-native": "^5.4.2",
    "@testing-library/react-native": "^7.2.0",
    "babel-eslint": "^10.1.0",
    "eslint-plugin-react": "^7.20.6",
    "eslint-plugin-react-native": "~4.0.0",
    "patch-package": "~7.0.0"
  },
  "engines": {
    "node": ">=18"
  }
}

running:

yarn install

modifies this to:

{
  "name": "example",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "android": "react-native run-android",
    "ios": "react-native run-ios",
    "lint": "eslint .",
    "start": "react-native start",
    "test": "jest",
    "postinstall": "patch-package"
  },
  "dependencies": {
    "react": "18.2.0",
    "react-native": "0.73.8",
    "@react-native-async-storage/async-storage": "1.23.1",
    "@react-native-community/datetimepicker": "8.0.1",
    "@react-native-community/netinfo": "11.3.1",
    "@react-navigation/native": "~6.0.13",
    "@react-navigation/stack": "~6.3.2",
    "Base64": "^1.1.0",
    "deprecated-react-native-prop-types": "~4.1.0",
    "lodash": "^4.17.15",
    "moment": "^2.24.0",
    "moment-range": "^4.0.2",
    "rc-swipeout": "~2.0.11",
    "react-native-animatable": "^1.3.3",
    "react-native-blob-util": "~0.18.3",
    "react-native-camera": "~4.2.1",
    "react-native-draggable-flatlist": "~4.0.1",
    "react-native-elements": "~2.1.0",
    "react-native-fs": "~2.18.0",
    "react-native-gesture-handler": "~2.16.1",
    "react-native-image-picker": "2.3.0",
    "react-native-keyboard-aware-scroll-view": "~0.9.5",
    "react-native-linear-gradient": "^2.5.6",
    "react-native-markdown-renderer": "^3.2.8",
    "react-native-modal-selector": "~2.0.9",
    "react-native-orientation-locker": "1.4.0",
    "react-native-pdf": "~6.6.2",
    "react-native-reanimated": "~3.10.1",
    "react-native-safe-area-context": "4.10.1",
    "react-native-screens": "3.31.1",
    "react-native-signature-capture": "^0.4.10",
    "react-native-svg": "15.2.0",
    "react-native-svg-charts": "^5.3.0",
    "react-native-table-component": "~1.2.2",
    "react-native-vector-icons": "~9.2.0",
    "react-native-video": "~5.2.1",
    "react-native-webview": "13.8.6",
    "react-redux": "~7.2.9",
    "redux": "^4.0.4",
    "redux-persist": "^6.0.0",
    "redux-persist-filesystem-storage": "~4.2.0"
  },
  "devDependencies": {
    "@babel/core": "^7.20.0",
    "@babel/preset-env": "^7.20.0",
    "@babel/runtime": "^7.20.0",
    "@react-native/babel-preset": "0.73.21",
    "@react-native/eslint-config": "0.73.2",
    "@react-native/metro-config": "0.73.5",
    "@react-native/typescript-config": "0.73.1",
    "@types/react": "^18.2.6",
    "@types/react-test-renderer": "^18.0.0",
    "babel-jest": "^29.6.3",
    "eslint": "^8.19.0",
    "jest": "^29.6.3",
    "prettier": "2.8.8",
    "react-test-renderer": "18.2.0",
    "typescript": "5.0.4",
    "@babel/plugin-transform-class-properties": "~7.22.5",
    "@babel/plugin-transform-private-methods": "~7.22.5",
    "@testing-library/jest-native": "^5.4.2",
    "@testing-library/react-native": "^7.2.0",
    "babel-eslint": "^10.1.0",
    "eslint-plugin-react": "^7.20.6",
    "eslint-plugin-react-native": "~4.0.0",
    "patch-package": "~7.0.0"
  },
  "engines": {
    "node": ">=18"
  },
  "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
}

same issue