create-astra 0.1.1 → 0.1.2
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/generator.js +27 -66
- package/dist/index.js +14 -6
- package/dist/plugins/base/index.js +1 -5
- package/dist/plugins/ci/index.js +1 -4
- package/dist/plugins/docker/index.js +1 -4
- package/dist/plugins/prisma/index.js +1 -5
- package/dist/plugins/types.js +1 -2
- package/dist/prompts.js +2 -39
- package/dist/utils/env.js +5 -12
- package/dist/utils/files.js +8 -15
- package/dist/utils/packages.js +3 -7
- package/package.json +6 -3
package/dist/generator.js
CHANGED
|
@@ -1,54 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.generateProject = generateProject;
|
|
40
|
-
const clack = __importStar(require("@clack/prompts"));
|
|
41
|
-
const path_1 = __importDefault(require("path"));
|
|
42
|
-
const execa_1 = require("execa");
|
|
43
|
-
const promises_1 = __importDefault(require("fs/promises"));
|
|
44
|
-
const base_1 = require("./plugins/base");
|
|
45
|
-
const prisma_1 = require("./plugins/prisma");
|
|
46
|
-
const docker_1 = require("./plugins/docker");
|
|
47
|
-
const ci_1 = require("./plugins/ci");
|
|
48
|
-
const files_1 = require("./utils/files");
|
|
49
|
-
const packages_1 = require("./utils/packages");
|
|
50
|
-
const env_1 = require("./utils/env");
|
|
51
|
-
async function generateProject(options) {
|
|
1
|
+
import * as clack from '@clack/prompts';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { execa } from 'execa';
|
|
4
|
+
import fs from 'fs/promises';
|
|
5
|
+
import { createBasePlugin } from './plugins/base/index.js';
|
|
6
|
+
import { createPrismaPlugin } from './plugins/prisma/index.js';
|
|
7
|
+
import { createDockerPlugin } from './plugins/docker/index.js';
|
|
8
|
+
import { createCiPlugin } from './plugins/ci/index.js';
|
|
9
|
+
import { createFile, createFolder } from './utils/files.js';
|
|
10
|
+
import { installPackages } from './utils/packages.js';
|
|
11
|
+
import { writeEnvFile } from './utils/env.js';
|
|
12
|
+
export async function generateProject(options) {
|
|
52
13
|
if (options.language === 'node') {
|
|
53
14
|
await generateNodeProject(options);
|
|
54
15
|
}
|
|
@@ -59,13 +20,13 @@ async function generateProject(options) {
|
|
|
59
20
|
}
|
|
60
21
|
async function generateNodeProject(options) {
|
|
61
22
|
const { projectName, extras } = options;
|
|
62
|
-
const projectPath =
|
|
23
|
+
const projectPath = path.join(process.cwd(), projectName);
|
|
63
24
|
const spinner = clack.spinner();
|
|
64
25
|
const plugins = [
|
|
65
|
-
...(options.language === 'node' ? [
|
|
66
|
-
...(extras.includes('prisma') ? [
|
|
67
|
-
...(extras.includes('docker') ? [
|
|
68
|
-
...(extras.includes('ci') ? [
|
|
26
|
+
...(options.language === 'node' ? [createBasePlugin(options)] : []),
|
|
27
|
+
...(extras.includes('prisma') ? [createPrismaPlugin(options)] : []),
|
|
28
|
+
...(extras.includes('docker') ? [createDockerPlugin(options)] : []),
|
|
29
|
+
...(extras.includes('ci') ? [createCiPlugin(options)] : []),
|
|
69
30
|
];
|
|
70
31
|
const dependencies = plugins.flatMap(p => p.dependencies);
|
|
71
32
|
const devDependencies = plugins.flatMap(p => p.devDependencies);
|
|
@@ -74,8 +35,8 @@ async function generateNodeProject(options) {
|
|
|
74
35
|
const files = plugins.flatMap(p => p.files);
|
|
75
36
|
spinner.start('Initialising project...');
|
|
76
37
|
try {
|
|
77
|
-
await
|
|
78
|
-
await
|
|
38
|
+
await createFolder(projectPath);
|
|
39
|
+
await execa('npm', ['init', '-y'], { cwd: projectPath });
|
|
79
40
|
spinner.stop('Project initialised!');
|
|
80
41
|
}
|
|
81
42
|
catch (err) {
|
|
@@ -87,7 +48,7 @@ async function generateNodeProject(options) {
|
|
|
87
48
|
spinner.start('Creating files...');
|
|
88
49
|
try {
|
|
89
50
|
for (const file of files) {
|
|
90
|
-
await
|
|
51
|
+
await createFile(file.path, file.content);
|
|
91
52
|
}
|
|
92
53
|
await writeGitignore(projectPath);
|
|
93
54
|
spinner.stop('Files created!');
|
|
@@ -100,7 +61,7 @@ async function generateNodeProject(options) {
|
|
|
100
61
|
}
|
|
101
62
|
spinner.start('Writing environment variables...');
|
|
102
63
|
try {
|
|
103
|
-
await
|
|
64
|
+
await writeEnvFile(projectPath, envVars);
|
|
104
65
|
spinner.stop('Environment variables written!');
|
|
105
66
|
}
|
|
106
67
|
catch (err) {
|
|
@@ -111,8 +72,8 @@ async function generateNodeProject(options) {
|
|
|
111
72
|
}
|
|
112
73
|
spinner.start('Installing dependencies...');
|
|
113
74
|
try {
|
|
114
|
-
await
|
|
115
|
-
await
|
|
75
|
+
await installPackages(dependencies, projectPath);
|
|
76
|
+
await installPackages(devDependencies, projectPath, true);
|
|
116
77
|
spinner.stop('Dependencies installed!');
|
|
117
78
|
}
|
|
118
79
|
catch (err) {
|
|
@@ -133,12 +94,12 @@ async function generateNodeProject(options) {
|
|
|
133
94
|
clack.outro(`Your project is ready! cd ${projectName} and npm run dev to start.`);
|
|
134
95
|
}
|
|
135
96
|
async function writeGitignore(projectPath) {
|
|
136
|
-
await
|
|
97
|
+
await createFile(path.join(projectPath, '.gitignore'), `node_modules\ndist\n.env\ngenerated\n`);
|
|
137
98
|
}
|
|
138
99
|
async function patchPackageJson(projectPath, scripts) {
|
|
139
|
-
const packageJsonPath =
|
|
140
|
-
const raw = await
|
|
100
|
+
const packageJsonPath = path.join(projectPath, 'package.json');
|
|
101
|
+
const raw = await fs.readFile(packageJsonPath, 'utf-8');
|
|
141
102
|
const packageJson = JSON.parse(raw);
|
|
142
103
|
packageJson.scripts = { ...packageJson.scripts, ...scripts };
|
|
143
|
-
await
|
|
104
|
+
await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));
|
|
144
105
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
const [major, minor] = process.versions.node.split('.').map(Number);
|
|
3
|
+
const supportsCli = major > 20 || (major === 20 && minor >= 12);
|
|
4
|
+
if (!supportsCli) {
|
|
5
|
+
console.error(`create-astra requires Node.js 20.12 or newer (current: ${process.versions.node}).\n` +
|
|
6
|
+
'Upgrade Node.js, then run npx create-astra again.');
|
|
7
|
+
process.exit(1);
|
|
8
|
+
}
|
|
6
9
|
async function main() {
|
|
7
|
-
const
|
|
8
|
-
|
|
10
|
+
const [{ getProjectOptions }, { generateProject }] = await Promise.all([
|
|
11
|
+
import('./prompts.js'),
|
|
12
|
+
import('./generator.js'),
|
|
13
|
+
]);
|
|
14
|
+
const options = await getProjectOptions();
|
|
15
|
+
await generateProject(options);
|
|
9
16
|
}
|
|
10
17
|
main().catch(err => {
|
|
11
18
|
console.error(err);
|
|
12
19
|
process.exit(1);
|
|
13
20
|
});
|
|
21
|
+
export {};
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createBasePlugin = void 0;
|
|
4
|
-
const createBasePlugin = (options) => {
|
|
1
|
+
export const createBasePlugin = (options) => {
|
|
5
2
|
const { projectName, useTypescript } = options;
|
|
6
3
|
const ext = useTypescript ? 'ts' : 'js';
|
|
7
4
|
const srcEntry = useTypescript ?
|
|
@@ -76,4 +73,3 @@ app.listen(PORT, () => {
|
|
|
76
73
|
}
|
|
77
74
|
};
|
|
78
75
|
};
|
|
79
|
-
exports.createBasePlugin = createBasePlugin;
|
package/dist/plugins/ci/index.js
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createCiPlugin = createCiPlugin;
|
|
4
|
-
function createCiPlugin(options) {
|
|
1
|
+
export function createCiPlugin(options) {
|
|
5
2
|
const { projectName, useTypescript, extras } = options;
|
|
6
3
|
const hasPrisma = extras.includes('prisma');
|
|
7
4
|
const ciContent = `name: CI
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createDockerPlugin = createDockerPlugin;
|
|
4
|
-
function createDockerPlugin(options) {
|
|
1
|
+
export function createDockerPlugin(options) {
|
|
5
2
|
const { projectName, extras } = options;
|
|
6
3
|
const hasPrisma = extras.includes('prisma');
|
|
7
4
|
const dockerComposeContent = `services:
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createPrismaPlugin = void 0;
|
|
4
|
-
const createPrismaPlugin = (options) => {
|
|
1
|
+
export const createPrismaPlugin = (options) => {
|
|
5
2
|
const { projectName, useTypescript } = options;
|
|
6
3
|
const prismaConfig = `prisma.config.ts`;
|
|
7
4
|
const schemaContent = `generator client {
|
|
@@ -68,4 +65,3 @@ const createPrismaPlugin = (options) => {
|
|
|
68
65
|
}
|
|
69
66
|
};
|
|
70
67
|
};
|
|
71
|
-
exports.createPrismaPlugin = createPrismaPlugin;
|
package/dist/plugins/types.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
export {};
|
package/dist/prompts.js
CHANGED
|
@@ -1,41 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.getProjectOptions = void 0;
|
|
37
|
-
const clack = __importStar(require("@clack/prompts"));
|
|
38
|
-
const getProjectOptions = async () => {
|
|
1
|
+
import * as clack from "@clack/prompts";
|
|
2
|
+
export const getProjectOptions = async () => {
|
|
39
3
|
clack.intro('Welcome to create-astra!');
|
|
40
4
|
const projectName = await clack.text({
|
|
41
5
|
message: 'What is your project name?',
|
|
@@ -102,4 +66,3 @@ const getProjectOptions = async () => {
|
|
|
102
66
|
useTypescript: framework === 'express-ts'
|
|
103
67
|
};
|
|
104
68
|
};
|
|
105
|
-
exports.getProjectOptions = getProjectOptions;
|
package/dist/utils/env.js
CHANGED
|
@@ -1,18 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.writeEnvFile = void 0;
|
|
7
|
-
const path_1 = __importDefault(require("path"));
|
|
8
|
-
const files_1 = require("./files");
|
|
9
|
-
const writeEnvFile = async (projectPath, vars) => {
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { createFile } from './files.js';
|
|
3
|
+
export const writeEnvFile = async (projectPath, vars) => {
|
|
10
4
|
const lines = Object.entries(vars)
|
|
11
5
|
.map(([key, value]) => `${key}=${value}`)
|
|
12
6
|
.join('\n');
|
|
13
|
-
await
|
|
14
|
-
await
|
|
7
|
+
await createFile(path.join(projectPath, '.env'), lines);
|
|
8
|
+
await createFile(path.join(projectPath, '.env.example'), Object.entries(vars)
|
|
15
9
|
.map(([key]) => `${key}=`)
|
|
16
10
|
.join('\n'));
|
|
17
11
|
};
|
|
18
|
-
exports.writeEnvFile = writeEnvFile;
|
package/dist/utils/files.js
CHANGED
|
@@ -1,17 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.createFolder = createFolder;
|
|
7
|
-
exports.createFile = createFile;
|
|
8
|
-
const promises_1 = __importDefault(require("fs/promises"));
|
|
9
|
-
const path_1 = __importDefault(require("path"));
|
|
10
|
-
async function createFolder(folderPath) {
|
|
11
|
-
await promises_1.default.mkdir(folderPath, { recursive: true });
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
export async function createFolder(folderPath) {
|
|
4
|
+
await fs.mkdir(folderPath, { recursive: true });
|
|
12
5
|
}
|
|
13
|
-
async function createFile(filePath, content) {
|
|
14
|
-
const dir =
|
|
15
|
-
await
|
|
16
|
-
await
|
|
6
|
+
export async function createFile(filePath, content) {
|
|
7
|
+
const dir = path.dirname(filePath);
|
|
8
|
+
await fs.mkdir(dir, { recursive: true });
|
|
9
|
+
await fs.writeFile(filePath, content, 'utf-8');
|
|
17
10
|
}
|
package/dist/utils/packages.js
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.installPackages = void 0;
|
|
4
|
-
const execa_1 = require("execa");
|
|
5
|
-
const installPackages = async (packages, projectPath, dev = false) => {
|
|
1
|
+
import { execa } from "execa";
|
|
2
|
+
export const installPackages = async (packages, projectPath, dev = false) => {
|
|
6
3
|
if (packages.length === 0)
|
|
7
4
|
return;
|
|
8
5
|
const flag = dev ? ['--save-dev'] : [];
|
|
9
|
-
await
|
|
6
|
+
await execa('npm', ['install', ...flag, ...packages], { cwd: projectPath });
|
|
10
7
|
};
|
|
11
|
-
exports.installPackages = installPackages;
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-astra",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "A CLI that scaffolds production-ready backend projects",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"create-astra": "dist/index.js"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
|
-
"dev": "ts-node src/index.ts",
|
|
10
|
+
"dev": "node --loader ts-node/esm src/index.ts",
|
|
11
11
|
"build": "tsc",
|
|
12
12
|
"prepare": "npm run build"
|
|
13
13
|
},
|
|
@@ -24,7 +24,10 @@
|
|
|
24
24
|
"files": [
|
|
25
25
|
"dist"
|
|
26
26
|
],
|
|
27
|
-
"type": "
|
|
27
|
+
"type": "module",
|
|
28
|
+
"engines": {
|
|
29
|
+
"node": ">=20.12.0"
|
|
30
|
+
},
|
|
28
31
|
"dependencies": {
|
|
29
32
|
"@clack/prompts": "^1.6.0",
|
|
30
33
|
"execa": "^9.6.1"
|