Skip to content

Commit 0fd9d78

Browse files
committed
feat: add @objectstack/service-cloud dependency and update serve command for project mode
1 parent 772ac25 commit 0fd9d78

4 files changed

Lines changed: 39 additions & 6 deletions

File tree

examples/app-crm/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
"test": "objectstack test"
1919
},
2020
"dependencies": {
21-
"@objectstack/spec": "workspace:*"
21+
"@objectstack/spec": "workspace:*",
22+
"@objectstack/service-cloud": "workspace:*"
2223
},
2324
"devDependencies": {
2425
"@objectstack/cli": "workspace:*",

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"dev": "pnpm --filter @objectstack/server dev",
99
"dev:cloud": "OBJECTSTACK_MODE=cloud pnpm --filter @objectstack/server dev",
1010
"start": "pnpm --filter @objectstack/server start",
11-
"crm:dev": "pnpm --filter @example/app-crm build && OBJECTSTACK_ARTIFACT_PATH=\"$PWD/examples/app-crm/dist/objectstack.json\" OBJECTSTACK_PROJECT_ID=proj_crm pnpm --filter @objectstack/server dev",
11+
"crm:dev": "pnpm --filter @example/app-crm build && OBJECTSTACK_MODE=project OBJECTSTACK_PROJECT_ID=proj_crm pnpm --filter @example/app-crm dev",
1212
"studio:start": "pnpm --filter @objectstack/studio start",
1313
"test": "turbo run test",
1414
"test:e2e": "turbo run test:e2e",

packages/cli/src/commands/serve.ts

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -177,11 +177,40 @@ export default class Serve extends Command {
177177

178178
// If the user's config is a bare defineStack() and OBJECTSTACK_MODE is
179179
// set (or config.bootMode is set), build the full project/cloud/
180-
// standalone stack via @objectstack/service-cloud.
180+
// standalone stack via @objectstack/service-cloud. The package is
181+
// resolved by walking up node_modules from the user's cwd, so it
182+
// picks up the consumer's installation regardless of where the CLI
183+
// itself lives.
181184
if (shouldBootWithLibrary(config)) {
182185
try {
183-
const cloudModName = '@objectstack/service-cloud';
184-
const cloudMod: any = await import(cloudModName);
186+
const { pathToFileURL } = await import('node:url');
187+
let dir = process.cwd();
188+
let cloudPkgDir: string | null = null;
189+
// Walk upward from cwd looking for node_modules/@objectstack/service-cloud
190+
while (true) {
191+
const candidate = path.join(dir, 'node_modules', '@objectstack', 'service-cloud');
192+
if (fs.existsSync(path.join(candidate, 'package.json'))) {
193+
cloudPkgDir = candidate;
194+
break;
195+
}
196+
const parent = path.dirname(dir);
197+
if (parent === dir) break;
198+
dir = parent;
199+
}
200+
if (!cloudPkgDir) {
201+
throw new Error('@objectstack/service-cloud not found in any node_modules from cwd upward');
202+
}
203+
const pkg = JSON.parse(
204+
fs.readFileSync(path.join(cloudPkgDir, 'package.json'), 'utf8'),
205+
);
206+
const entry =
207+
pkg.exports?.['.']?.import ??
208+
pkg.exports?.['.']?.default ??
209+
pkg.module ??
210+
pkg.main ??
211+
'dist/index.js';
212+
const cloudEntry = path.join(cloudPkgDir, entry);
213+
const cloudMod: any = await import(pathToFileURL(cloudEntry).href);
185214
const bootResult = await cloudMod.createBootStack({
186215
mode: config.bootMode,
187216
project: config.project,
@@ -191,7 +220,7 @@ export default class Serve extends Command {
191220
config = bootResult as any;
192221
} catch (err) {
193222
console.error(
194-
'OBJECTSTACK_MODE is set but @objectstack/service-cloud is not installed.',
223+
'OBJECTSTACK_MODE is set but @objectstack/service-cloud cannot be loaded.',
195224
'Install it with: pnpm add @objectstack/service-cloud',
196225
);
197226
throw err;

pnpm-lock.yaml

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)