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 CHANGED
@@ -1,54 +1,15 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
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
- 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 = path_1.default.join(process.cwd(), projectName);
23
+ const projectPath = path.join(process.cwd(), projectName);
63
24
  const spinner = clack.spinner();
64
25
  const plugins = [
65
- ...(options.language === 'node' ? [(0, base_1.createBasePlugin)(options)] : []),
66
- ...(extras.includes('prisma') ? [(0, prisma_1.createPrismaPlugin)(options)] : []),
67
- ...(extras.includes('docker') ? [(0, docker_1.createDockerPlugin)(options)] : []),
68
- ...(extras.includes('ci') ? [(0, ci_1.createCiPlugin)(options)] : []),
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 (0, files_1.createFolder)(projectPath);
78
- await (0, execa_1.execa)('npm', ['init', '-y'], { cwd: projectPath });
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 (0, files_1.createFile)(file.path, file.content);
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 (0, env_1.writeEnvFile)(projectPath, envVars);
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 (0, packages_1.installPackages)(dependencies, projectPath);
115
- await (0, packages_1.installPackages)(devDependencies, projectPath, true);
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 (0, files_1.createFile)(path_1.default.join(projectPath, '.gitignore'), `node_modules\ndist\n.env\ngenerated\n`);
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 = path_1.default.join(projectPath, 'package.json');
140
- const raw = await promises_1.default.readFile(packageJsonPath, 'utf-8');
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 promises_1.default.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));
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
- "use strict";
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- const prompts_1 = require("./prompts");
5
- const generator_1 = require("./generator");
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 options = await (0, prompts_1.getProjectOptions)();
8
- await (0, generator_1.generateProject)(options);
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
- "use strict";
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;
@@ -1,7 +1,4 @@
1
- "use strict";
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
- "use strict";
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
- "use strict";
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;
@@ -1,2 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
package/dist/prompts.js CHANGED
@@ -1,41 +1,5 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
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
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
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 (0, files_1.createFile)(path_1.default.join(projectPath, '.env'), lines);
14
- await (0, files_1.createFile)(path_1.default.join(projectPath, '.env.example'), Object.entries(vars)
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;
@@ -1,17 +1,10 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
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 = path_1.default.dirname(filePath);
15
- await promises_1.default.mkdir(dir, { recursive: true });
16
- await promises_1.default.writeFile(filePath, content, 'utf-8');
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
  }
@@ -1,11 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
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 (0, execa_1.execa)('npm', ['install', ...flag, ...packages], { cwd: projectPath });
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.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": "commonjs",
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"