Skip to content

Commit aecc557

Browse files
committed
Redo as spec query param
1 parent 3e6a496 commit aecc557

File tree

5 files changed

+27
-81
lines changed

5 files changed

+27
-81
lines changed

package-lock.json

-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/web/package.json

-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
"license": "MIT",
1717
"dependencies": {
1818
"@arethetypeswrong/core": "file:../core",
19-
"fflate": "^0.7.4",
2019
"immer": "^9.0.21",
2120
"validate-npm-package-name": "^5.0.0"
2221
},

packages/web/src/main.ts

+22-25
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,7 @@
11
import validatePackgeName from "validate-npm-package-name";
22
import type { ResultMessage } from "../worker/worker.ts";
33
import { subscribeRenderer } from "./renderer.ts";
4-
import {
5-
updateState,
6-
type PackageInfo,
7-
type ParsedPackageSpec,
8-
getState,
9-
subscribe,
10-
type State,
11-
deserializeState,
12-
setState,
13-
serializeState,
14-
} from "./state.ts";
4+
import { updateState, type PackageInfo, type ParsedPackageSpec, getState, subscribe, type State } from "./state.ts";
155
import { shallowEqual } from "./utils/shallowEqual.ts";
166

177
// Good grief https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string
@@ -25,11 +15,17 @@ worker.onmessage = async (event: MessageEvent<ResultMessage>) => {
2515
state.message = undefined;
2616
});
2717

28-
const state = getState();
29-
const serializedState = await serializeState(state);
3018
const params = new URLSearchParams(location.search);
31-
params.set("s", serializedState);
32-
history.replaceState(null, "", `?${params}`);
19+
const state = getState();
20+
if (state.packageInfo.parsed) {
21+
params.set(
22+
"p",
23+
`${state.packageInfo.parsed.packageName}${
24+
state.packageInfo.info?.version ? `@${state.packageInfo.info.version}` : ""
25+
}`
26+
);
27+
history.replaceState(null, "", `?${params}`);
28+
}
3329
};
3430

3531
subscribeRenderer({
@@ -45,22 +41,23 @@ subscribeRenderer({
4541
subscribe(debounce(getPackageInfo, 300));
4642

4743
if (location.search) {
44+
const packageNameInput = document.getElementById("package-spec") as HTMLInputElement;
4845
const params = new URLSearchParams(location.search);
49-
const serializedState = params.get("s");
50-
if (serializedState) {
51-
deserializeState(serializedState).then((state) => {
52-
const packageNameInput = document.getElementById("package-spec") as HTMLInputElement;
53-
if (state.packageInfo.parsed) {
54-
packageNameInput.value = `${state.packageInfo.parsed.packageName}${
55-
state.packageInfo.info?.version ? `@${state.packageInfo.info.version}` : ""
56-
}`;
46+
const packageSpec = params.get("p");
47+
if (packageSpec) {
48+
packageNameInput.value = packageSpec;
49+
onPackageNameInput(packageSpec);
50+
getPackageInfo().then(() => {
51+
const info = getState().packageInfo.info;
52+
console.log(info);
53+
if (info && info.size && info.size < 1_000_000 && !navigator.connection?.saveData) {
54+
onCheck();
5755
}
58-
setState(state);
5956
});
6057
}
6158
}
6259

63-
async function onPackageNameInput(value: string) {
60+
function onPackageNameInput(value: string) {
6461
value = value.trim();
6562
if (!value) {
6663
updateState((state) => {

packages/web/src/state.ts

-53
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import type { Analysis, ProblemSummary, Problem } from "@arethetypeswrong/core";
2-
import { gunzip, gzip } from "fflate";
32
import { produce } from "immer";
43

54
export interface Checks {
@@ -60,55 +59,3 @@ export function updateState(updater: (draftState: State) => void): void {
6059
export function getState(): DeepReadonly<State> {
6160
return state;
6261
}
63-
64-
export function setState(newState: State): void {
65-
const prevState = state;
66-
state = newState;
67-
subscribers.forEach((callback) => callback(prevState));
68-
}
69-
70-
export async function serializeState(state = getState()): Promise<string> {
71-
const json = JSON.stringify([state.packageInfo, state.checks], (key, value) => {
72-
if (key === "exports" || key === "trace") return undefined;
73-
return value;
74-
});
75-
76-
return new Promise((resolve, reject) => {
77-
gzip(new TextEncoder().encode(json), (error, data) => {
78-
if (error) {
79-
reject(error);
80-
} else {
81-
resolve(btoa(String.fromCharCode(...data)));
82-
}
83-
});
84-
});
85-
}
86-
87-
export async function deserializeState(serializedState: string): Promise<State> {
88-
const json = new TextDecoder().decode(
89-
await new Promise((resolve, reject) =>
90-
gunzip(
91-
Uint8Array.from(
92-
atob(serializedState)
93-
.split("")
94-
.map((c) => c.charCodeAt(0))
95-
),
96-
(error, data) => {
97-
if (error) {
98-
reject(error);
99-
} else {
100-
resolve(data);
101-
}
102-
}
103-
)
104-
)
105-
);
106-
107-
const [packageInfo, checks] = JSON.parse(json) as [PackageInfoState, Checks];
108-
109-
return {
110-
isLoading: false,
111-
packageInfo,
112-
checks,
113-
};
114-
}

packages/web/src/types.ts

+5
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,9 @@ export {};
22

33
declare global {
44
const COMMIT: string;
5+
interface Navigator {
6+
connection?: {
7+
saveData: boolean;
8+
};
9+
}
510
}

0 commit comments

Comments
 (0)