pob 9.15.1 → 10.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +76 -0
- package/lib/generators/app/PobAppGenerator.js +5 -2
- package/lib/generators/app/ignorePaths.js +1 -1
- package/lib/generators/app/nextjs/AppNextjsGenerator.js +2 -1
- package/lib/generators/common/babel/CommonBabelGenerator.js +10 -14
- package/lib/generators/common/babel/templates/app.rollup.config.mjs.ejs +1 -0
- package/lib/generators/common/babel/templates/lib.rollup.config.mjs.txt +3 -1
- package/lib/generators/common/format-lint/CommonLintGenerator.js +52 -22
- package/lib/generators/common/testing/CommonTestingGenerator.js +3 -0
- package/lib/generators/common/testing/templates/babel.config.cjs.ejs +5 -0
- package/lib/generators/common/typescript/CommonTypescriptGenerator.js +37 -16
- package/lib/generators/common/typescript/templates/tsconfig.build.json.ejs +8 -12
- package/lib/generators/common/typescript/templates/tsconfig.json.ejs +34 -12
- package/lib/generators/core/ci/templates/github-action-node-workflow.yml.ejs +4 -4
- package/lib/generators/core/vscode/CoreVSCodeGenerator.js +11 -1
- package/lib/generators/core/yarn/CoreYarnGenerator.js +1 -0
- package/lib/generators/lib/doc/templates/tsconfig.doc.json.ejs +0 -7
- package/lib/generators/monorepo/PobMonorepoGenerator.js +45 -2
- package/lib/generators/monorepo/lerna/MonorepoLernaGenerator.js +0 -2
- package/lib/generators/monorepo/templates/monorepo.rollup.config.mjs.ejs +9 -0
- package/lib/pob.js +6 -0
- package/lib/utils/inLerna.js +2 -4
- package/package.json +8 -8
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,82 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [10.0.0](https://github.com/christophehurpeau/pob/compare/pob@9.16.2...pob@10.0.0) (2022-02-12)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **deps:** update dependency @yarnpkg/parsers to v2.5.0-rc.12 ([#1195](https://github.com/christophehurpeau/pob/issues/1195)) ([90c432e](https://github.com/christophehurpeau/pob/commit/90c432e9c714db95901bec29f3899d4ac8f24bd8))
|
|
12
|
+
* **deps:** update dependency @yarnpkg/parsers to v2.5.0-rc.13 ([#1200](https://github.com/christophehurpeau/pob/issues/1200)) ([8351d60](https://github.com/christophehurpeau/pob/commit/8351d60fee9b6629fbba5876eaf142af3a3bc544))
|
|
13
|
+
* **pob:** nextjs generator ([5f814dd](https://github.com/christophehurpeau/pob/commit/5f814dd9243c46d5b96fdc8b01adadaa044f2734))
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Features
|
|
17
|
+
|
|
18
|
+
* **deps:** update dependency eslint to v8.9.0 ([#1202](https://github.com/christophehurpeau/pob/issues/1202)) ([0c59870](https://github.com/christophehurpeau/pob/commit/0c59870f0cb4e9c7bf5a478446164de297c44ea8))
|
|
19
|
+
* **pob:** add watch in monorepo with rollup ([eba1e69](https://github.com/christophehurpeau/pob/commit/eba1e693149807b5a139eda1036b8d131e7a7228))
|
|
20
|
+
* **pob:** improve nextjs config ([17c4daf](https://github.com/christophehurpeau/pob/commit/17c4dafd3af2f982e0e0b260b7d5352f1e9f8c36))
|
|
21
|
+
* use react jsx-runtime ([5c8bd2b](https://github.com/christophehurpeau/pob/commit/5c8bd2ba8fc1153537a26e3439852fab4c7878de))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
### BREAKING CHANGES
|
|
25
|
+
|
|
26
|
+
* requires react with jsx-supported runtime
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
## [9.16.2](https://github.com/christophehurpeau/pob/compare/pob@9.16.1...pob@9.16.2) (2022-02-06)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
### Bug Fixes
|
|
36
|
+
|
|
37
|
+
* add missing cwd in apps to work in monorepo ([d8357bc](https://github.com/christophehurpeau/pob/commit/d8357bceb325cb14b90a86bf0a89168aad58565b))
|
|
38
|
+
* **deps:** update @pob/eslint-config to v48.1.1 ([#1193](https://github.com/christophehurpeau/pob/issues/1193)) ([bc8b133](https://github.com/christophehurpeau/pob/commit/bc8b1336982c6461e17645cef40d719cd1a8ac1c))
|
|
39
|
+
* **pob:** add missing @babel/core in monorepo with pob-babel ([4595747](https://github.com/christophehurpeau/pob/commit/45957478be9d01e56ffcffc8d2f9bec3a9899b9a))
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
## [9.16.1](https://github.com/christophehurpeau/pob/compare/pob@9.16.0...pob@9.16.1) (2022-02-06)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
### Bug Fixes
|
|
49
|
+
|
|
50
|
+
* dont add rollup.config.mjs for non typescript monorepos ([848e578](https://github.com/christophehurpeau/pob/commit/848e57843d03eeb6fd9d5544eff085248110c711))
|
|
51
|
+
* **pob:** always add engines ([7095ad3](https://github.com/christophehurpeau/pob/commit/7095ad3388d503f4a752403530c2e7c24b385248))
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
# [9.16.0](https://github.com/christophehurpeau/pob/compare/pob@9.15.1...pob@9.16.0) (2022-02-05)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
### Bug Fixes
|
|
61
|
+
|
|
62
|
+
* **pob:** add monorpeo generaterd rollup config file to ignored paths ([c08328b](https://github.com/christophehurpeau/pob/commit/c08328b9f4970b3488bcd0bfe9f23bcc282144f7))
|
|
63
|
+
* dont delete vscode directory inside monorepo ([837bfe5](https://github.com/christophehurpeau/pob/commit/837bfe577cbf5c892fab95f0f19ff19c9e971f1e))
|
|
64
|
+
* **deps:** update dependency @yarnpkg/parsers to v2.5.0-rc.11 ([#1187](https://github.com/christophehurpeau/pob/issues/1187)) ([70d8a9a](https://github.com/christophehurpeau/pob/commit/70d8a9acfa0325349d465a0ee0539937535026d8))
|
|
65
|
+
* **pob:** ci tsc before eslint to build cache ([92d60de](https://github.com/christophehurpeau/pob/commit/92d60de3d616ed712d7ee4ba42d4d702670afd41))
|
|
66
|
+
* **pob:** generate vscode config for eslint in monorepo workspace ([ebdb9cc](https://github.com/christophehurpeau/pob/commit/ebdb9cc1f8c5b4e5ac325e37fa44c20616779a6a))
|
|
67
|
+
* **pob:** make sure build-state.yml doesnt exists ([322d582](https://github.com/christophehurpeau/pob/commit/322d5826627ba74a188f381e37a1365fe390baa2))
|
|
68
|
+
* dont set isolatedModules to false now that composite is supported with isolatedModules ([5d0816d](https://github.com/christophehurpeau/pob/commit/5d0816d9da90765aba168bd694d2a8e7f696ec46))
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
### Features
|
|
72
|
+
|
|
73
|
+
* better composite tsc config ([edef88e](https://github.com/christophehurpeau/pob/commit/edef88ef046c18498f6909c3dbeef2289cb418f9))
|
|
74
|
+
* much faster monorepo build with only one rollup command ([c4bafc3](https://github.com/christophehurpeau/pob/commit/c4bafc3be0c06a0a2446d37d176a043835693752))
|
|
75
|
+
* support linaria in jest config ([2e26479](https://github.com/christophehurpeau/pob/commit/2e26479be7016a383c74ee14669aa3a19d3a5a75))
|
|
76
|
+
* **deps:** update @pob/eslint-config to v48.1.0 ([#1188](https://github.com/christophehurpeau/pob/issues/1188)) ([75dd637](https://github.com/christophehurpeau/pob/commit/75dd6373d04359e12beb3b48f54ae2a541af4765))
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
|
|
6
82
|
## [9.15.1](https://github.com/christophehurpeau/pob/compare/pob@9.15.0...pob@9.15.1) (2022-01-29)
|
|
7
83
|
|
|
8
84
|
**Note:** Version bump only for package pob
|
|
@@ -135,6 +135,7 @@ export default class PobAppGenerator extends Generator {
|
|
|
135
135
|
|
|
136
136
|
this.composeWith('pob:common:typescript', {
|
|
137
137
|
enable: babel,
|
|
138
|
+
// nextjs now supports src rootDir: this.appConfig.type === 'next.js' ? '.' : 'src',
|
|
138
139
|
builddefs: false,
|
|
139
140
|
dom: browser,
|
|
140
141
|
jsx,
|
|
@@ -144,11 +145,12 @@ export default class PobAppGenerator extends Generator {
|
|
|
144
145
|
if (
|
|
145
146
|
this.appConfig.type === 'alp' ||
|
|
146
147
|
this.appConfig.type === 'pobpack' ||
|
|
147
|
-
this.appConfig.type === 'node'
|
|
148
|
+
this.appConfig.type === 'node' ||
|
|
149
|
+
this.appConfig.type === 'next.js'
|
|
148
150
|
) {
|
|
149
151
|
return './src';
|
|
150
152
|
}
|
|
151
|
-
if (this.appConfig.type === 'next.js') return '.';
|
|
153
|
+
// if (this.appConfig.type === 'next.js') return '.';
|
|
152
154
|
return '';
|
|
153
155
|
})(),
|
|
154
156
|
});
|
|
@@ -172,6 +174,7 @@ export default class PobAppGenerator extends Generator {
|
|
|
172
174
|
babel,
|
|
173
175
|
node,
|
|
174
176
|
browser,
|
|
177
|
+
// nextjs now supports src rootAsSrc: this.appConfig.type === 'next.js',
|
|
175
178
|
enableSrcResolver: true,
|
|
176
179
|
packageManager: this.options.packageManager,
|
|
177
180
|
yarnNodeLinker: this.options.yarnNodeLinker,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export const appIgnorePaths = {
|
|
2
2
|
alp: (config) => ['# alp paths', '/build', '/public', '/data'],
|
|
3
|
-
'next.js': (config) => ['# next.js paths', '/.next', '/out'],
|
|
3
|
+
'next.js': (config) => ['# next.js paths', '/.next', '/out', '/build'],
|
|
4
4
|
pobpack: (config) => ['/build', '/public'],
|
|
5
5
|
node: (config) => ['/dist'],
|
|
6
6
|
other: (config) => [],
|
|
@@ -17,8 +17,9 @@ export default class AppNextjsGenerator extends Generator {
|
|
|
17
17
|
const pkg = this.fs.readJSON(this.destinationPath('package.json'));
|
|
18
18
|
|
|
19
19
|
packageUtils.addScripts(pkg, {
|
|
20
|
+
start: 'next dev',
|
|
21
|
+
'start:prod': 'next start',
|
|
20
22
|
build: 'next build',
|
|
21
|
-
start: 'next',
|
|
22
23
|
});
|
|
23
24
|
|
|
24
25
|
this.fs.writeJSON(this.destinationPath('package.json'), pkg);
|
|
@@ -271,16 +271,18 @@ export default class CommonBabelGenerator extends Generator {
|
|
|
271
271
|
if (this.options.isApp) {
|
|
272
272
|
packageUtils.removeScripts(['watch']);
|
|
273
273
|
packageUtils.addOrRemoveScripts(pkg, useBabel, {
|
|
274
|
-
build: '
|
|
275
|
-
|
|
276
|
-
|
|
274
|
+
'clean:build': 'rm -Rf dist',
|
|
275
|
+
build: 'yarn clean:build && rollup --config rollup.config.mjs',
|
|
276
|
+
start: 'yarn clean:build && rollup --config rollup.config.mjs --watch',
|
|
277
|
+
clean: 'yarn clean:build',
|
|
277
278
|
});
|
|
278
279
|
} else {
|
|
279
280
|
packageUtils.removeScripts(['start']);
|
|
280
281
|
packageUtils.addOrRemoveScripts(pkg, useBabel, {
|
|
281
|
-
build: '
|
|
282
|
-
|
|
283
|
-
|
|
282
|
+
'clean:build': 'rm -Rf dist',
|
|
283
|
+
build: 'yarn clean:build && rollup --config rollup.config.mjs',
|
|
284
|
+
watch: 'yarn clean:build && rollup --config rollup.config.mjs --watch',
|
|
285
|
+
clean: 'yarn clean:build',
|
|
284
286
|
});
|
|
285
287
|
}
|
|
286
288
|
|
|
@@ -340,7 +342,6 @@ export default class CommonBabelGenerator extends Generator {
|
|
|
340
342
|
]);
|
|
341
343
|
|
|
342
344
|
packageUtils.removeDevDependencies(pkg, [
|
|
343
|
-
'rollup',
|
|
344
345
|
'babel-preset-env', // now @babel/preset-env
|
|
345
346
|
'babel-preset-jsdoc',
|
|
346
347
|
'babel-plugin-add-jsdoc-annotations',
|
|
@@ -400,13 +401,8 @@ export default class CommonBabelGenerator extends Generator {
|
|
|
400
401
|
} else {
|
|
401
402
|
packageUtils.removeDependencies(pkg, ['@types/node']);
|
|
402
403
|
packageUtils.removeDevDependencies(pkg, ['@types/node']);
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
if (Object.keys(pkg.engines).length === 0) delete pkg.engines;
|
|
406
|
-
} else {
|
|
407
|
-
// Supported LTS versions of node, that supports ESM modules.
|
|
408
|
-
pkg.engines.node = '^14.13.1 || >=16.0.0';
|
|
409
|
-
}
|
|
404
|
+
// Supported LTS versions of node, that supports ESM modules.
|
|
405
|
+
pkg.engines.node = '^14.13.1 || >=16.0.0';
|
|
410
406
|
}
|
|
411
407
|
|
|
412
408
|
/* browserslist */
|
|
@@ -47,6 +47,13 @@ export default class CommonLintGenerator extends Generator {
|
|
|
47
47
|
desc: 'Enable resolving from src directory',
|
|
48
48
|
});
|
|
49
49
|
|
|
50
|
+
this.option('rootAsSrc', {
|
|
51
|
+
type: Boolean,
|
|
52
|
+
required: false,
|
|
53
|
+
defaults: false,
|
|
54
|
+
desc: 'src directory is root',
|
|
55
|
+
});
|
|
56
|
+
|
|
50
57
|
this.option('appTypes', {
|
|
51
58
|
type: String,
|
|
52
59
|
required: false,
|
|
@@ -368,19 +375,16 @@ export default class CommonLintGenerator extends Generator {
|
|
|
368
375
|
this.fs.delete(`${eslintrcBadPath}.yml`);
|
|
369
376
|
this.fs.delete(`${eslintrcBadPath}.js`);
|
|
370
377
|
|
|
371
|
-
const rootEslintrcPath = this.
|
|
378
|
+
const rootEslintrcPath = this.options.rootAsSrc
|
|
379
|
+
? false
|
|
380
|
+
: this.destinationPath('.eslintrc.json');
|
|
372
381
|
|
|
373
|
-
const srcEslintrcPath = this.
|
|
374
|
-
|
|
375
|
-
|
|
382
|
+
const srcEslintrcPath = this.options.rootAsSrc
|
|
383
|
+
? this.destinationPath('.eslintrc.json')
|
|
384
|
+
: this.destinationPath(`${useBabel ? 'src/' : 'lib/'}.eslintrc.json`);
|
|
376
385
|
|
|
377
386
|
const useTypescript = useBabel;
|
|
378
|
-
|
|
379
|
-
try {
|
|
380
|
-
if (this.fs.exists(rootEslintrcPath)) {
|
|
381
|
-
ensureJsonFileFormatted(rootEslintrcPath);
|
|
382
|
-
}
|
|
383
|
-
|
|
387
|
+
const getRootIgnorePatterns = () => {
|
|
384
388
|
const ignorePatterns = new Set();
|
|
385
389
|
|
|
386
390
|
if (inLerna && !inLerna.root && (this.options.typescript || pkg.types)) {
|
|
@@ -394,6 +398,9 @@ export default class CommonLintGenerator extends Generator {
|
|
|
394
398
|
if ((!inLerna || !inLerna.root) && useBabel) {
|
|
395
399
|
ignorePatterns.add('/dist', '/test');
|
|
396
400
|
}
|
|
401
|
+
if (inLerna && inLerna.root && this.options.typescript) {
|
|
402
|
+
ignorePatterns.add('/rollup.config.mjs');
|
|
403
|
+
}
|
|
397
404
|
|
|
398
405
|
if (this.options.ignorePaths) {
|
|
399
406
|
this.options.ignorePaths
|
|
@@ -405,19 +412,34 @@ export default class CommonLintGenerator extends Generator {
|
|
|
405
412
|
});
|
|
406
413
|
}
|
|
407
414
|
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
{
|
|
411
|
-
extendsConfig: extendsConfigRoot,
|
|
412
|
-
ignorePatterns:
|
|
413
|
-
ignorePatterns.size === 0 ? undefined : [...ignorePatterns],
|
|
414
|
-
},
|
|
415
|
-
);
|
|
415
|
+
return ignorePatterns;
|
|
416
|
+
};
|
|
416
417
|
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
418
|
+
if (rootEslintrcPath) {
|
|
419
|
+
try {
|
|
420
|
+
if (this.fs.exists(rootEslintrcPath)) {
|
|
421
|
+
ensureJsonFileFormatted(rootEslintrcPath);
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
const rootIgnorePatterns = getRootIgnorePatterns();
|
|
425
|
+
|
|
426
|
+
const rootEslintrcConfig = updateEslintConfig(
|
|
427
|
+
this.fs.readJSON(rootEslintrcPath, {}),
|
|
428
|
+
{
|
|
429
|
+
extendsConfig: extendsConfigRoot,
|
|
430
|
+
ignorePatterns:
|
|
431
|
+
rootIgnorePatterns.size === 0
|
|
432
|
+
? undefined
|
|
433
|
+
: [...rootIgnorePatterns],
|
|
434
|
+
},
|
|
435
|
+
);
|
|
436
|
+
|
|
437
|
+
writeAndFormatJson(this.fs, rootEslintrcPath, rootEslintrcConfig);
|
|
438
|
+
} catch (err) {
|
|
439
|
+
console.warn(`Could not parse/edit ${rootEslintrcPath}: `, err);
|
|
440
|
+
}
|
|
420
441
|
}
|
|
442
|
+
// no else: dont delete root eslintrc, src is root
|
|
421
443
|
|
|
422
444
|
if ((inLerna && inLerna.root) || this.options.monorepo) {
|
|
423
445
|
if (this.fs.exists(srcEslintrcPath)) {
|
|
@@ -429,6 +451,13 @@ export default class CommonLintGenerator extends Generator {
|
|
|
429
451
|
ensureJsonFileFormatted(srcEslintrcPath);
|
|
430
452
|
}
|
|
431
453
|
|
|
454
|
+
const ignorePatterns = this.options.rootAsSrc
|
|
455
|
+
? getRootIgnorePatterns()
|
|
456
|
+
: new Set();
|
|
457
|
+
if (useTypescript || pkg.types) {
|
|
458
|
+
ignorePatterns.add('*.d.ts');
|
|
459
|
+
}
|
|
460
|
+
|
|
432
461
|
const srcEslintrcConfig = updateEslintConfig(
|
|
433
462
|
this.fs.readJSON(srcEslintrcPath, {}),
|
|
434
463
|
{
|
|
@@ -436,7 +465,8 @@ export default class CommonLintGenerator extends Generator {
|
|
|
436
465
|
jestOverride,
|
|
437
466
|
useTypescript: useBabel,
|
|
438
467
|
globalEslint,
|
|
439
|
-
ignorePatterns:
|
|
468
|
+
ignorePatterns:
|
|
469
|
+
ignorePatterns.size === 0 ? undefined : [...ignorePatterns],
|
|
440
470
|
settings: {
|
|
441
471
|
'import/resolver': this.options.enableSrcResolver
|
|
442
472
|
? {
|
|
@@ -272,6 +272,9 @@ export default class CommonTestingGenerator extends Generator {
|
|
|
272
272
|
])
|
|
273
273
|
.join(', '),
|
|
274
274
|
hasReact,
|
|
275
|
+
hasLinaria:
|
|
276
|
+
!!pkg.devDependencies?.['@linaria/babel-preset'] ||
|
|
277
|
+
!!pkg.devDependencies?.['alp-dev'],
|
|
275
278
|
testing: this.options.testing,
|
|
276
279
|
jestExperimentalESM: pkg.type === 'module',
|
|
277
280
|
},
|
|
@@ -12,10 +12,15 @@ module.exports = function babelConfig(api) {
|
|
|
12
12
|
<% if (hasReact) { %>, [
|
|
13
13
|
'@babel/preset-react',
|
|
14
14
|
{
|
|
15
|
+
runtime: 'automatic',
|
|
15
16
|
development: false,
|
|
16
17
|
useBuiltIns: true,
|
|
18
|
+
useSpread: true,
|
|
17
19
|
},
|
|
18
20
|
]<% } %>
|
|
21
|
+
<% if (hasLinaria) { %>, [
|
|
22
|
+
'@linaria/babel-preset'
|
|
23
|
+
]<% } %>
|
|
19
24
|
],
|
|
20
25
|
};
|
|
21
26
|
};
|
|
@@ -14,6 +14,12 @@ export default class CommonTypescriptGenerator extends Generator {
|
|
|
14
14
|
desc: 'enable typescript',
|
|
15
15
|
});
|
|
16
16
|
|
|
17
|
+
this.option('rootDir', {
|
|
18
|
+
type: String,
|
|
19
|
+
defaults: 'src',
|
|
20
|
+
desc: 'customize rootDir',
|
|
21
|
+
});
|
|
22
|
+
|
|
17
23
|
this.option('jsx', {
|
|
18
24
|
type: Boolean,
|
|
19
25
|
defaults: true,
|
|
@@ -71,7 +77,7 @@ export default class CommonTypescriptGenerator extends Generator {
|
|
|
71
77
|
if (this.options.enable) {
|
|
72
78
|
const { jsx, dom } = this.options;
|
|
73
79
|
let composite;
|
|
74
|
-
let
|
|
80
|
+
let monorepoPackageBuildReferences;
|
|
75
81
|
let monorepoPackageSrcPaths;
|
|
76
82
|
|
|
77
83
|
if (inLerna && !inLerna.root) {
|
|
@@ -89,26 +95,39 @@ export default class CommonTypescriptGenerator extends Generator {
|
|
|
89
95
|
['typescript'],
|
|
90
96
|
);
|
|
91
97
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
(
|
|
95
|
-
(
|
|
96
|
-
|
|
97
|
-
|
|
98
|
+
const packageLocations = new Map(
|
|
99
|
+
yoConfig.pob.monorepo.packageNames
|
|
100
|
+
.filter(
|
|
101
|
+
(packageName) =>
|
|
102
|
+
(pkg.dependencies && pkg.dependencies[packageName]) ||
|
|
103
|
+
(pkg.devDependencies && pkg.devDependencies[packageName]) ||
|
|
104
|
+
(pkg.peerDependencies && pkg.peerDependencies[packageName]),
|
|
105
|
+
)
|
|
106
|
+
.map((packageName) => [
|
|
107
|
+
packageName,
|
|
98
108
|
`../../${
|
|
99
109
|
packageName[0] === '@'
|
|
100
110
|
? packageName
|
|
101
111
|
: `packages/${packageName}`
|
|
102
|
-
}
|
|
103
|
-
),
|
|
112
|
+
}`,
|
|
113
|
+
]),
|
|
104
114
|
);
|
|
105
115
|
|
|
106
|
-
monorepoPackageSrcPaths =
|
|
107
|
-
(packageName) =>
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
116
|
+
monorepoPackageSrcPaths = [...packageLocations.entries()].map(
|
|
117
|
+
([packageName, packageLocation]) => [
|
|
118
|
+
packageName,
|
|
119
|
+
`${packageLocation}/${
|
|
120
|
+
existsSync(`${packageLocation}/src`) ? 'src' : 'lib'
|
|
121
|
+
}`,
|
|
122
|
+
],
|
|
111
123
|
);
|
|
124
|
+
monorepoPackageBuildReferences = yoConfig.pob.monorepo.packageNames
|
|
125
|
+
.filter((packageName) =>
|
|
126
|
+
existsSync(
|
|
127
|
+
`${packageLocations.get(packageName)}/tsconfig.build.json`,
|
|
128
|
+
),
|
|
129
|
+
)
|
|
130
|
+
.map((packageName) => packageLocations.get(packageName));
|
|
112
131
|
}
|
|
113
132
|
}
|
|
114
133
|
|
|
@@ -117,9 +136,11 @@ export default class CommonTypescriptGenerator extends Generator {
|
|
|
117
136
|
this.templatePath('tsconfig.json.ejs'),
|
|
118
137
|
tsconfigPath,
|
|
119
138
|
{
|
|
120
|
-
monorepoPackageNames,
|
|
121
139
|
monorepoPackageSrcPaths,
|
|
140
|
+
monorepoPackageBuildReferences,
|
|
141
|
+
rootDir: this.options.rootDir,
|
|
122
142
|
jsx,
|
|
143
|
+
composite,
|
|
123
144
|
dom,
|
|
124
145
|
baseUrl: this.options.baseUrl,
|
|
125
146
|
resolveJsonModule: this.options.resolveJsonModule,
|
|
@@ -137,8 +158,8 @@ export default class CommonTypescriptGenerator extends Generator {
|
|
|
137
158
|
inMonorepo: inLerna && !inLerna.root,
|
|
138
159
|
jsx,
|
|
139
160
|
composite,
|
|
140
|
-
monorepoPackageNames,
|
|
141
161
|
monorepoPackageSrcPaths,
|
|
162
|
+
monorepoPackageBuildReferences,
|
|
142
163
|
},
|
|
143
164
|
);
|
|
144
165
|
} else {
|
|
@@ -3,17 +3,13 @@
|
|
|
3
3
|
|
|
4
4
|
"compilerOptions": {
|
|
5
5
|
"noEmit": false,
|
|
6
|
+
"declaration": true,
|
|
7
|
+
"declarationMap": true,
|
|
6
8
|
"emitDeclarationOnly": true,
|
|
7
|
-
"
|
|
8
|
-
"rootDir": "src",
|
|
9
|
-
"outDir": "dist",
|
|
10
|
-
<% if(composite) { -%>
|
|
9
|
+
"outDir": "dist"<% if(composite) { -%>,
|
|
11
10
|
"composite": true,
|
|
12
|
-
"tsBuildInfoFile": "dist/tsbuildinfo"
|
|
11
|
+
"tsBuildInfoFile": "dist/tsbuildinfo"
|
|
13
12
|
<% } -%>
|
|
14
|
-
"isolatedModules": false,
|
|
15
|
-
"declaration": true,
|
|
16
|
-
"declarationMap": true
|
|
17
13
|
},
|
|
18
14
|
|
|
19
15
|
"exclude": [
|
|
@@ -26,11 +22,11 @@
|
|
|
26
22
|
"src/**/*.test.tsx",
|
|
27
23
|
<% } -%>
|
|
28
24
|
"src/**/__tests__/**"
|
|
29
|
-
]<% if (
|
|
30
|
-
<% if (
|
|
25
|
+
]<% if (monorepoPackageBuildReferences && monorepoPackageBuildReferences.length) { %>,<% } -%>
|
|
26
|
+
<% if (monorepoPackageBuildReferences && monorepoPackageBuildReferences.length) { %>
|
|
31
27
|
"references": [
|
|
32
|
-
<%
|
|
33
|
-
|
|
28
|
+
<% monorepoPackageBuildReferences.forEach((monorepoPackageSrcPath, index) => { -%>
|
|
29
|
+
{ "path": "<%= monorepoPackageSrcPath %>/tsconfig.json" }<%= index === monorepoPackageBuildReferences.length -1 ? '' : ',' %>
|
|
34
30
|
<% }) -%>
|
|
35
31
|
]<% } -%>
|
|
36
32
|
}
|
|
@@ -1,20 +1,37 @@
|
|
|
1
1
|
{
|
|
2
2
|
"include": [
|
|
3
|
-
"
|
|
4
|
-
"
|
|
3
|
+
"<%= rootDir %>/**/*.ts"<% if (jsx) { -%>,
|
|
4
|
+
"<%= rootDir %>/**/*.tsx"<% } %>
|
|
5
5
|
],
|
|
6
|
+
<% if(rootDir === '.') { -%>
|
|
7
|
+
"exclude": [
|
|
8
|
+
"node_modules"
|
|
9
|
+
],
|
|
10
|
+
<% } -%>
|
|
6
11
|
"compilerOptions": {
|
|
12
|
+
"rootDir": "<%= rootDir %>",
|
|
13
|
+
"incremental": true,
|
|
14
|
+
<% if(!composite) { -%>
|
|
7
15
|
/* No emit in default config file. See build config file for config to build declaration files */
|
|
8
16
|
"noEmit": true,
|
|
17
|
+
<% } else { -%>
|
|
18
|
+
"composite": true,
|
|
19
|
+
"noEmit": false,
|
|
20
|
+
"noEmitOnError": true,
|
|
21
|
+
"declaration": true,
|
|
22
|
+
"declarationMap": true,
|
|
23
|
+
"emitDeclarationOnly": true,
|
|
24
|
+
"outDir": "node_modules/.cache/tsc",
|
|
25
|
+
"tsBuildInfoFile": "node_modules/.cache/tsc/tsbuildinfo",
|
|
26
|
+
<% } -%>
|
|
27
|
+
|
|
9
28
|
/* No need to check .d.ts files */
|
|
10
29
|
"skipLibCheck": true,
|
|
11
30
|
|
|
12
|
-
"rootDirs": ["src"<% /*(monorepoPackageNames || []).forEach((packageName, index) => { -%>, "../../<%= monorepoPackageSrcPaths[index] %>"<% })*/ -%>],
|
|
13
|
-
|
|
14
31
|
"target": "esnext", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */
|
|
15
32
|
"module": "esnext", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
|
|
16
33
|
"lib": [<%- dom ? '"dom", ' : '' %>"esnext"], /* Polyfills are imported either by babel or with polyfill.io */
|
|
17
|
-
<%= jsx ? '' : '// ' %>"jsx": "
|
|
34
|
+
<%= jsx ? '' : '// ' %>"jsx": "react-jsx", /* 'react-jsx' is used with react/jsx-runtime (react >=17 || >= 16.14.0 | >= 15.7.0) */
|
|
18
35
|
"isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
|
|
19
36
|
|
|
20
37
|
/* Enable all strict type-checking options. */
|
|
@@ -34,14 +51,19 @@
|
|
|
34
51
|
<% if (resolveJsonModule) { -%>
|
|
35
52
|
"resolveJsonModule": <%= resolveJsonModule %>,
|
|
36
53
|
<% } -%>
|
|
37
|
-
"baseUrl": "<%= baseUrl %>"<% if (
|
|
38
|
-
<% if (
|
|
39
|
-
|
|
54
|
+
"baseUrl": "<%= baseUrl %>"<% if (monorepoPackageSrcPaths) { %>,<% } %> /* Base directory to resolve non-absolute module names. */
|
|
55
|
+
<% if (monorepoPackageSrcPaths && monorepoPackageSrcPaths.length !== 0) { -%>
|
|
40
56
|
"paths": {
|
|
41
|
-
<%
|
|
42
|
-
"<%= packageName %>": ["
|
|
43
|
-
"<%= packageName %>/*": ["
|
|
57
|
+
<% monorepoPackageSrcPaths.forEach(([packageName, packageLocation], index) => { %>
|
|
58
|
+
"<%= packageName %>": ["../<%= packageLocation %>"],
|
|
59
|
+
"<%= packageName %>/*": ["../<%= packageLocation %>/*"]<%= index === monorepoPackageSrcPaths.length -1 ? '' : ',' -%>
|
|
44
60
|
<% }) %>
|
|
45
61
|
}<% } %>
|
|
46
|
-
}
|
|
62
|
+
}<% if (monorepoPackageBuildReferences && monorepoPackageBuildReferences.length) { -%>,
|
|
63
|
+
"references": [
|
|
64
|
+
<% monorepoPackageBuildReferences.forEach((monorepoPackageSrcPath, index) => { -%>
|
|
65
|
+
{ "path": "<%= monorepoPackageSrcPath %>/tsconfig.json" }<%= index === monorepoPackageBuildReferences.length -1 ? '' : ',' %>
|
|
66
|
+
<% }) -%>
|
|
67
|
+
],
|
|
68
|
+
<% } -%>
|
|
47
69
|
}
|
|
@@ -63,16 +63,16 @@ jobs:
|
|
|
63
63
|
- name: Prettier
|
|
64
64
|
run: <%= packageManager %> run lint:prettier
|
|
65
65
|
if: startsWith(matrix.node-version, '16.')
|
|
66
|
-
|
|
67
|
-
- name: Eslint
|
|
68
|
-
run: <%= packageManager %> run lint:eslint
|
|
69
|
-
if: startsWith(matrix.node-version, '16.')
|
|
70
66
|
<% if (typescript) { -%>
|
|
71
67
|
|
|
72
68
|
- name: Typescript
|
|
73
69
|
run: yarn run tsc
|
|
74
70
|
if: startsWith(matrix.node-version, '16.')
|
|
75
71
|
<% } -%>
|
|
72
|
+
|
|
73
|
+
- name: Eslint
|
|
74
|
+
run: <%= packageManager %> run lint:eslint
|
|
75
|
+
if: startsWith(matrix.node-version, '16.')
|
|
76
76
|
<% if (codecov) { -%>
|
|
77
77
|
|
|
78
78
|
- name: Generate Test Coverage
|
|
@@ -112,6 +112,16 @@ export default class CoreVSCodeGenerator extends Generator {
|
|
|
112
112
|
}));
|
|
113
113
|
folders.sort((a, b) => a.name.localeCompare(b.name, 'en'));
|
|
114
114
|
|
|
115
|
+
packageLocations.forEach((location) => {
|
|
116
|
+
writeAndFormatJson(
|
|
117
|
+
this.fs,
|
|
118
|
+
this.destinationPath(`${location}/.vscode/settings.json`),
|
|
119
|
+
{
|
|
120
|
+
'eslint.workingDirectories': ['../../'],
|
|
121
|
+
},
|
|
122
|
+
);
|
|
123
|
+
});
|
|
124
|
+
|
|
115
125
|
const extensions = readJSON5(
|
|
116
126
|
this.fs,
|
|
117
127
|
this.destinationPath('.vscode/extensions.json'),
|
|
@@ -156,7 +166,7 @@ export default class CoreVSCodeGenerator extends Generator {
|
|
|
156
166
|
);
|
|
157
167
|
}
|
|
158
168
|
} else {
|
|
159
|
-
this.fs.delete('.vscode');
|
|
169
|
+
// this.fs.delete('.vscode');
|
|
160
170
|
}
|
|
161
171
|
}
|
|
162
172
|
}
|
|
@@ -112,6 +112,7 @@ export default class CoreYarnGenerator extends Generator {
|
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
end() {
|
|
115
|
+
this.fs.delete(this.destinationPath('.yarn/build-state.yml'));
|
|
115
116
|
if (this.options.enable) {
|
|
116
117
|
if (this.options.yarnNodeLinker === 'pnp') {
|
|
117
118
|
this.spawnCommandSync('yarn', ['dlx', '@yarnpkg/sdks', 'vscode']);
|
|
@@ -4,6 +4,8 @@ import path from 'path';
|
|
|
4
4
|
import { PackageGraph } from '@lerna/package-graph';
|
|
5
5
|
import { Project as LernaProject } from '@lerna/project';
|
|
6
6
|
import Generator from 'yeoman-generator';
|
|
7
|
+
import * as packageUtils from '../../utils/package.js';
|
|
8
|
+
import { copyAndFormatTpl } from '../../utils/writeAndFormat.js';
|
|
7
9
|
|
|
8
10
|
const getAppTypes = (configs) => {
|
|
9
11
|
const appConfigs = configs.filter(
|
|
@@ -101,8 +103,7 @@ export default class PobMonorepoGenerator extends Generator {
|
|
|
101
103
|
this.packageNames = this.packages.map((pkg) => pkg.name);
|
|
102
104
|
this.packageConfigs = this.packageLocations.map((location) => {
|
|
103
105
|
try {
|
|
104
|
-
return JSON.parse(fs.readFileSync(`${location}/.yo-rc.json
|
|
105
|
-
.pob;
|
|
106
|
+
return JSON.parse(fs.readFileSync(`${location}/.yo-rc.json`)).pob;
|
|
106
107
|
} catch {
|
|
107
108
|
console.warn(`warn: could not read pob config in ${location}`);
|
|
108
109
|
return {};
|
|
@@ -251,6 +252,48 @@ export default class PobMonorepoGenerator extends Generator {
|
|
|
251
252
|
);
|
|
252
253
|
}
|
|
253
254
|
|
|
255
|
+
writing() {
|
|
256
|
+
if (!this.options.isAppProject) {
|
|
257
|
+
const pkg = this.fs.readJSON(this.destinationPath('package.json'), {});
|
|
258
|
+
|
|
259
|
+
const rollupConfigs = [];
|
|
260
|
+
this.packageLocations.forEach((location) => {
|
|
261
|
+
const rollupPath = `${location}/rollup.config.mjs`;
|
|
262
|
+
const rollupConfig = this.fs.read(this.destinationPath(rollupPath), {
|
|
263
|
+
defaults: null,
|
|
264
|
+
});
|
|
265
|
+
if (rollupConfig) {
|
|
266
|
+
rollupConfigs.push(rollupPath);
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
if (rollupConfigs.length > 0) {
|
|
271
|
+
copyAndFormatTpl(
|
|
272
|
+
this.fs,
|
|
273
|
+
this.templatePath('monorepo.rollup.config.mjs.ejs'),
|
|
274
|
+
this.destinationPath('rollup.config.mjs'),
|
|
275
|
+
{
|
|
276
|
+
configLocations: rollupConfigs,
|
|
277
|
+
},
|
|
278
|
+
);
|
|
279
|
+
} else {
|
|
280
|
+
this.fs.delete('rollup.config.mjs');
|
|
281
|
+
}
|
|
282
|
+
packageUtils.addOrRemoveScripts(pkg, rollupConfigs.length > 0, {
|
|
283
|
+
'clean:build': `(${pkg.workspaces
|
|
284
|
+
.map((workspaces) => `rm -Rf ${workspaces}/dist`)
|
|
285
|
+
.join(' && ')}) || true`,
|
|
286
|
+
build: 'yarn clean:build && rollup --config rollup.config.mjs',
|
|
287
|
+
watch: 'yarn clean:build && rollup --config rollup.config.mjs --watch',
|
|
288
|
+
});
|
|
289
|
+
packageUtils.addOrRemoveDevDependencies(pkg, rollupConfigs.length, [
|
|
290
|
+
'@babel/core',
|
|
291
|
+
'pob-babel',
|
|
292
|
+
]);
|
|
293
|
+
this.fs.writeJSON(this.destinationPath('package.json'), pkg);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
254
297
|
end() {
|
|
255
298
|
console.log('save config');
|
|
256
299
|
this.config.save();
|
package/lib/pob.js
CHANGED
|
@@ -6,6 +6,7 @@ import path from 'path';
|
|
|
6
6
|
import argv from 'minimist-argv';
|
|
7
7
|
import yeoman from 'yeoman-environment';
|
|
8
8
|
import PobAppGenerator from './generators/app/PobAppGenerator.js';
|
|
9
|
+
import AppNextjsGenerator from './generators/app/nextjs/AppNextjsGenerator.js';
|
|
9
10
|
import CommonBabelGenerator from './generators/common/babel/CommonBabelGenerator.js';
|
|
10
11
|
import CommonLintGenerator from './generators/common/format-lint/CommonLintGenerator.js';
|
|
11
12
|
import CommonHuskyGenerator from './generators/common/husky/CommonHuskyGenerator.js';
|
|
@@ -78,6 +79,11 @@ env.registerStub(
|
|
|
78
79
|
'pob:app',
|
|
79
80
|
`${__dirname}/generators/app/PobAppGenerator.js`,
|
|
80
81
|
);
|
|
82
|
+
env.registerStub(
|
|
83
|
+
AppNextjsGenerator,
|
|
84
|
+
'pob:app:nextjs',
|
|
85
|
+
`${__dirname}/generators/app/nextjs/AppNextjsGenerator.js`,
|
|
86
|
+
);
|
|
81
87
|
env.registerStub(
|
|
82
88
|
CommonBabelGenerator,
|
|
83
89
|
'pob:common:babel',
|
package/lib/utils/inLerna.js
CHANGED
|
@@ -13,13 +13,11 @@ const rootMonorepo =
|
|
|
13
13
|
|
|
14
14
|
const rootMonorepoPkg =
|
|
15
15
|
rootMonorepo &&
|
|
16
|
-
JSON.parse(
|
|
17
|
-
fs.readFileSync(path.resolve(rootMonorepo, 'package.json'), 'utf-8'),
|
|
18
|
-
);
|
|
16
|
+
JSON.parse(fs.readFileSync(path.resolve(rootMonorepo, 'package.json')));
|
|
19
17
|
|
|
20
18
|
const getInLernaThings = () => {
|
|
21
19
|
const rootYoConfig = JSON.parse(
|
|
22
|
-
fs.readFileSync(path.resolve(rootMonorepo, '.yo-rc.json')
|
|
20
|
+
fs.readFileSync(path.resolve(rootMonorepo, '.yo-rc.json')),
|
|
23
21
|
);
|
|
24
22
|
const cwd = process.cwd();
|
|
25
23
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pob",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "10.0.0",
|
|
4
4
|
"description": "Pile of bones, library generator with git/babel/typescript/typedoc/readme/jest",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"skeleton"
|
|
@@ -41,14 +41,14 @@
|
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@lerna/package-graph": "^4.0.0",
|
|
43
43
|
"@lerna/project": "^4.0.0",
|
|
44
|
-
"@pob/eslint-config": "48.
|
|
45
|
-
"@pob/eslint-config-typescript": "48.
|
|
46
|
-
"@pob/eslint-config-typescript-react": "48.
|
|
44
|
+
"@pob/eslint-config": "48.1.1",
|
|
45
|
+
"@pob/eslint-config-typescript": "48.1.1",
|
|
46
|
+
"@pob/eslint-config-typescript-react": "48.1.1",
|
|
47
47
|
"@pob/sort-eslint-config": "^3.0.1",
|
|
48
48
|
"@pob/sort-object": "^4.0.1",
|
|
49
49
|
"@pob/sort-pkg": "^4.0.1",
|
|
50
|
-
"@yarnpkg/parsers": "2.5.0-rc.
|
|
51
|
-
"eslint": "8.
|
|
50
|
+
"@yarnpkg/parsers": "2.5.0-rc.13",
|
|
51
|
+
"eslint": "8.9.0",
|
|
52
52
|
"findup-sync": "^5.0.0",
|
|
53
53
|
"git-remote-url": "^1.0.1",
|
|
54
54
|
"github-username": "^6.0.0",
|
|
@@ -61,11 +61,11 @@
|
|
|
61
61
|
"mem-fs-editor": "9.4.0",
|
|
62
62
|
"minimist-argv": "^1.1.0",
|
|
63
63
|
"parse-author": "^2.0.0",
|
|
64
|
-
"pob-dependencies": "6.
|
|
64
|
+
"pob-dependencies": "6.13.0",
|
|
65
65
|
"prettier": "2.5.1",
|
|
66
66
|
"semver": "^7.3.4",
|
|
67
67
|
"yeoman-environment": "^3.5.1",
|
|
68
68
|
"yeoman-generator": "^5.4.0"
|
|
69
69
|
},
|
|
70
|
-
"gitHead": "
|
|
70
|
+
"gitHead": "b0b1e856f4414edbc599882778d1ee33715bc62b"
|
|
71
71
|
}
|