pob 33.1.0 → 33.3.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 +35 -0
- package/lib/generators/app/PobAppGenerator.js +6 -6
- package/lib/generators/common/husky/CommonHuskyGenerator.js +6 -6
- package/lib/generators/common/release/CommonReleaseGenerator.js +2 -2
- package/lib/generators/common/release/templates/workflow-release.yml.ejs +0 -11
- package/lib/generators/common/testing/CommonTestingGenerator.js +4 -2
- package/lib/generators/common/typescript/CommonTypescriptGenerator.js +3 -0
- package/lib/generators/common/typescript/templates/tsconfig.json.ejs +2 -1
- package/lib/generators/core/package/CorePackageGenerator.js +18 -7
- package/lib/generators/monorepo/workspaces/MonorepoWorkspacesGenerator.js +0 -4
- package/lib/pob.js +0 -12
- package/package.json +10 -10
- package/lib/generators/app/nextjs/AppNextjsGenerator.js +0 -28
- package/lib/generators/app/remix/AppRemixGenerator.js +0 -17
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,41 @@
|
|
|
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
|
+
## [33.3.0](https://github.com/christophehurpeau/pob/compare/pob@33.2.0...pob@33.3.0) (2026-03-21)
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* add support for scripts directory in TypeScript generator
|
|
11
|
+
* add ts support for check-package script
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* ensure testing prompt only appears when testing is enabled
|
|
16
|
+
* only delete git-hooks for legacy
|
|
17
|
+
|
|
18
|
+
Version bump for dependency: pob-dependencies
|
|
19
|
+
Version bump for dependency: @pob/root
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
## [33.2.0](https://github.com/christophehurpeau/pob/compare/pob@33.1.0...pob@33.2.0) (2026-03-12)
|
|
23
|
+
|
|
24
|
+
### Features
|
|
25
|
+
|
|
26
|
+
* remove nextjs and remix
|
|
27
|
+
* update pob/eslint-config
|
|
28
|
+
* use OIDC publishing
|
|
29
|
+
|
|
30
|
+
### Bug Fixes
|
|
31
|
+
|
|
32
|
+
* handle optional TypeScript test loader in test command
|
|
33
|
+
* remove unnecessary dev dependency for non-monorepo packages
|
|
34
|
+
|
|
35
|
+
Version bump for dependency: @pob/sort-object
|
|
36
|
+
Version bump for dependency: @pob/sort-pkg
|
|
37
|
+
Version bump for dependency: pob-dependencies
|
|
38
|
+
Version bump for dependency: @pob/root
|
|
39
|
+
|
|
40
|
+
|
|
6
41
|
## [33.1.0](https://github.com/christophehurpeau/pob/compare/pob@33.0.1...pob@33.1.0) (2026-03-01)
|
|
7
42
|
|
|
8
43
|
### Bug Fixes
|
|
@@ -368,13 +368,13 @@ export default class PobAppGenerator extends Generator {
|
|
|
368
368
|
|
|
369
369
|
switch (this.appConfig.type) {
|
|
370
370
|
case "next.js":
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
break;
|
|
371
|
+
throw new Error(
|
|
372
|
+
"nextjs has been removed. Please migrate to 'vite' or 'expo'.",
|
|
373
|
+
);
|
|
375
374
|
case "remix":
|
|
376
|
-
|
|
377
|
-
|
|
375
|
+
throw new Error(
|
|
376
|
+
"remix has been removed. Please migrate to 'vite' or 'expo'.",
|
|
377
|
+
);
|
|
378
378
|
case "vite":
|
|
379
379
|
this.composeWith("pob:app:vite", {});
|
|
380
380
|
break;
|
|
@@ -33,13 +33,13 @@ export default class CommonHuskyGenerator extends Generator {
|
|
|
33
33
|
this.fs.delete(".git/hooks/post-checkout");
|
|
34
34
|
this.fs.delete(".git/hooks/post-merge");
|
|
35
35
|
this.fs.delete(".git/hooks/pre-commit");
|
|
36
|
-
}
|
|
37
36
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
37
|
+
this.fs.delete(".git-hooks/prepare-commit-msg");
|
|
38
|
+
this.fs.delete(".git-hooks/post-checkout");
|
|
39
|
+
this.fs.delete(".git-hooks/post-merge");
|
|
40
|
+
this.fs.delete(".git-hooks/pre-commit");
|
|
41
|
+
if (this.fs.exists(".git-hooks")) this.fs.delete(".git-hooks");
|
|
42
|
+
}
|
|
43
43
|
|
|
44
44
|
if (this.fs.exists(this.destinationPath(".huskyrc.js"))) {
|
|
45
45
|
this.fs.delete(this.destinationPath(".huskyrc.js"));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Generator from "yeoman-generator";
|
|
2
|
-
import { latestLTS } from "../../../utils/nodeVersions.js";
|
|
2
|
+
// import { latestLTS } from "../../../utils/nodeVersions.js";
|
|
3
3
|
import * as packageUtils from "../../../utils/package.js";
|
|
4
4
|
|
|
5
5
|
export default class CommonReleaseGenerator extends Generator {
|
|
@@ -82,7 +82,7 @@ export default class CommonReleaseGenerator extends Generator {
|
|
|
82
82
|
isMonorepoIndependent:
|
|
83
83
|
this.options.isMonorepo &&
|
|
84
84
|
(!pkg.version || pkg.version === "0.0.0"),
|
|
85
|
-
nodeLatestMajorVersion: latestLTS,
|
|
85
|
+
nodeLatestMajorVersion: 24, // TODO use latestLTS, when latest is updated to 24
|
|
86
86
|
},
|
|
87
87
|
);
|
|
88
88
|
} else {
|
|
@@ -89,9 +89,6 @@ jobs:
|
|
|
89
89
|
- name: New version
|
|
90
90
|
if: github.ref == 'refs/heads/main' && !inputs.dry-run
|
|
91
91
|
run: |
|
|
92
|
-
<% if (packageManager === "bun") { -%>
|
|
93
|
-
npm install -g npm@latest
|
|
94
|
-
<% } -%>
|
|
95
92
|
<%= packageManager %> run pob-version <% if (enablePublish && packageManager === "bun") { %>--publish <% } %>--create-release=github <% if (isMonorepo && isMonorepoIndependent) { %> --bump-dependents-highest-as=${{ inputs.bump-dependents-highest-as }}<% } %> -m 'chore: release <%- isMonorepoIndependent ? '' : '%v ' %>[skip ci]<%- isMonorepoIndependent ? '\\n\\n%t' : '' %>'
|
|
96
93
|
env:
|
|
97
94
|
POB_GIT_HOOKS: 0
|
|
@@ -102,17 +99,9 @@ jobs:
|
|
|
102
99
|
- name: Publish to npm
|
|
103
100
|
if: github.ref == 'refs/heads/main' && !inputs.dry-run
|
|
104
101
|
run: |
|
|
105
|
-
if [ -z "$NPM_AUTH_TOKEN" ]; then
|
|
106
|
-
echo "Missing env variable NPM_AUTH_TOKEN"
|
|
107
|
-
exit 1
|
|
108
|
-
fi
|
|
109
|
-
echo >> ./.yarnrc.yml
|
|
110
|
-
echo "npmAuthToken: $NPM_AUTH_TOKEN" >> ./.yarnrc.yml
|
|
111
102
|
<% if (isMonorepo) { -%>
|
|
112
103
|
yarn workspaces foreach --all --parallel --no-private npm publish --tolerate-republish
|
|
113
104
|
<% } else { -%>
|
|
114
105
|
yarn npm publish
|
|
115
106
|
<% } -%>
|
|
116
|
-
env:
|
|
117
|
-
NPM_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
118
107
|
<% } -%>
|
|
@@ -108,7 +108,7 @@ export default class CommonTestingGenerator extends Generator {
|
|
|
108
108
|
}
|
|
109
109
|
|
|
110
110
|
async prompting() {
|
|
111
|
-
if (this.options.runner === "jest") {
|
|
111
|
+
if (this.options.enable && this.options.runner === "jest") {
|
|
112
112
|
const { confirm } = await this.prompt([
|
|
113
113
|
{
|
|
114
114
|
type: "confirm",
|
|
@@ -316,7 +316,9 @@ export default class CommonTestingGenerator extends Generator {
|
|
|
316
316
|
} --all --src ./${this.options.srcDirectory} `
|
|
317
317
|
: ""
|
|
318
318
|
}node ${
|
|
319
|
-
this.options.typescript
|
|
319
|
+
this.options.typescript
|
|
320
|
+
? `${tsTestLoaderOption ? `${tsTestLoaderOption} ` : ""}`
|
|
321
|
+
: ""
|
|
320
322
|
}${this.fs.exists("src/test-setup.ts") ? "--import ./src/test-setup.ts " : ""}--test${experimentalTestCoverage && (coverage || coverageJson) ? " --experimental-test-coverage" : ""} ${this.options.monorepo ? `${workspacesPattern}/*/` : ""}${`${
|
|
321
323
|
hasTestFolder ? "test/*" : `${this.options.srcDirectory}/**/*.test`
|
|
322
324
|
}.${this.options.typescript ? "ts" : "js"}`}`;
|
|
@@ -306,6 +306,9 @@ export default class CommonTypescriptGenerator extends Generator {
|
|
|
306
306
|
monorepoPackageReferences,
|
|
307
307
|
rootDir: this.options.rootDir,
|
|
308
308
|
srcDirectory: this.options.srcDirectory || this.options.rootDir,
|
|
309
|
+
scriptsDirectory: this.fs.exists(this.destinationPath("scripts"))
|
|
310
|
+
? "scripts"
|
|
311
|
+
: undefined,
|
|
309
312
|
jsx,
|
|
310
313
|
jsxPreserve: this.options.jsxPreserve,
|
|
311
314
|
nextConfig: this.options.nextConfig,
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
<%- presets.map(p => `"${p}"`).join(',\n ') %><% } %>
|
|
5
5
|
],
|
|
6
6
|
"include": [
|
|
7
|
-
"<%= srcDirectory %>/**/*.ts"<% if (
|
|
7
|
+
"<%= srcDirectory %>/**/*.ts"<% if (scriptsDirectory) { -%>,
|
|
8
|
+
"<%= scriptsDirectory %>/**/*.ts",<% } %><% if (jsx) { -%>,
|
|
8
9
|
"<%= srcDirectory %>/**/*.tsx"<% } %><% if (srcDirectory !== rootDir) { -%>,
|
|
9
10
|
"<%= rootDir %>/*.ts"<% } %><% if (additionalIncludes.length > 0) { -%>,
|
|
10
11
|
<%- additionalIncludes.map(adi => `"${adi}"`).join(',\n ') %><% } %>
|
|
@@ -254,30 +254,41 @@ export default class CorePackageGenerator extends Generator {
|
|
|
254
254
|
let doesJsCheckPackageExists = this.fs.exists(
|
|
255
255
|
this.destinationPath("scripts/check-package.js"),
|
|
256
256
|
);
|
|
257
|
+
const doesTsCheckPackageExists = this.fs.exists(
|
|
258
|
+
this.destinationPath("scripts/check-package.ts"),
|
|
259
|
+
);
|
|
257
260
|
|
|
258
261
|
if (pkg.type === "module") {
|
|
259
|
-
if (!doesJsCheckPackageExists) {
|
|
262
|
+
if (!doesJsCheckPackageExists && !doesTsCheckPackageExists) {
|
|
260
263
|
doesJsCheckPackageExists = true;
|
|
261
264
|
this.fs.copyTpl(
|
|
262
265
|
this.templatePath("check-package.js.ejs"),
|
|
263
|
-
this.destinationPath("scripts/check-package.
|
|
266
|
+
this.destinationPath("scripts/check-package.ts"),
|
|
264
267
|
{
|
|
265
268
|
isLibrary: pkg.private !== true,
|
|
266
269
|
},
|
|
267
270
|
);
|
|
268
271
|
}
|
|
269
272
|
}
|
|
270
|
-
if (
|
|
273
|
+
if (
|
|
274
|
+
doesJsCheckPackageExists ||
|
|
275
|
+
doesMjsCheckPackageExists ||
|
|
276
|
+
doesTsCheckPackageExists
|
|
277
|
+
) {
|
|
271
278
|
packageUtils.addDevDependencies(pkg, ["check-package-dependencies"]);
|
|
272
279
|
}
|
|
273
280
|
|
|
274
281
|
packageUtils.addOrRemoveScripts(
|
|
275
282
|
pkg,
|
|
276
|
-
doesMjsCheckPackageExists ||
|
|
283
|
+
doesMjsCheckPackageExists ||
|
|
284
|
+
doesJsCheckPackageExists ||
|
|
285
|
+
doesTsCheckPackageExists,
|
|
277
286
|
{
|
|
278
|
-
checks: `node scripts/check-package.${
|
|
279
|
-
doesMjsCheckPackageExists
|
|
280
|
-
|
|
287
|
+
checks: `node scripts/check-package.${(() => {
|
|
288
|
+
if (doesMjsCheckPackageExists) return "mjs";
|
|
289
|
+
if (doesTsCheckPackageExists) return "ts";
|
|
290
|
+
return "js";
|
|
291
|
+
})()}`,
|
|
281
292
|
},
|
|
282
293
|
);
|
|
283
294
|
}
|
|
@@ -81,10 +81,6 @@ export default class MonorepoWorkspacesGenerator extends Generator {
|
|
|
81
81
|
delete pkg.engines.yarn;
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
if (pkg.name !== "pob-monorepo") {
|
|
85
|
-
packageUtils.addDevDependencies(pkg, ["repository-check-dirty"]);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
84
|
const monorepoConfig = this.config.get("monorepo");
|
|
89
85
|
const packageManager = this.options.packageManager;
|
|
90
86
|
|
package/lib/pob.js
CHANGED
|
@@ -13,8 +13,6 @@ import minimist from "minimist";
|
|
|
13
13
|
import * as yeoman from "yeoman-environment";
|
|
14
14
|
import PobAppGenerator from "./generators/app/PobAppGenerator.js";
|
|
15
15
|
import AppE2ETestingGenerator from "./generators/app/e2e-testing/AppE2ETestingGenerator.js";
|
|
16
|
-
import AppNextjsGenerator from "./generators/app/nextjs/AppNextjsGenerator.js";
|
|
17
|
-
import AppRemixGenerator from "./generators/app/remix/AppRemixGenerator.js";
|
|
18
16
|
import AppViteGenerator from "./generators/app/vite/AppViteGenerator.js";
|
|
19
17
|
import CommonBabelGenerator from "./generators/common/babel/CommonBabelGenerator.js";
|
|
20
18
|
import CommonLintGenerator from "./generators/common/format-lint/CommonLintGenerator.js";
|
|
@@ -97,16 +95,6 @@ env.registerStub(
|
|
|
97
95
|
"pob:app:e2e-testing",
|
|
98
96
|
`${__dirname}/generators/app/e2e-testing/AppE2ETestingGenerator.js`,
|
|
99
97
|
);
|
|
100
|
-
env.registerStub(
|
|
101
|
-
AppNextjsGenerator,
|
|
102
|
-
"pob:app:nextjs",
|
|
103
|
-
`${__dirname}/generators/app/nextjs/AppNextjsGenerator.js`,
|
|
104
|
-
);
|
|
105
|
-
env.registerStub(
|
|
106
|
-
AppRemixGenerator,
|
|
107
|
-
"pob:app:remix",
|
|
108
|
-
`${__dirname}/generators/app/nextjs/AppRemixGenerator.js`,
|
|
109
|
-
);
|
|
110
98
|
env.registerStub(
|
|
111
99
|
AppViteGenerator,
|
|
112
100
|
"pob:app:vite",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pob",
|
|
3
|
-
"version": "33.
|
|
3
|
+
"version": "33.3.0",
|
|
4
4
|
"description": "Pile of bones, library generator with git/babel/typescript/typedoc/readme/jest",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"skeleton"
|
|
@@ -36,22 +36,22 @@
|
|
|
36
36
|
"build:definitions": "tsc -p tsconfig.json",
|
|
37
37
|
"format": "prettier --write",
|
|
38
38
|
"lint": "yarn run lint:eslint",
|
|
39
|
-
"lint:eslint": "yarn ../.. run eslint --quiet 'packages/pob'"
|
|
39
|
+
"lint:eslint": "yarn '../..' run eslint --quiet 'packages/pob'"
|
|
40
40
|
},
|
|
41
41
|
"pob": {
|
|
42
42
|
"typescript": "check-only"
|
|
43
43
|
},
|
|
44
44
|
"prettier": "@pob/root/prettier-config",
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@pob/eslint-config": "65.0
|
|
47
|
-
"@pob/eslint-config-typescript-react": "65.0
|
|
48
|
-
"@pob/sort-object": "10.1.
|
|
49
|
-
"@pob/sort-pkg": "12.1.
|
|
46
|
+
"@pob/eslint-config": "65.2.0",
|
|
47
|
+
"@pob/eslint-config-typescript-react": "65.2.0",
|
|
48
|
+
"@pob/sort-object": "10.1.2",
|
|
49
|
+
"@pob/sort-pkg": "12.1.2",
|
|
50
50
|
"@prettier/sync": "0.6.1",
|
|
51
51
|
"@types/inquirer": "9.0.9",
|
|
52
52
|
"@yeoman/adapter": "3.1.0",
|
|
53
53
|
"@yeoman/types": "1.8.0",
|
|
54
|
-
"eslint": "
|
|
54
|
+
"eslint": "10.0.3",
|
|
55
55
|
"findup-sync": "^5.0.0",
|
|
56
56
|
"git-remote-url": "^1.0.1",
|
|
57
57
|
"github-username": "^9.0.0",
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"mem-fs-editor": "11.1.4",
|
|
64
64
|
"minimist": "1.2.8",
|
|
65
65
|
"parse-author": "2.0.0",
|
|
66
|
-
"pob-dependencies": "22.1
|
|
66
|
+
"pob-dependencies": "22.2.1",
|
|
67
67
|
"prettier": "3.8.1",
|
|
68
68
|
"semver": "7.7.4",
|
|
69
69
|
"typescript": "5.9.3",
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
"yeoman-generator": "7.5.1"
|
|
73
73
|
},
|
|
74
74
|
"devDependencies": {
|
|
75
|
-
"@pob/root": "22.
|
|
76
|
-
"@types/node": "22.19.
|
|
75
|
+
"@pob/root": "22.3.0",
|
|
76
|
+
"@types/node": "22.19.15"
|
|
77
77
|
}
|
|
78
78
|
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import Generator from "yeoman-generator";
|
|
2
|
-
import * as packageUtils from "../../../utils/package.js";
|
|
3
|
-
|
|
4
|
-
export default class AppNextjsGenerator extends Generator {
|
|
5
|
-
constructor(args, opts) {
|
|
6
|
-
super(args, opts);
|
|
7
|
-
|
|
8
|
-
this.option("export", {
|
|
9
|
-
type: Boolean,
|
|
10
|
-
required: false,
|
|
11
|
-
default: true,
|
|
12
|
-
description: "Use next export.",
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
writing() {
|
|
17
|
-
const pkg = this.fs.readJSON(this.destinationPath("package.json"));
|
|
18
|
-
|
|
19
|
-
packageUtils.addScripts(pkg, {
|
|
20
|
-
start: "next dev",
|
|
21
|
-
"start:prod": "next start",
|
|
22
|
-
// NODE_ENV=production is for tamagui
|
|
23
|
-
build: "NODE_ENV=production next build",
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
this.fs.writeJSON(this.destinationPath("package.json"), pkg);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import Generator from "yeoman-generator";
|
|
2
|
-
import * as packageUtils from "../../../utils/package.js";
|
|
3
|
-
|
|
4
|
-
// run "yarn create remix remix" first, then "cd remix ; pob app"
|
|
5
|
-
export default class AppRemixGenerator extends Generator {
|
|
6
|
-
writing() {
|
|
7
|
-
const pkg = this.fs.readJSON(this.destinationPath("package.json"));
|
|
8
|
-
|
|
9
|
-
packageUtils.addScripts(pkg, {
|
|
10
|
-
build: "cross-env NODE_ENV=production remix build",
|
|
11
|
-
start: "cross-env NODE_ENV=development remix dev",
|
|
12
|
-
"start:prod": "cross-env NODE_ENV=production remix-serve build",
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
this.fs.writeJSON(this.destinationPath("package.json"), pkg);
|
|
16
|
-
}
|
|
17
|
-
}
|