Skip to content

Commit f31e802

Browse files
committed
feat(utils): rename props, provide packageRootPath
Signed-off-by: Charlike Mike Reagent <[email protected]>
1 parent df4dac3 commit f31e802

File tree

3 files changed

+74
-19
lines changed

3 files changed

+74
-19
lines changed

@tunnckocore/utils/src/index.js

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -79,19 +79,19 @@ function parseJson(fp) {
7979

8080
function getWorkspacesAndExtensions(cwd = process.cwd()) {
8181
const fromRoot = (...x) => path.resolve(cwd, ...x);
82-
const packagePath = fromRoot('package.json');
83-
const lernaPath = fromRoot('lerna.json');
84-
const pkg = parseJson(packagePath);
85-
const lerna = parseJson(lernaPath);
82+
const packageJsonPath = fromRoot('package.json');
83+
const lernaJsonPath = fromRoot('lerna.json');
84+
const packageJson = parseJson(packageJsonPath);
85+
const lernaJson = parseJson(lernaJsonPath);
8686

8787
const workspaces = []
88-
.concat(lerna.packages || (pkg.workspaces || []))
88+
.concat(lernaJson.packages || (packageJson.workspaces || []))
8989
.filter((x) => typeof x === 'string')
9090
.filter(Boolean)
9191
.reduce((acc, ws) => acc.concat(ws.split(',')), [])
9292
.map((ws) => path.dirname(ws));
9393
// console.log('workspaces', workspaces);
94-
let exts = [].concat(pkg.extensions).filter(Boolean);
94+
let exts = [].concat(packageJson.extensions).filter(Boolean);
9595

9696
if (exts.length === 0) {
9797
exts = ['tsx', 'ts', 'jsx', ...EXTENSIONS];
@@ -102,5 +102,17 @@ function getWorkspacesAndExtensions(cwd = process.cwd()) {
102102

103103
const extensions = exts.map((x) => `.${x}`);
104104

105-
return { workspaces, extensions, exts, lerna, lernaPath, pkg, packagePath };
105+
const fpath = [lernaJsonPath, packageJsonPath].find((x) => fs.existsSync(x));
106+
const packageRootPath = fpath ? path.dirname(fpath) : null;
107+
108+
return {
109+
workspaces,
110+
extensions,
111+
exts,
112+
lernaJson,
113+
lernaJsonPath,
114+
packageJson,
115+
packageJsonPath,
116+
packageRootPath,
117+
};
106118
}

@tunnckocore/utils/test/index.js

Lines changed: 54 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ test('get extensions and workspaces - no workspaces', () => {
1212
const result = getWorkspacesAndExtensions(rootDir);
1313

1414
expect(result.workspaces).toStrictEqual([]);
15-
expect(result.lerna).toStrictEqual({});
15+
expect(result.lernaJson).toStrictEqual({});
1616
expect(result.exts).toStrictEqual(['tsx', 'ts', 'jsx', 'js', 'mjs']);
1717
expect(result.extensions).toStrictEqual([
1818
'.tsx',
@@ -31,10 +31,10 @@ test('getWorkspacesAndExtensions - correct workspaces', () => {
3131
expect(result.workspaces).toStrictEqual(['@tunnckocore', '@helios']);
3232
expect(result.extensions).toStrictEqual(['.js', '.jsx', '.ts']);
3333
expect(result.exts).toStrictEqual(['js', 'jsx', 'ts']);
34-
expect(result.lerna).toStrictEqual({
34+
expect(result.lernaJson).toStrictEqual({
3535
packages: ['@tunnckocore/*', '@helios/*'],
3636
});
37-
expect(result.pkg).toStrictEqual({
37+
expect(result.packageJson).toStrictEqual({
3838
name: 'lerna-monorepo',
3939
extensions: result.exts,
4040
});
@@ -45,6 +45,13 @@ test('createAliases return empty alias object', () => {
4545
const result = createAliases(cwd);
4646

4747
expect(result.alias).toStrictEqual({});
48+
expect(typeof result.packageJsonPath).toStrictEqual('string');
49+
expect(result.packageJsonPath.startsWith(cwd)).toStrictEqual(true);
50+
51+
expect(typeof result.lernaJsonPath).toStrictEqual('string');
52+
expect(result.lernaJsonPath.startsWith(cwd)).toStrictEqual(true);
53+
54+
expect(result.packageRootPath).toStrictEqual(null);
4855
});
4956

5057
test('createAliases return correct aliases for yarn workspaces', () => {
@@ -59,14 +66,16 @@ test('createAliases return correct aliases for yarn workspaces', () => {
5966
}, {});
6067

6168
expect(result.alias).toStrictEqual(toAliases('src'));
62-
expect(result.lerna).toStrictEqual({});
69+
expect(result.lernaJson).toStrictEqual({});
6370
expect(result.exts).toStrictEqual(['js', 'ts']);
64-
expect(result.pkg).toStrictEqual({
71+
expect(result.packageJson).toStrictEqual({
6572
extensions: result.exts,
6673
workspaces: ['@tunnckocore/*', '@hela/*'],
6774
});
68-
expect(result.lernaPath).toStrictEqual(path.join(yarnRoot, 'lerna.json'));
69-
expect(result.packagePath).toStrictEqual(path.join(yarnRoot, 'package.json'));
75+
expect(result.lernaJsonPath).toStrictEqual(path.join(yarnRoot, 'lerna.json'));
76+
expect(result.packageJsonPath).toStrictEqual(
77+
path.join(yarnRoot, 'package.json'),
78+
);
7079
});
7180

7281
test('createAliases return correct aliases for Lerna workspaces', () => {
@@ -81,16 +90,18 @@ test('createAliases return correct aliases for Lerna workspaces', () => {
8190
}, {});
8291

8392
expect(res.alias).toStrictEqual(toAliases(''));
84-
expect(res.lerna).toStrictEqual({
93+
expect(res.lernaJson).toStrictEqual({
8594
packages: ['@tunnckocore/*', '@helios/*'],
8695
});
8796
expect(res.exts).toStrictEqual(['js', 'jsx', 'ts']);
88-
expect(res.pkg).toStrictEqual({
97+
expect(res.packageJson).toStrictEqual({
8998
name: 'lerna-monorepo',
9099
extensions: ['js', 'jsx', 'ts'],
91100
});
92-
expect(res.lernaPath).toStrictEqual(path.join(lernaRoot, 'lerna.json'));
93-
expect(res.packagePath).toStrictEqual(path.join(lernaRoot, 'package.json'));
101+
expect(res.lernaJsonPath).toStrictEqual(path.join(lernaRoot, 'lerna.json'));
102+
expect(res.packageJsonPath).toStrictEqual(
103+
path.join(lernaRoot, 'package.json'),
104+
);
94105
});
95106

96107
test('isMonorepo - true for workspaces root', () => {
@@ -101,3 +112,35 @@ test('isMonorepo - true for workspaces root', () => {
101112
test('isMonorepo - false regular repository', () => {
102113
expect(isMonorepo(path.dirname(__dirname))).toStrictEqual(false);
103114
});
115+
116+
test('correct *Path properties when Lerna monorepo', () => {
117+
const lernaRoot = path.join(__dirname, 'fixtures', 'lerna');
118+
const result = createAliases(lernaRoot);
119+
120+
expect(typeof result.lernaJsonPath).toStrictEqual('string');
121+
expect(typeof result.packageJsonPath).toStrictEqual('string');
122+
expect(typeof result.packageRootPath).toStrictEqual('string');
123+
124+
expect(path.dirname(result.lernaJsonPath)).toStrictEqual(
125+
result.packageRootPath,
126+
);
127+
128+
expect(result.packageJson).toBeTruthy();
129+
expect(typeof result.packageJson).toStrictEqual('object');
130+
});
131+
132+
test('correct *Path properties when Yarn Workspaces monorepo', () => {
133+
const yarnWorkspaces = path.join(__dirname, 'fixtures', 'yarn-workspaces');
134+
const result = createAliases(yarnWorkspaces);
135+
136+
expect(typeof result.lernaJsonPath).toStrictEqual('string');
137+
expect(typeof result.packageJsonPath).toStrictEqual('string');
138+
expect(typeof result.packageRootPath).toStrictEqual('string');
139+
140+
expect(path.dirname(result.packageJsonPath)).toStrictEqual(
141+
result.packageRootPath,
142+
);
143+
144+
expect(result.packageJson).toBeTruthy();
145+
expect(typeof result.packageJson).toStrictEqual('object');
146+
});

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
"build": "jest -c jest.build.config.js",
2323
"release": "lerna version && lerna publish from-package",
2424
"cr": "node create-package.js",
25-
"resque": "lerna exec 'babel src -d dist/main --presets @tunnckocore --source-maps both' --stream"
25+
"resque": "lerna exec 'babel src -d dist/main --presets @tunnckocore --source-maps both' --stream --scope '@tunnckocore/*jest-runner*' --scope 'jest-runner-rollup'"
2626
},
2727
"dependencies": {
2828
"@babel/cli": "^7.6.0",

0 commit comments

Comments
 (0)