@codepress/codepress-engine 0.6.0 → 0.7.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
@@ -20,24 +20,48 @@ TypeScript-powered instrumentation for the CodePress visual editor. The package
20
20
  npm install @codepress/codepress-engine
21
21
  ```
22
22
 
23
- ## SWC plugin (Next.js) usage
23
+ ### Next.js usage
24
24
 
25
25
  ```js
26
- // next.config.mjs (Next.js 14/15)
27
- import { createSWCPlugin } from "@codepress/codepress-engine/swc";
26
+ // next.config.js
27
+ const createSWCPlugin = require("@codepress/codepress-engine/swc");
28
+ const CodePressWebpackPlugin = require("@codepress/codepress-engine/webpack-plugin");
28
29
 
29
- const nextConfig = {
30
+ module.exports = {
31
+ // SWC plugin for code transformation (existing)
30
32
  experimental: {
31
- swcPlugins: [
32
- // Auto-detects repo/branch; no options required
33
- createSWCPlugin(),
34
- ],
33
+ swcPlugins: [createSWCPlugin()],
35
34
  },
36
- };
37
35
 
38
- export default nextConfig;
36
+ // Webpack plugin for production module mapping (new)
37
+ webpack: (config, { isServer, dev }) => {
38
+ config.plugins.push(new CodePressWebpackPlugin({ isServer, dev }));
39
+ return config;
40
+ },
41
+ };
39
42
  ```
40
43
 
44
+ ### How it works
45
+
46
+ The plugin:
47
+
48
+ 1. Automatically skips server builds (`isServer: true`) and dev builds (`dev: true`)
49
+ 2. Runs during webpack compilation for production client builds
50
+ 3. Builds a mapping: `{ 33: "react", 92: "react-dom", ... }`
51
+ 4. Injects `window.__CP_MODULE_MAP__` into the main bundle
52
+ 5. Enables O(1) module resolution instead of scanning all modules
53
+
54
+ ### Bundle size impact
55
+
56
+ - Typical app (1000 modules): +3-4KB gzipped
57
+ - Large app (3000 modules): +8-10KB gzipped
58
+
59
+ ### When to use
60
+
61
+ - **Required**: Production builds where you need HMR to work
62
+ - **Optional**: Development (already has named module IDs)
63
+ - **Alternative**: Set `moduleIds: 'named'` in webpack config (larger bundle, exposes file structure)
64
+
41
65
  Note: When using ESM (`next.config.mjs`), prefer the named import above due to CJS interop. For CommonJS configs you can use:
42
66
 
43
67
  ```js
@@ -76,12 +100,13 @@ Optional options for the Babel plugin (all are optional; omit to use auto-detect
76
100
 
77
101
  Entry points exposed by the package:
78
102
 
79
- | Export | Description |
80
- | ------------------------------------ | ---------------------------------- |
81
- | `@codepress/codepress-engine/babel` | Compiled Babel plugin (CommonJS) |
82
- | `@codepress/codepress-engine/swc` | SWC plugin factory & WASM helpers |
83
- | `@codepress/codepress-engine/server` | Fastify development server factory |
84
- | `@codepress/codepress-engine/cli` | CLI used by the `codepress` binary |
103
+ | Export | Description |
104
+ | -------------------------------------------- | ---------------------------------------- |
105
+ | `@codepress/codepress-engine/babel` | Compiled Babel plugin (CommonJS) |
106
+ | `@codepress/codepress-engine/swc` | SWC plugin factory & WASM helpers |
107
+ | `@codepress/codepress-engine/webpack-plugin` | Webpack plugin for production module map |
108
+ | `@codepress/codepress-engine/server` | Fastify development server factory |
109
+ | `@codepress/codepress-engine/cli` | CLI used by the `codepress` binary |
85
110
 
86
111
  ---
87
112
 
@@ -184,6 +209,7 @@ The helper automatically selects the correct WASM binary based on detected Next.
184
209
  ## Additional references
185
210
 
186
211
  - `INSTALL.md` – linking the package locally & publishing guidance
212
+ - `MODULE_MAP_INTEGRATION.md` – detailed guide for webpack plugin integration and troubleshooting
187
213
  - `scripts/build-swc.mjs` – rebuild the WASM binaries (requires Rust toolchain)
188
214
  - `tests/` – examples of mocking git, fetch, and file IO when validating the plugin
189
215
 
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Webpack plugin that injects a module ID → name mapping for CodePress HMR
3
+ *
4
+ * This plugin runs during webpack compilation and builds a mapping from numeric
5
+ * module IDs (used in production) to human-readable module names. The mapping
6
+ * is injected into the main bundle as window.__CP_MODULE_MAP__.
7
+ *
8
+ * @example
9
+ * // next.config.js
10
+ * const CodePressWebpackPlugin = require('@codepress/codepress-engine/webpack-plugin');
11
+ *
12
+ * module.exports = {
13
+ * webpack: (config, { isServer, dev }) => {
14
+ * config.plugins.push(new CodePressWebpackPlugin({ isServer, dev }));
15
+ * return config;
16
+ * }
17
+ * };
18
+ */
19
+ import type { Compiler } from 'webpack';
20
+ export interface CodePressWebpackPluginOptions {
21
+ /**
22
+ * Whether this is a server-side build (Next.js specific)
23
+ * Plugin will skip if true
24
+ */
25
+ isServer?: boolean;
26
+ /**
27
+ * Whether this is a development build
28
+ * Plugin will skip if true (dev already has named IDs)
29
+ */
30
+ dev?: boolean;
31
+ }
32
+ export default class CodePressWebpackPlugin {
33
+ /**
34
+ * The name of the plugin
35
+ */
36
+ readonly name = "CodePressWebpackPlugin";
37
+ private readonly options;
38
+ /**
39
+ * @param options - Plugin options for conditional execution
40
+ */
41
+ constructor(options?: CodePressWebpackPluginOptions);
42
+ /**
43
+ * Apply the plugin to the webpack compiler
44
+ */
45
+ apply(compiler: Compiler): void;
46
+ /**
47
+ * Process compilation assets and inject module map
48
+ */
49
+ private processAssets;
50
+ /**
51
+ * Build a mapping of module IDs to normalized paths
52
+ */
53
+ private buildModuleMap;
54
+ /**
55
+ * Normalize a module path to a human-readable format
56
+ *
57
+ * @param resourcePath - The absolute path to the module
58
+ * @param context - The webpack context (project root)
59
+ * @returns Normalized path or null if path should be excluded
60
+ */
61
+ private normalizePath;
62
+ /**
63
+ * Generate the inline script that injects the module map
64
+ */
65
+ private generateMapScript;
66
+ /**
67
+ * Find the main bundle and inject the map script
68
+ *
69
+ * @returns true if injection succeeded, false otherwise
70
+ */
71
+ private injectIntoMainBundle;
72
+ }
73
+ export { CodePressWebpackPlugin };
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ /**
3
+ * Webpack plugin that injects a module ID → name mapping for CodePress HMR
4
+ *
5
+ * This plugin runs during webpack compilation and builds a mapping from numeric
6
+ * module IDs (used in production) to human-readable module names. The mapping
7
+ * is injected into the main bundle as window.__CP_MODULE_MAP__.
8
+ *
9
+ * @example
10
+ * // next.config.js
11
+ * const CodePressWebpackPlugin = require('@codepress/codepress-engine/webpack-plugin');
12
+ *
13
+ * module.exports = {
14
+ * webpack: (config, { isServer, dev }) => {
15
+ * config.plugins.push(new CodePressWebpackPlugin({ isServer, dev }));
16
+ * return config;
17
+ * }
18
+ * };
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.CodePressWebpackPlugin = void 0;
22
+ class CodePressWebpackPlugin {
23
+ /**
24
+ * @param options - Plugin options for conditional execution
25
+ */
26
+ constructor(options = {}) {
27
+ /**
28
+ * The name of the plugin
29
+ */
30
+ this.name = 'CodePressWebpackPlugin';
31
+ this.options = options;
32
+ }
33
+ /**
34
+ * Apply the plugin to the webpack compiler
35
+ */
36
+ apply(compiler) {
37
+ // Skip if this is a server build or dev build
38
+ if (this.options.isServer) {
39
+ console.log('[CodePress] Skipping module map (server-side build)');
40
+ return;
41
+ }
42
+ if (this.options.dev) {
43
+ console.log('[CodePress] Skipping module map (dev build has named IDs)');
44
+ return;
45
+ }
46
+ compiler.hooks.thisCompilation.tap(this.name, (compilation) => {
47
+ compilation.hooks.processAssets.tap({
48
+ name: this.name,
49
+ // Run during the ADDITIONS stage to ensure all assets are present
50
+ stage: compilation.constructor.PROCESS_ASSETS_STAGE_ADDITIONS,
51
+ }, () => {
52
+ this.processAssets(compilation, compiler);
53
+ });
54
+ });
55
+ }
56
+ /**
57
+ * Process compilation assets and inject module map
58
+ */
59
+ processAssets(compilation, compiler) {
60
+ const moduleMap = this.buildModuleMap(compilation, compiler);
61
+ if (Object.keys(moduleMap).length === 0) {
62
+ console.warn('[CodePress] No modules found to map');
63
+ return;
64
+ }
65
+ console.log('[CodePress] Built module map with', Object.keys(moduleMap).length, 'entries');
66
+ const mapScript = this.generateMapScript(moduleMap);
67
+ const injected = this.injectIntoMainBundle(compilation, mapScript);
68
+ if (!injected) {
69
+ console.warn('[CodePress] Could not find main bundle to inject module map');
70
+ }
71
+ }
72
+ /**
73
+ * Build a mapping of module IDs to normalized paths
74
+ */
75
+ buildModuleMap(compilation, compiler) {
76
+ const moduleMap = {};
77
+ compilation.modules.forEach((module) => {
78
+ if (!module.id) {
79
+ return;
80
+ }
81
+ // Type assertion: webpack modules can have a resource property
82
+ const moduleWithResource = module;
83
+ if (!moduleWithResource.resource) {
84
+ return;
85
+ }
86
+ const id = String(module.id);
87
+ const normalizedPath = this.normalizePath(moduleWithResource.resource, compiler.context);
88
+ if (normalizedPath) {
89
+ moduleMap[id] = normalizedPath;
90
+ }
91
+ });
92
+ return moduleMap;
93
+ }
94
+ /**
95
+ * Normalize a module path to a human-readable format
96
+ *
97
+ * @param resourcePath - The absolute path to the module
98
+ * @param context - The webpack context (project root)
99
+ * @returns Normalized path or null if path should be excluded
100
+ */
101
+ normalizePath(resourcePath, context) {
102
+ let path = resourcePath;
103
+ // Handle node_modules
104
+ if (path.includes('node_modules')) {
105
+ // Extract package name (handles scoped packages like @foo/bar)
106
+ const packageMatch = path.match(/node_modules\/(@[^/]+\/[^/]+|[^/]+)/);
107
+ if (!packageMatch) {
108
+ return null;
109
+ }
110
+ const packageName = packageMatch[1];
111
+ // Extract subpath within the package (e.g., react/jsx-runtime)
112
+ const subPathMatch = path.match(/node_modules\/[^/]+(?:\/[^/]+)?\/(.+)/);
113
+ if (subPathMatch && subPathMatch[1]) {
114
+ const subPath = subPathMatch[1]
115
+ .replace(/\\/g, '/')
116
+ .replace(/\.(jsx?|tsx?|mjs|cjs)$/, '');
117
+ return `${packageName}/${subPath}`;
118
+ }
119
+ return packageName;
120
+ }
121
+ // Handle app code - make relative to context
122
+ path = path
123
+ .replace(context, '.')
124
+ .replace(/\\/g, '/') // Normalize Windows paths
125
+ .replace(/\.(jsx?|tsx?|mjs|cjs)$/, ''); // Remove extension
126
+ return path;
127
+ }
128
+ /**
129
+ * Generate the inline script that injects the module map
130
+ */
131
+ generateMapScript(moduleMap) {
132
+ const json = JSON.stringify(moduleMap);
133
+ return `(function(){if(typeof window!=="undefined"){window.__CP_MODULE_MAP__=${json};console.log("[CodePress] Loaded module map with",Object.keys(window.__CP_MODULE_MAP__).length,"entries");}})();`;
134
+ }
135
+ /**
136
+ * Find the main bundle and inject the map script
137
+ *
138
+ * @returns true if injection succeeded, false otherwise
139
+ */
140
+ injectIntoMainBundle(compilation, mapScript) {
141
+ // Find the main client bundle
142
+ // Matches patterns like: main-abc123.js, static/chunks/main-abc123.js
143
+ const mainAsset = compilation
144
+ .getAssets()
145
+ .find((asset) => asset.name.match(/^(static\/chunks\/main-|main-)[a-f0-9]+\.js$/));
146
+ if (!mainAsset) {
147
+ return false;
148
+ }
149
+ const { name } = mainAsset;
150
+ const source = mainAsset.source;
151
+ const originalSource = source.source();
152
+ const originalSourceStr = typeof originalSource === 'string'
153
+ ? originalSource
154
+ : Buffer.isBuffer(originalSource)
155
+ ? originalSource.toString('utf-8')
156
+ : String(originalSource);
157
+ // Update the asset with the prepended map script
158
+ compilation.updateAsset(name, {
159
+ source: () => mapScript + '\n' + originalSourceStr,
160
+ size: () => mapScript.length + originalSourceStr.length,
161
+ });
162
+ console.log('[CodePress] Injected module map into', name);
163
+ return true;
164
+ }
165
+ }
166
+ exports.default = CodePressWebpackPlugin;
167
+ exports.CodePressWebpackPlugin = CodePressWebpackPlugin;
168
+ // CommonJS compatibility
169
+ module.exports = CodePressWebpackPlugin;
170
+ module.exports.CodePressWebpackPlugin = CodePressWebpackPlugin;
171
+ module.exports.default = CodePressWebpackPlugin;
172
+ //# sourceMappingURL=webpack-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webpack-plugin.js","sourceRoot":"","sources":["../src/webpack-plugin.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codepress/codepress-engine",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "packageManager": "pnpm@10.22.0",
5
5
  "description": "CodePress engine - Babel and SWC plug-ins",
6
6
  "main": "./dist/index.js",
@@ -36,6 +36,11 @@
36
36
  "require": "./dist/esbuild-plugin.js",
37
37
  "default": "./dist/esbuild-plugin.js"
38
38
  },
39
+ "./webpack-plugin": {
40
+ "types": "./dist/webpack-plugin.d.ts",
41
+ "require": "./dist/webpack-plugin.js",
42
+ "default": "./dist/webpack-plugin.js"
43
+ },
39
44
  "./swc/wasm": "./swc/codepress_engine.v42.wasm",
40
45
  "./swc/wasm-v42": "./swc/codepress_engine.v42.wasm",
41
46
  "./swc/wasm-v26": "./swc/codepress_engine.v26.wasm",
@@ -101,6 +106,7 @@
101
106
  "@types/jest": "^30.0.0",
102
107
  "@types/node": "^22.9.0",
103
108
  "@types/node-fetch": "^2.6.11",
109
+ "@types/webpack": "^5.28.5",
104
110
  "esbuild": "^0.24.0",
105
111
  "babel-jest": "^30.2.0",
106
112
  "eslint": "^9.37.0",
Binary file
Binary file
Binary file