From a6d90d4064eb2713ee73a0136aaa6d19244e2b62 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 3 Feb 2026 04:45:52 +0000 Subject: [PATCH 1/3] Initial plan From 6dc6e9a18f591927731948bc1e72d13df0862d6c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 3 Feb 2026 04:50:47 +0000 Subject: [PATCH 2/3] Fix module resolution for example packages - add exports field Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com> --- examples/app-crm/package.json | 6 ++++++ examples/app-react-crud/src/mocks/browser.ts | 2 +- examples/app-todo/package.json | 6 ++++++ examples/plugin-bi/package.json | 5 +++++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/examples/app-crm/package.json b/examples/app-crm/package.json index 8884fdab2..7e5530179 100644 --- a/examples/app-crm/package.json +++ b/examples/app-crm/package.json @@ -3,6 +3,12 @@ "version": "0.9.0", "description": "Example CRM implementation using ObjectStack Protocol", "private": true, + "main": "./objectstack.config.ts", + "types": "./objectstack.config.ts", + "exports": { + ".": "./objectstack.config.ts", + "./objectstack.config": "./objectstack.config.ts" + }, "scripts": { "dev": "objectstack dev", "build": "objectstack compile objectstack.config.ts dist/crm.json", diff --git a/examples/app-react-crud/src/mocks/browser.ts b/examples/app-react-crud/src/mocks/browser.ts index f9e52b87b..c09246d35 100644 --- a/examples/app-react-crud/src/mocks/browser.ts +++ b/examples/app-react-crud/src/mocks/browser.ts @@ -10,7 +10,7 @@ import { ObjectQLPlugin } from '@objectstack/objectql'; import { InMemoryDriver } from '@objectstack/driver-memory'; import { MSWPlugin } from '@objectstack/plugin-msw'; // import appConfig from '../../objectstack.config'; -import todoConfig from '@objectstack/example-todo/objectstack.config'; +import todoConfig from '@example/app-todo/objectstack.config'; let kernel: ObjectKernel | null = null; diff --git a/examples/app-todo/package.json b/examples/app-todo/package.json index bb8fd19ec..3f3d3ed1c 100644 --- a/examples/app-todo/package.json +++ b/examples/app-todo/package.json @@ -3,6 +3,12 @@ "version": "0.9.0", "description": "Example Todo App using ObjectStack Protocol", "private": true, + "main": "./objectstack.config.ts", + "types": "./objectstack.config.ts", + "exports": { + ".": "./objectstack.config.ts", + "./objectstack.config": "./objectstack.config.ts" + }, "scripts": { "dev": "objectstack dev", "build": "objectstack compile objectstack.config.ts dist/objectstack.json", diff --git a/examples/plugin-bi/package.json b/examples/plugin-bi/package.json index 2e7b27e16..12b57d11b 100644 --- a/examples/plugin-bi/package.json +++ b/examples/plugin-bi/package.json @@ -2,6 +2,11 @@ "name": "@example/plugin-bi", "version": "0.9.0", "main": "src/index.ts", + "types": "src/index.ts", + "exports": { + ".": "./src/index.ts", + "./objectstack.config": "./objectstack.config.ts" + }, "license": "MIT", "private": true, "scripts": { From 1e0c9b0c96d6d8d13aaba5852ac80c2d33bbbca1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 3 Feb 2026 05:08:40 +0000 Subject: [PATCH 3/3] Fix Vite browser bundling - make Node.js module imports conditional Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com> --- packages/core/src/logger.ts | 13 ++++++++----- .../core/src/security/plugin-signature-verifier.ts | 6 +++--- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/packages/core/src/logger.ts b/packages/core/src/logger.ts index d41651b7e..95598c567 100644 --- a/packages/core/src/logger.ts +++ b/packages/core/src/logger.ts @@ -1,9 +1,6 @@ -import { createRequire } from 'module'; import type { LoggerConfig, LogLevel } from '@objectstack/spec/system'; import type { Logger } from '@objectstack/spec/contracts'; -const require = createRequire(import.meta.url); - /** * Universal Logger Implementation * @@ -24,6 +21,7 @@ export class ObjectLogger implements Logger { private isNode: boolean; private pinoLogger?: any; // Pino logger instance for Node.js private pinoInstance?: any; // Base Pino instance for creating child loggers + private require?: any; // CommonJS require function for Node.js constructor(config: Partial = {}) { // Detect runtime environment @@ -56,8 +54,13 @@ export class ObjectLogger implements Logger { if (!this.isNode) return; try { + // Create require function dynamically for Node.js (avoids bundling issues in browser) + // @ts-ignore - dynamic import of Node.js module + const { createRequire } = eval('require("module")'); + this.require = createRequire(import.meta.url); + // Synchronous import for Pino using createRequire (works in ESM) - const pino = require('pino'); + const pino = this.require('pino'); // Build Pino options const pinoOptions: any = { @@ -81,7 +84,7 @@ export class ObjectLogger implements Logger { // Check if pino-pretty is available let hasPretty = false; try { - require.resolve('pino-pretty'); + this.require.resolve('pino-pretty'); hasPretty = true; } catch (e) { // ignore diff --git a/packages/core/src/security/plugin-signature-verifier.ts b/packages/core/src/security/plugin-signature-verifier.ts index 0766bbf42..b8fc30a12 100644 --- a/packages/core/src/security/plugin-signature-verifier.ts +++ b/packages/core/src/security/plugin-signature-verifier.ts @@ -5,9 +5,9 @@ import type { PluginMetadata } from '../plugin-loader.js'; let cryptoModule: typeof import('crypto') | null = null; if (typeof (globalThis as any).window === 'undefined') { try { - // Dynamic import for Node.js crypto module - // eslint-disable-next-line @typescript-eslint/no-var-requires - cryptoModule = require('crypto'); + // Dynamic import for Node.js crypto module (using eval to avoid bundling issues) + // @ts-ignore - dynamic require for Node.js + cryptoModule = eval('require("crypto")'); } catch { // Crypto module not available (e.g., browser environment) }