release-monorepo-semantically 1.9.4 → 1.11.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.
Files changed (99) hide show
  1. package/README.md +70 -2
  2. package/dist/cli/Application.d.ts +1 -1
  3. package/dist/cli/Application.js +1 -1
  4. package/dist/cli/decorators.d.ts +1 -7
  5. package/dist/cli/decorators.d.ts.map +1 -1
  6. package/dist/cli/decorators.js +1 -5
  7. package/dist/cli/decorators.js.map +1 -1
  8. package/dist/cli/execute.d.ts +4 -6
  9. package/dist/cli/execute.d.ts.map +1 -1
  10. package/dist/cli/execute.js +5 -26
  11. package/dist/cli/execute.js.map +1 -1
  12. package/dist/cli/index.d.ts +1 -1
  13. package/dist/cli/index.d.ts.map +1 -1
  14. package/dist/cli/index.js +1 -1
  15. package/dist/cli/index.js.map +1 -1
  16. package/dist/domain/ConventionalCommit.d.ts +22 -3
  17. package/dist/domain/ConventionalCommit.d.ts.map +1 -1
  18. package/dist/domain/ConventionalCommit.js +39 -7
  19. package/dist/domain/ConventionalCommit.js.map +1 -1
  20. package/dist/domain/PackageJSON.d.ts +24 -0
  21. package/dist/domain/PackageJSON.d.ts.map +1 -1
  22. package/dist/domain/PackageJSON.js +29 -1
  23. package/dist/domain/PackageJSON.js.map +1 -1
  24. package/dist/exceptions/DomainException.d.ts +9 -0
  25. package/dist/exceptions/DomainException.d.ts.map +1 -1
  26. package/dist/exceptions/DomainException.js +15 -0
  27. package/dist/exceptions/DomainException.js.map +1 -1
  28. package/dist/exceptions/ExceptionHandler.js +2 -2
  29. package/dist/exceptions/ExceptionHandler.js.map +1 -1
  30. package/dist/features/changelog/ChangelogController.d.ts.map +1 -1
  31. package/dist/features/changelog/ChangelogController.js +7 -7
  32. package/dist/features/changelog/ChangelogController.js.map +1 -1
  33. package/dist/features/changelog/changelog.hbs +10 -0
  34. package/dist/features/packageJson/PackageController.d.ts.map +1 -1
  35. package/dist/features/packageJson/PackageController.js +7 -7
  36. package/dist/features/packageJson/PackageController.js.map +1 -1
  37. package/dist/features/packageManager/PackageManagerController.d.ts +14 -1
  38. package/dist/features/packageManager/PackageManagerController.d.ts.map +1 -1
  39. package/dist/features/packageManager/PackageManagerController.js +31 -13
  40. package/dist/features/packageManager/PackageManagerController.js.map +1 -1
  41. package/dist/features/packageManager/services/PNPMPackageManager.d.ts +0 -1
  42. package/dist/features/packageManager/services/PNPMPackageManager.d.ts.map +1 -1
  43. package/dist/features/packageManager/services/PNPMPackageManager.js +2 -8
  44. package/dist/features/packageManager/services/PNPMPackageManager.js.map +1 -1
  45. package/dist/features/packageManager/services/PackageManager.d.ts +0 -1
  46. package/dist/features/packageManager/services/PackageManager.d.ts.map +1 -1
  47. package/dist/features/packageManager/services/PackageManager.js.map +1 -1
  48. package/dist/features/releaseNotes/ReleaseNotesController.d.ts.map +1 -1
  49. package/dist/features/releaseNotes/ReleaseNotesController.js +7 -7
  50. package/dist/features/releaseNotes/ReleaseNotesController.js.map +1 -1
  51. package/dist/features/releaseNotes/services/GithubService.js +2 -2
  52. package/dist/features/releaseNotes/services/GithubService.js.map +1 -1
  53. package/dist/features/report/ReportConfig.d.ts +26 -0
  54. package/dist/features/report/ReportConfig.d.ts.map +1 -0
  55. package/dist/features/report/ReportConfig.js +19 -0
  56. package/dist/features/report/ReportConfig.js.map +1 -0
  57. package/dist/features/report/ReportController.d.ts +4 -5
  58. package/dist/features/report/ReportController.d.ts.map +1 -1
  59. package/dist/features/report/ReportController.js +29 -19
  60. package/dist/features/report/ReportController.js.map +1 -1
  61. package/dist/features/vcs/VCSController.d.ts.map +1 -1
  62. package/dist/features/vcs/VCSController.js +9 -11
  63. package/dist/features/vcs/VCSController.js.map +1 -1
  64. package/dist/features/vcs/services/GitService.js +2 -2
  65. package/dist/features/vcs/services/GitService.js.map +1 -1
  66. package/dist/services/ConsoleLogger.d.ts.map +1 -1
  67. package/dist/services/ConsoleLogger.js +2 -2
  68. package/dist/services/ConsoleLogger.js.map +1 -1
  69. package/dist/services/HandlebarsRenderService.d.ts +2 -0
  70. package/dist/services/HandlebarsRenderService.d.ts.map +1 -1
  71. package/dist/services/HandlebarsRenderService.js +21 -3
  72. package/dist/services/HandlebarsRenderService.js.map +1 -1
  73. package/dist/services/NodeFileSystemService.d.ts +17 -1
  74. package/dist/services/NodeFileSystemService.d.ts.map +1 -1
  75. package/dist/services/NodeFileSystemService.js +32 -8
  76. package/dist/services/NodeFileSystemService.js.map +1 -1
  77. package/dist/services/OutputService.d.ts.map +1 -1
  78. package/dist/services/OutputService.js +2 -2
  79. package/dist/services/OutputService.js.map +1 -1
  80. package/dist/services/PluginsConfigService.d.ts.map +1 -1
  81. package/dist/services/PluginsConfigService.js +2 -2
  82. package/dist/services/PluginsConfigService.js.map +1 -1
  83. package/dist/utils/cli.d.ts +7 -1
  84. package/dist/utils/cli.d.ts.map +1 -1
  85. package/dist/utils/cli.js +10 -0
  86. package/dist/utils/cli.js.map +1 -1
  87. package/dist/utils/ts-ioc-container.d.ts +8 -0
  88. package/dist/utils/ts-ioc-container.d.ts.map +1 -0
  89. package/dist/utils/ts-ioc-container.js +7 -0
  90. package/dist/utils/ts-ioc-container.js.map +1 -0
  91. package/dist/utils/utils.d.ts +0 -1
  92. package/dist/utils/utils.d.ts.map +1 -1
  93. package/dist/utils/utils.js +0 -1
  94. package/dist/utils/utils.js.map +1 -1
  95. package/dist/utils/zod.d.ts +7 -0
  96. package/dist/utils/zod.d.ts.map +1 -0
  97. package/dist/utils/zod.js +6 -0
  98. package/dist/utils/zod.js.map +1 -0
  99. package/package.json +2 -2
package/README.md CHANGED
@@ -11,6 +11,15 @@ The tool is a set of discrete steps rather than a single command: one step analy
11
11
  - Node.js: `>=20.11`
12
12
  - pnpm
13
13
  - Git repository with conventional commits
14
+ - A root `package.json` declaring `workspaces` (the globs the packages live under, e.g. `["packages/*"]`)
15
+ - A `name` and a `major.minor.patch` `version` in every workspace package's `package.json`
16
+
17
+ Every manifest is validated when it is read, and a missing or malformed field
18
+ fails the step that read it with an explicit error — `INVALID_ROOT_PACKAGE_JSON`
19
+ for the workspace root, `INVALID_PACKAGE_JSON` for a package,
20
+ `MISSING_PACKAGE_JSON` when the file is not there — naming the file and the
21
+ field. A root without `workspaces` used to resolve to zero packages and report
22
+ "nothing to release".
14
23
 
15
24
  ## Installation
16
25
 
@@ -75,6 +84,8 @@ Non-release types: `docs`, `test`, `ci`, `chore`, `refactor`, `style`.
75
84
 
76
85
  Package scope is matched by package name.
77
86
 
87
+ This mapping is `report`'s default configuration, not a fixed rule — see [Configuring release rules](#configuring-release-rules) to change or extend it.
88
+
78
89
  ## Steps
79
90
 
80
91
  Every step accepts `--context <json>` (except `report`, which produces it) and `--dry-run` (preview only; no files, git state, or publishes change). Steps run in a fresh process each time, so `--context` is how state passes between them.
@@ -83,7 +94,7 @@ Every step accepts `--context <json>` (except `report`, which produces it) and `
83
94
  | ----------------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
84
95
  | `report` | (only one) | Discovers workspace packages, computes version bumps from commits since each package's last release tag, fails if the working tree isn't clean. Writes the release context as JSON to stdout. |
85
96
  | `package-json` | (only one) | Updates internal dependency versions in each released package's `package.json` to exact versions, in the `dependencies`/`devDependencies` block each was declared in (peer ranges are left alone), then refreshes the workspace lockfile. |
86
- | `package-manager` | _(default)_ | Bumps each released package's version via `pnpm version`. |
97
+ | `package-manager` | _(default)_ | Writes each released package's new version into its `package.json`. |
87
98
  | `package-manager` | `publish` | Publishes each released package via `pnpm publish`. Kept separate from the version bump so a pipeline can't reach the registry by accident. |
88
99
  | `changelog` | (only one) | Renders and prepends a changelog entry per released package. `--template <path>` and `--changelog-name <value>` (default `CHANGELOG.md`) override the defaults. |
89
100
  | `vcs` | _(default)_ | Runs `commit`, `tag`, and `push` in that order in one invocation. |
@@ -101,6 +112,14 @@ Steps read settings from a `release` section in the root `package.json`, a root
101
112
  ```json
102
113
  {
103
114
  "release": {
115
+ "report": {
116
+ "bumps": {
117
+ "patch": [
118
+ { "type": "fix", "scope": "<package>" },
119
+ { "type": "perf", "scope": "<package>" }
120
+ ]
121
+ }
122
+ },
104
123
  "vcs": { "template": "templates/release-commit-msg.hbs" },
105
124
  "changelog": { "template": "templates/changelog.hbs", "changelogName": "CHANGELOG.md" },
106
125
  "release-notes": { "repository": "acme/repo", "token": "..." },
@@ -119,6 +138,54 @@ Steps read settings from a `release` section in the root `package.json`, a root
119
138
 
120
139
  `dryRun: true` in any section makes that step always preview, equivalent to always passing `--dry-run` to it.
121
140
 
141
+ ## Configuring release rules
142
+
143
+ `report`'s `bumps` config decides which commits release a package and at what level, replacing the hard-coded `feat`/`fix`/`perf`/breaking mapping from [Commit conventions](#commit-conventions). Each level (`major`, `minor`, `patch`) is a list of matchers; a commit matching **any** matcher at a level triggers that bump, and a commit matching matchers at more than one level resolves to the highest.
144
+
145
+ A matcher:
146
+
147
+ | Field | Meaning | Omitted |
148
+ | ---------- | --------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
149
+ | `type` | conventional-commit type (`feat`, `docs`, …) | matches any type |
150
+ | `scope` | literal scope, or the reserved token `"<package>"` meaning "equals the name of the package being considered" | matches any scope |
151
+ | `breaking` | `true` matches `!` or a `BREAKING CHANGE` body, `false` matches its absence | not considered |
152
+ | `packages` | which packages a match releases: `"*"` for every public package, or an explicit list. Ignored when `scope` is `"<package>"` | falls back to `scope === <the package being considered>`, i.e. today's behaviour |
153
+
154
+ The default, applied when `bumps` isn't configured, is exactly [Commit conventions](#commit-conventions):
155
+
156
+ ```json
157
+ {
158
+ "major": [{ "breaking": true }],
159
+ "minor": [{ "type": "feat", "scope": "<package>" }],
160
+ "patch": [
161
+ { "type": "fix", "scope": "<package>" },
162
+ { "type": "perf", "scope": "<package>" }
163
+ ]
164
+ }
165
+ ```
166
+
167
+ A configured `bumps` replaces the defaults **per level**, not by merging into them — configuring `patch` doesn't touch the default `major`/`minor` matchers, but it does replace the default `patch` matchers entirely (so a repository can also decide `perf` no longer releases). A commit matching no matcher is not a release trigger.
168
+
169
+ Example: a repository that keeps cross-package specs in `specs/` and wants a `docs(specs)` commit to patch-bump every public package, in `.release.json`:
170
+
171
+ ```json
172
+ {
173
+ "report": {
174
+ "bumps": {
175
+ "patch": [
176
+ { "type": "fix", "scope": "<package>" },
177
+ { "type": "perf", "scope": "<package>" },
178
+ { "type": "docs", "scope": "specs", "packages": "*" }
179
+ ]
180
+ }
181
+ }
182
+ }
183
+ ```
184
+
185
+ Note the `patch` list above repeats the default `fix`/`perf` matchers — since `bumps.patch` replaces rather than merges, the defaults have to be spelled out alongside the new rule to keep them.
186
+
187
+ The default changelog template only renders `feat`/`fix`/`perf`/breaking commits under their own headings; anything else (including a newly release-triggering type like `docs`) renders under a generic "Other Changes" section (via the `hasOthers`/`findOthers` template helpers). Override `changelog`'s template if you want different grouping for a custom type.
188
+
122
189
  ## Templates
123
190
 
124
191
  Default templates ship with the package and are used automatically. Override per step with `--template <path>` (relative to the working directory) or the matching config section:
@@ -127,7 +194,7 @@ Default templates ship with the package and are used automatically. Override per
127
194
  - `vcs` (used by the `commit` action) — release commit message
128
195
  - `release-notes` — GitHub release notes body
129
196
 
130
- Templates are [Handlebars](https://handlebarsjs.com/), with `now`, `hasBreakingChanges`, `hasFeatures`, `hasFixes`, `hasPerformance`, `findBreakingChanges`, `findFeatures`, `findFixes`, `findPerformance`, `lookup`, and `call` helpers registered.
197
+ Templates are [Handlebars](https://handlebarsjs.com/), with `now`, `hasBreakingChanges`, `hasFeatures`, `hasFixes`, `hasPerformance`, `hasOthers`, `findBreakingChanges`, `findFeatures`, `findFixes`, `findPerformance`, `findOthers`, `lookup`, and `call` helpers registered. `hasOthers`/`findOthers` cover any commit type that isn't `feat`, `fix`, or `perf` — the bucket a custom `report.bumps` matcher (e.g. `docs`) lands in.
131
198
 
132
199
  ## Development
133
200
 
@@ -145,3 +212,4 @@ pnpm run lint
145
212
  - Tag format is fixed: `<package-name>@<version>`.
146
213
  - Private packages (`"private": true`) are never released.
147
214
  - `--dry-run` on any step performs no file, git, or registry mutation for that step.
215
+ - The version bump is written into `package.json` directly rather than through `pnpm version`, which delegates to npm: npm resolves the whole workspace first, which fails on `workspace:*` specifiers and runs install lifecycle scripts.
@@ -1,7 +1,7 @@
1
1
  import { type IContainer } from 'ts-ioc-container';
2
2
  /**
3
3
  * Minimal replacement for ib-commander's Application: resolves a controller by
4
- * its bindTo name, runs the hooks registered under the requested action, and
4
+ * its @register key, runs the hooks registered under the requested action, and
5
5
  * routes failures to the bound IErrorHandler. Kept in-repo because ib-commander
6
6
  * pins ts-ioc-container ^47, which this project has moved past.
7
7
  */
@@ -20,7 +20,7 @@ function parseControllerAndAction(argv) {
20
20
  }
21
21
  /**
22
22
  * Minimal replacement for ib-commander's Application: resolves a controller by
23
- * its bindTo name, runs the hooks registered under the requested action, and
23
+ * its @register key, runs the hooks registered under the requested action, and
24
24
  * routes failures to the bound IErrorHandler. Kept in-repo because ib-commander
25
25
  * pins ts-ioc-container ^47, which this project has moved past.
26
26
  */
@@ -1,6 +1,4 @@
1
- import { type HookType, type IContainer } from 'ts-ioc-container';
2
- import { Command } from 'commander';
3
- import { ZodObject } from 'zod';
1
+ import { type HookType } from 'ts-ioc-container';
4
2
  export declare const DEFAULT_ACTION = "default";
5
3
  /**
6
4
  * Registers a method as a named CLI action, e.g. `@action('tag', execute())`
@@ -10,8 +8,4 @@ export declare const DEFAULT_ACTION = "default";
10
8
  export declare const action: (name: string, ...fns: HookType[]) => (target: object, propertyKey: string | symbol) => void;
11
9
  /** Runs when the controller is invoked without an action name. */
12
10
  export declare const onDefault: (...fns: HookType[]) => (target: object, propertyKey: string | symbol) => void;
13
- export declare const command: (createCmd: (c: IContainer) => Command) => MethodDecorator;
14
- export declare const getCommand: (instance: object, methodName: string) => ((c: IContainer) => Command) | undefined;
15
- export declare const schema: (createSchema: (c: IContainer) => ZodObject) => MethodDecorator;
16
- export declare const getSchema: (instance: object, methodName: string) => ((c: IContainer) => ZodObject) | undefined;
17
11
  //# sourceMappingURL=decorators.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/cli/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8C,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9G,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAEhC,eAAO,MAAM,cAAc,YAAY,CAAC;AAExC;;;;GAIG;AACH,eAAO,MAAM,MAAM,GAAI,MAAM,MAAM,EAAE,GAAG,KAAK,QAAQ,EAAE,2DAA+B,CAAC;AAEvF,kEAAkE;AAClE,eAAO,MAAM,SAAS,GAAI,GAAG,KAAK,QAAQ,EAAE,2DAAmC,CAAC;AAEhF,eAAO,MAAM,OAAO,GAAI,WAAW,CAAC,CAAC,EAAE,UAAU,KAAK,OAAO,KAAG,eAA4D,CAAC;AAE7H,eAAO,MAAM,UAAU,GAAI,UAAU,MAAM,EAAE,YAAY,MAAM,KAAuD,CAAC,CAAC,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;AAE/J,eAAO,MAAM,MAAM,GAAI,cAAc,CAAC,CAAC,EAAE,UAAU,KAAK,SAAS,KAAG,eAA8D,CAAC;AAEnI,eAAO,MAAM,SAAS,GAAI,UAAU,MAAM,EAAE,YAAY,MAAM,KAAsD,CAAC,CAAC,CAAC,EAAE,UAAU,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC"}
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/cli/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE/D,eAAO,MAAM,cAAc,YAAY,CAAC;AAExC;;;;GAIG;AACH,eAAO,MAAM,MAAM,GAAI,MAAM,MAAM,EAAE,GAAG,KAAK,QAAQ,EAAE,2DAA+B,CAAC;AAEvF,kEAAkE;AAClE,eAAO,MAAM,SAAS,GAAI,GAAG,KAAK,QAAQ,EAAE,2DAAmC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { addMethodMeta, append, getMethodMeta, hook } from 'ts-ioc-container';
1
+ import { append, hook } from 'ts-ioc-container';
2
2
  export const DEFAULT_ACTION = 'default';
3
3
  /**
4
4
  * Registers a method as a named CLI action, e.g. `@action('tag', execute())`
@@ -8,8 +8,4 @@ export const DEFAULT_ACTION = 'default';
8
8
  export const action = (name, ...fns) => hook(name, append(...fns));
9
9
  /** Runs when the controller is invoked without an action name. */
10
10
  export const onDefault = (...fns) => action(DEFAULT_ACTION, ...fns);
11
- export const command = (createCmd) => addMethodMeta('command', () => createCmd);
12
- export const getCommand = (instance, methodName) => getMethodMeta('command', instance, methodName);
13
- export const schema = (createSchema) => addMethodMeta('schema', () => createSchema);
14
- export const getSchema = (instance, methodName) => getMethodMeta('schema', instance, methodName);
15
11
  //# sourceMappingURL=decorators.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/cli/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAkC,MAAM,kBAAkB,CAAC;AAI9G,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC;AAExC;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,GAAG,GAAe,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAEvF,kEAAkE;AAClE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAG,GAAe,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,GAAG,CAAC,CAAC;AAEhF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,SAAqC,EAAmB,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAE7H,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAE,UAAkB,EAAE,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,CAA6C,CAAC;AAE/J,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,YAA0C,EAAmB,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC;AAEnI,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,QAAgB,EAAE,UAAkB,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAA+C,CAAC"}
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/cli/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAiB,MAAM,kBAAkB,CAAC;AAE/D,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC;AAExC;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,GAAG,GAAe,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAEvF,kEAAkE;AAClE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAG,GAAe,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,GAAG,CAAC,CAAC"}
@@ -1,11 +1,9 @@
1
1
  import { type HookFn } from 'ts-ioc-container';
2
2
  /**
3
- * Hook that turns a decorated controller method into a CLI action: it parses
4
- * the process arguments with the method's `@command`, validates them with its
5
- * `@schema`, and calls the method with the resulting options object.
6
- *
7
- * Methods without a `@command` (lifecycle hooks such as `@onConstruct`) are
8
- * invoked with their injected arguments instead.
3
+ * Hook that runs a controller method as a CLI action. Its arguments come from
4
+ * the method's own parameter decorators, so an action that needs CLI options
5
+ * declares them itself, e.g.
6
+ * `@inject(commandArgs, parseOptions(stepCommand()), validate(STEP_OPTIONS))`.
9
7
  */
10
8
  export declare const execute: () => HookFn;
11
9
  //# sourceMappingURL=execute.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/cli/execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAG/C;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,QAAO,MAuB1B,CAAC"}
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/cli/execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C;;;;;GAKG;AACH,eAAO,MAAM,OAAO,QAAO,MAE1B,CAAC"}
@@ -1,31 +1,10 @@
1
- import { getCommand, getSchema } from './decorators.js';
2
1
  /**
3
- * Hook that turns a decorated controller method into a CLI action: it parses
4
- * the process arguments with the method's `@command`, validates them with its
5
- * `@schema`, and calls the method with the resulting options object.
6
- *
7
- * Methods without a `@command` (lifecycle hooks such as `@onConstruct`) are
8
- * invoked with their injected arguments instead.
2
+ * Hook that runs a controller method as a CLI action. Its arguments come from
3
+ * the method's own parameter decorators, so an action that needs CLI options
4
+ * declares them itself, e.g.
5
+ * `@inject(commandArgs, parseOptions(stepCommand()), validate(STEP_OPTIONS))`.
9
6
  */
10
7
  export const execute = () => (ctx) => {
11
- // methodName is only absent when a hook runs outside a decorated method,
12
- // which never happens here — every hook site is a controller method.
13
- const methodName = ctx.methodName;
14
- const resolveCommand = getCommand(ctx.instance, methodName);
15
- if (!resolveCommand) {
16
- ctx.invokeMethod();
17
- return;
18
- }
19
- const command = resolveCommand(ctx.scope);
20
- // Initial args are the raw process arguments; everything from the first flag
21
- // onwards belongs to this action (what precedes it is controller/action).
22
- const rawArgs = ctx.getInitialArgs().map(String);
23
- const firstFlag = rawArgs.findIndex((arg) => arg.startsWith('-'));
24
- command.parse(firstFlag >= 0 ? ['node', 'script', ...rawArgs.slice(firstFlag)] : ['node', 'script']);
25
- const resolveSchema = getSchema(ctx.instance, methodName);
26
- const options = resolveSchema ? resolveSchema(ctx.scope).parse(command.opts()) : command.opts();
27
- // NOTE: passing args replaces injected parameters rather than merging with
28
- // them, so an action method must take the options object alone.
29
- ctx.invokeMethod({ args: [options] });
8
+ ctx.invokeMethod();
30
9
  };
31
10
  //# sourceMappingURL=execute.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../src/cli/execute.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAExD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,GAAW,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE;IAC3C,yEAAyE;IACzE,qEAAqE;IACrE,MAAM,UAAU,GAAG,GAAG,CAAC,UAAW,CAAC;IACnC,MAAM,cAAc,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC5D,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,GAAG,CAAC,YAAY,EAAE,CAAC;QACnB,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC1C,6EAA6E;IAC7E,0EAA0E;IAC1E,MAAM,OAAO,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAErG,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAEhG,2EAA2E;IAC3E,gEAAgE;IAChE,GAAG,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACxC,CAAC,CAAC"}
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../src/cli/execute.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,GAAW,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE;IAC3C,GAAG,CAAC,YAAY,EAAE,CAAC;AACrB,CAAC,CAAC"}
@@ -1,4 +1,4 @@
1
- export { action, command, DEFAULT_ACTION, getCommand, getSchema, onDefault, schema } from './decorators.js';
1
+ export { action, DEFAULT_ACTION, onDefault } from './decorators.js';
2
2
  export { execute } from './execute.js';
3
3
  export { Application } from './Application.js';
4
4
  export { IErrorHandler, IErrorHandlerKey } from './IErrorHandler.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC5G,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/cli/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export { action, command, DEFAULT_ACTION, getCommand, getSchema, onDefault, schema } from './decorators.js';
1
+ export { action, DEFAULT_ACTION, onDefault } from './decorators.js';
2
2
  export { execute } from './execute.js';
3
3
  export { Application } from './Application.js';
4
4
  export { IErrorHandlerKey } from './IErrorHandler.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC5G,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAiB,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAiB,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -6,6 +6,21 @@ export interface ConventionalCommitJSON {
6
6
  isBreaking: boolean;
7
7
  hash: string | null;
8
8
  }
9
+ export declare const PACKAGE_TOKEN = "<package>";
10
+ export interface BumpMatcherRule {
11
+ type?: string;
12
+ scope?: string;
13
+ breaking?: boolean;
14
+ packages?: '*' | string[];
15
+ }
16
+ export interface BumpMatchers {
17
+ major: BumpMatcherRule[];
18
+ minor: BumpMatcherRule[];
19
+ patch: BumpMatcherRule[];
20
+ }
21
+ export declare const DEFAULT_MAJOR_MATCHERS: BumpMatcherRule[];
22
+ export declare const DEFAULT_MINOR_MATCHERS: BumpMatcherRule[];
23
+ export declare const DEFAULT_PATCH_MATCHERS: BumpMatcherRule[];
9
24
  export declare class ConventionalCommit {
10
25
  readonly type: string;
11
26
  readonly scope: string | null;
@@ -16,9 +31,13 @@ export declare class ConventionalCommit {
16
31
  toJSON(): ConventionalCommitJSON;
17
32
  static fromJSON(data: ConventionalCommitJSON): ConventionalCommit;
18
33
  static parse(raw: string): ConventionalCommit;
19
- get bumpType(): SemVerBumpType;
20
- isReleaseTrigger(): boolean;
21
- matchesScope(packageName: string): boolean;
34
+ /** Highest bump level this commit triggers for the given package, or NONE if it matches nothing. */
35
+ bumpMatch(bumpConfig: BumpMatchers, packageName: string): SemVerBumpType;
36
+ /** Whether this commit matches any of the given matchers for the given package. */
37
+ private matchesAny;
38
+ private matchesCriteria;
39
+ private matchesAttribution;
22
40
  }
23
41
  export declare const filterCommitsByType: (commits: ConventionalCommit[], type: string) => ConventionalCommit[];
42
+ export declare const filterCommitsExcludingTypes: (commits: ConventionalCommit[], types: string[]) => ConventionalCommit[];
24
43
  //# sourceMappingURL=ConventionalCommit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConventionalCommit.d.ts","sourceRoot":"","sources":["../../src/domain/ConventionalCommit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,qBAAa,kBAAkB;IAE3B,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,UAAU,EAAE,OAAO;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;gBAJnB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,OAAO,EACnB,IAAI,GAAE,MAAM,GAAG,IAAW;IAGrC,MAAM,IAAI,sBAAsB;IAIhC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,GAAG,kBAAkB;IAIjE,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;IAiB7C,IAAI,QAAQ,IAAI,cAAc,CAK7B;IAED,gBAAgB,IAAI,OAAO;IAI3B,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;CAG3C;AAED,eAAO,MAAM,mBAAmB,GAAI,SAAS,kBAAkB,EAAE,EAAE,MAAM,MAAM,KAAG,kBAAkB,EAAsD,CAAC"}
1
+ {"version":3,"file":"ConventionalCommit.d.ts","sourceRoot":"","sources":["../../src/domain/ConventionalCommit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAGD,eAAO,MAAM,aAAa,cAAc,CAAC;AAEzC,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,GAAG,GAAG,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B;AAED,eAAO,MAAM,sBAAsB,EAAE,eAAe,EAAyB,CAAC;AAC9E,eAAO,MAAM,sBAAsB,EAAE,eAAe,EAA6C,CAAC;AAClG,eAAO,MAAM,sBAAsB,EAAE,eAAe,EAGnD,CAAC;AAEF,qBAAa,kBAAkB;IAE3B,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,UAAU,EAAE,OAAO;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;gBAJnB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,OAAO,EACnB,IAAI,GAAE,MAAM,GAAG,IAAW;IAGrC,MAAM,IAAI,sBAAsB;IAIhC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,GAAG,kBAAkB;IAIjE,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;IAiB7C,oGAAoG;IACpG,SAAS,CAAC,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,cAAc;IAOxE,mFAAmF;IACnF,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,kBAAkB;CAM3B;AAED,eAAO,MAAM,mBAAmB,GAAI,SAAS,kBAAkB,EAAE,EAAE,MAAM,MAAM,KAAG,kBAAkB,EAAsD,CAAC;AAE3J,eAAO,MAAM,2BAA2B,GAAI,SAAS,kBAAkB,EAAE,EAAE,OAAO,MAAM,EAAE,KAAG,kBAAkB,EACrD,CAAC"}
@@ -1,4 +1,12 @@
1
1
  import { SemVerBumpType } from './SemVerBumpType.js';
2
+ // Reserved scope token meaning "equals the name of the package being considered".
3
+ export const PACKAGE_TOKEN = '<package>';
4
+ export const DEFAULT_MAJOR_MATCHERS = [{ breaking: true }];
5
+ export const DEFAULT_MINOR_MATCHERS = [{ type: 'feat', scope: PACKAGE_TOKEN }];
6
+ export const DEFAULT_PATCH_MATCHERS = [
7
+ { type: 'fix', scope: PACKAGE_TOKEN },
8
+ { type: 'perf', scope: PACKAGE_TOKEN },
9
+ ];
2
10
  export class ConventionalCommit {
3
11
  type;
4
12
  scope;
@@ -31,21 +39,45 @@ export class ConventionalCommit {
31
39
  const isBreaking = !!bang || commitMessage.includes('BREAKING CHANGE');
32
40
  return new ConventionalCommit(type, scope || null, subject, isBreaking, commitHash);
33
41
  }
34
- get bumpType() {
35
- if (this.isBreaking)
42
+ /** Highest bump level this commit triggers for the given package, or NONE if it matches nothing. */
43
+ bumpMatch(bumpConfig, packageName) {
44
+ if (this.matchesAny(bumpConfig.major, packageName))
36
45
  return SemVerBumpType.MAJOR;
37
- if (this.type === 'feat')
46
+ if (this.matchesAny(bumpConfig.minor, packageName))
38
47
  return SemVerBumpType.MINOR;
39
- if (this.type === 'fix' || this.type === 'perf')
48
+ if (this.matchesAny(bumpConfig.patch, packageName))
40
49
  return SemVerBumpType.PATCH;
41
50
  return SemVerBumpType.NONE;
42
51
  }
43
- isReleaseTrigger() {
44
- return this.bumpType !== SemVerBumpType.NONE;
52
+ /** Whether this commit matches any of the given matchers for the given package. */
53
+ matchesAny(matchers, packageName) {
54
+ return matchers.some((matcher) => this.matchesCriteria(matcher, packageName) && this.matchesAttribution(matcher, packageName));
45
55
  }
46
- matchesScope(packageName) {
56
+ matchesCriteria(matcher, packageName) {
57
+ if (matcher.type !== undefined && this.type !== matcher.type)
58
+ return false;
59
+ if (matcher.breaking !== undefined && this.isBreaking !== matcher.breaking)
60
+ return false;
61
+ if (matcher.scope !== undefined) {
62
+ const expectedScope = matcher.scope === PACKAGE_TOKEN ? packageName : matcher.scope;
63
+ if (this.scope !== expectedScope)
64
+ return false;
65
+ }
66
+ return true;
67
+ }
68
+ // Scope decides which commits match; `packages` (or, absent it, the scope-equals-package
69
+ // fallback) decides which packages a match releases. The `<package>` token ties both to the
70
+ // same package, so it needs no separate attribution check.
71
+ matchesAttribution(matcher, packageName) {
72
+ if (matcher.scope === PACKAGE_TOKEN)
73
+ return true;
74
+ if (matcher.packages === '*')
75
+ return true;
76
+ if (Array.isArray(matcher.packages))
77
+ return matcher.packages.includes(packageName);
47
78
  return this.scope === packageName;
48
79
  }
49
80
  }
50
81
  export const filterCommitsByType = (commits, type) => commits.filter((commit) => commit.type === type);
82
+ export const filterCommitsExcludingTypes = (commits, types) => commits.filter((commit) => !types.includes(commit.type));
51
83
  //# sourceMappingURL=ConventionalCommit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConventionalCommit.js","sourceRoot":"","sources":["../../src/domain/ConventionalCommit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAUrD,MAAM,OAAO,kBAAkB;IAElB;IACA;IACA;IACA;IACA;IALX,YACW,IAAY,EACZ,KAAoB,EACpB,OAAe,EACf,UAAmB,EACnB,OAAsB,IAAI;QAJ1B,SAAI,GAAJ,IAAI,CAAQ;QACZ,UAAK,GAAL,KAAK,CAAe;QACpB,YAAO,GAAP,OAAO,CAAQ;QACf,eAAU,GAAV,UAAU,CAAS;QACnB,SAAI,GAAJ,IAAI,CAAsB;IAClC,CAAC;IAEJ,MAAM;QACJ,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IACrH,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAA4B;QAC1C,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACjG,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,GAAW;QACtB,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACtE,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACnD,MAAM,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;QAE5D,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5E,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,kBAAkB,CAAC,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC;QAC7C,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,IAAI,aAAa,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QAEvE,OAAO,IAAI,kBAAkB,CAAC,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IACtF,CAAC;IAED,IAAI,QAAQ;QACV,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,cAAc,CAAC,KAAK,CAAC;QACjD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,cAAc,CAAC,KAAK,CAAC;QACtD,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,cAAc,CAAC,KAAK,CAAC;QAC7E,OAAO,cAAc,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,QAAQ,KAAK,cAAc,CAAC,IAAI,CAAC;IAC/C,CAAC;IAED,YAAY,CAAC,WAAmB;QAC9B,OAAO,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC;IACpC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAA6B,EAAE,IAAY,EAAwB,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"ConventionalCommit.js","sourceRoot":"","sources":["../../src/domain/ConventionalCommit.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { z } from 'zod';
1
2
  export interface PackageJSON {
2
3
  name: string;
3
4
  version: string;
@@ -7,4 +8,27 @@ export interface PackageJSON {
7
8
  peerDependencies?: Record<string, string>;
8
9
  workspaces?: string[];
9
10
  }
11
+ /** The workspace root declares its packages here; the `report` step has nothing to release without it. */
12
+ export type RootPackageJSON = PackageJSON & {
13
+ workspaces: string[];
14
+ };
15
+ /**
16
+ * What a released package's manifest has to declare. The schemas validate
17
+ * only: callers keep the object as it was parsed, so a manifest that is
18
+ * written back keeps its own field order and every field this tool does not
19
+ * model (`scripts`, `exports`, `publishConfig`, ...).
20
+ */
21
+ export declare const PACKAGE_JSON_SCHEMA: z.ZodObject<{
22
+ name: z.ZodString;
23
+ version: z.ZodString;
24
+ private: z.ZodOptional<z.ZodBoolean>;
25
+ dependencies: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
26
+ devDependencies: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
27
+ peerDependencies: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
28
+ }, z.core.$strip>;
29
+ export declare const ROOT_PACKAGE_JSON_SCHEMA: z.ZodObject<{
30
+ workspaces: z.ZodArray<z.ZodString>;
31
+ }, z.core.$strip>;
32
+ /** `name: is required, version: must be a semantic version (major.minor.patch)` */
33
+ export declare function formatValidationIssues(error: z.ZodError): string;
10
34
  //# sourceMappingURL=PackageJSON.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PackageJSON.d.ts","sourceRoot":"","sources":["../../src/domain/PackageJSON.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAIzC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB"}
1
+ {"version":3,"file":"PackageJSON.d.ts","sourceRoot":"","sources":["../../src/domain/PackageJSON.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAIzC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,0GAA0G;AAC1G,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG;IAAE,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AASrE;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB;;;;;;;iBAO9B,CAAC;AAEH,eAAO,MAAM,wBAAwB;;iBAInC,CAAC;AAEH,mFAAmF;AACnF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,GAAG,MAAM,CAEhE"}
@@ -1,2 +1,30 @@
1
- export {};
1
+ import { z } from 'zod';
2
+ // `bumpVersion` reads a version as three numbers, so anything else — a
3
+ // prerelease tag, a range, a placeholder — silently produces `NaN` in the
4
+ // released version instead of failing.
5
+ const SEMVER = /^\d+\.\d+\.\d+$/;
6
+ const DEPENDENCY_BLOCK = z.record(z.string().min(1), z.string().min(1, 'must be a version specifier'));
7
+ /**
8
+ * What a released package's manifest has to declare. The schemas validate
9
+ * only: callers keep the object as it was parsed, so a manifest that is
10
+ * written back keeps its own field order and every field this tool does not
11
+ * model (`scripts`, `exports`, `publishConfig`, ...).
12
+ */
13
+ export const PACKAGE_JSON_SCHEMA = z.object({
14
+ name: z.string({ error: 'is required' }).min(1, 'is required'),
15
+ version: z.string({ error: 'is required' }).regex(SEMVER, 'must be a semantic version (major.minor.patch)'),
16
+ private: z.boolean().optional(),
17
+ dependencies: DEPENDENCY_BLOCK.optional(),
18
+ devDependencies: DEPENDENCY_BLOCK.optional(),
19
+ peerDependencies: DEPENDENCY_BLOCK.optional(),
20
+ });
21
+ export const ROOT_PACKAGE_JSON_SCHEMA = z.object({
22
+ workspaces: z
23
+ .array(z.string().min(1, 'must be a workspace glob'), { error: 'is required: list the globs the monorepo packages live under, e.g. ["packages/*"]' })
24
+ .min(1, 'must list at least one workspace glob'),
25
+ });
26
+ /** `name: is required, version: must be a semantic version (major.minor.patch)` */
27
+ export function formatValidationIssues(error) {
28
+ return error.issues.map((issue) => `${issue.path.join('.') || '<root>'}: ${issue.message}`).join(', ');
29
+ }
2
30
  //# sourceMappingURL=PackageJSON.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PackageJSON.js","sourceRoot":"","sources":["../../src/domain/PackageJSON.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"PackageJSON.js","sourceRoot":"","sources":["../../src/domain/PackageJSON.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAkBxB,uEAAuE;AACvE,0EAA0E;AAC1E,uCAAuC;AACvC,MAAM,MAAM,GAAG,iBAAiB,CAAC;AAEjC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,6BAA6B,CAAC,CAAC,CAAC;AAEvG;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC;IAC9D,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,gDAAgD,CAAC;IAC3G,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC/B,YAAY,EAAE,gBAAgB,CAAC,QAAQ,EAAE;IACzC,eAAe,EAAE,gBAAgB,CAAC,QAAQ,EAAE;IAC5C,gBAAgB,EAAE,gBAAgB,CAAC,QAAQ,EAAE;CAC9C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,UAAU,EAAE,CAAC;SACV,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,0BAA0B,CAAC,EAAE,EAAE,KAAK,EAAE,mFAAmF,EAAE,CAAC;SACpJ,GAAG,CAAC,CAAC,EAAE,uCAAuC,CAAC;CACnD,CAAC,CAAC;AAEH,mFAAmF;AACnF,MAAM,UAAU,sBAAsB,CAAC,KAAiB;IACtD,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzG,CAAC"}
@@ -5,6 +5,15 @@ export declare abstract class DomainException extends Error {
5
5
  export declare class MissingDependencyVersionException extends DomainException {
6
6
  constructor(packageName: string, dependencyName: string);
7
7
  }
8
+ export declare class MissingPackageJsonException extends DomainException {
9
+ constructor(filePath: string);
10
+ }
11
+ export declare class InvalidPackageJsonException extends DomainException {
12
+ constructor(filePath: string, reason: string);
13
+ }
14
+ export declare class InvalidRootPackageJsonException extends DomainException {
15
+ constructor(filePath: string, reason: string);
16
+ }
8
17
  export declare class GithubCliUnavailableException extends DomainException {
9
18
  constructor();
10
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DomainException.d.ts","sourceRoot":"","sources":["../../src/exceptions/DomainException.ts"],"names":[],"mappings":"AAAA,8BAAsB,eAAgB,SAAQ,KAAK;IAE/C,QAAQ,CAAC,IAAI,EAAE,MAAM;IADvB,SAAS,aACE,IAAI,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM;CAKlB;AAED,qBAAa,iCAAkC,SAAQ,eAAe;gBACxD,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;CAGxD;AAED,qBAAa,6BAA8B,SAAQ,eAAe;;CAIjE;AAED,qBAAa,iCAAkC,SAAQ,eAAe;gBACxD,UAAU,EAAE,MAAM;CAG/B;AAED,qBAAa,kCAAmC,SAAQ,eAAe;gBACzD,UAAU,EAAE,MAAM;CAG/B;AAED,qBAAa,yBAA0B,SAAQ,eAAe;;CAI7D;AAED,qBAAa,oCAAqC,SAAQ,eAAe;gBAC3D,MAAM,EAAE,MAAM;CAG3B;AAED,qBAAa,sBAAuB,SAAQ,eAAe;gBAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAG5C;AAED,qBAAa,iCAAkC,SAAQ,eAAe;;CAOrE;AAED,qBAAa,0BAA2B,SAAQ,eAAe;;CAI9D"}
1
+ {"version":3,"file":"DomainException.d.ts","sourceRoot":"","sources":["../../src/exceptions/DomainException.ts"],"names":[],"mappings":"AAAA,8BAAsB,eAAgB,SAAQ,KAAK;IAE/C,QAAQ,CAAC,IAAI,EAAE,MAAM;IADvB,SAAS,aACE,IAAI,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM;CAKlB;AAED,qBAAa,iCAAkC,SAAQ,eAAe;gBACxD,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;CAGxD;AAED,qBAAa,2BAA4B,SAAQ,eAAe;gBAClD,QAAQ,EAAE,MAAM;CAG7B;AAED,qBAAa,2BAA4B,SAAQ,eAAe;gBAClD,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAG7C;AAED,qBAAa,+BAAgC,SAAQ,eAAe;gBACtD,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAG7C;AAED,qBAAa,6BAA8B,SAAQ,eAAe;;CAIjE;AAED,qBAAa,iCAAkC,SAAQ,eAAe;gBACxD,UAAU,EAAE,MAAM;CAG/B;AAED,qBAAa,kCAAmC,SAAQ,eAAe;gBACzD,UAAU,EAAE,MAAM;CAG/B;AAED,qBAAa,yBAA0B,SAAQ,eAAe;;CAI7D;AAED,qBAAa,oCAAqC,SAAQ,eAAe;gBAC3D,MAAM,EAAE,MAAM;CAG3B;AAED,qBAAa,sBAAuB,SAAQ,eAAe;gBAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAG5C;AAED,qBAAa,iCAAkC,SAAQ,eAAe;;CAOrE;AAED,qBAAa,0BAA2B,SAAQ,eAAe;;CAI9D"}
@@ -11,6 +11,21 @@ export class MissingDependencyVersionException extends DomainException {
11
11
  super('MISSING_DEPENDENCY_VERSION', `Dependency ${dependencyName} not found in ${packageName}`);
12
12
  }
13
13
  }
14
+ export class MissingPackageJsonException extends DomainException {
15
+ constructor(filePath) {
16
+ super('MISSING_PACKAGE_JSON', `No package.json at ${filePath}`);
17
+ }
18
+ }
19
+ export class InvalidPackageJsonException extends DomainException {
20
+ constructor(filePath, reason) {
21
+ super('INVALID_PACKAGE_JSON', `Invalid package.json at ${filePath}: ${reason}`);
22
+ }
23
+ }
24
+ export class InvalidRootPackageJsonException extends DomainException {
25
+ constructor(filePath, reason) {
26
+ super('INVALID_ROOT_PACKAGE_JSON', `Invalid workspace root package.json at ${filePath}: ${reason}`);
27
+ }
28
+ }
14
29
  export class GithubCliUnavailableException extends DomainException {
15
30
  constructor() {
16
31
  super('GITHUB_CLI_UNAVAILABLE', 'GitHub release creation requires `gh` CLI when running in GitHub Actions');
@@ -1 +1 @@
1
- {"version":3,"file":"DomainException.js","sourceRoot":"","sources":["../../src/exceptions/DomainException.ts"],"names":[],"mappings":"AAAA,MAAM,OAAgB,eAAgB,SAAQ,KAAK;IAEtC;IADX,YACW,IAAY,EACrB,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,SAAI,GAAJ,IAAI,CAAQ;QAIrB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,iCAAkC,SAAQ,eAAe;IACpE,YAAY,WAAmB,EAAE,cAAsB;QACrD,KAAK,CAAC,4BAA4B,EAAE,cAAc,cAAc,iBAAiB,WAAW,EAAE,CAAC,CAAC;IAClG,CAAC;CACF;AAED,MAAM,OAAO,6BAA8B,SAAQ,eAAe;IAChE;QACE,KAAK,CAAC,wBAAwB,EAAE,0EAA0E,CAAC,CAAC;IAC9G,CAAC;CACF;AAED,MAAM,OAAO,iCAAkC,SAAQ,eAAe;IACpE,YAAY,UAAkB;QAC5B,KAAK,CAAC,oCAAoC,EAAE,sBAAsB,UAAU,uBAAuB,CAAC,CAAC;IACvG,CAAC;CACF;AAED,MAAM,OAAO,kCAAmC,SAAQ,eAAe;IACrE,YAAY,UAAkB;QAC5B,KAAK,CAAC,8BAA8B,EAAE,UAAU,UAAU,oBAAoB,CAAC,CAAC;IAClF,CAAC;CACF;AAED,MAAM,OAAO,yBAA0B,SAAQ,eAAe;IAC5D;QACE,KAAK,CAAC,oBAAoB,EAAE,6EAA6E,CAAC,CAAC;IAC7G,CAAC;CACF;AAED,MAAM,OAAO,oCAAqC,SAAQ,eAAe;IACvE,YAAY,MAAc;QACxB,KAAK,CAAC,gCAAgC,EAAE,yCAAyC,MAAM,iEAAiE,CAAC,CAAC;IAC5J,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,eAAe;IACzD,YAAY,OAAe,EAAE,MAAc;QACzC,KAAK,CAAC,gBAAgB,EAAE,sCAAsC,OAAO,MAAM,MAAM,EAAE,CAAC,CAAC;IACvF,CAAC;CACF;AAED,MAAM,OAAO,iCAAkC,SAAQ,eAAe;IACpE;QACE,KAAK,CACH,4BAA4B,EAC5B,sJAAsJ,CACvJ,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,0BAA2B,SAAQ,eAAe;IAC7D;QACE,KAAK,CAAC,oBAAoB,EAAE,qEAAqE,CAAC,CAAC;IACrG,CAAC;CACF"}
1
+ {"version":3,"file":"DomainException.js","sourceRoot":"","sources":["../../src/exceptions/DomainException.ts"],"names":[],"mappings":"AAAA,MAAM,OAAgB,eAAgB,SAAQ,KAAK;IAEtC;IADX,YACW,IAAY,EACrB,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,SAAI,GAAJ,IAAI,CAAQ;QAIrB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,iCAAkC,SAAQ,eAAe;IACpE,YAAY,WAAmB,EAAE,cAAsB;QACrD,KAAK,CAAC,4BAA4B,EAAE,cAAc,cAAc,iBAAiB,WAAW,EAAE,CAAC,CAAC;IAClG,CAAC;CACF;AAED,MAAM,OAAO,2BAA4B,SAAQ,eAAe;IAC9D,YAAY,QAAgB;QAC1B,KAAK,CAAC,sBAAsB,EAAE,sBAAsB,QAAQ,EAAE,CAAC,CAAC;IAClE,CAAC;CACF;AAED,MAAM,OAAO,2BAA4B,SAAQ,eAAe;IAC9D,YAAY,QAAgB,EAAE,MAAc;QAC1C,KAAK,CAAC,sBAAsB,EAAE,2BAA2B,QAAQ,KAAK,MAAM,EAAE,CAAC,CAAC;IAClF,CAAC;CACF;AAED,MAAM,OAAO,+BAAgC,SAAQ,eAAe;IAClE,YAAY,QAAgB,EAAE,MAAc;QAC1C,KAAK,CAAC,2BAA2B,EAAE,0CAA0C,QAAQ,KAAK,MAAM,EAAE,CAAC,CAAC;IACtG,CAAC;CACF;AAED,MAAM,OAAO,6BAA8B,SAAQ,eAAe;IAChE;QACE,KAAK,CAAC,wBAAwB,EAAE,0EAA0E,CAAC,CAAC;IAC9G,CAAC;CACF;AAED,MAAM,OAAO,iCAAkC,SAAQ,eAAe;IACpE,YAAY,UAAkB;QAC5B,KAAK,CAAC,oCAAoC,EAAE,sBAAsB,UAAU,uBAAuB,CAAC,CAAC;IACvG,CAAC;CACF;AAED,MAAM,OAAO,kCAAmC,SAAQ,eAAe;IACrE,YAAY,UAAkB;QAC5B,KAAK,CAAC,8BAA8B,EAAE,UAAU,UAAU,oBAAoB,CAAC,CAAC;IAClF,CAAC;CACF;AAED,MAAM,OAAO,yBAA0B,SAAQ,eAAe;IAC5D;QACE,KAAK,CAAC,oBAAoB,EAAE,6EAA6E,CAAC,CAAC;IAC7G,CAAC;CACF;AAED,MAAM,OAAO,oCAAqC,SAAQ,eAAe;IACvE,YAAY,MAAc;QACxB,KAAK,CAAC,gCAAgC,EAAE,yCAAyC,MAAM,iEAAiE,CAAC,CAAC;IAC5J,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,eAAe;IACzD,YAAY,OAAe,EAAE,MAAc;QACzC,KAAK,CAAC,gBAAgB,EAAE,sCAAsC,OAAO,MAAM,MAAM,EAAE,CAAC,CAAC;IACvF,CAAC;CACF;AAED,MAAM,OAAO,iCAAkC,SAAQ,eAAe;IACpE;QACE,KAAK,CACH,4BAA4B,EAC5B,sJAAsJ,CACvJ,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,0BAA2B,SAAQ,eAAe;IAC7D;QACE,KAAK,CAAC,oBAAoB,EAAE,qEAAqE,CAAC,CAAC;IACrG,CAAC;CACF"}
@@ -6,7 +6,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import 'reflect-metadata';
8
8
  import { DomainException } from './DomainException.js';
9
- import { bindTo, register, singleton } from 'ts-ioc-container';
9
+ import { register, singleton } from 'ts-ioc-container';
10
10
  import { IErrorHandlerKey } from '../cli/IErrorHandler.js';
11
11
  // Application resolves IErrorHandlerKey and calls handleError() when a
12
12
  // command throws.
@@ -22,7 +22,7 @@ let ExceptionHandler = class ExceptionHandler {
22
22
  }
23
23
  };
24
24
  ExceptionHandler = __decorate([
25
- register(bindTo(IErrorHandlerKey), singleton())
25
+ register(IErrorHandlerKey, singleton())
26
26
  ], ExceptionHandler);
27
27
  export { ExceptionHandler };
28
28
  //# sourceMappingURL=ExceptionHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExceptionHandler.js","sourceRoot":"","sources":["../../src/exceptions/ExceptionHandler.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAiB,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE1E,uEAAuE;AACvE,kBAAkB;AAEX,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,WAAW,CAAC,KAAc;QACxB,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;YACrC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QAED,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;CACF,CAAA;AAVY,gBAAgB;IAD5B,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,CAAC;GACnC,gBAAgB,CAU5B"}
1
+ {"version":3,"file":"ExceptionHandler.js","sourceRoot":"","sources":["../../src/exceptions/ExceptionHandler.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAiB,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE1E,uEAAuE;AACvE,kBAAkB;AAEX,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,WAAW,CAAC,KAAc;QACxB,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;YACrC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QAED,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;CACF,CAAA;AAVY,gBAAgB;IAD5B,QAAQ,CAAC,gBAAgB,EAAE,SAAS,EAAE,CAAC;GAC3B,gBAAgB,CAU5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"ChangelogController.d.ts","sourceRoot":"","sources":["../../../src/features/changelog/ChangelogController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAqB,MAAM,2CAA2C,CAAC;AAC9F,OAAO,EAAE,kBAAkB,EAAyB,MAAM,yCAAyC,CAAC;AACpG,OAAO,EAAE,OAAO,EAAc,MAAM,iCAAiC,CAAC;AAGtE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAc,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAGxE,eAAO,MAAM,iBAAiB;;;;;iBAG5B,CAAC;AAOH,qBACa,mBAAmB;IAEoC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAC1D,OAAO,CAAC,QAAQ,CAAC,GAAG;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC1B,OAAO,CAAC,QAAQ,CAAC,EAAE;IACZ,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAJoB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,EAC/E,GAAG,EAAE,MAAM,EACb,aAAa,EAAE,cAAc,EACzB,EAAE,EAAE,kBAAkB,EACf,MAAM,EAAE,OAAO;IAOxE,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,GAAG,IAAI;CAsBpE"}
1
+ {"version":3,"file":"ChangelogController.d.ts","sourceRoot":"","sources":["../../../src/features/changelog/ChangelogController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAqB,MAAM,2CAA2C,CAAC;AAC9F,OAAO,EAAE,kBAAkB,EAAyB,MAAM,yCAAyC,CAAC;AACpG,OAAO,EAAE,OAAO,EAAc,MAAM,iCAAiC,CAAC;AAGtE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAc,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAKxE,eAAO,MAAM,iBAAiB;;;;;iBAG5B,CAAC;AAOH,qBACa,mBAAmB;IAEoC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAC1D,OAAO,CAAC,QAAQ,CAAC,GAAG;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC1B,OAAO,CAAC,QAAQ,CAAC,EAAE;IACZ,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAJoB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,EAC/E,GAAG,EAAE,MAAM,EACb,aAAa,EAAE,cAAc,EACzB,EAAE,EAAE,kBAAkB,EACf,MAAM,EAAE,OAAO;IAKxE,iBAAiB,CAAqF,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,GAAG,IAAI;CAsBxJ"}