@codedrifters/configulator 0.0.309 → 0.0.311

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/lib/index.d.mts CHANGED
@@ -8695,6 +8695,95 @@ interface PnpmWorkspaceOptions {
8695
8695
  [dependencyName: string]: string;
8696
8696
  };
8697
8697
  };
8698
+ /**
8699
+ * Whether pnpm prompts before removing a sub-project's `node_modules`
8700
+ * directory during install. Set to `false` to skip the interactive prompt
8701
+ * so headless / non-TTY consumers (Claude Code agents, CI scripts,
8702
+ * scheduled tasks) don't abort with
8703
+ * `ERR_PNPM_ABORTED_REMOVE_MODULES_DIR_NO_TTY` mid-synth.
8704
+ *
8705
+ * Introduced in pnpm 11.0.
8706
+ *
8707
+ * @default undefined (key omitted; pnpm uses its built-in default)
8708
+ *
8709
+ * @see https://pnpm.io/settings#confirmmodulespurge
8710
+ */
8711
+ readonly confirmModulesPurge?: boolean;
8712
+ /**
8713
+ * Whether pnpm fails the install when a dependency's build script has not
8714
+ * been explicitly approved via `allowBuilds`. Set to `false` so unreviewed
8715
+ * build-script entries don't fail mid-synth in CI when configulator is
8716
+ * regenerating `allowBuilds` placeholders.
8717
+ *
8718
+ * Introduced in pnpm 10.3 (default `true` in pnpm 11).
8719
+ *
8720
+ * @default undefined (key omitted; pnpm uses its built-in default)
8721
+ *
8722
+ * @see https://pnpm.io/settings#strictdepbuilds
8723
+ */
8724
+ readonly strictDepBuilds?: boolean;
8725
+ /**
8726
+ * Whether `pnpm run` / `pnpm exec` verifies the lockfile matches
8727
+ * `node_modules` before executing the requested script. Set to `"install"`
8728
+ * (or `false`) so non-TTY consumers don't hang on the `"prompt"` default.
8729
+ *
8730
+ * Introduced in pnpm 10.x.
8731
+ *
8732
+ * @default undefined (key omitted; pnpm uses its built-in default of "prompt")
8733
+ *
8734
+ * @see https://pnpm.io/settings#verifydepsbeforerun
8735
+ */
8736
+ readonly verifyDepsBeforeRun?: "install" | "warn" | "error" | "prompt" | false;
8737
+ /**
8738
+ * How catalog entries are enforced when a sub-project's `package.json`
8739
+ * specifies a dependency that exists in a catalog. `"manual"` keeps the
8740
+ * existing opt-in `catalog:` protocol behavior, `"prefer"` substitutes
8741
+ * catalog versions automatically, and `"strict"` rejects any version
8742
+ * that diverges from the catalog.
8743
+ *
8744
+ * Introduced in pnpm 10.12.1.
8745
+ *
8746
+ * @default undefined (key omitted; pnpm uses its built-in default of "manual")
8747
+ *
8748
+ * @see https://pnpm.io/settings#catalogmode
8749
+ */
8750
+ readonly catalogMode?: "manual" | "prefer" | "strict";
8751
+ /**
8752
+ * Whether pnpm removes unused catalog entries from `pnpm-workspace.yaml`
8753
+ * during install. Helps keep the catalog honest when sub-projects stop
8754
+ * referencing a catalog entry.
8755
+ *
8756
+ * Introduced in pnpm 10.15.
8757
+ *
8758
+ * @default undefined (key omitted; pnpm uses its built-in default)
8759
+ *
8760
+ * @see https://pnpm.io/settings#cleanupunusedcatalogs
8761
+ */
8762
+ readonly cleanupUnusedCatalogs?: boolean;
8763
+ /**
8764
+ * Whether `minimumReleaseAge` resolution fails when no published version
8765
+ * satisfies the age constraint. `true` fails the install; `false` falls
8766
+ * back to an older version that does satisfy the age constraint.
8767
+ *
8768
+ * Introduced in pnpm 11.0.
8769
+ *
8770
+ * @default undefined (key omitted; pnpm uses its built-in default)
8771
+ *
8772
+ * @see https://pnpm.io/settings#minimumreleaseagestrict
8773
+ */
8774
+ readonly minimumReleaseAgeStrict?: boolean;
8775
+ /**
8776
+ * Whether `minimumReleaseAge` resolution skips the age check for packages
8777
+ * whose registry response lacks timestamp metadata. Default is `true`
8778
+ * (skip the check rather than fail), which mirrors pnpm's behavior.
8779
+ *
8780
+ * Introduced in pnpm 11.0.
8781
+ *
8782
+ * @default undefined (key omitted; pnpm uses its built-in default of true)
8783
+ *
8784
+ * @see https://pnpm.io/settings#minimumreleaseageignoremissingtime
8785
+ */
8786
+ readonly minimumReleaseAgeIgnoreMissingTime?: boolean;
8698
8787
  }
8699
8788
  declare class PnpmWorkspace extends Component {
8700
8789
  /**
@@ -8813,6 +8902,54 @@ declare class PnpmWorkspace extends Component {
8813
8902
  [dependencyName: string]: string;
8814
8903
  };
8815
8904
  };
8905
+ /**
8906
+ * Skip the interactive `node_modules` purge prompt so headless consumers
8907
+ * don't abort mid-synth. Introduced in pnpm 11.0.
8908
+ *
8909
+ * @see https://pnpm.io/settings#confirmmodulespurge
8910
+ */
8911
+ confirmModulesPurge?: boolean;
8912
+ /**
8913
+ * Fail (`true`) or warn (`false`) when a dependency's build script has
8914
+ * not been explicitly approved via `allowBuilds`. Introduced in pnpm 10.3.
8915
+ *
8916
+ * @see https://pnpm.io/settings#strictdepbuilds
8917
+ */
8918
+ strictDepBuilds?: boolean;
8919
+ /**
8920
+ * Behavior of `pnpm run` / `pnpm exec` when the lockfile drifts from
8921
+ * `node_modules`. Use `"install"` (or `false`) for non-TTY callers.
8922
+ *
8923
+ * @see https://pnpm.io/settings#verifydepsbeforerun
8924
+ */
8925
+ verifyDepsBeforeRun?: "install" | "warn" | "error" | "prompt" | false;
8926
+ /**
8927
+ * Catalog enforcement mode. Introduced in pnpm 10.12.1.
8928
+ *
8929
+ * @see https://pnpm.io/settings#catalogmode
8930
+ */
8931
+ catalogMode?: "manual" | "prefer" | "strict";
8932
+ /**
8933
+ * Whether unused catalog entries are pruned on install.
8934
+ * Introduced in pnpm 10.15.
8935
+ *
8936
+ * @see https://pnpm.io/settings#cleanupunusedcatalogs
8937
+ */
8938
+ cleanupUnusedCatalogs?: boolean;
8939
+ /**
8940
+ * Whether `minimumReleaseAge` resolution fails when no version satisfies
8941
+ * the age constraint. Introduced in pnpm 11.0.
8942
+ *
8943
+ * @see https://pnpm.io/settings#minimumreleaseagestrict
8944
+ */
8945
+ minimumReleaseAgeStrict?: boolean;
8946
+ /**
8947
+ * Whether `minimumReleaseAge` skips the age check for registries lacking
8948
+ * timestamp metadata. Introduced in pnpm 11.0.
8949
+ *
8950
+ * @see https://pnpm.io/settings#minimumreleaseageignoremissingtime
8951
+ */
8952
+ minimumReleaseAgeIgnoreMissingTime?: boolean;
8816
8953
  constructor(project: Project$1, options?: PnpmWorkspaceOptions);
8817
8954
  }
8818
8955
  /**
@@ -10281,9 +10418,22 @@ interface StarlightEditLink {
10281
10418
  readonly baseUrl: string;
10282
10419
  }
10283
10420
  /**
10284
- * Sidebar item accepted by Starlight's `sidebar` config. Covers the four
10285
- * common shapes: link, group with nested items, autogenerated group, and
10286
- * internal slug reference.
10421
+ * Sidebar item accepted by Starlight's `sidebar` config.
10422
+ *
10423
+ * Covers the shapes Starlight 0.39+ accepts:
10424
+ * - link (`{ label, link, badge? }`)
10425
+ * - group with nested items (`{ label, collapsed?, items }`)
10426
+ * - bare autogenerated entry, nested inside a group's `items` array
10427
+ * (`{ autogenerate: { directory, collapsed? } }`)
10428
+ * - internal slug reference (`{ label, slug }`)
10429
+ *
10430
+ * Plus one legacy shape kept for one deprecation cycle:
10431
+ * - top-level autogenerated group (`{ label, collapsed?, autogenerate }`).
10432
+ * Starlight v0.39.0 removed runtime support for this shape; the
10433
+ * `StarlightProject` emitter translates it to the nested form
10434
+ * `{ label, collapsed?, items: [{ autogenerate }] }` before writing
10435
+ * `astro.config.mjs`. Migrate to the nested form directly — this
10436
+ * variant will be removed in a future release.
10287
10437
  */
10288
10438
  type StarlightSidebarItem = {
10289
10439
  readonly label: string;
@@ -10297,6 +10447,12 @@ type StarlightSidebarItem = {
10297
10447
  readonly collapsed?: boolean;
10298
10448
  readonly items: ReadonlyArray<StarlightSidebarItem>;
10299
10449
  } | {
10450
+ readonly autogenerate: {
10451
+ readonly directory: string;
10452
+ readonly collapsed?: boolean;
10453
+ };
10454
+ } | {
10455
+ /** @deprecated Use `{ label, items: [{ autogenerate }] }` instead. Translated by the emitter for one cycle. */
10300
10456
  readonly label: string;
10301
10457
  readonly collapsed?: boolean;
10302
10458
  readonly autogenerate: {
package/lib/index.d.ts CHANGED
@@ -8744,6 +8744,95 @@ interface PnpmWorkspaceOptions {
8744
8744
  [dependencyName: string]: string;
8745
8745
  };
8746
8746
  };
8747
+ /**
8748
+ * Whether pnpm prompts before removing a sub-project's `node_modules`
8749
+ * directory during install. Set to `false` to skip the interactive prompt
8750
+ * so headless / non-TTY consumers (Claude Code agents, CI scripts,
8751
+ * scheduled tasks) don't abort with
8752
+ * `ERR_PNPM_ABORTED_REMOVE_MODULES_DIR_NO_TTY` mid-synth.
8753
+ *
8754
+ * Introduced in pnpm 11.0.
8755
+ *
8756
+ * @default undefined (key omitted; pnpm uses its built-in default)
8757
+ *
8758
+ * @see https://pnpm.io/settings#confirmmodulespurge
8759
+ */
8760
+ readonly confirmModulesPurge?: boolean;
8761
+ /**
8762
+ * Whether pnpm fails the install when a dependency's build script has not
8763
+ * been explicitly approved via `allowBuilds`. Set to `false` so unreviewed
8764
+ * build-script entries don't fail mid-synth in CI when configulator is
8765
+ * regenerating `allowBuilds` placeholders.
8766
+ *
8767
+ * Introduced in pnpm 10.3 (default `true` in pnpm 11).
8768
+ *
8769
+ * @default undefined (key omitted; pnpm uses its built-in default)
8770
+ *
8771
+ * @see https://pnpm.io/settings#strictdepbuilds
8772
+ */
8773
+ readonly strictDepBuilds?: boolean;
8774
+ /**
8775
+ * Whether `pnpm run` / `pnpm exec` verifies the lockfile matches
8776
+ * `node_modules` before executing the requested script. Set to `"install"`
8777
+ * (or `false`) so non-TTY consumers don't hang on the `"prompt"` default.
8778
+ *
8779
+ * Introduced in pnpm 10.x.
8780
+ *
8781
+ * @default undefined (key omitted; pnpm uses its built-in default of "prompt")
8782
+ *
8783
+ * @see https://pnpm.io/settings#verifydepsbeforerun
8784
+ */
8785
+ readonly verifyDepsBeforeRun?: "install" | "warn" | "error" | "prompt" | false;
8786
+ /**
8787
+ * How catalog entries are enforced when a sub-project's `package.json`
8788
+ * specifies a dependency that exists in a catalog. `"manual"` keeps the
8789
+ * existing opt-in `catalog:` protocol behavior, `"prefer"` substitutes
8790
+ * catalog versions automatically, and `"strict"` rejects any version
8791
+ * that diverges from the catalog.
8792
+ *
8793
+ * Introduced in pnpm 10.12.1.
8794
+ *
8795
+ * @default undefined (key omitted; pnpm uses its built-in default of "manual")
8796
+ *
8797
+ * @see https://pnpm.io/settings#catalogmode
8798
+ */
8799
+ readonly catalogMode?: "manual" | "prefer" | "strict";
8800
+ /**
8801
+ * Whether pnpm removes unused catalog entries from `pnpm-workspace.yaml`
8802
+ * during install. Helps keep the catalog honest when sub-projects stop
8803
+ * referencing a catalog entry.
8804
+ *
8805
+ * Introduced in pnpm 10.15.
8806
+ *
8807
+ * @default undefined (key omitted; pnpm uses its built-in default)
8808
+ *
8809
+ * @see https://pnpm.io/settings#cleanupunusedcatalogs
8810
+ */
8811
+ readonly cleanupUnusedCatalogs?: boolean;
8812
+ /**
8813
+ * Whether `minimumReleaseAge` resolution fails when no published version
8814
+ * satisfies the age constraint. `true` fails the install; `false` falls
8815
+ * back to an older version that does satisfy the age constraint.
8816
+ *
8817
+ * Introduced in pnpm 11.0.
8818
+ *
8819
+ * @default undefined (key omitted; pnpm uses its built-in default)
8820
+ *
8821
+ * @see https://pnpm.io/settings#minimumreleaseagestrict
8822
+ */
8823
+ readonly minimumReleaseAgeStrict?: boolean;
8824
+ /**
8825
+ * Whether `minimumReleaseAge` resolution skips the age check for packages
8826
+ * whose registry response lacks timestamp metadata. Default is `true`
8827
+ * (skip the check rather than fail), which mirrors pnpm's behavior.
8828
+ *
8829
+ * Introduced in pnpm 11.0.
8830
+ *
8831
+ * @default undefined (key omitted; pnpm uses its built-in default of true)
8832
+ *
8833
+ * @see https://pnpm.io/settings#minimumreleaseageignoremissingtime
8834
+ */
8835
+ readonly minimumReleaseAgeIgnoreMissingTime?: boolean;
8747
8836
  }
8748
8837
  declare class PnpmWorkspace extends Component {
8749
8838
  /**
@@ -8862,6 +8951,54 @@ declare class PnpmWorkspace extends Component {
8862
8951
  [dependencyName: string]: string;
8863
8952
  };
8864
8953
  };
8954
+ /**
8955
+ * Skip the interactive `node_modules` purge prompt so headless consumers
8956
+ * don't abort mid-synth. Introduced in pnpm 11.0.
8957
+ *
8958
+ * @see https://pnpm.io/settings#confirmmodulespurge
8959
+ */
8960
+ confirmModulesPurge?: boolean;
8961
+ /**
8962
+ * Fail (`true`) or warn (`false`) when a dependency's build script has
8963
+ * not been explicitly approved via `allowBuilds`. Introduced in pnpm 10.3.
8964
+ *
8965
+ * @see https://pnpm.io/settings#strictdepbuilds
8966
+ */
8967
+ strictDepBuilds?: boolean;
8968
+ /**
8969
+ * Behavior of `pnpm run` / `pnpm exec` when the lockfile drifts from
8970
+ * `node_modules`. Use `"install"` (or `false`) for non-TTY callers.
8971
+ *
8972
+ * @see https://pnpm.io/settings#verifydepsbeforerun
8973
+ */
8974
+ verifyDepsBeforeRun?: "install" | "warn" | "error" | "prompt" | false;
8975
+ /**
8976
+ * Catalog enforcement mode. Introduced in pnpm 10.12.1.
8977
+ *
8978
+ * @see https://pnpm.io/settings#catalogmode
8979
+ */
8980
+ catalogMode?: "manual" | "prefer" | "strict";
8981
+ /**
8982
+ * Whether unused catalog entries are pruned on install.
8983
+ * Introduced in pnpm 10.15.
8984
+ *
8985
+ * @see https://pnpm.io/settings#cleanupunusedcatalogs
8986
+ */
8987
+ cleanupUnusedCatalogs?: boolean;
8988
+ /**
8989
+ * Whether `minimumReleaseAge` resolution fails when no version satisfies
8990
+ * the age constraint. Introduced in pnpm 11.0.
8991
+ *
8992
+ * @see https://pnpm.io/settings#minimumreleaseagestrict
8993
+ */
8994
+ minimumReleaseAgeStrict?: boolean;
8995
+ /**
8996
+ * Whether `minimumReleaseAge` skips the age check for registries lacking
8997
+ * timestamp metadata. Introduced in pnpm 11.0.
8998
+ *
8999
+ * @see https://pnpm.io/settings#minimumreleaseageignoremissingtime
9000
+ */
9001
+ minimumReleaseAgeIgnoreMissingTime?: boolean;
8865
9002
  constructor(project: Project, options?: PnpmWorkspaceOptions);
8866
9003
  }
8867
9004
  /**
@@ -10330,9 +10467,22 @@ interface StarlightEditLink {
10330
10467
  readonly baseUrl: string;
10331
10468
  }
10332
10469
  /**
10333
- * Sidebar item accepted by Starlight's `sidebar` config. Covers the four
10334
- * common shapes: link, group with nested items, autogenerated group, and
10335
- * internal slug reference.
10470
+ * Sidebar item accepted by Starlight's `sidebar` config.
10471
+ *
10472
+ * Covers the shapes Starlight 0.39+ accepts:
10473
+ * - link (`{ label, link, badge? }`)
10474
+ * - group with nested items (`{ label, collapsed?, items }`)
10475
+ * - bare autogenerated entry, nested inside a group's `items` array
10476
+ * (`{ autogenerate: { directory, collapsed? } }`)
10477
+ * - internal slug reference (`{ label, slug }`)
10478
+ *
10479
+ * Plus one legacy shape kept for one deprecation cycle:
10480
+ * - top-level autogenerated group (`{ label, collapsed?, autogenerate }`).
10481
+ * Starlight v0.39.0 removed runtime support for this shape; the
10482
+ * `StarlightProject` emitter translates it to the nested form
10483
+ * `{ label, collapsed?, items: [{ autogenerate }] }` before writing
10484
+ * `astro.config.mjs`. Migrate to the nested form directly — this
10485
+ * variant will be removed in a future release.
10336
10486
  */
10337
10487
  type StarlightSidebarItem = {
10338
10488
  readonly label: string;
@@ -10346,6 +10496,12 @@ type StarlightSidebarItem = {
10346
10496
  readonly collapsed?: boolean;
10347
10497
  readonly items: ReadonlyArray<StarlightSidebarItem>;
10348
10498
  } | {
10499
+ readonly autogenerate: {
10500
+ readonly directory: string;
10501
+ readonly collapsed?: boolean;
10502
+ };
10503
+ } | {
10504
+ /** @deprecated Use `{ label, items: [{ autogenerate }] }` instead. Translated by the emitter for one cycle. */
10349
10505
  readonly label: string;
10350
10506
  readonly collapsed?: boolean;
10351
10507
  readonly autogenerate: {
package/lib/index.js CHANGED
@@ -16934,6 +16934,13 @@ var PnpmWorkspace = class _PnpmWorkspace extends import_projen.Component {
16934
16934
  this.subprojects = options.subprojects ?? [];
16935
16935
  this.defaultCatalog = options.defaultCatalog;
16936
16936
  this.namedCatalogs = options.namedCatalogs;
16937
+ this.confirmModulesPurge = options.confirmModulesPurge;
16938
+ this.strictDepBuilds = options.strictDepBuilds;
16939
+ this.verifyDepsBeforeRun = options.verifyDepsBeforeRun;
16940
+ this.catalogMode = options.catalogMode;
16941
+ this.cleanupUnusedCatalogs = options.cleanupUnusedCatalogs;
16942
+ this.minimumReleaseAgeStrict = options.minimumReleaseAgeStrict;
16943
+ this.minimumReleaseAgeIgnoreMissingTime = options.minimumReleaseAgeIgnoreMissingTime;
16937
16944
  project.addPackageIgnore(this.fileName);
16938
16945
  new import_projen.YamlFile(this.project, this.fileName, {
16939
16946
  obj: () => {
@@ -16990,6 +16997,27 @@ var PnpmWorkspace = class _PnpmWorkspace extends import_projen.Component {
16990
16997
  if (this.namedCatalogs && Object.keys(this.namedCatalogs).length > 0) {
16991
16998
  pnpmConfig.namedCatalogs = this.namedCatalogs;
16992
16999
  }
17000
+ if (this.confirmModulesPurge !== void 0) {
17001
+ pnpmConfig.confirmModulesPurge = this.confirmModulesPurge;
17002
+ }
17003
+ if (this.strictDepBuilds !== void 0) {
17004
+ pnpmConfig.strictDepBuilds = this.strictDepBuilds;
17005
+ }
17006
+ if (this.verifyDepsBeforeRun !== void 0) {
17007
+ pnpmConfig.verifyDepsBeforeRun = this.verifyDepsBeforeRun;
17008
+ }
17009
+ if (this.catalogMode !== void 0) {
17010
+ pnpmConfig.catalogMode = this.catalogMode;
17011
+ }
17012
+ if (this.cleanupUnusedCatalogs !== void 0) {
17013
+ pnpmConfig.cleanupUnusedCatalogs = this.cleanupUnusedCatalogs;
17014
+ }
17015
+ if (this.minimumReleaseAgeStrict !== void 0) {
17016
+ pnpmConfig.minimumReleaseAgeStrict = this.minimumReleaseAgeStrict;
17017
+ }
17018
+ if (this.minimumReleaseAgeIgnoreMissingTime !== void 0) {
17019
+ pnpmConfig.minimumReleaseAgeIgnoreMissingTime = this.minimumReleaseAgeIgnoreMissingTime;
17020
+ }
16993
17021
  return {
16994
17022
  ...packages.length > 0 ? { packages } : {},
16995
17023
  ...pnpmConfig ? { ...pnpmConfig } : {}
@@ -35662,7 +35690,7 @@ function buildStarlightConfig(options) {
35662
35690
  config.social = options.social;
35663
35691
  }
35664
35692
  if (options.sidebar !== void 0) {
35665
- config.sidebar = options.sidebar;
35693
+ config.sidebar = options.sidebar.map(translateSidebarItem);
35666
35694
  }
35667
35695
  if (options.customCss !== void 0) {
35668
35696
  config.customCss = options.customCss;
@@ -35675,6 +35703,31 @@ function buildStarlightConfig(options) {
35675
35703
  }
35676
35704
  return config;
35677
35705
  }
35706
+ function translateSidebarItem(item) {
35707
+ if (item === null || typeof item !== "object") {
35708
+ return item;
35709
+ }
35710
+ const record = item;
35711
+ if (typeof record.label === "string" && record.autogenerate !== void 0 && record.items === void 0) {
35712
+ const translated = {
35713
+ label: record.label,
35714
+ items: [{ autogenerate: record.autogenerate }]
35715
+ };
35716
+ if (record.collapsed !== void 0) {
35717
+ translated.collapsed = record.collapsed;
35718
+ }
35719
+ return translated;
35720
+ }
35721
+ if (Array.isArray(record.items)) {
35722
+ return {
35723
+ ...record,
35724
+ items: record.items.map(
35725
+ translateSidebarItem
35726
+ )
35727
+ };
35728
+ }
35729
+ return item;
35730
+ }
35678
35731
  var DEFAULT_INDEX_MDX = `---
35679
35732
  title: Welcome
35680
35733
  description: Starlight-powered documentation site.