@code-pushup/create-cli 0.126.1 → 0.126.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -15
- package/package.json +10 -10
- package/src/index.js +2 -40
- package/src/index.js.map +1 -1
- package/src/lib/setup/cli-args.d.ts +3 -0
- package/src/lib/setup/cli-args.js +47 -0
- package/src/lib/setup/cli-args.js.map +1 -0
- package/src/lib/setup/types.d.ts +3 -26
- package/src/lib/setup/types.js.map +1 -1
- package/src/lib/setup/wizard.js +31 -21
- package/src/lib/setup/wizard.js.map +1 -1
- package/src/lib/setup/virtual-fs.d.ts +0 -2
- package/src/lib/setup/virtual-fs.js +0 -46
- package/src/lib/setup/virtual-fs.js.map +0 -1
package/README.md
CHANGED
|
@@ -35,7 +35,7 @@ Each plugin exposes its own configuration keys that can be passed as CLI argumen
|
|
|
35
35
|
| ------------------------- | --------- | ------------- | --------------------- |
|
|
36
36
|
| **`--eslint.eslintrc`** | `string` | auto-detected | Path to ESLint config |
|
|
37
37
|
| **`--eslint.patterns`** | `string` | `src` or `.` | File patterns to lint |
|
|
38
|
-
| **`--eslint.categories`** | `boolean` | `true` | Add
|
|
38
|
+
| **`--eslint.categories`** | `boolean` | `true` | Add categories |
|
|
39
39
|
|
|
40
40
|
#### Coverage
|
|
41
41
|
|
|
@@ -47,37 +47,37 @@ Each plugin exposes its own configuration keys that can be passed as CLI argumen
|
|
|
47
47
|
| **`--coverage.testCommand`** | `string` | auto-detected | Command to run tests |
|
|
48
48
|
| **`--coverage.types`** | `('function'` \| `'branch'` \| `'line')[]` | all | Coverage types to measure |
|
|
49
49
|
| **`--coverage.continueOnFail`** | `boolean` | `true` | Continue if test command fails |
|
|
50
|
-
| **`--coverage.categories`** | `boolean` | `true` | Add
|
|
50
|
+
| **`--coverage.categories`** | `boolean` | `true` | Add categories |
|
|
51
51
|
|
|
52
52
|
#### JS Packages
|
|
53
53
|
|
|
54
|
-
| Option | Type | Default | Description
|
|
55
|
-
| ------------------------------------ | ---------------------------------------------------------- | ------------- |
|
|
56
|
-
| **`--js-packages.packageManager`** | `'npm'` \| `'yarn-classic'` \| `'yarn-modern'` \| `'pnpm'` | auto-detected | Package manager
|
|
57
|
-
| **`--js-packages.checks`** | `('audit'` \| `'outdated')[]` | both | Checks to run
|
|
58
|
-
| **`--js-packages.dependencyGroups`** | `('prod'` \| `'dev'` \| `'optional')[]` | `prod`, `dev` | Dependency groups
|
|
59
|
-
| **`--js-packages.categories`** | `boolean` | `true` | Add
|
|
54
|
+
| Option | Type | Default | Description |
|
|
55
|
+
| ------------------------------------ | ---------------------------------------------------------- | ------------- | ----------------- |
|
|
56
|
+
| **`--js-packages.packageManager`** | `'npm'` \| `'yarn-classic'` \| `'yarn-modern'` \| `'pnpm'` | auto-detected | Package manager |
|
|
57
|
+
| **`--js-packages.checks`** | `('audit'` \| `'outdated')[]` | both | Checks to run |
|
|
58
|
+
| **`--js-packages.dependencyGroups`** | `('prod'` \| `'dev'` \| `'optional')[]` | `prod`, `dev` | Dependency groups |
|
|
59
|
+
| **`--js-packages.categories`** | `boolean` | `true` | Add categories |
|
|
60
60
|
|
|
61
61
|
#### TypeScript
|
|
62
62
|
|
|
63
|
-
| Option | Type | Default | Description
|
|
64
|
-
| ----------------------------- | --------- | ------------- |
|
|
65
|
-
| **`--typescript.tsconfig`** | `string` | auto-detected | TypeScript config file
|
|
66
|
-
| **`--typescript.categories`** | `boolean` | `true` | Add
|
|
63
|
+
| Option | Type | Default | Description |
|
|
64
|
+
| ----------------------------- | --------- | ------------- | ---------------------- |
|
|
65
|
+
| **`--typescript.tsconfig`** | `string` | auto-detected | TypeScript config file |
|
|
66
|
+
| **`--typescript.categories`** | `boolean` | `true` | Add categories |
|
|
67
67
|
|
|
68
68
|
#### Lighthouse
|
|
69
69
|
|
|
70
70
|
| Option | Type | Default | Description |
|
|
71
71
|
| ----------------------------- | ---------------------------------------------------------------- | ----------------------- | ------------------------------- |
|
|
72
72
|
| **`--lighthouse.urls`** | `string \| string[]` | `http://localhost:4200` | Target URL(s) (comma-separated) |
|
|
73
|
-
| **`--lighthouse.categories`** | `('performance'` \| `'a11y'` \| `'best-practices'` \| `'seo')[]` | all |
|
|
73
|
+
| **`--lighthouse.categories`** | `('performance'` \| `'a11y'` \| `'best-practices'` \| `'seo')[]` | all | Categories |
|
|
74
74
|
|
|
75
75
|
#### JSDocs
|
|
76
76
|
|
|
77
77
|
| Option | Type | Default | Description |
|
|
78
78
|
| ------------------------- | -------------------- | -------------------------------------------- | -------------------------------------- |
|
|
79
79
|
| **`--jsdocs.patterns`** | `string \| string[]` | `src/**/*.ts, src/**/*.js, !**/node_modules` | Source file patterns (comma-separated) |
|
|
80
|
-
| **`--jsdocs.categories`** | `boolean` | `true` | Add
|
|
80
|
+
| **`--jsdocs.categories`** | `boolean` | `true` | Add categories |
|
|
81
81
|
|
|
82
82
|
#### Axe
|
|
83
83
|
|
|
@@ -86,7 +86,7 @@ Each plugin exposes its own configuration keys that can be passed as CLI argumen
|
|
|
86
86
|
| **`--axe.urls`** | `string \| string[]` | `http://localhost:4200` | Target URL(s) (comma-separated) |
|
|
87
87
|
| **`--axe.preset`** | `'wcag21aa'` \| `'wcag22aa'` \| `'best-practice'` \| `'all'` | `wcag21aa` | Accessibility preset |
|
|
88
88
|
| **`--axe.setupScript`** | `boolean` | `false` | Create setup script for auth-protected app |
|
|
89
|
-
| **`--axe.categories`** | `boolean` | `true` | Add
|
|
89
|
+
| **`--axe.categories`** | `boolean` | `true` | Add categories |
|
|
90
90
|
|
|
91
91
|
### Examples
|
|
92
92
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@code-pushup/create-cli",
|
|
3
|
-
"version": "0.126.
|
|
3
|
+
"version": "0.126.3",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"bin": "./bin.js",
|
|
6
6
|
"homepage": "https://github.com/code-pushup/cli/tree/main/packages/create-cli#readme",
|
|
@@ -26,15 +26,15 @@
|
|
|
26
26
|
},
|
|
27
27
|
"type": "module",
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@code-pushup/axe-plugin": "0.126.
|
|
30
|
-
"@code-pushup/coverage-plugin": "0.126.
|
|
31
|
-
"@code-pushup/eslint-plugin": "0.126.
|
|
32
|
-
"@code-pushup/js-packages-plugin": "0.126.
|
|
33
|
-
"@code-pushup/jsdocs-plugin": "0.126.
|
|
34
|
-
"@code-pushup/lighthouse-plugin": "0.126.
|
|
35
|
-
"@code-pushup/models": "0.126.
|
|
36
|
-
"@code-pushup/typescript-plugin": "0.126.
|
|
37
|
-
"@code-pushup/utils": "0.126.
|
|
29
|
+
"@code-pushup/axe-plugin": "0.126.3",
|
|
30
|
+
"@code-pushup/coverage-plugin": "0.126.3",
|
|
31
|
+
"@code-pushup/eslint-plugin": "0.126.3",
|
|
32
|
+
"@code-pushup/js-packages-plugin": "0.126.3",
|
|
33
|
+
"@code-pushup/jsdocs-plugin": "0.126.3",
|
|
34
|
+
"@code-pushup/lighthouse-plugin": "0.126.3",
|
|
35
|
+
"@code-pushup/models": "0.126.3",
|
|
36
|
+
"@code-pushup/typescript-plugin": "0.126.3",
|
|
37
|
+
"@code-pushup/utils": "0.126.3",
|
|
38
38
|
"@inquirer/prompts": "^8.0.0",
|
|
39
39
|
"yaml": "^2.5.1",
|
|
40
40
|
"yargs": "^17.7.2"
|
package/src/index.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
#! /usr/bin/env node
|
|
2
|
-
import yargs from 'yargs';
|
|
3
2
|
import { hideBin } from 'yargs/helpers';
|
|
4
3
|
import { axeSetupBinding } from '@code-pushup/axe-plugin';
|
|
5
4
|
import { coverageSetupBinding } from '@code-pushup/coverage-plugin';
|
|
@@ -8,8 +7,7 @@ import { jsPackagesSetupBinding } from '@code-pushup/js-packages-plugin';
|
|
|
8
7
|
import { jsDocsSetupBinding } from '@code-pushup/jsdocs-plugin';
|
|
9
8
|
import { lighthouseSetupBinding } from '@code-pushup/lighthouse-plugin';
|
|
10
9
|
import { typescriptSetupBinding } from '@code-pushup/typescript-plugin';
|
|
11
|
-
import {
|
|
12
|
-
import { CI_PROVIDERS, CONFIG_FILE_FORMATS, SETUP_MODES, } from './lib/setup/types.js';
|
|
10
|
+
import { yargsCli } from './lib/setup/cli-args.js';
|
|
13
11
|
import { runSetupWizard } from './lib/setup/wizard.js';
|
|
14
12
|
const bindings = [
|
|
15
13
|
eslintSetupBinding,
|
|
@@ -20,42 +18,6 @@ const bindings = [
|
|
|
20
18
|
axeSetupBinding,
|
|
21
19
|
jsDocsSetupBinding,
|
|
22
20
|
];
|
|
23
|
-
const argv = await
|
|
24
|
-
.option('dry-run', {
|
|
25
|
-
type: 'boolean',
|
|
26
|
-
default: false,
|
|
27
|
-
describe: 'Preview changes without writing files',
|
|
28
|
-
})
|
|
29
|
-
.option('yes', {
|
|
30
|
-
alias: 'y',
|
|
31
|
-
type: 'boolean',
|
|
32
|
-
default: false,
|
|
33
|
-
describe: 'Skip prompts and use defaults',
|
|
34
|
-
})
|
|
35
|
-
.option('config-format', {
|
|
36
|
-
type: 'string',
|
|
37
|
-
choices: CONFIG_FILE_FORMATS,
|
|
38
|
-
describe: 'Config file format (default: auto-detected from project)',
|
|
39
|
-
})
|
|
40
|
-
.option('plugins', {
|
|
41
|
-
type: 'string',
|
|
42
|
-
describe: 'Comma-separated plugin slugs to include (e.g. eslint,coverage)',
|
|
43
|
-
coerce: parsePluginSlugs,
|
|
44
|
-
})
|
|
45
|
-
.option('mode', {
|
|
46
|
-
type: 'string',
|
|
47
|
-
choices: SETUP_MODES,
|
|
48
|
-
describe: 'Setup mode (default: auto-detected from project)',
|
|
49
|
-
})
|
|
50
|
-
.option('ci', {
|
|
51
|
-
type: 'string',
|
|
52
|
-
choices: CI_PROVIDERS,
|
|
53
|
-
describe: 'CI/CD integration (github, gitlab, or none)',
|
|
54
|
-
})
|
|
55
|
-
.check(parsed => {
|
|
56
|
-
validatePluginSlugs(bindings, parsed.plugins);
|
|
57
|
-
return true;
|
|
58
|
-
})
|
|
59
|
-
.parse();
|
|
21
|
+
const argv = await yargsCli(bindings).parse(hideBin(process.argv));
|
|
60
22
|
await runSetupWizard(bindings, argv);
|
|
61
23
|
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,QAAQ,GAAyB;IACrC,kBAAkB;IAClB,oBAAoB;IACpB,sBAAsB;IACtB,sBAAsB;IACtB,sBAAsB;IACtB,eAAe;IACf,kBAAkB;CACnB,CAAC;AAEF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAEnE,MAAM,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import yargs, {} from 'yargs';
|
|
2
|
+
import { parsePluginSlugs, validatePluginSlugs } from './plugins.js';
|
|
3
|
+
import { CI_PROVIDERS, CONFIG_FILE_FORMATS, SETUP_MODES, } from './types.js';
|
|
4
|
+
export function yargsCli(bindings) {
|
|
5
|
+
return yargs()
|
|
6
|
+
.scriptName('create-cli')
|
|
7
|
+
.usage('$0 [options]')
|
|
8
|
+
.parserConfiguration({ 'dot-notation': false })
|
|
9
|
+
.option('dry-run', {
|
|
10
|
+
type: 'boolean',
|
|
11
|
+
default: false,
|
|
12
|
+
describe: 'Preview changes without writing files',
|
|
13
|
+
})
|
|
14
|
+
.option('yes', {
|
|
15
|
+
alias: 'y',
|
|
16
|
+
type: 'boolean',
|
|
17
|
+
default: false,
|
|
18
|
+
describe: 'Skip prompts and use defaults',
|
|
19
|
+
})
|
|
20
|
+
.option('config-format', {
|
|
21
|
+
type: 'string',
|
|
22
|
+
choices: CONFIG_FILE_FORMATS,
|
|
23
|
+
describe: 'Config file format (default: auto-detected from project)',
|
|
24
|
+
})
|
|
25
|
+
.option('plugins', {
|
|
26
|
+
type: 'string',
|
|
27
|
+
describe: 'Comma-separated plugin slugs to include (e.g. eslint,coverage)',
|
|
28
|
+
coerce: parsePluginSlugs,
|
|
29
|
+
})
|
|
30
|
+
.option('mode', {
|
|
31
|
+
type: 'string',
|
|
32
|
+
choices: SETUP_MODES,
|
|
33
|
+
describe: 'Setup mode (default: auto-detected from project)',
|
|
34
|
+
})
|
|
35
|
+
.option('ci', {
|
|
36
|
+
type: 'string',
|
|
37
|
+
choices: CI_PROVIDERS,
|
|
38
|
+
describe: 'CI/CD integration (github, gitlab, or none)',
|
|
39
|
+
})
|
|
40
|
+
.check(parsed => {
|
|
41
|
+
validatePluginSlugs(bindings, parsed.plugins);
|
|
42
|
+
return true;
|
|
43
|
+
})
|
|
44
|
+
.help()
|
|
45
|
+
.version();
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=cli-args.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-args.js","sourceRoot":"","sources":["../../../../src/lib/setup/cli-args.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAa,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EACL,YAAY,EACZ,mBAAmB,EAEnB,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,MAAM,UAAU,QAAQ,CAAC,QAA8B;IACrD,OAAO,KAAK,EAAE;SACX,UAAU,CAAC,YAAY,CAAC;SACxB,KAAK,CAAC,cAAc,CAAC;SACrB,mBAAmB,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC;SAC9C,MAAM,CAAC,SAAS,EAAE;QACjB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,uCAAuC;KAClD,CAAC;SACD,MAAM,CAAC,KAAK,EAAE;QACb,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,+BAA+B;KAC1C,CAAC;SACD,MAAM,CAAC,eAAe,EAAE;QACvB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,mBAAmB;QAC5B,QAAQ,EAAE,0DAA0D;KACrE,CAAC;SACD,MAAM,CAAC,SAAS,EAAE;QACjB,IAAI,EAAE,QAAQ;QACd,QAAQ,EACN,gEAAgE;QAClE,MAAM,EAAE,gBAAgB;KACzB,CAAC;SACD,MAAM,CAAC,MAAM,EAAE;QACd,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,WAAW;QACpB,QAAQ,EAAE,kDAAkD;KAC7D,CAAC;SACD,MAAM,CAAC,IAAI,EAAE;QACZ,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,YAAY;QACrB,QAAQ,EAAE,6CAA6C;KACxD,CAAC;SACD,KAAK,CAAC,MAAM,CAAC,EAAE;QACd,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;SACD,IAAI,EAAE;SACN,OAAO,EAAE,CAAC;AACf,CAAC"}
|
package/src/lib/setup/types.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { PluginCodegenResult } from '@code-pushup/models';
|
|
2
|
-
import type { MonorepoTool } from '@code-pushup/utils';
|
|
3
|
-
export type { CategoryCodegenConfig, ImportDeclarationStructure, PluginAnswer, PluginCodegenResult, PluginPromptDescriptor, PluginSetupBinding, PluginSetupTree, } from '@code-pushup/models';
|
|
2
|
+
import type { MonorepoTool, Tree } from '@code-pushup/utils';
|
|
3
|
+
export type { CategoryCodegenConfig, ImportDeclarationStructure, PluginAnswer, PluginCodegenInput, PluginCodegenResult, PluginPromptDescriptor, PluginSetupBinding, PluginSetupTree, } from '@code-pushup/models';
|
|
4
|
+
export type { FileChange, FileSystemAdapter, Tree } from '@code-pushup/utils';
|
|
4
5
|
export declare const CI_PROVIDERS: readonly ["github", "gitlab", "none"];
|
|
5
6
|
export type CiProvider = (typeof CI_PROVIDERS)[number];
|
|
6
7
|
export declare const CONFIG_FILE_FORMATS: readonly ["ts", "js", "mjs"];
|
|
@@ -40,27 +41,3 @@ export type WriteContext = {
|
|
|
40
41
|
configFilename: string;
|
|
41
42
|
isEsm: boolean;
|
|
42
43
|
};
|
|
43
|
-
/** A single file operation recorded by the virtual tree. */
|
|
44
|
-
export type FileChange = {
|
|
45
|
-
path: string;
|
|
46
|
-
type: 'CREATE' | 'UPDATE';
|
|
47
|
-
content: string;
|
|
48
|
-
};
|
|
49
|
-
/** Virtual file system that buffers writes in memory until flushed to disk. */
|
|
50
|
-
export type Tree = {
|
|
51
|
-
root: string;
|
|
52
|
-
exists: (filePath: string) => Promise<boolean>;
|
|
53
|
-
read: (filePath: string) => Promise<string | null>;
|
|
54
|
-
write: (filePath: string, content: string) => Promise<void>;
|
|
55
|
-
listChanges: () => FileChange[];
|
|
56
|
-
flush: () => Promise<void>;
|
|
57
|
-
};
|
|
58
|
-
/** Abstraction over `node:fs` used by the virtual tree for disk I/O. */
|
|
59
|
-
export type FileSystemAdapter = {
|
|
60
|
-
readFile: (path: string, encoding: 'utf8') => Promise<string>;
|
|
61
|
-
writeFile: (path: string, content: string) => Promise<void>;
|
|
62
|
-
exists: (path: string) => Promise<boolean>;
|
|
63
|
-
mkdir: (path: string, options: {
|
|
64
|
-
recursive: true;
|
|
65
|
-
}) => Promise<string | undefined>;
|
|
66
|
-
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/lib/setup/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/lib/setup/types.ts"],"names":[],"mappings":"AAgBA,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAC;AAGlE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAU,CAAC;AAGhE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,YAAY,EAAE,UAAU,CAAU,CAAC;AAG/D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,MAAM,CAAU,CAAC"}
|
package/src/lib/setup/wizard.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
+
import ansis from 'ansis';
|
|
1
2
|
import path from 'node:path';
|
|
2
|
-
import { asyncSequential, formatAsciiTable, getGitRoot, logger, toUnixPath, } from '@code-pushup/utils';
|
|
3
|
+
import { asyncSequential, createTree, formatAsciiTable, getGitRoot, logger, toUnixPath, } from '@code-pushup/utils';
|
|
3
4
|
import { promptCiProvider, resolveCi } from './ci.js';
|
|
4
5
|
import { computeRelativePresetImport, generateConfigSource, generatePresetSource, generateProjectSource, } from './codegen.js';
|
|
5
6
|
import { promptConfigFormat, readPackageJson, resolveFilename, } from './config-format.js';
|
|
6
7
|
import { resolveGitignore } from './gitignore.js';
|
|
7
8
|
import { addCodePushUpCommand, listProjects, promptSetupMode, } from './monorepo.js';
|
|
8
9
|
import { promptPluginOptions, promptPluginSelection } from './prompts.js';
|
|
9
|
-
import { createTree } from './virtual-fs.js';
|
|
10
10
|
/**
|
|
11
11
|
* Runs the interactive setup wizard that generates a Code PushUp config file.
|
|
12
12
|
*
|
|
@@ -33,25 +33,24 @@ export async function runSetupWizard(bindings, cliArgs) {
|
|
|
33
33
|
: writeStandaloneConfig(writeContext, resolved.map(r => r.result)));
|
|
34
34
|
await resolveGitignore(tree);
|
|
35
35
|
await resolveCi(tree, ciProvider, context);
|
|
36
|
-
|
|
37
|
-
if (cliArgs['dry-run']) {
|
|
38
|
-
logger.info('Dry run — no files written.');
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
await tree.flush();
|
|
42
|
-
logger.info('Setup complete.');
|
|
43
|
-
logger.newline();
|
|
44
|
-
logNextSteps([
|
|
45
|
-
['npx code-pushup', 'Collect your first report'],
|
|
46
|
-
['https://github.com/code-pushup/cli#readme', 'Documentation'],
|
|
47
|
-
]);
|
|
36
|
+
await finalize(tree, cliArgs['dry-run']);
|
|
48
37
|
}
|
|
49
38
|
async function resolveBinding(binding, cliArgs, targetDir, tree) {
|
|
50
|
-
|
|
39
|
+
if (!binding.prompts) {
|
|
40
|
+
return binding.generateConfig({
|
|
41
|
+
tree,
|
|
42
|
+
targetDir,
|
|
43
|
+
cliArgs,
|
|
44
|
+
answers: {},
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
logger.newline();
|
|
48
|
+
logger.info(ansis.bold(binding.title));
|
|
49
|
+
const descriptors = await binding.prompts(targetDir);
|
|
51
50
|
const answers = descriptors.length > 0
|
|
52
51
|
? await promptPluginOptions(descriptors, cliArgs)
|
|
53
52
|
: {};
|
|
54
|
-
return binding.generateConfig(
|
|
53
|
+
return binding.generateConfig({ tree, targetDir, cliArgs, answers });
|
|
55
54
|
}
|
|
56
55
|
async function writeStandaloneConfig({ tree, format, configFilename }, results) {
|
|
57
56
|
await tree.write(configFilename, generateConfigSource(results, format));
|
|
@@ -75,15 +74,26 @@ async function writeMonorepoConfigs({ tree, format, configFilename, isEsm }, res
|
|
|
75
74
|
await addCodePushUpCommand(tree, project, tool);
|
|
76
75
|
}));
|
|
77
76
|
}
|
|
78
|
-
function
|
|
79
|
-
|
|
77
|
+
async function finalize(tree, dryRun) {
|
|
78
|
+
logger.newline();
|
|
79
|
+
tree.listChanges().forEach(change => {
|
|
80
80
|
logger.info(`${change.type} ${change.path}`);
|
|
81
81
|
});
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
if (dryRun) {
|
|
83
|
+
logger.newline();
|
|
84
|
+
logger.info('Dry run — no files written.');
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
await tree.flush();
|
|
88
|
+
logger.newline();
|
|
89
|
+
logger.info('Setup complete.');
|
|
90
|
+
logger.newline();
|
|
84
91
|
logger.info(formatAsciiTable({
|
|
85
92
|
title: 'Next steps:',
|
|
86
|
-
rows:
|
|
93
|
+
rows: [
|
|
94
|
+
['npx code-pushup', 'Collect your first report'],
|
|
95
|
+
['https://github.com/code-pushup/cli#readme', 'Documentation'],
|
|
96
|
+
],
|
|
87
97
|
}, { borderless: true }));
|
|
88
98
|
}
|
|
89
99
|
//# sourceMappingURL=wizard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../../../src/lib/setup/wizard.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAEL,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,MAAM,EACN,UAAU,GACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EACL,2BAA2B,EAC3B,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAU1E
|
|
1
|
+
{"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../../../src/lib/setup/wizard.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { fileExists } from '@code-pushup/utils';
|
|
4
|
-
const DEFAULT_FS = {
|
|
5
|
-
readFile,
|
|
6
|
-
writeFile,
|
|
7
|
-
exists: fileExists,
|
|
8
|
-
mkdir,
|
|
9
|
-
};
|
|
10
|
-
export function createTree(root, fs = DEFAULT_FS) {
|
|
11
|
-
const pending = new Map();
|
|
12
|
-
const resolve = (filePath) => path.resolve(root, filePath);
|
|
13
|
-
return {
|
|
14
|
-
root,
|
|
15
|
-
exists: async (filePath) => pending.has(filePath) || fs.exists(resolve(filePath)),
|
|
16
|
-
read: async (filePath) => {
|
|
17
|
-
const entry = pending.get(filePath);
|
|
18
|
-
if (entry) {
|
|
19
|
-
return entry.content;
|
|
20
|
-
}
|
|
21
|
-
const absolutePath = resolve(filePath);
|
|
22
|
-
if (!(await fs.exists(absolutePath))) {
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
25
|
-
return fs.readFile(absolutePath, 'utf8');
|
|
26
|
-
},
|
|
27
|
-
write: async (filePath, content) => {
|
|
28
|
-
const type = (await fs.exists(resolve(filePath))) ? 'UPDATE' : 'CREATE';
|
|
29
|
-
pending.set(filePath, { content, type });
|
|
30
|
-
},
|
|
31
|
-
listChanges: () => [...pending.entries()].map(([filePath, { content, type }]) => ({
|
|
32
|
-
path: filePath,
|
|
33
|
-
type,
|
|
34
|
-
content,
|
|
35
|
-
})),
|
|
36
|
-
async flush() {
|
|
37
|
-
await Promise.all([...pending.entries()].map(async ([filePath, { content }]) => {
|
|
38
|
-
const absolutePath = resolve(filePath);
|
|
39
|
-
await fs.mkdir(path.dirname(absolutePath), { recursive: true });
|
|
40
|
-
await fs.writeFile(absolutePath, content);
|
|
41
|
-
}));
|
|
42
|
-
pending.clear();
|
|
43
|
-
},
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
//# sourceMappingURL=virtual-fs.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"virtual-fs.js","sourceRoot":"","sources":["../../../../src/lib/setup/virtual-fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,MAAM,UAAU,GAAsB;IACpC,QAAQ;IACR,SAAS;IACT,MAAM,EAAE,UAAU;IAClB,KAAK;CACN,CAAC;AAEF,MAAM,UAAU,UAAU,CACxB,IAAY,EACZ,KAAwB,UAAU;IAElC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAgD,CAAC;IAExE,MAAM,OAAO,GAAG,CAAC,QAAgB,EAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAE3E,OAAO;QACL,IAAI;QAEJ,MAAM,EAAE,KAAK,EAAE,QAAgB,EAAoB,EAAE,CACnD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEvD,IAAI,EAAE,KAAK,EAAE,QAAgB,EAA0B,EAAE;YACvD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,KAAK,CAAC,OAAO,CAAC;YACvB,CAAC;YACD,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YACvC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;gBACrC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;QAED,KAAK,EAAE,KAAK,EAAE,QAAgB,EAAE,OAAe,EAAiB,EAAE;YAChE,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,WAAW,EAAE,GAAiB,EAAE,CAC9B,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7D,IAAI,EAAE,QAAQ;YACd,IAAI;YACJ,OAAO;SACR,CAAC,CAAC;QAEL,KAAK,CAAC,KAAK;YACT,MAAM,OAAO,CAAC,GAAG,CACf,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE;gBAC3D,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACvC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAChE,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAC5C,CAAC,CAAC,CACH,CAAC;YACF,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC"}
|