@stacksjs/buddy 0.70.112 → 0.70.114

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.
@@ -14,7 +14,7 @@ function getTimeoutMs(envVar, fallbackMs) {
14
14
  return value;
15
15
  return fallbackMs;
16
16
  }
17
- const PANTRY_CHECK_TIMEOUT_MS = getTimeoutMs("PANTRY_CHECK_TIMEOUT_MS", 15000), PANTRY_INSTALL_TIMEOUT_MS = getTimeoutMs("PANTRY_INSTALL_TIMEOUT_MS", 600000), PANTRY_DEPENDENCIES_TIMEOUT_MS = getTimeoutMs("PANTRY_DEPENDENCIES_TIMEOUT_MS", 1200000), KEYGEN_TIMEOUT_MS = getTimeoutMs("KEYGEN_TIMEOUT_MS", 120000), AWS_CONFIG_TIMEOUT_MS = getTimeoutMs("AWS_CONFIG_TIMEOUT_MS", 900000);
17
+ const PANTRY_CHECK_TIMEOUT_MS = getTimeoutMs("PANTRY_CHECK_TIMEOUT_MS", 15000), PANTRY_INSTALL_TIMEOUT_MS = getTimeoutMs("PANTRY_INSTALL_TIMEOUT_MS", 600000), PANTRY_DEPENDENCIES_TIMEOUT_MS = getTimeoutMs("PANTRY_DEPENDENCIES_TIMEOUT_MS", 1200000), BUN_INSTALL_TIMEOUT_MS = getTimeoutMs("BUN_INSTALL_TIMEOUT_MS", 600000), KEYGEN_TIMEOUT_MS = getTimeoutMs("KEYGEN_TIMEOUT_MS", 120000), AWS_CONFIG_TIMEOUT_MS = getTimeoutMs("AWS_CONFIG_TIMEOUT_MS", 900000);
18
18
  export function setup(buddy) {
19
19
  const descriptions = {
20
20
  setup: "This command ensures your project is setup correctly",
@@ -103,6 +103,25 @@ export async function ensurePantryDependencies(cwd) {
103
103
  handleError(result.error);
104
104
  process.exit(ExitCode.FatalError);
105
105
  }
106
+ export async function ensureNodeDependencies(cwd) {
107
+ if (existsSync(join(cwd, "node_modules"))) {
108
+ log.success("node_modules existed, skipping bun install");
109
+ return;
110
+ }
111
+ log.info("Running bun install...");
112
+ const result = await runCommand("bun install", {
113
+ cwd,
114
+ timeoutMs: BUN_INSTALL_TIMEOUT_MS
115
+ }).catch((error) => {
116
+ handleError(error);
117
+ process.exit(ExitCode.FatalError);
118
+ });
119
+ if (result.isErr) {
120
+ handleError(result.error);
121
+ process.exit(ExitCode.FatalError);
122
+ }
123
+ log.success("Installed node dependencies");
124
+ }
106
125
  function hasAppKey(cwd) {
107
126
  const envPath = join(cwd, ".env");
108
127
  if (!existsSync(envPath))
@@ -124,26 +143,53 @@ export async function ensureAppKey(cwd) {
124
143
  }
125
144
  log.success("Generated application key");
126
145
  }
146
+ async function runInitialMigration(cwd) {
147
+ const appEnv = (process.env.APP_ENV || process.env.NODE_ENV || "local").toLowerCase();
148
+ if (!["local", "development", "dev", "test"].includes(appEnv)) {
149
+ log.info(`Skipping initial migration in the ${appEnv} environment`);
150
+ return;
151
+ }
152
+ log.info("Running initial database migration...");
153
+ try {
154
+ const result = await runAction(Action.Migrate, { cwd });
155
+ if (result.isErr) {
156
+ log.warn("Initial migration did not complete - you can run it later via ./buddy migrate");
157
+ log.debug(result.error);
158
+ return;
159
+ }
160
+ log.success("Database is migrated");
161
+ } catch (error) {
162
+ log.warn("Initial migration did not complete - you can run it later via ./buddy migrate");
163
+ log.debug(error);
164
+ }
165
+ }
127
166
  async function initializeProject(options) {
128
167
  const cwd = options.cwd || p.projectPath();
129
168
  await ensurePantryDependencies(cwd);
169
+ await ensureNodeDependencies(cwd);
130
170
  await ensureEnvIsSet(options);
131
171
  if (!options.skipKeygen)
132
172
  await ensureAppKey(cwd);
173
+ await runInitialMigration(cwd);
133
174
  if (!options.skipAws) {
134
175
  log.info("Ensuring AWS is connected...");
135
- const awsResult = await runCommand("./buddy configure:aws", {
136
- cwd,
137
- timeoutMs: AWS_CONFIG_TIMEOUT_MS
138
- });
139
- if (awsResult.isErr) {
140
- handleError(awsResult.error);
141
- process.exit(ExitCode.FatalError);
176
+ try {
177
+ const awsResult = await runCommand("./buddy configure:aws", {
178
+ cwd,
179
+ timeoutMs: AWS_CONFIG_TIMEOUT_MS
180
+ });
181
+ if (awsResult.isErr) {
182
+ log.warn("AWS not configured - you can do this later via ./buddy configure:aws");
183
+ log.debug(awsResult.error);
184
+ } else
185
+ log.success("Configured AWS");
186
+ } catch (error) {
187
+ log.warn("AWS not configured - you can do this later via ./buddy configure:aws");
188
+ log.debug(error);
142
189
  }
143
- log.success("Configured AWS");
144
190
  }
145
191
  log.success("Project is setup");
146
- log.info("Happy coding! \uD83D\uDC99");
192
+ log.info("Run `./buddy doctor` anytime to check your setup. Happy coding! \uD83D\uDC99");
147
193
  }
148
194
  const DB_CONNECTION_PACKAGES = {
149
195
  postgres: { name: "postgresql.org", version: "^17.10" },
@@ -5,7 +5,7 @@ import { onUnknownSubcommand } from "@stacksjs/cli";
5
5
  export function types(buddy) {
6
6
  const descriptions = {
7
7
  generate: "Generate the types of & for your library/libraries",
8
- fix: "wip",
8
+ fix: "Fix the generated types of & for your library/libraries (not yet implemented)",
9
9
  project: "Target a specific project",
10
10
  verbose: "Enable verbose output"
11
11
  };
@@ -12,6 +12,7 @@ const commandRegistry = {
12
12
  "config:migrate": { path: "./commands/config-migrate.js", exportName: "configMigrate" },
13
13
  configure: { path: "./commands/configure.js", exportName: "configure" },
14
14
  create: { path: "./commands/create.js", exportName: "create" },
15
+ new: { path: "./commands/create.js", exportName: "create" },
15
16
  deploy: { path: "./commands/deploy.js", exportName: "deploy" },
16
17
  dev: { path: "./commands/dev.js", exportName: "dev" },
17
18
  dns: { path: "./commands/dns.js", exportName: "dns" },
@@ -25,6 +26,9 @@ const commandRegistry = {
25
26
  "extension:init": { path: "./commands/extension.js", exportName: "extension" },
26
27
  "extension:build": { path: "./commands/extension.js", exportName: "extension" },
27
28
  "extension:package": { path: "./commands/extension.js", exportName: "extension" },
29
+ "extension:safari:init": { path: "./commands/extension.js", exportName: "extension" },
30
+ "extension:safari:app": { path: "./commands/extension.js", exportName: "extension" },
31
+ "extension:safari:publish": { path: "./commands/extension.js", exportName: "extension" },
28
32
  "dashboard:install": { path: "./commands/features.js", exportName: "features" },
29
33
  "dashboard:uninstall": { path: "./commands/features.js", exportName: "features" },
30
34
  "commerce:install": { path: "./commands/features.js", exportName: "features" },
@@ -45,6 +49,8 @@ const commandRegistry = {
45
49
  install: { path: "./commands/install.js", exportName: "install" },
46
50
  key: { path: "./commands/key.js", exportName: "key" },
47
51
  lint: { path: "./commands/lint.js", exportName: "lint" },
52
+ format: { path: "./commands/lint.js", exportName: "lint" },
53
+ "format:check": { path: "./commands/lint.js", exportName: "lint" },
48
54
  list: { path: "./commands/list.js", exportName: "list" },
49
55
  mail: { path: "./commands/mail.js", exportName: "mailCommands" },
50
56
  "mail:preview": { path: "./commands/mail.js", exportName: "mailCommands" },
@@ -52,7 +58,11 @@ const commandRegistry = {
52
58
  down: { path: "./commands/maintenance.js", exportName: "maintenance" },
53
59
  up: { path: "./commands/maintenance.js", exportName: "maintenance" },
54
60
  status: { path: "./commands/maintenance.js", exportName: "maintenance" },
61
+ "coming-soon": { path: "./commands/maintenance.js", exportName: "maintenance" },
62
+ "coming-soon:status": { path: "./commands/maintenance.js", exportName: "maintenance" },
63
+ launch: { path: "./commands/maintenance.js", exportName: "maintenance" },
55
64
  make: { path: "./commands/make.js", exportName: "make" },
65
+ "scaffold:crud": { path: "./commands/make.js", exportName: "make" },
56
66
  migrate: { path: "./commands/migrate.js", exportName: "migrate" },
57
67
  "migrate:fresh": { path: "./commands/migrate.js", exportName: "migrate" },
58
68
  "migrate:switch": { path: "./commands/migrate.js", exportName: "migrate" },
@@ -74,8 +84,11 @@ const commandRegistry = {
74
84
  release: { path: "./commands/release.js", exportName: "release" },
75
85
  route: { path: "./commands/route.js", exportName: "route" },
76
86
  saas: { path: "./commands/saas.js", exportName: "saas" },
87
+ "stripe:setup": { path: "./commands/saas.js", exportName: "saas" },
77
88
  schedule: { path: "./commands/schedule.js", exportName: "schedule" },
78
89
  search: { path: "./commands/search.js", exportName: "search" },
90
+ "search-engine:update": { path: "./commands/search.js", exportName: "search" },
91
+ "search-engine:settings": { path: "./commands/search.js", exportName: "search" },
79
92
  seed: { path: "./commands/seed.js", exportName: "seed" },
80
93
  "seed:roles": { path: "./commands/seed.js", exportName: "seed" },
81
94
  "roles:seed": { path: "./commands/seed.js", exportName: "seed" },
@@ -177,12 +190,9 @@ export function getCommandsToLoad(args) {
177
190
  const baseCommand = requestedCommand.split(":")[0];
178
191
  if (baseCommand === "list")
179
192
  return ["list", ...Object.keys(commandRegistry).filter((k) => k !== "list")];
193
+ if (commandRegistry[requestedCommand])
194
+ return [requestedCommand];
180
195
  if (commandRegistry[baseCommand])
181
196
  return [baseCommand];
182
- if (requestedCommand.includes(":")) {
183
- const namespace = baseCommand;
184
- if (commandRegistry[namespace])
185
- return [namespace];
186
- }
187
197
  return Object.keys(commandRegistry);
188
198
  }
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@stacksjs/buddy",
3
3
  "type": "module",
4
4
  "sideEffects": false,
5
- "version": "0.70.112",
5
+ "version": "0.70.114",
6
6
  "description": "Meet Buddy. The Stacks runtime.",
7
7
  "author": "Chris Breuer",
8
8
  "contributors": [
@@ -92,54 +92,55 @@
92
92
  "prepublishOnly": "bun run build"
93
93
  },
94
94
  "dependencies": {
95
- "@stacksjs/actions": "^0.70.23",
96
- "@stacksjs/ai": "^0.70.23",
97
- "@stacksjs/alias": "^0.70.23",
98
- "@stacksjs/arrays": "^0.70.23",
99
- "@stacksjs/auth": "^0.70.23",
100
- "@stacksjs/build": "^0.70.23",
101
- "@stacksjs/cache": "^0.70.23",
102
- "@stacksjs/cli": "^0.70.23",
103
- "@stacksjs/cloud": "^0.70.23",
104
- "@stacksjs/collections": "^0.70.23",
105
- "@stacksjs/config": "^0.70.23",
106
- "@stacksjs/database": "^0.70.23",
107
- "@stacksjs/desktop": "^0.2.82",
108
- "@stacksjs/dns": "^0.70.23",
109
- "@stacksjs/email": "^0.70.23",
110
- "@stacksjs/enums": "^0.70.23",
111
- "@stacksjs/error-handling": "^0.70.23",
112
- "@stacksjs/events": "^0.70.23",
113
- "@stacksjs/git": "^0.70.23",
95
+ "@stacksjs/actions": "^0.70.114",
96
+ "@stacksjs/ai": "^0.70.114",
97
+ "@stacksjs/alias": "^0.70.114",
98
+ "@stacksjs/arrays": "^0.70.114",
99
+ "@stacksjs/auth": "^0.70.114",
100
+ "@stacksjs/build": "^0.70.114",
101
+ "@stacksjs/cache": "^0.70.114",
102
+ "@stacksjs/cli": "^0.70.114",
103
+ "@stacksjs/clapp": "catalog:",
104
+ "@stacksjs/cloud": "^0.70.114",
105
+ "@stacksjs/collections": "^0.70.114",
106
+ "@stacksjs/config": "^0.70.114",
107
+ "@stacksjs/database": "^0.70.114",
108
+ "@stacksjs/desktop": "^0.70.114",
109
+ "@stacksjs/dns": "^0.70.114",
110
+ "@stacksjs/email": "^0.70.114",
111
+ "@stacksjs/enums": "^0.70.114",
112
+ "@stacksjs/error-handling": "^0.70.114",
113
+ "@stacksjs/events": "^0.70.114",
114
+ "@stacksjs/git": "^0.70.114",
114
115
  "@stacksjs/gitit": "^0.2.5",
115
- "@stacksjs/health": "^0.70.23",
116
+ "@stacksjs/health": "^0.70.114",
116
117
  "@stacksjs/dnsx": "^0.2.3",
117
118
  "@stacksjs/httx": "^0.1.10",
118
- "@stacksjs/lint": "^0.70.23",
119
- "@stacksjs/logging": "^0.70.23",
120
- "@stacksjs/notifications": "^0.70.23",
121
- "@stacksjs/objects": "^0.70.23",
122
- "@stacksjs/orm": "^0.70.23",
123
- "@stacksjs/path": "^0.70.23",
124
- "@stacksjs/payments": "^0.70.23",
125
- "@stacksjs/realtime": "^0.70.23",
126
- "@stacksjs/router": "^0.70.23",
127
- "@stacksjs/rpx": "^0.11.13",
128
- "@stacksjs/search-engine": "^0.70.23",
129
- "@stacksjs/security": "^0.70.23",
130
- "@stacksjs/server": "^0.70.23",
131
- "@stacksjs/storage": "^0.70.23",
132
- "@stacksjs/strings": "^0.70.23",
133
- "@stacksjs/testing": "^0.70.23",
134
- "@stacksjs/tunnel": "^0.70.23",
135
- "@stacksjs/types": "^0.70.23",
136
- "@stacksjs/ui": "^0.70.23",
137
- "@stacksjs/utils": "^0.70.23",
138
- "@stacksjs/validation": "^0.70.23",
139
- "@stacksjs/ts-cloud": "^0.7.17"
119
+ "@stacksjs/lint": "^0.70.114",
120
+ "@stacksjs/logging": "^0.70.114",
121
+ "@stacksjs/notifications": "^0.70.114",
122
+ "@stacksjs/objects": "^0.70.114",
123
+ "@stacksjs/orm": "^0.70.114",
124
+ "@stacksjs/path": "^0.70.114",
125
+ "@stacksjs/payments": "^0.70.114",
126
+ "@stacksjs/realtime": "^0.70.114",
127
+ "@stacksjs/router": "^0.70.114",
128
+ "@stacksjs/rpx": "^0.11.29",
129
+ "@stacksjs/search-engine": "^0.70.114",
130
+ "@stacksjs/security": "^0.70.114",
131
+ "@stacksjs/server": "^0.70.114",
132
+ "@stacksjs/storage": "^0.70.114",
133
+ "@stacksjs/strings": "^0.70.114",
134
+ "@stacksjs/testing": "^0.70.114",
135
+ "@stacksjs/tunnel": "^0.70.114",
136
+ "@stacksjs/types": "^0.70.114",
137
+ "@stacksjs/ui": "^0.70.114",
138
+ "@stacksjs/utils": "^0.70.114",
139
+ "@stacksjs/validation": "^0.70.114",
140
+ "@stacksjs/ts-cloud": "catalog:"
140
141
  },
141
142
  "devDependencies": {
142
- "better-dx": "^0.2.16"
143
+ "better-dx": "catalog:"
143
144
  },
144
145
  "web-types": "./web-types.json"
145
146
  }