fix
This commit is contained in:
parent
d807a82aa9
commit
b0f9240dee
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -2,6 +2,10 @@
|
|||
"extends": [
|
||||
"@parcel/config-default"
|
||||
],
|
||||
"runtimes": [
|
||||
"parcel-runtime-custom-service-worker",
|
||||
"..."
|
||||
],
|
||||
"reporters": [
|
||||
"...",
|
||||
"@tinijs/parcel-reporter-copy-public"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,145 @@
|
|||
{
|
||||
"filesToCache": [
|
||||
"public/favicon.ico",
|
||||
"public/index.html",
|
||||
"public/min/vs/loader.js",
|
||||
"public/min/vs/editor/editor.main.nls.ru.js",
|
||||
"public/min/vs/editor/editor.main.css",
|
||||
"public/min/vs/editor/editor.main.nls.ko.js",
|
||||
"public/min/vs/editor/editor.main.nls.zh-cn.js",
|
||||
"public/min/vs/editor/editor.main.js",
|
||||
"public/min/vs/editor/editor.main.nls.ja.js",
|
||||
"public/min/vs/editor/editor.main.nls.zh-tw.js",
|
||||
"public/min/vs/editor/editor.main.nls.de.js",
|
||||
"public/min/vs/editor/editor.main.nls.it.js",
|
||||
"public/min/vs/editor/editor.main.nls.es.js",
|
||||
"public/min/vs/editor/editor.main.nls.js",
|
||||
"public/min/vs/editor/editor.main.nls.fr.js",
|
||||
"public/min/vs/base/worker/workerMain.js",
|
||||
"public/min/vs/base/common/worker/simpleWorker.nls.it.js",
|
||||
"public/min/vs/base/common/worker/simpleWorker.nls.es.js",
|
||||
"public/min/vs/base/common/worker/simpleWorker.nls.fr.js",
|
||||
"public/min/vs/base/common/worker/simpleWorker.nls.de.js",
|
||||
"public/min/vs/base/common/worker/simpleWorker.nls.js",
|
||||
"public/min/vs/base/common/worker/simpleWorker.nls.ja.js",
|
||||
"public/min/vs/base/common/worker/simpleWorker.nls.ru.js",
|
||||
"public/min/vs/base/common/worker/simpleWorker.nls.zh-cn.js",
|
||||
"public/min/vs/base/common/worker/simpleWorker.nls.zh-tw.js",
|
||||
"public/min/vs/base/common/worker/simpleWorker.nls.ko.js",
|
||||
"public/min/vs/base/browser/ui/codicons/codicon/codicon.ttf",
|
||||
"public/min/vs/language/json/jsonWorker.js",
|
||||
"public/min/vs/language/json/jsonMode.js",
|
||||
"public/min/vs/language/html/htmlMode.js",
|
||||
"public/min/vs/language/html/htmlWorker.js",
|
||||
"public/min/vs/language/typescript/tsWorker.js",
|
||||
"public/min/vs/language/typescript/tsMode.js",
|
||||
"public/min/vs/language/css/cssMode.js",
|
||||
"public/min/vs/language/css/cssWorker.js",
|
||||
"public/min/vs/basic-languages/sql/sql.js",
|
||||
"public/min/vs/basic-languages/flow9/flow9.js",
|
||||
"public/min/vs/basic-languages/ruby/ruby.js",
|
||||
"public/min/vs/basic-languages/ecl/ecl.js",
|
||||
"public/min/vs/basic-languages/protobuf/protobuf.js",
|
||||
"public/min/vs/basic-languages/objective-c/objective-c.js",
|
||||
"public/min/vs/basic-languages/restructuredtext/restructuredtext.js",
|
||||
"public/min/vs/basic-languages/wgsl/wgsl.js",
|
||||
"public/min/vs/basic-languages/msdax/msdax.js",
|
||||
"public/min/vs/basic-languages/twig/twig.js",
|
||||
"public/min/vs/basic-languages/bicep/bicep.js",
|
||||
"public/min/vs/basic-languages/javascript/javascript.js",
|
||||
"public/min/vs/basic-languages/bat/bat.js",
|
||||
"public/min/vs/basic-languages/julia/julia.js",
|
||||
"public/min/vs/basic-languages/csharp/csharp.js",
|
||||
"public/min/vs/basic-languages/yaml/yaml.js",
|
||||
"public/min/vs/basic-languages/m3/m3.js",
|
||||
"public/min/vs/basic-languages/pgsql/pgsql.js",
|
||||
"public/min/vs/basic-languages/csp/csp.js",
|
||||
"public/min/vs/basic-languages/coffee/coffee.js",
|
||||
"public/min/vs/basic-languages/mysql/mysql.js",
|
||||
"public/min/vs/basic-languages/qsharp/qsharp.js",
|
||||
"public/min/vs/basic-languages/graphql/graphql.js",
|
||||
"public/min/vs/basic-languages/swift/swift.js",
|
||||
"public/min/vs/basic-languages/cpp/cpp.js",
|
||||
"public/min/vs/basic-languages/hcl/hcl.js",
|
||||
"public/min/vs/basic-languages/scala/scala.js",
|
||||
"public/min/vs/basic-languages/handlebars/handlebars.js",
|
||||
"public/min/vs/basic-languages/ini/ini.js",
|
||||
"public/min/vs/basic-languages/tcl/tcl.js",
|
||||
"public/min/vs/basic-languages/pla/pla.js",
|
||||
"public/min/vs/basic-languages/mips/mips.js",
|
||||
"public/min/vs/basic-languages/powershell/powershell.js",
|
||||
"public/min/vs/basic-languages/vb/vb.js",
|
||||
"public/min/vs/basic-languages/redshift/redshift.js",
|
||||
"public/min/vs/basic-languages/st/st.js",
|
||||
"public/min/vs/basic-languages/solidity/solidity.js",
|
||||
"public/min/vs/basic-languages/pascaligo/pascaligo.js",
|
||||
"public/min/vs/basic-languages/xml/xml.js",
|
||||
"public/min/vs/basic-languages/lua/lua.js",
|
||||
"public/min/vs/basic-languages/php/php.js",
|
||||
"public/min/vs/basic-languages/cypher/cypher.js",
|
||||
"public/min/vs/basic-languages/kotlin/kotlin.js",
|
||||
"public/min/vs/basic-languages/abap/abap.js",
|
||||
"public/min/vs/basic-languages/html/html.js",
|
||||
"public/min/vs/basic-languages/java/java.js",
|
||||
"public/min/vs/basic-languages/liquid/liquid.js",
|
||||
"public/min/vs/basic-languages/freemarker2/freemarker2.js",
|
||||
"public/min/vs/basic-languages/r/r.js",
|
||||
"public/min/vs/basic-languages/fsharp/fsharp.js",
|
||||
"public/min/vs/basic-languages/pug/pug.js",
|
||||
"public/min/vs/basic-languages/rust/rust.js",
|
||||
"public/min/vs/basic-languages/typescript/typescript.js",
|
||||
"public/min/vs/basic-languages/perl/perl.js",
|
||||
"public/min/vs/basic-languages/sophia/sophia.js",
|
||||
"public/min/vs/basic-languages/scss/scss.js",
|
||||
"public/min/vs/basic-languages/markdown/markdown.js",
|
||||
"public/min/vs/basic-languages/shell/shell.js",
|
||||
"public/min/vs/basic-languages/dart/dart.js",
|
||||
"public/min/vs/basic-languages/dockerfile/dockerfile.js",
|
||||
"public/min/vs/basic-languages/lexon/lexon.js",
|
||||
"public/min/vs/basic-languages/redis/redis.js",
|
||||
"public/min/vs/basic-languages/elixir/elixir.js",
|
||||
"public/min/vs/basic-languages/less/less.js",
|
||||
"public/min/vs/basic-languages/clojure/clojure.js",
|
||||
"public/min/vs/basic-languages/css/css.js",
|
||||
"public/min/vs/basic-languages/python/python.js",
|
||||
"public/min/vs/basic-languages/azcli/azcli.js",
|
||||
"public/min/vs/basic-languages/sparql/sparql.js",
|
||||
"public/min/vs/basic-languages/systemverilog/systemverilog.js",
|
||||
"public/min/vs/basic-languages/go/go.js",
|
||||
"public/min/vs/basic-languages/apex/apex.js",
|
||||
"public/min/vs/basic-languages/powerquery/powerquery.js",
|
||||
"public/min/vs/basic-languages/razor/razor.js",
|
||||
"public/min/vs/basic-languages/cameligo/cameligo.js",
|
||||
"public/min/vs/basic-languages/pascal/pascal.js",
|
||||
"public/min/vs/basic-languages/mdx/mdx.js",
|
||||
"public/min/vs/basic-languages/sb/sb.js",
|
||||
"public/min/vs/basic-languages/scheme/scheme.js",
|
||||
"public/min/vs/basic-languages/postiats/postiats.js",
|
||||
"public/min-maps/vs/loader.js.map",
|
||||
"public/min-maps/vs/editor/editor.main.nls.ko.js.map",
|
||||
"public/min-maps/vs/editor/editor.main.nls.ja.js.map",
|
||||
"public/min-maps/vs/editor/editor.main.nls.fr.js.map",
|
||||
"public/min-maps/vs/editor/editor.main.nls.zh-cn.js.map",
|
||||
"public/min-maps/vs/editor/editor.main.nls.js.map",
|
||||
"public/min-maps/vs/editor/editor.main.js.map",
|
||||
"public/min-maps/vs/editor/editor.main.nls.it.js.map",
|
||||
"public/min-maps/vs/editor/editor.main.nls.zh-tw.js.map",
|
||||
"public/min-maps/vs/editor/editor.main.nls.ru.js.map",
|
||||
"public/min-maps/vs/editor/editor.main.nls.es.js.map",
|
||||
"public/min-maps/vs/editor/editor.main.nls.de.js.map",
|
||||
"public/min-maps/vs/base/worker/workerMain.js.map",
|
||||
"public/min-maps/vs/base/common/worker/simpleWorker.nls.js.map",
|
||||
"public/min-maps/vs/base/common/worker/simpleWorker.nls.zh-tw.js.map",
|
||||
"public/min-maps/vs/base/common/worker/simpleWorker.nls.ko.js.map",
|
||||
"public/min-maps/vs/base/common/worker/simpleWorker.nls.ja.js.map",
|
||||
"public/min-maps/vs/base/common/worker/simpleWorker.nls.fr.js.map",
|
||||
"public/min-maps/vs/base/common/worker/simpleWorker.nls.ru.js.map",
|
||||
"public/min-maps/vs/base/common/worker/simpleWorker.nls.it.js.map",
|
||||
"public/min-maps/vs/base/common/worker/simpleWorker.nls.es.js.map",
|
||||
"public/min-maps/vs/base/common/worker/simpleWorker.nls.zh-cn.js.map",
|
||||
"public/min-maps/vs/base/common/worker/simpleWorker.nls.de.js.map",
|
||||
"public/img/empty.png",
|
||||
"public/img/logo-white.png",
|
||||
"public/img/logo.png"
|
||||
]
|
||||
}
|
||||
|
|
@ -10,28 +10,22 @@
|
|||
"@floating-ui/react": "^0.26.4",
|
||||
"@leeoniya/ufuzzy": "^1.0.14",
|
||||
"@minoru/react-dnd-treeview": "^3.4.4",
|
||||
"@wojtekmaj/react-qr-svg": "^1.0.0",
|
||||
"constrained-editor-plugin": "^1.3.0",
|
||||
"react-resizable-panels": "^2.0.9",
|
||||
"json-diff-ts": "^2.2.1",
|
||||
"axios": "^1.6.7",
|
||||
"@monaco-editor/react": "^4.6.0",
|
||||
"@paralleldrive/cuid2": "2.2.2",
|
||||
"react-contenteditable": "^3.3.7",
|
||||
"react-dropzone": "14.2.3",
|
||||
"@parcel/packager-wasm": "^2.10.3",
|
||||
"@parcel/service-worker": "^2.10.3",
|
||||
"recast": "^0.23.4",
|
||||
"@qiwi/deep-proxy": "^2.0.3",
|
||||
"@wojtekmaj/react-qr-svg": "^1.0.0",
|
||||
"algoliasearch": "^4.22.0",
|
||||
"axios": "^1.6.7",
|
||||
"constrained-editor-plugin": "^1.3.0",
|
||||
"date-fns": "^2.30.0",
|
||||
"safe-flat": "^2.1.0",
|
||||
"dbgen": "workspace:*",
|
||||
"esbuild-wasm": "^0.19.10",
|
||||
"hash-wasm": "^4.11.0",
|
||||
"idb-keyval": "^6.2.1",
|
||||
"immer": "^10.0.3",
|
||||
"js-base64": "^3.7.5",
|
||||
"json-diff-ts": "^2.2.1",
|
||||
"lodash.capitalize": "^4.2.1",
|
||||
"lodash.concat": "^4.5.0",
|
||||
"lodash.debounce": "^4.0.8",
|
||||
|
|
@ -49,6 +43,8 @@
|
|||
"lodash.uniqby": "^4.7.0",
|
||||
"monaco-jsx-syntax-highlight-v2": "^1.2.2",
|
||||
"msgpackr": "^1.10.0",
|
||||
"pako": "^2.1.0",
|
||||
"parcel-plugin-custom-service-worker": "^1.0.2",
|
||||
"polywasm": "^0.1.4",
|
||||
"prettier": "3.1.1",
|
||||
"prop-types": "^15.8.1",
|
||||
|
|
@ -56,18 +52,22 @@
|
|||
"radix3": "^1.1.0",
|
||||
"react": "18.2.0",
|
||||
"react-colorful": "^5.6.1",
|
||||
"react-contenteditable": "^3.3.7",
|
||||
"react-dnd": "^16.0.1",
|
||||
"react-dom": "18.2.0",
|
||||
"react-dropzone": "14.2.3",
|
||||
"react-is": "^18.2.0",
|
||||
"react-resizable-panels": "^2.0.9",
|
||||
"react-use-error-boundary": "^3.0.0",
|
||||
"react-virtuoso": "^4.6.2",
|
||||
"recast": "^0.23.4",
|
||||
"safe-flat": "^2.1.0",
|
||||
"safe-stable-stringify": "^2.4.3",
|
||||
"svgo": "^3.1.0",
|
||||
"textdiff-create": "^1.1.10",
|
||||
"tinycolor2": "^1.6.0",
|
||||
"ua-parser-js": "^1.0.37",
|
||||
"uuid": "9.0.1",
|
||||
"pako": "^2.1.0",
|
||||
"wasm-gzip": "^2.0.3",
|
||||
"web-utils": "workspace:*",
|
||||
"y-pojo": "^0.0.8",
|
||||
|
|
|
|||
|
|
@ -1,110 +1,110 @@
|
|||
import { manifest } from "@parcel/service-worker";
|
||||
import { manifest } from "parcel-plugin-custom-service-worker";
|
||||
import { RadixRouter, createRouter } from "radix3";
|
||||
import { version } from "../timestamp";
|
||||
|
||||
const g = {
|
||||
router: null as null | RadixRouter<any>,
|
||||
offline: false,
|
||||
broadcast(msg: any) {
|
||||
// @ts-ignore
|
||||
const c: Clients = self.clients;
|
||||
c.matchAll({ includeUncontrolled: true }).then((clients) => {
|
||||
clients.forEach((client) => {
|
||||
client.postMessage(msg);
|
||||
});
|
||||
});
|
||||
},
|
||||
router: null as null | RadixRouter<any>,
|
||||
offline: false,
|
||||
broadcast(msg: any) {
|
||||
// @ts-ignore
|
||||
const c: Clients = self.clients;
|
||||
c.matchAll({ includeUncontrolled: true }).then((clients) => {
|
||||
clients.forEach((client) => {
|
||||
client.postMessage(msg);
|
||||
});
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
async function install() {
|
||||
const cache = await caches.open(version);
|
||||
await cache.addAll(manifest);
|
||||
g.broadcast({ type: "installed" });
|
||||
const cache = await caches.open(version);
|
||||
await cache.addAll(manifest);
|
||||
g.broadcast({ type: "installed" });
|
||||
}
|
||||
addEventListener("install", (e) => (e as ExtendableEvent).waitUntil(install()));
|
||||
|
||||
async function activate() {
|
||||
let shouldRefresh = false;
|
||||
if (!g.offline) {
|
||||
const keys = await caches.keys();
|
||||
await Promise.all(
|
||||
keys.map(async (key) => {
|
||||
if (key !== version) {
|
||||
await caches.delete(key);
|
||||
shouldRefresh = true;
|
||||
}
|
||||
}),
|
||||
);
|
||||
let shouldRefresh = false;
|
||||
if (!g.offline) {
|
||||
const keys = await caches.keys();
|
||||
await Promise.all(
|
||||
keys.map(async (key) => {
|
||||
if (key !== version) {
|
||||
await caches.delete(key);
|
||||
shouldRefresh = true;
|
||||
}
|
||||
})
|
||||
);
|
||||
|
||||
g.broadcast({ type: "activated", shouldRefresh, version });
|
||||
}
|
||||
g.broadcast({ type: "activated", shouldRefresh, version });
|
||||
}
|
||||
}
|
||||
addEventListener("activate", (e) =>
|
||||
(e as ExtendableEvent).waitUntil(activate()),
|
||||
(e as ExtendableEvent).waitUntil(activate())
|
||||
);
|
||||
|
||||
addEventListener("fetch", async (evt) => {
|
||||
const e = evt as FetchEvent;
|
||||
const e = evt as FetchEvent;
|
||||
|
||||
const url = new URL(e.request.url);
|
||||
const url = new URL(e.request.url);
|
||||
|
||||
if (g.router) {
|
||||
const found = g.router.lookup(url.pathname);
|
||||
if (found) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (g.router) {
|
||||
const found = g.router.lookup(url.pathname);
|
||||
if (found) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
e.respondWith(
|
||||
(async () => {
|
||||
const r = await caches.match(e.request);
|
||||
if (r) {
|
||||
return r;
|
||||
}
|
||||
e.respondWith(
|
||||
(async () => {
|
||||
const r = await caches.match(e.request);
|
||||
if (r) {
|
||||
return r;
|
||||
}
|
||||
|
||||
try {
|
||||
g.offline = false;
|
||||
return await fetch(e.request);
|
||||
} catch (e) {
|
||||
g.offline = true;
|
||||
g.broadcast({ type: "offline" });
|
||||
return new Response();
|
||||
}
|
||||
})(),
|
||||
);
|
||||
try {
|
||||
g.offline = false;
|
||||
return await fetch(e.request);
|
||||
} catch (e) {
|
||||
g.offline = true;
|
||||
g.broadcast({ type: "offline" });
|
||||
return new Response();
|
||||
}
|
||||
})()
|
||||
);
|
||||
});
|
||||
addEventListener("message", async (e) => {
|
||||
const type = e.data.type;
|
||||
const cache = await caches.open(version);
|
||||
const type = e.data.type;
|
||||
const cache = await caches.open(version);
|
||||
|
||||
switch (type) {
|
||||
case "add-cache":
|
||||
{
|
||||
const cached = await cache.match(e.data.url);
|
||||
if (!cached) {
|
||||
await cache.add(e.data.url);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "define-route":
|
||||
g.router = createRouter({ strictTrailingSlash: false });
|
||||
for (const route of e.data.routes) {
|
||||
g.router.insert(route.url, route);
|
||||
}
|
||||
await activate();
|
||||
break;
|
||||
case "force-update":
|
||||
{
|
||||
const keys = await caches.keys();
|
||||
await Promise.all(
|
||||
keys.map(async (key) => {
|
||||
if (key !== version) {
|
||||
await caches.delete(key);
|
||||
}
|
||||
}),
|
||||
);
|
||||
await install();
|
||||
}
|
||||
break;
|
||||
}
|
||||
switch (type) {
|
||||
case "add-cache":
|
||||
{
|
||||
const cached = await cache.match(e.data.url);
|
||||
if (!cached) {
|
||||
await cache.add(e.data.url);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "define-route":
|
||||
g.router = createRouter({ strictTrailingSlash: false });
|
||||
for (const route of e.data.routes) {
|
||||
g.router.insert(route.url, route);
|
||||
}
|
||||
await activate();
|
||||
break;
|
||||
case "force-update":
|
||||
{
|
||||
const keys = await caches.keys();
|
||||
await Promise.all(
|
||||
keys.map(async (key) => {
|
||||
if (key !== version) {
|
||||
await caches.delete(key);
|
||||
}
|
||||
})
|
||||
);
|
||||
await install();
|
||||
}
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,100 +1,118 @@
|
|||
import { createId } from "@paralleldrive/cuid2";
|
||||
import brotliPromise from "brotli-wasm";
|
||||
import { spawn } from "bun";
|
||||
import { Glob, spawn } from "bun";
|
||||
import { dir } from "dir";
|
||||
import { fdir } from "fdir";
|
||||
import { statSync } from "fs";
|
||||
import { copyAsync, existsAsync, listAsync, removeAsync, writeAsync } from "fs-jetpack";
|
||||
import {
|
||||
copyAsync,
|
||||
existsAsync,
|
||||
listAsync,
|
||||
removeAsync,
|
||||
writeAsync,
|
||||
} from "fs-jetpack";
|
||||
const brotli = await brotliPromise;
|
||||
|
||||
const glob = new Glob("**");
|
||||
const swrc = {
|
||||
filesToCache: [] as string[],
|
||||
};
|
||||
for await (const file of glob.scan(dir.path("app/web/public"))) {
|
||||
swrc.filesToCache.push(`public/${file}`);
|
||||
}
|
||||
await Bun.write(
|
||||
dir.path("app/web/.service-worker-rc"),
|
||||
JSON.stringify(swrc, null, 2)
|
||||
);
|
||||
|
||||
await removeAsync(dir.path("app/web/.parcel-cache"));
|
||||
await removeAsync(dir.path("app/static"));
|
||||
|
||||
await writeAsync(
|
||||
dir.path("app/web/timestamp.ts"),
|
||||
`export const version = "${createId().substring(0, 7)}";`,
|
||||
dir.path("app/web/timestamp.ts"),
|
||||
`export const version = "${createId().substring(0, 7)}";`
|
||||
);
|
||||
|
||||
const args = [
|
||||
"node",
|
||||
dir.path("node_modules/.bin/parcel"),
|
||||
"build",
|
||||
"./src/index.tsx",
|
||||
// "--no-optimize",
|
||||
"--no-scope-hoist",
|
||||
"--dist-dir",
|
||||
dir.path(`app/static`),
|
||||
"node",
|
||||
dir.path("node_modules/.bin/parcel"),
|
||||
"build",
|
||||
"./src/index.tsx",
|
||||
// "--no-optimize",
|
||||
"--no-scope-hoist",
|
||||
"--dist-dir",
|
||||
dir.path(`app/static`),
|
||||
];
|
||||
|
||||
const parcel = spawn({
|
||||
cmd: args,
|
||||
cwd: dir.path("app/web"),
|
||||
stdio: ["ignore", "inherit", "inherit"],
|
||||
cmd: args,
|
||||
cwd: dir.path("app/web"),
|
||||
stdio: ["ignore", "inherit", "inherit"],
|
||||
});
|
||||
await parcel.exited;
|
||||
|
||||
const public_br = dir.path("app/web/public-br");
|
||||
if (!(await existsAsync(public_br))) {
|
||||
const api = new fdir().withRelativePaths().crawl(dir.path("app/web/public"));
|
||||
const files = api.sync();
|
||||
if (files) {
|
||||
await Promise.all(
|
||||
files.map(async (file) => {
|
||||
const br = brotli.compress(
|
||||
new Uint8Array(
|
||||
await Bun.file(dir.path(`app/web/public/${file}`)).arrayBuffer(),
|
||||
),
|
||||
{ quality: 11 },
|
||||
);
|
||||
if (br) {
|
||||
console.log(`Compressing [public] ${file}`);
|
||||
await writeAsync(
|
||||
dir.path(`app/web/public-br/${file}`),
|
||||
Buffer.from(br),
|
||||
);
|
||||
}
|
||||
}),
|
||||
);
|
||||
}
|
||||
const api = new fdir().withRelativePaths().crawl(dir.path("app/web/public"));
|
||||
const files = api.sync();
|
||||
if (files) {
|
||||
await Promise.all(
|
||||
files.map(async (file) => {
|
||||
const br = brotli.compress(
|
||||
new Uint8Array(
|
||||
await Bun.file(dir.path(`app/web/public/${file}`)).arrayBuffer()
|
||||
),
|
||||
{ quality: 11 }
|
||||
);
|
||||
if (br) {
|
||||
console.log(`Compressing [public] ${file}`);
|
||||
await writeAsync(
|
||||
dir.path(`app/web/public-br/${file}`),
|
||||
Buffer.from(br)
|
||||
);
|
||||
}
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const static_br = dir.path("app/static-br");
|
||||
await removeAsync(static_br);
|
||||
const files = await listAsync(dir.path("app/static"));
|
||||
if (files) {
|
||||
await Promise.all(
|
||||
files
|
||||
.filter((file) => statSync(dir.path(`app/static/${file}`)).isFile())
|
||||
.map(async (file) => {
|
||||
if (!(await Bun.file(dir.path(`app/static-br/${file}`)).exists())) {
|
||||
const br = brotli.compress(
|
||||
new Uint8Array(
|
||||
await Bun.file(dir.path(`app/static/${file}`)).arrayBuffer(),
|
||||
),
|
||||
{ quality: 11 },
|
||||
);
|
||||
if (br) {
|
||||
console.log(`Compressing [static] ${file}`);
|
||||
await writeAsync(
|
||||
dir.path(`app/static-br/${file}`),
|
||||
Buffer.from(br),
|
||||
);
|
||||
}
|
||||
}
|
||||
}),
|
||||
);
|
||||
const pub = await listAsync(dir.path("app/web/public-br"));
|
||||
if (pub) {
|
||||
await Promise.all(
|
||||
pub.map(async (file) => {
|
||||
if (await existsAsync(`app/static-br/${file}`)) {
|
||||
await removeAsync(`app/static-br/${file}`);
|
||||
}
|
||||
await copyAsync(
|
||||
dir.path(`app/web/public-br/${file}`),
|
||||
dir.path(`app/static-br/${file}`),
|
||||
);
|
||||
}),
|
||||
);
|
||||
}
|
||||
await Promise.all(
|
||||
files
|
||||
.filter((file) => statSync(dir.path(`app/static/${file}`)).isFile())
|
||||
.map(async (file) => {
|
||||
if (!(await Bun.file(dir.path(`app/static-br/${file}`)).exists())) {
|
||||
const br = brotli.compress(
|
||||
new Uint8Array(
|
||||
await Bun.file(dir.path(`app/static/${file}`)).arrayBuffer()
|
||||
),
|
||||
{ quality: 11 }
|
||||
);
|
||||
if (br) {
|
||||
console.log(`Compressing [static] ${file}`);
|
||||
await writeAsync(
|
||||
dir.path(`app/static-br/${file}`),
|
||||
Buffer.from(br)
|
||||
);
|
||||
}
|
||||
}
|
||||
})
|
||||
);
|
||||
const pub = await listAsync(dir.path("app/web/public-br"));
|
||||
if (pub) {
|
||||
await Promise.all(
|
||||
pub.map(async (file) => {
|
||||
if (await existsAsync(`app/static-br/${file}`)) {
|
||||
await removeAsync(`app/static-br/${file}`);
|
||||
}
|
||||
await copyAsync(
|
||||
dir.path(`app/web/public-br/${file}`),
|
||||
dir.path(`app/static-br/${file}`)
|
||||
);
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue