create-specra 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2 -0
- package/dist/index.js +289 -0
- package/dist/index.js.map +1 -0
- package/package.json +1 -1
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// src/index.ts
|
|
4
|
+
import { Command } from "commander";
|
|
5
|
+
import prompts from "prompts";
|
|
6
|
+
|
|
7
|
+
// src/create-project.ts
|
|
8
|
+
import fs2 from "fs";
|
|
9
|
+
import path2 from "path";
|
|
10
|
+
import { fileURLToPath } from "url";
|
|
11
|
+
import { execSync as execSync2 } from "child_process";
|
|
12
|
+
import pc from "picocolors";
|
|
13
|
+
|
|
14
|
+
// src/utils.ts
|
|
15
|
+
import validateNpmPackageName from "validate-npm-package-name";
|
|
16
|
+
import { execSync } from "child_process";
|
|
17
|
+
import fs from "fs";
|
|
18
|
+
import path from "path";
|
|
19
|
+
function validateProjectName(name) {
|
|
20
|
+
const validation = validateNpmPackageName(name);
|
|
21
|
+
if (validation.validForNewPackages) {
|
|
22
|
+
return { valid: true };
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
valid: false,
|
|
26
|
+
problems: [
|
|
27
|
+
...validation.errors || [],
|
|
28
|
+
...validation.warnings || []
|
|
29
|
+
]
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function isWriteable(directory) {
|
|
33
|
+
try {
|
|
34
|
+
fs.accessSync(directory, fs.constants.W_OK);
|
|
35
|
+
return true;
|
|
36
|
+
} catch {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function isFolderEmpty(path3) {
|
|
41
|
+
const files = fs.readdirSync(path3);
|
|
42
|
+
return files.length === 0 || files.length === 1 && files[0] === ".git";
|
|
43
|
+
}
|
|
44
|
+
function getPackageManagerCommand(packageManager) {
|
|
45
|
+
switch (packageManager) {
|
|
46
|
+
case "yarn":
|
|
47
|
+
return {
|
|
48
|
+
install: "yarn install",
|
|
49
|
+
run: (script) => `yarn ${script}`
|
|
50
|
+
};
|
|
51
|
+
case "pnpm":
|
|
52
|
+
return {
|
|
53
|
+
install: "pnpm install",
|
|
54
|
+
run: (script) => `pnpm ${script}`
|
|
55
|
+
};
|
|
56
|
+
case "npm":
|
|
57
|
+
default:
|
|
58
|
+
return {
|
|
59
|
+
install: "npm install",
|
|
60
|
+
run: (script) => `npm run ${script}`
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function tryGitInit(root) {
|
|
65
|
+
try {
|
|
66
|
+
execSync("git --version", { stdio: "ignore" });
|
|
67
|
+
execSync("git init", { cwd: root, stdio: "ignore" });
|
|
68
|
+
execSync("git add -A", { cwd: root, stdio: "ignore" });
|
|
69
|
+
execSync('git commit -m "Initial commit from create-specra"', {
|
|
70
|
+
cwd: root,
|
|
71
|
+
stdio: "ignore"
|
|
72
|
+
});
|
|
73
|
+
return true;
|
|
74
|
+
} catch {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function copyRecursive(src, dest) {
|
|
79
|
+
const stat = fs.statSync(src);
|
|
80
|
+
if (stat.isDirectory()) {
|
|
81
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
82
|
+
const entries = fs.readdirSync(src);
|
|
83
|
+
for (const entry of entries) {
|
|
84
|
+
const srcPath = path.join(src, entry);
|
|
85
|
+
const destPath = path.join(dest, entry);
|
|
86
|
+
copyRecursive(srcPath, destPath);
|
|
87
|
+
}
|
|
88
|
+
} else {
|
|
89
|
+
fs.copyFileSync(src, dest);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// src/create-project.ts
|
|
94
|
+
async function createProject({
|
|
95
|
+
projectName,
|
|
96
|
+
template,
|
|
97
|
+
packageManager,
|
|
98
|
+
skipInstall
|
|
99
|
+
}) {
|
|
100
|
+
const root = path2.resolve(projectName);
|
|
101
|
+
const appName = path2.basename(root);
|
|
102
|
+
if (fs2.existsSync(root)) {
|
|
103
|
+
if (!isWriteable(root)) {
|
|
104
|
+
console.error(
|
|
105
|
+
pc.red(`The directory ${pc.cyan(projectName)} is not writable.`)
|
|
106
|
+
);
|
|
107
|
+
process.exit(1);
|
|
108
|
+
}
|
|
109
|
+
if (!isFolderEmpty(root)) {
|
|
110
|
+
console.error(
|
|
111
|
+
pc.red(
|
|
112
|
+
`The directory ${pc.cyan(
|
|
113
|
+
projectName
|
|
114
|
+
)} contains files that could conflict. Please use a new directory.`
|
|
115
|
+
)
|
|
116
|
+
);
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
119
|
+
} else {
|
|
120
|
+
fs2.mkdirSync(root, { recursive: true });
|
|
121
|
+
}
|
|
122
|
+
console.log(`Creating a new Specra documentation site in ${pc.cyan(root)}`);
|
|
123
|
+
console.log();
|
|
124
|
+
const __filename2 = fileURLToPath(import.meta.url);
|
|
125
|
+
const __dirname2 = path2.dirname(__filename2);
|
|
126
|
+
const templateDir = path2.join(__dirname2, "..", "templates", template);
|
|
127
|
+
if (!fs2.existsSync(templateDir)) {
|
|
128
|
+
console.error(pc.red(`Template ${pc.cyan(template)} not found.`));
|
|
129
|
+
process.exit(1);
|
|
130
|
+
}
|
|
131
|
+
console.log(`Using template: ${pc.cyan(template)}`);
|
|
132
|
+
console.log();
|
|
133
|
+
copyRecursive(templateDir, root);
|
|
134
|
+
const packageJsonPath = path2.join(root, "package.json");
|
|
135
|
+
const packageJson = JSON.parse(fs2.readFileSync(packageJsonPath, "utf8"));
|
|
136
|
+
packageJson.name = appName;
|
|
137
|
+
fs2.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + "\n");
|
|
138
|
+
const gitignorePath = path2.join(root, "gitignore");
|
|
139
|
+
if (fs2.existsSync(gitignorePath)) {
|
|
140
|
+
fs2.renameSync(gitignorePath, path2.join(root, ".gitignore"));
|
|
141
|
+
}
|
|
142
|
+
if (!skipInstall) {
|
|
143
|
+
console.log("Installing dependencies...");
|
|
144
|
+
console.log();
|
|
145
|
+
const command2 = getPackageManagerCommand(packageManager);
|
|
146
|
+
try {
|
|
147
|
+
execSync2(command2.install, { cwd: root, stdio: "inherit" });
|
|
148
|
+
} catch (error) {
|
|
149
|
+
console.error(pc.red("Failed to install dependencies."));
|
|
150
|
+
process.exit(1);
|
|
151
|
+
}
|
|
152
|
+
console.log();
|
|
153
|
+
}
|
|
154
|
+
if (tryGitInit(root)) {
|
|
155
|
+
console.log("Initialized a git repository.");
|
|
156
|
+
console.log();
|
|
157
|
+
}
|
|
158
|
+
console.log(pc.green("Success!") + ` Created ${appName} at ${root}`);
|
|
159
|
+
console.log();
|
|
160
|
+
console.log("Inside that directory, you can run several commands:");
|
|
161
|
+
console.log();
|
|
162
|
+
const command = getPackageManagerCommand(packageManager);
|
|
163
|
+
console.log(pc.cyan(` ${command.run("dev")}`));
|
|
164
|
+
console.log(" Starts the development server.");
|
|
165
|
+
console.log();
|
|
166
|
+
console.log(pc.cyan(` ${command.run("build")}`));
|
|
167
|
+
console.log(" Builds the app for production.");
|
|
168
|
+
console.log();
|
|
169
|
+
console.log(pc.cyan(` ${command.run("start")}`));
|
|
170
|
+
console.log(" Runs the built app in production mode.");
|
|
171
|
+
console.log();
|
|
172
|
+
console.log("We suggest that you begin by typing:");
|
|
173
|
+
console.log();
|
|
174
|
+
console.log(pc.cyan(" cd"), projectName);
|
|
175
|
+
console.log(` ${pc.cyan(command.run("dev"))}`);
|
|
176
|
+
console.log();
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// src/index.ts
|
|
180
|
+
import pc2 from "picocolors";
|
|
181
|
+
var program = new Command();
|
|
182
|
+
program.name("create-specra").description("Create a new Specra documentation site").argument("[project-directory]", "Directory to create the project in").option("--template <template>", "Template to use (default, minimal, api-focused)").option("--use-npm", "Use npm as the package manager").option("--use-pnpm", "Use pnpm as the package manager").option("--use-yarn", "Use yarn as the package manager").option("--skip-install", "Skip package installation").action(async (projectDirectory, options) => {
|
|
183
|
+
console.log();
|
|
184
|
+
console.log(pc2.bold(pc2.cyan("Create Specra Documentation Site")));
|
|
185
|
+
console.log();
|
|
186
|
+
let projectName = projectDirectory;
|
|
187
|
+
if (!projectName) {
|
|
188
|
+
const response = await prompts({
|
|
189
|
+
type: "text",
|
|
190
|
+
name: "projectName",
|
|
191
|
+
message: "What is your project named?",
|
|
192
|
+
initial: "my-docs",
|
|
193
|
+
validate: (name) => {
|
|
194
|
+
const validation2 = validateProjectName(name);
|
|
195
|
+
if (validation2.valid) {
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
return validation2.problems[0];
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
if (!response.projectName) {
|
|
202
|
+
console.log();
|
|
203
|
+
console.log("Aborting.");
|
|
204
|
+
process.exit(1);
|
|
205
|
+
}
|
|
206
|
+
projectName = response.projectName;
|
|
207
|
+
}
|
|
208
|
+
const validation = validateProjectName(projectName);
|
|
209
|
+
if (!validation.valid) {
|
|
210
|
+
console.error(
|
|
211
|
+
pc2.red(
|
|
212
|
+
`Cannot create a project named ${pc2.cyan(
|
|
213
|
+
`"${projectName}"`
|
|
214
|
+
)} because of npm naming restrictions:
|
|
215
|
+
`
|
|
216
|
+
)
|
|
217
|
+
);
|
|
218
|
+
validation.problems.forEach(
|
|
219
|
+
(p) => console.error(` ${pc2.red("\u2022")} ${p}`)
|
|
220
|
+
);
|
|
221
|
+
process.exit(1);
|
|
222
|
+
}
|
|
223
|
+
let template = options.template;
|
|
224
|
+
if (!template) {
|
|
225
|
+
const response = await prompts({
|
|
226
|
+
type: "select",
|
|
227
|
+
name: "template",
|
|
228
|
+
message: "Which template would you like to use?",
|
|
229
|
+
choices: [
|
|
230
|
+
// {
|
|
231
|
+
// title: 'Default',
|
|
232
|
+
// value: 'default',
|
|
233
|
+
// description: 'Full-featured documentation site with examples',
|
|
234
|
+
// },
|
|
235
|
+
{
|
|
236
|
+
title: "Minimal",
|
|
237
|
+
value: "minimal",
|
|
238
|
+
description: "Minimal setup to get started quickly"
|
|
239
|
+
}
|
|
240
|
+
// {
|
|
241
|
+
// title: 'API-Focused',
|
|
242
|
+
// value: 'api-focused',
|
|
243
|
+
// description: 'Optimized for API documentation',
|
|
244
|
+
// },
|
|
245
|
+
],
|
|
246
|
+
initial: 0
|
|
247
|
+
});
|
|
248
|
+
if (!response.template) {
|
|
249
|
+
console.log();
|
|
250
|
+
console.log("Aborting.");
|
|
251
|
+
process.exit(1);
|
|
252
|
+
}
|
|
253
|
+
template = response.template;
|
|
254
|
+
}
|
|
255
|
+
let packageManager = options.useNpm ? "npm" : options.usePnpm ? "pnpm" : options.useYarn ? "yarn" : void 0;
|
|
256
|
+
if (!packageManager && !options.skipInstall) {
|
|
257
|
+
const response = await prompts({
|
|
258
|
+
type: "select",
|
|
259
|
+
name: "packageManager",
|
|
260
|
+
message: "Which package manager do you want to use?",
|
|
261
|
+
choices: [
|
|
262
|
+
{ title: "npm", value: "npm" },
|
|
263
|
+
{ title: "yarn", value: "yarn" },
|
|
264
|
+
{ title: "pnpm", value: "pnpm" }
|
|
265
|
+
],
|
|
266
|
+
initial: 0
|
|
267
|
+
});
|
|
268
|
+
if (!response.packageManager) {
|
|
269
|
+
console.log();
|
|
270
|
+
console.log("Aborting.");
|
|
271
|
+
process.exit(1);
|
|
272
|
+
}
|
|
273
|
+
packageManager = response.packageManager;
|
|
274
|
+
}
|
|
275
|
+
try {
|
|
276
|
+
await createProject({
|
|
277
|
+
projectName,
|
|
278
|
+
template: template || "default",
|
|
279
|
+
packageManager: packageManager || "npm",
|
|
280
|
+
skipInstall: options.skipInstall
|
|
281
|
+
});
|
|
282
|
+
} catch (error) {
|
|
283
|
+
console.error(pc2.red("\nError creating project:"));
|
|
284
|
+
console.error(error);
|
|
285
|
+
process.exit(1);
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
program.parse();
|
|
289
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/create-project.ts","../src/utils.ts"],"sourcesContent":["import { Command } from 'commander'\nimport prompts from 'prompts'\nimport { createProject } from './create-project.js'\nimport { validateProjectName } from './utils.js'\nimport pc from 'picocolors'\n\nconst program = new Command()\n\nprogram\n .name('create-specra')\n .description('Create a new Specra documentation site')\n .argument('[project-directory]', 'Directory to create the project in')\n .option('--template <template>', 'Template to use (default, minimal, api-focused)')\n .option('--use-npm', 'Use npm as the package manager')\n .option('--use-pnpm', 'Use pnpm as the package manager')\n .option('--use-yarn', 'Use yarn as the package manager')\n .option('--skip-install', 'Skip package installation')\n .action(async (projectDirectory: string | undefined, options) => {\n console.log()\n console.log(pc.bold(pc.cyan('Create Specra Documentation Site')))\n console.log()\n\n let projectName = projectDirectory\n\n // Prompt for project name if not provided\n if (!projectName) {\n const response = await prompts({\n type: 'text',\n name: 'projectName',\n message: 'What is your project named?',\n initial: 'my-docs',\n validate: (name) => {\n const validation = validateProjectName(name)\n if (validation.valid) {\n return true\n }\n return validation.problems![0]\n },\n })\n\n if (!response.projectName) {\n console.log()\n console.log('Aborting.')\n process.exit(1)\n }\n\n projectName = response.projectName\n }\n\n // Validate project name\n const validation = validateProjectName(projectName!)\n if (!validation.valid) {\n console.error(\n pc.red(\n `Cannot create a project named ${pc.cyan(\n `\"${projectName}\"`\n )} because of npm naming restrictions:\\n`\n )\n )\n validation.problems!.forEach((p) =>\n console.error(` ${pc.red('•')} ${p}`)\n )\n process.exit(1)\n }\n\n // Prompt for template if not provided\n let template = options.template\n\n if (!template) {\n const response = await prompts({\n type: 'select',\n name: 'template',\n message: 'Which template would you like to use?',\n choices: [\n // {\n // title: 'Default',\n // value: 'default',\n // description: 'Full-featured documentation site with examples',\n // },\n {\n title: 'Minimal',\n value: 'minimal',\n description: 'Minimal setup to get started quickly',\n },\n // {\n // title: 'API-Focused',\n // value: 'api-focused',\n // description: 'Optimized for API documentation',\n // },\n ],\n initial: 0,\n })\n\n if (!response.template) {\n console.log()\n console.log('Aborting.')\n process.exit(1)\n }\n\n template = response.template\n }\n\n // Detect or prompt for package manager\n let packageManager = options.useNpm\n ? 'npm'\n : options.usePnpm\n ? 'pnpm'\n : options.useYarn\n ? 'yarn'\n : undefined\n\n if (!packageManager && !options.skipInstall) {\n const response = await prompts({\n type: 'select',\n name: 'packageManager',\n message: 'Which package manager do you want to use?',\n choices: [\n { title: 'npm', value: 'npm' },\n { title: 'yarn', value: 'yarn' },\n { title: 'pnpm', value: 'pnpm' },\n ],\n initial: 0,\n })\n\n if (!response.packageManager) {\n console.log()\n console.log('Aborting.')\n process.exit(1)\n }\n\n packageManager = response.packageManager\n }\n\n // Create the project\n try {\n await createProject({\n projectName: projectName!,\n template: template || 'default',\n packageManager: packageManager || 'npm',\n skipInstall: options.skipInstall,\n })\n } catch (error) {\n console.error(pc.red('\\nError creating project:'))\n console.error(error)\n process.exit(1)\n }\n })\n\nprogram.parse()\n","import fs from 'fs'\nimport path from 'path'\nimport { fileURLToPath } from 'url'\nimport { execSync } from 'child_process'\nimport pc from 'picocolors'\nimport {\n isWriteable,\n isFolderEmpty,\n getPackageManagerCommand,\n tryGitInit,\n copyRecursive,\n} from './utils.js'\n\ninterface CreateProjectOptions {\n projectName: string\n template: string\n packageManager: string\n skipInstall: boolean\n}\n\nexport async function createProject({\n projectName,\n template,\n packageManager,\n skipInstall,\n}: CreateProjectOptions) {\n const root = path.resolve(projectName)\n const appName = path.basename(root)\n\n // Check if directory exists\n if (fs.existsSync(root)) {\n if (!isWriteable(root)) {\n console.error(\n pc.red(`The directory ${pc.cyan(projectName)} is not writable.`)\n )\n process.exit(1)\n }\n\n if (!isFolderEmpty(root)) {\n console.error(\n pc.red(\n `The directory ${pc.cyan(\n projectName\n )} contains files that could conflict. Please use a new directory.`\n )\n )\n process.exit(1)\n }\n } else {\n fs.mkdirSync(root, { recursive: true })\n }\n\n console.log(`Creating a new Specra documentation site in ${pc.cyan(root)}`)\n console.log()\n\n // Create project structure based on template\n const __filename = fileURLToPath(import.meta.url)\n const __dirname = path.dirname(__filename)\n const templateDir = path.join(__dirname, '..', 'templates', template)\n\n if (!fs.existsSync(templateDir)) {\n console.error(pc.red(`Template ${pc.cyan(template)} not found.`))\n process.exit(1)\n }\n\n console.log(`Using template: ${pc.cyan(template)}`)\n console.log()\n\n // Copy template files\n copyRecursive(templateDir, root)\n\n // Update package.json with project name\n const packageJsonPath = path.join(root, 'package.json')\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'))\n packageJson.name = appName\n fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\\n')\n\n // Rename gitignore\n const gitignorePath = path.join(root, 'gitignore')\n if (fs.existsSync(gitignorePath)) {\n fs.renameSync(gitignorePath, path.join(root, '.gitignore'))\n }\n\n // Install dependencies\n if (!skipInstall) {\n console.log('Installing dependencies...')\n console.log()\n\n const command = getPackageManagerCommand(packageManager)\n\n try {\n execSync(command.install, { cwd: root, stdio: 'inherit' })\n } catch (error) {\n console.error(pc.red('Failed to install dependencies.'))\n process.exit(1)\n }\n\n console.log()\n }\n\n // Initialize git\n if (tryGitInit(root)) {\n console.log('Initialized a git repository.')\n console.log()\n }\n\n // Success message\n console.log(pc.green('Success!') + ` Created ${appName} at ${root}`)\n console.log()\n console.log('Inside that directory, you can run several commands:')\n console.log()\n\n const command = getPackageManagerCommand(packageManager)\n\n console.log(pc.cyan(` ${command.run('dev')}`))\n console.log(' Starts the development server.')\n console.log()\n console.log(pc.cyan(` ${command.run('build')}`))\n console.log(' Builds the app for production.')\n console.log()\n console.log(pc.cyan(` ${command.run('start')}`))\n console.log(' Runs the built app in production mode.')\n console.log()\n console.log('We suggest that you begin by typing:')\n console.log()\n console.log(pc.cyan(' cd'), projectName)\n console.log(` ${pc.cyan(command.run('dev'))}`)\n console.log()\n}\n","import validateNpmPackageName from 'validate-npm-package-name'\nimport { execSync } from 'child_process'\nimport fs from 'fs'\nimport path from 'path'\n\nexport function validateProjectName(name: string) {\n const validation = validateNpmPackageName(name)\n\n if (validation.validForNewPackages) {\n return { valid: true }\n }\n\n return {\n valid: false,\n problems: [\n ...(validation.errors || []),\n ...(validation.warnings || []),\n ],\n }\n}\n\nexport function isWriteable(directory: string): boolean {\n try {\n fs.accessSync(directory, fs.constants.W_OK)\n return true\n } catch {\n return false\n }\n}\n\nexport function isFolderEmpty(path: string): boolean {\n const files = fs.readdirSync(path)\n return files.length === 0 || (files.length === 1 && files[0] === '.git')\n}\n\nexport function getPackageManagerCommand(packageManager: string): {\n install: string\n run: (script: string) => string\n} {\n switch (packageManager) {\n case 'yarn':\n return {\n install: 'yarn install',\n run: (script) => `yarn ${script}`,\n }\n case 'pnpm':\n return {\n install: 'pnpm install',\n run: (script) => `pnpm ${script}`,\n }\n case 'npm':\n default:\n return {\n install: 'npm install',\n run: (script) => `npm run ${script}`,\n }\n }\n}\n\nexport function tryGitInit(root: string): boolean {\n try {\n execSync('git --version', { stdio: 'ignore' })\n execSync('git init', { cwd: root, stdio: 'ignore' })\n execSync('git add -A', { cwd: root, stdio: 'ignore' })\n execSync('git commit -m \"Initial commit from create-specra\"', {\n cwd: root,\n stdio: 'ignore',\n })\n return true\n } catch {\n return false\n }\n}\n\nexport function copyRecursive(src: string, dest: string) {\n const stat = fs.statSync(src)\n\n if (stat.isDirectory()) {\n fs.mkdirSync(dest, { recursive: true })\n const entries = fs.readdirSync(src)\n\n for (const entry of entries) {\n const srcPath = path.join(src, entry)\n const destPath = path.join(dest, entry)\n copyRecursive(srcPath, destPath)\n }\n } else {\n fs.copyFileSync(src, dest)\n }\n}\n"],"mappings":"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","names":["fs","path","execSync","path","path","fs","__filename","__dirname","command","execSync","pc","validation"]}
|