diff --git a/repos/pnpm/monorepo/.vscode/settings.json b/repos/pnpm/monorepo/.vscode/settings.json new file mode 100644 index 0000000..4e839cb --- /dev/null +++ b/repos/pnpm/monorepo/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "rescript.settings.incrementalTypechecking.debugLogging": true +} \ No newline at end of file diff --git a/repos/pnpm/monorepo/package.json b/repos/pnpm/monorepo/package.json new file mode 100644 index 0000000..81a0715 --- /dev/null +++ b/repos/pnpm/monorepo/package.json @@ -0,0 +1,21 @@ +{ + "name": "pnpm-monorepo", + "version": "1.0.0", + "private": true, + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "rescript", + "clean": "rescript clean" + }, + "keywords": [], + "author": "", + "license": "ISC", + "packageManager": "pnpm@10.15.1", + "dependencies": { + "rescript": "catalog:", + "a": "workspace:*", + "b": "workspace:*" + } +} diff --git a/repos/pnpm/monorepo/packages/a/package.json b/repos/pnpm/monorepo/packages/a/package.json new file mode 100644 index 0000000..d4fe073 --- /dev/null +++ b/repos/pnpm/monorepo/packages/a/package.json @@ -0,0 +1,18 @@ +{ + "name": "a", + "version": "1.0.0", + "private": false, + "type": "module", + "main": "index.js", + "exports": "./index.js", + "scripts": { + "build": "echo \"no build\"", + "start": "node index.js" + }, + "dependencies": { + "rescript": "catalog:" + }, + "license": "ISC" +} + + diff --git a/repos/pnpm/monorepo/packages/a/rescript.json b/repos/pnpm/monorepo/packages/a/rescript.json new file mode 100644 index 0000000..56c29d8 --- /dev/null +++ b/repos/pnpm/monorepo/packages/a/rescript.json @@ -0,0 +1,4 @@ +{ + "name": "a", + "sources": ["src"] +} \ No newline at end of file diff --git a/repos/pnpm/monorepo/packages/a/src/A.res b/repos/pnpm/monorepo/packages/a/src/A.res new file mode 100644 index 0000000..679071e --- /dev/null +++ b/repos/pnpm/monorepo/packages/a/src/A.res @@ -0,0 +1,3 @@ +let a = 1 +let x : string = "e" + \ No newline at end of file diff --git a/repos/pnpm/monorepo/packages/a/src/A.res.mjs b/repos/pnpm/monorepo/packages/a/src/A.res.mjs new file mode 100644 index 0000000..8653134 --- /dev/null +++ b/repos/pnpm/monorepo/packages/a/src/A.res.mjs @@ -0,0 +1,12 @@ +// Generated by ReScript, PLEASE EDIT WITH CARE + + +let a = 1; + +let x = "e"; + +export { + a, + x, +} +/* No side effect */ diff --git a/repos/pnpm/monorepo/packages/b/package.json b/repos/pnpm/monorepo/packages/b/package.json new file mode 100644 index 0000000..112fa6e --- /dev/null +++ b/repos/pnpm/monorepo/packages/b/package.json @@ -0,0 +1,19 @@ +{ + "name": "b", + "version": "1.0.0", + "private": false, + "type": "module", + "main": "index.js", + "exports": "./index.js", + "scripts": { + "build": "echo \"no build\"", + "start": "node index.js" + }, + "dependencies": { + "rescript": "catalog:", + "a": "workspace:^1.0.0" + }, + "license": "ISC" +} + + diff --git a/repos/pnpm/monorepo/packages/b/rescript.json b/repos/pnpm/monorepo/packages/b/rescript.json new file mode 100644 index 0000000..eb8a163 --- /dev/null +++ b/repos/pnpm/monorepo/packages/b/rescript.json @@ -0,0 +1,5 @@ +{ + "name": "b", + "sources": ["src"], + "dependencies": ["a"] +} \ No newline at end of file diff --git a/repos/pnpm/monorepo/packages/b/src/B.res b/repos/pnpm/monorepo/packages/b/src/B.res new file mode 100644 index 0000000..72c8a6e --- /dev/null +++ b/repos/pnpm/monorepo/packages/b/src/B.res @@ -0,0 +1 @@ +Console.log(A.a + 2) \ No newline at end of file diff --git a/repos/pnpm/monorepo/packages/b/src/B.res.mjs b/repos/pnpm/monorepo/packages/b/src/B.res.mjs new file mode 100644 index 0000000..63ddda3 --- /dev/null +++ b/repos/pnpm/monorepo/packages/b/src/B.res.mjs @@ -0,0 +1,7 @@ +// Generated by ReScript, PLEASE EDIT WITH CARE + +import * as A from "a/src/A.res.mjs"; + +console.log(A.a + 2 | 0); + +/* Not a pure module */ diff --git a/repos/pnpm/monorepo/pnpm-workspace.yaml b/repos/pnpm/monorepo/pnpm-workspace.yaml new file mode 100644 index 0000000..2e45fc0 --- /dev/null +++ b/repos/pnpm/monorepo/pnpm-workspace.yaml @@ -0,0 +1,7 @@ +packages: + - packages/* + +catalog: + rescript: 12.0.0-beta.13 + + diff --git a/repos/pnpm/monorepo/rescript.json b/repos/pnpm/monorepo/rescript.json new file mode 100644 index 0000000..0902ce4 --- /dev/null +++ b/repos/pnpm/monorepo/rescript.json @@ -0,0 +1,10 @@ +{ + "name": "pnpm-monorepo", + "package-specs": { + "module": "esmodule", + "in-source": true + }, + "suffix": ".res.mjs", + "dependencies": ["a", "b"], + "compiler-flags": [] +} diff --git a/tests/PnpmMonorepo.test.js b/tests/PnpmMonorepo.test.js new file mode 100644 index 0000000..41dbe74 --- /dev/null +++ b/tests/PnpmMonorepo.test.js @@ -0,0 +1,35 @@ +// Generated by ReScript, PLEASE EDIT WITH CARE + +import * as $$Bun from "bun"; +import * as Process from "process"; +import * as Buntest from "bun:test"; +import * as Nodepath from "node:path"; +import * as Principium from "./Principium.js"; + +let repo = Nodepath.resolve(import.meta.dir, "../repos/pnpm/monorepo"); + +Buntest.describe("A monorepo ReScript project using pnpm as package manager", () => { + let orginalCwd = Process.cwd(); + Buntest.beforeAll(async () => await Principium.changeCwdToRepository(repo, async () => { + await $$Bun.$`pnpm install`; + })); + Buntest.afterAll(async () => { + Process.chdir(orginalCwd); + }); + Buntest.test("should clean", async () => { + await $$Bun.$`pnpm run clean`; + }); + Buntest.test("should build", async () => { + await $$Bun.$`pnpm run build`; + }); + Buntest.test("should clean/build individual project", async () => { + let packageAPath = Nodepath.resolve(repo, "packages", "a"); + await $$Bun.$`npx rescript clean`.cwd(packageAPath); + await $$Bun.$`npx rescript build`.cwd(packageAPath); + }); +}); + +export { + repo, +} +/* repo Not a pure module */ diff --git a/tests/PnpmMonorepo.test.res b/tests/PnpmMonorepo.test.res new file mode 100644 index 0000000..214f33a --- /dev/null +++ b/tests/PnpmMonorepo.test.res @@ -0,0 +1,40 @@ +open RescriptBun.Test + +/* + + + + */ + +let repo = Path.resolve([import.meta.dir, "../repos/pnpm/monorepo"]) + +describe("A monorepo ReScript project using pnpm as package manager", () => { + let orginalCwd: string = Process.cwd(Process.process) + + beforeAllAsync(async () => { + await changeCwdToRepository( + repo, + async () => { + let _ = await sh`pnpm install` + }, + ) + }) + + afterAllAsync(async () => { + Process.chdir(Process.process, orginalCwd) + }) + + testAsync("should clean", async () => { + let _ = await sh`pnpm run clean` + }) + + testAsync("should build", async () => { + let _ = await sh`pnpm run build` + }) + + testAsync("should clean/build individual project", async () => { + let packageAPath = Path.resolve([repo, "packages", "a"]) + let _ = await (sh`npx rescript clean`)->ShellPromise.cwd(packageAPath) + let _ = await (sh`npx rescript build`)->ShellPromise.cwd(packageAPath) + }) +})