@nan0web/release 1.0.3 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +42 -17
  2. package/bin/nan0release.js +3 -39
  3. package/knip.json +21 -0
  4. package/nan0web.nan0 +16 -0
  5. package/package.json +14 -14
  6. package/src/README.md.js +19 -21
  7. package/src/Release/Person.js +1 -1
  8. package/src/agents/inspectors/git-reviewer.md +35 -0
  9. package/src/agents/inspectors/package-hygiene.md +63 -0
  10. package/src/agents/workflows/commit.md +28 -0
  11. package/src/agents/workflows/npm-release.md +40 -0
  12. package/src/agents/workflows/release.md +205 -0
  13. package/src/agents/workflows/zero-tolerance-git.md +21 -0
  14. package/src/domain/App.js +36 -0
  15. package/src/domain/BumpCommand.js +137 -0
  16. package/src/domain/CheckCommand.js +193 -0
  17. package/src/domain/CloseCommand.js +68 -0
  18. package/src/domain/DepsCommand.js +104 -0
  19. package/src/domain/InitCommand.js +57 -0
  20. package/src/domain/PublishCommand.js +89 -0
  21. package/src/domain/SpecCommand.js +43 -0
  22. package/src/domain/StatusCommand.js +25 -0
  23. package/src/index.js +16 -2
  24. package/types/Release/Person.d.ts +3 -3
  25. package/types/Team.d.ts +3 -3
  26. package/types/commands/CheckCommand.d.ts +24 -0
  27. package/types/commands/CloseCommand.d.ts +2 -1
  28. package/types/commands/Command.d.ts +6 -1
  29. package/types/commands/DepsCommand.d.ts +2 -1
  30. package/types/commands/InitCommand.d.ts +2 -1
  31. package/types/commands/PublishCommand.d.ts +2 -1
  32. package/types/commands/SpecCommand.d.ts +2 -1
  33. package/types/domain/App.d.ts +17 -0
  34. package/types/domain/BumpCommand.d.ts +32 -0
  35. package/types/domain/CheckCommand.d.ts +24 -0
  36. package/types/domain/CloseCommand.d.ts +17 -0
  37. package/types/domain/DepsCommand.d.ts +22 -0
  38. package/types/domain/InitCommand.d.ts +18 -0
  39. package/types/domain/PublishCommand.d.ts +27 -0
  40. package/types/domain/SpecCommand.d.ts +17 -0
  41. package/types/domain/StatusCommand.d.ts +7 -0
  42. package/types/index.d.ts +8 -0
  43. package/types/ui/cli/index.d.ts +1 -0
  44. package/types/utils/runSpawn.d.ts +1 -0
  45. package/src/Team.js +0 -35
  46. package/src/cli/index.js +0 -9
  47. package/src/co/AppCommandOptions.js +0 -25
  48. package/src/commands/CloseCommand.js +0 -67
  49. package/src/commands/Command.js +0 -48
  50. package/src/commands/DepsCommand.js +0 -143
  51. package/src/commands/InitCommand.js +0 -57
  52. package/src/commands/PublishCommand.js +0 -105
  53. package/src/commands/SpecCommand.js +0 -41
  54. package/src/commands/StatusCommand.js +0 -26
  55. package/src/db/ReleaseDB.js +0 -54
  56. package/src/ui/cli/ReleaseCLi.js +0 -52
  57. package/src/ui/cli/index.js +0 -0
  58. package/src/utils/runSpawn.js +0 -0
@@ -0,0 +1,104 @@
1
+ import { ModelAsApp, result, show } from '@nan0web/ui'
2
+ import { runSpawn } from '@nan0web/test'
3
+
4
+ export default class DepsCommand extends ModelAsApp {
5
+ static fix = {
6
+ help: 'Apply fixes automatically',
7
+ default: false,
8
+ }
9
+ static latest = {
10
+ help: 'Update @nan0web packages to the latest available versions',
11
+ default: false,
12
+ }
13
+ static UI = {
14
+ title: 'deps',
15
+ help: 'Dependencies manager',
16
+ }
17
+
18
+ /**
19
+ * @param {Partial<DepsCommand>} [data]
20
+ * @param {Partial<import('@nan0web/ui').ModelAsAppOptions>} [options]
21
+ */
22
+ constructor(data = {}, options = {}) {
23
+ super(data, options)
24
+ /** @type {boolean} Apply fixes automatically */ this.fix
25
+ /** @type {boolean} Update packages to the latest available versions */ this.latest
26
+ }
27
+
28
+ /**
29
+ * @returns {AsyncGenerator<import('@nan0web/ui').Intent, import('@nan0web/ui').ResultIntent, any>}
30
+ */
31
+ async *run() {
32
+ const { t, db } = /** @type {any} */ (this._)
33
+ const pkg = await db.loadDocument('package.json', {})
34
+ yield show(t('Loaded package.json, {bytes} bytes', { bytes: JSON.stringify(pkg).length }))
35
+
36
+ const deps = {
37
+ devDependencies: pkg?.devDependencies ?? {},
38
+ dependencies: pkg?.dependencies ?? {},
39
+ peerDependencies: pkg?.peerDependencies ?? {},
40
+ }
41
+ const fixes = new Map()
42
+ const fails = new Set()
43
+
44
+ const isLocal = (ver) =>
45
+ ['workspace:', 'link:'].some((p) => String(ver).toLowerCase().startsWith(p))
46
+
47
+ const changes = new Map()
48
+
49
+ for (const [group, map] of Object.entries(deps)) {
50
+ yield show(t('{group} ({count} items)', { group, count: Object.keys(map).length }))
51
+ for (const [dep, ver] of Object.entries(map ?? {})) {
52
+ if (isLocal(ver) || this.latest) {
53
+ const resultSpawn = await runSpawn('npm', ['info', dep, '--json'])
54
+ if (resultSpawn.code !== 0) {
55
+ throw new Error(t('Cannot retrieve npm package info'))
56
+ }
57
+ try {
58
+ const data = JSON.parse(resultSpawn.text)
59
+ if (data.version) {
60
+ fixes.set(dep, data.version)
61
+ yield show(t(' {dep}: {ver} → {version}', { dep, ver, version: data.version }), 'warn')
62
+ } else {
63
+ fails.add(dep)
64
+ yield show(t(' {dep}: 404 — not found', { dep }), 'error')
65
+ }
66
+ } catch (err) {
67
+ yield show(String(err), 'error')
68
+ }
69
+ } else {
70
+ yield show(t(' {dep}: {ver}', { dep, ver }), 'success')
71
+ }
72
+ }
73
+ }
74
+
75
+ if (fails.size) {
76
+ throw new Error(t('Some dependencies are not yet published on npm: {list}', { list: [...fails].join(', ') }))
77
+ }
78
+
79
+ if ((this.fix || this.latest) && fixes.size) {
80
+ for (const [dep, ver] of fixes) {
81
+ const args = ['install']
82
+ if (pkg.devDependencies?.[dep]) {
83
+ pkg.devDependencies[dep] = ver
84
+ args.push('--save-dev')
85
+ }
86
+ if (pkg.dependencies?.[dep]) pkg.dependencies[dep] = ver
87
+ args.push(dep + '@latest')
88
+ if (this.latest) {
89
+ yield show(t('Installing dependency...'))
90
+ await runSpawn('npm', args)
91
+ }
92
+ changes.set(dep, `${dep}: ${ver}`)
93
+ yield show(t('Fixed {dep} → {ver}', { dep, ver }), 'success')
94
+ }
95
+ await db.saveDocument('package.json', pkg)
96
+ yield show(t('Fixes saved ({count} changes)', { count: changes.size }), 'success')
97
+ yield show(t('Dependencies fixed'))
98
+ } else {
99
+ yield show(t('Run with --fix to apply {count} available fixes', { count: fixes.size }))
100
+ yield show(t('Dependencies check completed'))
101
+ }
102
+ return result({})
103
+ }
104
+ }
@@ -0,0 +1,57 @@
1
+ import { ModelAsApp, result, show } from '@nan0web/ui'
2
+
3
+ export default class InitCommand extends ModelAsApp {
4
+ static version = {
5
+ help: 'Release version',
6
+ default: '',
7
+ errorRequired: 'Version is required (e.g. --version=1.0.0 or --version=v1.0.0)',
8
+ }
9
+ static UI = {
10
+ title: 'init',
11
+ help: 'Initialize a new release structure',
12
+ }
13
+
14
+ /**
15
+ * @param {Partial<InitCommand>} [data]
16
+ * @param {Partial<import('@nan0web/ui').ModelAsAppOptions>} [options]
17
+ */
18
+ constructor(data = {}, options = {}) {
19
+ super(data, options)
20
+ /** @type {string} Release version */ this.version
21
+ }
22
+
23
+ /**
24
+ * @returns {AsyncGenerator<import('@nan0web/ui').Intent, import('@nan0web/ui').ResultIntent, any>}
25
+ */
26
+ async *run() {
27
+ const { t, db } = this._
28
+ if (!this.version) {
29
+ throw new Error(t(InitCommand.version.errorRequired))
30
+ }
31
+ const v = this.version.startsWith('v') ? this.version : `v${this.version}`
32
+
33
+ const parts = v.replace('v', '').split('.')
34
+ const major = parts[0] || '0'
35
+ const minor = parts[1] || '0'
36
+
37
+ const { mkdirSync, writeFileSync } = await import('node:fs')
38
+ const { join } = await import('node:path')
39
+
40
+ const dir = join(process.cwd(), 'releases', major, minor, v)
41
+ mkdirSync(dir, { recursive: true })
42
+
43
+ const taskPath = join(dir, 'task.md')
44
+ writeFileSync(taskPath, `# Release ${v}\n\n- [ ] Task 1`, 'utf8')
45
+
46
+ const specPath = join(dir, 'test.spec.js')
47
+ writeFileSync(
48
+ specPath,
49
+ `import test from 'node:test'\nimport assert from 'node:assert'\n\ntest('Sample spec', () => {\n\tassert.ok(true)\n})\n`,
50
+ 'utf8',
51
+ )
52
+
53
+ yield show(`✅ Initialized release ${v} in ${dir}`, 'success')
54
+
55
+ return result({})
56
+ }
57
+ }
@@ -0,0 +1,89 @@
1
+ import { ModelAsApp, result, show } from '@nan0web/ui'
2
+ import { runSpawn } from '@nan0web/test'
3
+
4
+ export default class PublishCommand extends ModelAsApp {
5
+ static major = {
6
+ help: 'Bump major version',
7
+ default: false,
8
+ }
9
+ static minor = {
10
+ help: 'Bump minor version',
11
+ default: false,
12
+ }
13
+ static patch = {
14
+ help: 'Bump patch version',
15
+ default: false,
16
+ }
17
+ static UI = {
18
+ title: 'publish',
19
+ help: 'Publish npm packages',
20
+ }
21
+
22
+ /**
23
+ * @param {Partial<PublishCommand>} [data]
24
+ * @param {Partial<import('@nan0web/ui').ModelAsAppOptions>} [options]
25
+ */
26
+ constructor(data = {}, options = {}) {
27
+ super(data, options)
28
+ /** @type {boolean} Bump major version */ this.major
29
+ /** @type {boolean} Bump minor version */ this.minor
30
+ /** @type {boolean} Bump patch version */ this.patch
31
+ }
32
+
33
+ /**
34
+ * @returns {AsyncGenerator<import('@nan0web/ui').Intent, import('@nan0web/ui').ResultIntent, any>}
35
+ */
36
+ async *run() {
37
+ const bump = this.major ? 'major' : this.minor ? 'minor' : this.patch ? 'patch' : null
38
+
39
+ if (bump) {
40
+ const bumpResult = await runSpawn('npm', ['version', bump])
41
+ if (bumpResult.code !== 0) throw new Error('Failed to bump version')
42
+ }
43
+
44
+ const db = /** @type {any} */ (this._).db
45
+ const pkg = await db.loadDocument('package.json', {})
46
+ const tag = `v${pkg.version}`
47
+
48
+ yield show(`🛜 nan0release: publishing @${pkg.name}@${pkg.version}`)
49
+
50
+ const diffRes = await runSpawn('git', ['diff', '--quiet'])
51
+ if (diffRes.code !== 0) throw new Error('Uncommitted changes found')
52
+
53
+ const pullRes = await runSpawn('git', ['pull'])
54
+ if (pullRes.code !== 0) throw new Error('Failed to pull latest changes')
55
+
56
+ const cleanRes = await runSpawn('npm', ['run', 'clean'])
57
+ if (cleanRes.code !== 0) throw new Error('Clean failed')
58
+
59
+ const buildRes = await runSpawn('npm', ['run', 'build'])
60
+ if (buildRes.code !== 0) throw new Error('Build failed')
61
+
62
+ const testRes = await runSpawn('npm', ['test'])
63
+ if (testRes.code !== 0) throw new Error('Tests failed')
64
+
65
+ const tagsResult = await runSpawn('git', ['tag'])
66
+ if (tagsResult.code !== 0) throw new Error('Failed to get tags')
67
+ const tags = tagsResult.text.split('\n').filter(Boolean)
68
+
69
+ if (!tags.includes(tag)) {
70
+ const tagRes = await runSpawn('git', ['tag', '-a', tag, '-m', `Release ${pkg.version}`])
71
+ if (tagRes.code !== 0) throw new Error('Tag creation failed')
72
+ yield show(`Tag ${tag} created`, 'success')
73
+ } else {
74
+ yield show(`Tag ${tag} already exists`, 'warn')
75
+ }
76
+
77
+ const pubRes = await runSpawn('pnpm', ['publish', '--access', 'public'])
78
+ if (pubRes.code !== 0) throw new Error('Publish to npm failed')
79
+
80
+ const pushRes = await runSpawn('git', ['push', 'origin', 'main', '--no-verify'])
81
+ if (pushRes.code !== 0) throw new Error('Git push failed')
82
+
83
+ const pushTagsRes = await runSpawn('git', ['push', 'origin', '--tags', '--no-verify'])
84
+ if (pushTagsRes.code !== 0) throw new Error('Tag push failed')
85
+
86
+ yield show(`${pkg.name}@${pkg.version} published.`, 'success')
87
+ return result({})
88
+ }
89
+ }
@@ -0,0 +1,43 @@
1
+ import { ModelAsApp, result, show } from '@nan0web/ui'
2
+ import { runSpawn } from '@nan0web/test'
3
+ import Scanner from '../Release/Scanner.js'
4
+
5
+ export default class SpecCommand extends ModelAsApp {
6
+ static version = {
7
+ help: 'Release version filter',
8
+ default: '',
9
+ }
10
+ static UI = {
11
+ title: 'spec',
12
+ help: 'Run spec testing for the active release',
13
+ }
14
+
15
+ /**
16
+ * @param {Partial<SpecCommand>} [data]
17
+ * @param {Partial<import('@nan0web/ui').ModelAsAppOptions>} [options]
18
+ */
19
+ constructor(data = {}, options = {}) {
20
+ super(data, options)
21
+ /** @type {string} Release version filter */ this.version
22
+ }
23
+
24
+ /**
25
+ * @returns {AsyncGenerator<import('@nan0web/ui').Intent, import('@nan0web/ui').ResultIntent, any>}
26
+ */
27
+ async *run() {
28
+ yield show(`🛜 nan0release spec ${this.version || 'all'}`)
29
+ const scanner = new Scanner(process.cwd())
30
+ const specs = scanner.findSpecs(this.version)
31
+ if (specs.length === 0) {
32
+ yield show(`No specs found.`, 'warn')
33
+ return result({})
34
+ }
35
+ const files = specs.map((s) => s.path)
36
+ const spawnResult = await runSpawn('node', ['--test', ...files])
37
+ if (spawnResult.code !== 0) {
38
+ throw new Error('Specs failed')
39
+ }
40
+ yield show(`✅ Specs passed`, 'success')
41
+ return result({})
42
+ }
43
+ }
@@ -0,0 +1,25 @@
1
+ import { ModelAsApp, result, show } from '@nan0web/ui'
2
+ import Scanner from '../Release/Scanner.js'
3
+
4
+ export default class StatusCommand extends ModelAsApp {
5
+ static UI = {
6
+ title: 'status',
7
+ help: 'Show release status',
8
+ }
9
+
10
+ /**
11
+ * @returns {AsyncGenerator<import('@nan0web/ui').Intent, import('@nan0web/ui').ResultIntent, any>}
12
+ */
13
+ async *run() {
14
+ const scanner = new Scanner(process.cwd())
15
+ const statuses = scanner.status()
16
+
17
+ yield show(`🛜 nan0release status`)
18
+ for (const st of statuses) {
19
+ yield show(
20
+ `${st.version.padEnd(10)} | ${st.state.padEnd(6)} | Specs: ${st.specs.length}, Tests: ${st.tests.length}`,
21
+ )
22
+ }
23
+ return result({})
24
+ }
25
+ }
package/src/index.js CHANGED
@@ -3,7 +3,12 @@ import ReleaseDocument from './Release/Document.js'
3
3
  import Person from './Release/Person.js'
4
4
  import Scanner from './Release/Scanner.js'
5
5
  import MarkdownToTest from './Release/MarkdownToTest.js'
6
- import { ProjectManagement, ReleaseManager, TaskTestSuite, ChangelogTaskManager } from './architecture/ProjectManagementAsCode.js'
6
+ import {
7
+ ProjectManagement,
8
+ ReleaseManager,
9
+ TaskTestSuite,
10
+ ChangelogTaskManager,
11
+ } from './architecture/ProjectManagementAsCode.js'
7
12
 
8
13
  export {
9
14
  Release,
@@ -14,5 +19,14 @@ export {
14
19
  ProjectManagement,
15
20
  ReleaseManager,
16
21
  TaskTestSuite,
17
- ChangelogTaskManager
22
+ ChangelogTaskManager,
18
23
  }
24
+
25
+ export { ReleaseApp } from './domain/App.js'
26
+ export { default as InitCommand } from './domain/InitCommand.js'
27
+ export { default as CheckCommand } from './domain/CheckCommand.js'
28
+ export { default as CloseCommand } from './domain/CloseCommand.js'
29
+ export { default as DepsCommand } from './domain/DepsCommand.js'
30
+ export { default as PublishCommand } from './domain/PublishCommand.js'
31
+ export { default as SpecCommand } from './domain/SpecCommand.js'
32
+ export { default as StatusCommand } from './domain/StatusCommand.js'
@@ -12,6 +12,6 @@ export default class Person {
12
12
  /** @type {HumanContact[]} */
13
13
  contacts: HumanContact[];
14
14
  }
15
- import { HumanName } from '@nan0web/verse';
16
- import { HumanGender } from '@nan0web/verse';
17
- import { HumanContact } from '@nan0web/verse';
15
+ import { HumanName } from '@nan0web/logos';
16
+ import { HumanGender } from '@nan0web/logos';
17
+ import { HumanContact } from '@nan0web/logos';
package/types/Team.d.ts CHANGED
@@ -22,6 +22,6 @@ declare class Person {
22
22
  /** @type {HumanContact[]} */
23
23
  contacts: HumanContact[];
24
24
  }
25
- import { HumanName } from '@nan0web/verse';
26
- import { HumanGender } from '@nan0web/verse';
27
- import { HumanContact } from '@nan0web/verse';
25
+ import { HumanName } from '@nan0web/logos';
26
+ import { HumanGender } from '@nan0web/logos';
27
+ import { HumanContact } from '@nan0web/logos';
@@ -0,0 +1,24 @@
1
+ export default class CheckCommand extends ModelAsApp {
2
+ static UI: {
3
+ title: string;
4
+ icon: string;
5
+ description: string;
6
+ };
7
+ static name: string;
8
+ /**
9
+ * @returns {AsyncGenerator<any, any, any>}
10
+ */
11
+ run(): AsyncGenerator<any, any, any>;
12
+ /**
13
+ * @param {string} absDir
14
+ * @returns {Promise<string[]>}
15
+ */
16
+ _scanLocal(absDir: string): Promise<string[]>;
17
+ /**
18
+ * @param {string} base
19
+ * @param {string} [dir]
20
+ * @returns {Promise<string[]>}
21
+ */
22
+ _scanDirRecursive(base: string, dir?: string): Promise<string[]>;
23
+ }
24
+ import { ModelAsApp } from '@nan0web/ui';
@@ -10,7 +10,7 @@ export default class CloseCommand extends Command {
10
10
  run(): AsyncGenerator<OutputMessage, void, unknown>;
11
11
  }
12
12
  import Command from './Command.js';
13
- declare class CloseBody {
13
+ declare class CloseBody extends CommandBody {
14
14
  static version: {
15
15
  help: string;
16
16
  defaultValue: string;
@@ -22,4 +22,5 @@ declare class CloseBody {
22
22
  version: string;
23
23
  }
24
24
  import { OutputMessage } from '@nan0web/co';
25
+ import { CommandBody } from './Command.js';
25
26
  export {};
@@ -1,5 +1,10 @@
1
1
  /** @typedef {import("@nan0web/test/types/exec/runSpawn").SpawnResult} SpawnResult */
2
+ export class CommandBody {
3
+ static fs: {};
4
+ static logger: {};
5
+ }
2
6
  export default class Command extends UiMessage {
7
+ static Body: typeof CommandBody;
3
8
  /**
4
9
  * @param {Partial<UiMessage> & { }} [input={}]
5
10
  */
@@ -8,7 +13,7 @@ export default class Command extends UiMessage {
8
13
  fs: DBFS;
9
14
  /** @type {Logger} */
10
15
  logger: Logger;
11
- get Body(): new () => {};
16
+ get Body(): typeof CommandBody;
12
17
  /**
13
18
  * Run the command.
14
19
  * @param {string} cmd
@@ -13,7 +13,7 @@ export default class DepsCommand extends Command {
13
13
  run(msg?: DepsCommand): AsyncGenerator<OutputMessage>;
14
14
  }
15
15
  import Command from './Command.js';
16
- declare class DepsBody {
16
+ declare class DepsBody extends CommandBody {
17
17
  static fix: {
18
18
  help: string;
19
19
  defaultValue: boolean;
@@ -29,4 +29,5 @@ declare class DepsBody {
29
29
  latest: boolean;
30
30
  }
31
31
  import { OutputMessage } from '@nan0web/co';
32
+ import { CommandBody } from './Command.js';
32
33
  export {};
@@ -10,7 +10,7 @@ export default class InitCommand extends Command {
10
10
  run(): AsyncGenerator<OutputMessage, void, unknown>;
11
11
  }
12
12
  import Command from './Command.js';
13
- declare class InitBody {
13
+ declare class InitBody extends CommandBody {
14
14
  static version: {
15
15
  help: string;
16
16
  defaultValue: string;
@@ -22,4 +22,5 @@ declare class InitBody {
22
22
  version: string;
23
23
  }
24
24
  import { OutputMessage } from '@nan0web/co';
25
+ import { CommandBody } from './Command.js';
25
26
  export {};
@@ -10,7 +10,7 @@ export default class PublishCommand extends Command {
10
10
  body: PublishBody;
11
11
  }
12
12
  import Command from './Command.js';
13
- declare class PublishBody {
13
+ declare class PublishBody extends CommandBody {
14
14
  static major: {
15
15
  help: string;
16
16
  defaultValue: boolean;
@@ -35,4 +35,5 @@ declare class PublishBody {
35
35
  /** @type {boolean} */
36
36
  patch: boolean;
37
37
  }
38
+ import { CommandBody } from './Command.js';
38
39
  export {};
@@ -10,7 +10,7 @@ export default class SpecCommand extends Command {
10
10
  run(): AsyncGenerator<OutputMessage, void, unknown>;
11
11
  }
12
12
  import Command from './Command.js';
13
- declare class SpecBody {
13
+ declare class SpecBody extends CommandBody {
14
14
  static version: {
15
15
  help: string;
16
16
  defaultValue: string;
@@ -22,4 +22,5 @@ declare class SpecBody {
22
22
  version: string;
23
23
  }
24
24
  import { OutputMessage } from '@nan0web/co';
25
+ import { CommandBody } from './Command.js';
25
26
  export {};
@@ -0,0 +1,17 @@
1
+ export class ReleaseApp extends ModelAsApp {
2
+ static command: {
3
+ help: string;
4
+ options: (typeof CheckCommand | typeof StatusCommand)[];
5
+ positional: boolean;
6
+ default: null;
7
+ };
8
+ /**
9
+ * @param {Partial<ReleaseApp>} [data]
10
+ * @param {Partial<import('@nan0web/ui').ModelAsAppOptions>} [options]
11
+ */
12
+ constructor(data?: Partial<ReleaseApp>, options?: Partial<import("@nan0web/ui").ModelAsAppOptions>);
13
+ /** @type {ModelAsApp} Subcommand to run */ command: ModelAsApp;
14
+ }
15
+ import { ModelAsApp } from "@nan0web/ui";
16
+ import CheckCommand from './CheckCommand.js';
17
+ import StatusCommand from './StatusCommand.js';
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Command to bump the version of changed packages in the monorepo.
3
+ */
4
+ export default class BumpCommand extends ModelAsApp {
5
+ static version: {
6
+ help: string;
7
+ default: string;
8
+ positional: boolean;
9
+ };
10
+ static since: {
11
+ help: string;
12
+ default: string;
13
+ positional: boolean;
14
+ };
15
+ static UI: {
16
+ title: string;
17
+ help: string;
18
+ bumping: string;
19
+ foundChangedPackages: string;
20
+ detectingChangedPackages: string;
21
+ noChangesDetected: string;
22
+ errorDb: string;
23
+ };
24
+ /**
25
+ * @param {Partial<BumpCommand>} [data]
26
+ * @param {Partial<import('@nan0web/ui').ModelAsAppOptions>} [options]
27
+ */
28
+ constructor(data?: Partial<BumpCommand>, options?: Partial<import("@nan0web/ui").ModelAsAppOptions>);
29
+ /** @type {string} Target version */ version: string;
30
+ /** @type {string} Since reference */ since: string;
31
+ }
32
+ import { ModelAsApp } from '@nan0web/ui';
@@ -0,0 +1,24 @@
1
+ export default class CheckCommand extends ModelAsApp {
2
+ static UI: {
3
+ title: string;
4
+ icon: string;
5
+ description: string;
6
+ };
7
+ static name: string;
8
+ /**
9
+ * @returns {AsyncGenerator<any, any, any>}
10
+ */
11
+ run(): AsyncGenerator<any, any, any>;
12
+ /**
13
+ * @param {string} absDir
14
+ * @returns {Promise<string[]>}
15
+ */
16
+ _scanLocal(absDir: string): Promise<string[]>;
17
+ /**
18
+ * @param {string} base
19
+ * @param {string} [dir]
20
+ * @returns {Promise<string[]>}
21
+ */
22
+ _scanDirRecursive(base: string, dir?: string): Promise<string[]>;
23
+ }
24
+ import { ModelAsApp } from '@nan0web/ui';
@@ -0,0 +1,17 @@
1
+ export default class CloseCommand extends ModelAsApp {
2
+ static version: {
3
+ help: string;
4
+ default: string;
5
+ };
6
+ static UI: {
7
+ title: string;
8
+ help: string;
9
+ };
10
+ /**
11
+ * @param {Partial<CloseCommand>} [data]
12
+ * @param {Partial<import('@nan0web/ui').ModelAsAppOptions>} [options]
13
+ */
14
+ constructor(data?: Partial<CloseCommand>, options?: Partial<import("@nan0web/ui").ModelAsAppOptions>);
15
+ /** @type {string} Release version */ version: string;
16
+ }
17
+ import { ModelAsApp } from '@nan0web/ui';
@@ -0,0 +1,22 @@
1
+ export default class DepsCommand extends ModelAsApp {
2
+ static fix: {
3
+ help: string;
4
+ default: boolean;
5
+ };
6
+ static latest: {
7
+ help: string;
8
+ default: boolean;
9
+ };
10
+ static UI: {
11
+ title: string;
12
+ help: string;
13
+ };
14
+ /**
15
+ * @param {Partial<DepsCommand>} [data]
16
+ * @param {Partial<import('@nan0web/ui').ModelAsAppOptions>} [options]
17
+ */
18
+ constructor(data?: Partial<DepsCommand>, options?: Partial<import("@nan0web/ui").ModelAsAppOptions>);
19
+ /** @type {boolean} Apply fixes automatically */ fix: boolean;
20
+ /** @type {boolean} Update packages to the latest available versions */ latest: boolean;
21
+ }
22
+ import { ModelAsApp } from '@nan0web/ui';
@@ -0,0 +1,18 @@
1
+ export default class InitCommand extends ModelAsApp {
2
+ static version: {
3
+ help: string;
4
+ default: string;
5
+ errorRequired: string;
6
+ };
7
+ static UI: {
8
+ title: string;
9
+ help: string;
10
+ };
11
+ /**
12
+ * @param {Partial<InitCommand>} [data]
13
+ * @param {Partial<import('@nan0web/ui').ModelAsAppOptions>} [options]
14
+ */
15
+ constructor(data?: Partial<InitCommand>, options?: Partial<import("@nan0web/ui").ModelAsAppOptions>);
16
+ /** @type {string} Release version */ version: string;
17
+ }
18
+ import { ModelAsApp } from '@nan0web/ui';
@@ -0,0 +1,27 @@
1
+ export default class PublishCommand extends ModelAsApp {
2
+ static major: {
3
+ help: string;
4
+ default: boolean;
5
+ };
6
+ static minor: {
7
+ help: string;
8
+ default: boolean;
9
+ };
10
+ static patch: {
11
+ help: string;
12
+ default: boolean;
13
+ };
14
+ static UI: {
15
+ title: string;
16
+ help: string;
17
+ };
18
+ /**
19
+ * @param {Partial<PublishCommand>} [data]
20
+ * @param {Partial<import('@nan0web/ui').ModelAsAppOptions>} [options]
21
+ */
22
+ constructor(data?: Partial<PublishCommand>, options?: Partial<import("@nan0web/ui").ModelAsAppOptions>);
23
+ /** @type {boolean} Bump major version */ major: boolean;
24
+ /** @type {boolean} Bump minor version */ minor: boolean;
25
+ /** @type {boolean} Bump patch version */ patch: boolean;
26
+ }
27
+ import { ModelAsApp } from '@nan0web/ui';