@effected/pnpm-plugin-effect 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +107 -0
- package/index.d.ts +2 -0
- package/index.js +142 -0
- package/package.json +40 -0
- package/pnpmfile.cjs +584 -0
- package/pnpmfile.mjs +583 -0
- package/tsdoc-metadata.json +11 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 C. Spencer Beggs
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# @effected/pnpm-plugin-effect
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@effected/pnpm-plugin-effect)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://nodejs.org/)
|
|
6
|
+
[](https://www.typescriptlang.org/)
|
|
7
|
+
[](https://pnpm.io/)
|
|
8
|
+
|
|
9
|
+
A pnpm [config dependency](https://pnpm.io/config-dependencies) that centralizes Effect-ecosystem versioning through two [pnpm catalogs](https://pnpm.io/catalogs). The `effect` catalog pins every `effect` and `@effect/*` package to one [Effect v4](https://effect.website/blog/releases/effect/40-beta/) release. The `effectPeers` catalog carries the same package set at a computed shared floor — the lowest version safe to advertise as a peer range — so a library you publish does not over-constrain the applications that install it. Install it once and both catalogs are available to every package in your workspace.
|
|
10
|
+
|
|
11
|
+
> **Pre-release.** This package is part of the `@effected/*` kit, in pre-`1.0.0`
|
|
12
|
+
> development against a single pinned Effect v4 beta. Packages graduate to
|
|
13
|
+
> `1.0.0` once Effect `4.0.0` ships. To hold your own `effect` versions at
|
|
14
|
+
> exactly the ones the kit is built and tested against, install
|
|
15
|
+
> [`@effected/pnpm-plugin-effect`](https://www.npmjs.com/package/@effected/pnpm-plugin-effect).
|
|
16
|
+
>
|
|
17
|
+
> **Stability: unstable.** This package's API surface is not yet considered
|
|
18
|
+
> complete and may change across `0.x` releases. Pin an exact version — even a
|
|
19
|
+
> package marked *stable* before `1.0.0` can introduce a breaking change by
|
|
20
|
+
> accident, and an exact pin turns that into a type-check error rather than a
|
|
21
|
+
> runtime surprise. Full policy: [release strategy](https://github.com/spencerbeggs/effected#release-strategy).
|
|
22
|
+
|
|
23
|
+
## Why @effected/pnpm-plugin-effect
|
|
24
|
+
|
|
25
|
+
Effect ships as a couple of dozen packages that have to move together. Pin them by hand and the pins drift: one `@effect/*` package advances, its `effect` peer no longer matches the core you installed, and the failure surfaces as a type error in a file nobody touched. Keeping the pins in one place is the whole idea, and pnpm catalogs are the mechanism — `catalog:effect` in a manifest instead of a version string, and one place to edit when the beta advances.
|
|
26
|
+
|
|
27
|
+
The second catalog is the part you cannot get from a catalog alone. A library's `peerDependencies` should be as *wide* as it can safely be, while its `devDependencies` should be as *specific* as possible; those are different numbers and computing the peer floor by hand across a whole ecosystem is grim. `effectPeers` is that computation, done once. This is a convenience, not a requirement — it packages the way [effected](https://github.com/spencerbeggs/effected) pins its own Effect dependencies, so a project that wants the same discipline can adopt it instead of rebuilding it. It ships catalogs and a pnpmfile, not a code API.
|
|
28
|
+
|
|
29
|
+
## Install
|
|
30
|
+
|
|
31
|
+
Add it as a **config dependency** — not a regular dependency. Config dependencies are installed ahead of the rest of the tree, which is what lets them contribute catalogs and hooks to the install that follows:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
pnpm add --config @effected/pnpm-plugin-effect
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Requires pnpm 11 or newer, and Node.js >=24.11.0. There is no npm or yarn equivalent: config dependencies and catalogs are pnpm features.
|
|
38
|
+
|
|
39
|
+
The command writes the package into your `pnpm-workspace.yaml`, filling in the version and the required integrity hash for you:
|
|
40
|
+
|
|
41
|
+
```yaml
|
|
42
|
+
configDependencies:
|
|
43
|
+
"@effected/pnpm-plugin-effect": <version>+sha512-...
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Usage
|
|
47
|
+
|
|
48
|
+
Once installed, both catalogs are available to every package in the workspace. Reference them from `package.json` by name, in place of a version range. Which field they go in depends on whether you are building an application or a library.
|
|
49
|
+
|
|
50
|
+
Applications pin the versions directly, in `dependencies`:
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"effect": "catalog:effect",
|
|
56
|
+
"@effect/ai-openai": "catalog:effect"
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Libraries want both catalogs: the pinned versions to develop and test against, and the computed floor as the peer range consumers must satisfy.
|
|
62
|
+
|
|
63
|
+
```json
|
|
64
|
+
{
|
|
65
|
+
"devDependencies": {
|
|
66
|
+
"effect": "catalog:effect",
|
|
67
|
+
"@effect/ai-openai": "catalog:effect"
|
|
68
|
+
},
|
|
69
|
+
"peerDependencies": {
|
|
70
|
+
"effect": "catalog:effectPeers",
|
|
71
|
+
"@effect/ai-openai": "catalog:effectPeers"
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
pnpm rewrites `catalog:` specifiers to concrete ranges when it publishes, so what lands on the registry is an ordinary manifest. Nothing downstream needs this plugin, or pnpm.
|
|
77
|
+
|
|
78
|
+
### Testing against both Effect versions
|
|
79
|
+
|
|
80
|
+
During the Effect v3 → v4 transition the plugin also ships an `effect3` catalog — and its `effect3Peers` floor — tracking the latest Effect **v3** releases, so you can verify code against both Effect majors in a single monorepo. A package or test workspace that should build against v3 references `catalog:effect3` where another references `catalog:effect`:
|
|
81
|
+
|
|
82
|
+
```json
|
|
83
|
+
{
|
|
84
|
+
"devDependencies": {
|
|
85
|
+
"effect": "catalog:effect3"
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
A handful of packages are excluded where their v3 line has known issues. The `effect3` catalogs are removed at this plugin's own `1.0.0`, once Effect `4.0.0` has shipped and there is nothing left to interoperate with.
|
|
91
|
+
|
|
92
|
+
## What it ships
|
|
93
|
+
|
|
94
|
+
| Catalog | Contents | Use it in |
|
|
95
|
+
| ------- | -------- | --------- |
|
|
96
|
+
| `catalog:effect` | Every `effect` and `@effect/*` package, pinned to one v4 release | `dependencies` for applications, `devDependencies` for libraries |
|
|
97
|
+
| `catalog:effectPeers` | The same package set at the computed shared peer floor | `peerDependencies` for libraries |
|
|
98
|
+
| `catalog:effect3` | The same package set tracking the latest Effect **v3** releases, a few excluded | testing against Effect v3 alongside v4 |
|
|
99
|
+
| `catalog:effect3Peers` | The v3 package set at its computed peer floor | `peerDependencies` when advertising v3 support |
|
|
100
|
+
|
|
101
|
+
It also ships a pnpmfile, which pnpm loads from the config dependency automatically. There is nothing to import and nothing to call — the package has no code API, only configuration.
|
|
102
|
+
|
|
103
|
+
While the whole ecosystem is pinned to a single beta of Effect v4, the two catalogs largely coincide. The floor computation earns its keep once the packages' releases desynchronize — and it earned it under Effect v3, where the floors genuinely diverged.
|
|
104
|
+
|
|
105
|
+
## License
|
|
106
|
+
|
|
107
|
+
[MIT](LICENSE)
|
package/index.d.ts
ADDED
package/index.js
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
//#region \0rolldown-pnpm-config/virtual/catalogs
|
|
2
|
+
const catalogs = /* @__PURE__ */ new Map([
|
|
3
|
+
["effect", /* @__PURE__ */ new Map([
|
|
4
|
+
["@effect/ai-anthropic", "4.0.0-beta.98"],
|
|
5
|
+
["@effect/ai-openai", "4.0.0-beta.98"],
|
|
6
|
+
["@effect/ai-openai-compat", "4.0.0-beta.98"],
|
|
7
|
+
["@effect/ai-openrouter", "4.0.0-beta.98"],
|
|
8
|
+
["@effect/atom-react", "4.0.0-beta.98"],
|
|
9
|
+
["@effect/atom-solid", "4.0.0-beta.98"],
|
|
10
|
+
["@effect/atom-vue", "4.0.0-beta.98"],
|
|
11
|
+
["@effect/openapi-generator", "4.0.0-beta.98"],
|
|
12
|
+
["@effect/opentelemetry", "4.0.0-beta.98"],
|
|
13
|
+
["@effect/platform-browser", "4.0.0-beta.98"],
|
|
14
|
+
["@effect/platform-bun", "4.0.0-beta.98"],
|
|
15
|
+
["@effect/platform-node", "4.0.0-beta.98"],
|
|
16
|
+
["@effect/platform-node-shared", "4.0.0-beta.98"],
|
|
17
|
+
["@effect/sql-clickhouse", "4.0.0-beta.98"],
|
|
18
|
+
["@effect/sql-d1", "4.0.0-beta.98"],
|
|
19
|
+
["@effect/sql-libsql", "4.0.0-beta.98"],
|
|
20
|
+
["@effect/sql-mssql", "4.0.0-beta.98"],
|
|
21
|
+
["@effect/sql-mysql2", "4.0.0-beta.98"],
|
|
22
|
+
["@effect/sql-pg", "4.0.0-beta.98"],
|
|
23
|
+
["@effect/sql-pglite", "4.0.0-beta.98"],
|
|
24
|
+
["@effect/sql-sqlite-bun", "4.0.0-beta.98"],
|
|
25
|
+
["@effect/sql-sqlite-do", "4.0.0-beta.98"],
|
|
26
|
+
["@effect/sql-sqlite-node", "4.0.0-beta.98"],
|
|
27
|
+
["@effect/sql-sqlite-react-native", "4.0.0-beta.98"],
|
|
28
|
+
["@effect/sql-sqlite-wasm", "4.0.0-beta.98"],
|
|
29
|
+
["@effect/tsgo", "^0.19.0"],
|
|
30
|
+
["@effect/vitest", "4.0.0-beta.98"],
|
|
31
|
+
["effect", "4.0.0-beta.98"]
|
|
32
|
+
])],
|
|
33
|
+
["effect3", /* @__PURE__ */ new Map([
|
|
34
|
+
["@effect/ai", "^0.36.0"],
|
|
35
|
+
["@effect/ai-amazon-bedrock", "^0.16.1"],
|
|
36
|
+
["@effect/ai-anthropic", "^0.26.0"],
|
|
37
|
+
["@effect/ai-google", "^0.15.0"],
|
|
38
|
+
["@effect/ai-openai", "^0.40.1"],
|
|
39
|
+
["@effect/cli", "^0.75.2"],
|
|
40
|
+
["@effect/cluster", "^0.59.0"],
|
|
41
|
+
["@effect/experimental", "^0.60.0"],
|
|
42
|
+
["@effect/language-service", "^0.86.6"],
|
|
43
|
+
["@effect/opentelemetry", "^0.63.0"],
|
|
44
|
+
["@effect/platform", "^0.96.2"],
|
|
45
|
+
["@effect/platform-browser", "^0.76.0"],
|
|
46
|
+
["@effect/platform-bun", "^0.90.0"],
|
|
47
|
+
["@effect/platform-node", "^0.107.0"],
|
|
48
|
+
["@effect/platform-node-shared", "^0.60.0"],
|
|
49
|
+
["@effect/printer", "^0.49.0"],
|
|
50
|
+
["@effect/printer-ansi", "^0.49.0"],
|
|
51
|
+
["@effect/rpc", "^0.75.1"],
|
|
52
|
+
["@effect/sql", "^0.51.1"],
|
|
53
|
+
["@effect/sql-clickhouse", "^0.49.0"],
|
|
54
|
+
["@effect/sql-d1", "^0.49.0"],
|
|
55
|
+
["@effect/sql-drizzle", "^0.50.0"],
|
|
56
|
+
["@effect/sql-kysely", "^0.47.0"],
|
|
57
|
+
["@effect/sql-libsql", "^0.41.0"],
|
|
58
|
+
["@effect/sql-mssql", "^0.52.0"],
|
|
59
|
+
["@effect/sql-mysql2", "^0.52.0"],
|
|
60
|
+
["@effect/sql-pg", "^0.52.1"],
|
|
61
|
+
["@effect/sql-sqlite-bun", "^0.52.0"],
|
|
62
|
+
["@effect/sql-sqlite-do", "^0.29.0"],
|
|
63
|
+
["@effect/sql-sqlite-node", "^0.52.0"],
|
|
64
|
+
["@effect/sql-sqlite-react-native", "^0.54.0"],
|
|
65
|
+
["@effect/sql-sqlite-wasm", "^0.52.0"],
|
|
66
|
+
["@effect/typeclass", "^0.40.0"],
|
|
67
|
+
["@effect/vitest", "^0.29.0"],
|
|
68
|
+
["@effect/workflow", "^0.18.2"],
|
|
69
|
+
["effect", "^3.21.4"]
|
|
70
|
+
])],
|
|
71
|
+
["effect3Peers", /* @__PURE__ */ new Map([
|
|
72
|
+
["@effect/ai", "^0.36.0"],
|
|
73
|
+
["@effect/ai-amazon-bedrock", "^0.16.1"],
|
|
74
|
+
["@effect/ai-anthropic", "^0.26.0"],
|
|
75
|
+
["@effect/ai-google", "^0.15.0"],
|
|
76
|
+
["@effect/ai-openai", "^0.40.1"],
|
|
77
|
+
["@effect/cli", "^0.75.2"],
|
|
78
|
+
["@effect/cluster", "^0.59.0"],
|
|
79
|
+
["@effect/experimental", "^0.60.0"],
|
|
80
|
+
["@effect/language-service", "^0.86.6"],
|
|
81
|
+
["@effect/opentelemetry", "^0.63.0"],
|
|
82
|
+
["@effect/platform", "^0.96.0"],
|
|
83
|
+
["@effect/platform-browser", "^0.76.0"],
|
|
84
|
+
["@effect/platform-bun", "^0.90.0"],
|
|
85
|
+
["@effect/platform-node", "^0.107.0"],
|
|
86
|
+
["@effect/platform-node-shared", "^0.60.0"],
|
|
87
|
+
["@effect/printer", "^0.49.0"],
|
|
88
|
+
["@effect/printer-ansi", "^0.49.0"],
|
|
89
|
+
["@effect/rpc", "^0.75.1"],
|
|
90
|
+
["@effect/sql", "^0.51.0"],
|
|
91
|
+
["@effect/sql-clickhouse", "^0.49.0"],
|
|
92
|
+
["@effect/sql-d1", "^0.49.0"],
|
|
93
|
+
["@effect/sql-drizzle", "^0.50.0"],
|
|
94
|
+
["@effect/sql-kysely", "^0.47.0"],
|
|
95
|
+
["@effect/sql-libsql", "^0.41.0"],
|
|
96
|
+
["@effect/sql-mssql", "^0.52.0"],
|
|
97
|
+
["@effect/sql-mysql2", "^0.52.0"],
|
|
98
|
+
["@effect/sql-pg", "^0.52.1"],
|
|
99
|
+
["@effect/sql-sqlite-bun", "^0.52.0"],
|
|
100
|
+
["@effect/sql-sqlite-do", "^0.29.0"],
|
|
101
|
+
["@effect/sql-sqlite-node", "^0.52.0"],
|
|
102
|
+
["@effect/sql-sqlite-react-native", "^0.54.0"],
|
|
103
|
+
["@effect/sql-sqlite-wasm", "^0.52.0"],
|
|
104
|
+
["@effect/typeclass", "^0.40.0"],
|
|
105
|
+
["@effect/vitest", "^0.29.0"],
|
|
106
|
+
["@effect/workflow", "^0.18.2"],
|
|
107
|
+
["effect", "^3.21.0"]
|
|
108
|
+
])],
|
|
109
|
+
["effectPeers", /* @__PURE__ */ new Map([
|
|
110
|
+
["@effect/ai-anthropic", "4.0.0-beta.98"],
|
|
111
|
+
["@effect/ai-openai", "4.0.0-beta.98"],
|
|
112
|
+
["@effect/ai-openai-compat", "4.0.0-beta.98"],
|
|
113
|
+
["@effect/ai-openrouter", "4.0.0-beta.98"],
|
|
114
|
+
["@effect/atom-react", "4.0.0-beta.98"],
|
|
115
|
+
["@effect/atom-solid", "4.0.0-beta.98"],
|
|
116
|
+
["@effect/atom-vue", "4.0.0-beta.98"],
|
|
117
|
+
["@effect/openapi-generator", "4.0.0-beta.98"],
|
|
118
|
+
["@effect/opentelemetry", "4.0.0-beta.98"],
|
|
119
|
+
["@effect/platform-browser", "4.0.0-beta.98"],
|
|
120
|
+
["@effect/platform-bun", "4.0.0-beta.98"],
|
|
121
|
+
["@effect/platform-node", "4.0.0-beta.98"],
|
|
122
|
+
["@effect/platform-node-shared", "4.0.0-beta.98"],
|
|
123
|
+
["@effect/sql-clickhouse", "4.0.0-beta.98"],
|
|
124
|
+
["@effect/sql-d1", "4.0.0-beta.98"],
|
|
125
|
+
["@effect/sql-libsql", "4.0.0-beta.98"],
|
|
126
|
+
["@effect/sql-mssql", "4.0.0-beta.98"],
|
|
127
|
+
["@effect/sql-mysql2", "4.0.0-beta.98"],
|
|
128
|
+
["@effect/sql-pg", "4.0.0-beta.98"],
|
|
129
|
+
["@effect/sql-pglite", "4.0.0-beta.98"],
|
|
130
|
+
["@effect/sql-sqlite-bun", "4.0.0-beta.98"],
|
|
131
|
+
["@effect/sql-sqlite-do", "4.0.0-beta.98"],
|
|
132
|
+
["@effect/sql-sqlite-node", "4.0.0-beta.98"],
|
|
133
|
+
["@effect/sql-sqlite-react-native", "4.0.0-beta.98"],
|
|
134
|
+
["@effect/sql-sqlite-wasm", "4.0.0-beta.98"],
|
|
135
|
+
["@effect/tsgo", "^0.16.2"],
|
|
136
|
+
["@effect/vitest", "4.0.0-beta.98"],
|
|
137
|
+
["effect", "4.0.0-beta.98"]
|
|
138
|
+
])]
|
|
139
|
+
]);
|
|
140
|
+
|
|
141
|
+
//#endregion
|
|
142
|
+
export { catalogs };
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@effected/pnpm-plugin-effect",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"description": "pnpm config dependency for centralized catalog management across the Effected ecosystem.",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"pnpm",
|
|
8
|
+
"pnpm-plugin",
|
|
9
|
+
"config-dependency",
|
|
10
|
+
"catalog",
|
|
11
|
+
"monorepo",
|
|
12
|
+
"effected"
|
|
13
|
+
],
|
|
14
|
+
"homepage": "https://github.com/spencerbeggs/effected/tree/main/packages/pnpm-plugin-effect#readme",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/spencerbeggs/effected/issues"
|
|
17
|
+
},
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "git+https://github.com/spencerbeggs/effected.git",
|
|
21
|
+
"directory": "packages/pnpm-plugin-effect"
|
|
22
|
+
},
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"author": {
|
|
25
|
+
"name": "C. Spencer Beggs",
|
|
26
|
+
"email": "spencer@beggs.codes",
|
|
27
|
+
"url": "https://spencerbeg.gs"
|
|
28
|
+
},
|
|
29
|
+
"type": "module",
|
|
30
|
+
"exports": {
|
|
31
|
+
".": {
|
|
32
|
+
"types": "./index.d.ts",
|
|
33
|
+
"import": "./index.js"
|
|
34
|
+
},
|
|
35
|
+
"./package.json": "./package.json"
|
|
36
|
+
},
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=24.11.0"
|
|
39
|
+
}
|
|
40
|
+
}
|