@beignet/cli 0.0.1 → 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.
Files changed (98) hide show
  1. package/CHANGELOG.md +231 -0
  2. package/README.md +497 -90
  3. package/dist/ansi.d.ts +10 -0
  4. package/dist/ansi.d.ts.map +1 -0
  5. package/dist/ansi.js +20 -0
  6. package/dist/ansi.js.map +1 -0
  7. package/dist/choices.d.ts +72 -0
  8. package/dist/choices.d.ts.map +1 -0
  9. package/dist/choices.js +88 -0
  10. package/dist/choices.js.map +1 -0
  11. package/dist/completion.d.ts +47 -0
  12. package/dist/completion.d.ts.map +1 -0
  13. package/dist/completion.js +123 -0
  14. package/dist/completion.js.map +1 -0
  15. package/dist/config.d.ts +39 -0
  16. package/dist/config.d.ts.map +1 -1
  17. package/dist/config.js +26 -0
  18. package/dist/config.js.map +1 -1
  19. package/dist/create-prompts.d.ts +42 -0
  20. package/dist/create-prompts.d.ts.map +1 -0
  21. package/dist/create-prompts.js +136 -0
  22. package/dist/create-prompts.js.map +1 -0
  23. package/dist/create.d.ts +12 -0
  24. package/dist/create.d.ts.map +1 -1
  25. package/dist/create.js +19 -24
  26. package/dist/create.js.map +1 -1
  27. package/dist/db.d.ts +37 -0
  28. package/dist/db.d.ts.map +1 -0
  29. package/dist/db.js +146 -0
  30. package/dist/db.js.map +1 -0
  31. package/dist/github-annotations.d.ts +18 -0
  32. package/dist/github-annotations.d.ts.map +1 -0
  33. package/dist/github-annotations.js +22 -0
  34. package/dist/github-annotations.js.map +1 -0
  35. package/dist/index.d.ts +1 -7
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +710 -400
  38. package/dist/index.js.map +1 -1
  39. package/dist/inspect.d.ts +45 -2
  40. package/dist/inspect.d.ts.map +1 -1
  41. package/dist/inspect.js +2191 -100
  42. package/dist/inspect.js.map +1 -1
  43. package/dist/lib.d.ts +20 -0
  44. package/dist/lib.d.ts.map +1 -0
  45. package/dist/lib.js +17 -0
  46. package/dist/lib.js.map +1 -0
  47. package/dist/lint.d.ts +22 -1
  48. package/dist/lint.d.ts.map +1 -1
  49. package/dist/lint.js +370 -38
  50. package/dist/lint.js.map +1 -1
  51. package/dist/make.d.ts +109 -1
  52. package/dist/make.d.ts.map +1 -1
  53. package/dist/make.js +2225 -333
  54. package/dist/make.js.map +1 -1
  55. package/dist/outbox.d.ts +24 -0
  56. package/dist/outbox.d.ts.map +1 -0
  57. package/dist/outbox.js +138 -0
  58. package/dist/outbox.js.map +1 -0
  59. package/dist/schedule.d.ts +36 -0
  60. package/dist/schedule.d.ts.map +1 -0
  61. package/dist/schedule.js +155 -0
  62. package/dist/schedule.js.map +1 -0
  63. package/dist/task.d.ts +26 -0
  64. package/dist/task.d.ts.map +1 -0
  65. package/dist/task.js +106 -0
  66. package/dist/task.js.map +1 -0
  67. package/dist/templates.d.ts +12 -8
  68. package/dist/templates.d.ts.map +1 -1
  69. package/dist/templates.js +2144 -385
  70. package/dist/templates.js.map +1 -1
  71. package/dist/version.d.ts +8 -0
  72. package/dist/version.d.ts.map +1 -0
  73. package/dist/version.js +18 -0
  74. package/dist/version.js.map +1 -0
  75. package/package.json +9 -8
  76. package/src/ansi.ts +30 -0
  77. package/src/choices.ts +137 -0
  78. package/src/completion.ts +169 -0
  79. package/src/config.ts +47 -0
  80. package/src/create-prompts.ts +182 -0
  81. package/src/create.ts +32 -28
  82. package/src/db.ts +222 -0
  83. package/src/github-annotations.ts +37 -0
  84. package/src/index.ts +1119 -535
  85. package/src/inspect.ts +3372 -134
  86. package/src/lib.ts +45 -0
  87. package/src/lint.ts +533 -45
  88. package/src/make.ts +3010 -397
  89. package/src/outbox.ts +249 -0
  90. package/src/schedule.ts +272 -0
  91. package/src/task.ts +169 -0
  92. package/src/templates.ts +2282 -462
  93. package/src/version.ts +20 -0
  94. package/dist/create-bin.d.ts +0 -3
  95. package/dist/create-bin.d.ts.map +0 -1
  96. package/dist/create-bin.js +0 -9
  97. package/dist/create-bin.js.map +0 -1
  98. package/src/create-bin.ts +0 -11
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Interactive selection flow for `beignet create`.
3
+ *
4
+ * The decision helper is pure so the TTY gating stays unit-testable, and
5
+ * `@clack/prompts` is loaded lazily inside the prompt flow so non-interactive
6
+ * runs and CLI startup never pay for it.
7
+ */
8
+ import { featureChoices, integrationChoices, packageManagerChoices, presetIntegrationDefaults, } from "./choices.js";
9
+ /**
10
+ * Decide whether `beignet create` should run the interactive prompt flow.
11
+ *
12
+ * Prompts run only on a full TTY, only when `--yes` is absent, and only when
13
+ * no selection flag was passed. Any explicit preset, feature, integration, or
14
+ * package manager selection means the invocation is scripted, so the
15
+ * non-interactive path stays byte-identical for agents and CI.
16
+ */
17
+ export function shouldPromptInteractively(flags, tty) {
18
+ if (!tty.stdin || !tty.stdout)
19
+ return false;
20
+ if (flags.yes)
21
+ return false;
22
+ const selectionFlagPassed = flags.preset !== undefined ||
23
+ (flags.features?.length ?? 0) > 0 ||
24
+ (flags.integrations?.length ?? 0) > 0 ||
25
+ flags.packageManager !== undefined;
26
+ return !selectionFlagPassed;
27
+ }
28
+ const featureHints = {
29
+ client: "Typed Beignet HTTP client",
30
+ "react-query": "TanStack Query helpers for contracts",
31
+ forms: "React Hook Form wired to contract bodies",
32
+ openapi: "OpenAPI document route generated from contracts",
33
+ };
34
+ const integrationHints = {
35
+ "better-auth": "Better Auth routes and auth provider wiring",
36
+ "drizzle-turso": "Drizzle/libSQL persistence with Turso-ready config",
37
+ inngest: "Inngest-backed background jobs",
38
+ pino: "Pino logger provider",
39
+ resend: "Resend-backed mail provider",
40
+ "upstash-rate-limit": "Upstash-backed rate limiting",
41
+ };
42
+ /**
43
+ * Run the interactive `beignet create` prompt flow.
44
+ *
45
+ * Returns the completed selections, or undefined when the user cancels.
46
+ */
47
+ export async function promptCreateSelections(initial) {
48
+ const prompts = await import("@clack/prompts");
49
+ prompts.intro("beignet create");
50
+ let directory = initial.directory;
51
+ if (directory === undefined) {
52
+ const answer = await prompts.text({
53
+ message: "Where should the app be created?",
54
+ placeholder: "my-app",
55
+ validate: (value) => value === undefined || value.trim() === ""
56
+ ? "Enter a project directory."
57
+ : undefined,
58
+ });
59
+ if (prompts.isCancel(answer))
60
+ return undefined;
61
+ directory = answer;
62
+ }
63
+ const preset = await prompts.select({
64
+ message: "Which starter preset?",
65
+ options: [
66
+ {
67
+ value: "standard",
68
+ label: "standard",
69
+ hint: "Full app layout with auth, database, jobs, and devtools",
70
+ },
71
+ {
72
+ value: "minimal",
73
+ label: "minimal",
74
+ hint: "Smallest contract/server/use-case loop",
75
+ },
76
+ ],
77
+ initialValue: "standard",
78
+ });
79
+ if (prompts.isCancel(preset))
80
+ return undefined;
81
+ // The standard preset already includes every starter feature, so the
82
+ // feature multiselect only appears when the preset leaves features open.
83
+ let features;
84
+ if (preset === "minimal") {
85
+ const answer = await prompts.multiselect({
86
+ message: "Add starter features? (press enter to skip)",
87
+ options: featureChoices.map((feature) => ({
88
+ value: feature,
89
+ label: feature,
90
+ hint: featureHints[feature],
91
+ })),
92
+ required: false,
93
+ });
94
+ if (prompts.isCancel(answer))
95
+ return undefined;
96
+ features = answer;
97
+ }
98
+ const presetIntegrations = new Set(presetIntegrationDefaults[preset]);
99
+ const integrationOptions = integrationChoices.filter((integration) => !presetIntegrations.has(integration));
100
+ let integrations;
101
+ if (integrationOptions.length > 0) {
102
+ const answer = await prompts.multiselect({
103
+ message: presetIntegrations.size > 0
104
+ ? "Add provider integrations beyond the preset defaults? (press enter to skip)"
105
+ : "Add provider integrations? (press enter to skip)",
106
+ options: integrationOptions.map((integration) => ({
107
+ value: integration,
108
+ label: integration,
109
+ hint: integrationHints[integration],
110
+ })),
111
+ required: false,
112
+ });
113
+ if (prompts.isCancel(answer))
114
+ return undefined;
115
+ integrations = answer;
116
+ }
117
+ const packageManager = await prompts.select({
118
+ message: "Which package manager?",
119
+ options: packageManagerChoices.map((manager) => ({
120
+ value: manager,
121
+ label: manager,
122
+ })),
123
+ initialValue: "bun",
124
+ });
125
+ if (prompts.isCancel(packageManager))
126
+ return undefined;
127
+ prompts.outro(`Creating ${directory}`);
128
+ return {
129
+ directory,
130
+ preset,
131
+ features,
132
+ integrations,
133
+ packageManager,
134
+ };
135
+ }
136
+ //# sourceMappingURL=create-prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-prompts.js","sourceRoot":"","sources":["../src/create-prompts.ts"],"names":[],"mappings":"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"}
package/dist/create.d.ts CHANGED
@@ -1,4 +1,7 @@
1
1
  import { type FeatureName, type IntegrationName, type PackageManager, type PresetName, type TemplateName } from "./templates.js";
2
+ /**
3
+ * Options for creating a new Beignet app.
4
+ */
2
5
  export type CreateOptions = {
3
6
  name: string;
4
7
  cwd?: string;
@@ -8,13 +11,22 @@ export type CreateOptions = {
8
11
  packageManager?: PackageManager;
9
12
  integrations?: IntegrationName[];
10
13
  force?: boolean;
14
+ dryRun?: boolean;
11
15
  beignetVersion?: string;
12
16
  };
17
+ /**
18
+ * Result returned after a new app is scaffolded or previewed.
19
+ */
13
20
  export type CreateResult = {
21
+ schemaVersion: 1;
14
22
  name: string;
15
23
  targetDir: string;
24
+ dryRun: boolean;
16
25
  files: string[];
17
26
  packageManager: PackageManager;
18
27
  };
28
+ /**
29
+ * Create a Beignet app from a starter template.
30
+ */
19
31
  export declare function createProject(options: CreateOptions): Promise<CreateResult>;
20
32
  //# sourceMappingURL=create.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,WAAW,EAGhB,KAAK,eAAe,EAEpB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,EAAE,cAAc,CAAC;CAChC,CAAC;AAEF,wBAAsB,aAAa,CACjC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,YAAY,CAAC,CAwCvB"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,WAAW,EAGhB,KAAK,eAAe,EAEpB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AAGxB;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,aAAa,EAAE,CAAC,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,EAAE,cAAc,CAAC;CAChC,CAAC;AAEF;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,YAAY,CAAC,CA+CvB"}
package/dist/create.js CHANGED
@@ -1,7 +1,11 @@
1
- import { readFileSync } from "node:fs";
2
1
  import { mkdir, readdir, writeFile } from "node:fs/promises";
3
2
  import path from "node:path";
3
+ import { presetFeatureDefaults, presetIntegrationDefaults } from "./choices.js";
4
4
  import { featureChoices, getTemplateFiles, integrationChoices, } from "./templates.js";
5
+ import { getCliVersion } from "./version.js";
6
+ /**
7
+ * Create a Beignet app from a starter template.
8
+ */
5
9
  export async function createProject(options) {
6
10
  const cwd = options.cwd ?? process.cwd();
7
11
  const name = normalizeProjectName(options.name);
@@ -14,8 +18,8 @@ export async function createProject(options) {
14
18
  if (template !== "next") {
15
19
  throw new Error(`Unknown template "${template}". Available templates: next`);
16
20
  }
21
+ const dryRun = Boolean(options.dryRun);
17
22
  await assertCanWrite(targetDir, Boolean(options.force));
18
- await mkdir(targetDir, { recursive: true });
19
23
  const files = getTemplateFiles({
20
24
  name,
21
25
  packageManager,
@@ -24,25 +28,25 @@ export async function createProject(options) {
24
28
  features,
25
29
  integrations,
26
30
  });
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
+ if (!dryRun) {
32
+ await mkdir(targetDir, { recursive: true });
33
+ for (const file of files) {
34
+ const destination = path.join(targetDir, file.path);
35
+ await mkdir(path.dirname(destination), { recursive: true });
36
+ await writeFile(destination, file.content);
37
+ }
31
38
  }
32
39
  return {
40
+ schemaVersion: 1,
33
41
  name,
34
42
  targetDir,
43
+ dryRun,
35
44
  files: files.map((file) => file.path),
36
45
  packageManager,
37
46
  };
38
47
  }
39
48
  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
- }
49
+ const features = new Set(presetFeatureDefaults[preset]);
46
50
  for (const feature of explicitFeatures) {
47
51
  features.add(feature);
48
52
  }
@@ -55,24 +59,15 @@ function resolveFeatures(preset, explicitFeatures) {
55
59
  return featureChoices.filter((feature) => features.has(feature));
56
60
  }
57
61
  function resolveIntegrations(preset, explicitIntegrations) {
58
- const integrations = new Set();
59
- if (preset === "standard") {
60
- integrations.add("pino");
61
- }
62
+ const integrations = new Set(presetIntegrationDefaults[preset]);
62
63
  for (const integration of explicitIntegrations) {
63
64
  integrations.add(integration);
64
65
  }
65
66
  return integrationChoices.filter((integration) => integrations.has(integration));
66
67
  }
67
68
  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
- }
69
+ const version = getCliVersion();
70
+ return version === "0.0.0" ? "latest" : `^${version}`;
76
71
  }
77
72
  function normalizeProjectName(name) {
78
73
  const trimmed = name.trim();
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAEL,cAAc,EACd,gBAAgB,EAEhB,kBAAkB,GAInB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AA8B7C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAsB;IAEtB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,IAAI,GAAG,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC;IACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC;IAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC;IAC5C,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IACjE,MAAM,YAAY,GAAG,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IAE7E,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,qBAAqB,QAAQ,8BAA8B,CAC5D,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEvC,MAAM,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAExD,MAAM,KAAK,GAAG,gBAAgB,CAAC;QAC7B,IAAI;QACJ,cAAc;QACd,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,wBAAwB,EAAE;QACpE,MAAM;QACN,QAAQ;QACR,YAAY;KACb,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE5C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACpD,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,MAAM,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,IAAI;QACJ,SAAS;QACT,MAAM;QACN,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;QACrC,cAAc;KACf,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACtB,MAAkB,EAClB,gBAA+B;IAE/B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAc,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;IAErE,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;QACvC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;QAChC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,mBAAmB,CAC1B,MAAkB,EAClB,oBAAuC;IAEvC,MAAM,YAAY,GAAG,IAAI,GAAG,CAC1B,yBAAyB,CAAC,MAAM,CAAC,CAClC,CAAC;IAEF,KAAK,MAAM,WAAW,IAAI,oBAAoB,EAAE,CAAC;QAC/C,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAC/C,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAC9B,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB;IAC/B,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,OAAO,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,IAAI;SACR,QAAQ,CAAC,OAAO,CAAC;SACjB,WAAW,EAAE;SACb,UAAU,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,SAAiB,EACjB,KAAc;IAEd,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,aAAa,SAAS,8CAA8C,CACrE,CAAC;IACJ,CAAC;AACH,CAAC"}
package/dist/db.d.ts ADDED
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Database lifecycle operations supported by the Beignet CLI.
3
+ */
4
+ export type DatabaseCommand = "generate" | "migrate" | "seed" | "reset";
5
+ /**
6
+ * Options for running a database lifecycle command.
7
+ */
8
+ export type RunDatabaseCommandOptions = {
9
+ command: DatabaseCommand;
10
+ cwd?: string;
11
+ captureOutput?: boolean;
12
+ dryRun?: boolean;
13
+ };
14
+ /**
15
+ * Result returned by a database lifecycle command.
16
+ */
17
+ export type RunDatabaseCommandResult = {
18
+ schemaVersion: 1;
19
+ command: DatabaseCommand;
20
+ cwd: string;
21
+ script: string;
22
+ runner: string;
23
+ args: string[];
24
+ stdout?: string;
25
+ stderr?: string;
26
+ dryRun: boolean;
27
+ exitCode: number;
28
+ };
29
+ /**
30
+ * Run an app-owned database lifecycle script.
31
+ *
32
+ * Beignet owns the command surface; the app owns the actual Drizzle script.
33
+ * This keeps `beignet db ...` stable while leaving migrations, schema paths,
34
+ * database URLs, and destructive reset behavior explicit in app code.
35
+ */
36
+ export declare function runDatabaseCommand(options: RunDatabaseCommandOptions): Promise<RunDatabaseCommandResult>;
37
+ //# sourceMappingURL=db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAExE;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,eAAe,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,aAAa,EAAE,CAAC,CAAC;IACjB,OAAO,EAAE,eAAe,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAaF;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,wBAAwB,CAAC,CA6CnC"}
package/dist/db.js ADDED
@@ -0,0 +1,146 @@
1
+ import { spawn } from "node:child_process";
2
+ import { access, readFile } from "node:fs/promises";
3
+ import path from "node:path";
4
+ const databaseScripts = {
5
+ generate: "db:generate",
6
+ migrate: "db:migrate",
7
+ seed: "db:seed",
8
+ reset: "db:reset",
9
+ };
10
+ /**
11
+ * Run an app-owned database lifecycle script.
12
+ *
13
+ * Beignet owns the command surface; the app owns the actual Drizzle script.
14
+ * This keeps `beignet db ...` stable while leaving migrations, schema paths,
15
+ * database URLs, and destructive reset behavior explicit in app code.
16
+ */
17
+ export async function runDatabaseCommand(options) {
18
+ const cwd = path.resolve(options.cwd ?? process.cwd());
19
+ const script = databaseScripts[options.command];
20
+ const packageJson = await readPackageJson(cwd);
21
+ const scriptCommand = packageJson.scripts?.[script];
22
+ if (!scriptCommand) {
23
+ throw new Error(missingDatabaseScriptMessage(options.command, script));
24
+ }
25
+ await assertDatabaseCommandPreflight(cwd, options.command, scriptCommand);
26
+ const runner = await detectPackageManager(cwd);
27
+ const args = ["run", script];
28
+ if (options.dryRun) {
29
+ return {
30
+ schemaVersion: 1,
31
+ command: options.command,
32
+ cwd,
33
+ script,
34
+ runner,
35
+ args,
36
+ dryRun: true,
37
+ exitCode: 0,
38
+ };
39
+ }
40
+ const commandResult = await spawnCommand(runner, args, cwd, {
41
+ captureOutput: Boolean(options.captureOutput),
42
+ });
43
+ return {
44
+ schemaVersion: 1,
45
+ command: options.command,
46
+ cwd,
47
+ script,
48
+ runner,
49
+ args,
50
+ dryRun: false,
51
+ exitCode: commandResult.exitCode,
52
+ ...(options.captureOutput
53
+ ? { stdout: commandResult.stdout, stderr: commandResult.stderr }
54
+ : {}),
55
+ };
56
+ }
57
+ async function assertDatabaseCommandPreflight(cwd, command, scriptCommand) {
58
+ if ((command === "generate" || command === "migrate") &&
59
+ /\bdrizzle-kit\b/.test(scriptCommand) &&
60
+ !hasExplicitDrizzleConfigFlag(scriptCommand) &&
61
+ !(await exists(path.join(cwd, "drizzle.config.ts"))) &&
62
+ !(await exists(path.join(cwd, "drizzle.config.mts"))) &&
63
+ !(await exists(path.join(cwd, "drizzle.config.js"))) &&
64
+ !(await exists(path.join(cwd, "drizzle.config.mjs")))) {
65
+ throw new Error(`Missing Drizzle config. beignet db ${command} runs "${scriptCommand}", but no drizzle.config.ts, drizzle.config.mts, drizzle.config.js, or drizzle.config.mjs exists in the app root.`);
66
+ }
67
+ const standardEntrypoints = {
68
+ seed: "infra/db/seed.ts",
69
+ reset: "infra/db/reset.ts",
70
+ };
71
+ const standardEntrypoint = standardEntrypoints[command];
72
+ if (standardEntrypoint &&
73
+ scriptCommand.includes(standardEntrypoint) &&
74
+ !(await exists(path.join(cwd, standardEntrypoint)))) {
75
+ throw new Error(`Missing database ${command} entrypoint ${standardEntrypoint}. beignet db ${command} runs "${scriptCommand}", so restore ${standardEntrypoint} or update package.json script "${databaseScripts[command]}".`);
76
+ }
77
+ }
78
+ function hasExplicitDrizzleConfigFlag(scriptCommand) {
79
+ return /(?:^|\s)--config(?:=|\s)/.test(scriptCommand);
80
+ }
81
+ function missingDatabaseScriptMessage(command, script) {
82
+ if (command === "generate" || command === "migrate") {
83
+ return `Missing package.json script "${script}". Standard Drizzle apps use "${script}": "drizzle-kit ${command}" with drizzle.config.ts at the app root.`;
84
+ }
85
+ const entrypoint = command === "seed" ? "infra/db/seed.ts" : "infra/db/reset.ts";
86
+ return `Missing package.json script "${script}". Standard Drizzle apps use "${script}": "bun ${entrypoint}" so beignet db ${command} can run the app-owned ${command} entrypoint.`;
87
+ }
88
+ async function readPackageJson(cwd) {
89
+ try {
90
+ return JSON.parse(await readFile(path.join(cwd, "package.json"), "utf8"));
91
+ }
92
+ catch (error) {
93
+ if (error.code === "ENOENT") {
94
+ throw new Error("Could not find package.json. Run beignet db from the app root.");
95
+ }
96
+ throw error;
97
+ }
98
+ }
99
+ async function detectPackageManager(cwd) {
100
+ if (await exists(path.join(cwd, "bun.lock")))
101
+ return "bun";
102
+ if (await exists(path.join(cwd, "bun.lockb")))
103
+ return "bun";
104
+ if (await exists(path.join(cwd, "pnpm-lock.yaml")))
105
+ return "pnpm";
106
+ if (await exists(path.join(cwd, "yarn.lock")))
107
+ return "yarn";
108
+ if (await exists(path.join(cwd, "package-lock.json")))
109
+ return "npm";
110
+ return "bun";
111
+ }
112
+ async function exists(filePath) {
113
+ try {
114
+ await access(filePath);
115
+ return true;
116
+ }
117
+ catch {
118
+ return false;
119
+ }
120
+ }
121
+ function spawnCommand(command, args, cwd, options) {
122
+ return new Promise((resolve, reject) => {
123
+ const child = spawn(command, args, {
124
+ cwd,
125
+ env: process.env,
126
+ stdio: options.captureOutput ? ["ignore", "pipe", "pipe"] : "inherit",
127
+ });
128
+ const stdout = [];
129
+ const stderr = [];
130
+ if (options.captureOutput) {
131
+ child.stdout?.on("data", (chunk) => stdout.push(chunk));
132
+ child.stderr?.on("data", (chunk) => stderr.push(chunk));
133
+ }
134
+ child.on("error", reject);
135
+ child.on("close", (code) => resolve({
136
+ exitCode: code ?? 1,
137
+ ...(options.captureOutput
138
+ ? {
139
+ stdout: Buffer.concat(stdout).toString("utf8"),
140
+ stderr: Buffer.concat(stderr).toString("utf8"),
141
+ }
142
+ : {}),
143
+ }));
144
+ });
145
+ }
146
+ //# sourceMappingURL=db.js.map
package/dist/db.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Severity levels understood by GitHub Actions workflow commands.
3
+ */
4
+ export type GithubAnnotationSeverity = "error" | "warning" | "notice";
5
+ /**
6
+ * Format one GitHub Actions annotation workflow command.
7
+ *
8
+ * Absent properties are omitted and the message is percent-encoded so
9
+ * multiline messages survive the single-line command format.
10
+ */
11
+ export declare function formatGithubAnnotation(annotation: {
12
+ severity: GithubAnnotationSeverity;
13
+ message: string;
14
+ file?: string;
15
+ line?: number;
16
+ col?: number;
17
+ }): string;
18
+ //# sourceMappingURL=github-annotations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-annotations.d.ts","sourceRoot":"","sources":["../src/github-annotations.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEtE;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE;IACjD,QAAQ,EAAE,wBAAwB,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,MAAM,CAYT"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Format one GitHub Actions annotation workflow command.
3
+ *
4
+ * Absent properties are omitted and the message is percent-encoded so
5
+ * multiline messages survive the single-line command format.
6
+ */
7
+ export function formatGithubAnnotation(annotation) {
8
+ const properties = [
9
+ annotation.file === undefined ? undefined : `file=${annotation.file}`,
10
+ annotation.line === undefined ? undefined : `line=${annotation.line}`,
11
+ annotation.col === undefined ? undefined : `col=${annotation.col}`,
12
+ ].filter((property) => property !== undefined);
13
+ const propertySection = properties.length > 0 ? ` ${properties.join(",")}` : "";
14
+ return `::${annotation.severity}${propertySection}::${encodeGithubAnnotationMessage(annotation.message)}`;
15
+ }
16
+ function encodeGithubAnnotationMessage(message) {
17
+ return message
18
+ .replaceAll("%", "%25")
19
+ .replaceAll("\r", "%0D")
20
+ .replaceAll("\n", "%0A");
21
+ }
22
+ //# sourceMappingURL=github-annotations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-annotations.js","sourceRoot":"","sources":["../src/github-annotations.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAMtC;IACC,MAAM,UAAU,GAAG;QACjB,UAAU,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,UAAU,CAAC,IAAI,EAAE;QACrE,UAAU,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,UAAU,CAAC,IAAI,EAAE;QACrE,UAAU,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,UAAU,CAAC,GAAG,EAAE;KACnE,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAsB,EAAE,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;IACnE,MAAM,eAAe,GACnB,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1D,OAAO,KAAK,UAAU,CAAC,QAAQ,GAAG,eAAe,KAAK,6BAA6B,CACjF,UAAU,CAAC,OAAO,CACnB,EAAE,CAAC;AACN,CAAC;AAED,SAAS,6BAA6B,CAAC,OAAe;IACpD,OAAO,OAAO;SACX,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;SACtB,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;SACvB,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,14 +1,8 @@
1
1
  #!/usr/bin/env node
2
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
3
  type CliContext = CommandContext & {
11
4
  readonly process: StricliProcess;
12
5
  };
13
6
  export declare function main(inputs?: string[], context?: StricliDynamicCommandContext<CliContext>): Promise<void>;
7
+ export {};
14
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAGA,OAAO,EAIL,KAAK,cAAc,EAInB,KAAK,4BAA4B,EACjC,KAAK,cAAc,EAEpB,MAAM,eAAe,CAAC;AAqBvB,KAAK,UAAU,GAAG,cAAc,GAAG;IACjC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CAClC,CAAC;AAg7CF,wBAAsB,IAAI,CACxB,MAAM,WAAwB,EAC9B,OAAO,GAAE,4BAA4B,CAAC,UAAU,CAAe,GAC9D,OAAO,CAAC,IAAI,CAAC,CAiBf"}