From 27a52d33d0fc8437bea75de7a0afc6b2f0ffb0d9 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 27 Jan 2026 20:35:38 +0200 Subject: [PATCH] feature: client: sw: migrate to ESM --- .putout.json | 3 +++ .webpack/js.mjs | 6 +++--- client/sw/register.mjs | 2 +- client/sw/register.spec.mjs | 4 ++-- client/sw/{sw.js => sw.mjs} | 11 +++++------ server/cloudcmd.mjs | 6 ++++-- server/cloudcmd.spec.mjs | 2 +- 7 files changed, 19 insertions(+), 15 deletions(-) rename client/sw/{sw.js => sw.mjs} (92%) diff --git a/.putout.json b/.putout.json index b868f59d..800cdeab 100644 --- a/.putout.json +++ b/.putout.json @@ -11,6 +11,9 @@ "package-json/add-type": "off" }, "match": { + ".filesystem.json": { + "nodejs/rename-file-cjs-to-js": "off" + }, "base64": { "types/convert-typeof-to-is-type": "off" }, diff --git a/.webpack/js.mjs b/.webpack/js.mjs index e7bf9c8c..38ac6b8d 100644 --- a/.webpack/js.mjs +++ b/.webpack/js.mjs @@ -32,12 +32,12 @@ const options = { const rules = clean([ !isDev && { - test: /\.js$/, + test: /\.[mc]?js$/, exclude: /node_modules/, loader: 'babel-loader', }, isDev && { - test: /\.js$/, + test: /\.[mc]?js$/, exclude: /node_modules/, loader: 'babel-loader', options, @@ -113,7 +113,7 @@ export default { 'config': `${dirCss}/config.css`, 'terminal': `${dirCss}/terminal.css`, 'user-menu': `${dirCss}/user-menu.css`, - 'sw': `${dir}/sw/sw.js`, + 'sw': `${dir}/sw/sw.mjs`, 'cloudcmd': `${dir}/cloudcmd.mjs`, [`${modules}/edit`]: `${dirModules}/edit.js`, [`${modules}/edit-file`]: `${dirModules}/edit-file.js`, diff --git a/client/sw/register.mjs b/client/sw/register.mjs index 928d63c9..da3ff0f2 100644 --- a/client/sw/register.mjs +++ b/client/sw/register.mjs @@ -16,7 +16,7 @@ export async function registerSW(prefix) { const {serviceWorker} = navigator; const register = serviceWorker.register.bind(serviceWorker); - const [e, sw] = await tryToCatch(register, `${prefix}/sw.js`); + const [e, sw] = await tryToCatch(register, `${prefix}/sw.mjs`); if (e) return null; diff --git a/client/sw/register.spec.mjs b/client/sw/register.spec.mjs index 98f3ef4c..5734a130 100644 --- a/client/sw/register.spec.mjs +++ b/client/sw/register.spec.mjs @@ -84,7 +84,7 @@ test('sw: register: registerSW', async (t, {location, navigator}) => { const {register} = navigator.serviceWorker; await registerSW('/hello'); - t.calledWith(register, ['/hello/sw.js'], 'should call register'); + t.calledWith(register, ['/hello/sw.mjs'], 'should call register'); t.end(); }); @@ -98,6 +98,6 @@ test('sw: register: unregisterSW', async (t, {location, navigator}) => { await unregisterSW('/hello'); - t.calledWith(register, ['/hello/sw.js'], 'should call register'); + t.calledWith(register, ['/hello/sw.mjs'], 'should call register'); t.end(); }); diff --git a/client/sw/sw.js b/client/sw/sw.mjs similarity index 92% rename from client/sw/sw.js rename to client/sw/sw.mjs index e4cad253..30b8909c 100644 --- a/client/sw/sw.js +++ b/client/sw/sw.mjs @@ -1,9 +1,7 @@ -'use strict'; - -const process = require('node:process'); -const codegen = require('codegen.macro'); -const {tryToCatch} = require('try-to-catch'); -const currify = require('currify'); +import process from 'node:process'; +import codegen from 'codegen.macro'; +import {tryToCatch} from 'try-to-catch'; +import currify from 'currify'; const isDev = process.env.NODE_ENV === 'development'; @@ -98,3 +96,4 @@ async function addToCache(request, response) { const cache = await caches.open(NAME); return cache.put(request, response); } + diff --git a/server/cloudcmd.mjs b/server/cloudcmd.mjs index 2d1000cc..936e72c3 100644 --- a/server/cloudcmd.mjs +++ b/server/cloudcmd.mjs @@ -285,10 +285,12 @@ function setUrl(req, res, next) { function setSW(req, res, next) { const {url} = req; - const isSW = /^\/sw\.js(\.map)?$/.test(url); + const isSW = /^\/sw\.[mc]?js(\.map)?$/.test(url); - if (isSW) + if (isSW) { + const url = req.url.replace(/[cm]js/, 'js'); req.url = replaceDist(`/dist${url}`); + } next(); } diff --git a/server/cloudcmd.spec.mjs b/server/cloudcmd.spec.mjs index 01629a92..263e2e15 100644 --- a/server/cloudcmd.spec.mjs +++ b/server/cloudcmd.spec.mjs @@ -173,7 +173,7 @@ test('cloudcmd: getIndexPath: development', (t) => { }); test('cloudcmd: sw', async (t) => { - const {status} = await request.get('/sw.js'); + const {status} = await request.get('/sw.mjs'); t.equal(status, 200, 'should return sw'); t.end();