pob 38.1.0 → 38.2.1

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.
@@ -414,6 +414,16 @@ export default class PobAppGenerator extends Generator {
414
414
  }
415
415
  }
416
416
 
417
+ if (this.appConfig.type === "expo") {
418
+ pkg.expo = { install: { exclude: ["typescript"] } };
419
+ } else if (pkg.expo) {
420
+ delete pkg.expo;
421
+ }
422
+
423
+ packageUtils.addOrRemoveScripts(pkg, this.appConfig.type === "expo", {
424
+ "upgrade-expo": "expo install expo@57 --fix",
425
+ });
426
+
417
427
  this.fs.writeJSON(this.destinationPath("package.json"), pkg);
418
428
 
419
429
  this.composeWith("pob:core:sort-package");
@@ -264,8 +264,7 @@ export default class CommonTestingGenerator extends Generator {
264
264
  if (!workspacesPattern && this.options.monorepo) {
265
265
  throw new Error("Invalid workspacesPattern");
266
266
  }
267
- const experimentalTestCoverage =
268
- pkg.name === "check-package-dependencies";
267
+ const experimentalTestCoverage = true;
269
268
  return [
270
269
  experimentalTestCoverage && coverage === "generate"
271
270
  ? "mkdir -p docs && "
@@ -274,7 +273,7 @@ export default class CommonTestingGenerator extends Generator {
274
273
  coverage && !experimentalTestCoverage
275
274
  ? `npx c8${
276
275
  coverage === "generate"
277
- ? ` --reporter=${coverage === "generate" ? "json" : "lcov"}`
276
+ ? ` --reporter=${coverage === "generate" ? "lcov" : "lcov"}`
278
277
  : ""
279
278
  } --all --src ./${this.options.srcDirectory} `
280
279
  : ""
@@ -54,18 +54,6 @@ jobs:
54
54
  run: <%= packageManager %> typedoc --tsconfig tsconfig.doc.json
55
55
  <% } -%>
56
56
 
57
- <% if (testing) { -%>
58
- <% if (testRunner === 'node') { -%>
59
-
60
- - name: Generate Coverage
61
- run: NODE_V8_COVERAGE=./docs/coverage <%= packageManagerRun("test:coverage:generate") %>
62
- <% } else {-%>
63
-
64
- - name: Generate Coverage
65
- run: <%= packageManagerRun("test:coverage:generate") %>
66
- <% } -%>
67
- <% } -%>
68
-
69
57
  - name: Create nojekyll
70
58
  run: touch docs/.nojekyll
71
59
 
@@ -89,7 +89,7 @@ jobs:
89
89
  <% if (codecov) { -%>
90
90
 
91
91
  - name: Generate Test Coverage
92
- run: <%= packageManagerRun("test:coverage:generate) %>
92
+ run: <%= packageManagerRun("test:coverage:generate") %>
93
93
  if: startsWith(matrix.node-version, '<%= nodeLatestMajorVersion %>.')
94
94
  env:
95
95
  CI: true
@@ -99,7 +99,7 @@ jobs:
99
99
  with:
100
100
  fail_ci_if_error: true
101
101
  token: ${{ secrets.CODECOV_TOKEN }}
102
- files: ./coverage/coverage-final.json
102
+ files: ./docs/coverage.lcov
103
103
  disable_search: true
104
104
  if: startsWith(matrix.node-version, '<%= nodeLatestMajorVersion %>.') && github.actor != 'dependabot[bot]'
105
105
  <% } else if (testing) { -%>
@@ -233,25 +233,33 @@ export default class CorePackageGenerator extends Generator {
233
233
 
234
234
  if (this.options.inMonorepo && !this.options.isRoot) {
235
235
  packageUtils.removeScripts(pkg, ["checks"]);
236
- } else if (this.options.isRoot) {
237
- const checksScript = pkg.scripts?.checks;
238
- if (checksScript && checksScript.includes("node scripts/check-package")) {
239
- pkg.scripts.checks = checksScript.replace(
240
- /( && )?node scripts\/check-package\.(mjs|js)( && )?/,
241
- "",
242
- );
243
- if (pkg.scripts.checks === "") {
244
- delete pkg.scripts.checks;
245
- }
246
- }
247
- } else if (inMonorepo && !inMonorepo.root) {
236
+ } else {
248
237
  if (this.fs.exists("scripts/check-package.js")) {
249
238
  this.fs.delete("scripts/check-package.js");
250
239
  }
251
240
  if (this.fs.exists("scripts/check-package.mjs")) {
252
241
  this.fs.delete("scripts/check-package.mjs");
253
242
  }
254
- packageUtils.removeScripts(pkg, ["checks"]);
243
+ if (this.fs.exists("scripts/check-package.ts")) {
244
+ this.fs.delete("scripts/check-package.ts");
245
+ }
246
+ if (this.options.isRoot) {
247
+ const checksScript = pkg.scripts?.checks;
248
+ if (
249
+ checksScript &&
250
+ checksScript.includes("node scripts/check-package")
251
+ ) {
252
+ pkg.scripts.checks = checksScript.replace(
253
+ /( && )?node scripts\/check-packages?\.(mjs|js|ts)( && )?/,
254
+ "",
255
+ );
256
+ if (pkg.scripts.checks === "") {
257
+ delete pkg.scripts.checks;
258
+ }
259
+ }
260
+ } else if (inMonorepo && !inMonorepo.root) {
261
+ packageUtils.removeScripts(pkg, ["checks"]);
262
+ }
255
263
  }
256
264
 
257
265
  if (!pkg.authors) {
@@ -4,7 +4,10 @@ import { platform } from "node:process";
4
4
  import Generator from "yeoman-generator";
5
5
  import * as packageUtils from "../../utils/package.js";
6
6
  import { packageManagerRun } from "../../utils/packageManagerUtils.js";
7
- import { workspacesRun } from "../../utils/packageManagerWorkspacesUtils.js";
7
+ import {
8
+ workspacesRun,
9
+ workspacesRunSequential,
10
+ } from "../../utils/packageManagerWorkspacesUtils.js";
8
11
  import {
9
12
  buildDependenciesMaps,
10
13
  buildTopologicalOrderBatches,
@@ -421,6 +424,16 @@ export default class PobMonorepoGenerator extends Generator {
421
424
  watch: `${packageManagerRun(this.options.packageManager, "clean:build")} && rollup --config rollup.config.mjs --watch`,
422
425
  });
423
426
 
427
+ const hasExpoApp = this.packageConfigs.some(
428
+ (config) => config?.app?.type === "expo",
429
+ );
430
+ packageUtils.addOrRemoveScripts(pkg, hasExpoApp, {
431
+ "upgrade-expo": workspacesRunSequential(
432
+ this.options.packageManager,
433
+ "upgrade-expo",
434
+ ),
435
+ });
436
+
424
437
  packageUtils.addOrRemoveDevDependencies(pkg, rollupKinds.has("esbuild"), [
425
438
  "@pob/rollup-esbuild",
426
439
  ]);
@@ -38,6 +38,26 @@ export const workspacesRunTopological = (packageManager, script) => {
38
38
  }
39
39
  };
40
40
 
41
+ /**
42
+ * Run a script sequentially in every workspace that defines it.
43
+ * Use when parallel execution is unsafe (e.g. package manager upgrades).
44
+ */
45
+ export const workspacesRunSequential = (packageManager, script) => {
46
+ switch (packageManager) {
47
+ case undefined:
48
+ case "yarn":
49
+ return `yarn workspaces foreach -Av run ${script}`;
50
+ case "pnpm":
51
+ return `pnpm -r --sequential run ${script}`;
52
+ case "npm":
53
+ return `npm run ${script} --workspaces --if-present`;
54
+ case "bun":
55
+ return `bun --filter '*' run ${script}`;
56
+ default:
57
+ throw new Error(`Unsupported package manager: ${packageManager}`);
58
+ }
59
+ };
60
+
41
61
  /**
42
62
  * Run a script in all workspaces in parallel, excluding packages matching the given patterns.
43
63
  * Use for watch commands where example/demo packages should be skipped.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pob",
3
- "version": "38.1.0",
3
+ "version": "38.2.1",
4
4
  "description": "Pile of bones, library generator with git/babel/typescript/typedoc/readme/vitest",
5
5
  "keywords": [
6
6
  "skeleton"
@@ -48,17 +48,17 @@
48
48
  "validate-npm-package-name": "^8.0.0",
49
49
  "yeoman-environment": "6.1.0",
50
50
  "yeoman-generator": "8.2.2",
51
- "@pob/eslint-config": "67.1.0",
52
- "@pob/eslint-config-typescript-react": "67.1.0",
53
- "@pob/sort-object": "11.1.1",
54
- "pob-dependencies": "27.1.0",
55
- "@pob/sort-pkg": "13.1.2"
51
+ "@pob/eslint-config": "67.1.1",
52
+ "@pob/eslint-config-typescript-react": "67.1.1",
53
+ "@pob/sort-pkg": "13.1.2",
54
+ "pob-dependencies": "27.1.1",
55
+ "@pob/sort-object": "11.1.1"
56
56
  },
57
57
  "devDependencies": {
58
58
  "@types/node": "24.13.3",
59
59
  "@typescript/native": "npm:typescript@7.0.2",
60
60
  "@yeoman/types": "1.11.1",
61
- "@pob/root": "27.1.0"
61
+ "@pob/root": "27.2.1"
62
62
  },
63
63
  "engines": {
64
64
  "node": ">=22.18.0"