| 89 | } |
| 90 | |
| 91 | async function syncPackage(token, pkg, progress) { |
| 92 | progress(`${pkg} start`); |
| 93 | const json = await pacote.packument(pkg); |
| 94 | |
| 95 | const createPackage = await fetch( |
| 96 | `${REG}/packages/package/legacy@${HOST}/${enc(pkg)}`, |
| 97 | { |
| 98 | method: 'PUT', |
| 99 | body: '{}', |
| 100 | headers: { |
| 101 | 'content-type': 'application/json', |
| 102 | authorization: `Bearer ${token}` |
| 103 | } |
| 104 | } |
| 105 | ); |
| 106 | |
| 107 | if (createPackage.status > 399) { |
| 108 | progress( |
| 109 | `${pkg} saw ${createPackage.status}: ${await createPackage.text()}` |
| 110 | ); |
| 111 | return; |
| 112 | } |
| 113 | |
| 114 | const versions = Object.keys(json.versions); |
| 115 | const latest = json['dist-tags'].latest; |
| 116 | |
| 117 | // Because entropic does not let users modify the latest tag, we have |
| 118 | // to be sure to mirror the version pointed at by "latest" last. |
| 119 | if (latest) { |
| 120 | const idx = versions.indexOf(latest); |
| 121 | const tmp = versions[versions.length - 1]; |
| 122 | versions[versions.length - 1] = versions[idx]; |
| 123 | versions[idx] = tmp; |
| 124 | } |
| 125 | |
| 126 | if (createPackage.status === 200) { |
| 127 | return [ |
| 128 | ...new Set( |
| 129 | versions |
| 130 | .map(v => Object.keys(json.versions[v].dependencies || {})) |
| 131 | .flat() |
| 132 | ) |
| 133 | ]; |
| 134 | } |
| 135 | |
| 136 | if (createPackage.status > 399) { |
| 137 | progress( |
| 138 | `package failed with ${ |
| 139 | createPackage.status |
| 140 | }: ${await createPackage.text()}` |
| 141 | ); |
| 142 | return [ |
| 143 | ...new Set( |
| 144 | versions |
| 145 | .map(v => Object.keys(json.versions[v].dependencies || {})) |
| 146 | .flat() |
| 147 | ) |
| 148 | ]; |