Sfoglia il codice sorgente

Improve configuration for npm publish of @roo-code/types (#4062)

Chris Estreich 7 mesi fa
parent
commit
39d0f68659

+ 2 - 2
.github/workflows/code-qa.yml

@@ -134,8 +134,8 @@ jobs:
         working-directory: apps/vscode-e2e
         run: xvfb-run -a pnpm test:ci
 
-  unit-test:
-    needs: [platform-unit-test] # [platform-unit-test, integration-test]
+  qa:
+    needs: [check-translations, knip, compile, platform-unit-test, integration-test]
     runs-on: ubuntu-latest
     steps:
       - name: NO-OP

+ 14 - 1
MONOREPO.md

@@ -24,6 +24,19 @@ pnpm install
 If things are in good working order then you should be able to build a vsix and install it in VSCode:
 
 ```sh
-pnpm build --out ../bin/roo-code-main.vsix && \
+pnpm build -- --out ../bin/roo-code-main.vsix && \
   code --install-extension bin/roo-code-main.vsix
 ```
+
+To fully stress the monorepo setup, run the following:
+
+```sh
+pnpm clean && pnpm lint
+pnpm clean && pnpm check-types
+pnpm clean && pnpm test
+pnpm clean && pnpm bundle
+pnpm clean && pnpm build
+pnpm clean && pnpm npx turbo watch:bundle
+pnpm clean && pnpm npx turbo watch:tsc
+cd apps/vscode-e2e && pnpm test:ci
+```

+ 0 - 0
packages/types/README.md → packages/types/npm/README.md


+ 40 - 0
packages/types/npm/package.json

@@ -0,0 +1,40 @@
+{
+	"name": "@roo-code/types",
+	"version": "1.19.0",
+	"description": "TypeScript type definitions for Roo Code.",
+	"publishConfig": {
+		"access": "public",
+		"name": "@roo-code/types"
+	},
+	"author": "Roo Code Team",
+	"license": "MIT",
+	"repository": {
+		"type": "git",
+		"url": "git+https://github.com/RooCodeInc/Roo-Code.git"
+	},
+	"bugs": {
+		"url": "https://github.com/RooCodeInc/Roo-Code/issues"
+	},
+	"homepage": "https://github.com/RooCodeInc/Roo-Code/tree/main/packages/types",
+	"keywords": [
+		"roo",
+		"roo-code",
+		"ai"
+	],
+	"main": "./dist/index.cjs",
+	"module": "./dist/index.js",
+	"types": "./dist/index.d.ts",
+	"exports": {
+		".": {
+			"types": "./dist/index.d.ts",
+			"import": "./dist/index.js",
+			"require": {
+				"types": "./dist/index.d.cts",
+				"default": "./dist/index.cjs"
+			}
+		}
+	},
+	"files": [
+		"dist"
+	]
+}

+ 8 - 40
packages/types/package.json

@@ -1,58 +1,26 @@
 {
 	"name": "@roo-code/types",
-	"version": "1.16.0",
-	"description": "TypeScript type definitions for Roo Code.",
-	"publishConfig": {
-		"access": "public",
-		"main": "./dist/index.js",
-		"module": "./dist/index.mjs",
-		"types": "./dist/index.d.ts",
-		"exports": {
-			".": {
-				"types": "./dist/index.d.ts",
-				"import": "./dist/index.mjs",
-				"require": "./dist/index.js"
-			}
-		}
-	},
-	"author": "Roo Code Team",
-	"license": "MIT",
-	"repository": {
-		"type": "git",
-		"url": "git+https://github.com/RooCodeInc/Roo-Code.git"
-	},
-	"bugs": {
-		"url": "https://github.com/RooCodeInc/Roo-Code/issues"
-	},
-	"homepage": "https://github.com/RooCodeInc/Roo-Code/tree/main/packages/types",
-	"keywords": [
-		"roo",
-		"roo-code",
-		"ai"
-	],
-	"main": "./dist/index.js",
+	"version": "0.0.0",
+	"type": "module",
+	"main": "./dist/index.cjs",
 	"exports": {
 		".": {
 			"types": "./src/index.ts",
 			"import": "./src/index.ts",
 			"require": {
-				"types": "./dist/index.d.ts",
-				"default": "./dist/index.js"
+				"types": "./dist/index.d.cts",
+				"default": "./dist/index.cjs"
 			}
 		}
 	},
-	"files": [
-		"dist"
-	],
 	"scripts": {
 		"lint": "eslint src --ext=ts --max-warnings=0",
 		"check-types": "tsc --noEmit",
 		"test": "vitest --globals --run",
 		"build": "tsup",
-		"prepublishOnly": "pnpm run build",
-		"publish:test": "pnpm publish --dry-run",
-		"publish": "pnpm publish",
-		"clean": "rimraf dist .turbo"
+		"npm:publish:test": "tsup --outDir npm/dist && cd npm && npm publish --dry-run",
+		"npm:publish": "tsup --outDir npm/dist && cd npm && npm publish",
+		"clean": "rimraf dist npm/dist .turbo"
 	},
 	"dependencies": {
 		"zod": "^3.24.2"

+ 0 - 64
packages/types/src/__tests__/cjs-import.test.ts

@@ -1,64 +0,0 @@
-// npx vitest run src/__tests__/cjs-import.test.ts
-
-import { resolve } from "path"
-
-describe("CommonJS Import Tests", () => {
-	const packageRoot = resolve(__dirname, "../..")
-	const cjsPath = resolve(packageRoot, "dist", "index.js")
-
-	it("should import types using require() syntax", () => {
-		// Clear require cache to ensure fresh import.
-		delete require.cache[cjsPath]
-
-		// Use require to test CJS functionality.
-		// eslint-disable-next-line @typescript-eslint/no-require-imports
-		const module = require(cjsPath)
-
-		// Verify that key exports are available
-		expect(module.GLOBAL_STATE_KEYS).toBeDefined()
-		expect(Array.isArray(module.GLOBAL_STATE_KEYS)).toBe(true)
-		expect(module.GLOBAL_STATE_KEYS.length).toBeGreaterThan(0)
-	})
-
-	it("should import specific exports using destructuring", () => {
-		// Clear require cache.
-		delete require.cache[cjsPath]
-
-		// Test destructured require.
-		// eslint-disable-next-line @typescript-eslint/no-require-imports
-		const { GLOBAL_STATE_KEYS, SECRET_STATE_KEYS } = require(cjsPath)
-
-		expect(GLOBAL_STATE_KEYS).toBeDefined()
-		expect(SECRET_STATE_KEYS).toBeDefined()
-		expect(Array.isArray(GLOBAL_STATE_KEYS)).toBe(true)
-		expect(Array.isArray(SECRET_STATE_KEYS)).toBe(true)
-	})
-
-	it("should have default export available", () => {
-		// Clear require cache
-		delete require.cache[cjsPath]
-
-		// eslint-disable-next-line @typescript-eslint/no-require-imports
-		const module = require(cjsPath)
-
-		// Check if module has expected structure
-		expect(typeof module).toBe("object")
-		expect(module).not.toBeNull()
-	})
-
-	it("should maintain consistency between multiple require calls", () => {
-		// Clear require cache first.
-		delete require.cache[cjsPath]
-
-		// Multiple require calls should return the same cached module.
-		// eslint-disable-next-line @typescript-eslint/no-require-imports
-		const firstRequire = require(cjsPath)
-
-		// eslint-disable-next-line @typescript-eslint/no-require-imports
-		const secondRequire = require(cjsPath)
-
-		// Should be the exact same object (cached).
-		expect(firstRequire).toBe(secondRequire)
-		expect(firstRequire.GLOBAL_STATE_KEYS).toBe(secondRequire.GLOBAL_STATE_KEYS)
-	})
-})

+ 0 - 35
packages/types/src/__tests__/esm-import.test.ts

@@ -1,35 +0,0 @@
-// npx vitest run src/__tests__/esm-import.test.ts
-
-describe("ESM Import Tests", () => {
-	it("should import types using ESM syntax", async () => {
-		// Dynamic import to test ESM functionality.
-		const module = await import("../index.js")
-
-		// Verify that key exports are available.
-		expect(module.GLOBAL_STATE_KEYS).toBeDefined()
-		expect(Array.isArray(module.GLOBAL_STATE_KEYS)).toBe(true)
-		expect(module.GLOBAL_STATE_KEYS.length).toBeGreaterThan(0)
-	})
-
-	it("should import specific exports using ESM syntax", async () => {
-		// Test named imports.
-		const { GLOBAL_STATE_KEYS, SECRET_STATE_KEYS } = await import("../index.js")
-
-		expect(GLOBAL_STATE_KEYS).toBeDefined()
-		expect(SECRET_STATE_KEYS).toBeDefined()
-		expect(Array.isArray(GLOBAL_STATE_KEYS)).toBe(true)
-		expect(Array.isArray(SECRET_STATE_KEYS)).toBe(true)
-	})
-
-	it("should have consistent exports between static and dynamic imports", async () => {
-		// Static import.
-		const staticImport = await import("../index.js")
-
-		// Dynamic import.
-		const dynamicImport = await import("../index.js")
-
-		// Both should have the same exports.
-		expect(Object.keys(staticImport)).toEqual(Object.keys(dynamicImport))
-		expect(staticImport.GLOBAL_STATE_KEYS).toEqual(dynamicImport.GLOBAL_STATE_KEYS)
-	})
-})

+ 1 - 1
packages/types/src/__tests__/index.test.ts

@@ -1,4 +1,4 @@
-// npx vitest run --globals src/__tests__/index.test.ts
+// npx vitest run src/__tests__/index.test.ts
 
 import { GLOBAL_STATE_KEYS } from "../index.js"
 

+ 0 - 83
packages/types/src/__tests__/package-exports.test.ts

@@ -1,83 +0,0 @@
-// npx vitest run src/__tests__/package-exports.test.ts
-
-import { resolve } from "path"
-
-describe("Package Exports Integration Tests", () => {
-	const packageRoot = resolve(__dirname, "../..")
-	const distPath = resolve(packageRoot, "dist")
-
-	it("should import from built ESM file", async () => {
-		const esmPath = resolve(distPath, "index.mjs")
-
-		// Dynamic import of the built ESM file
-		const module = await import(esmPath)
-
-		expect(module.GLOBAL_STATE_KEYS).toBeDefined()
-		expect(Array.isArray(module.GLOBAL_STATE_KEYS)).toBe(true)
-		expect(module.GLOBAL_STATE_KEYS.length).toBeGreaterThan(0)
-	})
-
-	it("should import from built CJS file", () => {
-		const cjsPath = resolve(distPath, "index.js")
-
-		// Clear require cache to ensure fresh import
-		delete require.cache[cjsPath]
-
-		// Require the built CJS file
-		// eslint-disable-next-line @typescript-eslint/no-require-imports
-		const module = require(cjsPath)
-
-		expect(module.GLOBAL_STATE_KEYS).toBeDefined()
-		expect(Array.isArray(module.GLOBAL_STATE_KEYS)).toBe(true)
-		expect(module.GLOBAL_STATE_KEYS.length).toBeGreaterThan(0)
-	})
-
-	it("should have consistent exports between ESM and CJS builds", async () => {
-		const esmPath = resolve(distPath, "index.mjs")
-		const cjsPath = resolve(distPath, "index.js")
-
-		// Clear require cache.
-		delete require.cache[cjsPath]
-
-		// Import both versions.
-		const esmModule = await import(esmPath)
-		// eslint-disable-next-line @typescript-eslint/no-require-imports
-		const cjsModule = require(cjsPath)
-
-		// Compare key exports.
-		expect(esmModule.GLOBAL_STATE_KEYS).toEqual(cjsModule.GLOBAL_STATE_KEYS)
-		expect(esmModule.SECRET_STATE_KEYS).toEqual(cjsModule.SECRET_STATE_KEYS)
-
-		// Ensure both have the same export keys.
-		const esmKeys = Object.keys(esmModule).sort()
-		const cjsKeys = Object.keys(cjsModule).sort()
-		expect(esmKeys).toEqual(cjsKeys)
-	})
-
-	it("should import using package name resolution (simulated)", async () => {
-		// This simulates how the package would be imported by consumers.
-		// We test the source files since we can't easily test the published package.
-		const module = await import("../index.js")
-
-		// Verify the main exports that consumers would use.
-		expect(module.GLOBAL_STATE_KEYS).toBeDefined()
-		expect(module.SECRET_STATE_KEYS).toBeDefined()
-
-		// Test some common type exports exist.
-		expect(typeof module.GLOBAL_STATE_KEYS).toBe("object")
-		expect(typeof module.SECRET_STATE_KEYS).toBe("object")
-	})
-
-	it("should have TypeScript definitions available", () => {
-		const dtsPath = resolve(distPath, "index.d.ts")
-		// eslint-disable-next-line @typescript-eslint/no-require-imports
-		const fs = require("fs")
-
-		// Check that the .d.ts file exists and has content.
-		expect(fs.existsSync(dtsPath)).toBe(true)
-
-		const dtsContent = fs.readFileSync(dtsPath, "utf8")
-		expect(dtsContent.length).toBeGreaterThan(0)
-		expect(dtsContent).toContain("export")
-	})
-})

+ 0 - 5
packages/types/tsup.config.ts

@@ -8,9 +8,4 @@ export default defineConfig({
 	splitting: false,
 	sourcemap: true,
 	outDir: "dist",
-	outExtension({ format }) {
-		return {
-			js: format === "cjs" ? ".js" : ".mjs",
-		}
-	},
 })