@distilled.cloud/cloudflare-rolldown-plugin 0.1.1 → 0.2.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/README.md CHANGED
@@ -5,7 +5,7 @@ Rolldown plugin for Cloudflare Workers.
5
5
  ## Install
6
6
 
7
7
  ```bash
8
- bun add -d @distilled.cloud/cloudflare-rolldown-plugin rolldown
8
+ bun add @distilled.cloud/cloudflare-rolldown-plugin rolldown
9
9
  ```
10
10
 
11
11
  ## Usage
@@ -1,4 +1,4 @@
1
- import type { RolldownPluginOption } from "rolldown";
1
+ import type { Plugin } from "rolldown";
2
2
  import type { CloudflarePluginOptions } from "../plugin.js";
3
- export declare function makeNodejsCompatPlugin(options: CloudflarePluginOptions): RolldownPluginOption;
3
+ export declare function makeNodejsCompatPlugin(options: CloudflarePluginOptions): Plugin | Array<Plugin>;
4
4
  //# sourceMappingURL=nodejs-compat.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nodejs-compat.d.ts","sourceRoot":"","sources":["../../src/plugins/nodejs-compat.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAU,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAG7D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAM5D,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,GAAG,oBAAoB,CAK7F"}
1
+ {"version":3,"file":"nodejs-compat.d.ts","sourceRoot":"","sources":["../../src/plugins/nodejs-compat.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGvC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAM5D,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAK/F"}
@@ -1,5 +1,7 @@
1
1
  import { getCloudflarePreset, nonPrefixedNodeModules } from "@cloudflare/unenv-preset";
2
2
  import assert from "node:assert";
3
+ import { createRequire } from "node:module";
4
+ import path from "node:path";
3
5
  import { esmExternalRequirePlugin } from "rolldown/plugins";
4
6
  import { defineEnv } from "unenv";
5
7
  import { hasNodejsCompat } from "../utils.js";
@@ -21,6 +23,7 @@ function makeUnenvPlugin(options) {
21
23
  ],
22
24
  }).env;
23
25
  const injectVirtualModules = makeInjectVirtualModules(inject);
26
+ const require = createRequire(import.meta.url);
24
27
  return [
25
28
  esmExternalRequirePlugin({
26
29
  external: [...external],
@@ -43,6 +46,18 @@ function makeUnenvPlugin(options) {
43
46
  },
44
47
  },
45
48
  },
49
+ {
50
+ name: "rolldown-plugin-cloudflare:nodejs-compat:unenv-preset-imports",
51
+ resolveId: {
52
+ filter: { id: /^@cloudflare\/unenv-preset\// },
53
+ async handler(id, importer, options) {
54
+ const resolved = await this.resolve(id, importer, options);
55
+ if (resolved)
56
+ return resolved;
57
+ return { id: require.resolve(id) };
58
+ },
59
+ },
60
+ },
46
61
  {
47
62
  name: "rolldown-plugin-cloudflare:nodejs-compat",
48
63
  resolveId: {
@@ -77,21 +92,24 @@ function makeUnenvPlugin(options) {
77
92
  }
78
93
  function makeNodeJsImportWarningPlugin() {
79
94
  const imports = new Map();
95
+ let root = process.cwd();
80
96
  return {
81
- name: "rolldown-plugin-cloudflare:nodejs-compat:import-warnings",
97
+ name: "rolldown-plugin-cloudflare:nodejs-import-warnings",
98
+ options(options) {
99
+ if (options.cwd) {
100
+ root = options.cwd;
101
+ }
102
+ },
82
103
  resolveId: {
83
104
  filter: { id: NODE_BUILTIN_MODULES_REGEXP },
84
- async handler(id, importer, options) {
85
- const resolved = await this.resolve(id, importer, options);
86
- if (!resolved) {
87
- if (importer) {
88
- if (!imports.has(id)) {
89
- imports.set(id, new Set());
90
- }
91
- imports.get(id)?.add(importer);
105
+ async handler(id, importer) {
106
+ if (importer) {
107
+ if (!imports.has(id)) {
108
+ imports.set(id, new Set());
92
109
  }
93
- return { id, external: true };
110
+ imports.get(id)?.add(importer);
94
111
  }
112
+ return { id, external: true };
95
113
  },
96
114
  },
97
115
  buildStart() {
@@ -99,12 +117,15 @@ function makeNodeJsImportWarningPlugin() {
99
117
  },
100
118
  buildEnd() {
101
119
  if (imports.size > 0) {
120
+ let message = `Unexpected Node.js imports. ` +
121
+ `Do you need to enable the "nodejs_compat" compatibility flag? ` +
122
+ "Refer to https://developers.cloudflare.com/workers/runtime-apis/nodejs/ for more details.\n";
102
123
  for (const [id, importers] of imports.entries()) {
103
- this.warn([
104
- `Node.js built-in module "${id}" was imported without \`nodejs_compat\`. Imported from:`,
105
- ...Array.from(importers).map((importer) => `- ${importer}`),
106
- ].join("\n"));
124
+ for (const importer of importers) {
125
+ message += ` - "${id}" imported from "${path.relative(root, importer)}"\n`;
126
+ }
107
127
  }
128
+ this.warn(message);
108
129
  }
109
130
  },
110
131
  };
@@ -1 +1 @@
1
- {"version":3,"file":"nodejs-compat.js","sourceRoot":"","sources":["../../src/plugins/nodejs-compat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nodejs-compat.js","sourceRoot":"","sources":["../../src/plugins/nodejs-compat.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@distilled.cloud/cloudflare-rolldown-plugin",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "Rolldown plugin for Cloudflare Workers.",
5
5
  "keywords": [
6
6
  "cloudflare",
7
7
  "rolldown",
8
8
  "workers"
9
9
  ],
10
- "homepage": "https://github.com/alchemy-run/cloudflare-tools/tree/main/packages/rolldown-plugin-cloudflare#readme",
10
+ "homepage": "https://github.com/alchemy-run/cloudflare-tools/tree/main/packages/cloudflare-rolldown-plugin#readme",
11
11
  "bugs": {
12
12
  "url": "https://github.com/alchemy-run/cloudflare-tools/issues"
13
13
  },
@@ -43,6 +43,7 @@
43
43
  "scripts": {
44
44
  "build": "tsc",
45
45
  "clean": "rm -rf dist tsconfig.tsbuildinfo",
46
+ "dev": "tsc --watch",
46
47
  "test": "vitest run",
47
48
  "test:watch": "vitest",
48
49
  "typecheck": "tsc --noEmit",
@@ -53,9 +54,9 @@
53
54
  "unenv": "^2.0.0-rc.24"
54
55
  },
55
56
  "devDependencies": {
56
- "@cloudflare/workers-types": "catalog:",
57
+ "@cloudflare/workers-types": "^4.20260310.1",
57
58
  "miniflare": "^4.20260329.0",
58
- "vitest": "catalog:"
59
+ "vitest": "^4.1.1"
59
60
  },
60
61
  "peerDependencies": {
61
62
  "rolldown": "^1.0.0-rc.9"
@@ -1,6 +1,8 @@
1
1
  import { getCloudflarePreset, nonPrefixedNodeModules } from "@cloudflare/unenv-preset";
2
2
  import assert from "node:assert";
3
- import type { Plugin, RolldownPluginOption } from "rolldown";
3
+ import { createRequire } from "node:module";
4
+ import path from "node:path";
5
+ import type { Plugin } from "rolldown";
4
6
  import { esmExternalRequirePlugin } from "rolldown/plugins";
5
7
  import { defineEnv } from "unenv";
6
8
  import type { CloudflarePluginOptions } from "../plugin.js";
@@ -9,14 +11,14 @@ import { hasNodejsCompat } from "../utils.js";
9
11
  const NODE_BUILTIN_MODULES_REGEXP = new RegExp(`^(${nonPrefixedNodeModules.join("|")}|node:.+)$`);
10
12
  const VIRTUAL_MODULE_ID_REGEXP = /^virtual:nodejs-global-inject\/.+$/;
11
13
 
12
- export function makeNodejsCompatPlugin(options: CloudflarePluginOptions): RolldownPluginOption {
14
+ export function makeNodejsCompatPlugin(options: CloudflarePluginOptions): Plugin | Array<Plugin> {
13
15
  if (hasNodejsCompat(options.compatibilityFlags)) {
14
16
  return makeUnenvPlugin(options);
15
17
  }
16
18
  return makeNodeJsImportWarningPlugin();
17
19
  }
18
20
 
19
- function makeUnenvPlugin(options: CloudflarePluginOptions): RolldownPluginOption {
21
+ function makeUnenvPlugin(options: CloudflarePluginOptions): Array<Plugin> {
20
22
  const { alias, inject, external, polyfill } = defineEnv({
21
23
  presets: [
22
24
  getCloudflarePreset({
@@ -27,6 +29,7 @@ function makeUnenvPlugin(options: CloudflarePluginOptions): RolldownPluginOption
27
29
  }).env;
28
30
 
29
31
  const injectVirtualModules = makeInjectVirtualModules(inject);
32
+ const require = createRequire(import.meta.url);
30
33
 
31
34
  return [
32
35
  esmExternalRequirePlugin({
@@ -50,6 +53,17 @@ function makeUnenvPlugin(options: CloudflarePluginOptions): RolldownPluginOption
50
53
  },
51
54
  },
52
55
  },
56
+ {
57
+ name: "rolldown-plugin-cloudflare:nodejs-compat:unenv-preset-imports",
58
+ resolveId: {
59
+ filter: { id: /^@cloudflare\/unenv-preset\// },
60
+ async handler(id, importer, options) {
61
+ const resolved = await this.resolve(id, importer, options);
62
+ if (resolved) return resolved;
63
+ return { id: require.resolve(id) };
64
+ },
65
+ },
66
+ },
53
67
  {
54
68
  name: "rolldown-plugin-cloudflare:nodejs-compat",
55
69
  resolveId: {
@@ -83,23 +97,26 @@ function makeUnenvPlugin(options: CloudflarePluginOptions): RolldownPluginOption
83
97
  ];
84
98
  }
85
99
 
86
- function makeNodeJsImportWarningPlugin(): RolldownPluginOption {
100
+ function makeNodeJsImportWarningPlugin(): Plugin {
87
101
  const imports = new Map<string, Set<string>>();
102
+ let root = process.cwd();
88
103
  return {
89
- name: "rolldown-plugin-cloudflare:nodejs-compat:import-warnings",
104
+ name: "rolldown-plugin-cloudflare:nodejs-import-warnings",
105
+ options(options) {
106
+ if (options.cwd) {
107
+ root = options.cwd;
108
+ }
109
+ },
90
110
  resolveId: {
91
111
  filter: { id: NODE_BUILTIN_MODULES_REGEXP },
92
- async handler(id, importer, options) {
93
- const resolved = await this.resolve(id, importer, options);
94
- if (!resolved) {
95
- if (importer) {
96
- if (!imports.has(id)) {
97
- imports.set(id, new Set());
98
- }
99
- imports.get(id)?.add(importer);
112
+ async handler(id, importer) {
113
+ if (importer) {
114
+ if (!imports.has(id)) {
115
+ imports.set(id, new Set());
100
116
  }
101
- return { id, external: true };
117
+ imports.get(id)?.add(importer);
102
118
  }
119
+ return { id, external: true };
103
120
  },
104
121
  },
105
122
  buildStart() {
@@ -107,14 +124,16 @@ function makeNodeJsImportWarningPlugin(): RolldownPluginOption {
107
124
  },
108
125
  buildEnd() {
109
126
  if (imports.size > 0) {
127
+ let message =
128
+ `Unexpected Node.js imports. ` +
129
+ `Do you need to enable the "nodejs_compat" compatibility flag? ` +
130
+ "Refer to https://developers.cloudflare.com/workers/runtime-apis/nodejs/ for more details.\n";
110
131
  for (const [id, importers] of imports.entries()) {
111
- this.warn(
112
- [
113
- `Node.js built-in module "${id}" was imported without \`nodejs_compat\`. Imported from:`,
114
- ...Array.from(importers).map((importer) => `- ${importer}`),
115
- ].join("\n"),
116
- );
132
+ for (const importer of importers) {
133
+ message += ` - "${id}" imported from "${path.relative(root, importer)}"\n`;
134
+ }
117
135
  }
136
+ this.warn(message);
118
137
  }
119
138
  },
120
139
  };