create-baeta 0.0.2 → 0.0.4
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/CHANGELOG.md +12 -0
- package/dist/chunk-R4KUDDY2.js +491 -0
- package/dist/chunk-R4KUDDY2.js.map +1 -0
- package/dist/cli.js +9 -472
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +70 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/package.json +1 -1
- package/templates/yoga/src/app.bun.ts +22 -0
- package/templates/yoga/src/app.deno.ts +25 -0
- /package/templates/yoga/src/{app.ts → app.node.ts} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# create-baeta
|
|
2
2
|
|
|
3
|
+
## 0.0.4
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`770fef4`](https://github.com/andreisergiu98/baeta/commit/770fef4974fd8926886162424f326c4cda2ad21b) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - fix package entrypoint
|
|
8
|
+
|
|
9
|
+
## 0.0.3
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [`bcbfb49`](https://github.com/andreisergiu98/baeta/commit/bcbfb49b16daf5d6f195ba273f52b1aa89602c1c) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - fix yoga entrypoint for bun and deno
|
|
14
|
+
|
|
3
15
|
## 0.0.2
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
|
@@ -0,0 +1,491 @@
|
|
|
1
|
+
// lib/constants.ts
|
|
2
|
+
var defaultPackageManager = "npm";
|
|
3
|
+
var lockfileNames = {
|
|
4
|
+
npm: "package-lock.json",
|
|
5
|
+
yarn: "yarn.lock",
|
|
6
|
+
pnpm: "pnpm-lock.yaml",
|
|
7
|
+
bun: "bun.lockb"
|
|
8
|
+
};
|
|
9
|
+
var packageManagers = Object.keys(lockfileNames);
|
|
10
|
+
var runtimes = ["node", "deno", "bun"];
|
|
11
|
+
var defaultJavaScriptRuntime = "node";
|
|
12
|
+
var gitignoreUrl = "https://raw.githubusercontent.com/github/gitignore/refs/heads/main/Node.gitignore";
|
|
13
|
+
|
|
14
|
+
// lib/app-name.ts
|
|
15
|
+
import path from "node:path";
|
|
16
|
+
import { logger } from "@docusaurus/logger";
|
|
17
|
+
import fs from "fs-extra";
|
|
18
|
+
import prompts from "prompts";
|
|
19
|
+
async function getAppName(reqName, rootDir) {
|
|
20
|
+
async function validateAppName(appName) {
|
|
21
|
+
if (!appName) {
|
|
22
|
+
return "An app name is required.";
|
|
23
|
+
}
|
|
24
|
+
const dest = path.resolve(rootDir, appName);
|
|
25
|
+
if (await fs.pathExists(dest)) {
|
|
26
|
+
return logger.interpolate`Directory already exists at path=${dest}!`;
|
|
27
|
+
}
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
if (reqName) {
|
|
31
|
+
const res = await validateAppName(reqName);
|
|
32
|
+
if (typeof res === "string") {
|
|
33
|
+
throw new Error(res);
|
|
34
|
+
}
|
|
35
|
+
return reqName;
|
|
36
|
+
}
|
|
37
|
+
return prompts(
|
|
38
|
+
{
|
|
39
|
+
type: "text",
|
|
40
|
+
name: "appName",
|
|
41
|
+
message: "What should we name this app?",
|
|
42
|
+
initial: "baeta-app",
|
|
43
|
+
validate: validateAppName
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
onCancel() {
|
|
47
|
+
logger.error("An app name is required.");
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
).then((result) => result.appName);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// lib/package-manager.ts
|
|
55
|
+
import path2 from "node:path";
|
|
56
|
+
import { logger as logger2 } from "@docusaurus/logger";
|
|
57
|
+
import fs2 from "fs-extra";
|
|
58
|
+
import prompts2 from "prompts";
|
|
59
|
+
import shell from "shelljs";
|
|
60
|
+
async function findPackageManagerFromLockFile(rootDir) {
|
|
61
|
+
for (const packageManager of packageManagers) {
|
|
62
|
+
const lockFilePath = path2.join(rootDir, lockfileNames[packageManager]);
|
|
63
|
+
if (await fs2.pathExists(lockFilePath)) {
|
|
64
|
+
return packageManager;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return void 0;
|
|
68
|
+
}
|
|
69
|
+
function findPackageManagerFromUserAgent() {
|
|
70
|
+
return packageManagers.find(
|
|
71
|
+
(packageManager) => process.env.npm_config_user_agent?.startsWith(packageManager)
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
async function askForPackageManagerChoice() {
|
|
75
|
+
const hasYarn = shell.exec("yarn --version", { silent: true }).code === 0;
|
|
76
|
+
const hasPnpm = shell.exec("pnpm --version", { silent: true }).code === 0;
|
|
77
|
+
const hasBun = shell.exec("bun --version", { silent: true }).code === 0;
|
|
78
|
+
if (!hasYarn && !hasPnpm && !hasBun) {
|
|
79
|
+
return "npm";
|
|
80
|
+
}
|
|
81
|
+
const choices = ["npm", hasYarn && "yarn", hasPnpm && "pnpm", hasBun && "bun"].filter((p) => Boolean(p)).map((p) => ({ title: p, value: p }));
|
|
82
|
+
const manager = await prompts2(
|
|
83
|
+
{
|
|
84
|
+
type: "select",
|
|
85
|
+
name: "packageManager",
|
|
86
|
+
message: "Select a package manager...",
|
|
87
|
+
choices
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
onCancel() {
|
|
91
|
+
logger2.info`Falling back to name=${defaultPackageManager}`;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
).then((result) => result.packageManager);
|
|
95
|
+
return manager ?? defaultPackageManager;
|
|
96
|
+
}
|
|
97
|
+
async function getPackageManager(dest, { packageManager, skipInstall }) {
|
|
98
|
+
if (packageManager && !packageManagers.includes(packageManager)) {
|
|
99
|
+
throw new Error(
|
|
100
|
+
`Invalid package manager choice ${packageManager}. Must be one of ${packageManagers.join(
|
|
101
|
+
", "
|
|
102
|
+
)}`
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
const fromLockfile = await findPackageManagerFromLockFile(dest);
|
|
106
|
+
if (fromLockfile) {
|
|
107
|
+
return fromLockfile;
|
|
108
|
+
}
|
|
109
|
+
if (packageManager) {
|
|
110
|
+
return packageManager;
|
|
111
|
+
}
|
|
112
|
+
const fromLockfileInCwd = await findPackageManagerFromLockFile(".");
|
|
113
|
+
if (fromLockfileInCwd) {
|
|
114
|
+
return fromLockfileInCwd;
|
|
115
|
+
}
|
|
116
|
+
const fromUserAgent = findPackageManagerFromUserAgent();
|
|
117
|
+
if (fromUserAgent) {
|
|
118
|
+
return fromUserAgent;
|
|
119
|
+
}
|
|
120
|
+
if (skipInstall) {
|
|
121
|
+
return defaultPackageManager;
|
|
122
|
+
}
|
|
123
|
+
return askForPackageManagerChoice();
|
|
124
|
+
}
|
|
125
|
+
function getInstallCommand(pkgManager) {
|
|
126
|
+
if (pkgManager === "yarn") {
|
|
127
|
+
return "yarn";
|
|
128
|
+
}
|
|
129
|
+
if (pkgManager === "bun") {
|
|
130
|
+
return "bun install";
|
|
131
|
+
}
|
|
132
|
+
return `${pkgManager} install --color always`;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// lib/runtime.ts
|
|
136
|
+
import { logger as logger3 } from "@docusaurus/logger";
|
|
137
|
+
import prompts3 from "prompts";
|
|
138
|
+
import shell2 from "shelljs";
|
|
139
|
+
async function getRuntime() {
|
|
140
|
+
const hasBun = shell2.exec("bun --version", { silent: true }).code === 0;
|
|
141
|
+
const hasDeno = shell2.exec("deno --version", { silent: true }).code === 0;
|
|
142
|
+
if (!hasDeno && !hasBun) {
|
|
143
|
+
return "node";
|
|
144
|
+
}
|
|
145
|
+
const choices = ["node", hasBun && "bun", hasDeno && "deno"].filter((p) => Boolean(p)).map((p) => ({ title: p, value: p }));
|
|
146
|
+
const runtime = await prompts3(
|
|
147
|
+
{
|
|
148
|
+
type: "select",
|
|
149
|
+
name: "runtime",
|
|
150
|
+
message: "Select a runtime...",
|
|
151
|
+
choices
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
onCancel() {
|
|
155
|
+
logger3.info`Falling back to name=${defaultJavaScriptRuntime}`;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
).then((result) => result.runtime);
|
|
159
|
+
return runtime ?? defaultJavaScriptRuntime;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// meta/apollo/package.json
|
|
163
|
+
var package_default = {
|
|
164
|
+
name: "@baeta/template-apollo",
|
|
165
|
+
version: "0.0.0",
|
|
166
|
+
private: true,
|
|
167
|
+
type: "module",
|
|
168
|
+
scripts: {
|
|
169
|
+
build: "baeta build --generate",
|
|
170
|
+
start: "baeta build --watch --generate --onSuccess='node --enable-source-maps --inspect dist/app.js'"
|
|
171
|
+
},
|
|
172
|
+
dependencies: {
|
|
173
|
+
"@apollo/server": "^4.11.2",
|
|
174
|
+
"@baeta/core": "workspace:^",
|
|
175
|
+
"@baeta/errors": "workspace:^",
|
|
176
|
+
"@baeta/extension-complexity": "workspace:^",
|
|
177
|
+
graphql: "^16.9.0"
|
|
178
|
+
},
|
|
179
|
+
devDependencies: {
|
|
180
|
+
"@baeta/cli": "workspace:^",
|
|
181
|
+
"@baeta/compiler": "workspace:^",
|
|
182
|
+
"@baeta/plugin-autoload": "workspace:^",
|
|
183
|
+
"@types/bun": "^1.1.14",
|
|
184
|
+
"@types/deno": "^2.0.0",
|
|
185
|
+
"@types/node": "^22.10.1",
|
|
186
|
+
typescript: "^5.7.2"
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
// meta/yoga/package.json
|
|
191
|
+
var package_default2 = {
|
|
192
|
+
name: "@baeta/template-yoga",
|
|
193
|
+
version: "0.0.0",
|
|
194
|
+
private: true,
|
|
195
|
+
type: "module",
|
|
196
|
+
scripts: {
|
|
197
|
+
build: "baeta build --generate",
|
|
198
|
+
start: "baeta build --watch --generate --onSuccess='node --enable-source-maps --inspect dist/app.js'"
|
|
199
|
+
},
|
|
200
|
+
dependencies: {
|
|
201
|
+
"@baeta/core": "workspace:^",
|
|
202
|
+
"@baeta/errors": "workspace:^",
|
|
203
|
+
"@baeta/extension-complexity": "workspace:^",
|
|
204
|
+
graphql: "^16.9.0",
|
|
205
|
+
"graphql-yoga": "^5.10.4"
|
|
206
|
+
},
|
|
207
|
+
devDependencies: {
|
|
208
|
+
"@baeta/cli": "workspace:^",
|
|
209
|
+
"@baeta/compiler": "workspace:^",
|
|
210
|
+
"@baeta/plugin-autoload": "workspace:^",
|
|
211
|
+
"@types/bun": "^1.1.14",
|
|
212
|
+
"@types/deno": "^2.0.0",
|
|
213
|
+
"@types/node": "^22.10.1",
|
|
214
|
+
typescript: "^5.7.2"
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
// versions.json
|
|
219
|
+
var versions_default = {
|
|
220
|
+
"@baeta/cli": "1.0.5",
|
|
221
|
+
"@baeta/compiler": "0.1.4",
|
|
222
|
+
"@baeta/core": "0.1.5",
|
|
223
|
+
"create-baeta": "0.0.4",
|
|
224
|
+
"@baeta/directives": "1.0.5",
|
|
225
|
+
"@baeta/env": "0.1.3",
|
|
226
|
+
"@baeta/errors": "0.1.4",
|
|
227
|
+
"@baeta/extension-auth": "1.0.5",
|
|
228
|
+
"@baeta/extension-cache": "0.0.5",
|
|
229
|
+
"@baeta/extension-cache-cloudflare": "0.0.5",
|
|
230
|
+
"@baeta/extension-cache-keyv": "0.0.5",
|
|
231
|
+
"@baeta/extension-cache-redis": "0.0.5",
|
|
232
|
+
"@baeta/extension-cache-upstash": "0.0.5",
|
|
233
|
+
"@baeta/extension-complexity": "0.0.4",
|
|
234
|
+
"@baeta/generator": "0.1.5",
|
|
235
|
+
"@baeta/generator-sdk": "0.1.5",
|
|
236
|
+
"@baeta/plugin": "0.1.4",
|
|
237
|
+
"@baeta/plugin-autoload": "0.1.5",
|
|
238
|
+
"@baeta/plugin-cloudflare": "1.0.7",
|
|
239
|
+
"@baeta/plugin-directives": "1.0.6",
|
|
240
|
+
"@baeta/plugin-exec": "0.1.5",
|
|
241
|
+
"@baeta/plugin-gitignore": "0.1.5",
|
|
242
|
+
"@baeta/plugin-graphql": "0.1.5",
|
|
243
|
+
"@baeta/plugin-pagination": "0.1.5",
|
|
244
|
+
"@baeta/plugin-prisma": "0.1.5",
|
|
245
|
+
"@baeta/subscriptions-cloudflare": "0.1.5",
|
|
246
|
+
"@baeta/subscriptions-pubsub": "0.0.2",
|
|
247
|
+
"@baeta/util-encoding": "0.0.4",
|
|
248
|
+
"@baeta/util-env": "0.1.3",
|
|
249
|
+
"@baeta/util-log": "0.1.3",
|
|
250
|
+
"@baeta/util-path": "0.1.4"
|
|
251
|
+
};
|
|
252
|
+
|
|
253
|
+
// lib/package-json.ts
|
|
254
|
+
function createPackageJSON(appName, runtime, packageJson) {
|
|
255
|
+
const meta = structuredClone(packageJson);
|
|
256
|
+
for (const [dep, version] of Object.entries(versions_default)) {
|
|
257
|
+
if (dep in meta.dependencies) {
|
|
258
|
+
meta.dependencies[dep] = version;
|
|
259
|
+
} else if (dep in packageJson.devDependencies) {
|
|
260
|
+
meta.devDependencies[dep] = version;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
if (runtime === "node") {
|
|
264
|
+
meta.devDependencies["@types/bun"] = void 0;
|
|
265
|
+
meta.devDependencies["@types/deno"] = void 0;
|
|
266
|
+
}
|
|
267
|
+
if (runtime === "bun") {
|
|
268
|
+
meta.scripts.start = `baeta generate --watch --run='bun --watch --inspect src/app.ts'`;
|
|
269
|
+
meta.devDependencies["@types/node"] = void 0;
|
|
270
|
+
meta.devDependencies["@types/deno"] = void 0;
|
|
271
|
+
}
|
|
272
|
+
if (runtime === "deno") {
|
|
273
|
+
meta.scripts.start = `baeta generate --watch --run='deno --watch --allow-env --allow-read --allow-net src/app.ts'`;
|
|
274
|
+
meta.devDependencies["@types/node"] = void 0;
|
|
275
|
+
meta.devDependencies["@types/bun"] = void 0;
|
|
276
|
+
}
|
|
277
|
+
meta.name = appName;
|
|
278
|
+
return JSON.stringify(meta, null, 2);
|
|
279
|
+
}
|
|
280
|
+
function getPackageJson(appName, runtime, templateName) {
|
|
281
|
+
if (templateName === "yoga") {
|
|
282
|
+
return createPackageJSON(appName, runtime, package_default2);
|
|
283
|
+
}
|
|
284
|
+
if (templateName === "apollo") {
|
|
285
|
+
return createPackageJSON(appName, runtime, package_default);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
// ../../tools/tsconfig/tsconfig.json
|
|
290
|
+
var tsconfig_default = {
|
|
291
|
+
$schema: "https://json.schemastore.org/tsconfig",
|
|
292
|
+
compilerOptions: {
|
|
293
|
+
target: "es2023",
|
|
294
|
+
lib: [
|
|
295
|
+
"es2024"
|
|
296
|
+
],
|
|
297
|
+
module: "esnext",
|
|
298
|
+
noEmit: true,
|
|
299
|
+
strict: true,
|
|
300
|
+
noImplicitAny: true,
|
|
301
|
+
isolatedModules: true,
|
|
302
|
+
esModuleInterop: true,
|
|
303
|
+
verbatimModuleSyntax: true,
|
|
304
|
+
allowImportingTsExtensions: true,
|
|
305
|
+
allowSyntheticDefaultImports: true,
|
|
306
|
+
skipLibCheck: true,
|
|
307
|
+
forceConsistentCasingInFileNames: true,
|
|
308
|
+
moduleResolution: "bundler"
|
|
309
|
+
}
|
|
310
|
+
};
|
|
311
|
+
|
|
312
|
+
// lib/tsconfig.ts
|
|
313
|
+
function createTsconfig() {
|
|
314
|
+
const current = structuredClone(tsconfig_default);
|
|
315
|
+
return {
|
|
316
|
+
...current,
|
|
317
|
+
compilerOptions: {
|
|
318
|
+
...current.compilerOptions,
|
|
319
|
+
rootDir: "src",
|
|
320
|
+
outDir: "dist",
|
|
321
|
+
noEmit: true,
|
|
322
|
+
emitDeclarationOnly: false
|
|
323
|
+
},
|
|
324
|
+
exclude: ["baeta.ts"]
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// lib/templates.ts
|
|
329
|
+
import path3, { join } from "node:path";
|
|
330
|
+
import { fileURLToPath } from "node:url";
|
|
331
|
+
import { logger as logger4 } from "@docusaurus/logger";
|
|
332
|
+
import fs3 from "fs-extra";
|
|
333
|
+
import prompts4 from "prompts";
|
|
334
|
+
var recommendedTemplate = "yoga";
|
|
335
|
+
var templatesDir = fileURLToPath(new URL("../templates", import.meta.url));
|
|
336
|
+
async function readTemplates() {
|
|
337
|
+
const dirContents = await fs3.readdir(templatesDir);
|
|
338
|
+
const templates = dirContents.filter((template) => template !== "shared").map((template) => ({
|
|
339
|
+
name: template,
|
|
340
|
+
path: path3.join(templatesDir, template)
|
|
341
|
+
}));
|
|
342
|
+
return templates.sort(
|
|
343
|
+
(a, b) => Number(a.name !== recommendedTemplate) - Number(b.name !== recommendedTemplate)
|
|
344
|
+
);
|
|
345
|
+
}
|
|
346
|
+
function createTemplateChoices(templates) {
|
|
347
|
+
function makeNameAndValueChoice(value) {
|
|
348
|
+
if (typeof value === "string") {
|
|
349
|
+
return { title: value, value };
|
|
350
|
+
}
|
|
351
|
+
return { title: value.name, value };
|
|
352
|
+
}
|
|
353
|
+
return templates.map((template) => makeNameAndValueChoice(template));
|
|
354
|
+
}
|
|
355
|
+
async function askTemplateChoice({
|
|
356
|
+
templates
|
|
357
|
+
}) {
|
|
358
|
+
return prompts4(
|
|
359
|
+
{
|
|
360
|
+
type: "select",
|
|
361
|
+
name: "template",
|
|
362
|
+
message: "Select a template below...",
|
|
363
|
+
choices: createTemplateChoices(templates)
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
onCancel() {
|
|
367
|
+
logger4.error("A choice is required.");
|
|
368
|
+
process.exit(1);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
).then((result) => {
|
|
372
|
+
return result.template;
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
async function fetchGitignore() {
|
|
376
|
+
try {
|
|
377
|
+
const response = await fetch(gitignoreUrl);
|
|
378
|
+
if (!response.ok) {
|
|
379
|
+
throw new Error(`Failed to fetch gitignore: ${response.statusText}`);
|
|
380
|
+
}
|
|
381
|
+
return response.text();
|
|
382
|
+
} catch (error) {
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
async function getTemplate(reqTemplate) {
|
|
386
|
+
const templates = await readTemplates();
|
|
387
|
+
const userProvided = reqTemplate ? templates.find((t) => t.name === reqTemplate) : null;
|
|
388
|
+
const template = userProvided ?? await askTemplateChoice({ templates });
|
|
389
|
+
if (!template) {
|
|
390
|
+
throw new Error("Template not found");
|
|
391
|
+
}
|
|
392
|
+
return template;
|
|
393
|
+
}
|
|
394
|
+
async function copyTemplate(appName, runtime, template, dest) {
|
|
395
|
+
await fs3.copy(path3.join(templatesDir, "shared"), dest);
|
|
396
|
+
await fs3.copy(template.path, dest, {
|
|
397
|
+
filter: async (filePath) => !(await fs3.lstat(filePath)).isSymbolicLink()
|
|
398
|
+
});
|
|
399
|
+
const packageJson = getPackageJson(appName, runtime, template.name);
|
|
400
|
+
if (packageJson) {
|
|
401
|
+
await fs3.writeFile(join(dest, "package.json"), packageJson);
|
|
402
|
+
}
|
|
403
|
+
await fs3.writeFile(join(dest, "tsconfig.json"), JSON.stringify(createTsconfig(), null, 2));
|
|
404
|
+
const gitignore = await fetchGitignore();
|
|
405
|
+
if (gitignore) {
|
|
406
|
+
await fs3.writeFile(join(dest, ".gitignore"), gitignore);
|
|
407
|
+
}
|
|
408
|
+
const hasRuntimeEntry = await fs3.pathExists(join(dest, "src", `app.${runtime}.ts`));
|
|
409
|
+
if (hasRuntimeEntry) {
|
|
410
|
+
await fs3.copyFile(join(dest, "src", `app.${runtime}.ts`), join(dest, "src", "app.ts"));
|
|
411
|
+
await Promise.all(
|
|
412
|
+
runtimes.map((r) => fs3.remove(join(dest, "src", `app.${r}.ts`)).catch(() => {
|
|
413
|
+
}))
|
|
414
|
+
);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
// lib/handler.ts
|
|
419
|
+
import path4 from "node:path";
|
|
420
|
+
import { logger as logger5 } from "@docusaurus/logger";
|
|
421
|
+
import shell3 from "shelljs";
|
|
422
|
+
import supportsColor from "supports-color";
|
|
423
|
+
async function handler(args) {
|
|
424
|
+
const appName = await getAppName(args.appName, args.rootDir);
|
|
425
|
+
const dest = path4.resolve(args.rootDir, appName);
|
|
426
|
+
const template = await getTemplate(args.template);
|
|
427
|
+
const runtime = await getRuntime();
|
|
428
|
+
logger5.info("Creating new Baeta project...");
|
|
429
|
+
try {
|
|
430
|
+
await copyTemplate(appName, runtime, template, dest);
|
|
431
|
+
} catch (err) {
|
|
432
|
+
logger5.error`Copying Baeta template name=${template.name} failed!`;
|
|
433
|
+
throw err;
|
|
434
|
+
}
|
|
435
|
+
const pkgManager = await getPackageManager(dest, args);
|
|
436
|
+
if (!args.skipInstall) {
|
|
437
|
+
shell3.cd(dest);
|
|
438
|
+
logger5.info`Installing dependencies with name=${pkgManager}...`;
|
|
439
|
+
const result = shell3.exec(getInstallCommand(pkgManager), {
|
|
440
|
+
env: {
|
|
441
|
+
...process.env,
|
|
442
|
+
...supportsColor.stdout ? { FORCE_COLOR: "1" } : {}
|
|
443
|
+
}
|
|
444
|
+
});
|
|
445
|
+
if (result.code !== 0) {
|
|
446
|
+
console.log("Dependency installation failed.");
|
|
447
|
+
logger5.error("Dependency installation failed.");
|
|
448
|
+
logger5.info`The app directory has already been created, and you can retry by typing:
|
|
449
|
+
|
|
450
|
+
code=${`cd ${dest}`}
|
|
451
|
+
code=${`${pkgManager} install`}`;
|
|
452
|
+
process.exit(0);
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
const useNpm = pkgManager === "npm";
|
|
456
|
+
const useBun = pkgManager === "bun";
|
|
457
|
+
const useRunCommand = useNpm || useBun;
|
|
458
|
+
logger5.success`Created name=${dest}.`;
|
|
459
|
+
logger5.info`Inside that directory, you can run several commands:
|
|
460
|
+
|
|
461
|
+
code=${`${pkgManager} start`}
|
|
462
|
+
Starts the development server.
|
|
463
|
+
|
|
464
|
+
code=${`${pkgManager} ${useRunCommand ? "run " : ""}build`}
|
|
465
|
+
Bundles your server application.
|
|
466
|
+
|
|
467
|
+
We recommend that you begin by typing:
|
|
468
|
+
|
|
469
|
+
code=${`cd ${dest}`}
|
|
470
|
+
code=${`${pkgManager} start`}
|
|
471
|
+
`;
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
export {
|
|
475
|
+
defaultPackageManager,
|
|
476
|
+
lockfileNames,
|
|
477
|
+
packageManagers,
|
|
478
|
+
runtimes,
|
|
479
|
+
defaultJavaScriptRuntime,
|
|
480
|
+
gitignoreUrl,
|
|
481
|
+
getAppName,
|
|
482
|
+
getPackageManager,
|
|
483
|
+
getInstallCommand,
|
|
484
|
+
getRuntime,
|
|
485
|
+
getPackageJson,
|
|
486
|
+
createTsconfig,
|
|
487
|
+
getTemplate,
|
|
488
|
+
copyTemplate,
|
|
489
|
+
handler
|
|
490
|
+
};
|
|
491
|
+
//# sourceMappingURL=chunk-R4KUDDY2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../lib/constants.ts","../lib/app-name.ts","../lib/package-manager.ts","../lib/runtime.ts","../meta/apollo/package.json","../meta/yoga/package.json","../versions.json","../lib/package-json.ts","../../../tools/tsconfig/tsconfig.json","../lib/tsconfig.ts","../lib/templates.ts","../lib/handler.ts"],"sourcesContent":["export const defaultPackageManager = 'npm';\n\nexport const lockfileNames = {\n\tnpm: 'package-lock.json',\n\tyarn: 'yarn.lock',\n\tpnpm: 'pnpm-lock.yaml',\n\tbun: 'bun.lockb',\n};\n\nexport const packageManagers = Object.keys(lockfileNames) as PackageManager[];\n\nexport type PackageManager = keyof typeof lockfileNames;\n\nexport const runtimes = ['node', 'deno', 'bun'] as const;\n\nexport type JavaScriptRuntime = (typeof runtimes)[number];\n\nexport const defaultJavaScriptRuntime = 'node';\n\nexport const gitignoreUrl =\n\t'https://raw.githubusercontent.com/github/gitignore/refs/heads/main/Node.gitignore';\n","import path from 'node:path';\nimport { logger } from '@docusaurus/logger';\nimport fs from 'fs-extra';\nimport prompts from 'prompts';\n\nexport async function getAppName(reqName: string | undefined, rootDir: string): Promise<string> {\n\tasync function validateAppName(appName: string) {\n\t\tif (!appName) {\n\t\t\treturn 'An app name is required.';\n\t\t}\n\t\tconst dest = path.resolve(rootDir, appName);\n\t\tif (await fs.pathExists(dest)) {\n\t\t\treturn logger.interpolate`Directory already exists at path=${dest}!`;\n\t\t}\n\t\treturn true;\n\t}\n\n\tif (reqName) {\n\t\tconst res = await validateAppName(reqName);\n\t\tif (typeof res === 'string') {\n\t\t\tthrow new Error(res);\n\t\t}\n\t\treturn reqName;\n\t}\n\n\treturn prompts(\n\t\t{\n\t\t\ttype: 'text',\n\t\t\tname: 'appName',\n\t\t\tmessage: 'What should we name this app?',\n\t\t\tinitial: 'baeta-app',\n\t\t\tvalidate: validateAppName,\n\t\t},\n\t\t{\n\t\t\tonCancel() {\n\t\t\t\tlogger.error('An app name is required.');\n\t\t\t\tprocess.exit(1);\n\t\t\t},\n\t\t},\n\t).then((result) => (result as { appName: string }).appName);\n}\n","import path from 'node:path';\nimport { logger } from '@docusaurus/logger';\nimport fs from 'fs-extra';\nimport prompts from 'prompts';\nimport shell from 'shelljs';\nimport type { CliOptions } from './cli-options.ts';\nimport {\n\ttype PackageManager,\n\tdefaultPackageManager,\n\tlockfileNames,\n\tpackageManagers,\n} from './constants.ts';\n\nasync function findPackageManagerFromLockFile(\n\trootDir: string,\n): Promise<PackageManager | undefined> {\n\tfor (const packageManager of packageManagers) {\n\t\tconst lockFilePath = path.join(rootDir, lockfileNames[packageManager]);\n\t\tif (await fs.pathExists(lockFilePath)) {\n\t\t\treturn packageManager;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction findPackageManagerFromUserAgent(): PackageManager | undefined {\n\treturn packageManagers.find((packageManager) =>\n\t\tprocess.env.npm_config_user_agent?.startsWith(packageManager),\n\t);\n}\n\nasync function askForPackageManagerChoice(): Promise<PackageManager> {\n\tconst hasYarn = shell.exec('yarn --version', { silent: true }).code === 0;\n\tconst hasPnpm = shell.exec('pnpm --version', { silent: true }).code === 0;\n\tconst hasBun = shell.exec('bun --version', { silent: true }).code === 0;\n\n\tif (!hasYarn && !hasPnpm && !hasBun) {\n\t\treturn 'npm';\n\t}\n\tconst choices = ['npm', hasYarn && 'yarn', hasPnpm && 'pnpm', hasBun && 'bun']\n\t\t.filter((p): p is string => Boolean(p))\n\t\t.map((p) => ({ title: p, value: p }));\n\n\tconst manager = await prompts(\n\t\t{\n\t\t\ttype: 'select',\n\t\t\tname: 'packageManager',\n\t\t\tmessage: 'Select a package manager...',\n\t\t\tchoices,\n\t\t},\n\t\t{\n\t\t\tonCancel() {\n\t\t\t\tlogger.info`Falling back to name=${defaultPackageManager}`;\n\t\t\t},\n\t\t},\n\t).then((result) => (result as { packageManager?: PackageManager }).packageManager);\n\n\treturn manager ?? defaultPackageManager;\n}\n\nexport async function getPackageManager(\n\tdest: string,\n\t{ packageManager, skipInstall }: CliOptions,\n): Promise<PackageManager> {\n\tif (packageManager && !packageManagers.includes(packageManager)) {\n\t\tthrow new Error(\n\t\t\t`Invalid package manager choice ${packageManager}. Must be one of ${packageManagers.join(\n\t\t\t\t', ',\n\t\t\t)}`,\n\t\t);\n\t}\n\n\tconst fromLockfile = await findPackageManagerFromLockFile(dest);\n\n\tif (fromLockfile) {\n\t\treturn fromLockfile;\n\t}\n\n\tif (packageManager) {\n\t\treturn packageManager;\n\t}\n\n\tconst fromLockfileInCwd = await findPackageManagerFromLockFile('.');\n\n\tif (fromLockfileInCwd) {\n\t\treturn fromLockfileInCwd;\n\t}\n\n\tconst fromUserAgent = findPackageManagerFromUserAgent();\n\n\tif (fromUserAgent) {\n\t\treturn fromUserAgent;\n\t}\n\n\tif (skipInstall) {\n\t\treturn defaultPackageManager;\n\t}\n\n\treturn askForPackageManagerChoice();\n}\n\nexport function getInstallCommand(pkgManager: PackageManager): string {\n\tif (pkgManager === 'yarn') {\n\t\treturn 'yarn';\n\t}\n\tif (pkgManager === 'bun') {\n\t\treturn 'bun install';\n\t}\n\treturn `${pkgManager} install --color always`;\n}\n","import { logger } from '@docusaurus/logger';\nimport prompts from 'prompts';\nimport shell from 'shelljs';\nimport { type JavaScriptRuntime, defaultJavaScriptRuntime } from './constants.ts';\n\nexport async function getRuntime(): Promise<JavaScriptRuntime> {\n\tconst hasBun = shell.exec('bun --version', { silent: true }).code === 0;\n\tconst hasDeno = shell.exec('deno --version', { silent: true }).code === 0;\n\n\tif (!hasDeno && !hasBun) {\n\t\treturn 'node';\n\t}\n\tconst choices = ['node', hasBun && 'bun', hasDeno && 'deno']\n\t\t.filter((p): p is string => Boolean(p))\n\t\t.map((p) => ({ title: p, value: p }));\n\n\tconst runtime = await prompts(\n\t\t{\n\t\t\ttype: 'select',\n\t\t\tname: 'runtime',\n\t\t\tmessage: 'Select a runtime...',\n\t\t\tchoices,\n\t\t},\n\t\t{\n\t\t\tonCancel() {\n\t\t\t\tlogger.info`Falling back to name=${defaultJavaScriptRuntime}`;\n\t\t\t},\n\t\t},\n\t).then((result) => (result as { runtime?: JavaScriptRuntime }).runtime);\n\n\treturn runtime ?? defaultJavaScriptRuntime;\n}\n","{\n \"name\": \"@baeta/template-apollo\",\n \"version\": \"0.0.0\",\n \"private\": true,\n \"type\": \"module\",\n \"scripts\": {\n \"build\": \"baeta build --generate\",\n \"start\": \"baeta build --watch --generate --onSuccess='node --enable-source-maps --inspect dist/app.js'\"\n },\n \"dependencies\": {\n \"@apollo/server\": \"^4.11.2\",\n \"@baeta/core\": \"workspace:^\",\n \"@baeta/errors\": \"workspace:^\",\n \"@baeta/extension-complexity\": \"workspace:^\",\n \"graphql\": \"^16.9.0\"\n },\n \"devDependencies\": {\n \"@baeta/cli\": \"workspace:^\",\n \"@baeta/compiler\": \"workspace:^\",\n \"@baeta/plugin-autoload\": \"workspace:^\",\n \"@types/bun\": \"^1.1.14\",\n \"@types/deno\": \"^2.0.0\",\n \"@types/node\": \"^22.10.1\",\n \"typescript\": \"^5.7.2\"\n }\n}\n","{\n \"name\": \"@baeta/template-yoga\",\n \"version\": \"0.0.0\",\n \"private\": true,\n \"type\": \"module\",\n \"scripts\": {\n \"build\": \"baeta build --generate\",\n \"start\": \"baeta build --watch --generate --onSuccess='node --enable-source-maps --inspect dist/app.js'\"\n },\n \"dependencies\": {\n \"@baeta/core\": \"workspace:^\",\n \"@baeta/errors\": \"workspace:^\",\n \"@baeta/extension-complexity\": \"workspace:^\",\n \"graphql\": \"^16.9.0\",\n \"graphql-yoga\": \"^5.10.4\"\n },\n \"devDependencies\": {\n \"@baeta/cli\": \"workspace:^\",\n \"@baeta/compiler\": \"workspace:^\",\n \"@baeta/plugin-autoload\": \"workspace:^\",\n \"@types/bun\": \"^1.1.14\",\n \"@types/deno\": \"^2.0.0\",\n \"@types/node\": \"^22.10.1\",\n \"typescript\": \"^5.7.2\"\n }\n}\n","{\n \"@baeta/cli\": \"1.0.5\",\n \"@baeta/compiler\": \"0.1.4\",\n \"@baeta/core\": \"0.1.5\",\n \"create-baeta\": \"0.0.4\",\n \"@baeta/directives\": \"1.0.5\",\n \"@baeta/env\": \"0.1.3\",\n \"@baeta/errors\": \"0.1.4\",\n \"@baeta/extension-auth\": \"1.0.5\",\n \"@baeta/extension-cache\": \"0.0.5\",\n \"@baeta/extension-cache-cloudflare\": \"0.0.5\",\n \"@baeta/extension-cache-keyv\": \"0.0.5\",\n \"@baeta/extension-cache-redis\": \"0.0.5\",\n \"@baeta/extension-cache-upstash\": \"0.0.5\",\n \"@baeta/extension-complexity\": \"0.0.4\",\n \"@baeta/generator\": \"0.1.5\",\n \"@baeta/generator-sdk\": \"0.1.5\",\n \"@baeta/plugin\": \"0.1.4\",\n \"@baeta/plugin-autoload\": \"0.1.5\",\n \"@baeta/plugin-cloudflare\": \"1.0.7\",\n \"@baeta/plugin-directives\": \"1.0.6\",\n \"@baeta/plugin-exec\": \"0.1.5\",\n \"@baeta/plugin-gitignore\": \"0.1.5\",\n \"@baeta/plugin-graphql\": \"0.1.5\",\n \"@baeta/plugin-pagination\": \"0.1.5\",\n \"@baeta/plugin-prisma\": \"0.1.5\",\n \"@baeta/subscriptions-cloudflare\": \"0.1.5\",\n \"@baeta/subscriptions-pubsub\": \"0.0.2\",\n \"@baeta/util-encoding\": \"0.0.4\",\n \"@baeta/util-env\": \"0.1.3\",\n \"@baeta/util-log\": \"0.1.3\",\n \"@baeta/util-path\": \"0.1.4\"\n}","import apolloPackageJson from '../meta/apollo/package.json';\nimport yogaPackageJson from '../meta/yoga/package.json';\nimport dependenciesVersions from '../versions.json';\nimport type { JavaScriptRuntime } from './constants.ts';\n\nfunction createPackageJSON(\n\tappName: string,\n\truntime: JavaScriptRuntime,\n\tpackageJson: {\n\t\tname: string;\n\t\tscripts: Record<string, string | undefined>;\n\t\tdependencies: Record<string, string | undefined>;\n\t\tdevDependencies: Record<string, string | undefined>;\n\t},\n) {\n\tconst meta = structuredClone(packageJson);\n\n\tfor (const [dep, version] of Object.entries(dependenciesVersions)) {\n\t\tif (dep in meta.dependencies) {\n\t\t\tmeta.dependencies[dep] = version;\n\t\t} else if (dep in packageJson.devDependencies) {\n\t\t\tmeta.devDependencies[dep] = version;\n\t\t}\n\t}\n\n\tif (runtime === 'node') {\n\t\tmeta.devDependencies['@types/bun'] = undefined;\n\t\tmeta.devDependencies['@types/deno'] = undefined;\n\t}\n\n\tif (runtime === 'bun') {\n\t\tmeta.scripts.start = `baeta generate --watch --run='bun --watch --inspect src/app.ts'`;\n\t\tmeta.devDependencies['@types/node'] = undefined;\n\t\tmeta.devDependencies['@types/deno'] = undefined;\n\t}\n\n\tif (runtime === 'deno') {\n\t\tmeta.scripts.start = `baeta generate --watch --run='deno --watch --allow-env --allow-read --allow-net src/app.ts'`;\n\t\tmeta.devDependencies['@types/node'] = undefined;\n\t\tmeta.devDependencies['@types/bun'] = undefined;\n\t}\n\n\tmeta.name = appName;\n\n\treturn JSON.stringify(meta, null, 2);\n}\n\nexport function getPackageJson(appName: string, runtime: JavaScriptRuntime, templateName: string) {\n\tif (templateName === 'yoga') {\n\t\treturn createPackageJSON(appName, runtime, yogaPackageJson);\n\t}\n\n\tif (templateName === 'apollo') {\n\t\treturn createPackageJSON(appName, runtime, apolloPackageJson);\n\t}\n}\n","{\n \"$schema\": \"https://json.schemastore.org/tsconfig\",\n \"compilerOptions\": {\n \"target\": \"es2023\",\n \"lib\": [\n \"es2024\"\n ],\n \"module\": \"esnext\",\n \"noEmit\": true,\n \"strict\": true,\n \"noImplicitAny\": true,\n \"isolatedModules\": true,\n \"esModuleInterop\": true,\n \"verbatimModuleSyntax\": true,\n \"allowImportingTsExtensions\": true,\n \"allowSyntheticDefaultImports\": true,\n \"skipLibCheck\": true,\n \"forceConsistentCasingInFileNames\": true,\n \"moduleResolution\": \"bundler\"\n }\n}\n","import tsconfig from '../../../tools/tsconfig/tsconfig.json';\n\nexport function createTsconfig() {\n\tconst current = structuredClone(tsconfig);\n\n\treturn {\n\t\t...current,\n\t\tcompilerOptions: {\n\t\t\t...current.compilerOptions,\n\t\t\trootDir: 'src',\n\t\t\toutDir: 'dist',\n\t\t\tnoEmit: true,\n\t\t\temitDeclarationOnly: false,\n\t\t},\n\t\texclude: ['baeta.ts'],\n\t};\n}\n","import path, { join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { logger } from '@docusaurus/logger';\nimport fs from 'fs-extra';\nimport prompts, { type Choice } from 'prompts';\nimport { type JavaScriptRuntime, gitignoreUrl, runtimes } from './constants.ts';\nimport { getPackageJson } from './package-json.ts';\nimport { createTsconfig } from './tsconfig.ts';\n\nconst recommendedTemplate = 'yoga';\nconst templatesDir = fileURLToPath(new URL('../templates', import.meta.url));\n\ntype Template = {\n\tname: string;\n\tpath: string;\n\tpackageJsn?: string;\n};\n\nasync function readTemplates(): Promise<Template[]> {\n\tconst dirContents = await fs.readdir(templatesDir);\n\n\tconst templates = dirContents\n\t\t.filter((template) => template !== 'shared')\n\t\t.map((template) => ({\n\t\t\tname: template,\n\t\t\tpath: path.join(templatesDir, template),\n\t\t}));\n\n\treturn templates.sort(\n\t\t(a, b) => Number(a.name !== recommendedTemplate) - Number(b.name !== recommendedTemplate),\n\t);\n}\n\nfunction createTemplateChoices(templates: Template[]): Choice[] {\n\tfunction makeNameAndValueChoice(value: string | Template): Choice {\n\t\tif (typeof value === 'string') {\n\t\t\treturn { title: value, value };\n\t\t}\n\t\treturn { title: value.name, value };\n\t}\n\n\treturn templates.map((template) => makeNameAndValueChoice(template));\n}\n\nasync function askTemplateChoice({\n\ttemplates,\n}: {\n\ttemplates: Template[];\n}) {\n\treturn prompts(\n\t\t{\n\t\t\ttype: 'select',\n\t\t\tname: 'template',\n\t\t\tmessage: 'Select a template below...',\n\t\t\tchoices: createTemplateChoices(templates),\n\t\t},\n\t\t{\n\t\t\tonCancel() {\n\t\t\t\tlogger.error('A choice is required.');\n\t\t\t\tprocess.exit(1);\n\t\t\t},\n\t\t},\n\t).then((result) => {\n\t\treturn (result as { template: Template }).template;\n\t});\n}\nasync function fetchGitignore() {\n\ttry {\n\t\tconst response = await fetch(gitignoreUrl);\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Failed to fetch gitignore: ${response.statusText}`);\n\t\t}\n\n\t\treturn response.text();\n\t} catch (error) {}\n}\n\nexport async function getTemplate(reqTemplate: string | undefined) {\n\tconst templates = await readTemplates();\n\n\tconst userProvided = reqTemplate ? templates.find((t) => t.name === reqTemplate) : null;\n\tconst template = userProvided ?? (await askTemplateChoice({ templates }));\n\n\tif (!template) {\n\t\tthrow new Error('Template not found');\n\t}\n\n\treturn template;\n}\n\nexport async function copyTemplate(\n\tappName: string,\n\truntime: JavaScriptRuntime,\n\ttemplate: Template,\n\tdest: string,\n) {\n\tawait fs.copy(path.join(templatesDir, 'shared'), dest);\n\n\tawait fs.copy(template.path, dest, {\n\t\tfilter: async (filePath) => !(await fs.lstat(filePath)).isSymbolicLink(),\n\t});\n\n\tconst packageJson = getPackageJson(appName, runtime, template.name);\n\n\tif (packageJson) {\n\t\tawait fs.writeFile(join(dest, 'package.json'), packageJson);\n\t}\n\n\tawait fs.writeFile(join(dest, 'tsconfig.json'), JSON.stringify(createTsconfig(), null, 2));\n\n\tconst gitignore = await fetchGitignore();\n\tif (gitignore) {\n\t\tawait fs.writeFile(join(dest, '.gitignore'), gitignore);\n\t}\n\n\tconst hasRuntimeEntry = await fs.pathExists(join(dest, 'src', `app.${runtime}.ts`));\n\n\tif (hasRuntimeEntry) {\n\t\tawait fs.copyFile(join(dest, 'src', `app.${runtime}.ts`), join(dest, 'src', 'app.ts'));\n\t\tawait Promise.all(\n\t\t\truntimes.map((r) => fs.remove(join(dest, 'src', `app.${r}.ts`)).catch(() => {})),\n\t\t);\n\t}\n}\n","import path from 'node:path';\nimport { logger } from '@docusaurus/logger';\nimport shell from 'shelljs';\nimport supportsColor from 'supports-color';\nimport { getAppName } from './app-name.ts';\nimport type { PackageManager } from './constants.ts';\nimport { getInstallCommand, getPackageManager } from './package-manager.ts';\nimport { getRuntime } from './runtime.ts';\nimport { copyTemplate, getTemplate } from './templates.ts';\n\ninterface Args {\n\tpackageManager?: PackageManager;\n\tskipInstall?: boolean;\n\tappName?: string;\n\ttemplate?: string;\n\trootDir: string;\n}\n\nexport async function handler(args: Args) {\n\tconst appName = await getAppName(args.appName, args.rootDir);\n\tconst dest = path.resolve(args.rootDir, appName);\n\n\tconst template = await getTemplate(args.template);\n\n\tconst runtime = await getRuntime();\n\n\tlogger.info('Creating new Baeta project...');\n\n\ttry {\n\t\tawait copyTemplate(appName, runtime, template, dest);\n\t} catch (err) {\n\t\tlogger.error`Copying Baeta template name=${template.name} failed!`;\n\t\tthrow err;\n\t}\n\n\tconst pkgManager = await getPackageManager(dest, args);\n\n\tif (!args.skipInstall) {\n\t\tshell.cd(dest);\n\t\tlogger.info`Installing dependencies with name=${pkgManager}...`;\n\t\tconst result = shell.exec(getInstallCommand(pkgManager), {\n\t\t\tenv: {\n\t\t\t\t...process.env,\n\t\t\t\t...(supportsColor.stdout ? { FORCE_COLOR: '1' } : {}),\n\t\t\t},\n\t\t});\n\n\t\tif (result.code !== 0) {\n\t\t\tconsole.log('Dependency installation failed.');\n\t\t\tlogger.error('Dependency installation failed.');\n\t\t\tlogger.info`The app directory has already been created, and you can retry by typing:\n\ncode=${`cd ${dest}`}\ncode=${`${pkgManager} install`}`;\n\n\t\t\tprocess.exit(0);\n\t\t}\n\t}\n\n\tconst useNpm = pkgManager === 'npm';\n\tconst useBun = pkgManager === 'bun';\n\tconst useRunCommand = useNpm || useBun;\n\n\tlogger.success`Created name=${dest}.`;\n\n\tlogger.info`Inside that directory, you can run several commands:\n\n code=${`${pkgManager} start`}\n Starts the development server.\n\n code=${`${pkgManager} ${useRunCommand ? 'run ' : ''}build`}\n Bundles your server application.\n\nWe recommend that you begin by typing:\n\n code=${`cd ${dest}`}\n code=${`${pkgManager} start`}\n`;\n}\n"],"mappings":"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","names":["path","logger","fs","prompts","path","fs","prompts","logger","logger","prompts","shell","shell","prompts","logger","package_default","package_default","path","logger","fs","prompts","fs","path","prompts","logger","path","logger","shell","path","logger","shell"]}
|
package/dist/cli.js
CHANGED
|
@@ -1,480 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
handler,
|
|
4
|
+
packageManagers
|
|
5
|
+
} from "./chunk-R4KUDDY2.js";
|
|
2
6
|
|
|
3
7
|
// cli.ts
|
|
8
|
+
import { logger } from "@docusaurus/logger";
|
|
4
9
|
import semver from "semver";
|
|
5
10
|
import yargs from "yargs";
|
|
6
11
|
import { hideBin } from "yargs/helpers";
|
|
7
12
|
|
|
8
|
-
// lib/constants.ts
|
|
9
|
-
var defaultPackageManager = "npm";
|
|
10
|
-
var lockfileNames = {
|
|
11
|
-
npm: "package-lock.json",
|
|
12
|
-
yarn: "yarn.lock",
|
|
13
|
-
pnpm: "pnpm-lock.yaml",
|
|
14
|
-
bun: "bun.lockb"
|
|
15
|
-
};
|
|
16
|
-
var packageManagers = Object.keys(lockfileNames);
|
|
17
|
-
var defaultJavaScriptRuntime = "node";
|
|
18
|
-
var gitignoreUrl = "https://raw.githubusercontent.com/github/gitignore/refs/heads/main/Node.gitignore";
|
|
19
|
-
|
|
20
|
-
// lib/handler.ts
|
|
21
|
-
import path4 from "node:path";
|
|
22
|
-
import { logger as logger5 } from "@docusaurus/logger";
|
|
23
|
-
import shell3 from "shelljs";
|
|
24
|
-
import supportsColor from "supports-color";
|
|
25
|
-
|
|
26
|
-
// lib/app-name.ts
|
|
27
|
-
import path from "node:path";
|
|
28
|
-
import { logger } from "@docusaurus/logger";
|
|
29
|
-
import fs from "fs-extra";
|
|
30
|
-
import prompts from "prompts";
|
|
31
|
-
async function getAppName(reqName, rootDir) {
|
|
32
|
-
async function validateAppName(appName) {
|
|
33
|
-
if (!appName) {
|
|
34
|
-
return "An app name is required.";
|
|
35
|
-
}
|
|
36
|
-
const dest = path.resolve(rootDir, appName);
|
|
37
|
-
if (await fs.pathExists(dest)) {
|
|
38
|
-
return logger.interpolate`Directory already exists at path=${dest}!`;
|
|
39
|
-
}
|
|
40
|
-
return true;
|
|
41
|
-
}
|
|
42
|
-
if (reqName) {
|
|
43
|
-
const res = await validateAppName(reqName);
|
|
44
|
-
if (typeof res === "string") {
|
|
45
|
-
throw new Error(res);
|
|
46
|
-
}
|
|
47
|
-
return reqName;
|
|
48
|
-
}
|
|
49
|
-
return prompts(
|
|
50
|
-
{
|
|
51
|
-
type: "text",
|
|
52
|
-
name: "appName",
|
|
53
|
-
message: "What should we name this app?",
|
|
54
|
-
initial: "baeta-app",
|
|
55
|
-
validate: validateAppName
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
onCancel() {
|
|
59
|
-
logger.error("An app name is required.");
|
|
60
|
-
process.exit(1);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
).then((result) => result.appName);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// lib/package-manager.ts
|
|
67
|
-
import path2 from "node:path";
|
|
68
|
-
import { logger as logger2 } from "@docusaurus/logger";
|
|
69
|
-
import fs2 from "fs-extra";
|
|
70
|
-
import prompts2 from "prompts";
|
|
71
|
-
import shell from "shelljs";
|
|
72
|
-
async function findPackageManagerFromLockFile(rootDir) {
|
|
73
|
-
for (const packageManager of packageManagers) {
|
|
74
|
-
const lockFilePath = path2.join(rootDir, lockfileNames[packageManager]);
|
|
75
|
-
if (await fs2.pathExists(lockFilePath)) {
|
|
76
|
-
return packageManager;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
return void 0;
|
|
80
|
-
}
|
|
81
|
-
function findPackageManagerFromUserAgent() {
|
|
82
|
-
return packageManagers.find(
|
|
83
|
-
(packageManager) => process.env.npm_config_user_agent?.startsWith(packageManager)
|
|
84
|
-
);
|
|
85
|
-
}
|
|
86
|
-
async function askForPackageManagerChoice() {
|
|
87
|
-
const hasYarn = shell.exec("yarn --version", { silent: true }).code === 0;
|
|
88
|
-
const hasPnpm = shell.exec("pnpm --version", { silent: true }).code === 0;
|
|
89
|
-
const hasBun = shell.exec("bun --version", { silent: true }).code === 0;
|
|
90
|
-
if (!hasYarn && !hasPnpm && !hasBun) {
|
|
91
|
-
return "npm";
|
|
92
|
-
}
|
|
93
|
-
const choices = ["npm", hasYarn && "yarn", hasPnpm && "pnpm", hasBun && "bun"].filter((p) => Boolean(p)).map((p) => ({ title: p, value: p }));
|
|
94
|
-
const manager = await prompts2(
|
|
95
|
-
{
|
|
96
|
-
type: "select",
|
|
97
|
-
name: "packageManager",
|
|
98
|
-
message: "Select a package manager...",
|
|
99
|
-
choices
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
onCancel() {
|
|
103
|
-
logger2.info`Falling back to name=${defaultPackageManager}`;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
).then((result) => result.packageManager);
|
|
107
|
-
return manager ?? defaultPackageManager;
|
|
108
|
-
}
|
|
109
|
-
async function getPackageManager(dest, { packageManager, skipInstall }) {
|
|
110
|
-
if (packageManager && !packageManagers.includes(packageManager)) {
|
|
111
|
-
throw new Error(
|
|
112
|
-
`Invalid package manager choice ${packageManager}. Must be one of ${packageManagers.join(
|
|
113
|
-
", "
|
|
114
|
-
)}`
|
|
115
|
-
);
|
|
116
|
-
}
|
|
117
|
-
const fromLockfile = await findPackageManagerFromLockFile(dest);
|
|
118
|
-
if (fromLockfile) {
|
|
119
|
-
return fromLockfile;
|
|
120
|
-
}
|
|
121
|
-
if (packageManager) {
|
|
122
|
-
return packageManager;
|
|
123
|
-
}
|
|
124
|
-
const fromLockfileInCwd = await findPackageManagerFromLockFile(".");
|
|
125
|
-
if (fromLockfileInCwd) {
|
|
126
|
-
return fromLockfileInCwd;
|
|
127
|
-
}
|
|
128
|
-
const fromUserAgent = findPackageManagerFromUserAgent();
|
|
129
|
-
if (fromUserAgent) {
|
|
130
|
-
return fromUserAgent;
|
|
131
|
-
}
|
|
132
|
-
if (skipInstall) {
|
|
133
|
-
return defaultPackageManager;
|
|
134
|
-
}
|
|
135
|
-
return askForPackageManagerChoice();
|
|
136
|
-
}
|
|
137
|
-
function getInstallCommand(pkgManager) {
|
|
138
|
-
if (pkgManager === "yarn") {
|
|
139
|
-
return "yarn";
|
|
140
|
-
}
|
|
141
|
-
if (pkgManager === "bun") {
|
|
142
|
-
return "bun install";
|
|
143
|
-
}
|
|
144
|
-
return `${pkgManager} install --color always`;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// lib/runtime.ts
|
|
148
|
-
import { logger as logger3 } from "@docusaurus/logger";
|
|
149
|
-
import prompts3 from "prompts";
|
|
150
|
-
import shell2 from "shelljs";
|
|
151
|
-
async function getRuntime() {
|
|
152
|
-
const hasBun = shell2.exec("bun --version", { silent: true }).code === 0;
|
|
153
|
-
const hasDeno = shell2.exec("deno --version", { silent: true }).code === 0;
|
|
154
|
-
if (!hasDeno && !hasBun) {
|
|
155
|
-
return "node";
|
|
156
|
-
}
|
|
157
|
-
const choices = ["node", hasBun && "bun", hasDeno && "deno"].filter((p) => Boolean(p)).map((p) => ({ title: p, value: p }));
|
|
158
|
-
const runtime = await prompts3(
|
|
159
|
-
{
|
|
160
|
-
type: "select",
|
|
161
|
-
name: "runtime",
|
|
162
|
-
message: "Select a runtime...",
|
|
163
|
-
choices
|
|
164
|
-
},
|
|
165
|
-
{
|
|
166
|
-
onCancel() {
|
|
167
|
-
logger3.info`Falling back to name=${defaultJavaScriptRuntime}`;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
).then((result) => result.runtime);
|
|
171
|
-
return runtime ?? defaultJavaScriptRuntime;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
// lib/templates.ts
|
|
175
|
-
import path3, { join } from "node:path";
|
|
176
|
-
import { fileURLToPath } from "node:url";
|
|
177
|
-
import { logger as logger4 } from "@docusaurus/logger";
|
|
178
|
-
import fs3 from "fs-extra";
|
|
179
|
-
import prompts4 from "prompts";
|
|
180
|
-
|
|
181
|
-
// meta/apollo/package.json
|
|
182
|
-
var package_default = {
|
|
183
|
-
name: "@baeta/template-apollo",
|
|
184
|
-
version: "0.0.0",
|
|
185
|
-
private: true,
|
|
186
|
-
type: "module",
|
|
187
|
-
scripts: {
|
|
188
|
-
build: "baeta build --generate",
|
|
189
|
-
start: "baeta build --watch --generate --onSuccess='node --enable-source-maps --inspect dist/app.js'"
|
|
190
|
-
},
|
|
191
|
-
dependencies: {
|
|
192
|
-
"@apollo/server": "^4.11.2",
|
|
193
|
-
"@baeta/core": "workspace:^",
|
|
194
|
-
"@baeta/errors": "workspace:^",
|
|
195
|
-
"@baeta/extension-complexity": "workspace:^",
|
|
196
|
-
graphql: "^16.9.0"
|
|
197
|
-
},
|
|
198
|
-
devDependencies: {
|
|
199
|
-
"@baeta/cli": "workspace:^",
|
|
200
|
-
"@baeta/compiler": "workspace:^",
|
|
201
|
-
"@baeta/plugin-autoload": "workspace:^",
|
|
202
|
-
"@types/bun": "^1.1.14",
|
|
203
|
-
"@types/deno": "^2.0.0",
|
|
204
|
-
"@types/node": "^22.10.1",
|
|
205
|
-
typescript: "^5.7.2"
|
|
206
|
-
}
|
|
207
|
-
};
|
|
208
|
-
|
|
209
|
-
// meta/yoga/package.json
|
|
210
|
-
var package_default2 = {
|
|
211
|
-
name: "@baeta/template-yoga",
|
|
212
|
-
version: "0.0.0",
|
|
213
|
-
private: true,
|
|
214
|
-
type: "module",
|
|
215
|
-
scripts: {
|
|
216
|
-
build: "baeta build --generate",
|
|
217
|
-
start: "baeta build --watch --generate --onSuccess='node --enable-source-maps --inspect dist/app.js'"
|
|
218
|
-
},
|
|
219
|
-
dependencies: {
|
|
220
|
-
"@baeta/core": "workspace:^",
|
|
221
|
-
"@baeta/errors": "workspace:^",
|
|
222
|
-
"@baeta/extension-complexity": "workspace:^",
|
|
223
|
-
graphql: "^16.9.0",
|
|
224
|
-
"graphql-yoga": "^5.10.4"
|
|
225
|
-
},
|
|
226
|
-
devDependencies: {
|
|
227
|
-
"@baeta/cli": "workspace:^",
|
|
228
|
-
"@baeta/compiler": "workspace:^",
|
|
229
|
-
"@baeta/plugin-autoload": "workspace:^",
|
|
230
|
-
"@types/bun": "^1.1.14",
|
|
231
|
-
"@types/deno": "^2.0.0",
|
|
232
|
-
"@types/node": "^22.10.1",
|
|
233
|
-
typescript: "^5.7.2"
|
|
234
|
-
}
|
|
235
|
-
};
|
|
236
|
-
|
|
237
|
-
// versions.json
|
|
238
|
-
var versions_default = {
|
|
239
|
-
"@baeta/cli": "1.0.5",
|
|
240
|
-
"@baeta/compiler": "0.1.4",
|
|
241
|
-
"@baeta/core": "0.1.5",
|
|
242
|
-
"create-baeta": "0.0.2",
|
|
243
|
-
"@baeta/directives": "1.0.5",
|
|
244
|
-
"@baeta/env": "0.1.3",
|
|
245
|
-
"@baeta/errors": "0.1.4",
|
|
246
|
-
"@baeta/extension-auth": "1.0.5",
|
|
247
|
-
"@baeta/extension-cache": "0.0.5",
|
|
248
|
-
"@baeta/extension-cache-cloudflare": "0.0.5",
|
|
249
|
-
"@baeta/extension-cache-keyv": "0.0.5",
|
|
250
|
-
"@baeta/extension-cache-redis": "0.0.5",
|
|
251
|
-
"@baeta/extension-cache-upstash": "0.0.5",
|
|
252
|
-
"@baeta/extension-complexity": "0.0.4",
|
|
253
|
-
"@baeta/generator": "0.1.5",
|
|
254
|
-
"@baeta/generator-sdk": "0.1.5",
|
|
255
|
-
"@baeta/plugin": "0.1.4",
|
|
256
|
-
"@baeta/plugin-autoload": "0.1.5",
|
|
257
|
-
"@baeta/plugin-cloudflare": "1.0.6",
|
|
258
|
-
"@baeta/plugin-directives": "1.0.6",
|
|
259
|
-
"@baeta/plugin-exec": "0.1.5",
|
|
260
|
-
"@baeta/plugin-gitignore": "0.1.5",
|
|
261
|
-
"@baeta/plugin-graphql": "0.1.5",
|
|
262
|
-
"@baeta/plugin-pagination": "0.1.5",
|
|
263
|
-
"@baeta/plugin-prisma": "0.1.5",
|
|
264
|
-
"@baeta/cloudflare-subscriptions": "0.1.4",
|
|
265
|
-
"@baeta/subscriptions-pubsub": "0.0.2",
|
|
266
|
-
"@baeta/util-encoding": "0.0.4",
|
|
267
|
-
"@baeta/util-env": "0.1.3",
|
|
268
|
-
"@baeta/util-log": "0.1.3",
|
|
269
|
-
"@baeta/util-path": "0.1.4"
|
|
270
|
-
};
|
|
271
|
-
|
|
272
|
-
// lib/package-json.ts
|
|
273
|
-
function createPackageJSON(appName, runtime, packageJson) {
|
|
274
|
-
const meta = structuredClone(packageJson);
|
|
275
|
-
for (const [dep, version2] of Object.entries(versions_default)) {
|
|
276
|
-
if (dep in meta.dependencies) {
|
|
277
|
-
meta.dependencies[dep] = version2;
|
|
278
|
-
} else if (dep in packageJson.devDependencies) {
|
|
279
|
-
meta.devDependencies[dep] = version2;
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
if (runtime === "node") {
|
|
283
|
-
meta.devDependencies["@types/bun"] = void 0;
|
|
284
|
-
meta.devDependencies["@types/deno"] = void 0;
|
|
285
|
-
}
|
|
286
|
-
if (runtime === "bun") {
|
|
287
|
-
meta.scripts.start = `baeta generate --watch --run='bun --watch --inspect src/app.ts'`;
|
|
288
|
-
meta.devDependencies["@types/node"] = void 0;
|
|
289
|
-
meta.devDependencies["@types/deno"] = void 0;
|
|
290
|
-
}
|
|
291
|
-
if (runtime === "deno") {
|
|
292
|
-
meta.scripts.start = `baeta generate --watch --run='deno --watch --allow-env --allow-read --allow-net src/app.ts'`;
|
|
293
|
-
meta.devDependencies["@types/node"] = void 0;
|
|
294
|
-
meta.devDependencies["@types/bun"] = void 0;
|
|
295
|
-
}
|
|
296
|
-
meta.name = appName;
|
|
297
|
-
return JSON.stringify(meta, null, 2);
|
|
298
|
-
}
|
|
299
|
-
function getPackageJson(appName, runtime, templateName) {
|
|
300
|
-
if (templateName === "yoga") {
|
|
301
|
-
return createPackageJSON(appName, runtime, package_default2);
|
|
302
|
-
}
|
|
303
|
-
if (templateName === "apollo") {
|
|
304
|
-
return createPackageJSON(appName, runtime, package_default);
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
// ../../tools/tsconfig/tsconfig.json
|
|
309
|
-
var tsconfig_default = {
|
|
310
|
-
$schema: "https://json.schemastore.org/tsconfig",
|
|
311
|
-
compilerOptions: {
|
|
312
|
-
target: "es2023",
|
|
313
|
-
lib: [
|
|
314
|
-
"es2024"
|
|
315
|
-
],
|
|
316
|
-
module: "esnext",
|
|
317
|
-
noEmit: true,
|
|
318
|
-
strict: true,
|
|
319
|
-
noImplicitAny: true,
|
|
320
|
-
isolatedModules: true,
|
|
321
|
-
esModuleInterop: true,
|
|
322
|
-
verbatimModuleSyntax: true,
|
|
323
|
-
allowImportingTsExtensions: true,
|
|
324
|
-
allowSyntheticDefaultImports: true,
|
|
325
|
-
skipLibCheck: true,
|
|
326
|
-
forceConsistentCasingInFileNames: true,
|
|
327
|
-
moduleResolution: "bundler"
|
|
328
|
-
}
|
|
329
|
-
};
|
|
330
|
-
|
|
331
|
-
// lib/tsconfig.ts
|
|
332
|
-
function createTsconfig() {
|
|
333
|
-
const current = structuredClone(tsconfig_default);
|
|
334
|
-
return {
|
|
335
|
-
...current,
|
|
336
|
-
compilerOptions: {
|
|
337
|
-
...current.compilerOptions,
|
|
338
|
-
rootDir: "src",
|
|
339
|
-
outDir: "dist",
|
|
340
|
-
noEmit: true,
|
|
341
|
-
emitDeclarationOnly: false
|
|
342
|
-
},
|
|
343
|
-
exclude: ["baeta.ts"]
|
|
344
|
-
};
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
// lib/templates.ts
|
|
348
|
-
var recommendedTemplate = "yoga";
|
|
349
|
-
var templatesDir = fileURLToPath(new URL("../templates", import.meta.url));
|
|
350
|
-
async function readTemplates() {
|
|
351
|
-
const dirContents = await fs3.readdir(templatesDir);
|
|
352
|
-
const templates = dirContents.filter((template) => template !== "shared").map((template) => ({
|
|
353
|
-
name: template,
|
|
354
|
-
path: path3.join(templatesDir, template)
|
|
355
|
-
}));
|
|
356
|
-
return templates.sort(
|
|
357
|
-
(a, b) => Number(a.name !== recommendedTemplate) - Number(b.name !== recommendedTemplate)
|
|
358
|
-
);
|
|
359
|
-
}
|
|
360
|
-
function createTemplateChoices(templates) {
|
|
361
|
-
function makeNameAndValueChoice(value) {
|
|
362
|
-
if (typeof value === "string") {
|
|
363
|
-
return { title: value, value };
|
|
364
|
-
}
|
|
365
|
-
return { title: value.name, value };
|
|
366
|
-
}
|
|
367
|
-
return templates.map((template) => makeNameAndValueChoice(template));
|
|
368
|
-
}
|
|
369
|
-
async function askTemplateChoice({
|
|
370
|
-
templates
|
|
371
|
-
}) {
|
|
372
|
-
return prompts4(
|
|
373
|
-
{
|
|
374
|
-
type: "select",
|
|
375
|
-
name: "template",
|
|
376
|
-
message: "Select a template below...",
|
|
377
|
-
choices: createTemplateChoices(templates)
|
|
378
|
-
},
|
|
379
|
-
{
|
|
380
|
-
onCancel() {
|
|
381
|
-
logger4.error("A choice is required.");
|
|
382
|
-
process.exit(1);
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
).then((result) => {
|
|
386
|
-
return result.template;
|
|
387
|
-
});
|
|
388
|
-
}
|
|
389
|
-
async function fetchGitignore() {
|
|
390
|
-
try {
|
|
391
|
-
const response = await fetch(gitignoreUrl);
|
|
392
|
-
if (!response.ok) {
|
|
393
|
-
throw new Error(`Failed to fetch gitignore: ${response.statusText}`);
|
|
394
|
-
}
|
|
395
|
-
return response.text();
|
|
396
|
-
} catch (error) {
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
async function getTemplate(reqTemplate) {
|
|
400
|
-
const templates = await readTemplates();
|
|
401
|
-
const userProvided = reqTemplate ? templates.find((t) => t.name === reqTemplate) : null;
|
|
402
|
-
const template = userProvided ?? await askTemplateChoice({ templates });
|
|
403
|
-
if (!template) {
|
|
404
|
-
throw new Error("Template not found");
|
|
405
|
-
}
|
|
406
|
-
return template;
|
|
407
|
-
}
|
|
408
|
-
async function copyTemplate(appName, runtime, template, dest) {
|
|
409
|
-
await fs3.copy(path3.join(templatesDir, "shared"), dest);
|
|
410
|
-
await fs3.copy(template.path, dest, {
|
|
411
|
-
filter: async (filePath) => !(await fs3.lstat(filePath)).isSymbolicLink()
|
|
412
|
-
});
|
|
413
|
-
const packageJson = getPackageJson(appName, runtime, template.name);
|
|
414
|
-
if (packageJson) {
|
|
415
|
-
await fs3.writeFile(join(dest, "package.json"), packageJson);
|
|
416
|
-
}
|
|
417
|
-
await fs3.writeFile(join(dest, "tsconfig.json"), JSON.stringify(createTsconfig(), null, 2));
|
|
418
|
-
const gitignore = await fetchGitignore();
|
|
419
|
-
if (gitignore) {
|
|
420
|
-
await fs3.writeFile(join(dest, ".gitignore"), gitignore);
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
// lib/handler.ts
|
|
425
|
-
async function handler(args) {
|
|
426
|
-
const appName = await getAppName(args.appName, args.rootDir);
|
|
427
|
-
const dest = path4.resolve(args.rootDir, appName);
|
|
428
|
-
const template = await getTemplate(args.template);
|
|
429
|
-
const runtime = await getRuntime();
|
|
430
|
-
logger5.info("Creating new Baeta project...");
|
|
431
|
-
try {
|
|
432
|
-
await copyTemplate(appName, runtime, template, dest);
|
|
433
|
-
} catch (err) {
|
|
434
|
-
logger5.error`Copying Baeta template name=${template.name} failed!`;
|
|
435
|
-
throw err;
|
|
436
|
-
}
|
|
437
|
-
const pkgManager = await getPackageManager(dest, args);
|
|
438
|
-
if (!args.skipInstall) {
|
|
439
|
-
shell3.cd(dest);
|
|
440
|
-
logger5.info`Installing dependencies with name=${pkgManager}...`;
|
|
441
|
-
const result = shell3.exec(getInstallCommand(pkgManager), {
|
|
442
|
-
env: {
|
|
443
|
-
...process.env,
|
|
444
|
-
...supportsColor.stdout ? { FORCE_COLOR: "1" } : {}
|
|
445
|
-
}
|
|
446
|
-
});
|
|
447
|
-
if (result.code !== 0) {
|
|
448
|
-
console.log("Dependency installation failed.");
|
|
449
|
-
logger5.error("Dependency installation failed.");
|
|
450
|
-
logger5.info`The app directory has already been created, and you can retry by typing:
|
|
451
|
-
|
|
452
|
-
code=${`cd ${dest}`}
|
|
453
|
-
code=${`${pkgManager} install`}`;
|
|
454
|
-
process.exit(0);
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
const useNpm = pkgManager === "npm";
|
|
458
|
-
const useBun = pkgManager === "bun";
|
|
459
|
-
const useRunCommand = useNpm || useBun;
|
|
460
|
-
logger5.success`Created name=${dest}.`;
|
|
461
|
-
logger5.info`Inside that directory, you can run several commands:
|
|
462
|
-
|
|
463
|
-
code=${`${pkgManager} start`}
|
|
464
|
-
Starts the development server.
|
|
465
|
-
|
|
466
|
-
code=${`${pkgManager} ${useRunCommand ? "run " : ""}build`}
|
|
467
|
-
Bundles your server application.
|
|
468
|
-
|
|
469
|
-
We recommend that you begin by typing:
|
|
470
|
-
|
|
471
|
-
code=${`cd ${dest}`}
|
|
472
|
-
code=${`${pkgManager} start`}
|
|
473
|
-
`;
|
|
474
|
-
}
|
|
475
|
-
|
|
476
13
|
// package.json
|
|
477
|
-
var version = "0.0.
|
|
14
|
+
var version = "0.0.4";
|
|
478
15
|
var engines = {
|
|
479
16
|
node: ">=22.12.0"
|
|
480
17
|
};
|
|
@@ -482,12 +19,12 @@ var engines = {
|
|
|
482
19
|
// cli.ts
|
|
483
20
|
var requiredVersion = engines.node;
|
|
484
21
|
if (!semver.satisfies(process.version, requiredVersion)) {
|
|
485
|
-
|
|
486
|
-
|
|
22
|
+
logger.error("Minimum Node.js version not met :(");
|
|
23
|
+
logger.info`You are using Node.js number=${process.version}, Requirement: Node.js number=${requiredVersion}.`;
|
|
487
24
|
process.exit(1);
|
|
488
25
|
}
|
|
489
26
|
process.on("unhandledRejection", (err) => {
|
|
490
|
-
|
|
27
|
+
logger.error(err);
|
|
491
28
|
process.exit(1);
|
|
492
29
|
});
|
|
493
30
|
yargs(hideBin(process.argv)).version(version).command({
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../cli.ts","../lib/constants.ts","../lib/handler.ts","../lib/app-name.ts","../lib/package-manager.ts","../lib/runtime.ts","../lib/templates.ts","../meta/apollo/package.json","../meta/yoga/package.json","../versions.json","../lib/package-json.ts","../../../tools/tsconfig/tsconfig.json","../lib/tsconfig.ts","../package.json"],"sourcesContent":["#!/usr/bin/env node\n\nimport semver from 'semver';\nimport yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\nimport { packageManagers } from './lib/constants.ts';\nimport { handler } from './lib/handler.ts';\nimport { engines, version } from './package.json';\n\nconst requiredVersion = engines.node;\n\nif (!semver.satisfies(process.version, requiredVersion)) {\n\tconsole.log('Minimum Node.js version not met :(');\n\tconsole.info`You are using Node.js number=${process.version}, Requirement: Node.js number=${requiredVersion}.`;\n\tprocess.exit(1);\n}\n\nprocess.on('unhandledRejection', (err) => {\n\tconsole.log(err);\n\tprocess.exit(1);\n});\n\nyargs(hideBin(process.argv))\n\t.version(version)\n\t.command({\n\t\tcommand: '* [appName] [template] [rootDir]',\n\t\tdescribe: 'Initialize Baeta application',\n\t\tbuilder: (yargs) => {\n\t\t\treturn yargs\n\t\t\t\t.option('package-manager', {\n\t\t\t\t\talias: 'p',\n\t\t\t\t\tdescribe: 'The package manager used to install dependencies.',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tchoices: packageManagers,\n\t\t\t\t})\n\t\t\t\t.option('skip-install', {\n\t\t\t\t\talias: 's',\n\t\t\t\t\tdescribe: 'Do not run package manager immediately after scaffolding',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t})\n\t\t\t\t.positional('appName', {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdescribe: 'Name of the app',\n\t\t\t\t})\n\t\t\t\t.positional('template', {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdescribe: 'Template to use',\n\t\t\t\t\tchoices: ['yoga', 'apollo'],\n\t\t\t\t})\n\t\t\t\t.positional('rootDir', {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdescribe: 'Root directory',\n\t\t\t\t\tdefault: '.',\n\t\t\t\t});\n\t\t},\n\t\thandler: (argv) => handler(argv),\n\t})\n\t.showHelpOnFail(true)\n\t.strict()\n\t.help()\n\t.parse();\n","export const defaultPackageManager = 'npm';\n\nexport const lockfileNames = {\n\tnpm: 'package-lock.json',\n\tyarn: 'yarn.lock',\n\tpnpm: 'pnpm-lock.yaml',\n\tbun: 'bun.lockb',\n};\n\nexport const packageManagers = Object.keys(lockfileNames) as PackageManager[];\n\nexport type PackageManager = keyof typeof lockfileNames;\n\nexport type JavaScriptRuntime = 'node' | 'deno' | 'bun';\n\nexport const defaultJavaScriptRuntime = 'node';\n\nexport const gitignoreUrl =\n\t'https://raw.githubusercontent.com/github/gitignore/refs/heads/main/Node.gitignore';\n","import path from 'node:path';\nimport { logger } from '@docusaurus/logger';\nimport shell from 'shelljs';\nimport supportsColor from 'supports-color';\nimport { getAppName } from './app-name.ts';\nimport type { PackageManager } from './constants.ts';\nimport { getInstallCommand, getPackageManager } from './package-manager.ts';\nimport { getRuntime } from './runtime.ts';\nimport { copyTemplate, getTemplate } from './templates.ts';\n\ninterface Args {\n\tpackageManager?: PackageManager;\n\tskipInstall?: boolean;\n\tappName?: string;\n\ttemplate?: string;\n\trootDir: string;\n}\n\nexport async function handler(args: Args) {\n\tconst appName = await getAppName(args.appName, args.rootDir);\n\tconst dest = path.resolve(args.rootDir, appName);\n\n\tconst template = await getTemplate(args.template);\n\n\tconst runtime = await getRuntime();\n\n\tlogger.info('Creating new Baeta project...');\n\n\ttry {\n\t\tawait copyTemplate(appName, runtime, template, dest);\n\t} catch (err) {\n\t\tlogger.error`Copying Baeta template name=${template.name} failed!`;\n\t\tthrow err;\n\t}\n\n\tconst pkgManager = await getPackageManager(dest, args);\n\n\tif (!args.skipInstall) {\n\t\tshell.cd(dest);\n\t\tlogger.info`Installing dependencies with name=${pkgManager}...`;\n\t\tconst result = shell.exec(getInstallCommand(pkgManager), {\n\t\t\tenv: {\n\t\t\t\t...process.env,\n\t\t\t\t...(supportsColor.stdout ? { FORCE_COLOR: '1' } : {}),\n\t\t\t},\n\t\t});\n\n\t\tif (result.code !== 0) {\n\t\t\tconsole.log('Dependency installation failed.');\n\t\t\tlogger.error('Dependency installation failed.');\n\t\t\tlogger.info`The app directory has already been created, and you can retry by typing:\n\ncode=${`cd ${dest}`}\ncode=${`${pkgManager} install`}`;\n\n\t\t\tprocess.exit(0);\n\t\t}\n\t}\n\n\tconst useNpm = pkgManager === 'npm';\n\tconst useBun = pkgManager === 'bun';\n\tconst useRunCommand = useNpm || useBun;\n\n\tlogger.success`Created name=${dest}.`;\n\n\tlogger.info`Inside that directory, you can run several commands:\n\n code=${`${pkgManager} start`}\n Starts the development server.\n\n code=${`${pkgManager} ${useRunCommand ? 'run ' : ''}build`}\n Bundles your server application.\n\nWe recommend that you begin by typing:\n\n code=${`cd ${dest}`}\n code=${`${pkgManager} start`}\n`;\n}\n","import path from 'node:path';\nimport { logger } from '@docusaurus/logger';\nimport fs from 'fs-extra';\nimport prompts from 'prompts';\n\nexport async function getAppName(reqName: string | undefined, rootDir: string): Promise<string> {\n\tasync function validateAppName(appName: string) {\n\t\tif (!appName) {\n\t\t\treturn 'An app name is required.';\n\t\t}\n\t\tconst dest = path.resolve(rootDir, appName);\n\t\tif (await fs.pathExists(dest)) {\n\t\t\treturn logger.interpolate`Directory already exists at path=${dest}!`;\n\t\t}\n\t\treturn true;\n\t}\n\n\tif (reqName) {\n\t\tconst res = await validateAppName(reqName);\n\t\tif (typeof res === 'string') {\n\t\t\tthrow new Error(res);\n\t\t}\n\t\treturn reqName;\n\t}\n\n\treturn prompts(\n\t\t{\n\t\t\ttype: 'text',\n\t\t\tname: 'appName',\n\t\t\tmessage: 'What should we name this app?',\n\t\t\tinitial: 'baeta-app',\n\t\t\tvalidate: validateAppName,\n\t\t},\n\t\t{\n\t\t\tonCancel() {\n\t\t\t\tlogger.error('An app name is required.');\n\t\t\t\tprocess.exit(1);\n\t\t\t},\n\t\t},\n\t).then((result) => (result as { appName: string }).appName);\n}\n","import path from 'node:path';\nimport { logger } from '@docusaurus/logger';\nimport fs from 'fs-extra';\nimport prompts from 'prompts';\nimport shell from 'shelljs';\nimport type { CliOptions } from './cli-options.ts';\nimport {\n\ttype PackageManager,\n\tdefaultPackageManager,\n\tlockfileNames,\n\tpackageManagers,\n} from './constants.ts';\n\nasync function findPackageManagerFromLockFile(\n\trootDir: string,\n): Promise<PackageManager | undefined> {\n\tfor (const packageManager of packageManagers) {\n\t\tconst lockFilePath = path.join(rootDir, lockfileNames[packageManager]);\n\t\tif (await fs.pathExists(lockFilePath)) {\n\t\t\treturn packageManager;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction findPackageManagerFromUserAgent(): PackageManager | undefined {\n\treturn packageManagers.find((packageManager) =>\n\t\tprocess.env.npm_config_user_agent?.startsWith(packageManager),\n\t);\n}\n\nasync function askForPackageManagerChoice(): Promise<PackageManager> {\n\tconst hasYarn = shell.exec('yarn --version', { silent: true }).code === 0;\n\tconst hasPnpm = shell.exec('pnpm --version', { silent: true }).code === 0;\n\tconst hasBun = shell.exec('bun --version', { silent: true }).code === 0;\n\n\tif (!hasYarn && !hasPnpm && !hasBun) {\n\t\treturn 'npm';\n\t}\n\tconst choices = ['npm', hasYarn && 'yarn', hasPnpm && 'pnpm', hasBun && 'bun']\n\t\t.filter((p): p is string => Boolean(p))\n\t\t.map((p) => ({ title: p, value: p }));\n\n\tconst manager = await prompts(\n\t\t{\n\t\t\ttype: 'select',\n\t\t\tname: 'packageManager',\n\t\t\tmessage: 'Select a package manager...',\n\t\t\tchoices,\n\t\t},\n\t\t{\n\t\t\tonCancel() {\n\t\t\t\tlogger.info`Falling back to name=${defaultPackageManager}`;\n\t\t\t},\n\t\t},\n\t).then((result) => (result as { packageManager?: PackageManager }).packageManager);\n\n\treturn manager ?? defaultPackageManager;\n}\n\nexport async function getPackageManager(\n\tdest: string,\n\t{ packageManager, skipInstall }: CliOptions,\n): Promise<PackageManager> {\n\tif (packageManager && !packageManagers.includes(packageManager)) {\n\t\tthrow new Error(\n\t\t\t`Invalid package manager choice ${packageManager}. Must be one of ${packageManagers.join(\n\t\t\t\t', ',\n\t\t\t)}`,\n\t\t);\n\t}\n\n\tconst fromLockfile = await findPackageManagerFromLockFile(dest);\n\n\tif (fromLockfile) {\n\t\treturn fromLockfile;\n\t}\n\n\tif (packageManager) {\n\t\treturn packageManager;\n\t}\n\n\tconst fromLockfileInCwd = await findPackageManagerFromLockFile('.');\n\n\tif (fromLockfileInCwd) {\n\t\treturn fromLockfileInCwd;\n\t}\n\n\tconst fromUserAgent = findPackageManagerFromUserAgent();\n\n\tif (fromUserAgent) {\n\t\treturn fromUserAgent;\n\t}\n\n\tif (skipInstall) {\n\t\treturn defaultPackageManager;\n\t}\n\n\treturn askForPackageManagerChoice();\n}\n\nexport function getInstallCommand(pkgManager: PackageManager): string {\n\tif (pkgManager === 'yarn') {\n\t\treturn 'yarn';\n\t}\n\tif (pkgManager === 'bun') {\n\t\treturn 'bun install';\n\t}\n\treturn `${pkgManager} install --color always`;\n}\n","import { logger } from '@docusaurus/logger';\nimport prompts from 'prompts';\nimport shell from 'shelljs';\nimport { type JavaScriptRuntime, defaultJavaScriptRuntime } from './constants.ts';\n\nexport async function getRuntime(): Promise<JavaScriptRuntime> {\n\tconst hasBun = shell.exec('bun --version', { silent: true }).code === 0;\n\tconst hasDeno = shell.exec('deno --version', { silent: true }).code === 0;\n\n\tif (!hasDeno && !hasBun) {\n\t\treturn 'node';\n\t}\n\tconst choices = ['node', hasBun && 'bun', hasDeno && 'deno']\n\t\t.filter((p): p is string => Boolean(p))\n\t\t.map((p) => ({ title: p, value: p }));\n\n\tconst runtime = await prompts(\n\t\t{\n\t\t\ttype: 'select',\n\t\t\tname: 'runtime',\n\t\t\tmessage: 'Select a runtime...',\n\t\t\tchoices,\n\t\t},\n\t\t{\n\t\t\tonCancel() {\n\t\t\t\tlogger.info`Falling back to name=${defaultJavaScriptRuntime}`;\n\t\t\t},\n\t\t},\n\t).then((result) => (result as { runtime?: JavaScriptRuntime }).runtime);\n\n\treturn runtime ?? defaultJavaScriptRuntime;\n}\n","import path, { join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { logger } from '@docusaurus/logger';\nimport fs from 'fs-extra';\nimport prompts, { type Choice } from 'prompts';\nimport { type JavaScriptRuntime, gitignoreUrl } from './constants.ts';\nimport { getPackageJson } from './package-json.ts';\nimport { createTsconfig } from './tsconfig.ts';\n\nconst recommendedTemplate = 'yoga';\nconst templatesDir = fileURLToPath(new URL('../templates', import.meta.url));\n\ntype Template = {\n\tname: string;\n\tpath: string;\n\tpackageJsn?: string;\n};\n\nasync function readTemplates(): Promise<Template[]> {\n\tconst dirContents = await fs.readdir(templatesDir);\n\n\tconst templates = dirContents\n\t\t.filter((template) => template !== 'shared')\n\t\t.map((template) => ({\n\t\t\tname: template,\n\t\t\tpath: path.join(templatesDir, template),\n\t\t}));\n\n\treturn templates.sort(\n\t\t(a, b) => Number(a.name !== recommendedTemplate) - Number(b.name !== recommendedTemplate),\n\t);\n}\n\nfunction createTemplateChoices(templates: Template[]): Choice[] {\n\tfunction makeNameAndValueChoice(value: string | Template): Choice {\n\t\tif (typeof value === 'string') {\n\t\t\treturn { title: value, value };\n\t\t}\n\t\treturn { title: value.name, value };\n\t}\n\n\treturn templates.map((template) => makeNameAndValueChoice(template));\n}\n\nasync function askTemplateChoice({\n\ttemplates,\n}: {\n\ttemplates: Template[];\n}) {\n\treturn prompts(\n\t\t{\n\t\t\ttype: 'select',\n\t\t\tname: 'template',\n\t\t\tmessage: 'Select a template below...',\n\t\t\tchoices: createTemplateChoices(templates),\n\t\t},\n\t\t{\n\t\t\tonCancel() {\n\t\t\t\tlogger.error('A choice is required.');\n\t\t\t\tprocess.exit(1);\n\t\t\t},\n\t\t},\n\t).then((result) => {\n\t\treturn (result as { template: Template }).template;\n\t});\n}\nasync function fetchGitignore() {\n\ttry {\n\t\tconst response = await fetch(gitignoreUrl);\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Failed to fetch gitignore: ${response.statusText}`);\n\t\t}\n\n\t\treturn response.text();\n\t} catch (error) {}\n}\n\nexport async function getTemplate(reqTemplate: string | undefined) {\n\tconst templates = await readTemplates();\n\n\tconst userProvided = reqTemplate ? templates.find((t) => t.name === reqTemplate) : null;\n\tconst template = userProvided ?? (await askTemplateChoice({ templates }));\n\n\tif (!template) {\n\t\tthrow new Error('Template not found');\n\t}\n\n\treturn template;\n}\n\nexport async function copyTemplate(\n\tappName: string,\n\truntime: JavaScriptRuntime,\n\ttemplate: Template,\n\tdest: string,\n) {\n\tawait fs.copy(path.join(templatesDir, 'shared'), dest);\n\n\tawait fs.copy(template.path, dest, {\n\t\tfilter: async (filePath) => !(await fs.lstat(filePath)).isSymbolicLink(),\n\t});\n\n\tconst packageJson = getPackageJson(appName, runtime, template.name);\n\n\tif (packageJson) {\n\t\tawait fs.writeFile(join(dest, 'package.json'), packageJson);\n\t}\n\n\tawait fs.writeFile(join(dest, 'tsconfig.json'), JSON.stringify(createTsconfig(), null, 2));\n\n\tconst gitignore = await fetchGitignore();\n\tif (gitignore) {\n\t\tawait fs.writeFile(join(dest, '.gitignore'), gitignore);\n\t}\n}\n","{\n \"name\": \"@baeta/template-apollo\",\n \"version\": \"0.0.0\",\n \"private\": true,\n \"type\": \"module\",\n \"scripts\": {\n \"build\": \"baeta build --generate\",\n \"start\": \"baeta build --watch --generate --onSuccess='node --enable-source-maps --inspect dist/app.js'\"\n },\n \"dependencies\": {\n \"@apollo/server\": \"^4.11.2\",\n \"@baeta/core\": \"workspace:^\",\n \"@baeta/errors\": \"workspace:^\",\n \"@baeta/extension-complexity\": \"workspace:^\",\n \"graphql\": \"^16.9.0\"\n },\n \"devDependencies\": {\n \"@baeta/cli\": \"workspace:^\",\n \"@baeta/compiler\": \"workspace:^\",\n \"@baeta/plugin-autoload\": \"workspace:^\",\n \"@types/bun\": \"^1.1.14\",\n \"@types/deno\": \"^2.0.0\",\n \"@types/node\": \"^22.10.1\",\n \"typescript\": \"^5.7.2\"\n }\n}\n","{\n \"name\": \"@baeta/template-yoga\",\n \"version\": \"0.0.0\",\n \"private\": true,\n \"type\": \"module\",\n \"scripts\": {\n \"build\": \"baeta build --generate\",\n \"start\": \"baeta build --watch --generate --onSuccess='node --enable-source-maps --inspect dist/app.js'\"\n },\n \"dependencies\": {\n \"@baeta/core\": \"workspace:^\",\n \"@baeta/errors\": \"workspace:^\",\n \"@baeta/extension-complexity\": \"workspace:^\",\n \"graphql\": \"^16.9.0\",\n \"graphql-yoga\": \"^5.10.4\"\n },\n \"devDependencies\": {\n \"@baeta/cli\": \"workspace:^\",\n \"@baeta/compiler\": \"workspace:^\",\n \"@baeta/plugin-autoload\": \"workspace:^\",\n \"@types/bun\": \"^1.1.14\",\n \"@types/deno\": \"^2.0.0\",\n \"@types/node\": \"^22.10.1\",\n \"typescript\": \"^5.7.2\"\n }\n}\n","{\n \"@baeta/cli\": \"1.0.5\",\n \"@baeta/compiler\": \"0.1.4\",\n \"@baeta/core\": \"0.1.5\",\n \"create-baeta\": \"0.0.2\",\n \"@baeta/directives\": \"1.0.5\",\n \"@baeta/env\": \"0.1.3\",\n \"@baeta/errors\": \"0.1.4\",\n \"@baeta/extension-auth\": \"1.0.5\",\n \"@baeta/extension-cache\": \"0.0.5\",\n \"@baeta/extension-cache-cloudflare\": \"0.0.5\",\n \"@baeta/extension-cache-keyv\": \"0.0.5\",\n \"@baeta/extension-cache-redis\": \"0.0.5\",\n \"@baeta/extension-cache-upstash\": \"0.0.5\",\n \"@baeta/extension-complexity\": \"0.0.4\",\n \"@baeta/generator\": \"0.1.5\",\n \"@baeta/generator-sdk\": \"0.1.5\",\n \"@baeta/plugin\": \"0.1.4\",\n \"@baeta/plugin-autoload\": \"0.1.5\",\n \"@baeta/plugin-cloudflare\": \"1.0.6\",\n \"@baeta/plugin-directives\": \"1.0.6\",\n \"@baeta/plugin-exec\": \"0.1.5\",\n \"@baeta/plugin-gitignore\": \"0.1.5\",\n \"@baeta/plugin-graphql\": \"0.1.5\",\n \"@baeta/plugin-pagination\": \"0.1.5\",\n \"@baeta/plugin-prisma\": \"0.1.5\",\n \"@baeta/cloudflare-subscriptions\": \"0.1.4\",\n \"@baeta/subscriptions-pubsub\": \"0.0.2\",\n \"@baeta/util-encoding\": \"0.0.4\",\n \"@baeta/util-env\": \"0.1.3\",\n \"@baeta/util-log\": \"0.1.3\",\n \"@baeta/util-path\": \"0.1.4\"\n}","import apolloPackageJson from '../meta/apollo/package.json';\nimport yogaPackageJson from '../meta/yoga/package.json';\nimport dependenciesVersions from '../versions.json';\nimport type { JavaScriptRuntime } from './constants.ts';\n\nfunction createPackageJSON(\n\tappName: string,\n\truntime: JavaScriptRuntime,\n\tpackageJson: {\n\t\tname: string;\n\t\tscripts: Record<string, string | undefined>;\n\t\tdependencies: Record<string, string | undefined>;\n\t\tdevDependencies: Record<string, string | undefined>;\n\t},\n) {\n\tconst meta = structuredClone(packageJson);\n\n\tfor (const [dep, version] of Object.entries(dependenciesVersions)) {\n\t\tif (dep in meta.dependencies) {\n\t\t\tmeta.dependencies[dep] = version;\n\t\t} else if (dep in packageJson.devDependencies) {\n\t\t\tmeta.devDependencies[dep] = version;\n\t\t}\n\t}\n\n\tif (runtime === 'node') {\n\t\tmeta.devDependencies['@types/bun'] = undefined;\n\t\tmeta.devDependencies['@types/deno'] = undefined;\n\t}\n\n\tif (runtime === 'bun') {\n\t\tmeta.scripts.start = `baeta generate --watch --run='bun --watch --inspect src/app.ts'`;\n\t\tmeta.devDependencies['@types/node'] = undefined;\n\t\tmeta.devDependencies['@types/deno'] = undefined;\n\t}\n\n\tif (runtime === 'deno') {\n\t\tmeta.scripts.start = `baeta generate --watch --run='deno --watch --allow-env --allow-read --allow-net src/app.ts'`;\n\t\tmeta.devDependencies['@types/node'] = undefined;\n\t\tmeta.devDependencies['@types/bun'] = undefined;\n\t}\n\n\tmeta.name = appName;\n\n\treturn JSON.stringify(meta, null, 2);\n}\n\nexport function getPackageJson(appName: string, runtime: JavaScriptRuntime, templateName: string) {\n\tif (templateName === 'yoga') {\n\t\treturn createPackageJSON(appName, runtime, yogaPackageJson);\n\t}\n\n\tif (templateName === 'apollo') {\n\t\treturn createPackageJSON(appName, runtime, apolloPackageJson);\n\t}\n}\n","{\n \"$schema\": \"https://json.schemastore.org/tsconfig\",\n \"compilerOptions\": {\n \"target\": \"es2023\",\n \"lib\": [\n \"es2024\"\n ],\n \"module\": \"esnext\",\n \"noEmit\": true,\n \"strict\": true,\n \"noImplicitAny\": true,\n \"isolatedModules\": true,\n \"esModuleInterop\": true,\n \"verbatimModuleSyntax\": true,\n \"allowImportingTsExtensions\": true,\n \"allowSyntheticDefaultImports\": true,\n \"skipLibCheck\": true,\n \"forceConsistentCasingInFileNames\": true,\n \"moduleResolution\": \"bundler\"\n }\n}\n","import tsconfig from '../../../tools/tsconfig/tsconfig.json';\n\nexport function createTsconfig() {\n\tconst current = structuredClone(tsconfig);\n\n\treturn {\n\t\t...current,\n\t\tcompilerOptions: {\n\t\t\t...current.compilerOptions,\n\t\t\trootDir: 'src',\n\t\t\toutDir: 'dist',\n\t\t\tnoEmit: true,\n\t\t\temitDeclarationOnly: false,\n\t\t},\n\t\texclude: ['baeta.ts'],\n\t};\n}\n","{\n \"name\": \"create-baeta\",\n \"version\": \"0.0.2\",\n \"keywords\": [\n \"baeta\",\n \"graphql\",\n \"schema\",\n \"types\",\n \"typescript\",\n \"framework\",\n \"builder\"\n ],\n \"homepage\": \"https://github.com/andreisergiu98/baeta#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/andreisergiu98/baeta/issues\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/andreisergiu98/baeta.git\",\n \"directory\": \"packages/create-baeta\"\n },\n \"license\": \"MIT\",\n \"author\": {\n \"name\": \"Andrei Pampu\",\n \"url\": \"https://github.com/andreisergiu98\"\n },\n \"type\": \"module\",\n \"bin\": \"dist/cli.js\",\n \"exports\": {\n \".\": {\n \"types\": \"./index.ts\",\n \"default\": \"./dist/index.js\"\n }\n },\n \"types\": \"dist/index.d.ts\",\n \"files\": [\n \"dist\",\n \"templates\",\n \"package.json\"\n ],\n \"scripts\": {\n \"build\": \"yarn build:versions && tsup\",\n \"build:versions\": \"node --no-warnings --experimental-transform-types ./scripts/version-manifest.ts\",\n \"prepack\": \"prep\",\n \"postpack\": \"prep --clean\",\n \"types\": \"yarn build:versions && tsc --noEmit\"\n },\n \"dependencies\": {\n \"@docusaurus/logger\": \"^3.6.3\",\n \"fs-extra\": \"^11.2.0\",\n \"prompts\": \"^2.4.2\",\n \"semver\": \"^7.6.3\",\n \"shelljs\": \"^0.8.5\",\n \"supports-color\": \"^9.4.0\",\n \"yargs\": \"^17.7.2\"\n },\n \"devDependencies\": {\n \"@baeta/builder\": \"workspace:^\",\n \"@baeta/tsconfig\": \"workspace:^\",\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/node\": \"^22.10.1\",\n \"@types/prompts\": \"^2.4.9\",\n \"@types/semver\": \"^7.5.8\",\n \"@types/shelljs\": \"^0.8.15\",\n \"@types/yargs\": \"^17.0.33\",\n \"typescript\": \"^5.7.2\"\n },\n \"engines\": {\n \"node\": \">=22.12.0\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n }\n }\n },\n \"ava\": {\n \"extensions\": {\n \"ts\": \"module\"\n },\n \"nodeArguments\": [\n \"--no-warnings\",\n \"--experimental-transform-types\"\n ]\n },\n \"typedocOptions\": {\n \"entryPoints\": [\n \"./index.ts\"\n ],\n \"readme\": \"none\",\n \"tsconfig\": \"./tsconfig.json\"\n }\n}\n"],"mappings":"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","names":["path","logger","shell","path","logger","fs","prompts","path","fs","prompts","logger","logger","prompts","shell","shell","prompts","logger","path","logger","fs","prompts","package_default","version","package_default","fs","path","prompts","logger","path","logger","shell","yargs"]}
|
|
1
|
+
{"version":3,"sources":["../cli.ts","../package.json"],"sourcesContent":["#!/usr/bin/env node\n\nimport { logger } from '@docusaurus/logger';\nimport semver from 'semver';\nimport yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\nimport { packageManagers } from './lib/constants.ts';\nimport { handler } from './lib/handler.ts';\nimport { engines, version } from './package.json';\n\nconst requiredVersion = engines.node;\n\nif (!semver.satisfies(process.version, requiredVersion)) {\n\tlogger.error('Minimum Node.js version not met :(');\n\tlogger.info`You are using Node.js number=${process.version}, Requirement: Node.js number=${requiredVersion}.`;\n\tprocess.exit(1);\n}\n\nprocess.on('unhandledRejection', (err) => {\n\tlogger.error(err);\n\tprocess.exit(1);\n});\n\nyargs(hideBin(process.argv))\n\t.version(version)\n\t.command({\n\t\tcommand: '* [appName] [template] [rootDir]',\n\t\tdescribe: 'Initialize Baeta application',\n\t\tbuilder: (yargs) => {\n\t\t\treturn yargs\n\t\t\t\t.option('package-manager', {\n\t\t\t\t\talias: 'p',\n\t\t\t\t\tdescribe: 'The package manager used to install dependencies.',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tchoices: packageManagers,\n\t\t\t\t})\n\t\t\t\t.option('skip-install', {\n\t\t\t\t\talias: 's',\n\t\t\t\t\tdescribe: 'Do not run package manager immediately after scaffolding',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t})\n\t\t\t\t.positional('appName', {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdescribe: 'Name of the app',\n\t\t\t\t})\n\t\t\t\t.positional('template', {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdescribe: 'Template to use',\n\t\t\t\t\tchoices: ['yoga', 'apollo'],\n\t\t\t\t})\n\t\t\t\t.positional('rootDir', {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdescribe: 'Root directory',\n\t\t\t\t\tdefault: '.',\n\t\t\t\t});\n\t\t},\n\t\thandler: (argv) => handler(argv),\n\t})\n\t.showHelpOnFail(true)\n\t.strict()\n\t.help()\n\t.parse();\n","{\n \"name\": \"create-baeta\",\n \"version\": \"0.0.4\",\n \"keywords\": [\n \"baeta\",\n \"graphql\",\n \"schema\",\n \"types\",\n \"typescript\",\n \"framework\",\n \"builder\"\n ],\n \"homepage\": \"https://github.com/andreisergiu98/baeta#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/andreisergiu98/baeta/issues\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/andreisergiu98/baeta.git\",\n \"directory\": \"packages/create-baeta\"\n },\n \"license\": \"MIT\",\n \"author\": {\n \"name\": \"Andrei Pampu\",\n \"url\": \"https://github.com/andreisergiu98\"\n },\n \"type\": \"module\",\n \"bin\": \"dist/cli.js\",\n \"exports\": {\n \".\": {\n \"types\": \"./index.ts\",\n \"default\": \"./dist/index.js\"\n }\n },\n \"types\": \"dist/index.d.ts\",\n \"files\": [\n \"dist\",\n \"templates\",\n \"package.json\"\n ],\n \"scripts\": {\n \"build\": \"yarn build:versions && tsup\",\n \"build:versions\": \"node --no-warnings --experimental-transform-types ./scripts/version-manifest.ts\",\n \"prepack\": \"prep\",\n \"postpack\": \"prep --clean\",\n \"types\": \"yarn build:versions && tsc --noEmit\"\n },\n \"dependencies\": {\n \"@docusaurus/logger\": \"^3.6.3\",\n \"fs-extra\": \"^11.2.0\",\n \"prompts\": \"^2.4.2\",\n \"semver\": \"^7.6.3\",\n \"shelljs\": \"^0.8.5\",\n \"supports-color\": \"^9.4.0\",\n \"yargs\": \"^17.7.2\"\n },\n \"devDependencies\": {\n \"@baeta/builder\": \"workspace:^\",\n \"@baeta/tsconfig\": \"workspace:^\",\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/node\": \"^22.10.1\",\n \"@types/prompts\": \"^2.4.9\",\n \"@types/semver\": \"^7.5.8\",\n \"@types/shelljs\": \"^0.8.15\",\n \"@types/yargs\": \"^17.0.33\",\n \"typescript\": \"^5.7.2\"\n },\n \"engines\": {\n \"node\": \">=22.12.0\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n }\n }\n },\n \"ava\": {\n \"extensions\": {\n \"ts\": \"module\"\n },\n \"nodeArguments\": [\n \"--no-warnings\",\n \"--experimental-transform-types\"\n ]\n },\n \"typedocOptions\": {\n \"entryPoints\": [\n \"./index.ts\"\n ],\n \"readme\": \"none\",\n \"tsconfig\": \"./tsconfig.json\"\n }\n}\n"],"mappings":";;;;;;;AAEA,SAAS,cAAc;AACvB,OAAO,YAAY;AACnB,OAAO,WAAW;AAClB,SAAS,eAAe;;;ACHtB,cAAW;AAiEX,cAAW;AAAA,EACT,MAAQ;AACV;;;AD3DF,IAAM,kBAAkB,QAAQ;AAEhC,IAAI,CAAC,OAAO,UAAU,QAAQ,SAAS,eAAe,GAAG;AACxD,SAAO,MAAM,oCAAoC;AACjD,SAAO,oCAAoC,QAAQ,OAAO,iCAAiC,eAAe;AAC1G,UAAQ,KAAK,CAAC;AACf;AAEA,QAAQ,GAAG,sBAAsB,CAAC,QAAQ;AACzC,SAAO,MAAM,GAAG;AAChB,UAAQ,KAAK,CAAC;AACf,CAAC;AAED,MAAM,QAAQ,QAAQ,IAAI,CAAC,EACzB,QAAQ,OAAO,EACf,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS,CAACA,WAAU;AACnB,WAAOA,OACL,OAAO,mBAAmB;AAAA,MAC1B,OAAO;AAAA,MACP,UAAU;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACV,CAAC,EACA,OAAO,gBAAgB;AAAA,MACvB,OAAO;AAAA,MACP,UAAU;AAAA,MACV,MAAM;AAAA,IACP,CAAC,EACA,WAAW,WAAW;AAAA,MACtB,MAAM;AAAA,MACN,UAAU;AAAA,IACX,CAAC,EACA,WAAW,YAAY;AAAA,MACvB,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS,CAAC,QAAQ,QAAQ;AAAA,IAC3B,CAAC,EACA,WAAW,WAAW;AAAA,MACtB,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS;AAAA,IACV,CAAC;AAAA,EACH;AAAA,EACA,SAAS,CAAC,SAAS,QAAQ,IAAI;AAChC,CAAC,EACA,eAAe,IAAI,EACnB,OAAO,EACP,KAAK,EACL,MAAM;","names":["yargs"]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
declare function getAppName(reqName: string | undefined, rootDir: string): Promise<string>;
|
|
2
|
+
|
|
3
|
+
declare const defaultPackageManager = "npm";
|
|
4
|
+
declare const lockfileNames: {
|
|
5
|
+
npm: string;
|
|
6
|
+
yarn: string;
|
|
7
|
+
pnpm: string;
|
|
8
|
+
bun: string;
|
|
9
|
+
};
|
|
10
|
+
declare const packageManagers: PackageManager[];
|
|
11
|
+
type PackageManager = keyof typeof lockfileNames;
|
|
12
|
+
declare const runtimes: readonly ["node", "deno", "bun"];
|
|
13
|
+
type JavaScriptRuntime = (typeof runtimes)[number];
|
|
14
|
+
declare const defaultJavaScriptRuntime = "node";
|
|
15
|
+
declare const gitignoreUrl = "https://raw.githubusercontent.com/github/gitignore/refs/heads/main/Node.gitignore";
|
|
16
|
+
|
|
17
|
+
interface CliOptions {
|
|
18
|
+
packageManager?: PackageManager;
|
|
19
|
+
skipInstall?: boolean;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
interface Args {
|
|
23
|
+
packageManager?: PackageManager;
|
|
24
|
+
skipInstall?: boolean;
|
|
25
|
+
appName?: string;
|
|
26
|
+
template?: string;
|
|
27
|
+
rootDir: string;
|
|
28
|
+
}
|
|
29
|
+
declare function handler(args: Args): Promise<void>;
|
|
30
|
+
|
|
31
|
+
declare function getPackageJson(appName: string, runtime: JavaScriptRuntime, templateName: string): string | undefined;
|
|
32
|
+
|
|
33
|
+
declare function getPackageManager(dest: string, { packageManager, skipInstall }: CliOptions): Promise<PackageManager>;
|
|
34
|
+
declare function getInstallCommand(pkgManager: PackageManager): string;
|
|
35
|
+
|
|
36
|
+
declare function getRuntime(): Promise<JavaScriptRuntime>;
|
|
37
|
+
|
|
38
|
+
type Template = {
|
|
39
|
+
name: string;
|
|
40
|
+
path: string;
|
|
41
|
+
packageJsn?: string;
|
|
42
|
+
};
|
|
43
|
+
declare function getTemplate(reqTemplate: string | undefined): Promise<Template>;
|
|
44
|
+
declare function copyTemplate(appName: string, runtime: JavaScriptRuntime, template: Template, dest: string): Promise<void>;
|
|
45
|
+
|
|
46
|
+
declare function createTsconfig(): {
|
|
47
|
+
compilerOptions: {
|
|
48
|
+
rootDir: string;
|
|
49
|
+
outDir: string;
|
|
50
|
+
noEmit: boolean;
|
|
51
|
+
emitDeclarationOnly: boolean;
|
|
52
|
+
target: string;
|
|
53
|
+
lib: string[];
|
|
54
|
+
module: string;
|
|
55
|
+
strict: boolean;
|
|
56
|
+
noImplicitAny: boolean;
|
|
57
|
+
isolatedModules: boolean;
|
|
58
|
+
esModuleInterop: boolean;
|
|
59
|
+
verbatimModuleSyntax: boolean;
|
|
60
|
+
allowImportingTsExtensions: boolean;
|
|
61
|
+
allowSyntheticDefaultImports: boolean;
|
|
62
|
+
skipLibCheck: boolean;
|
|
63
|
+
forceConsistentCasingInFileNames: boolean;
|
|
64
|
+
moduleResolution: string;
|
|
65
|
+
};
|
|
66
|
+
exclude: string[];
|
|
67
|
+
$schema: string;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
export { type CliOptions, type JavaScriptRuntime, type PackageManager, copyTemplate, createTsconfig, defaultJavaScriptRuntime, defaultPackageManager, getAppName, getInstallCommand, getPackageJson, getPackageManager, getRuntime, getTemplate, gitignoreUrl, handler, lockfileNames, packageManagers, runtimes };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import {
|
|
2
|
+
copyTemplate,
|
|
3
|
+
createTsconfig,
|
|
4
|
+
defaultJavaScriptRuntime,
|
|
5
|
+
defaultPackageManager,
|
|
6
|
+
getAppName,
|
|
7
|
+
getInstallCommand,
|
|
8
|
+
getPackageJson,
|
|
9
|
+
getPackageManager,
|
|
10
|
+
getRuntime,
|
|
11
|
+
getTemplate,
|
|
12
|
+
gitignoreUrl,
|
|
13
|
+
handler,
|
|
14
|
+
lockfileNames,
|
|
15
|
+
packageManagers,
|
|
16
|
+
runtimes
|
|
17
|
+
} from "./chunk-R4KUDDY2.js";
|
|
18
|
+
export {
|
|
19
|
+
copyTemplate,
|
|
20
|
+
createTsconfig,
|
|
21
|
+
defaultJavaScriptRuntime,
|
|
22
|
+
defaultPackageManager,
|
|
23
|
+
getAppName,
|
|
24
|
+
getInstallCommand,
|
|
25
|
+
getPackageJson,
|
|
26
|
+
getPackageManager,
|
|
27
|
+
getRuntime,
|
|
28
|
+
getTemplate,
|
|
29
|
+
gitignoreUrl,
|
|
30
|
+
handler,
|
|
31
|
+
lockfileNames,
|
|
32
|
+
packageManagers,
|
|
33
|
+
runtimes
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/package.json
CHANGED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createApplication } from '@baeta/core';
|
|
2
|
+
import { createYoga } from 'graphql-yoga';
|
|
3
|
+
import { modules } from './modules/autoload.ts';
|
|
4
|
+
import type { Context, ServerContext } from './types/context.ts';
|
|
5
|
+
|
|
6
|
+
const baeta = createApplication({
|
|
7
|
+
modules,
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
export const yoga = createYoga<ServerContext, Context>({
|
|
11
|
+
schema: baeta.schema,
|
|
12
|
+
context: {
|
|
13
|
+
appVersion: '1.0.0',
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
Bun.serve({
|
|
18
|
+
fetch: yoga.fetch,
|
|
19
|
+
port: 4000,
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
console.log(`🚀 Server ready at http://localhost:4000${yoga.graphqlEndpoint}`);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { createApplication } from '@baeta/core';
|
|
2
|
+
import { createYoga } from 'graphql-yoga';
|
|
3
|
+
import { modules } from './modules/autoload.ts';
|
|
4
|
+
import type { Context, ServerContext } from './types/context.ts';
|
|
5
|
+
|
|
6
|
+
const baeta = createApplication({
|
|
7
|
+
modules,
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
export const yoga = createYoga<ServerContext, Context>({
|
|
11
|
+
schema: baeta.schema,
|
|
12
|
+
context: {
|
|
13
|
+
appVersion: '1.0.0',
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
Deno.serve(
|
|
18
|
+
{
|
|
19
|
+
port: 4000,
|
|
20
|
+
onListen() {
|
|
21
|
+
console.log(`🚀 Server ready at http://localhost:4000${yoga.graphqlEndpoint}`);
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
yoga.fetch,
|
|
25
|
+
);
|
|
File without changes
|