@beignet/cli 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/create.js ADDED
@@ -0,0 +1,99 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { mkdir, readdir, writeFile } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { featureChoices, getTemplateFiles, integrationChoices, } from "./templates.js";
5
+ export async function createProject(options) {
6
+ const cwd = options.cwd ?? process.cwd();
7
+ const name = normalizeProjectName(options.name);
8
+ const targetDir = path.resolve(cwd, options.name);
9
+ const packageManager = options.packageManager ?? "bun";
10
+ const template = options.template ?? "next";
11
+ const preset = options.preset ?? "standard";
12
+ const features = resolveFeatures(preset, options.features ?? []);
13
+ const integrations = resolveIntegrations(preset, options.integrations ?? []);
14
+ if (template !== "next") {
15
+ throw new Error(`Unknown template "${template}". Available templates: next`);
16
+ }
17
+ await assertCanWrite(targetDir, Boolean(options.force));
18
+ await mkdir(targetDir, { recursive: true });
19
+ const files = getTemplateFiles({
20
+ name,
21
+ packageManager,
22
+ beignetVersion: options.beignetVersion ?? getDefaultBeignetVersion(),
23
+ preset,
24
+ features,
25
+ integrations,
26
+ });
27
+ for (const file of files) {
28
+ const destination = path.join(targetDir, file.path);
29
+ await mkdir(path.dirname(destination), { recursive: true });
30
+ await writeFile(destination, file.content);
31
+ }
32
+ return {
33
+ name,
34
+ targetDir,
35
+ files: files.map((file) => file.path),
36
+ packageManager,
37
+ };
38
+ }
39
+ function resolveFeatures(preset, explicitFeatures) {
40
+ const features = new Set();
41
+ if (preset === "standard") {
42
+ for (const feature of featureChoices) {
43
+ features.add(feature);
44
+ }
45
+ }
46
+ for (const feature of explicitFeatures) {
47
+ features.add(feature);
48
+ }
49
+ if (features.has("forms")) {
50
+ features.add("react-query");
51
+ }
52
+ if (features.has("react-query")) {
53
+ features.add("client");
54
+ }
55
+ return featureChoices.filter((feature) => features.has(feature));
56
+ }
57
+ function resolveIntegrations(preset, explicitIntegrations) {
58
+ const integrations = new Set();
59
+ if (preset === "standard") {
60
+ integrations.add("pino");
61
+ }
62
+ for (const integration of explicitIntegrations) {
63
+ integrations.add(integration);
64
+ }
65
+ return integrationChoices.filter((integration) => integrations.has(integration));
66
+ }
67
+ function getDefaultBeignetVersion() {
68
+ try {
69
+ const packageJsonUrl = new URL("../package.json", import.meta.url);
70
+ const packageJson = JSON.parse(readFileSync(packageJsonUrl, "utf8"));
71
+ return packageJson.version ? `^${packageJson.version}` : "latest";
72
+ }
73
+ catch {
74
+ return "latest";
75
+ }
76
+ }
77
+ function normalizeProjectName(name) {
78
+ const trimmed = name.trim();
79
+ if (!trimmed) {
80
+ throw new Error("Project name is required.");
81
+ }
82
+ return path
83
+ .basename(trimmed)
84
+ .toLowerCase()
85
+ .replaceAll(/[^a-z0-9-_.]/g, "-");
86
+ }
87
+ async function assertCanWrite(targetDir, force) {
88
+ let entries;
89
+ try {
90
+ entries = await readdir(targetDir);
91
+ }
92
+ catch {
93
+ return;
94
+ }
95
+ if (entries.length > 0 && !force) {
96
+ throw new Error(`Directory ${targetDir} is not empty. Pass --force to write anyway.`);
97
+ }
98
+ }
99
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ import { type CommandContext, type StricliDynamicCommandContext, type StricliProcess } from "@stricli/core";
3
+ import type { CreateOptions } from "./create.js";
4
+ import { createProject } from "./create.js";
5
+ import { applyDoctorFixes, formatDoctor, formatRoutes, inspectApp } from "./inspect.js";
6
+ import { formatLint, lintApp } from "./lint.js";
7
+ import { makeAdapter, makeContract, makeEvent, makeJob, makeListener, makePolicy, makePort, makeResource, makeSchedule, makeTest, makeUseCase } from "./make.js";
8
+ import { type IntegrationName } from "./templates.js";
9
+ export { applyDoctorFixes, type CreateOptions, createProject, formatDoctor, formatLint, formatRoutes, type IntegrationName, inspectApp, lintApp, makeAdapter, makeContract, makeEvent, makeJob, makeListener, makePolicy, makePort, makeResource, makeSchedule, makeTest, makeUseCase, };
10
+ type CliContext = CommandContext & {
11
+ readonly process: StricliProcess;
12
+ };
13
+ export declare function main(inputs?: string[], context?: StricliDynamicCommandContext<CliContext>): Promise<void>;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAGA,OAAO,EAIL,KAAK,cAAc,EAGnB,KAAK,4BAA4B,EACjC,KAAK,cAAc,EAEpB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,UAAU,EACX,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EACL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,OAAO,EACP,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,WAAW,EACZ,MAAM,WAAW,CAAC;AACnB,OAAO,EAGL,KAAK,eAAe,EAMrB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,gBAAgB,EAChB,KAAK,aAAa,EAClB,aAAa,EACb,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,KAAK,eAAe,EACpB,UAAU,EACV,OAAO,EACP,WAAW,EACX,YAAY,EACZ,SAAS,EACT,OAAO,EACP,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,WAAW,GACZ,CAAC;AAEF,KAAK,UAAU,GAAG,cAAc,GAAG;IACjC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CAClC,CAAC;AA42BF,wBAAsB,IAAI,CACxB,MAAM,WAAwB,EAC9B,OAAO,GAAE,4BAA4B,CAAC,UAAU,CAAe,GAC9D,OAAO,CAAC,IAAI,CAAC,CASf"}