pob 26.1.1 → 26.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 CHANGED
@@ -3,6 +3,27 @@
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
+ ## [26.3.0](https://github.com/christophehurpeau/pob/compare/pob@26.2.0...pob@26.3.0) (2025-02-02)
7
+
8
+ ### Features
9
+
10
+ * add mjs and cjs to checkonly ([2666924](https://github.com/christophehurpeau/pob/commit/2666924e72980b7c9a5c1315ff7f8680642171ff))
11
+ * improve typescript checkonly support ([3355104](https://github.com/christophehurpeau/pob/commit/3355104897428d9014b11402ed771a10b1b94064))
12
+
13
+ ### Bug Fixes
14
+
15
+ * avoid deleting @babel/core ([022d74d](https://github.com/christophehurpeau/pob/commit/022d74d8e462962432cf0bc53d5f3b0d79f86769))
16
+
17
+ ## [26.2.0](https://github.com/christophehurpeau/pob/compare/pob@26.1.1...pob@26.2.0) (2025-02-02)
18
+
19
+ ### Features
20
+
21
+ * better tamagui support ([7af3a16](https://github.com/christophehurpeau/pob/commit/7af3a161ed462135bb562fff46ad0ca8d606faf1))
22
+ * support react-native target ([7e374f8](https://github.com/christophehurpeau/pob/commit/7e374f842c5aaf78f886722c305ac52f9a6aa5db))
23
+
24
+ Version bump for dependency: @pob/root
25
+
26
+
6
27
  ## [26.1.1](https://github.com/christophehurpeau/pob/compare/pob@26.1.0...pob@26.1.1) (2025-02-02)
7
28
 
8
29
  Version bump for dependency: @pob/root
@@ -241,7 +241,7 @@ export default class CommonBabelGenerator extends Generator {
241
241
  pkg.pob.bundler === "rollup-babel"
242
242
  ) {
243
243
  delete pkg.pob.babelEnvs;
244
- if (pkg.pob.typescript !== true) {
244
+ if (!pkg.pob.typescript) {
245
245
  delete pkg.pob.envs;
246
246
  delete pkg.pob.entries;
247
247
  delete pkg.pob.jsx;
@@ -304,11 +304,14 @@ export default class CommonBabelGenerator extends Generator {
304
304
 
305
305
  /* dependencies */
306
306
 
307
- packageUtils.addOrRemoveDevDependencies(
308
- pkg,
309
- useBabel || (pkg.peerDependencies && pkg.peerDependencies["@babel/core"]),
310
- ["@babel/core"],
311
- );
307
+ if (
308
+ useBabel ||
309
+ (pkg.peerDependencies && pkg.peerDependencies["@babel/core"])
310
+ ) {
311
+ packageUtils.addDevDependencies(pkg, ["@babel/core"]);
312
+ } else if (pkg.dependencies && pkg.dependencies["pob-babel"] && !useBabel) {
313
+ packageUtils.removeDevDependencies(pkg, ["@babel/core"]);
314
+ }
312
315
  packageUtils.addOrRemoveDevDependencies(pkg, useBabel, ["pob-babel"]);
313
316
 
314
317
  if (pkg.dependencies && pkg.dependencies["pob-babel"]) {
@@ -325,7 +328,8 @@ export default class CommonBabelGenerator extends Generator {
325
328
  packageUtils.addOrRemoveDevDependencies(
326
329
  pkg,
327
330
  (useBabel && pkg.pob.jsx) ||
328
- (pkg.devDependencies?.["@babel/preset-react"] && isLibraryRollupPlugin),
331
+ (pkg.devDependencies?.["@babel/preset-react"] &&
332
+ (isLibraryRollupPlugin || pkg.name === "alouette-icons")),
329
333
  ["@babel/preset-react"],
330
334
  );
331
335
 
@@ -136,10 +136,10 @@ export default class CommonTranspilerGenerator extends Generator {
136
136
  default() {
137
137
  const pkg = this.fs.readJSON(this.destinationPath("package.json"));
138
138
  const withBabel = this.babelEnvs && this.babelEnvs.length > 0;
139
- const withTypescript =
140
- pkg.pob.typescript === true || withBabel || !!pkg.pob.bundler;
139
+ const withTypescript = pkg.pob.typescript || withBabel || !!pkg.pob.bundler;
141
140
  const bundler =
142
141
  withTypescript &&
142
+ pkg.pob?.typescript !== "check-only" &&
143
143
  (pkg.pob.rollup === false ||
144
144
  pkg.pob.bundler === "tsc" ||
145
145
  (!pkg.pob.bundler && !pkg.pob.typescript === true)
@@ -202,7 +202,11 @@ export default class CommonTranspilerGenerator extends Generator {
202
202
  });
203
203
 
204
204
  if (shouldBuildDefinitions) {
205
- pkg.scripts.build += " && yarn run build:definitions";
205
+ if (pkg.scripts.build) {
206
+ pkg.scripts.build += " && yarn run build:definitions";
207
+ } else {
208
+ pkg.scripts.build = "yarn run build:definitions";
209
+ }
206
210
  } else if (!this.options.isApp && !bundler && !withTypescript) {
207
211
  // check definitions, but also force lerna to execute build:definitions in right order
208
212
  // example: nightingale-types depends on nightingale-levels
@@ -238,17 +242,23 @@ export default class CommonTranspilerGenerator extends Generator {
238
242
  );
239
243
  packageUtils.addOrRemoveDevDependencies(
240
244
  pkg,
241
- bundler === "esbuild" && withTypescript,
245
+ bundler === "esbuild" &&
246
+ withTypescript &&
247
+ pkg.pob?.typescript !== "check-only",
242
248
  ["@pob/esbuild"],
243
249
  );
244
250
  packageUtils.addOrRemoveDevDependencies(
245
251
  pkg,
246
- bundler === "rollup-esbuild" && withTypescript,
252
+ bundler === "rollup-esbuild" &&
253
+ withTypescript &&
254
+ pkg.pob?.typescript !== "check-only",
247
255
  ["@pob/rollup-esbuild"],
248
256
  );
249
257
  packageUtils.addOrRemoveDependencies(
250
258
  pkg,
251
- (bundler === "tsc" || bundler === "rollup-typescript") && withTypescript,
259
+ (bundler === "tsc" || bundler === "rollup-typescript") &&
260
+ withTypescript &&
261
+ pkg.pob?.typescript !== "check-only",
252
262
  ["tslib"],
253
263
  "^",
254
264
  );
@@ -289,7 +299,7 @@ export default class CommonTranspilerGenerator extends Generator {
289
299
  }
290
300
 
291
301
  // if (!pkg.main || pkg.main.startsWith('./lib/')) {
292
- if (bundler || withTypescript) {
302
+ if (bundler || (withTypescript && pkg.pob?.typescript !== "check-only")) {
293
303
  // see pkg.exports instead.
294
304
  delete pkg.main;
295
305
  if (!this.options.isApp) {
@@ -298,12 +308,12 @@ export default class CommonTranspilerGenerator extends Generator {
298
308
  pkg.types = `./${this.options.srcDirectory}/index.ts`;
299
309
  }
300
310
  } else {
301
- if (!pkg.main) {
311
+ if (!pkg.main && !pkg.pob.entries) {
302
312
  pkg.exports = "./lib/index.js";
303
313
  }
304
314
  if (pkg.type === "module" && this.fs.exists("./lib/index.cjs")) {
305
315
  pkg.main = "./lib/index.cjs";
306
- } else {
316
+ } else if (!pkg.pob?.entries || pkg.pob.entries.includes("index")) {
307
317
  pkg.main = "./lib/index.js";
308
318
  }
309
319
  if (!this.options.isApp || this.options.isAppLibrary) {
@@ -351,7 +361,7 @@ export default class CommonTranspilerGenerator extends Generator {
351
361
  }
352
362
 
353
363
  /* webpack 5 and node with ESM support */
354
- if (bundler || withTypescript) {
364
+ if (bundler || (withTypescript && pkg.pob?.typescript !== "check-only")) {
355
365
  const omitTarget = bundler === "esbuild" || bundler === "tsc";
356
366
  pkg.exports = {
357
367
  "./package.json": "./package.json",
@@ -375,7 +385,7 @@ export default class CommonTranspilerGenerator extends Generator {
375
385
  };
376
386
 
377
387
  const defaultNodeEnv =
378
- withBabel || withTypescript
388
+ withBabel || (withTypescript && pkg.pob?.typescript !== "check-only")
379
389
  ? envs.find((env) => env.target === "node")
380
390
  : undefined;
381
391
 
@@ -392,48 +402,73 @@ export default class CommonTranspilerGenerator extends Generator {
392
402
 
393
403
  const exportTarget = {};
394
404
 
395
- if (target === "node") {
396
- const cjsExt = pkg.type === "module" ? "cjs" : "cjs.js";
397
- const filenameWithoutExt = `${entryDistName}${
398
- omitTarget
399
- ? ""
400
- : `-${target}${omitVersionInFileName ? "" : version}`
401
- }`;
402
- if (bundler === "tsc") {
403
- if (formats) {
404
- throw new Error("tsc does not support formats");
405
+ switch (target) {
406
+ case "node": {
407
+ const cjsExt = pkg.type === "module" ? "cjs" : "cjs.js";
408
+ const filenameWithoutExt = `${entryDistName}${
409
+ omitTarget
410
+ ? ""
411
+ : `-${target}${omitVersionInFileName ? "" : version}`
412
+ }`;
413
+ if (bundler === "tsc") {
414
+ if (formats) {
415
+ throw new Error("tsc does not support formats");
416
+ }
417
+ exportTarget.import = `./${this.options.buildDirectory}/${filenameWithoutExt}.js`;
418
+ } else if (!formats || formats.includes("es")) {
419
+ exportTarget.import = `./${this.options.buildDirectory}/${filenameWithoutExt}.mjs`;
420
+
421
+ if (formats && formats.includes("cjs")) {
422
+ exportTarget.require = `./${this.options.buildDirectory}/${filenameWithoutExt}.${cjsExt}`;
423
+ }
424
+ } else if (formats && formats.includes("cjs")) {
425
+ exportTarget.default = `./${this.options.buildDirectory}/${filenameWithoutExt}.${cjsExt}`;
426
+ }
427
+ // eslint: https://github.com/benmosher/eslint-plugin-import/issues/2132
428
+ // jest: https://github.com/facebook/jest/issues/9771
429
+ if (!pkg.main && exportName === ".") {
430
+ pkg.main =
431
+ pkg.type === "module"
432
+ ? exportTarget.import
433
+ : exportTarget.default ||
434
+ exportTarget.require ||
435
+ exportTarget.import;
436
+ }
437
+
438
+ break;
439
+ }
440
+ case "browser": {
441
+ if (!formats || formats.includes("es")) {
442
+ exportTarget.import = `./${
443
+ this.options.buildDirectory
444
+ }/${entryDistName}-${target}${version || ""}.es.js`;
405
445
  }
406
- exportTarget.import = `./${this.options.buildDirectory}/${filenameWithoutExt}.js`;
407
- } else if (!formats || formats.includes("es")) {
408
- exportTarget.import = `./${this.options.buildDirectory}/${filenameWithoutExt}.mjs`;
409
446
 
410
447
  if (formats && formats.includes("cjs")) {
411
- exportTarget.require = `./${this.options.buildDirectory}/${filenameWithoutExt}.${cjsExt}`;
448
+ exportTarget.require = `./${
449
+ this.options.buildDirectory
450
+ }/${entryDistName}-${target}${version || ""}.cjs.js`;
412
451
  }
413
- } else if (formats && formats.includes("cjs")) {
414
- exportTarget.default = `./${this.options.buildDirectory}/${filenameWithoutExt}.${cjsExt}`;
415
- }
416
- // eslint: https://github.com/benmosher/eslint-plugin-import/issues/2132
417
- // jest: https://github.com/facebook/jest/issues/9771
418
- if (!pkg.main && exportName === ".") {
419
- pkg.main =
420
- pkg.type === "module"
421
- ? exportTarget.import
422
- : exportTarget.default ||
423
- exportTarget.require ||
424
- exportTarget.import;
425
- }
426
- } else if (target === "browser") {
427
- if (!formats || formats.includes("es")) {
428
- exportTarget.import = `./${
429
- this.options.buildDirectory
430
- }/${entryDistName}-${target}${version || ""}.es.js`;
452
+
453
+ break;
431
454
  }
455
+ case "react-native": {
456
+ if (!formats || formats.includes("es")) {
457
+ exportTarget.import = `./${
458
+ this.options.buildDirectory
459
+ }/${entryDistName}-${target}.es.js`;
460
+ }
432
461
 
433
- if (formats && formats.includes("cjs")) {
434
- exportTarget.require = `./${
435
- this.options.buildDirectory
436
- }/${entryDistName}-${target}${version || ""}.cjs.js`;
462
+ if (formats && formats.includes("cjs")) {
463
+ exportTarget.require = `./${
464
+ this.options.buildDirectory
465
+ }/${entryDistName}-${target}.cjs.js`;
466
+ }
467
+
468
+ break;
469
+ }
470
+ default: {
471
+ throw new Error(`Invalid target: ${target}`);
437
472
  }
438
473
  }
439
474
 
@@ -237,20 +237,27 @@ export default class CommonTypescriptGenerator extends Generator {
237
237
  ]),
238
238
  );
239
239
 
240
+ const isTypescriptPackageMap = new Map(
241
+ [...packageLocations.entries()].map(
242
+ ([packageName, packageLocation]) => [
243
+ packageName,
244
+ existsSync(
245
+ `${packageLocations.get(packageName)}/tsconfig.json`,
246
+ ) && existsSync(`${packageLocations.get(packageName)}/src`),
247
+ ],
248
+ ),
249
+ );
250
+
240
251
  monorepoPackageSrcPaths = [...packageLocations.entries()].map(
241
252
  ([packageName, packageLocation]) => [
242
253
  packageName,
243
254
  `${packageLocation}/${
244
- existsSync(`${packageLocations.get(packageName)}/tsconfig.json`)
245
- ? "src"
246
- : "lib"
255
+ isTypescriptPackageMap.get(packageName) ? "src" : "lib"
247
256
  }`,
248
257
  ],
249
258
  );
250
259
  monorepoPackageReferences = yoConfig.pob.monorepo.packageNames
251
- .filter((packageName) =>
252
- existsSync(`${packageLocations.get(packageName)}/tsconfig.json`),
253
- )
260
+ .filter((packageName) => isTypescriptPackageMap.get(packageName))
254
261
  .map((packageName) => packageLocations.get(packageName));
255
262
  // monorepoPackageBuildReferences = yoConfig.pob.monorepo.packageNames
256
263
  // .filter((packageName) =>
@@ -12,5 +12,5 @@
12
12
  <% } -%>
13
13
  "noEmit": true
14
14
  },
15
- "include": ["<%= srcDirectory %>/**/*.js"]
15
+ "include": ["<%= srcDirectory %>/**/*.js","<%= srcDirectory %>/**/*.mjs","<%= srcDirectory %>/**/*.cjs", "<%= srcDirectory %>/**/*.d.ts"]
16
16
  }
@@ -135,9 +135,9 @@ export default class CoreYarnGenerator extends Generator {
135
135
  if (
136
136
  !pkg.packageManager ||
137
137
  !pkg.packageManager.startsWith("yarn@") ||
138
- lt(pkg.packageManager.slice("yarn@".length), "4.0.2")
138
+ lt(pkg.packageManager.slice("yarn@".length), "4.6.0")
139
139
  ) {
140
- pkg.packageManager = "yarn@4.0.2";
140
+ pkg.packageManager = "yarn@4.6.0";
141
141
  }
142
142
 
143
143
  // must be done after plugins installed
@@ -61,13 +61,12 @@ const hasBuild = (packages, configs) =>
61
61
  );
62
62
 
63
63
  const hasTamagui = (packages, configs) =>
64
- configs.some(
65
- (config, index) =>
64
+ packages.some(
65
+ (pkg) =>
66
66
  !!(
67
- config &&
68
- config.project &&
69
- config.project.type === "app" &&
70
- ["storybook"].includes(config.app.type)
67
+ pkg.dependencies?.tamagui ||
68
+ pkg.dependencies?.["@tamagui/core"] ||
69
+ pkg.dependencies?.alouette
71
70
  ),
72
71
  );
73
72
 
@@ -254,6 +253,10 @@ export default class PobMonorepoGenerator extends Generator {
254
253
  splitCIJobs,
255
254
  });
256
255
 
256
+ const gitignorePaths = [
257
+ hasTamagui(this.packages, this.packageConfigs) && ".tamagui",
258
+ ].filter(Boolean);
259
+
257
260
  this.composeWith("pob:common:format-lint", {
258
261
  monorepo: true,
259
262
  documentation: this.pobLernaConfig.documentation,
@@ -265,9 +268,9 @@ export default class PobMonorepoGenerator extends Generator {
265
268
  yarnNodeLinker: this.options.yarnNodeLinker,
266
269
  appTypes: JSON.stringify(getAppTypes(this.packageConfigs)),
267
270
  ignorePaths: [
271
+ ...gitignorePaths.map((path) => `/${path}`),
268
272
  hasDist(this.packages, this.packageConfigs) && "/dist",
269
273
  hasBuild(this.packages, this.packageConfigs) && "/build",
270
- hasTamagui(this.packages, this.packageConfigs) && "/.tamagui",
271
274
  ]
272
275
  .filter(Boolean)
273
276
  .join("\n"),
@@ -300,6 +303,8 @@ export default class PobMonorepoGenerator extends Generator {
300
303
  typescript: this.pobLernaConfig.typescript,
301
304
  documentation: this.pobLernaConfig.documentation,
302
305
  testing: this.pobLernaConfig.testing,
306
+ // TODO add workspaces paths like we do in format-lint
307
+ paths: gitignorePaths.join("\n"),
303
308
  // todo: fix this using workspaces
304
309
  // buildDirectory: this.pobLernaConfig.typescript ? `/*/build` : "",
305
310
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pob",
3
- "version": "26.1.1",
3
+ "version": "26.3.0",
4
4
  "description": "Pile of bones, library generator with git/babel/typescript/typedoc/readme/jest",
5
5
  "keywords": [
6
6
  "skeleton"
@@ -65,7 +65,7 @@
65
65
  "mem-fs-editor": "11.1.4",
66
66
  "minimist": "1.2.8",
67
67
  "parse-author": "2.0.0",
68
- "pob-dependencies": "17.1.0",
68
+ "pob-dependencies": "17.2.0",
69
69
  "prettier": "3.4.2",
70
70
  "semver": "7.7.0",
71
71
  "typescript": "5.7.3",
@@ -75,7 +75,7 @@
75
75
  "yeoman-generator": "7.4.0"
76
76
  },
77
77
  "devDependencies": {
78
- "@pob/root": "16.1.1",
78
+ "@pob/root": "16.2.0",
79
79
  "@types/node": "22.13.0"
80
80
  }
81
81
  }