@effing/create 0.6.0 → 0.6.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effing/create",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "description": "Create a new Effing project",
5
5
  "type": "module",
6
6
  "bin": "./dist/index.js",
@@ -1,3 +1,4 @@
1
+ import { useEffect } from "react";
1
2
  import type { MetaFunction } from "react-router";
2
3
  import { Links, Meta, Outlet, Scripts, ScrollRestoration } from "react-router";
3
4
 
@@ -7,6 +8,12 @@ export const meta: MetaFunction = () => [
7
8
  ];
8
9
 
9
10
  export default function App() {
11
+ useEffect(() => {
12
+ if ("serviceWorker" in navigator) {
13
+ navigator.serviceWorker.register("/sw.js");
14
+ }
15
+ }, []);
16
+
10
17
  return (
11
18
  <html lang="en">
12
19
  <head>
@@ -11,14 +11,14 @@
11
11
  "typecheck": "react-router typegen && tsc"
12
12
  },
13
13
  "dependencies": {
14
- "@effing/annie": "^0.6.0",
15
- "@effing/annie-player": "^0.6.0",
16
- "@effing/effie": "^0.6.0",
17
- "@effing/effie-preview": "^0.6.0",
18
- "@effing/ffs": "^0.6.0",
19
- "@effing/satori": "^0.6.0",
20
- "@effing/serde": "^0.6.0",
21
- "@effing/tween": "^0.6.0",
14
+ "@effing/annie": "^0.6.1",
15
+ "@effing/annie-player": "^0.6.1",
16
+ "@effing/effie": "^0.6.1",
17
+ "@effing/effie-preview": "^0.6.1",
18
+ "@effing/ffs": "^0.6.1",
19
+ "@effing/satori": "^0.6.1",
20
+ "@effing/serde": "^0.6.1",
21
+ "@effing/tween": "^0.6.1",
22
22
  "@react-router/node": "^7.0.0",
23
23
  "@react-router/serve": "^7.0.0",
24
24
  "cross-env": "^7.0.3",
@@ -0,0 +1,42 @@
1
+ /* global clients */
2
+
3
+ // FFS render URLs (GET /render/{uuid}) are one-time-consumption — the server
4
+ // deletes the job after streaming the response. However, Chrome makes follow-up
5
+ // requests to the same URL (e.g. to re-read the moov atom for seeking), which
6
+ // return 404 and cause the video to hang at larger scales. This service worker
7
+ // caches the response so those subsequent requests are served from cache.
8
+
9
+ const CACHE_NAME = "ffs-render-cache";
10
+ const RENDER_URL_PATTERN = /\/render\/[0-9a-f-]{36}$/;
11
+ const MAX_ENTRIES = 5;
12
+
13
+ self.addEventListener("activate", (event) => {
14
+ event.waitUntil(caches.delete(CACHE_NAME).then(() => clients.claim()));
15
+ });
16
+
17
+ self.addEventListener("fetch", (event) => {
18
+ if (!RENDER_URL_PATTERN.test(new URL(event.request.url).pathname)) return;
19
+
20
+ event.respondWith(
21
+ caches.open(CACHE_NAME).then(async (cache) => {
22
+ const cached = await cache.match(event.request);
23
+ if (cached) return cached;
24
+
25
+ const response = await fetch(event.request);
26
+ if (response.ok) {
27
+ await cache.put(event.request, response.clone());
28
+
29
+ // Prune oldest entries to keep the cache bounded.
30
+ const keys = await cache.keys();
31
+ if (keys.length > MAX_ENTRIES) {
32
+ await Promise.all(
33
+ keys
34
+ .slice(0, keys.length - MAX_ENTRIES)
35
+ .map((k) => cache.delete(k)),
36
+ );
37
+ }
38
+ }
39
+ return response;
40
+ }),
41
+ );
42
+ });