(key, deps)
| 2840 | } |
| 2841 | |
| 2842 | function parseGraphRecursive (key, deps) { |
| 2843 | if (isLoopToken(key)) { |
| 2844 | return key |
| 2845 | } |
| 2846 | const name = /^(.[^@]*)@/.exec(key)[1] |
| 2847 | const version = /^.[^@]*@([^ ]*)/.exec(key)[1] |
| 2848 | const workspace = / \(workspace\)/.test(key) |
| 2849 | const peer = / \(peer\)/.test(key) |
| 2850 | const normalizedDeps = typeof deps === 'string' ? { [deps]: {} } : deps |
| 2851 | const dependencies = Object.entries(normalizedDeps).map(([key, value]) => parseGraphRecursive(key, value)) |
| 2852 | return { name, version, workspace, peer, dependencies } |
| 2853 | } |
| 2854 | |
| 2855 | tap.test('undeclared workspaces are not hoisted to root node_modules', async t => { |
| 2856 | // Regression test: all workspace packages were unconditionally symlinked into root node_modules/. |
no test coverage detected