From 7acedb3d86de7c06e58ab5dc60b5ac42489b6e72 Mon Sep 17 00:00:00 2001 From: nojaf Date: Thu, 2 Oct 2025 09:05:14 +0200 Subject: [PATCH 1/3] Add pnpm monorepo sample --- repos/pnpm/monorepo/.vscode/settings.json | 3 + repos/pnpm/monorepo/package.json | 19 ++++ repos/pnpm/monorepo/packages/a/package.json | 18 +++ repos/pnpm/monorepo/packages/a/rescript.json | 4 + repos/pnpm/monorepo/packages/a/src/A.res | 3 + repos/pnpm/monorepo/packages/a/src/A.res.mjs | 9 ++ repos/pnpm/monorepo/packages/b/package.json | 19 ++++ repos/pnpm/monorepo/packages/b/rescript.json | 5 + repos/pnpm/monorepo/packages/b/src/B.res | 1 + repos/pnpm/monorepo/packages/b/src/B.res.mjs | 7 ++ repos/pnpm/monorepo/pnpm-lock.yaml | 109 +++++++++++++++++++ repos/pnpm/monorepo/pnpm-workspace.yaml | 7 ++ repos/pnpm/monorepo/rescript.json | 10 ++ 13 files changed, 214 insertions(+) create mode 100644 repos/pnpm/monorepo/.vscode/settings.json create mode 100644 repos/pnpm/monorepo/package.json create mode 100644 repos/pnpm/monorepo/packages/a/package.json create mode 100644 repos/pnpm/monorepo/packages/a/rescript.json create mode 100644 repos/pnpm/monorepo/packages/a/src/A.res create mode 100644 repos/pnpm/monorepo/packages/a/src/A.res.mjs create mode 100644 repos/pnpm/monorepo/packages/b/package.json create mode 100644 repos/pnpm/monorepo/packages/b/rescript.json create mode 100644 repos/pnpm/monorepo/packages/b/src/B.res create mode 100644 repos/pnpm/monorepo/packages/b/src/B.res.mjs create mode 100644 repos/pnpm/monorepo/pnpm-lock.yaml create mode 100644 repos/pnpm/monorepo/pnpm-workspace.yaml create mode 100644 repos/pnpm/monorepo/rescript.json 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..e63bbe0 --- /dev/null +++ b/repos/pnpm/monorepo/package.json @@ -0,0 +1,19 @@ +{ + "name": "monorepo", + "version": "1.0.0", + "private": true, + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "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..4de91aa --- /dev/null +++ b/repos/pnpm/monorepo/packages/a/src/A.res.mjs @@ -0,0 +1,9 @@ +// Generated by ReScript, PLEASE EDIT WITH CARE + + +let a = 1; + +export { + a, +} +/* 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-lock.yaml b/repos/pnpm/monorepo/pnpm-lock.yaml new file mode 100644 index 0000000..55ab330 --- /dev/null +++ b/repos/pnpm/monorepo/pnpm-lock.yaml @@ -0,0 +1,109 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +catalogs: + default: + rescript: + specifier: 12.0.0-beta.13 + version: 12.0.0-beta.13 + +importers: + + .: + dependencies: + a: + specifier: workspace:* + version: link:packages/a + b: + specifier: workspace:* + version: link:packages/b + rescript: + specifier: 'catalog:' + version: 12.0.0-beta.13 + + packages/a: + dependencies: + rescript: + specifier: 'catalog:' + version: 12.0.0-beta.13 + + packages/b: + dependencies: + a: + specifier: workspace:^1.0.0 + version: link:../a + rescript: + specifier: 'catalog:' + version: 12.0.0-beta.13 + +packages: + + '@rescript/darwin-arm64@12.0.0-beta.13': + resolution: {integrity: sha512-2cT13ELxFsnbEL3H9tzjOu5qzMbXrkxtb+RYgotVJyLdbQxlqPNqGhuZFT8QjZ86jpZgjZV29MKjjuh7JoXjmA==} + engines: {node: '>=20.11.0'} + cpu: [arm64] + os: [darwin] + + '@rescript/darwin-x64@12.0.0-beta.13': + resolution: {integrity: sha512-m/LqChC+11WIgPLTjtAbuhHzQjZ0yBN2/1px8uoACb0FQbGMznKPDZ39evBSa6dXcIKNXYEhmLLNTbeYJ5tlAQ==} + engines: {node: '>=20.11.0'} + cpu: [x64] + os: [darwin] + + '@rescript/linux-arm64@12.0.0-beta.13': + resolution: {integrity: sha512-LkXO1VqrphChZLeNCVOrIIk/tknh0GN6nbbwjmUU5381bmDde0WR81rKFA7/pR9W6hJT0J8/aZ2IaMuVQcFCww==} + engines: {node: '>=20.11.0'} + cpu: [arm64] + os: [linux] + + '@rescript/linux-x64@12.0.0-beta.13': + resolution: {integrity: sha512-IIBuRvQjRuLCvmmYbCv+uKxTPhu9a8TFR0vbIGpRMjF8HWrkWjTGB5Lq24dcFYyp+bdd2csWFedGpbk1nXm1+A==} + engines: {node: '>=20.11.0'} + cpu: [x64] + os: [linux] + + '@rescript/runtime@12.0.0-beta.13': + resolution: {integrity: sha512-PFwOsh9erOM6fn6Bo+3ewSqIyr1UOsRkOXJPo0IwO8hh1JoaBgtQDyjJqd7C2i1v7HvpW5JRjWebOezyFievEA==} + + '@rescript/win32-x64@12.0.0-beta.13': + resolution: {integrity: sha512-GYFyWNvabQf4F2wKcIPsvqxLJVefR73Eu9YnjGCGjgDPURLiD5tjHESCgUd6w5CKeA/DZFoPDtWTEmf0+9sbGw==} + engines: {node: '>=20.11.0'} + cpu: [x64] + os: [win32] + + rescript@12.0.0-beta.13: + resolution: {integrity: sha512-il1KAB0PVEs3y/IiE6CnxFUMakv5VXTXT60wGVcGjNaY4Gj5d1G1uePWCc7UtpjRwYjF9OQFMyN/MzLkRuo6CA==} + engines: {node: '>=20.11.0'} + hasBin: true + +snapshots: + + '@rescript/darwin-arm64@12.0.0-beta.13': + optional: true + + '@rescript/darwin-x64@12.0.0-beta.13': + optional: true + + '@rescript/linux-arm64@12.0.0-beta.13': + optional: true + + '@rescript/linux-x64@12.0.0-beta.13': + optional: true + + '@rescript/runtime@12.0.0-beta.13': {} + + '@rescript/win32-x64@12.0.0-beta.13': + optional: true + + rescript@12.0.0-beta.13: + dependencies: + '@rescript/runtime': 12.0.0-beta.13 + optionalDependencies: + '@rescript/darwin-arm64': 12.0.0-beta.13 + '@rescript/darwin-x64': 12.0.0-beta.13 + '@rescript/linux-arm64': 12.0.0-beta.13 + '@rescript/linux-x64': 12.0.0-beta.13 + '@rescript/win32-x64': 12.0.0-beta.13 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": [] +} From b3721f74e980a2a5a93a55053e0e7e71cbf73e57 Mon Sep 17 00:00:00 2001 From: nojaf Date: Fri, 3 Oct 2025 09:10:43 +0200 Subject: [PATCH 2/3] Add pnpm monorepo test --- repos/pnpm/monorepo/package.json | 6 ++- repos/pnpm/monorepo/packages/a/src/A.res.mjs | 3 ++ tests/PnpmMonorepo.test.js | 35 +++++++++++++++++ tests/PnpmMonorepo.test.res | 40 ++++++++++++++++++++ 4 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 tests/PnpmMonorepo.test.js create mode 100644 tests/PnpmMonorepo.test.res diff --git a/repos/pnpm/monorepo/package.json b/repos/pnpm/monorepo/package.json index e63bbe0..81a0715 100644 --- a/repos/pnpm/monorepo/package.json +++ b/repos/pnpm/monorepo/package.json @@ -1,11 +1,13 @@ { - "name": "monorepo", + "name": "pnpm-monorepo", "version": "1.0.0", "private": true, "description": "", "main": "index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "echo \"Error: no test specified\" && exit 1", + "build": "rescript", + "clean": "rescript clean" }, "keywords": [], "author": "", diff --git a/repos/pnpm/monorepo/packages/a/src/A.res.mjs b/repos/pnpm/monorepo/packages/a/src/A.res.mjs index 4de91aa..8653134 100644 --- a/repos/pnpm/monorepo/packages/a/src/A.res.mjs +++ b/repos/pnpm/monorepo/packages/a/src/A.res.mjs @@ -3,7 +3,10 @@ let a = 1; +let x = "e"; + export { a, + x, } /* No side effect */ 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) + }) +}) From 85c6bc44fef929f4f38602aa5b1f7b6c8fc2103e Mon Sep 17 00:00:00 2001 From: nojaf Date: Fri, 3 Oct 2025 09:11:08 +0200 Subject: [PATCH 3/3] Remove lock file --- repos/pnpm/monorepo/pnpm-lock.yaml | 109 ----------------------------- 1 file changed, 109 deletions(-) delete mode 100644 repos/pnpm/monorepo/pnpm-lock.yaml diff --git a/repos/pnpm/monorepo/pnpm-lock.yaml b/repos/pnpm/monorepo/pnpm-lock.yaml deleted file mode 100644 index 55ab330..0000000 --- a/repos/pnpm/monorepo/pnpm-lock.yaml +++ /dev/null @@ -1,109 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -catalogs: - default: - rescript: - specifier: 12.0.0-beta.13 - version: 12.0.0-beta.13 - -importers: - - .: - dependencies: - a: - specifier: workspace:* - version: link:packages/a - b: - specifier: workspace:* - version: link:packages/b - rescript: - specifier: 'catalog:' - version: 12.0.0-beta.13 - - packages/a: - dependencies: - rescript: - specifier: 'catalog:' - version: 12.0.0-beta.13 - - packages/b: - dependencies: - a: - specifier: workspace:^1.0.0 - version: link:../a - rescript: - specifier: 'catalog:' - version: 12.0.0-beta.13 - -packages: - - '@rescript/darwin-arm64@12.0.0-beta.13': - resolution: {integrity: sha512-2cT13ELxFsnbEL3H9tzjOu5qzMbXrkxtb+RYgotVJyLdbQxlqPNqGhuZFT8QjZ86jpZgjZV29MKjjuh7JoXjmA==} - engines: {node: '>=20.11.0'} - cpu: [arm64] - os: [darwin] - - '@rescript/darwin-x64@12.0.0-beta.13': - resolution: {integrity: sha512-m/LqChC+11WIgPLTjtAbuhHzQjZ0yBN2/1px8uoACb0FQbGMznKPDZ39evBSa6dXcIKNXYEhmLLNTbeYJ5tlAQ==} - engines: {node: '>=20.11.0'} - cpu: [x64] - os: [darwin] - - '@rescript/linux-arm64@12.0.0-beta.13': - resolution: {integrity: sha512-LkXO1VqrphChZLeNCVOrIIk/tknh0GN6nbbwjmUU5381bmDde0WR81rKFA7/pR9W6hJT0J8/aZ2IaMuVQcFCww==} - engines: {node: '>=20.11.0'} - cpu: [arm64] - os: [linux] - - '@rescript/linux-x64@12.0.0-beta.13': - resolution: {integrity: sha512-IIBuRvQjRuLCvmmYbCv+uKxTPhu9a8TFR0vbIGpRMjF8HWrkWjTGB5Lq24dcFYyp+bdd2csWFedGpbk1nXm1+A==} - engines: {node: '>=20.11.0'} - cpu: [x64] - os: [linux] - - '@rescript/runtime@12.0.0-beta.13': - resolution: {integrity: sha512-PFwOsh9erOM6fn6Bo+3ewSqIyr1UOsRkOXJPo0IwO8hh1JoaBgtQDyjJqd7C2i1v7HvpW5JRjWebOezyFievEA==} - - '@rescript/win32-x64@12.0.0-beta.13': - resolution: {integrity: sha512-GYFyWNvabQf4F2wKcIPsvqxLJVefR73Eu9YnjGCGjgDPURLiD5tjHESCgUd6w5CKeA/DZFoPDtWTEmf0+9sbGw==} - engines: {node: '>=20.11.0'} - cpu: [x64] - os: [win32] - - rescript@12.0.0-beta.13: - resolution: {integrity: sha512-il1KAB0PVEs3y/IiE6CnxFUMakv5VXTXT60wGVcGjNaY4Gj5d1G1uePWCc7UtpjRwYjF9OQFMyN/MzLkRuo6CA==} - engines: {node: '>=20.11.0'} - hasBin: true - -snapshots: - - '@rescript/darwin-arm64@12.0.0-beta.13': - optional: true - - '@rescript/darwin-x64@12.0.0-beta.13': - optional: true - - '@rescript/linux-arm64@12.0.0-beta.13': - optional: true - - '@rescript/linux-x64@12.0.0-beta.13': - optional: true - - '@rescript/runtime@12.0.0-beta.13': {} - - '@rescript/win32-x64@12.0.0-beta.13': - optional: true - - rescript@12.0.0-beta.13: - dependencies: - '@rescript/runtime': 12.0.0-beta.13 - optionalDependencies: - '@rescript/darwin-arm64': 12.0.0-beta.13 - '@rescript/darwin-x64': 12.0.0-beta.13 - '@rescript/linux-arm64': 12.0.0-beta.13 - '@rescript/linux-x64': 12.0.0-beta.13 - '@rescript/win32-x64': 12.0.0-beta.13