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 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: 'pob-build',
275
- start: 'pob-watch',
276
- clean: 'rm -Rf dist',
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: 'pob-build',
282
- watch: 'pob-watch',
283
- clean: 'rm -Rf dist',
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
- if (pkg.engines && useBabel) {
404
- delete pkg.engines.node;
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 */
@@ -4,5 +4,6 @@ import run from 'pob-babel/plugin-run.cjs';
4
4
  const watch = process.env.ROLLUP_WATCH === 'true';
5
5
 
6
6
  export default createRollupConfig({
7
+ cwd: new URL('.', import.meta.url).pathname,
7
8
  plugins: [watch && run({ execArgv: ['--enable-source-maps'] })],
8
9
  });
@@ -1,3 +1,5 @@
1
1
  import createRollupConfig from 'pob-babel/createRollupConfig.js';
2
2
 
3
- export default createRollupConfig({});
3
+ export default createRollupConfig({
4
+ cwd: new URL('.', import.meta.url).pathname,
5
+ });
@@ -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.destinationPath('.eslintrc.json');
378
+ const rootEslintrcPath = this.options.rootAsSrc
379
+ ? false
380
+ : this.destinationPath('.eslintrc.json');
372
381
 
373
- const srcEslintrcPath = this.destinationPath(
374
- `${useBabel ? 'src/' : 'lib/'}.eslintrc.json`,
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
- const rootEslintrcConfig = updateEslintConfig(
409
- this.fs.readJSON(rootEslintrcPath, {}),
410
- {
411
- extendsConfig: extendsConfigRoot,
412
- ignorePatterns:
413
- ignorePatterns.size === 0 ? undefined : [...ignorePatterns],
414
- },
415
- );
415
+ return ignorePatterns;
416
+ };
416
417
 
417
- writeAndFormatJson(this.fs, rootEslintrcPath, rootEslintrcConfig);
418
- } catch (err) {
419
- console.warn(`Could not parse/edit ${rootEslintrcPath}: `, err);
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: useTypescript || pkg.types ? ['*.d.ts'] : undefined,
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 monorepoPackageNames;
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
- monorepoPackageNames = yoConfig.pob.monorepo.packageNames.filter(
93
- (packageName) =>
94
- ((pkg.dependencies && pkg.dependencies[packageName]) ||
95
- (pkg.devDependencies && pkg.devDependencies[packageName]) ||
96
- (pkg.peerDependencies && pkg.peerDependencies[packageName])) &&
97
- existsSync(
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
- }/tsconfig.build.json`,
103
- ),
112
+ }`,
113
+ ]),
104
114
  );
105
115
 
106
- monorepoPackageSrcPaths = monorepoPackageNames.map(
107
- (packageName) =>
108
- `${
109
- packageName[0] === '@' ? packageName : `packages/${packageName}`
110
- }/${existsSync(`../${packageName}/src`) ? 'src' : 'lib'}`,
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
- "rootDirs": [],
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 (monorepoPackageNames && monorepoPackageNames.length) { %>,<% } -%>
30
- <% if (monorepoPackageNames && monorepoPackageNames.length) { %>
25
+ ]<% if (monorepoPackageBuildReferences && monorepoPackageBuildReferences.length) { %>,<% } -%>
26
+ <% if (monorepoPackageBuildReferences && monorepoPackageBuildReferences.length) { %>
31
27
  "references": [
32
- <% monorepoPackageNames.forEach((packageName, index) => { -%>
33
- { "path": "../<%= packageName %>/tsconfig.build.json" }<%= index === monorepoPackageNames.length -1 ? '' : ',' %>
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
- "src/**/*.ts"<% if (jsx) { -%>,
4
- "src/**/*.tsx"<% } %>
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": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
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 (monorepoPackageNames) { %>,<% } %><%= ' '.slice(0, -(baseUrl.length + (monorepoPackageNames ? 1 : 0))) %>/* Base directory to resolve non-absolute module names. */
38
- <% if (monorepoPackageNames && monorepoPackageNames.length !== 0) { -%>
39
-
54
+ "baseUrl": "<%= baseUrl %>"<% if (monorepoPackageSrcPaths) { %>,<% } %> /* Base directory to resolve non-absolute module names. */
55
+ <% if (monorepoPackageSrcPaths && monorepoPackageSrcPaths.length !== 0) { -%>
40
56
  "paths": {
41
- <% monorepoPackageNames.forEach((packageName, index) => { %>
42
- "<%= packageName %>": ["../../../<%= monorepoPackageSrcPaths[index] %>"],
43
- "<%= packageName %>/*": ["../../../<%= monorepoPackageSrcPaths[index] %>/*"]<%= index === monorepoPackageNames.length -1 ? '' : ',' -%>
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']);
@@ -1,13 +1,6 @@
1
1
  {
2
2
  "extends": "./tsconfig.json",
3
3
 
4
-
5
- "compilerOptions": {
6
- "rootDirs": [],
7
- "rootDir": "src",
8
- "isolatedModules": false
9
- },
10
-
11
4
  "typedocOptions": {
12
5
  "entryPoints": [
13
6
  <%- entryPoints.map(entryPoint => `"${entryPoint}"`).join(', ') %>
@@ -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`, 'utf-8'))
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();
@@ -89,8 +89,6 @@ export default class MonorepoLernaGenerator extends Generator {
89
89
  }
90
90
 
91
91
  writing() {
92
- console.log('lerna: writing');
93
-
94
92
  const getPackagePobConfig = (config) => ({
95
93
  babelEnvs: [],
96
94
  ...(config && config.pob),
@@ -0,0 +1,9 @@
1
+ <% configLocations.forEach((location, index) => { -%>
2
+ import configs<%= index + 1 %> from './<%= location %>';
3
+ <% }) -%>
4
+
5
+ export default [
6
+ <% configLocations.forEach((location, index) => { -%>
7
+ ...configs<%= index + 1 %>,
8
+ <% }) -%>
9
+ ];
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',
@@ -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'), 'utf-8'),
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": "9.15.1",
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.0.5",
45
- "@pob/eslint-config-typescript": "48.0.6",
46
- "@pob/eslint-config-typescript-react": "48.0.7",
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.10",
51
- "eslint": "8.8.0",
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.11.1",
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": "966b414b24a2f6289c0801666c3b1c9d2cf986ac"
70
+ "gitHead": "b0b1e856f4414edbc599882778d1ee33715bc62b"
71
71
  }