init project
This commit is contained in:
Vendored
+127
@@ -0,0 +1,127 @@
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
import { detectJsPackageManager, hasDependency, installCommandFor, readPackageJson, runScriptCommandFor, } from './packageManager.js';
|
||||
function fileExists(root, names) {
|
||||
return names.some((name) => fs.existsSync(path.join(root, name)));
|
||||
}
|
||||
/**
|
||||
* Vite + Vue SFC projects (non-Nuxt).
|
||||
*/
|
||||
export class VueAdapter {
|
||||
root;
|
||||
kind = 'vue';
|
||||
label;
|
||||
packageManager;
|
||||
pkg;
|
||||
constructor(root) {
|
||||
this.root = root;
|
||||
this.pkg = readPackageJson(root);
|
||||
this.packageManager = detectJsPackageManager(root);
|
||||
this.label = 'Vue';
|
||||
}
|
||||
installCommand() {
|
||||
const { command, args } = installCommandFor(this.packageManager);
|
||||
return { command, args, cwd: this.root };
|
||||
}
|
||||
devCommand() {
|
||||
return this.requireScript(['dev', 'start']);
|
||||
}
|
||||
buildCommand() {
|
||||
return this.scriptOrNull(['build']);
|
||||
}
|
||||
testCommand(extraArgs = []) {
|
||||
return this.scriptOrNull(['test'], extraArgs);
|
||||
}
|
||||
lintCommand(fix = false) {
|
||||
return this.scriptOrNull(fix ? ['format', 'lint:fix'] : ['lint']);
|
||||
}
|
||||
readyPattern() {
|
||||
return /Local:\s+(https?:\/\/\S+)/i;
|
||||
}
|
||||
describe() {
|
||||
return {
|
||||
kind: this.kind,
|
||||
label: this.label,
|
||||
root: this.root,
|
||||
packageManager: this.packageManager,
|
||||
vueVersion: this.pkg?.dependencies?.vue ?? this.pkg?.devDependencies?.vue ?? null,
|
||||
typescript: hasDependency(this.pkg, 'typescript') || fileExists(this.root, ['tsconfig.json']),
|
||||
vite: fileExists(this.root, ['vite.config.js', 'vite.config.ts', 'vite.config.mjs']),
|
||||
scripts: this.pkg?.scripts ?? {},
|
||||
};
|
||||
}
|
||||
requireScript(candidates) {
|
||||
const cmd = this.scriptOrNull(candidates);
|
||||
if (!cmd) {
|
||||
throw new Error(`No "${candidates.join('"/"')}" script found in package.json at "${this.root}".`);
|
||||
}
|
||||
return cmd;
|
||||
}
|
||||
scriptOrNull(candidates, extraArgs = []) {
|
||||
const script = candidates.find((name) => this.pkg?.scripts?.[name]);
|
||||
if (!script)
|
||||
return null;
|
||||
const { command, args } = runScriptCommandFor(this.packageManager, script, extraArgs);
|
||||
return { command, args, cwd: this.root };
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Nuxt (Vue meta-framework) projects.
|
||||
*/
|
||||
export class NuxtAdapter {
|
||||
root;
|
||||
kind = 'nuxt';
|
||||
label = 'Nuxt';
|
||||
packageManager;
|
||||
pkg;
|
||||
constructor(root) {
|
||||
this.root = root;
|
||||
this.pkg = readPackageJson(root);
|
||||
this.packageManager = detectJsPackageManager(root);
|
||||
}
|
||||
installCommand() {
|
||||
const { command, args } = installCommandFor(this.packageManager);
|
||||
return { command, args, cwd: this.root };
|
||||
}
|
||||
devCommand() {
|
||||
return this.requireScript(['dev', 'start']);
|
||||
}
|
||||
buildCommand() {
|
||||
return this.scriptOrNull(['build', 'generate']);
|
||||
}
|
||||
testCommand(extraArgs = []) {
|
||||
return this.scriptOrNull(['test'], extraArgs);
|
||||
}
|
||||
lintCommand(fix = false) {
|
||||
return this.scriptOrNull(fix ? ['format', 'lint:fix'] : ['lint']);
|
||||
}
|
||||
readyPattern() {
|
||||
return /Local:\s+(https?:\/\/\S+)|Nuxt\s+.+ready/i;
|
||||
}
|
||||
describe() {
|
||||
return {
|
||||
kind: this.kind,
|
||||
label: this.label,
|
||||
root: this.root,
|
||||
packageManager: this.packageManager,
|
||||
nuxtVersion: this.pkg?.dependencies?.nuxt ?? this.pkg?.devDependencies?.nuxt ?? null,
|
||||
typescript: hasDependency(this.pkg, 'typescript') || fileExists(this.root, ['tsconfig.json']),
|
||||
scripts: this.pkg?.scripts ?? {},
|
||||
};
|
||||
}
|
||||
requireScript(candidates) {
|
||||
const cmd = this.scriptOrNull(candidates);
|
||||
if (!cmd) {
|
||||
throw new Error(`No "${candidates.join('"/"')}" script found in package.json at "${this.root}".`);
|
||||
}
|
||||
return cmd;
|
||||
}
|
||||
scriptOrNull(candidates, extraArgs = []) {
|
||||
const script = candidates.find((name) => this.pkg?.scripts?.[name]);
|
||||
if (!script)
|
||||
return null;
|
||||
const { command, args } = runScriptCommandFor(this.packageManager, script, extraArgs);
|
||||
return { command, args, cwd: this.root };
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=vue.js.map
|
||||
Reference in New Issue
Block a user