outfitter 1.0.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.
- package/README.md +183 -0
- package/dist/commands/add.d.ts +3 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +49 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/equip-refactored.d.ts +3 -0
- package/dist/commands/equip-refactored.d.ts.map +1 -0
- package/dist/commands/equip-refactored.js +83 -0
- package/dist/commands/equip-refactored.js.map +1 -0
- package/dist/commands/equip.d.ts +3 -0
- package/dist/commands/equip.d.ts.map +1 -0
- package/dist/commands/equip.js +232 -0
- package/dist/commands/equip.js.map +1 -0
- package/dist/commands/fieldguides/add.d.ts +11 -0
- package/dist/commands/fieldguides/add.d.ts.map +1 -0
- package/dist/commands/fieldguides/add.js +59 -0
- package/dist/commands/fieldguides/add.js.map +1 -0
- package/dist/commands/fieldguides/config.d.ts +21 -0
- package/dist/commands/fieldguides/config.d.ts.map +1 -0
- package/dist/commands/fieldguides/config.js +60 -0
- package/dist/commands/fieldguides/config.js.map +1 -0
- package/dist/commands/fieldguides/create.d.ts +20 -0
- package/dist/commands/fieldguides/create.d.ts.map +1 -0
- package/dist/commands/fieldguides/create.js +83 -0
- package/dist/commands/fieldguides/create.js.map +1 -0
- package/dist/commands/fieldguides/list.d.ts +11 -0
- package/dist/commands/fieldguides/list.d.ts.map +1 -0
- package/dist/commands/fieldguides/list.js +63 -0
- package/dist/commands/fieldguides/list.js.map +1 -0
- package/dist/commands/fieldguides/update.d.ts +14 -0
- package/dist/commands/fieldguides/update.d.ts.map +1 -0
- package/dist/commands/fieldguides/update.js +52 -0
- package/dist/commands/fieldguides/update.js.map +1 -0
- package/dist/commands/fieldguides.d.ts +3 -0
- package/dist/commands/fieldguides.d.ts.map +1 -0
- package/dist/commands/fieldguides.js +43 -0
- package/dist/commands/fieldguides.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +76 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +51 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/pack.d.ts +3 -0
- package/dist/commands/pack.d.ts.map +1 -0
- package/dist/commands/pack.js +54 -0
- package/dist/commands/pack.js.map +1 -0
- package/dist/commands/update.d.ts +3 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +44 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/config/fieldguide-mappings.d.ts +24 -0
- package/dist/config/fieldguide-mappings.d.ts.map +1 -0
- package/dist/config/fieldguide-mappings.js +173 -0
- package/dist/config/fieldguide-mappings.js.map +1 -0
- package/dist/constants/packages.d.ts +5 -0
- package/dist/constants/packages.d.ts.map +1 -0
- package/dist/constants/packages.js +67 -0
- package/dist/constants/packages.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/services/configuration-applier.d.ts +9 -0
- package/dist/services/configuration-applier.d.ts.map +1 -0
- package/dist/services/configuration-applier.js +45 -0
- package/dist/services/configuration-applier.js.map +1 -0
- package/dist/services/package-manager.d.ts +18 -0
- package/dist/services/package-manager.d.ts.map +1 -0
- package/dist/services/package-manager.js +48 -0
- package/dist/services/package-manager.js.map +1 -0
- package/dist/services/package-selector.d.ts +28 -0
- package/dist/services/package-selector.d.ts.map +1 -0
- package/dist/services/package-selector.js +49 -0
- package/dist/services/package-selector.js.map +1 -0
- package/dist/types/index.d.ts +22 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/ui/console.d.ts +38 -0
- package/dist/ui/console.d.ts.map +1 -0
- package/dist/ui/console.js +60 -0
- package/dist/ui/console.js.map +1 -0
- package/dist/ui/prompts.d.ts +12 -0
- package/dist/ui/prompts.d.ts.map +1 -0
- package/dist/ui/prompts.js +48 -0
- package/dist/ui/prompts.js.map +1 -0
- package/dist/utils/detect-terrain.d.ts +39 -0
- package/dist/utils/detect-terrain.d.ts.map +1 -0
- package/dist/utils/detect-terrain.js +187 -0
- package/dist/utils/detect-terrain.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import fsExtra from 'fs-extra';
|
|
2
|
+
const { pathExists } = fsExtra;
|
|
3
|
+
import { execa } from 'execa';
|
|
4
|
+
/**
|
|
5
|
+
* Detects the package manager used in the current project directory.
|
|
6
|
+
*
|
|
7
|
+
* Checks for the presence of lock files to determine if the project uses pnpm, yarn, bun, or npm, returning the corresponding package manager name. Defaults to 'npm' if no recognized lock file is found.
|
|
8
|
+
*
|
|
9
|
+
* @returns The detected package manager: 'pnpm', 'yarn', 'bun', or 'npm'.
|
|
10
|
+
*/
|
|
11
|
+
export async function detectPackageManager() {
|
|
12
|
+
if (await pathExists('pnpm-lock.yaml'))
|
|
13
|
+
return 'pnpm';
|
|
14
|
+
if (await pathExists('yarn.lock'))
|
|
15
|
+
return 'yarn';
|
|
16
|
+
if (await pathExists('bun.lockb'))
|
|
17
|
+
return 'bun';
|
|
18
|
+
if (await pathExists('package-lock.json'))
|
|
19
|
+
return 'npm';
|
|
20
|
+
return 'npm';
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Returns the install command details for a given package manager.
|
|
24
|
+
*
|
|
25
|
+
* @param manager - The package manager to retrieve command details for.
|
|
26
|
+
* @returns An object containing the command name, install verb, and development flag for the specified package manager.
|
|
27
|
+
*/
|
|
28
|
+
export function getInstallCommand(manager) {
|
|
29
|
+
switch (manager) {
|
|
30
|
+
case 'npm':
|
|
31
|
+
return { command: 'npm', installVerb: 'install', devFlag: '--save-dev' };
|
|
32
|
+
case 'pnpm':
|
|
33
|
+
return { command: 'pnpm', installVerb: 'add', devFlag: '-D' };
|
|
34
|
+
case 'yarn':
|
|
35
|
+
return { command: 'yarn', installVerb: 'add', devFlag: '-D' };
|
|
36
|
+
case 'bun':
|
|
37
|
+
return { command: 'bun', installVerb: 'add', devFlag: '--dev' };
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export async function installPackages(packages, manager) {
|
|
41
|
+
if (packages.length === 0)
|
|
42
|
+
return;
|
|
43
|
+
const { command, installVerb, devFlag } = getInstallCommand(manager);
|
|
44
|
+
await execa(command, [installVerb, devFlag, ...packages], {
|
|
45
|
+
stdio: 'inherit',
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=package-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../src/services/package-manager.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,UAAU,CAAC;AAC/B,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAG9B;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,IAAI,MAAM,UAAU,CAAC,gBAAgB,CAAC;QAAE,OAAO,MAAM,CAAC;IACtD,IAAI,MAAM,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,MAAM,CAAC;IACjD,IAAI,MAAM,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,MAAM,UAAU,CAAC,mBAAmB,CAAC;QAAE,OAAO,KAAK,CAAC;IAExD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAuB;IACvD,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,KAAK;YACR,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;QAC3E,KAAK,MAAM;YACT,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAChE,KAAK,MAAM;YACT,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAChE,KAAK,KAAK;YACR,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IACpE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAAuB,EACvB,OAAuB;IAEvB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAElC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACrE,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,EAAE;QACxD,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { PackageSelection, PresetType } from '../types/index.js';
|
|
2
|
+
import type { TerrainFeatures } from '../utils/detect-terrain.js';
|
|
3
|
+
import type { FieldguideRecommendation } from '../config/fieldguide-mappings.js';
|
|
4
|
+
/**
|
|
5
|
+
* Retrieves the package selection associated with a given preset.
|
|
6
|
+
*
|
|
7
|
+
* @param preset - The preset type for which to obtain the package selection.
|
|
8
|
+
* @returns The package selection defined by the specified {@link preset}.
|
|
9
|
+
*/
|
|
10
|
+
export declare function getPresetSelection(preset: PresetType): PackageSelection;
|
|
11
|
+
/**
|
|
12
|
+
* Returns the default package selection based on the provided terrain features.
|
|
13
|
+
*
|
|
14
|
+
* The selection includes all configuration and utility packages marked as selected by default, along with recommended fieldguide IDs determined by the given terrain.
|
|
15
|
+
*
|
|
16
|
+
* @param terrain - The terrain features used to determine recommended fieldguides.
|
|
17
|
+
* @returns The default package selection for the specified terrain.
|
|
18
|
+
*/
|
|
19
|
+
export declare function getDefaultSelection(terrain: TerrainFeatures): PackageSelection;
|
|
20
|
+
/**
|
|
21
|
+
* Prompts the user to interactively select configuration and utility packages, and displays recommended fieldguides based on the provided terrain.
|
|
22
|
+
*
|
|
23
|
+
* @param terrain - The terrain features used to determine recommended fieldguides.
|
|
24
|
+
* @param recommendedFieldguides - A list of fieldguide recommendations to display to the user.
|
|
25
|
+
* @returns A package selection object containing the user's chosen configuration and utility packages, along with recommended fieldguide IDs for the given terrain.
|
|
26
|
+
*/
|
|
27
|
+
export declare function getInteractiveSelection(terrain: TerrainFeatures, recommendedFieldguides: Array<FieldguideRecommendation>): Promise<PackageSelection>;
|
|
28
|
+
//# sourceMappingURL=package-selector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-selector.d.ts","sourceRoot":"","sources":["../../src/services/package-selector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AASjF;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,gBAAgB,CAEvE;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,eAAe,GACvB,gBAAgB,CAMlB;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,eAAe,EACxB,sBAAsB,EAAE,KAAK,CAAC,wBAAwB,CAAC,GACtD,OAAO,CAAC,gBAAgB,CAAC,CAgB3B"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { PRESET_CONFIGURATIONS, CONFIG_PACKAGES, UTILITY_PACKAGES, } from '../constants/packages.js';
|
|
2
|
+
import { getRecommendedFieldguideIds } from '../config/fieldguide-mappings.js';
|
|
3
|
+
import * as prompts from '../ui/prompts.js';
|
|
4
|
+
/**
|
|
5
|
+
* Retrieves the package selection associated with a given preset.
|
|
6
|
+
*
|
|
7
|
+
* @param preset - The preset type for which to obtain the package selection.
|
|
8
|
+
* @returns The package selection defined by the specified {@link preset}.
|
|
9
|
+
*/
|
|
10
|
+
export function getPresetSelection(preset) {
|
|
11
|
+
return PRESET_CONFIGURATIONS[preset];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Returns the default package selection based on the provided terrain features.
|
|
15
|
+
*
|
|
16
|
+
* The selection includes all configuration and utility packages marked as selected by default, along with recommended fieldguide IDs determined by the given terrain.
|
|
17
|
+
*
|
|
18
|
+
* @param terrain - The terrain features used to determine recommended fieldguides.
|
|
19
|
+
* @returns The default package selection for the specified terrain.
|
|
20
|
+
*/
|
|
21
|
+
export function getDefaultSelection(terrain) {
|
|
22
|
+
return {
|
|
23
|
+
configs: CONFIG_PACKAGES.filter(p => p.selected).map(p => p.value),
|
|
24
|
+
utils: UTILITY_PACKAGES.filter(p => p.selected).map(p => p.value),
|
|
25
|
+
fieldguides: getRecommendedFieldguideIds(terrain),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Prompts the user to interactively select configuration and utility packages, and displays recommended fieldguides based on the provided terrain.
|
|
30
|
+
*
|
|
31
|
+
* @param terrain - The terrain features used to determine recommended fieldguides.
|
|
32
|
+
* @param recommendedFieldguides - A list of fieldguide recommendations to display to the user.
|
|
33
|
+
* @returns A package selection object containing the user's chosen configuration and utility packages, along with recommended fieldguide IDs for the given terrain.
|
|
34
|
+
*/
|
|
35
|
+
export async function getInteractiveSelection(terrain, recommendedFieldguides) {
|
|
36
|
+
console.log(''); // Add spacing
|
|
37
|
+
const selectedConfigs = await prompts.selectConfigurations(CONFIG_PACKAGES);
|
|
38
|
+
const selectedUtils = await prompts.selectUtilities(UTILITY_PACKAGES);
|
|
39
|
+
// Show recommended fieldguides
|
|
40
|
+
if (recommendedFieldguides.length > 0) {
|
|
41
|
+
prompts.showRecommendedFieldguides(recommendedFieldguides);
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
configs: selectedConfigs,
|
|
45
|
+
utils: selectedUtils,
|
|
46
|
+
fieldguides: recommendedFieldguides.map(fg => fg.id),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=package-selector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-selector.js","sourceRoot":"","sources":["../../src/services/package-selector.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAkB;IACnD,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAwB;IAExB,OAAO;QACL,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAClE,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACjE,WAAW,EAAE,2BAA2B,CAAC,OAAO,CAAC;KAClD,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAwB,EACxB,sBAAuD;IAEvD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc;IAE/B,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC;IAC5E,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;IAEtE,+BAA+B;IAC/B,IAAI,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,0BAA0B,CAAC,sBAAsB,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO;QACL,OAAO,EAAE,eAAe;QACxB,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KACrD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface EquipOptions {
|
|
2
|
+
preset?: PresetType;
|
|
3
|
+
yes?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export interface PackageSelection {
|
|
6
|
+
configs: Array<string>;
|
|
7
|
+
utils: Array<string>;
|
|
8
|
+
fieldguides: Array<string>;
|
|
9
|
+
}
|
|
10
|
+
export interface Package {
|
|
11
|
+
name: string;
|
|
12
|
+
value: string;
|
|
13
|
+
selected: boolean;
|
|
14
|
+
}
|
|
15
|
+
export type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun';
|
|
16
|
+
export type PresetType = 'minimal' | 'standard' | 'full';
|
|
17
|
+
export interface InstallCommand {
|
|
18
|
+
command: string;
|
|
19
|
+
installVerb: string;
|
|
20
|
+
devFlag: string;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACrB,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAC7D,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type Ora } from 'ora';
|
|
2
|
+
import type { PackageSelection } from '../types/index.js';
|
|
3
|
+
import { type TerrainFeatures } from '../utils/detect-terrain.js';
|
|
4
|
+
/**
|
|
5
|
+
* Displays a cyan-colored welcome message introducing the Outfitter tool in the CLI.
|
|
6
|
+
*/
|
|
7
|
+
export declare function showWelcome(): void;
|
|
8
|
+
/**
|
|
9
|
+
* Displays a summary of detected terrain features in the console.
|
|
10
|
+
*
|
|
11
|
+
* If any terrain features are present in {@link terrain}, each is listed as a bullet point under a cyan-colored heading.
|
|
12
|
+
*
|
|
13
|
+
* @param terrain - The terrain features to summarize and display.
|
|
14
|
+
*/
|
|
15
|
+
export declare function showTerrainSummary(terrain: TerrainFeatures): void;
|
|
16
|
+
/**
|
|
17
|
+
* Displays the name of the package manager being used in gray text.
|
|
18
|
+
*
|
|
19
|
+
* @param manager - The name of the package manager.
|
|
20
|
+
*/
|
|
21
|
+
export declare function showPackageManager(manager: string): void;
|
|
22
|
+
/**
|
|
23
|
+
* Displays a list of recommended next steps after setting up the Outfitter project.
|
|
24
|
+
*
|
|
25
|
+
* Prints instructions for linting, reviewing AI assistant documentation, and, if applicable, exploring available fieldguides.
|
|
26
|
+
*
|
|
27
|
+
* @param packageManager - The package manager to use for running commands.
|
|
28
|
+
* @param selection - The user's package selection, used to determine if fieldguides are included.
|
|
29
|
+
*/
|
|
30
|
+
export declare function showNextSteps(packageManager: string, selection: PackageSelection): void;
|
|
31
|
+
/**
|
|
32
|
+
* Creates and returns a CLI spinner initialized with the specified text.
|
|
33
|
+
*
|
|
34
|
+
* @param text - The message to display alongside the spinner.
|
|
35
|
+
* @returns An `Ora` spinner instance for indicating progress in the CLI.
|
|
36
|
+
*/
|
|
37
|
+
export declare function createSpinner(text: string): Ora;
|
|
38
|
+
//# sourceMappingURL=console.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../src/ui/console.ts"],"names":[],"mappings":"AACA,OAAY,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,4BAA4B,CAAC;AAEpC;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAIlC;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAQjE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAExD;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,gBAAgB,GAC1B,IAAI,CAYN;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAE/C"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { getTerrainSummary, } from '../utils/detect-terrain.js';
|
|
4
|
+
/**
|
|
5
|
+
* Displays a cyan-colored welcome message introducing the Outfitter tool in the CLI.
|
|
6
|
+
*/
|
|
7
|
+
export function showWelcome() {
|
|
8
|
+
console.log(chalk.cyan("🎒 Welcome to Outfitter! Let's equip your project.\n"));
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Displays a summary of detected terrain features in the console.
|
|
12
|
+
*
|
|
13
|
+
* If any terrain features are present in {@link terrain}, each is listed as a bullet point under a cyan-colored heading.
|
|
14
|
+
*
|
|
15
|
+
* @param terrain - The terrain features to summarize and display.
|
|
16
|
+
*/
|
|
17
|
+
export function showTerrainSummary(terrain) {
|
|
18
|
+
const summary = getTerrainSummary(terrain);
|
|
19
|
+
if (summary.length > 0) {
|
|
20
|
+
console.log(chalk.cyan('\n🗻 Detected terrain:'));
|
|
21
|
+
summary.forEach(feature => {
|
|
22
|
+
console.log(` • ${feature}`);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Displays the name of the package manager being used in gray text.
|
|
28
|
+
*
|
|
29
|
+
* @param manager - The name of the package manager.
|
|
30
|
+
*/
|
|
31
|
+
export function showPackageManager(manager) {
|
|
32
|
+
console.log(chalk.gray(`\n📦 Using ${manager}`));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Displays a list of recommended next steps after setting up the Outfitter project.
|
|
36
|
+
*
|
|
37
|
+
* Prints instructions for linting, reviewing AI assistant documentation, and, if applicable, exploring available fieldguides.
|
|
38
|
+
*
|
|
39
|
+
* @param packageManager - The package manager to use for running commands.
|
|
40
|
+
* @param selection - The user's package selection, used to determine if fieldguides are included.
|
|
41
|
+
*/
|
|
42
|
+
export function showNextSteps(packageManager, selection) {
|
|
43
|
+
console.log(chalk.green('\n🎉 Your project is now equipped with Outfitter!\n'));
|
|
44
|
+
console.log(chalk.cyan('Next steps:'));
|
|
45
|
+
console.log(` • Run '${packageManager} run lint' to check your code`);
|
|
46
|
+
console.log(` • Check CLAUDE.md for AI assistant instructions`);
|
|
47
|
+
if (selection.fieldguides.length > 0) {
|
|
48
|
+
console.log(` • Explore fieldguides with 'outfitter fieldguides list'`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Creates and returns a CLI spinner initialized with the specified text.
|
|
53
|
+
*
|
|
54
|
+
* @param text - The message to display alongside the spinner.
|
|
55
|
+
* @returns An `Ora` spinner instance for indicating progress in the CLI.
|
|
56
|
+
*/
|
|
57
|
+
export function createSpinner(text) {
|
|
58
|
+
return ora(text);
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=console.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/ui/console.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAiB,MAAM,KAAK,CAAC;AAEpC,OAAO,EACL,iBAAiB,GAElB,MAAM,4BAA4B,CAAC;AAEpC;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,sDAAsD,CAAC,CACnE,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAwB;IACzD,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACxB,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC,CAAC;AACnD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAC3B,cAAsB,EACtB,SAA2B;IAE3B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,qDAAqD,CAAC,CACnE,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,YAAY,cAAc,+BAA+B,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IAEjE,IAAI,SAAS,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Package } from '../types/index.js';
|
|
2
|
+
import type { FieldguideRecommendation } from '../config/fieldguide-mappings.js';
|
|
3
|
+
export declare function selectConfigurations(packages: Array<Package>): Promise<Array<string>>;
|
|
4
|
+
export declare function selectUtilities(packages: Array<Package>): Promise<Array<string>>;
|
|
5
|
+
/**
|
|
6
|
+
* Prompts the user to confirm whether to initialize git hooks.
|
|
7
|
+
*
|
|
8
|
+
* @returns A promise that resolves to true if the user confirms, or false otherwise.
|
|
9
|
+
*/
|
|
10
|
+
export declare function confirmGitHooks(): Promise<boolean>;
|
|
11
|
+
export declare function showRecommendedFieldguides(fieldguides: Array<FieldguideRecommendation>): void;
|
|
12
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/ui/prompts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAEjF,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,GACvB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CASxB;AAED,wBAAsB,eAAe,CACnC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,GACvB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CASxB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAKxD;AAED,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,KAAK,CAAC,wBAAwB,CAAC,GAC3C,IAAI,CAcN"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { checkbox, confirm } from '@inquirer/prompts';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
export async function selectConfigurations(packages) {
|
|
4
|
+
return checkbox({
|
|
5
|
+
message: 'Select configurations to install:',
|
|
6
|
+
choices: packages.map(pkg => ({
|
|
7
|
+
name: pkg.name,
|
|
8
|
+
value: pkg.value,
|
|
9
|
+
checked: pkg.selected,
|
|
10
|
+
})),
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
export async function selectUtilities(packages) {
|
|
14
|
+
return checkbox({
|
|
15
|
+
message: 'Select utility packages:',
|
|
16
|
+
choices: packages.map(pkg => ({
|
|
17
|
+
name: pkg.name,
|
|
18
|
+
value: pkg.value,
|
|
19
|
+
checked: pkg.selected,
|
|
20
|
+
})),
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Prompts the user to confirm whether to initialize git hooks.
|
|
25
|
+
*
|
|
26
|
+
* @returns A promise that resolves to true if the user confirms, or false otherwise.
|
|
27
|
+
*/
|
|
28
|
+
export async function confirmGitHooks() {
|
|
29
|
+
return confirm({
|
|
30
|
+
message: 'Initialize git hooks?',
|
|
31
|
+
default: true,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
export function showRecommendedFieldguides(fieldguides) {
|
|
35
|
+
console.log(chalk.cyan('\n📚 Recommended fieldguides for your terrain:'));
|
|
36
|
+
fieldguides
|
|
37
|
+
.slice() // copy
|
|
38
|
+
.sort((a, b) => a.name.localeCompare(b.name))
|
|
39
|
+
.forEach(fg => {
|
|
40
|
+
const icon = fg.priority === 'essential'
|
|
41
|
+
? '⭐'
|
|
42
|
+
: fg.priority === 'recommended'
|
|
43
|
+
? '👍'
|
|
44
|
+
: '📖';
|
|
45
|
+
console.log(` ${icon} ${fg.name} - ${fg.description}`);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/ui/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAAwB;IAExB,OAAO,QAAQ,CAAC;QACd,OAAO,EAAE,mCAAmC;QAC5C,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5B,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,OAAO,EAAE,GAAG,CAAC,QAAQ;SACtB,CAAC,CAAC;KACJ,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAAwB;IAExB,OAAO,QAAQ,CAAC;QACd,OAAO,EAAE,0BAA0B;QACnC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5B,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,OAAO,EAAE,GAAG,CAAC,QAAQ;SACtB,CAAC,CAAC;KACJ,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,OAAO,OAAO,CAAC;QACb,OAAO,EAAE,uBAAuB;QAChC,OAAO,EAAE,IAAI;KACd,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,WAA4C;IAE5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC,CAAC;IAC1E,WAAW;SACR,KAAK,EAAE,CAAC,OAAO;SACf,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAC5C,OAAO,CAAC,EAAE,CAAC,EAAE;QACZ,MAAM,IAAI,GACR,EAAE,CAAC,QAAQ,KAAK,WAAW;YACzB,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,EAAE,CAAC,QAAQ,KAAK,aAAa;gBAC7B,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,IAAI,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export interface TerrainFeatures {
|
|
2
|
+
nextjs: boolean;
|
|
3
|
+
react: boolean;
|
|
4
|
+
vue: boolean;
|
|
5
|
+
svelte: boolean;
|
|
6
|
+
angular: boolean;
|
|
7
|
+
typescript: boolean;
|
|
8
|
+
javascript: boolean;
|
|
9
|
+
node: boolean;
|
|
10
|
+
python: boolean;
|
|
11
|
+
vitest: boolean;
|
|
12
|
+
jest: boolean;
|
|
13
|
+
playwright: boolean;
|
|
14
|
+
cypress: boolean;
|
|
15
|
+
zustand: boolean;
|
|
16
|
+
redux: boolean;
|
|
17
|
+
mobx: boolean;
|
|
18
|
+
vite: boolean;
|
|
19
|
+
webpack: boolean;
|
|
20
|
+
monorepo: boolean;
|
|
21
|
+
docker: boolean;
|
|
22
|
+
githubActions: boolean;
|
|
23
|
+
gitlabCi: boolean;
|
|
24
|
+
pnpm: boolean;
|
|
25
|
+
yarn: boolean;
|
|
26
|
+
npm: boolean;
|
|
27
|
+
bun: boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Detects the presence of common frameworks, languages, tools, and features in a project directory.
|
|
31
|
+
*
|
|
32
|
+
* Inspects the specified directory for configuration files and package dependencies to determine which development environment features are present. Returns a {@link TerrainFeatures} object with boolean flags for each detected feature.
|
|
33
|
+
*
|
|
34
|
+
* @param cwd - The directory to analyze. Defaults to the current working directory.
|
|
35
|
+
* @returns An object indicating detected frameworks, languages, testing tools, state management libraries, build tools, project features, and package managers.
|
|
36
|
+
*/
|
|
37
|
+
export declare function detectTerrain(cwd?: string): Promise<TerrainFeatures>;
|
|
38
|
+
export declare function getTerrainSummary(terrain: TerrainFeatures): Array<string>;
|
|
39
|
+
//# sourceMappingURL=detect-terrain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-terrain.d.ts","sourceRoot":"","sources":["../../src/utils/detect-terrain.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAE9B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IAGjB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAGhB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IAGjB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IAGd,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IAGjB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAGlB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;CACd;AA8CD;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,eAAe,CAAC,CAyI1B;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,CAkCzE"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import fsExtra from 'fs-extra';
|
|
2
|
+
const { pathExists } = fsExtra;
|
|
3
|
+
import { readFile } from 'fs/promises';
|
|
4
|
+
import { join } from 'path';
|
|
5
|
+
/**
|
|
6
|
+
* Determines whether a given npm package is listed as a dependency in the project's `package.json`.
|
|
7
|
+
*
|
|
8
|
+
* Checks for the presence of the specified package in the `dependencies`, `devDependencies`, or `peerDependencies` fields of `package.json` within the provided directory.
|
|
9
|
+
*
|
|
10
|
+
* @param packageName - The name of the npm package to check for.
|
|
11
|
+
* @param cwd - The directory to search in. Defaults to the current working directory.
|
|
12
|
+
* @returns `true` if the package is found in any dependency section; otherwise, `false`.
|
|
13
|
+
*/
|
|
14
|
+
async function hasPackage(packageName, cwd = process.cwd()) {
|
|
15
|
+
try {
|
|
16
|
+
const packageJsonPath = join(cwd, 'package.json');
|
|
17
|
+
if (await pathExists(packageJsonPath)) {
|
|
18
|
+
const packageJson = JSON.parse(await readFile(packageJsonPath, 'utf-8'));
|
|
19
|
+
const deps = {
|
|
20
|
+
...(packageJson.dependencies ?? {}),
|
|
21
|
+
...(packageJson.devDependencies ?? {}),
|
|
22
|
+
...(packageJson.peerDependencies ?? {}),
|
|
23
|
+
};
|
|
24
|
+
return packageName in deps;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// Ignore errors
|
|
29
|
+
}
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Checks if a file exists at the specified path within a given directory.
|
|
34
|
+
*
|
|
35
|
+
* @param filePath - Relative path to the file to check.
|
|
36
|
+
* @param cwd - Directory to resolve {@link filePath} from. Defaults to the current working directory.
|
|
37
|
+
* @returns `true` if the file exists, otherwise `false`.
|
|
38
|
+
*/
|
|
39
|
+
async function fileExists(filePath, cwd = process.cwd()) {
|
|
40
|
+
return pathExists(join(cwd, filePath));
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Detects the presence of common frameworks, languages, tools, and features in a project directory.
|
|
44
|
+
*
|
|
45
|
+
* Inspects the specified directory for configuration files and package dependencies to determine which development environment features are present. Returns a {@link TerrainFeatures} object with boolean flags for each detected feature.
|
|
46
|
+
*
|
|
47
|
+
* @param cwd - The directory to analyze. Defaults to the current working directory.
|
|
48
|
+
* @returns An object indicating detected frameworks, languages, testing tools, state management libraries, build tools, project features, and package managers.
|
|
49
|
+
*/
|
|
50
|
+
export async function detectTerrain(cwd = process.cwd()) {
|
|
51
|
+
// Run all checks in parallel for better performance
|
|
52
|
+
const [
|
|
53
|
+
// Framework files
|
|
54
|
+
nextConfigJs, nextConfigMjs, nextConfigTs,
|
|
55
|
+
// Project files
|
|
56
|
+
tsconfigExists, packageJsonExists, requirementsTxt, pyprojectToml, pipfile, vitestConfigTs, jestConfigJs, playwrightConfigTs, cypressConfigJs, viteConfigTs, webpackConfigJs, pnpmWorkspace, lernaJson, nxJson, rushJson, dockerfile, dockerCompose, githubWorkflows, gitlabCi, pnpmLock, yarnLock, packageLock, bunLock,
|
|
57
|
+
// Packages
|
|
58
|
+
hasNext, hasReact, hasVue, hasSvelte, hasAngular, hasVitest, hasJest, hasPlaywright, hasCypress, hasZustand, hasRedux, hasReduxToolkit, hasMobx, hasVite, hasWebpack,] = await Promise.all([
|
|
59
|
+
// Framework files
|
|
60
|
+
fileExists('next.config.js', cwd),
|
|
61
|
+
fileExists('next.config.mjs', cwd),
|
|
62
|
+
fileExists('next.config.ts', cwd),
|
|
63
|
+
// Project files
|
|
64
|
+
fileExists('tsconfig.json', cwd),
|
|
65
|
+
fileExists('package.json', cwd),
|
|
66
|
+
fileExists('requirements.txt', cwd),
|
|
67
|
+
fileExists('pyproject.toml', cwd),
|
|
68
|
+
fileExists('Pipfile', cwd),
|
|
69
|
+
fileExists('vitest.config.ts', cwd),
|
|
70
|
+
fileExists('jest.config.js', cwd),
|
|
71
|
+
fileExists('playwright.config.ts', cwd),
|
|
72
|
+
fileExists('cypress.config.js', cwd),
|
|
73
|
+
fileExists('vite.config.ts', cwd),
|
|
74
|
+
fileExists('webpack.config.js', cwd),
|
|
75
|
+
fileExists('pnpm-workspace.yaml', cwd),
|
|
76
|
+
fileExists('lerna.json', cwd),
|
|
77
|
+
fileExists('nx.json', cwd),
|
|
78
|
+
fileExists('rush.json', cwd),
|
|
79
|
+
fileExists('Dockerfile', cwd),
|
|
80
|
+
fileExists('docker-compose.yml', cwd),
|
|
81
|
+
fileExists('.github/workflows', cwd),
|
|
82
|
+
fileExists('.gitlab-ci.yml', cwd),
|
|
83
|
+
fileExists('pnpm-lock.yaml', cwd),
|
|
84
|
+
fileExists('yarn.lock', cwd),
|
|
85
|
+
fileExists('package-lock.json', cwd),
|
|
86
|
+
fileExists('bun.lockb', cwd),
|
|
87
|
+
// Packages
|
|
88
|
+
hasPackage('next', cwd),
|
|
89
|
+
hasPackage('react', cwd),
|
|
90
|
+
hasPackage('vue', cwd),
|
|
91
|
+
hasPackage('svelte', cwd),
|
|
92
|
+
hasPackage('@angular/core', cwd),
|
|
93
|
+
hasPackage('vitest', cwd),
|
|
94
|
+
hasPackage('jest', cwd),
|
|
95
|
+
hasPackage('@playwright/test', cwd),
|
|
96
|
+
hasPackage('cypress', cwd),
|
|
97
|
+
hasPackage('zustand', cwd),
|
|
98
|
+
hasPackage('redux', cwd),
|
|
99
|
+
hasPackage('@reduxjs/toolkit', cwd),
|
|
100
|
+
hasPackage('mobx', cwd),
|
|
101
|
+
hasPackage('vite', cwd),
|
|
102
|
+
hasPackage('webpack', cwd),
|
|
103
|
+
]);
|
|
104
|
+
const terrain = {
|
|
105
|
+
// Frameworks
|
|
106
|
+
nextjs: nextConfigJs || nextConfigMjs || nextConfigTs || hasNext,
|
|
107
|
+
react: hasReact,
|
|
108
|
+
vue: hasVue,
|
|
109
|
+
svelte: hasSvelte,
|
|
110
|
+
angular: hasAngular,
|
|
111
|
+
// Languages/Runtime
|
|
112
|
+
typescript: tsconfigExists,
|
|
113
|
+
javascript: packageJsonExists,
|
|
114
|
+
node: packageJsonExists,
|
|
115
|
+
python: requirementsTxt || pyprojectToml || pipfile,
|
|
116
|
+
// Testing
|
|
117
|
+
vitest: hasVitest || vitestConfigTs,
|
|
118
|
+
jest: hasJest || jestConfigJs,
|
|
119
|
+
playwright: hasPlaywright || playwrightConfigTs,
|
|
120
|
+
cypress: hasCypress || cypressConfigJs,
|
|
121
|
+
// State Management
|
|
122
|
+
zustand: hasZustand,
|
|
123
|
+
redux: hasRedux || hasReduxToolkit,
|
|
124
|
+
mobx: hasMobx,
|
|
125
|
+
// Build Tools
|
|
126
|
+
vite: hasVite || viteConfigTs,
|
|
127
|
+
webpack: hasWebpack || webpackConfigJs,
|
|
128
|
+
// Features
|
|
129
|
+
monorepo: pnpmWorkspace || lernaJson || nxJson || rushJson,
|
|
130
|
+
docker: dockerfile || dockerCompose,
|
|
131
|
+
githubActions: githubWorkflows,
|
|
132
|
+
gitlabCi: gitlabCi,
|
|
133
|
+
// Package Manager
|
|
134
|
+
pnpm: pnpmLock,
|
|
135
|
+
yarn: yarnLock,
|
|
136
|
+
npm: packageLock,
|
|
137
|
+
bun: bunLock,
|
|
138
|
+
};
|
|
139
|
+
return terrain;
|
|
140
|
+
}
|
|
141
|
+
export function getTerrainSummary(terrain) {
|
|
142
|
+
const features = [];
|
|
143
|
+
// Primary framework
|
|
144
|
+
if (terrain.nextjs)
|
|
145
|
+
features.push('Next.js application');
|
|
146
|
+
else if (terrain.react)
|
|
147
|
+
features.push('React application');
|
|
148
|
+
else if (terrain.vue)
|
|
149
|
+
features.push('Vue application');
|
|
150
|
+
else if (terrain.svelte)
|
|
151
|
+
features.push('Svelte application');
|
|
152
|
+
else if (terrain.angular)
|
|
153
|
+
features.push('Angular application');
|
|
154
|
+
// Language
|
|
155
|
+
if (terrain.typescript)
|
|
156
|
+
features.push('TypeScript');
|
|
157
|
+
if (terrain.python)
|
|
158
|
+
features.push('Python');
|
|
159
|
+
// Testing
|
|
160
|
+
if (terrain.vitest)
|
|
161
|
+
features.push('Vitest testing');
|
|
162
|
+
else if (terrain.jest)
|
|
163
|
+
features.push('Jest testing');
|
|
164
|
+
if (terrain.playwright)
|
|
165
|
+
features.push('Playwright e2e');
|
|
166
|
+
else if (terrain.cypress)
|
|
167
|
+
features.push('Cypress e2e');
|
|
168
|
+
// State management
|
|
169
|
+
if (terrain.zustand)
|
|
170
|
+
features.push('Zustand state');
|
|
171
|
+
else if (terrain.redux)
|
|
172
|
+
features.push('Redux state');
|
|
173
|
+
else if (terrain.mobx)
|
|
174
|
+
features.push('MobX state');
|
|
175
|
+
// Build tools
|
|
176
|
+
if (terrain.vite)
|
|
177
|
+
features.push('Vite bundler');
|
|
178
|
+
else if (terrain.webpack)
|
|
179
|
+
features.push('Webpack bundler');
|
|
180
|
+
// Special features
|
|
181
|
+
if (terrain.monorepo)
|
|
182
|
+
features.push('Monorepo structure');
|
|
183
|
+
if (terrain.docker)
|
|
184
|
+
features.push('Docker container');
|
|
185
|
+
return features;
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=detect-terrain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-terrain.js","sourceRoot":"","sources":["../../src/utils/detect-terrain.ts"],"names":[],"mappings":"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"}
|