Skip to content

Commit 9a478af

Browse files
committed
refactor: Drop Preact 8 support (#1716)
* refactor: Drops support for Preact v8 * docs: Adding changeset
1 parent 0b31e4c commit 9a478af

File tree

15 files changed

+23
-194
lines changed

15 files changed

+23
-194
lines changed

.changeset/cuddly-ducks-reply.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@preact/async-loader': major
3+
'preact-cli': major
4+
---
5+
6+
Drops support for Preact v8

packages/async-loader/async-legacy.js

Lines changed: 0 additions & 36 deletions
This file was deleted.

packages/async-loader/index.js

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
const path = require('path');
2-
const { getOptions, stringifyRequest } = require('loader-utils');
3-
const PREACT_LEGACY_MODE = 'PREACT_LEGACY_MODE';
42

5-
exports.pitch = function (req, mode) {
3+
exports.pitch = function (req) {
64
this.cacheable && this.cacheable();
75
let name;
8-
let query = getOptions(this) || {};
6+
let query = this.getOptions() || {};
97
let routeName =
108
typeof query.name === 'function' ? query.name(this.resourcePath) : null;
119

@@ -19,23 +17,19 @@ exports.pitch = function (req, mode) {
1917

2018
// import Async from '${path.relative(process.cwd(), path.resolve(__dirname, 'async-component.js'))}';
2119
return `
22-
import Async from ${stringifyRequest(
23-
this,
24-
path.resolve(
25-
__dirname,
26-
mode === PREACT_LEGACY_MODE ? 'async-legacy.js' : 'async.js'
27-
) // explicit value check because webpack sends 2nd argument values but we dont use it
20+
import Async from ${JSON.stringify(
21+
this.utils.contextify(this.context, path.resolve(__dirname, 'async.js'))
2822
)};
2923
3024
function load(cb) {
3125
require.ensure([], function (require) {
32-
var result = require(${stringifyRequest(this, '!!' + req)});
26+
var result = require(${JSON.stringify(
27+
this.utils.contextify(this.context, '!!' + req)
28+
)});
3329
typeof cb === 'function' && cb(result);
3430
}${name ? ', ' + JSON.stringify(name) : ''});
3531
}
3632
3733
export default Async(load);
3834
`;
3935
};
40-
41-
exports.PREACT_LEGACY_MODE = PREACT_LEGACY_MODE;

packages/async-loader/legacy.js

Lines changed: 0 additions & 8 deletions
This file was deleted.

packages/async-loader/package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@
1515
"*.js"
1616
],
1717
"dependencies": {
18-
"kleur": "^4.1.4",
19-
"loader-utils": "^2.0.0"
18+
"kleur": "^4.1.4"
2019
},
2120
"peerDependencies": {
2221
"preact": ">= 10.0.0"

packages/cli/src/index.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,6 @@ prog
107107
Browsers: ['Chrome', 'Edge', 'Firefox', 'Safari'],
108108
npmPackages: [
109109
'preact',
110-
'preact-compat',
111110
'preact-cli',
112111
'preact-router',
113112
'preact-render-to-string',

packages/cli/src/lib/webpack/utils.js

Lines changed: 0 additions & 16 deletions
This file was deleted.

packages/cli/src/lib/webpack/webpack-base-config.js

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ const webpack = require('webpack');
22
const path = require('path');
33
const { resolve, dirname } = require('path');
44
const { readFileSync, existsSync } = require('fs');
5-
const { isInstalledVersionPreactXOrAbove } = require('./utils');
65
const autoprefixer = require('autoprefixer');
76
const browserslist = require('browserslist');
87
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
@@ -51,7 +50,6 @@ function resolveTsconfig(cwd, isProd) {
5150
*/
5251
module.exports = function createBaseConfig(env) {
5352
const { cwd, isProd, src, source } = env;
54-
const IS_SOURCE_PREACT_X_OR_ABOVE = isInstalledVersionPreactXOrAbove(cwd);
5553
// Apply base-level `env` values
5654
env.dest = resolve(cwd, env.dest || 'build');
5755
env.manifest = readJson(source('manifest.json')) || {};
@@ -69,19 +67,6 @@ module.exports = function createBaseConfig(env) {
6967
let cliNodeModules = findAllNodeModules(__dirname);
7068
let nodeModules = [...new Set([...userNodeModules, ...cliNodeModules])];
7169

72-
let compat = 'preact-compat';
73-
try {
74-
compat = dirname(
75-
require.resolve('preact/compat/package.json', { paths: [cwd] })
76-
);
77-
} catch (e) {
78-
try {
79-
compat = dirname(
80-
require.resolve('preact-compat/package.json', { paths: [cwd] })
81-
);
82-
} catch (e) {}
83-
}
84-
8570
let tsconfig = resolveTsconfig(cwd, isProd);
8671

8772
let postcssPlugins;
@@ -124,14 +109,14 @@ module.exports = function createBaseConfig(env) {
124109
style: source('style'),
125110
'preact-cli-entrypoint': source('index'),
126111
url: dirname(require.resolve('native-url/package.json')),
127-
// preact/compat aliases for supporting React dependencies:
128-
react: compat,
129-
'react-dom': compat,
130-
'preact-compat': compat,
112+
react$: require.resolve('preact/compat'),
113+
'react-dom/test-utils': require.resolve('preact/test-utils'),
114+
'react-dom': require.resolve('preact/compat'),
115+
'react/jsx-runtime': require.resolve('preact/jsx-runtime'),
131116
'react-addons-css-transition-group': 'preact-css-transition-group',
132-
'preact-cli/async-component': IS_SOURCE_PREACT_X_OR_ABOVE
133-
? require.resolve('@preact/async-loader/async')
134-
: require.resolve('@preact/async-loader/async-legacy'),
117+
'preact-cli/async-component': require.resolve(
118+
'@preact/async-loader/async'
119+
),
135120
},
136121
},
137122

packages/cli/src/lib/webpack/webpack-client-config.js

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
const webpack = require('webpack');
22
const { resolve, join } = require('path');
33
const { existsSync } = require('fs');
4-
const { isInstalledVersionPreactXOrAbove } = require('./utils');
54
const { merge } = require('webpack-merge');
65
const { filter } = require('minimatch');
76
const SizePlugin = require('size-plugin');
@@ -29,11 +28,8 @@ const cleanFilename = name =>
2928
* @returns {Promise<import('webpack').Configuration>}
3029
*/
3130
async function clientConfig(env) {
32-
const { source, src, cwd } = env;
33-
const IS_SOURCE_PREACT_X_OR_ABOVE = isInstalledVersionPreactXOrAbove(cwd);
34-
const asyncLoader = IS_SOURCE_PREACT_X_OR_ABOVE
35-
? require.resolve('@preact/async-loader')
36-
: require.resolve('@preact/async-loader/legacy');
31+
const { source, src } = env;
32+
const asyncLoader = require.resolve('@preact/async-loader');
3733

3834
let entry = {
3935
bundle: resolve(__dirname, './../entry'),

packages/cli/tests/client.test.js

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -22,35 +22,6 @@ describe('client-side tests', () => {
2222
PORT = await getPort();
2323
});
2424

25-
//it('should hydrate routes progressively with preact8.', async () => {
26-
// let dir = await subject('progressive-hydration-preact8');
27-
// await build(dir, {}, true);
28-
// const server = getServer(join(dir, 'build'), PORT);
29-
30-
// // let page = await loadPage(chrome, `http://127.0.0.1:${PORT}/`);
31-
// const page = await chrome.newPage();
32-
33-
// page.on('console', consoleMessage => {
34-
// // eslint-disable-next-line
35-
// console[consoleMessage.type()](consoleMessage.text());
36-
// });
37-
38-
// await page.goto(`http://127.0.0.1:${PORT}/`);
39-
40-
// // await waitUntilExpression(page, `window.booted`);
41-
// await sleep(500);
42-
43-
// const mutations = await page.evaluate('window.ROOT_MUTATION_COUNT');
44-
45-
// expect(mutations).toEqual(0);
46-
47-
// expect(await page.evaluate('window.CHANGED_VAR')).toEqual(undefined);
48-
// await page.click('button');
49-
// expect(await page.evaluate('window.CHANGED_VAR')).toEqual(1);
50-
51-
// server.server.close();
52-
//});
53-
5425
it('should hydrate for pre-rendered URLs only', async () => {
5526
let dir = await subject('prerendering-hydration');
5627
await build(dir, {});

0 commit comments

Comments
 (0)