Comparing version 1.7.1 to 1.8.0
'use strict' | ||
const lockfile = require('@yarnpkg/lockfile') | ||
const eol = require('eol') | ||
const nmtree = require('nmtree') | ||
const { buildYarnTree, buildNpmTree } = require('./tree') | ||
const { join } = require('path') | ||
const { readJson } = require('../util/read') | ||
const { convertYarnToNpmV1, convertNpmV1ToYarn } = require('./lockfileV1') | ||
const { convertYarnToNpmV2, convertNpmV2ToYarn } = require('./lockfileV2') | ||
module.exports = { | ||
convertYarnToNpm (yarnLock, name, version, packageDir) { | ||
const yarnLockNormalized = eol.lf(yarnLock) | ||
const yarnObject = lockfile.parse(yarnLockNormalized).object | ||
const nodeModulesTree = nmtree(packageDir) | ||
const dependencies = buildNpmTree(nodeModulesTree, yarnObject) | ||
return JSON.stringify({ | ||
name, | ||
version, | ||
lockfileVersion: 1, | ||
requires: true, | ||
dependencies | ||
}) | ||
const packageJson = readJson(join(packageDir, 'package.json')) | ||
// NOTE workspaces require lockfile v2 | ||
return packageJson.workspaces | ||
? convertYarnToNpmV2(yarnLock, name, version, packageDir, packageJson) | ||
: convertYarnToNpmV1(yarnLock, name, version, packageDir, packageJson) | ||
}, | ||
convertNpmToYarn (packageLockFileString, packageDir) { | ||
const packageLock = JSON.parse(packageLockFileString) | ||
const nodeModulesTree = nmtree(packageDir) | ||
const yarnTree = buildYarnTree(nodeModulesTree, packageLock) | ||
return lockfile.stringify(yarnTree) | ||
const { lockfileVersion } = packageLock | ||
return lockfileVersion === 2 | ||
? convertNpmV2ToYarn(packageLockFileString, packageDir) | ||
: convertNpmV1ToYarn(packageLockFileString, packageDir) | ||
} | ||
} |
{ | ||
"name": "synp", | ||
"version": "1.7.1", | ||
"version": "1.8.0", | ||
"description": "Convert yarn.lock to package-lock.json and vice versa", | ||
@@ -19,3 +19,4 @@ "keywords": [ | ||
"scripts": { | ||
"test": "standard && tape ./test/*.spec.js", | ||
"test": "standard && npm run test:unit", | ||
"test:unit": "tape ./test/*.spec.js", | ||
"coverage": "nyc --reporter=lcov npm test", | ||
@@ -31,17 +32,19 @@ "coveralls": "nyc npm test && nyc report --reporter=text-lcov | coveralls" | ||
"dependencies": { | ||
"@yarnpkg/lockfile": "^1.0.0", | ||
"colors": "^1.1.2", | ||
"commander": "^2.11.0", | ||
"@yarnpkg/lockfile": "^1.1.0", | ||
"bash-glob": "^2.0.0", | ||
"colors": "^1.4.0", | ||
"commander": "^6.0.0", | ||
"eol": "^0.9.1", | ||
"lodash": "4.17.13", | ||
"nmtree": "^1.0.3", | ||
"request": "^2.79.0" | ||
"lodash": "4.17.20", | ||
"nmtree": "^1.0.6", | ||
"request": "^2.88.2", | ||
"sort-object-keys": "^1.1.3" | ||
}, | ||
"devDependencies": { | ||
"coveralls": "^3.0.0", | ||
"nyc": "13.3.0", | ||
"sinon": "^4.1.2", | ||
"standard": "^12.0.0", | ||
"tape": "^4.8.0" | ||
"coveralls": "^3.1.0", | ||
"nyc": "15.1.0", | ||
"sinon": "^4.5.0", | ||
"standard": "^14.3.4", | ||
"tape": "^5.0.1" | ||
} | ||
} |
@@ -313,3 +313,3 @@ 'use strict' | ||
test('translate package-lock to yarn.lock when integrity is absent', async t => { | ||
test('translate package-lock to yarn.lock when integrity url hash is absent, but integrity field is present', async t => { | ||
try { | ||
@@ -320,2 +320,3 @@ t.plan(1) | ||
const res = npmToYarn(path) | ||
t.deepEquals( | ||
@@ -399,1 +400,29 @@ lockfile.parse(res), | ||
}) | ||
test('translate yarn.lock with workspaces to package-lock and vice versa', async t => { | ||
try { | ||
t.plan(2) | ||
const path = `${__dirname}/fixtures/yarn-workspace` | ||
const packageLockSnap = fs.readFileSync(`${path}/.package-lock-snapshot.json`, 'utf-8') | ||
const yarnLockSnap = fs.readFileSync(`${path}/.yarn-lock-snapshot`, 'utf-8') | ||
fs.writeFileSync(`${path}/yarn.lock`, yarnLockSnap) | ||
const packageLock = yarnToNpm(path) | ||
t.deepEquals( | ||
JSON.parse(packageLock), | ||
JSON.parse(packageLockSnap), | ||
'result is equal to package-lock.json snapshot' | ||
) | ||
fs.writeFileSync(`${path}/package-lock.json`, packageLockSnap) | ||
const yarnLock = npmToYarn(path) | ||
t.deepEquals( | ||
lockfile.parse(yarnLock), | ||
lockfile.parse(yarnLockSnap), | ||
'result is equal to yarn.lock snapshot' | ||
) | ||
} catch (e) { | ||
t.fail(e.stack) | ||
t.end() | ||
} | ||
}) |
@@ -16,3 +16,4 @@ 'use strict' | ||
function replaceNonSha1 (yarnObj, resolvedWithNonSha1Hashes) { | ||
return Object.assign({}, yarnObj, { object: | ||
return Object.assign({}, yarnObj, { | ||
object: | ||
Object.keys(yarnObj.object).reduce((memo, packageName) => { | ||
@@ -32,7 +33,8 @@ const entry = yarnObj.object[packageName] | ||
function normalizePackageLock (npmObj, resolvedWithNonSha1Hashes) { | ||
return Object.assign({}, npmObj, { dependencies: | ||
return Object.assign({}, npmObj, { | ||
dependencies: | ||
Object.keys(npmObj.dependencies).reduce((memo, packageName) => { | ||
const entry = npmObj.dependencies[packageName] | ||
if (resolvedWithNonSha1Hashes.indexOf(entry.resolved) !== -1) { | ||
memo[packageName] = Object.assign({}, entry, { integrity: `N/A` }) | ||
memo[packageName] = Object.assign({}, entry, { integrity: 'N/A' }) | ||
} else { | ||
@@ -39,0 +41,0 @@ memo[packageName] = entry |
@@ -62,3 +62,3 @@ 'use strict' | ||
Object.keys(entry).forEach(version => { | ||
const { semvers } = entry[version] | ||
const { semvers, integrity } = entry[version] | ||
const nonUrlVersion = extractVersion(version, packageName) | ||
@@ -80,6 +80,8 @@ semvers && semvers.forEach(sver => { | ||
} | ||
formatted[`${packageName}@${sver}`] = Object.assign({}, versionEntry, { | ||
semvers: undefined, | ||
version: nonUrlVersion, | ||
resolved | ||
resolved, | ||
integrity | ||
}) | ||
@@ -86,0 +88,0 @@ }) |
@@ -6,11 +6,9 @@ 'use strict' | ||
function parentPackagePath (parentPath) { | ||
const dirs = parentPath.split(path.sep) | ||
const pathDirs = dirs.slice(0, dirs.length - 1) | ||
if (pathDirs[pathDirs.length - 1] === 'node_modules') { | ||
return parentPackagePath(pathDirs.join(path.sep)) | ||
} else if (pathDirs.join(path.sep) === parentPath) { | ||
const nmPos = parentPath.lastIndexOf('/node_modules/') | ||
if (nmPos === -1) { | ||
throw new Error('Could not find parent dir!') | ||
} else { | ||
return pathDirs.join(path.sep) | ||
} | ||
return parentPath.slice(0, nmPos) | ||
} | ||
@@ -78,3 +76,4 @@ | ||
}, []) | ||
} | ||
}, | ||
parentPackagePath | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
199618
28
1394
9
7
+ Addedbash-glob@^2.0.0
+ Addedsort-object-keys@^1.1.3
+ Addedarr-union@3.1.0(transitive)
+ Addedbash-glob@2.0.0(transitive)
+ Addedbash-path@1.0.3(transitive)
+ Addedcommander@6.2.1(transitive)
+ Addedcomponent-emitter@1.3.1(transitive)
+ Addedcross-spawn@5.1.0(transitive)
+ Addedeach-parallel-async@1.0.0(transitive)
+ Addedextend-shallow@2.0.1(transitive)
+ Addedis-extendable@0.1.1(transitive)
+ Addedis-extglob@2.1.1(transitive)
+ Addedis-glob@4.0.3(transitive)
+ Addedis-windows@1.0.2(transitive)
+ Addedisexe@2.0.0(transitive)
+ Addedlodash@4.17.20(transitive)
+ Addedlru-cache@4.1.5(transitive)
+ Addedpseudomap@1.0.2(transitive)
+ Addedshebang-command@1.2.0(transitive)
+ Addedshebang-regex@1.0.0(transitive)
+ Addedsort-object-keys@1.1.3(transitive)
+ Addedwhich@1.3.1(transitive)
+ Addedyallist@2.1.2(transitive)
- Removedlodash@4.17.13(transitive)
Updated@yarnpkg/lockfile@^1.1.0
Updatedcolors@^1.4.0
Updatedcommander@^6.0.0
Updatedlodash@4.17.20
Updatednmtree@^1.0.6
Updatedrequest@^2.88.2