From 32ec60ff2609906130e15622c30491c5c96dad15 Mon Sep 17 00:00:00 2001 From: Brian Vaughn Date: Sat, 27 May 2023 16:31:08 -0400 Subject: [PATCH] Replaced post-processing "use client" build step with Parcel plug-in --- .parcelrc | 6 ++++++ package.json | 6 +++++- parcel-optimizer-use-client.js | 17 +++++++++++++++++ pnpm-lock.yaml | 12 ++++++++++++ postprocess.js | 13 ------------- 5 files changed, 40 insertions(+), 14 deletions(-) create mode 100644 .parcelrc create mode 100644 parcel-optimizer-use-client.js delete mode 100755 postprocess.js diff --git a/.parcelrc b/.parcelrc new file mode 100644 index 0000000..785d93d --- /dev/null +++ b/.parcelrc @@ -0,0 +1,6 @@ +{ + "extends": "@parcel/config-default", + "optimizers": { + "*.{js,mjs,cjs}": ["./parcel-optimizer-use-client.js"] + } +} \ No newline at end of file diff --git a/package.json b/package.json index 15a0ff6..1453dda 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "clear:builds": "rm -rf ./dist", "clear:parcel-cache": "rm -rf ./.parcel-cache", "clear:node_modules": "rm -rf ./node_modules", - "prerelease": "rm -rf ./.parcel-cache && parcel build && ./postprocess.js", + "prerelease": "rm -rf ./.parcel-cache && parcel build", "prettier": "prettier --write \"**/*.{css,html,js,json,jsx,ts,tsx}\"", "prettier:ci": "prettier --check \"**/*.{css,html,js,json,jsx,ts,tsx}\"", "test": "jest", @@ -33,9 +33,13 @@ "@babel/runtime": "^7.12.5" }, "devDependencies": { + "@parcel/config-default": "^2.9.0", "@parcel/core": "^2.9.0", "@parcel/packager-ts": "^2.9.0", + "@parcel/plugin": "^2.9.0", + "@parcel/source-map": "^2.1.1", "@parcel/transformer-typescript-types": "^2.9.0", + "@parcel/utils": "^2.9.0", "@types/jest": "^26.0.15", "@types/react": "^18", "@types/react-dom": "^18", diff --git a/parcel-optimizer-use-client.js b/parcel-optimizer-use-client.js new file mode 100644 index 0000000..92c954b --- /dev/null +++ b/parcel-optimizer-use-client.js @@ -0,0 +1,17 @@ +const { Optimizer } = require("@parcel/plugin"); +const { default: SourceMap } = require("@parcel/source-map/dist/node.js"); +const { blobToBuffer } = require("@parcel/utils"); + +module.exports = new Optimizer({ + async optimize({ contents, map, options }) { + let correctMap; + if (map != null) { + correctMap = new SourceMap(options.projectRoot); + correctMap.addSourceMap(map, 2); // Offset lines by 2 + } + return { + contents: `"use client";\n\n` + (await blobToBuffer(contents)).toString(), + map: correctMap, + }; + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8b4e263..1cd4094 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,15 +6,27 @@ dependencies: version: 7.21.0 devDependencies: + '@parcel/config-default': + specifier: ^2.9.0 + version: 2.9.0(@parcel/core@2.9.0) '@parcel/core': specifier: ^2.9.0 version: 2.9.0 '@parcel/packager-ts': specifier: ^2.9.0 version: 2.9.0(@parcel/core@2.9.0) + '@parcel/plugin': + specifier: ^2.9.0 + version: 2.9.0(@parcel/core@2.9.0) + '@parcel/source-map': + specifier: ^2.1.1 + version: 2.1.1 '@parcel/transformer-typescript-types': specifier: ^2.9.0 version: 2.9.0(@parcel/core@2.9.0)(typescript@4.9.5) + '@parcel/utils': + specifier: ^2.9.0 + version: 2.9.0 '@types/jest': specifier: ^26.0.15 version: 26.0.24 diff --git a/postprocess.js b/postprocess.js deleted file mode 100755 index cbfa413..0000000 --- a/postprocess.js +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env node - -const { readFileSync, writeFileSync } = require("fs"); -const { join } = require("path"); - -const packageString = readFileSync(join(__dirname, "package.json"), "utf8"); -const packageJSON = JSON.parse(packageString); - -[packageJSON.main, packageJSON.module].forEach((distPath) => { - const path = join(__dirname, distPath); - const bundleText = readFileSync(path, "utf8"); - writeFileSync(path, `"use client";\n\n${bundleText}`); -});