specweave 0.28.50 → 0.28.51

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.
@@ -2,8 +2,10 @@
2
2
  * Import Strategy Prompter
3
3
  *
4
4
  * Provides CLI-first UI for selecting import strategy with "Import all" as default.
5
- * Supports three strategies:
5
+ * Supports five strategies (unified with GitHub/ADO):
6
6
  * - import-all (default, recommended)
7
+ * - pattern-glob (glob pattern matching)
8
+ * - pattern-regex (regex pattern matching)
7
9
  * - select-specific (checkbox mode with all pre-checked)
8
10
  * - manual-entry (comma-separated project keys)
9
11
  *
@@ -13,13 +15,15 @@ import { Logger } from '../../utils/logger.js';
13
15
  /**
14
16
  * Import strategy options
15
17
  */
16
- export type ImportStrategy = 'import-all' | 'select-specific' | 'manual-entry';
18
+ export type ImportStrategy = 'import-all' | 'pattern-glob' | 'pattern-regex' | 'select-specific' | 'manual-entry';
17
19
  /**
18
20
  * Strategy prompt result
19
21
  */
20
22
  export interface StrategyPromptResult {
21
23
  strategy: ImportStrategy;
22
24
  projectKeys?: string[];
25
+ pattern?: string;
26
+ isRegex?: boolean;
23
27
  confirmed?: boolean;
24
28
  }
25
29
  /**
@@ -36,6 +40,13 @@ export interface StrategyPrompterOptions {
36
40
  * Default: "Import all" (CLI-first approach)
37
41
  * Instructions: "All projects selected by default. Deselect unwanted projects if needed."
38
42
  *
43
+ * Unified options (same as GitHub/ADO):
44
+ * - All (import-all)
45
+ * - Pattern (glob)
46
+ * - Pattern (regex)
47
+ * - Select specific
48
+ * - Manual entry
49
+ *
39
50
  * @param options - Prompter options
40
51
  * @returns Strategy prompt result
41
52
  */
@@ -1 +1 @@
1
- {"version":3,"file":"import-strategy-prompter.d.ts","sourceRoot":"","sources":["../../../../src/cli/helpers/import-strategy-prompter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAAE,MAAM,EAAiB,MAAM,uBAAuB,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,iBAAiB,GAAG,cAAc,CAAC;AAE/E;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,oBAAoB,CAAC,CA2C/B"}
1
+ {"version":3,"file":"import-strategy-prompter.d.ts","sourceRoot":"","sources":["../../../../src/cli/helpers/import-strategy-prompter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EAAE,MAAM,EAAiB,MAAM,uBAAuB,CAAC;AAG9D;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,cAAc,GAAG,eAAe,GAAG,iBAAiB,GAAG,cAAc,CAAC;AAElH;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,oBAAoB,CAAC,CA6D/B"}
@@ -2,8 +2,10 @@
2
2
  * Import Strategy Prompter
3
3
  *
4
4
  * Provides CLI-first UI for selecting import strategy with "Import all" as default.
5
- * Supports three strategies:
5
+ * Supports five strategies (unified with GitHub/ADO):
6
6
  * - import-all (default, recommended)
7
+ * - pattern-glob (glob pattern matching)
8
+ * - pattern-regex (regex pattern matching)
7
9
  * - select-specific (checkbox mode with all pre-checked)
8
10
  * - manual-entry (comma-separated project keys)
9
11
  *
@@ -12,12 +14,20 @@
12
14
  import { select, input, confirm } from '@inquirer/prompts';
13
15
  import chalk from 'chalk';
14
16
  import { consoleLogger } from '../../utils/logger.js';
17
+ import { parsePatternShortcut, validateRegex } from './selection-strategy.js';
15
18
  /**
16
19
  * Prompt user for import strategy selection
17
20
  *
18
21
  * Default: "Import all" (CLI-first approach)
19
22
  * Instructions: "All projects selected by default. Deselect unwanted projects if needed."
20
23
  *
24
+ * Unified options (same as GitHub/ADO):
25
+ * - All (import-all)
26
+ * - Pattern (glob)
27
+ * - Pattern (regex)
28
+ * - Select specific
29
+ * - Manual entry
30
+ *
21
31
  * @param options - Prompter options
22
32
  * @returns Strategy prompt result
23
33
  */
@@ -25,25 +35,41 @@ export async function promptImportStrategy(options) {
25
35
  const { totalCount, provider, logger = consoleLogger } = options;
26
36
  // Display project count
27
37
  logger.log(chalk.cyan(`\nFound ${totalCount} accessible ${provider.toUpperCase()} projects.`));
28
- // Show strategy prompt
38
+ // Show strategy prompt - unified with GitHub/ADO
29
39
  const strategy = await select({
30
- message: 'How would you like to import projects?',
40
+ message: 'How would you like to select projects?',
31
41
  default: 'import-all', // CLI-first default
32
42
  choices: [
33
43
  {
34
- name: chalk.green('✓ Import all projects (Recommended)') + chalk.gray(' - All selected by default'),
35
- value: 'import-all'
44
+ name: `${chalk.green('✓')} All ${chalk.gray('- Import all projects (Recommended)')}`,
45
+ value: 'import-all',
36
46
  },
37
47
  {
38
- name: 'Select specific projects' + chalk.gray(' - Choose from checkbox list'),
39
- value: 'select-specific'
48
+ name: `Pattern (glob) ${chalk.gray('- Match by pattern (e.g., "PROJ-*", "*-BACKEND")')}`,
49
+ value: 'pattern-glob',
40
50
  },
41
51
  {
42
- name: 'Manual entry' + chalk.gray(' - Enter project keys manually'),
43
- value: 'manual-entry'
44
- }
45
- ]
52
+ name: `Pattern (regex) ${chalk.gray('- Regular expression (e.g., "^PROJ-.*$")')}`,
53
+ value: 'pattern-regex',
54
+ },
55
+ {
56
+ name: `Select specific ${chalk.gray('- Choose from checkbox list')}`,
57
+ value: 'select-specific',
58
+ },
59
+ {
60
+ name: `Manual entry ${chalk.gray('- Enter project keys directly')}`,
61
+ value: 'manual-entry',
62
+ },
63
+ ],
46
64
  });
65
+ // Handle pattern-glob
66
+ if (strategy === 'pattern-glob') {
67
+ return await handlePatternGlob(logger);
68
+ }
69
+ // Handle pattern-regex
70
+ if (strategy === 'pattern-regex') {
71
+ return await handlePatternRegex(logger);
72
+ }
47
73
  // Handle manual entry
48
74
  if (strategy === 'manual-entry') {
49
75
  return await handleManualEntry(logger);
@@ -60,6 +86,53 @@ export async function promptImportStrategy(options) {
60
86
  }
61
87
  return { strategy };
62
88
  }
89
+ /**
90
+ * Handle pattern (glob) workflow
91
+ *
92
+ * @param logger - Logger instance
93
+ * @returns Strategy result with pattern
94
+ */
95
+ async function handlePatternGlob(logger) {
96
+ logger.log(chalk.gray('\n💡 Examples: "PROJ-*", "*-BACKEND", "TEAM-*-SERVICE"'));
97
+ logger.log(chalk.gray('💡 Shortcuts: "starts: PROJ-", "ends: -API", "contains: CORE"\n'));
98
+ const patternInput = await input({
99
+ message: 'Enter pattern:',
100
+ validate: (val) => {
101
+ if (!val.trim()) {
102
+ return chalk.red('Pattern is required');
103
+ }
104
+ return true;
105
+ },
106
+ });
107
+ // Parse shortcuts and return
108
+ const parsedPattern = parsePatternShortcut(patternInput.trim());
109
+ logger.log(chalk.green(`\n✓ Projects matching pattern "${parsedPattern}" will be imported`));
110
+ return { strategy: 'pattern-glob', pattern: parsedPattern };
111
+ }
112
+ /**
113
+ * Handle pattern (regex) workflow
114
+ *
115
+ * @param logger - Logger instance
116
+ * @returns Strategy result with pattern
117
+ */
118
+ async function handlePatternRegex(logger) {
119
+ logger.log(chalk.gray('\n💡 Examples: "^PROJ-", ".*-BACKEND$", "^TEAM-\\d+-SERVICE$"\n'));
120
+ const patternInput = await input({
121
+ message: 'Enter regex pattern:',
122
+ validate: (val) => {
123
+ if (!val.trim()) {
124
+ return chalk.red('Pattern is required');
125
+ }
126
+ const validation = validateRegex(val.trim());
127
+ if (validation !== true) {
128
+ return chalk.red(`Invalid regular expression: ${validation}`);
129
+ }
130
+ return true;
131
+ },
132
+ });
133
+ logger.log(chalk.green(`\n✓ Projects matching regex "${patternInput.trim()}" will be imported`));
134
+ return { strategy: 'pattern-regex', pattern: patternInput.trim(), isRegex: true };
135
+ }
63
136
  /**
64
137
  * Handle manual entry workflow
65
138
  *
@@ -1 +1 @@
1
- {"version":3,"file":"import-strategy-prompter.js","sourceRoot":"","sources":["../../../../src/cli/helpers/import-strategy-prompter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"import-strategy-prompter.js","sourceRoot":"","sources":["../../../../src/cli/helpers/import-strategy-prompter.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,18 @@ export interface RepositorySetupOptions {
13
13
  gitHubRemote: GitHubRemote | null;
14
14
  language?: SupportedLanguage;
15
15
  }
16
+ /**
17
+ * ADO clone pattern selection strategy
18
+ */
19
+ export type AdoCloneStrategy = 'all' | 'pattern-glob' | 'pattern-regex' | 'skip';
20
+ /**
21
+ * ADO clone pattern result
22
+ */
23
+ export interface AdoClonePatternResult {
24
+ strategy: AdoCloneStrategy;
25
+ pattern?: string;
26
+ isRegex?: boolean;
27
+ }
16
28
  /**
17
29
  * Result of repository setup
18
30
  */
@@ -21,6 +33,8 @@ export interface RepositorySetupResult {
21
33
  isMultiRepo: boolean;
22
34
  /** ADO repo clone pattern for multi-repo (e.g., "sw-*") */
23
35
  adoClonePattern?: string;
36
+ /** ADO clone pattern details */
37
+ adoClonePatternResult?: AdoClonePatternResult;
24
38
  }
25
39
  /**
26
40
  * Prompt user for repository hosting configuration
@@ -1 +1 @@
1
- {"version":3,"file":"repository-setup.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/repository-setup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGrE;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAoLD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,2DAA2D;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAsF5G"}
1
+ {"version":3,"file":"repository-setup.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/repository-setup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGrE;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,cAAc,GAAG,eAAe,GAAG,MAAM,CAAC;AAEjF;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA4XD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,2DAA2D;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gCAAgC;IAChC,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;CAC/C;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAqK5G"}
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import chalk from 'chalk';
6
6
  import { select, input } from '@inquirer/prompts';
7
+ import { parsePatternShortcut, validateRegex } from '../selection-strategy.js';
7
8
  /**
8
9
  * Get translated strings for repository setup
9
10
  */
@@ -25,6 +26,26 @@ function getRepoStrings(language) {
25
26
  other: 'Other (GitLab, etc - coming soon)',
26
27
  adoCloneQuestion: 'Enter repo name pattern to clone (e.g., sw-* or leave empty to skip):',
27
28
  adoCloneSkip: 'Skipping repo cloning - you can configure later',
29
+ // New unified selection strings
30
+ adoSelectStrategy: 'How do you want to select repositories to clone?',
31
+ adoAllRepos: 'All',
32
+ adoAllReposDesc: 'Clone all repositories from the project',
33
+ adoPatternGlob: 'Pattern (glob)',
34
+ adoPatternGlobDesc: 'Match by pattern (e.g., "sw-*", "*-backend")',
35
+ adoPatternRegex: 'Pattern (regex)',
36
+ adoPatternRegexDesc: 'Regular expression (e.g., "^sw-.*$")',
37
+ adoSkipOption: 'Skip',
38
+ adoSkipDesc: 'Configure later',
39
+ adoPatternPrompt: 'Enter pattern',
40
+ adoPatternHint: 'Examples: "sw-*", "*-backend", "api-*-service"',
41
+ adoRegexPrompt: 'Enter regex pattern',
42
+ adoRegexHint: 'Examples: "^sw-", ".*-backend$", "^api-\\d+-service$"',
43
+ adoShortcutsHint: 'Shortcuts: "starts: sw-", "ends: -api", "contains: core"',
44
+ adoPatternRequired: 'Pattern is required',
45
+ adoInvalidRegex: 'Invalid regular expression',
46
+ adoSelectedAll: 'All repositories will be cloned',
47
+ adoSelectedPattern: 'Repositories matching pattern "{pattern}" will be cloned',
48
+ adoSelectedRegex: 'Repositories matching regex "{pattern}" will be cloned',
28
49
  },
29
50
  ru: {
30
51
  header: '📦 Хостинг репозитория',
@@ -42,6 +63,26 @@ function getRepoStrings(language) {
42
63
  other: 'Другой (GitLab и т.д. - скоро)',
43
64
  adoCloneQuestion: 'Введите шаблон имени репо для клонирования (напр., sw-* или оставьте пустым):',
44
65
  adoCloneSkip: 'Пропуск клонирования - можно настроить позже',
66
+ // New unified selection strings
67
+ adoSelectStrategy: 'Как вы хотите выбрать репозитории для клонирования?',
68
+ adoAllRepos: 'Все',
69
+ adoAllReposDesc: 'Клонировать все репозитории из проекта',
70
+ adoPatternGlob: 'Шаблон (glob)',
71
+ adoPatternGlobDesc: 'Сопоставление по шаблону (напр., "sw-*", "*-backend")',
72
+ adoPatternRegex: 'Шаблон (regex)',
73
+ adoPatternRegexDesc: 'Регулярное выражение (напр., "^sw-.*$")',
74
+ adoSkipOption: 'Пропустить',
75
+ adoSkipDesc: 'Настроить позже',
76
+ adoPatternPrompt: 'Введите шаблон',
77
+ adoPatternHint: 'Примеры: "sw-*", "*-backend", "api-*-service"',
78
+ adoRegexPrompt: 'Введите регулярное выражение',
79
+ adoRegexHint: 'Примеры: "^sw-", ".*-backend$", "^api-\\d+-service$"',
80
+ adoShortcutsHint: 'Сокращения: "starts: sw-", "ends: -api", "contains: core"',
81
+ adoPatternRequired: 'Шаблон обязателен',
82
+ adoInvalidRegex: 'Неверное регулярное выражение',
83
+ adoSelectedAll: 'Все репозитории будут клонированы',
84
+ adoSelectedPattern: 'Репозитории, соответствующие шаблону "{pattern}", будут клонированы',
85
+ adoSelectedRegex: 'Репозитории, соответствующие regex "{pattern}", будут клонированы',
45
86
  },
46
87
  es: {
47
88
  header: '📦 Alojamiento del repositorio',
@@ -59,6 +100,26 @@ function getRepoStrings(language) {
59
100
  other: 'Otro (GitLab, etc - próximamente)',
60
101
  adoCloneQuestion: 'Ingrese patrón de nombre de repo a clonar (ej., sw-* o deje vacío):',
61
102
  adoCloneSkip: 'Omitiendo clonación - puede configurar después',
103
+ // New unified selection strings
104
+ adoSelectStrategy: '¿Cómo quiere seleccionar repositorios para clonar?',
105
+ adoAllRepos: 'Todos',
106
+ adoAllReposDesc: 'Clonar todos los repositorios del proyecto',
107
+ adoPatternGlob: 'Patrón (glob)',
108
+ adoPatternGlobDesc: 'Coincidir por patrón (ej., "sw-*", "*-backend")',
109
+ adoPatternRegex: 'Patrón (regex)',
110
+ adoPatternRegexDesc: 'Expresión regular (ej., "^sw-.*$")',
111
+ adoSkipOption: 'Omitir',
112
+ adoSkipDesc: 'Configurar después',
113
+ adoPatternPrompt: 'Ingrese patrón',
114
+ adoPatternHint: 'Ejemplos: "sw-*", "*-backend", "api-*-service"',
115
+ adoRegexPrompt: 'Ingrese expresión regular',
116
+ adoRegexHint: 'Ejemplos: "^sw-", ".*-backend$", "^api-\\d+-service$"',
117
+ adoShortcutsHint: 'Atajos: "starts: sw-", "ends: -api", "contains: core"',
118
+ adoPatternRequired: 'El patrón es requerido',
119
+ adoInvalidRegex: 'Expresión regular inválida',
120
+ adoSelectedAll: 'Todos los repositorios serán clonados',
121
+ adoSelectedPattern: 'Repositorios que coincidan con "{pattern}" serán clonados',
122
+ adoSelectedRegex: 'Repositorios que coincidan con regex "{pattern}" serán clonados',
62
123
  },
63
124
  zh: {
64
125
  header: '📦 仓库托管',
@@ -76,6 +137,26 @@ function getRepoStrings(language) {
76
137
  other: '其他(GitLab 等 - 即将推出)',
77
138
  adoCloneQuestion: '输入要克隆的仓库名称模式(例如 sw-* 或留空跳过):',
78
139
  adoCloneSkip: '跳过克隆 - 稍后可以配置',
140
+ // New unified selection strings
141
+ adoSelectStrategy: '您想如何选择要克隆的仓库?',
142
+ adoAllRepos: '全部',
143
+ adoAllReposDesc: '克隆项目中的所有仓库',
144
+ adoPatternGlob: '模式 (glob)',
145
+ adoPatternGlobDesc: '按模式匹配(例如 "sw-*"、"*-backend")',
146
+ adoPatternRegex: '模式 (正则)',
147
+ adoPatternRegexDesc: '正则表达式(例如 "^sw-.*$")',
148
+ adoSkipOption: '跳过',
149
+ adoSkipDesc: '稍后配置',
150
+ adoPatternPrompt: '输入模式',
151
+ adoPatternHint: '示例:"sw-*"、"*-backend"、"api-*-service"',
152
+ adoRegexPrompt: '输入正则表达式',
153
+ adoRegexHint: '示例:"^sw-"、".*-backend$"、"^api-\\d+-service$"',
154
+ adoShortcutsHint: '快捷方式:"starts: sw-"、"ends: -api"、"contains: core"',
155
+ adoPatternRequired: '模式是必需的',
156
+ adoInvalidRegex: '无效的正则表达式',
157
+ adoSelectedAll: '将克隆所有仓库',
158
+ adoSelectedPattern: '匹配模式 "{pattern}" 的仓库将被克隆',
159
+ adoSelectedRegex: '匹配正则 "{pattern}" 的仓库将被克隆',
79
160
  },
80
161
  de: {
81
162
  header: '📦 Repository-Hosting',
@@ -93,6 +174,26 @@ function getRepoStrings(language) {
93
174
  other: 'Andere (GitLab, etc - kommt bald)',
94
175
  adoCloneQuestion: 'Repo-Namensmuster zum Klonen eingeben (z.B. sw-* oder leer lassen):',
95
176
  adoCloneSkip: 'Klonen übersprungen - später konfigurierbar',
177
+ // New unified selection strings
178
+ adoSelectStrategy: 'Wie möchten Sie Repositories zum Klonen auswählen?',
179
+ adoAllRepos: 'Alle',
180
+ adoAllReposDesc: 'Alle Repositories aus dem Projekt klonen',
181
+ adoPatternGlob: 'Muster (glob)',
182
+ adoPatternGlobDesc: 'Nach Muster filtern (z.B. "sw-*", "*-backend")',
183
+ adoPatternRegex: 'Muster (regex)',
184
+ adoPatternRegexDesc: 'Regulärer Ausdruck (z.B. "^sw-.*$")',
185
+ adoSkipOption: 'Überspringen',
186
+ adoSkipDesc: 'Später konfigurieren',
187
+ adoPatternPrompt: 'Muster eingeben',
188
+ adoPatternHint: 'Beispiele: "sw-*", "*-backend", "api-*-service"',
189
+ adoRegexPrompt: 'Regex eingeben',
190
+ adoRegexHint: 'Beispiele: "^sw-", ".*-backend$", "^api-\\d+-service$"',
191
+ adoShortcutsHint: 'Abkürzungen: "starts: sw-", "ends: -api", "contains: core"',
192
+ adoPatternRequired: 'Muster ist erforderlich',
193
+ adoInvalidRegex: 'Ungültiger regulärer Ausdruck',
194
+ adoSelectedAll: 'Alle Repositories werden geklont',
195
+ adoSelectedPattern: 'Repositories mit Muster "{pattern}" werden geklont',
196
+ adoSelectedRegex: 'Repositories mit Regex "{pattern}" werden geklont',
96
197
  },
97
198
  fr: {
98
199
  header: '📦 Hébergement du dépôt',
@@ -110,6 +211,26 @@ function getRepoStrings(language) {
110
211
  other: 'Autre (GitLab, etc - bientôt)',
111
212
  adoCloneQuestion: 'Entrez le modèle de nom de repo à cloner (ex. sw-* ou laissez vide):',
112
213
  adoCloneSkip: 'Clonage ignoré - configurable plus tard',
214
+ // New unified selection strings
215
+ adoSelectStrategy: 'Comment voulez-vous sélectionner les repos à cloner?',
216
+ adoAllRepos: 'Tous',
217
+ adoAllReposDesc: 'Cloner tous les repos du projet',
218
+ adoPatternGlob: 'Modèle (glob)',
219
+ adoPatternGlobDesc: 'Correspondance par modèle (ex., "sw-*", "*-backend")',
220
+ adoPatternRegex: 'Modèle (regex)',
221
+ adoPatternRegexDesc: 'Expression régulière (ex., "^sw-.*$")',
222
+ adoSkipOption: 'Ignorer',
223
+ adoSkipDesc: 'Configurer plus tard',
224
+ adoPatternPrompt: 'Entrez le modèle',
225
+ adoPatternHint: 'Exemples: "sw-*", "*-backend", "api-*-service"',
226
+ adoRegexPrompt: 'Entrez le regex',
227
+ adoRegexHint: 'Exemples: "^sw-", ".*-backend$", "^api-\\d+-service$"',
228
+ adoShortcutsHint: 'Raccourcis: "starts: sw-", "ends: -api", "contains: core"',
229
+ adoPatternRequired: 'Le modèle est requis',
230
+ adoInvalidRegex: 'Expression régulière invalide',
231
+ adoSelectedAll: 'Tous les repos seront clonés',
232
+ adoSelectedPattern: 'Les repos correspondant à "{pattern}" seront clonés',
233
+ adoSelectedRegex: 'Les repos correspondant au regex "{pattern}" seront clonés',
113
234
  },
114
235
  ja: {
115
236
  header: '📦 リポジトリホスティング',
@@ -127,6 +248,26 @@ function getRepoStrings(language) {
127
248
  other: 'その他(GitLabなど - 近日公開)',
128
249
  adoCloneQuestion: 'クローンするリポ名パターンを入力(例: sw-* または空白でスキップ):',
129
250
  adoCloneSkip: 'クローンをスキップ - 後で設定可能',
251
+ // New unified selection strings
252
+ adoSelectStrategy: 'クローンするリポジトリをどのように選択しますか?',
253
+ adoAllRepos: 'すべて',
254
+ adoAllReposDesc: 'プロジェクトのすべてのリポジトリをクローン',
255
+ adoPatternGlob: 'パターン (glob)',
256
+ adoPatternGlobDesc: 'パターンでマッチ(例: "sw-*", "*-backend")',
257
+ adoPatternRegex: 'パターン (正規表現)',
258
+ adoPatternRegexDesc: '正規表現(例: "^sw-.*$")',
259
+ adoSkipOption: 'スキップ',
260
+ adoSkipDesc: '後で設定',
261
+ adoPatternPrompt: 'パターンを入力',
262
+ adoPatternHint: '例: "sw-*", "*-backend", "api-*-service"',
263
+ adoRegexPrompt: '正規表現を入力',
264
+ adoRegexHint: '例: "^sw-", ".*-backend$", "^api-\\d+-service$"',
265
+ adoShortcutsHint: 'ショートカット: "starts: sw-", "ends: -api", "contains: core"',
266
+ adoPatternRequired: 'パターンは必須です',
267
+ adoInvalidRegex: '無効な正規表現',
268
+ adoSelectedAll: 'すべてのリポジトリがクローンされます',
269
+ adoSelectedPattern: '"{pattern}" に一致するリポジトリがクローンされます',
270
+ adoSelectedRegex: '正規表現 "{pattern}" に一致するリポジトリがクローンされます',
130
271
  },
131
272
  ko: {
132
273
  header: '📦 저장소 호스팅',
@@ -144,6 +285,26 @@ function getRepoStrings(language) {
144
285
  other: '기타 (GitLab 등 - 곧 출시)',
145
286
  adoCloneQuestion: '복제할 저장소 이름 패턴 입력 (예: sw-* 또는 비워두기):',
146
287
  adoCloneSkip: '복제 건너뜀 - 나중에 설정 가능',
288
+ // New unified selection strings
289
+ adoSelectStrategy: '복제할 저장소를 어떻게 선택하시겠습니까?',
290
+ adoAllRepos: '모두',
291
+ adoAllReposDesc: '프로젝트의 모든 저장소 복제',
292
+ adoPatternGlob: '패턴 (glob)',
293
+ adoPatternGlobDesc: '패턴으로 매칭 (예: "sw-*", "*-backend")',
294
+ adoPatternRegex: '패턴 (정규식)',
295
+ adoPatternRegexDesc: '정규 표현식 (예: "^sw-.*$")',
296
+ adoSkipOption: '건너뛰기',
297
+ adoSkipDesc: '나중에 설정',
298
+ adoPatternPrompt: '패턴 입력',
299
+ adoPatternHint: '예: "sw-*", "*-backend", "api-*-service"',
300
+ adoRegexPrompt: '정규식 입력',
301
+ adoRegexHint: '예: "^sw-", ".*-backend$", "^api-\\d+-service$"',
302
+ adoShortcutsHint: '단축키: "starts: sw-", "ends: -api", "contains: core"',
303
+ adoPatternRequired: '패턴이 필요합니다',
304
+ adoInvalidRegex: '잘못된 정규 표현식',
305
+ adoSelectedAll: '모든 저장소가 복제됩니다',
306
+ adoSelectedPattern: '"{pattern}" 패턴과 일치하는 저장소가 복제됩니다',
307
+ adoSelectedRegex: '정규식 "{pattern}"과 일치하는 저장소가 복제됩니다',
147
308
  },
148
309
  pt: {
149
310
  header: '📦 Hospedagem do repositório',
@@ -161,6 +322,26 @@ function getRepoStrings(language) {
161
322
  other: 'Outro (GitLab, etc - em breve)',
162
323
  adoCloneQuestion: 'Digite padrão de nome de repo para clonar (ex. sw-* ou deixe vazio):',
163
324
  adoCloneSkip: 'Clonagem ignorada - configurável depois',
325
+ // New unified selection strings
326
+ adoSelectStrategy: 'Como você quer selecionar repositórios para clonar?',
327
+ adoAllRepos: 'Todos',
328
+ adoAllReposDesc: 'Clonar todos os repositórios do projeto',
329
+ adoPatternGlob: 'Padrão (glob)',
330
+ adoPatternGlobDesc: 'Corresponder por padrão (ex., "sw-*", "*-backend")',
331
+ adoPatternRegex: 'Padrão (regex)',
332
+ adoPatternRegexDesc: 'Expressão regular (ex., "^sw-.*$")',
333
+ adoSkipOption: 'Pular',
334
+ adoSkipDesc: 'Configurar depois',
335
+ adoPatternPrompt: 'Digite o padrão',
336
+ adoPatternHint: 'Exemplos: "sw-*", "*-backend", "api-*-service"',
337
+ adoRegexPrompt: 'Digite a regex',
338
+ adoRegexHint: 'Exemplos: "^sw-", ".*-backend$", "^api-\\d+-service$"',
339
+ adoShortcutsHint: 'Atalhos: "starts: sw-", "ends: -api", "contains: core"',
340
+ adoPatternRequired: 'Padrão é obrigatório',
341
+ adoInvalidRegex: 'Expressão regular inválida',
342
+ adoSelectedAll: 'Todos os repositórios serão clonados',
343
+ adoSelectedPattern: 'Repositórios correspondendo a "{pattern}" serão clonados',
344
+ adoSelectedRegex: 'Repositórios correspondendo a regex "{pattern}" serão clonados',
164
345
  },
165
346
  };
166
347
  return strings[language] || strings.en;
@@ -235,20 +416,88 @@ export async function setupRepositoryHosting(options) {
235
416
  else {
236
417
  repositoryHosting = `${provider}-${structure}`;
237
418
  }
238
- // Step 3: For ADO multi-repo, prompt for clone pattern
419
+ // Step 3: For ADO multi-repo, prompt for clone pattern with unified selection
239
420
  let adoClonePattern;
421
+ let adoClonePatternResult;
240
422
  if (provider === 'ado' && isMultiRepo) {
241
- const pattern = await input({
242
- message: strings.adoCloneQuestion,
243
- default: ''
423
+ // Show unified strategy selection
424
+ const strategyChoices = [
425
+ {
426
+ name: `${chalk.green('✓')} ${strings.adoAllRepos} ${chalk.gray(`- ${strings.adoAllReposDesc}`)}`,
427
+ value: 'all',
428
+ },
429
+ {
430
+ name: `${strings.adoPatternGlob} ${chalk.gray(`- ${strings.adoPatternGlobDesc}`)}`,
431
+ value: 'pattern-glob',
432
+ },
433
+ {
434
+ name: `${strings.adoPatternRegex} ${chalk.gray(`- ${strings.adoPatternRegexDesc}`)}`,
435
+ value: 'pattern-regex',
436
+ },
437
+ {
438
+ name: `${strings.adoSkipOption} ${chalk.gray(`- ${strings.adoSkipDesc}`)}`,
439
+ value: 'skip',
440
+ },
441
+ ];
442
+ const strategy = await select({
443
+ message: strings.adoSelectStrategy,
444
+ choices: strategyChoices,
445
+ default: 'all',
244
446
  });
245
- if (pattern.trim()) {
246
- adoClonePattern = pattern.trim();
247
- }
248
- else {
249
- console.log(chalk.gray(` ${strings.adoCloneSkip}`));
447
+ switch (strategy) {
448
+ case 'all': {
449
+ adoClonePattern = '*';
450
+ adoClonePatternResult = { strategy: 'all', pattern: '*' };
451
+ console.log(chalk.green(` ${strings.adoSelectedAll}`));
452
+ break;
453
+ }
454
+ case 'pattern-glob': {
455
+ console.log(chalk.gray(`\n 💡 ${strings.adoPatternHint}`));
456
+ console.log(chalk.gray(` 💡 ${strings.adoShortcutsHint}\n`));
457
+ const pattern = await input({
458
+ message: strings.adoPatternPrompt,
459
+ validate: (value) => {
460
+ if (!value.trim())
461
+ return strings.adoPatternRequired;
462
+ return true;
463
+ },
464
+ });
465
+ // Parse shortcuts (starts:, ends:, contains:)
466
+ const parsedPattern = parsePatternShortcut(pattern.trim());
467
+ adoClonePattern = parsedPattern;
468
+ adoClonePatternResult = { strategy: 'pattern-glob', pattern: parsedPattern };
469
+ const message = strings.adoSelectedPattern.replace('{pattern}', parsedPattern);
470
+ console.log(chalk.green(` ✓ ${message}`));
471
+ break;
472
+ }
473
+ case 'pattern-regex': {
474
+ console.log(chalk.gray(`\n 💡 ${strings.adoRegexHint}\n`));
475
+ const pattern = await input({
476
+ message: strings.adoRegexPrompt,
477
+ validate: (value) => {
478
+ if (!value.trim())
479
+ return strings.adoPatternRequired;
480
+ const validation = validateRegex(value.trim());
481
+ if (validation !== true) {
482
+ return `${strings.adoInvalidRegex}: ${validation}`;
483
+ }
484
+ return true;
485
+ },
486
+ });
487
+ // Store as regex: prefix for downstream processing
488
+ adoClonePattern = `regex:${pattern.trim()}`;
489
+ adoClonePatternResult = { strategy: 'pattern-regex', pattern: pattern.trim(), isRegex: true };
490
+ const message = strings.adoSelectedRegex.replace('{pattern}', pattern.trim());
491
+ console.log(chalk.green(` ✓ ${message}`));
492
+ break;
493
+ }
494
+ case 'skip': {
495
+ adoClonePatternResult = { strategy: 'skip' };
496
+ console.log(chalk.gray(` → ${strings.adoCloneSkip}`));
497
+ break;
498
+ }
250
499
  }
251
500
  }
252
- return { hosting: repositoryHosting, isMultiRepo, adoClonePattern };
501
+ return { hosting: repositoryHosting, isMultiRepo, adoClonePattern, adoClonePatternResult };
253
502
  }
254
503
  //# sourceMappingURL=repository-setup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"repository-setup.js","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/repository-setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repository-setup.js","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/repository-setup.ts"],"names":[],"mappings":"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"}