diff --git a/.vscode/settings.json b/.vscode/settings.json
index b0a34ee..be718c3 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,6 +1,6 @@
{
"editor.defaultFormatter": "biomejs.biome",
- "workbench.colorTheme": "Default Dark+",
+ "workbench.colorTheme": "Dark+",
"terminal.integrated.env.windows": {},
"editor.formatOnSave": true,
"typescript.preferences.importModuleSpecifier": "relative",
diff --git a/lstMobile/package-lock.json b/lstMobile/package-lock.json
index 4d4d559..7310529 100644
--- a/lstMobile/package-lock.json
+++ b/lstMobile/package-lock.json
@@ -39,7 +39,8 @@
"react-native-web": "~0.21.0",
"react-native-worklets": "0.7.2",
"socket.io-client": "^4.8.3",
- "zod": "^4.3.6"
+ "zod": "^4.3.6",
+ "zustand": "^5.0.12"
},
"devDependencies": {
"@types/react": "~19.2.2",
@@ -13898,6 +13899,35 @@
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
+ },
+ "node_modules/zustand": {
+ "version": "5.0.12",
+ "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.12.tgz",
+ "integrity": "sha512-i77ae3aZq4dhMlRhJVCYgMLKuSiZAaUPAct2AksxQ+gOtimhGMdXljRT21P5BNpeT4kXlLIckvkPM029OljD7g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.20.0"
+ },
+ "peerDependencies": {
+ "@types/react": ">=18.0.0",
+ "immer": ">=9.0.6",
+ "react": ">=18.0.0",
+ "use-sync-external-store": ">=1.2.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "immer": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "use-sync-external-store": {
+ "optional": true
+ }
+ }
}
}
}
diff --git a/lstMobile/package.json b/lstMobile/package.json
index 6c6d7ba..8428b02 100644
--- a/lstMobile/package.json
+++ b/lstMobile/package.json
@@ -44,7 +44,8 @@
"react-native-web": "~0.21.0",
"react-native-worklets": "0.7.2",
"socket.io-client": "^4.8.3",
- "zod": "^4.3.6"
+ "zod": "^4.3.6",
+ "zustand": "^5.0.12"
},
"devDependencies": {
"@types/react": "~19.2.2",
diff --git a/lstMobile/src/app/(tabs)/_layout.tsx b/lstMobile/src/app/(tabs)/_layout.tsx
deleted file mode 100644
index 07c645a..0000000
--- a/lstMobile/src/app/(tabs)/_layout.tsx
+++ /dev/null
@@ -1,38 +0,0 @@
-import { Tabs } from 'expo-router'
-import React from 'react'
-import { colors } from '../../stlyes/global'
-import { Home,Settings } from 'lucide-react-native'
-
-export default function TabLayout() {
- return (
-
- (
-
- )
- }}
- />
- (
-
- )
- }}
- />
-
- )
-}
diff --git a/lstMobile/src/app/(tabs)/config.tsx b/lstMobile/src/app/(tabs)/config.tsx
deleted file mode 100644
index 036e93b..0000000
--- a/lstMobile/src/app/(tabs)/config.tsx
+++ /dev/null
@@ -1,92 +0,0 @@
-// app/config.tsx
-import { useEffect, useState } from "react";
-import { View, Text, TextInput, Button, Alert } from "react-native";
-import { useRouter } from "expo-router";
-import { AppConfig, getConfig, saveConfig } from "../../lib/storage";
-import Constants from "expo-constants";
-
-export default function Config() {
- const [serverUrl, setServerUrl] = useState("");
- const [scannerId, setScannerId] = useState("");
- const [config, setConfig] = useState(null)
- const [loading, setLoading] = useState(true);
- const router = useRouter()
-
-const version = Constants.expoConfig?.version;
-const build = Constants.expoConfig?.android?.versionCode ?? 1;
-
- useEffect(() => {
- const loadConfig = async () => {
- const existing = await getConfig();
-
- if (existing) {
- setServerUrl(existing.serverUrl);
- setScannerId(existing.scannerId);
- setConfig(existing)
- }
-
- setLoading(false);
- };
-
- loadConfig();
- }, []);
-
- const handleSave = async () => {
- if (!serverUrl.trim() || !scannerId.trim()) {
- Alert.alert("Missing info", "Please fill in both fields.");
- return;
- }
-
- await saveConfig({
- serverUrl: serverUrl.trim(),
- scannerId: scannerId.trim(),
- });
-
- Alert.alert("Saved", "Config saved to device.");
- //router.replace("/");
- };
-
- if (loading) {
- return Loading config...;
- }
-
- return (
-
-
- LST Scanner Config
-
-
-
- Server IP
-
-
- Server port
-
-
-
-
-
-
-
-
-
- LST Scanner v{version}-{build}
-
-
-
- );
-}
\ No newline at end of file
diff --git a/lstMobile/src/app/(tabs)/index.tsx b/lstMobile/src/app/(tabs)/index.tsx
deleted file mode 100644
index 72eb66c..0000000
--- a/lstMobile/src/app/(tabs)/index.tsx
+++ /dev/null
@@ -1,134 +0,0 @@
-import * as Application from "expo-application";
-import * as Device from "expo-device";
-import { useRouter } from "expo-router";
-import { useEffect, useState } from "react";
-import {
- Alert,
- Platform,
- ScrollView,
- Text,
- View,
-} from "react-native";
-import HomeHeader from "../../components/HomeHeader";
-import { type AppConfig, getConfig, hasValidConfig } from "../../lib/storage";
-import {
- evaluateVersion,
- type ServerVersionInfo,
- type StartupStatus,
-} from "../../lib/versionValidation";
-import { globalStyles } from "../../stlyes/global";
-import axios from 'axios'
-
-export default function Index() {
- const [config, setConfig] = useState(null);
- const [loading, setLoading] = useState(true);
- const [startupStatus, setStartupStatus] = useState({state: "checking"});
- const [serverInfo, setServerInfo] = useState()
-
- const router = useRouter();
-
- const versionName = Application.nativeApplicationVersion ?? "unknown";
- const versionCode = Number(Application.nativeBuildVersion ?? "0");
-
- useEffect(() => {
- let isMounted = true;
-
- const startUp = async () => {
- try {
- const savedConfig = await getConfig();
-
- if (!hasValidConfig(savedConfig)) {
- router.replace("/config");
- return;
- }
-
- if (!isMounted) return;
- setConfig(savedConfig);
-
- // temp while testing
- const appBuildCode = 1;
-
- try {
- const res = await axios.get(`http://${savedConfig?.serverUrl}:${savedConfig?.scannerId}/lst/api/mobile/version`);
- console.log(res)
- const server = (await res.data) as ServerVersionInfo;
-
- if (!isMounted) return;
-
- const result = evaluateVersion(appBuildCode, server);
- setStartupStatus(result);
- setServerInfo(server)
-
- if (result.state === "warning") {
- Alert.alert("Update available", result.message);
- }
- } catch {
- if (!isMounted) return;
- setStartupStatus({ state: "offline" });
- }
- } finally {
- if (isMounted) {
- setLoading(false);
- }
- }
- };
-
- startUp();
-
- return () => {
- isMounted = false;
- };
-
- }, [router]);
-
- if (loading) {
- return Validating Configs.;
- }
-
- if (startupStatus.state === "checking") {
- return Checking device and server status...;
- }
-
- if (startupStatus.state === "blocked") {
- return (
-
- Update Required
- This scanner must be updated before it can be used.
- Scan the update code to continue.
-
- );
- }
-
- if (startupStatus.state === "offline") {
- // app still renders, but show disconnected state
- }
-
- return (
-
-
-
-
-
-
- Welcome.{versionName} - {versionCode}
-
- Running on: {Platform.OS}
- Device model: {Device.modelName}
- Device Brand: {Device.brand}
- OS Version: {Device.osVersion}
-
- Welcome
-
- {config ? (
- <>
- Server: {config.serverUrl}
- Scanner: {config.scannerId}
- Server: v{serverInfo?.versionName}
- >
- ) : (
- No config found yet.
- )}
-
-
- );
-}
diff --git a/lstMobile/src/app/_layout.tsx b/lstMobile/src/app/_layout.tsx
index ff201fc..2ba088c 100644
--- a/lstMobile/src/app/_layout.tsx
+++ b/lstMobile/src/app/_layout.tsx
@@ -1,12 +1,14 @@
import { Stack } from "expo-router";
-import {StatusBar} from 'expo-status-bar'
-import { colors } from "../stlyes/global";
+import { StatusBar } from "expo-status-bar";
export default function RootLayout() {
- return <>
-
-
-
-
- >;
+ return (
+ <>
+
+
+
+ {/* */}
+
+ >
+ );
}
diff --git a/lstMobile/src/app/blocked.tsx b/lstMobile/src/app/blocked.tsx
new file mode 100644
index 0000000..a40201f
--- /dev/null
+++ b/lstMobile/src/app/blocked.tsx
@@ -0,0 +1,9 @@
+import { Text, View } from "react-native";
+
+export default function blocked() {
+ return (
+
+ Blocked
+
+ );
+}
diff --git a/lstMobile/src/app/index.tsx b/lstMobile/src/app/index.tsx
new file mode 100644
index 0000000..6dc63fe
--- /dev/null
+++ b/lstMobile/src/app/index.tsx
@@ -0,0 +1,72 @@
+import { useRouter } from "expo-router";
+import { useEffect, useState } from "react";
+import { ActivityIndicator, Text, View } from "react-native";
+import { useAppStore } from "../hooks/useAppStore";
+import { devDelay } from "../lib/devMode";
+
+export default function Index() {
+ const router = useRouter();
+ const [message, setMessage] = useState(Starting app...);
+
+ const hasHydrated = useAppStore((s) => s.hasHydrated);
+ const serverPort = useAppStore((s) => s.serverPort);
+ const hasValidSetup = useAppStore((s) => s.hasValidSetup);
+
+ useEffect(() => {
+ if (!hasHydrated) {
+ setMessage(Loading app...);
+ return;
+ }
+
+ const startup = async () => {
+ try {
+ await devDelay(1500);
+
+ setMessage(Validating data...);
+ await devDelay(1500);
+
+ if (!hasValidSetup()) {
+ router.replace("/setup");
+ return;
+ }
+
+ setMessage(Checking scanner mode...);
+ await devDelay(1500);
+
+ if (parseInt(serverPort || "0", 10) >= 50000) {
+ setMessage(
+
+ Starting normal alplaprod scanner that has no LST rules
+ ,
+ );
+ await devDelay(1500);
+ router.replace("/setup");
+ return;
+ }
+
+ setMessage(Opening LST scan app);
+ await devDelay(3250);
+ router.replace("/scanner");
+ } catch (error) {
+ console.log("Startup error", error);
+ setMessage(Something went wrong during startup.);
+ }
+ };
+
+ startup();
+ }, [hasHydrated, hasValidSetup, serverPort, router]);
+
+ return (
+
+ {message}
+
+
+ );
+}
diff --git a/lstMobile/src/app/scanner.tsx b/lstMobile/src/app/scanner.tsx
new file mode 100644
index 0000000..8c63382
--- /dev/null
+++ b/lstMobile/src/app/scanner.tsx
@@ -0,0 +1,32 @@
+import React from "react";
+import { Text, View } from "react-native";
+
+export default function scanner() {
+ return (
+
+
+ LST Scanner
+
+
+ Relocate
+ 0 / 4
+
+
+ {/*
+ List of recent scanned pallets TBA
+ */}
+
+ );
+}
diff --git a/lstMobile/src/app/setup.tsx b/lstMobile/src/app/setup.tsx
new file mode 100644
index 0000000..9991449
--- /dev/null
+++ b/lstMobile/src/app/setup.tsx
@@ -0,0 +1,156 @@
+import Constants from "expo-constants";
+import { useRouter } from "expo-router";
+import { useState } from "react";
+import { Alert, Button, Text, TextInput, View } from "react-native";
+import { useAppStore } from "../hooks/useAppStore";
+
+export default function setup() {
+ const router = useRouter();
+ const [auth, setAuth] = useState(false);
+ const [pin, setPin] = useState("");
+ const version = Constants.expoConfig?.version;
+ const build = Constants.expoConfig?.android?.versionCode ?? 1;
+
+ const serverIpFromStore = useAppStore((s) => s.serverIp);
+ const serverPortFromStore = useAppStore((s) => s.serverPort);
+
+ const updateAppState = useAppStore((s) => s.updateAppState);
+
+ // local form state
+ const [serverIp, setLocalServerIp] = useState(serverIpFromStore);
+ const [serverPort, setLocalServerPort] = useState(serverPortFromStore);
+
+ const authCheck = () => {
+ if (pin === "6971") {
+ setAuth(true);
+ } else {
+ Alert.alert("Incorrect pin entered please try again");
+ setPin("");
+ }
+ };
+
+ const handleSave = async () => {
+ if (!serverIp.trim() || !serverPort.trim()) {
+ Alert.alert("Missing info", "Please fill in both fields.");
+ return;
+ }
+
+ updateAppState({
+ serverIp: serverIp.trim(),
+ serverPort: serverPort.trim(),
+ setupCompleted: true,
+ isRegistered: true,
+ });
+
+ Alert.alert("Saved", "Config saved to device.");
+ //router.replace("/");
+ };
+ return (
+
+
+
+ LST Scanner Config
+
+
+ {!auth ? (
+
+ Pin Number
+
+
+
+
+
+ ) : (
+
+ Server IP
+
+
+ Server port
+
+
+ {parseInt(serverPort ?? "0", 10) >= 50000 && (
+
+ Scanner ID
+
+ This is needed as you will be redirected to the standard scanner
+ with no rules except the rules that alplaprod puts in
+
+
+
+ )}
+
+
+
+
+
+ )}
+
+
+ LST Scanner v{version}-{build}
+
+
+
+ );
+}
diff --git a/lstMobile/src/hooks/useAppStore.ts b/lstMobile/src/hooks/useAppStore.ts
new file mode 100644
index 0000000..9262430
--- /dev/null
+++ b/lstMobile/src/hooks/useAppStore.ts
@@ -0,0 +1,151 @@
+import AsyncStorage from "@react-native-async-storage/async-storage";
+import { create } from "zustand";
+import { createJSONStorage, persist } from "zustand/middleware";
+
+export type ValidationStatus = "idle" | "pending" | "passed" | "failed";
+
+export type AppState = {
+ serverIp: string;
+ serverPort: string;
+ scannerId?: string;
+ stageId?: string;
+ deviceName?: string;
+
+ setupCompleted: boolean;
+ isRegistered: boolean;
+
+ lastValidationStatus: ValidationStatus;
+ lastValidationAt?: string;
+
+ appVersion?: string;
+
+ hasHydrated: boolean;
+};
+
+type AppActions = {
+ setServerIp: (value: string) => void;
+ setServerPort: (value: string) => void;
+ setScannerId: (value?: string) => void;
+ setStageId: (value?: string) => void;
+ setDeviceName: (value?: string) => void;
+ setSetupCompleted: (value: boolean) => void;
+ setIsRegistered: (value: boolean) => void;
+ setValidationStatus: (status: ValidationStatus, validatedAt?: string) => void;
+ setAppVersion: (value?: string) => void;
+ setHasHydrated: (value: boolean) => void;
+
+ updateAppState: (updates: Partial) => void;
+ resetApp: () => void;
+
+ hasValidSetup: () => boolean;
+ canEnterApp: () => boolean;
+ getServerUrl: () => string;
+};
+
+export type AppStore = AppState & AppActions;
+
+const defaultAppState: AppState = {
+ serverIp: "",
+ serverPort: "",
+ scannerId: "0001",
+ stageId: undefined,
+ deviceName: undefined,
+
+ setupCompleted: false,
+ isRegistered: false,
+
+ lastValidationStatus: "idle",
+ lastValidationAt: undefined,
+
+ appVersion: undefined,
+
+ hasHydrated: false,
+};
+
+export const useAppStore = create()(
+ persist(
+ (set, get) => ({
+ ...defaultAppState,
+
+ setServerIp: (value) => set({ serverIp: value }),
+ setServerPort: (value) => set({ serverPort: value }),
+ setScannerId: (value) => set({ scannerId: value }),
+ setStageId: (value) => set({ stageId: value }),
+ setDeviceName: (value) => set({ deviceName: value }),
+ setSetupCompleted: (value) => set({ setupCompleted: value }),
+ setIsRegistered: (value) => set({ isRegistered: value }),
+
+ setValidationStatus: (status, validatedAt) =>
+ set({
+ lastValidationStatus: status,
+ lastValidationAt: validatedAt,
+ }),
+
+ setAppVersion: (value) => set({ appVersion: value }),
+ setHasHydrated: (value) => set({ hasHydrated: value }),
+
+ updateAppState: (updates) =>
+ set((state) => ({
+ ...state,
+ ...updates,
+ })),
+
+ resetApp: () =>
+ set({
+ ...defaultAppState,
+ hasHydrated: true,
+ }),
+
+ hasValidSetup: () => {
+ const state = get();
+ return Boolean(
+ state.serverIp?.trim() &&
+ state.serverPort?.trim() &&
+ state.setupCompleted,
+ );
+ },
+
+ canEnterApp: () => {
+ const state = get();
+ return Boolean(
+ state.serverIp?.trim() &&
+ state.serverPort?.trim() &&
+ state.setupCompleted &&
+ state.isRegistered,
+ );
+ },
+
+ getServerUrl: () => {
+ const { serverIp, serverPort } = get();
+
+ if (!serverIp?.trim() || !serverPort?.trim()) return "";
+ return `http://${serverIp.trim()}:${serverPort.trim()}`;
+ },
+ }),
+ {
+ name: "lst_mobile_app_store",
+ storage: createJSONStorage(() => AsyncStorage),
+
+ onRehydrateStorage: () => (state, error) => {
+ if (error) {
+ console.log("Failed to hydrate app state", error);
+ }
+
+ state?.setHasHydrated(true);
+ },
+
+ partialize: (state) => ({
+ serverIp: state.serverIp,
+ serverPort: state.serverPort,
+ scannerId: state.scannerId,
+ stageId: state.stageId,
+ deviceName: state.deviceName,
+ setupCompleted: state.setupCompleted,
+ isRegistered: state.isRegistered,
+ lastValidationStatus: state.lastValidationStatus,
+ lastValidationAt: state.lastValidationAt,
+ appVersion: state.appVersion,
+ }),
+ },
+ ),
+);
diff --git a/lstMobile/src/lib/delay.ts b/lstMobile/src/lib/delay.ts
new file mode 100644
index 0000000..29a28bd
--- /dev/null
+++ b/lstMobile/src/lib/delay.ts
@@ -0,0 +1 @@
+export const delay = (ms: number) => new Promise((res) => setTimeout(res, ms));
diff --git a/lstMobile/src/lib/devMode.ts b/lstMobile/src/lib/devMode.ts
new file mode 100644
index 0000000..b283d9d
--- /dev/null
+++ b/lstMobile/src/lib/devMode.ts
@@ -0,0 +1,7 @@
+import { delay } from "./delay";
+
+export const devDelay = async (ms: number) => {
+ if (__DEV__) {
+ await delay(ms);
+ }
+};
diff --git a/lstMobile/src/lib/storage.ts b/lstMobile/src/lib/storage.ts
deleted file mode 100644
index 2c83562..0000000
--- a/lstMobile/src/lib/storage.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-
-import AsyncStorage from "@react-native-async-storage/async-storage";
-
-export type AppConfig = {
- serverUrl: string;
- scannerId: string;
-};
-
-const CONFIG_KEY = "scanner_app_config";
-
-export async function saveConfig(config: AppConfig) {
-
- await AsyncStorage.setItem(CONFIG_KEY, JSON.stringify(config));
-}
-
-export async function getConfig(): Promise {
- const raw = await AsyncStorage.getItem(CONFIG_KEY);
-
- if (!raw) return null;
-
- try {
- return JSON.parse(raw) as AppConfig;
- } catch (error) {
- console.log("Error", error)
- return null;
- }
-}
-
-export function hasValidConfig(config: AppConfig | null) {
- if (!config) return false;
-
- return Boolean(
- config.serverUrl?.trim() &&
- config.scannerId?.trim()
- );
-}
\ No newline at end of file
diff --git a/lstMobile/temps/(tabs)/_layout.tsx b/lstMobile/temps/(tabs)/_layout.tsx
new file mode 100644
index 0000000..c78a493
--- /dev/null
+++ b/lstMobile/temps/(tabs)/_layout.tsx
@@ -0,0 +1,33 @@
+import { Tabs } from "expo-router";
+import { Home, Settings } from "lucide-react-native";
+import { colors } from "../../stlyes/global";
+
+export default function TabLayout() {
+ return (
+
+ ,
+ }}
+ />
+ (
+
+ ),
+ }}
+ />
+
+ );
+}
diff --git a/lstMobile/temps/(tabs)/config.tsx b/lstMobile/temps/(tabs)/config.tsx
new file mode 100644
index 0000000..ff861e5
--- /dev/null
+++ b/lstMobile/temps/(tabs)/config.tsx
@@ -0,0 +1,94 @@
+// app/config.tsx
+
+import Constants from "expo-constants";
+import { useRouter } from "expo-router";
+import { useEffect, useState } from "react";
+import { Alert, Button, Text, TextInput, View } from "react-native";
+
+export default function Config() {
+ const [serverUrl, setServerUrl] = useState("");
+ const [scannerId, setScannerId] = useState("");
+ const [config, setConfig] = useState(null);
+ const [loading, setLoading] = useState(true);
+ const router = useRouter();
+
+ const version = Constants.expoConfig?.version;
+ const build = Constants.expoConfig?.android?.versionCode ?? 1;
+
+ useEffect(() => {
+ const loadConfig = async () => {
+ const existing = await getConfig();
+
+ if (existing) {
+ setServerUrl(existing.serverUrl);
+ setScannerId(existing.scannerId);
+ setConfig(existing);
+ }
+
+ setLoading(false);
+ };
+
+ loadConfig();
+ }, []);
+
+ const handleSave = async () => {
+ if (!serverUrl.trim() || !scannerId.trim()) {
+ Alert.alert("Missing info", "Please fill in both fields.");
+ return;
+ }
+
+ await saveConfig({
+ serverUrl: serverUrl.trim(),
+ scannerId: scannerId.trim(),
+ });
+
+ Alert.alert("Saved", "Config saved to device.");
+ //router.replace("/");
+ };
+
+ if (loading) {
+ return Loading config...;
+ }
+
+ return (
+
+
+
+ LST Scanner Config
+
+
+
+ Server IP
+
+
+ Server port
+
+
+
+
+
+
+
+
+ LST Scanner v{version}-{build}
+
+
+
+ );
+}
diff --git a/lstMobile/temps/(tabs)/home.tsx b/lstMobile/temps/(tabs)/home.tsx
new file mode 100644
index 0000000..8c8d206
--- /dev/null
+++ b/lstMobile/temps/(tabs)/home.tsx
@@ -0,0 +1,43 @@
+import axios from "axios";
+import * as Application from "expo-application";
+import * as Device from "expo-device";
+import { useRouter } from "expo-router";
+import { useEffect, useState } from "react";
+import { Alert, Platform, ScrollView, Text, View } from "react-native";
+import HomeHeader from "../../components/HomeHeader";
+import { hasValidSetup, type PersistedAppState } from "../../lib/storage";
+import {
+ evaluateVersion,
+ type ServerVersionInfo,
+ type StartupStatus,
+} from "../../lib/versionValidation";
+import { globalStyles } from "../../stlyes/global";
+
+export default function Index() {
+ return (
+
+
+
+
+ Welcome. Blake
+ Running on: {Platform.OS}
+ Device model: {Device.modelName}
+ Device Brand: {Device.brand}
+ OS Version: {Device.osVersion}
+
+ Welcome
+
+ {/* {config ? (
+ <>
+ Server: {config.serverUrl}
+ Scanner: {config.scannerId}
+ Server: v{serverInfo?.versionName}
+ >
+ ) : (
+ No config found yet.
+ )} */}
+
+
+
+ );
+}
diff --git a/package-lock.json b/package-lock.json
index 2d3a44b..1a288a2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -536,9 +536,6 @@
"arm64"
],
"dev": true,
- "libc": [
- "glibc"
- ],
"license": "MIT OR Apache-2.0",
"optional": true,
"os": [
@@ -556,9 +553,6 @@
"arm64"
],
"dev": true,
- "libc": [
- "musl"
- ],
"license": "MIT OR Apache-2.0",
"optional": true,
"os": [
@@ -576,9 +570,6 @@
"x64"
],
"dev": true,
- "libc": [
- "glibc"
- ],
"license": "MIT OR Apache-2.0",
"optional": true,
"os": [
@@ -596,9 +587,6 @@
"x64"
],
"dev": true,
- "libc": [
- "musl"
- ],
"license": "MIT OR Apache-2.0",
"optional": true,
"os": [