mirror of
https://github.com/linkwarden/linkwarden.git
synced 2026-03-03 03:57:01 +00:00
Compare commits
15 Commits
v2.13.4
...
dependabot
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
64d7f9e0ea | ||
|
|
c7ab767872 | ||
|
|
fdf48abd29 | ||
|
|
59252759f2 | ||
|
|
dd96d80d42 | ||
|
|
f8efbe95e6 | ||
|
|
cf84474921 | ||
|
|
eccf27425c | ||
|
|
3926e566b7 | ||
|
|
bca333be26 | ||
|
|
02a1e3b455 | ||
|
|
5b0c66b5e2 | ||
|
|
7c0c823c41 | ||
|
|
a8d2c55d12 | ||
|
|
37410fcf97 |
14
.github/FUNDING.yml
vendored
14
.github/FUNDING.yml
vendored
@@ -1,13 +1,3 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
||||
patreon: # Replace with a single Patreon username
|
||||
open_collective: linkwarden
|
||||
ko_fi: # Replace with a single Ko-fi username
|
||||
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||
liberapay: # Replace with a single Liberapay username
|
||||
issuehunt: # Replace with a single IssueHunt username
|
||||
otechie: # Replace with a single Otechie username
|
||||
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
|
||||
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
||||
github: daniel31x13
|
||||
buy_me_a_coffee: daniel31x13
|
||||
46
.github/pull_request_template.md
vendored
Normal file
46
.github/pull_request_template.md
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
## What does this PR do?
|
||||
|
||||
<!-- Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change. -->
|
||||
|
||||
- Fixes #XXXX (GitHub issue number)
|
||||
|
||||
## Visual Demo
|
||||
|
||||
A visual demonstration is strongly recommended, for both the original and new change **(video / image)**.
|
||||
|
||||
#### Video Demo (if applicable):
|
||||
|
||||
- Show screen recordings of the issue or feature.
|
||||
- Demonstrate how to reproduce the issue, the behavior before and after the change.
|
||||
|
||||
#### Image Demo (if applicable):
|
||||
|
||||
- Add side-by-side screenshots of the original and updated change.
|
||||
- Highlight any significant change(s).
|
||||
|
||||
## AI Assistance (Required)
|
||||
|
||||
We allow AI-assisted development, but reviewers need transparency to assess risk, maintainability, and correctness.
|
||||
|
||||
#### AI usage level (check one)
|
||||
|
||||
- [ ] None (no AI used)
|
||||
- [ ] Light (spellcheck/rewording/comments/docs only)
|
||||
- [ ] Medium (AI suggested small code changes/snippets that I adapted)
|
||||
- [ ] Heavy (AI significantly shaped the implementation or architecture)
|
||||
|
||||
#### Which tool(s) where used?
|
||||
|
||||
- e.g., ChatGPT, Copilot, Cursor, etc.
|
||||
|
||||
## What was verified by the author?
|
||||
|
||||
<!-- Add what you personally checked to ensure correctness and safety. -->
|
||||
|
||||
- [ ] I reviewed **and** understood all AI/human generated code
|
||||
- [ ] I validated behavior locally (tests/manual verification)
|
||||
- [ ] I checked edge cases and failure modes
|
||||
|
||||
## Submission Acknowledgement
|
||||
|
||||
- [ ] I acknowledge that a decent size PR without self-review might be rejected
|
||||
67
README.md
67
README.md
@@ -38,32 +38,49 @@ Linkwarden is also designed with collaboration in mind, enabling you to share li
|
||||
|
||||
## Features
|
||||
|
||||
- 📸 Auto capture a screenshot, PDF, and single html file of each webpage.
|
||||
- 📖 Reader view of the webpage, with the ability to highlight and annotate text.
|
||||
- 🏛️ Send your webpage to Wayback Machine ([archive.org](https://archive.org)) for a snapshot. (Optional)
|
||||
- ✨ Local AI Tagging to automatically tag your links based on their content (Optional).
|
||||
- 📂 Organize links by collection, sub-collection, name, description and multiple tags.
|
||||
- 👥 Collaborate on gathering links in a collection.
|
||||
- 🎛️ Customize the permissions of each member.
|
||||
- 🌐 Share your collected links and preserved formats with the world.
|
||||
- 📌 Pin your favorite links to dashboard.
|
||||
- 🔍 Full text search, filter and sort for easy retrieval.
|
||||
- 📱 Responsive design and supports most modern browsers.
|
||||
- 🌓 Dark/Light mode support.
|
||||
- 🧩 Browser extension. [Star it here!](https://github.com/linkwarden/browser-extension)
|
||||
- 📸 Auto capture a screenshot, PDF, and single html file of each webpage
|
||||
- 📖 Reader view of the webpage, with the ability to highlight and annotate text
|
||||
- 🏛️ Send your webpage to Wayback Machine ([archive.org](https://archive.org)) for a snapshot (optional)
|
||||
- ✨ Local AI Tagging to automatically tag your links based on their content (optional)
|
||||
- 📂 Organize links by collection, sub-collection, name, description and multiple tags
|
||||
- 👥 Collaborate on gathering links in a collection
|
||||
- 🎛️ Customize the permissions of each member
|
||||
- 🌐 Share your collected links and preserved formats with the world
|
||||
- 📱 Native iOS and android mobile apps
|
||||
- 🔍 Full text search, filter and sort for easy retrieval
|
||||
- 🌓 Dark/Light mode support
|
||||
- 🧩 Browser extension (star it [here](https://github.com/linkwarden/browser-extension)!)
|
||||
- 🔄 Browser Synchronization (using [Floccus](https://floccus.org)!)
|
||||
- ⬇️ Import and export your bookmarks.
|
||||
- 🔐 SSO integration. (Enterprise and Self-hosted users only)
|
||||
- 📦 Installable Progressive Web App (PWA).
|
||||
- 🍎 iOS Shortcut to save Links to Linkwarden.
|
||||
- 🔑 API keys.
|
||||
- ✅ Bulk actions.
|
||||
- 👥 User administration.
|
||||
- 🌐 Support for Other Languages (i18n).
|
||||
- 📁 Image and PDF Uploads.
|
||||
- 🎨 Custom Icons for Links and Collections.
|
||||
- 🔔 RSS Feed Subscription.
|
||||
- ✨ And many more features. (Literally!)
|
||||
- ⬆️ Upload from SingleFile (check out the [guide](https://docs.linkwarden.app/Usage/upload-from-singlefile))
|
||||
- 🔐 SSO integration (Enterprise and Self-hosted users only)
|
||||
- 🍎 iOS Shortcut to save links to Linkwarden
|
||||
- 🔑 API keys
|
||||
- ✅ Bulk actions
|
||||
- 👥 User administration
|
||||
- 🌐 Support for other languages (i18n)
|
||||
- 📁 Image and PDF uploads
|
||||
- 🎨 Custom icons for links and collections
|
||||
- 🔔 RSS feed subscription
|
||||
- ✨ And many more features (literally!)
|
||||
|
||||
## Get Our Official Mobile App
|
||||
|
||||
<img src="./assets/mobile_apps.png" alt="Different screens (iPad, Pixel, and iPhone)" width="400" />
|
||||
|
||||
> [!IMPORTANT]
|
||||
> To use the app you’ll first need a Linkwarden account.
|
||||
|
||||
To create an account, you can choose between:
|
||||
|
||||
- [**Linkwarden Cloud**](https://linkwarden.app/#pricing) – instant setup, and your subscription directly supports ongoing development.
|
||||
- [**Self-hosted Linkwarden**](https://docs.linkwarden.app/self-hosting/installation) – free, but you’ll need to deploy and maintain a Linkwarden instance on a server.
|
||||
|
||||
After creating an account, download the app from your preferred store:
|
||||
|
||||
[](https://apps.apple.com/app/linkwarden/id6752550960)
|
||||
[](https://play.google.com/store/apps/details?id=app.linkwarden)
|
||||
|
||||
(To get the app as an APK outside Google Play, check out our [builds](https://github.com/linkwarden/builds) repository.)
|
||||
|
||||
## Like what we're doing? Give us a Star ⭐
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"expo": {
|
||||
"name": "Linkwarden",
|
||||
"slug": "linkwarden",
|
||||
"version": "1.0.0",
|
||||
"version": "1.0.1",
|
||||
"orientation": "portrait",
|
||||
"icon": "./assets/images/icon.png",
|
||||
"scheme": "linkwarden",
|
||||
|
||||
@@ -44,7 +44,7 @@ export default function CollectionsScreen() {
|
||||
collapsableChildren={false}
|
||||
>
|
||||
{collections.isLoading ? (
|
||||
<View className="flex justify-center h-full items-center">
|
||||
<View className="flex justify-center h-screen items-center">
|
||||
<ActivityIndicator size="large" />
|
||||
<Text className="text-base mt-2.5 text-neutral">Loading...</Text>
|
||||
</View>
|
||||
|
||||
@@ -27,8 +27,8 @@ export default function Layout() {
|
||||
Platform.OS === "ios"
|
||||
? "transparent"
|
||||
: colorScheme === "dark"
|
||||
? rawTheme["dark"]["base-100"]
|
||||
: "white",
|
||||
? rawTheme["dark"]["base-100"]
|
||||
: "white",
|
||||
},
|
||||
}}
|
||||
>
|
||||
|
||||
@@ -1,4 +1,11 @@
|
||||
import { Platform, ScrollView, StyleSheet } from "react-native";
|
||||
import {
|
||||
ActivityIndicator,
|
||||
Platform,
|
||||
ScrollView,
|
||||
StyleSheet,
|
||||
Text,
|
||||
View,
|
||||
} from "react-native";
|
||||
import React, { useEffect, useMemo, useState } from "react";
|
||||
import { useDashboardData } from "@linkwarden/router/dashboardData";
|
||||
import useAuthStore from "@/store/auth";
|
||||
@@ -53,22 +60,36 @@ export default function DashboardScreen() {
|
||||
});
|
||||
}, [dashboardSections]);
|
||||
|
||||
const [pullRefreshing, setPullRefreshing] = useState(false);
|
||||
|
||||
const onRefresh = async () => {
|
||||
setPullRefreshing(true);
|
||||
try {
|
||||
await Promise.all([
|
||||
dashboardData.refetch(),
|
||||
userData.refetch(),
|
||||
collectionsData.refetch(),
|
||||
tagsData.refetch(),
|
||||
]);
|
||||
} finally {
|
||||
setPullRefreshing(false);
|
||||
}
|
||||
};
|
||||
|
||||
if (orderedSections.length === 0 && dashboardData.isLoading)
|
||||
return (
|
||||
<View className="flex justify-center h-screen items-center bg-base-100">
|
||||
<ActivityIndicator size="large" />
|
||||
<Text className="text-base mt-2.5 text-neutral">Loading...</Text>
|
||||
</View>
|
||||
);
|
||||
|
||||
return (
|
||||
<ScrollView
|
||||
refreshControl={
|
||||
<Spinner
|
||||
refreshing={
|
||||
dashboardData.isRefetching ||
|
||||
userData.isRefetching ||
|
||||
collectionsData.isRefetching ||
|
||||
tagsData.isRefetching
|
||||
}
|
||||
onRefresh={() => {
|
||||
dashboardData.refetch();
|
||||
userData.refetch();
|
||||
collectionsData.refetch();
|
||||
tagsData.refetch();
|
||||
}}
|
||||
refreshing={pullRefreshing}
|
||||
onRefresh={onRefresh}
|
||||
progressBackgroundColor={
|
||||
rawTheme[colorScheme as ThemeName]["base-200"]
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ export default function TagsScreen() {
|
||||
collapsableChildren={false}
|
||||
>
|
||||
{tags.isLoading ? (
|
||||
<View className="flex justify-center h-full items-center">
|
||||
<View className="flex justify-center h-screen items-center">
|
||||
<ActivityIndicator size="large" />
|
||||
<Text className="text-base mt-2.5 text-neutral">Loading...</Text>
|
||||
</View>
|
||||
|
||||
@@ -20,56 +20,58 @@ export default function HomeScreen() {
|
||||
return (
|
||||
<Animated.View
|
||||
entering={SlideInDown.springify().damping(100).stiffness(300)}
|
||||
className="flex-col justify-end h-full bg-primary relative"
|
||||
className="flex-col justify-end h-full"
|
||||
>
|
||||
<View className="my-auto">
|
||||
<Image
|
||||
source={require("@/assets/images/linkwarden.png")}
|
||||
className="w-[120px] h-[120px] mx-auto"
|
||||
/>
|
||||
<Text className="text-base-100 text-4xl font-semibold mt-7 mx-auto">
|
||||
Linkwarden
|
||||
</Text>
|
||||
</View>
|
||||
<View>
|
||||
<Text className="text-base-100 text-xl text-center font-semibold mx-4 mt-3">
|
||||
Welcome to the official mobile app for Linkwarden!
|
||||
</Text>
|
||||
<View className="h-full bg-primary relative">
|
||||
<View className="my-auto">
|
||||
<Image
|
||||
source={require("@/assets/images/linkwarden.png")}
|
||||
className="w-[120px] h-[120px] mx-auto"
|
||||
/>
|
||||
<Text className="text-base-100 text-4xl font-semibold mt-7 mx-auto">
|
||||
Linkwarden
|
||||
</Text>
|
||||
</View>
|
||||
<View>
|
||||
<Text className="text-base-100 text-xl text-center font-semibold mx-4 mt-3">
|
||||
Welcome to the official mobile app for Linkwarden!
|
||||
</Text>
|
||||
|
||||
<Text className="text-base-100 text-xl text-center mx-4 mt-3">
|
||||
Expect regular improvements and new features as we continue refining
|
||||
the experience.
|
||||
</Text>
|
||||
<Text className="text-base-100 text-xl text-center mx-4 mt-3">
|
||||
Expect regular improvements and new features as we continue refining
|
||||
the experience.
|
||||
</Text>
|
||||
</View>
|
||||
<Svg
|
||||
viewBox="0 0 1440 320"
|
||||
width={Dimensions.get("screen").width}
|
||||
height={Dimensions.get("screen").width * (320 / 1440) + 2}
|
||||
>
|
||||
<Path
|
||||
fill={rawTheme[colorScheme as ThemeName]["base-100"]}
|
||||
fill-opacity="1"
|
||||
d="M0,256L48,234.7C96,213,192,171,288,176C384,181,480,235,576,266.7C672,299,768,309,864,277.3C960,245,1056,171,1152,122.7C1248,75,1344,53,1392,42.7L1440,32L1440,320L1392,320C1344,320,1248,320,1152,320C1056,320,960,320,864,320C768,320,672,320,576,320C480,320,384,320,288,320C192,320,96,320,48,320L0,320Z"
|
||||
/>
|
||||
</Svg>
|
||||
<SafeAreaView
|
||||
edges={["bottom"]}
|
||||
className="flex-col justify-end h-auto duration-100 pt-10 bg-base-100 -mt-2 pb-10 gap-4 w-full px-4"
|
||||
>
|
||||
<Button
|
||||
variant="accent"
|
||||
size="lg"
|
||||
onPress={() => router.navigate("/login")}
|
||||
>
|
||||
<Text className="text-white text-xl">Get Started</Text>
|
||||
</Button>
|
||||
<TouchableOpacity
|
||||
className="w-fit mx-auto"
|
||||
onPress={() => SheetManager.show("support-sheet")}
|
||||
>
|
||||
<Text className="text-neutral text-center w-fit">Need help?</Text>
|
||||
</TouchableOpacity>
|
||||
</SafeAreaView>
|
||||
</View>
|
||||
<Svg
|
||||
viewBox="0 0 1440 320"
|
||||
width={Dimensions.get("screen").width}
|
||||
height={Dimensions.get("screen").width * (320 / 1440) + 2}
|
||||
>
|
||||
<Path
|
||||
fill={rawTheme[colorScheme as ThemeName]["base-100"]}
|
||||
fill-opacity="1"
|
||||
d="M0,256L48,234.7C96,213,192,171,288,176C384,181,480,235,576,266.7C672,299,768,309,864,277.3C960,245,1056,171,1152,122.7C1248,75,1344,53,1392,42.7L1440,32L1440,320L1392,320C1344,320,1248,320,1152,320C1056,320,960,320,864,320C768,320,672,320,576,320C480,320,384,320,288,320C192,320,96,320,48,320L0,320Z"
|
||||
/>
|
||||
</Svg>
|
||||
<SafeAreaView
|
||||
edges={["bottom"]}
|
||||
className="flex-col justify-end h-auto duration-100 pt-10 bg-base-100 -mt-2 pb-10 gap-4 w-full px-4"
|
||||
>
|
||||
<Button
|
||||
variant="accent"
|
||||
size="lg"
|
||||
onPress={() => router.navigate("/login")}
|
||||
>
|
||||
<Text className="text-white text-xl">Get Started</Text>
|
||||
</Button>
|
||||
<TouchableOpacity
|
||||
className="w-fit mx-auto"
|
||||
onPress={() => SheetManager.show("support-sheet")}
|
||||
>
|
||||
<Text className="text-neutral text-center w-fit">Need help?</Text>
|
||||
</TouchableOpacity>
|
||||
</SafeAreaView>
|
||||
</Animated.View>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Alert, Platform, Text, View } from "react-native";
|
||||
import { Alert, Text, View } from "react-native";
|
||||
import { useRef, useState } from "react";
|
||||
import ActionSheet, { ActionSheetRef } from "react-native-actions-sheet";
|
||||
import Input from "@/components/ui/Input";
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { View, Text, Alert, Platform } from "react-native";
|
||||
import { View, Text, Alert } from "react-native";
|
||||
import { useCallback, useEffect, useMemo, useState } from "react";
|
||||
import ActionSheet, {
|
||||
FlatList,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Alert, Platform, Text, View } from "react-native";
|
||||
import { Alert, Text, View } from "react-native";
|
||||
import { useRef, useState } from "react";
|
||||
import ActionSheet, { ActionSheetRef } from "react-native-actions-sheet";
|
||||
import Input from "@/components/ui/Input";
|
||||
|
||||
@@ -28,7 +28,7 @@ export default function Links({ links, data }: Props) {
|
||||
const [promptedRefetch, setPromptedRefetch] = useState(false);
|
||||
|
||||
return data.isLoading ? (
|
||||
<View className="flex justify-center h-full items-center">
|
||||
<View className="flex justify-center h-screen items-center">
|
||||
<ActivityIndicator size="large" />
|
||||
<Text className="text-base mt-2.5 text-neutral">Loading...</Text>
|
||||
</View>
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
import { PropsWithChildren } from "react";
|
||||
import { IconSymbol } from "../ui/IconSymbol";
|
||||
import ModalBase from "../ModalBase";
|
||||
import { Text } from "react-native";
|
||||
|
||||
type Props = PropsWithChildren<{
|
||||
isVisible: boolean;
|
||||
onClose: () => void;
|
||||
}>;
|
||||
|
||||
export default function AddLink({ isVisible, onClose }: Props) {
|
||||
return (
|
||||
// <ModalBase isVisible={isVisible} onClose={onClose}>
|
||||
<Text>Hi</Text>
|
||||
// </ModalBase>
|
||||
);
|
||||
}
|
||||
@@ -20,6 +20,7 @@
|
||||
}
|
||||
},
|
||||
"production": {
|
||||
"corepack": true,
|
||||
"distribution": "store",
|
||||
"autoIncrement": true,
|
||||
"channel": "production"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@linkwarden/mobile",
|
||||
"main": "expo-router/entry",
|
||||
"version": "1.0.0",
|
||||
"version": "0.0.0",
|
||||
"scripts": {
|
||||
"start": "expo start",
|
||||
"android": "expo run:android",
|
||||
|
||||
@@ -3,13 +3,10 @@ import * as SecureStore from "expo-secure-store";
|
||||
import { router } from "expo-router";
|
||||
import { MobileAuth } from "@linkwarden/types";
|
||||
import { Alert } from "react-native";
|
||||
import * as FileSystem from "expo-file-system";
|
||||
import { queryClient } from "@/lib/queryClient";
|
||||
import { mmkvPersister } from "@/lib/queryPersister";
|
||||
import { clearCache } from "@/lib/cache";
|
||||
|
||||
const CACHE_DIR = FileSystem.documentDirectory + "archivedData/";
|
||||
|
||||
type AuthStore = {
|
||||
auth: MobileAuth;
|
||||
signIn: (
|
||||
@@ -78,31 +75,42 @@ const useAuthStore = create<AuthStore>((set) => ({
|
||||
}
|
||||
});
|
||||
} else {
|
||||
await fetch(instance + "/api/v1/session", {
|
||||
method: "POST",
|
||||
body: JSON.stringify({ username, password }),
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
}).then(async (res) => {
|
||||
try {
|
||||
const res = await Promise.race([
|
||||
fetch(`${instance}/api/v1/session`, {
|
||||
method: "POST",
|
||||
body: JSON.stringify({ username, password }),
|
||||
headers: { "Content-Type": "application/json" },
|
||||
}),
|
||||
new Promise<Response>((_, reject) =>
|
||||
setTimeout(() => reject(new Error("TIMEOUT")), 30000)
|
||||
),
|
||||
]);
|
||||
|
||||
if (res.ok) {
|
||||
const data = await res.json();
|
||||
const session = (data as any).response.token;
|
||||
|
||||
await SecureStore.setItemAsync("TOKEN", session);
|
||||
await SecureStore.setItemAsync("INSTANCE", instance);
|
||||
set({
|
||||
auth: {
|
||||
session,
|
||||
instance,
|
||||
status: "authenticated",
|
||||
},
|
||||
});
|
||||
|
||||
set({ auth: { session, instance, status: "authenticated" } });
|
||||
router.replace("/(tabs)/dashboard");
|
||||
} else {
|
||||
Alert.alert("Error", "Invalid credentials");
|
||||
}
|
||||
});
|
||||
} catch (err: any) {
|
||||
if (err?.message === "TIMEOUT") {
|
||||
Alert.alert(
|
||||
"Request timed out",
|
||||
"Unable to reach the server in time. Please check your network configuration and try again."
|
||||
);
|
||||
} else {
|
||||
Alert.alert(
|
||||
"Network error",
|
||||
"Could not connect to the server. Please check your network configuration and try again."
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
signOut: async () => {
|
||||
|
||||
@@ -15,13 +15,13 @@ const useDataStore = create<DataStore>((set, get) => ({
|
||||
hasShareIntent: false,
|
||||
url: "",
|
||||
},
|
||||
theme: "light",
|
||||
theme: "system",
|
||||
preferredBrowser: "app",
|
||||
},
|
||||
setData: async () => {
|
||||
const dataString = JSON.parse((await AsyncStorage.getItem("data")) || "{}");
|
||||
|
||||
colorScheme.set(dataString.theme || "light");
|
||||
colorScheme.set(dataString.theme || "system");
|
||||
|
||||
if (dataString)
|
||||
set((state) => ({ data: { ...state.data, ...dataString } }));
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@linkwarden/web",
|
||||
"version": "v2.13.4",
|
||||
"version": "v2.13.5",
|
||||
"main": "index.js",
|
||||
"repository": "https://github.com/linkwarden/linkwarden.git",
|
||||
"author": "Daniel31X13 <daniel31x13@gmail.com>",
|
||||
@@ -59,13 +59,13 @@
|
||||
"jszip": "^3.10.1",
|
||||
"lucide-react": "^0.511.0",
|
||||
"micro": "^10.0.1",
|
||||
"next": "14.2.35",
|
||||
"next": "15.5.10",
|
||||
"next-auth": "^4.22.1",
|
||||
"next-i18next": "^15.3.0",
|
||||
"node-fetch": "^2.7.0",
|
||||
"nodemailer": "^7.0.11",
|
||||
"papaparse": "^5.5.3",
|
||||
"playwright": "1.57.0",
|
||||
"playwright": "1.58.2",
|
||||
"react": "18.3.1",
|
||||
"react-colorful": "^5.6.1",
|
||||
"react-dom": "18.3.1",
|
||||
|
||||
@@ -5,7 +5,7 @@ import {
|
||||
predefinedTagsPrompt,
|
||||
} from "./prompts";
|
||||
import { prisma } from "@linkwarden/prisma";
|
||||
import { generateObject } from "ai";
|
||||
import { generateText } from "ai";
|
||||
import { LanguageModelV2 } from "@ai-sdk/provider";
|
||||
import {
|
||||
createOpenAICompatible,
|
||||
@@ -13,7 +13,6 @@ import {
|
||||
} from "@ai-sdk/openai-compatible";
|
||||
import { perplexity } from "@ai-sdk/perplexity";
|
||||
import { azure } from "@ai-sdk/azure";
|
||||
import { z } from "zod";
|
||||
import { anthropic } from "@ai-sdk/anthropic";
|
||||
import { createOpenRouter } from "@openrouter/ai-sdk-provider";
|
||||
import { createOllama } from "ollama-ai-provider-v2";
|
||||
@@ -127,15 +126,13 @@ export default async function autoTagLink(
|
||||
return console.log("No predefined tags to auto tag for link: ", link.url);
|
||||
}
|
||||
|
||||
const { object } = await generateObject({
|
||||
const { text } = await generateText({
|
||||
model: getAIModel(),
|
||||
prompt: prompt,
|
||||
output: "array",
|
||||
schema: z.string(),
|
||||
});
|
||||
|
||||
try {
|
||||
let tags = object;
|
||||
let tags: string[] = JSON.parse(text);
|
||||
|
||||
if (!tags || tags.length === 0) {
|
||||
return;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
export const generateTagsPrompt = (text: string) => `
|
||||
You are a Bookmark Manager that should extract relevant tags from the following text, here are the rules:
|
||||
- The final output should be only an array of tags (like ["tag1", "tag2", "...").
|
||||
- The final output should be only an array of tags (like ["tag1", "tag2", "..."]).
|
||||
- The tags should be in the language of the text.
|
||||
- The maximum number of tags is 5.
|
||||
- Each tag should be maximum one to two words.
|
||||
@@ -15,7 +15,7 @@ export const predefinedTagsPrompt = (text: string, tags: string[]) => `
|
||||
You are a Bookmark Manager that should match the following text with predefined tags.
|
||||
Predefined tags: ${tags.join(", ")}.
|
||||
Here are the rules:
|
||||
- The final output should be only an array of tags (like ["tag1", "tag2", "...").
|
||||
- The final output should be only an array of tags (like ["tag1", "tag2", "..."]).
|
||||
- The tags should be in the language of the text.
|
||||
- The maximum number of tags is 5.
|
||||
- Each tag should be maximum one to two words.
|
||||
@@ -30,7 +30,7 @@ export const existingTagsPrompt = (text: string, tags: string[]) => `
|
||||
You are a Bookmark Manager that should match the following text with existing tags.
|
||||
The existing tags are sorted from most used to least used: ${tags.join(", ")}.
|
||||
Here are the rules:
|
||||
- The final output should be only an array of tags (like ["tag1", "tag2", "...").
|
||||
- The final output should be only an array of tags (like ["tag1", "tag2", "..."]).
|
||||
- The tags should be in the language of the text.
|
||||
- The maximum number of tags is 5.
|
||||
- Each tag should be maximum one to two words.
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
"meilisearch": "^0.48.2",
|
||||
"node-fetch": "^2.7.0",
|
||||
"ollama-ai-provider-v2": "^1.5.5",
|
||||
"playwright": "^1.55.0",
|
||||
"playwright": "^1.58.0",
|
||||
"rss-parser": "^3.13.0",
|
||||
"socks-proxy-agent": "^8.0.2",
|
||||
"tsx": "^4.19.3",
|
||||
|
||||
BIN
assets/app_store.png
Normal file
BIN
assets/app_store.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.6 KiB |
BIN
assets/google_play.png
Normal file
BIN
assets/google_play.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.3 KiB |
BIN
assets/home.png
BIN
assets/home.png
Binary file not shown.
|
Before Width: | Height: | Size: 776 KiB After Width: | Height: | Size: 606 KiB |
BIN
assets/mobile_apps.png
Normal file
BIN
assets/mobile_apps.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 112 KiB |
@@ -9,7 +9,7 @@
|
||||
"@linkwarden/types": "*",
|
||||
"@tanstack/react-query": "^5.51.15",
|
||||
"@tanstack/react-query-devtools": "^5.51.15",
|
||||
"next": "14.2.35",
|
||||
"next": "15.5.10",
|
||||
"next-auth": "^4.22.1",
|
||||
"next-i18next": "^15.3.0",
|
||||
"react-hot-toast": "^2.4.1"
|
||||
|
||||
317
yarn.lock
317
yarn.lock
@@ -3909,11 +3909,11 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"@isaacs/brace-expansion@npm:^5.0.0":
|
||||
version: 5.0.0
|
||||
resolution: "@isaacs/brace-expansion@npm:5.0.0"
|
||||
version: 5.0.1
|
||||
resolution: "@isaacs/brace-expansion@npm:5.0.1"
|
||||
dependencies:
|
||||
"@isaacs/balanced-match": "npm:^4.0.1"
|
||||
checksum: 10c0/b4d4812f4be53afc2c5b6c545001ff7a4659af68d4484804e9d514e183d20269bb81def8682c01a22b17c4d6aed14292c8494f7d2ac664e547101c1a905aa977
|
||||
checksum: 10c0/e5d67c7bbf1f17b88132a35bc638af306d48acbb72810d48fa6e6edd8ab375854773108e8bf70f021f7ef6a8273455a6d1f0c3b5aa2aff06ce7894049ab77fb8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -4855,7 +4855,7 @@ __metadata:
|
||||
"@linkwarden/types": "npm:*"
|
||||
"@tanstack/react-query": "npm:^5.51.15"
|
||||
"@tanstack/react-query-devtools": "npm:^5.51.15"
|
||||
next: "npm:14.2.35"
|
||||
next: "npm:15.5.10"
|
||||
next-auth: "npm:^4.22.1"
|
||||
next-i18next: "npm:^15.3.0"
|
||||
react-hot-toast: "npm:^2.4.1"
|
||||
@@ -4937,13 +4937,13 @@ __metadata:
|
||||
jszip: "npm:^3.10.1"
|
||||
lucide-react: "npm:^0.511.0"
|
||||
micro: "npm:^10.0.1"
|
||||
next: "npm:14.2.35"
|
||||
next: "npm:15.5.10"
|
||||
next-auth: "npm:^4.22.1"
|
||||
next-i18next: "npm:^15.3.0"
|
||||
node-fetch: "npm:^2.7.0"
|
||||
nodemailer: "npm:^7.0.11"
|
||||
papaparse: "npm:^5.5.3"
|
||||
playwright: "npm:1.57.0"
|
||||
playwright: "npm:1.58.0"
|
||||
postcss: "npm:^8.4.26"
|
||||
prettier: "npm:3.1.1"
|
||||
react: "npm:18.3.1"
|
||||
@@ -4998,7 +4998,7 @@ __metadata:
|
||||
node-fetch: "npm:^2.7.0"
|
||||
nodemon: "npm:^3.1.9"
|
||||
ollama-ai-provider-v2: "npm:^1.5.5"
|
||||
playwright: "npm:^1.55.0"
|
||||
playwright: "npm:^1.58.0"
|
||||
rss-parser: "npm:^3.13.0"
|
||||
socks-proxy-agent: "npm:^8.0.2"
|
||||
tsx: "npm:^4.19.3"
|
||||
@@ -5065,10 +5065,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/env@npm:14.2.35":
|
||||
version: 14.2.35
|
||||
resolution: "@next/env@npm:14.2.35"
|
||||
checksum: 10c0/e042f1771f91d4f69b296aa7f633df216464df5844e5e1ea46105b76b2e519093dff4b25df9a24576916811b65a7e896202b2540649af5aa54bd7f8b19d7b6ab
|
||||
"@next/env@npm:15.5.10":
|
||||
version: 15.5.10
|
||||
resolution: "@next/env@npm:15.5.10"
|
||||
checksum: 10c0/fb26c299ff388a3a0b2d14379616e3e59fe7960002e5aa67be4d195a377b9803fb93dd90067a5eb7d889d6f437aff091171701eec0e8d201666160269dda4e95
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -5081,65 +5081,58 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-darwin-arm64@npm:14.2.33":
|
||||
version: 14.2.33
|
||||
resolution: "@next/swc-darwin-arm64@npm:14.2.33"
|
||||
"@next/swc-darwin-arm64@npm:15.5.7":
|
||||
version: 15.5.7
|
||||
resolution: "@next/swc-darwin-arm64@npm:15.5.7"
|
||||
conditions: os=darwin & cpu=arm64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-darwin-x64@npm:14.2.33":
|
||||
version: 14.2.33
|
||||
resolution: "@next/swc-darwin-x64@npm:14.2.33"
|
||||
"@next/swc-darwin-x64@npm:15.5.7":
|
||||
version: 15.5.7
|
||||
resolution: "@next/swc-darwin-x64@npm:15.5.7"
|
||||
conditions: os=darwin & cpu=x64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-linux-arm64-gnu@npm:14.2.33":
|
||||
version: 14.2.33
|
||||
resolution: "@next/swc-linux-arm64-gnu@npm:14.2.33"
|
||||
"@next/swc-linux-arm64-gnu@npm:15.5.7":
|
||||
version: 15.5.7
|
||||
resolution: "@next/swc-linux-arm64-gnu@npm:15.5.7"
|
||||
conditions: os=linux & cpu=arm64 & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-linux-arm64-musl@npm:14.2.33":
|
||||
version: 14.2.33
|
||||
resolution: "@next/swc-linux-arm64-musl@npm:14.2.33"
|
||||
"@next/swc-linux-arm64-musl@npm:15.5.7":
|
||||
version: 15.5.7
|
||||
resolution: "@next/swc-linux-arm64-musl@npm:15.5.7"
|
||||
conditions: os=linux & cpu=arm64 & libc=musl
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-linux-x64-gnu@npm:14.2.33":
|
||||
version: 14.2.33
|
||||
resolution: "@next/swc-linux-x64-gnu@npm:14.2.33"
|
||||
"@next/swc-linux-x64-gnu@npm:15.5.7":
|
||||
version: 15.5.7
|
||||
resolution: "@next/swc-linux-x64-gnu@npm:15.5.7"
|
||||
conditions: os=linux & cpu=x64 & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-linux-x64-musl@npm:14.2.33":
|
||||
version: 14.2.33
|
||||
resolution: "@next/swc-linux-x64-musl@npm:14.2.33"
|
||||
"@next/swc-linux-x64-musl@npm:15.5.7":
|
||||
version: 15.5.7
|
||||
resolution: "@next/swc-linux-x64-musl@npm:15.5.7"
|
||||
conditions: os=linux & cpu=x64 & libc=musl
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-win32-arm64-msvc@npm:14.2.33":
|
||||
version: 14.2.33
|
||||
resolution: "@next/swc-win32-arm64-msvc@npm:14.2.33"
|
||||
"@next/swc-win32-arm64-msvc@npm:15.5.7":
|
||||
version: 15.5.7
|
||||
resolution: "@next/swc-win32-arm64-msvc@npm:15.5.7"
|
||||
conditions: os=win32 & cpu=arm64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-win32-ia32-msvc@npm:14.2.33":
|
||||
version: 14.2.33
|
||||
resolution: "@next/swc-win32-ia32-msvc@npm:14.2.33"
|
||||
conditions: os=win32 & cpu=ia32
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-win32-x64-msvc@npm:14.2.33":
|
||||
version: 14.2.33
|
||||
resolution: "@next/swc-win32-x64-msvc@npm:14.2.33"
|
||||
"@next/swc-win32-x64-msvc@npm:15.5.7":
|
||||
version: 15.5.7
|
||||
resolution: "@next/swc-win32-x64-msvc@npm:15.5.7"
|
||||
conditions: os=win32 & cpu=x64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
@@ -7014,14 +7007,15 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"@smithy/config-resolver@npm:^2.0.1":
|
||||
version: 2.0.1
|
||||
resolution: "@smithy/config-resolver@npm:2.0.1"
|
||||
version: 2.2.0
|
||||
resolution: "@smithy/config-resolver@npm:2.2.0"
|
||||
dependencies:
|
||||
"@smithy/types": "npm:^2.0.2"
|
||||
"@smithy/util-config-provider": "npm:^2.0.0"
|
||||
"@smithy/util-middleware": "npm:^2.0.0"
|
||||
tslib: "npm:^2.5.0"
|
||||
checksum: 10c0/c58266a9b00486d84b9e7e14cba72fd32b14860d028f7322fe197dfed705798ee8bef22f069a7dacbd273894ff64d7afbc60a585792f4345e1e3fd17ac52a90a
|
||||
"@smithy/node-config-provider": "npm:^2.3.0"
|
||||
"@smithy/types": "npm:^2.12.0"
|
||||
"@smithy/util-config-provider": "npm:^2.3.0"
|
||||
"@smithy/util-middleware": "npm:^2.2.0"
|
||||
tslib: "npm:^2.6.2"
|
||||
checksum: 10c0/977c3bd383b72e0ab25238515fddfd9138855b7c24247e19c5d1490b6a61234bd737956f770539508d7f4c07a54efb917923e5642abf15c1803df43fe5079859
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -7395,6 +7389,18 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@smithy/node-config-provider@npm:^2.3.0":
|
||||
version: 2.3.0
|
||||
resolution: "@smithy/node-config-provider@npm:2.3.0"
|
||||
dependencies:
|
||||
"@smithy/property-provider": "npm:^2.2.0"
|
||||
"@smithy/shared-ini-file-loader": "npm:^2.4.0"
|
||||
"@smithy/types": "npm:^2.12.0"
|
||||
tslib: "npm:^2.6.2"
|
||||
checksum: 10c0/92b87bcb8e5fd38f6a2b0f3512fc3f2439bbf9270ddeaaeb32331716c283907ae315bb9de25b6facb4377056c3ae7aaac66f2a7739632207654a8aad877f59f7
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@smithy/node-config-provider@npm:^4.3.5":
|
||||
version: 4.3.5
|
||||
resolution: "@smithy/node-config-provider@npm:4.3.5"
|
||||
@@ -7443,6 +7449,16 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@smithy/property-provider@npm:^2.2.0":
|
||||
version: 2.2.0
|
||||
resolution: "@smithy/property-provider@npm:2.2.0"
|
||||
dependencies:
|
||||
"@smithy/types": "npm:^2.12.0"
|
||||
tslib: "npm:^2.6.2"
|
||||
checksum: 10c0/023b6c29bd2aa48eefce8329611719097efdd271a8207f6b01624c6f82245b56d5d81741a4f64ad56a6b240352f6d083af85232420cf1fd92ae0f08a338976a0
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@smithy/property-provider@npm:^4.2.5":
|
||||
version: 4.2.5
|
||||
resolution: "@smithy/property-provider@npm:4.2.5"
|
||||
@@ -7541,6 +7557,16 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@smithy/shared-ini-file-loader@npm:^2.4.0":
|
||||
version: 2.4.0
|
||||
resolution: "@smithy/shared-ini-file-loader@npm:2.4.0"
|
||||
dependencies:
|
||||
"@smithy/types": "npm:^2.12.0"
|
||||
tslib: "npm:^2.6.2"
|
||||
checksum: 10c0/890fe084a616cb5d2d7aa5e1b7c0ab585b744ad44fb2e2c5042747bc44aea9bac72f62448a78198a3d5eba4281ad79d5c44ec929b24b70263a2fc02e268c8542
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@smithy/shared-ini-file-loader@npm:^4.4.0":
|
||||
version: 4.4.0
|
||||
resolution: "@smithy/shared-ini-file-loader@npm:4.4.0"
|
||||
@@ -7619,6 +7645,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@smithy/types@npm:^2.12.0":
|
||||
version: 2.12.0
|
||||
resolution: "@smithy/types@npm:2.12.0"
|
||||
dependencies:
|
||||
tslib: "npm:^2.6.2"
|
||||
checksum: 10c0/3530ba5b4f4e52a4028679f73e133af928cf6ea22a16d29669b8c67ea540ed46ab15dc6d391598fbdfd476884cdc57881c480168e2dbe7c5bb007f5afad01531
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@smithy/types@npm:^4.9.0":
|
||||
version: 4.9.0
|
||||
resolution: "@smithy/types@npm:4.9.0"
|
||||
@@ -7736,6 +7771,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@smithy/util-config-provider@npm:^2.3.0":
|
||||
version: 2.3.0
|
||||
resolution: "@smithy/util-config-provider@npm:2.3.0"
|
||||
dependencies:
|
||||
tslib: "npm:^2.6.2"
|
||||
checksum: 10c0/cb3021c4b9711ed3849a2268f1ee76febcb0a74bfc3fb9f5bf311c11e862490fb95f42892b65bd8e2dd7a4fe18e6522d22a1f73b13ec1c6ccbdb518754669e4c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@smithy/util-config-provider@npm:^4.2.0":
|
||||
version: 4.2.0
|
||||
resolution: "@smithy/util-config-provider@npm:4.2.0"
|
||||
@@ -7836,6 +7880,16 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@smithy/util-middleware@npm:^2.2.0":
|
||||
version: 2.2.0
|
||||
resolution: "@smithy/util-middleware@npm:2.2.0"
|
||||
dependencies:
|
||||
"@smithy/types": "npm:^2.12.0"
|
||||
tslib: "npm:^2.6.2"
|
||||
checksum: 10c0/30227e6c561469cec52985bf5997b65bbe35e565a77d9e775af9d673ef6d4a297a9ad24cb54c076565d62b60a68750f0a34eeab008c02f66c979816bf629cf39
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@smithy/util-middleware@npm:^4.2.5":
|
||||
version: 4.2.5
|
||||
resolution: "@smithy/util-middleware@npm:4.2.5"
|
||||
@@ -7971,20 +8025,12 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/counter@npm:^0.1.3":
|
||||
version: 0.1.3
|
||||
resolution: "@swc/counter@npm:0.1.3"
|
||||
checksum: 10c0/8424f60f6bf8694cfd2a9bca45845bce29f26105cda8cf19cdb9fd3e78dc6338699e4db77a89ae449260bafa1cc6bec307e81e7fb96dbf7dcfce0eea55151356
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/helpers@npm:0.5.5":
|
||||
version: 0.5.5
|
||||
resolution: "@swc/helpers@npm:0.5.5"
|
||||
"@swc/helpers@npm:0.5.15":
|
||||
version: 0.5.15
|
||||
resolution: "@swc/helpers@npm:0.5.15"
|
||||
dependencies:
|
||||
"@swc/counter": "npm:^0.1.3"
|
||||
tslib: "npm:^2.4.0"
|
||||
checksum: 10c0/21a9b9cfe7e00865f9c9f3eb4c1cc5b397143464f7abee76a2c5366e591e06b0155b5aac93fe8269ef8d548df253f6fd931e9ddfc0fd12efd405f90f45506e7d
|
||||
tslib: "npm:^2.8.0"
|
||||
checksum: 10c0/33002f74f6f885f04c132960835fdfc474186983ea567606db62e86acd0680ca82f34647e8e610f4e1e422d1c16fce729dde22cd3b797ab1fd9061a825dabca4
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -9542,15 +9588,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"busboy@npm:1.6.0":
|
||||
version: 1.6.0
|
||||
resolution: "busboy@npm:1.6.0"
|
||||
dependencies:
|
||||
streamsearch: "npm:^1.1.0"
|
||||
checksum: 10c0/fa7e836a2b82699b6e074393428b91ae579d4f9e21f5ac468e1b459a244341d722d2d22d10920cdd849743dbece6dca11d72de939fb75a7448825cf2babfba1f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"bytes@npm:3.1.0":
|
||||
version: 3.1.0
|
||||
resolution: "bytes@npm:3.1.0"
|
||||
@@ -13116,7 +13153,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9":
|
||||
"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9":
|
||||
version: 4.2.11
|
||||
resolution: "graceful-fs@npm:4.2.11"
|
||||
checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2
|
||||
@@ -15395,9 +15432,9 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"lodash@npm:^4.17.19, lodash@npm:^4.17.21":
|
||||
version: 4.17.21
|
||||
resolution: "lodash@npm:4.17.21"
|
||||
checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c
|
||||
version: 4.17.23
|
||||
resolution: "lodash@npm:4.17.23"
|
||||
checksum: 10c0/1264a90469f5bb95d4739c43eb6277d15b6d9e186df4ac68c3620443160fc669e2f14c11e7d8b2ccf078b81d06147c01a8ccced9aab9f9f63d50dcf8cace6bf6
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -16239,31 +16276,30 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"next@npm:14.2.35":
|
||||
version: 14.2.35
|
||||
resolution: "next@npm:14.2.35"
|
||||
"next@npm:15.5.10":
|
||||
version: 15.5.10
|
||||
resolution: "next@npm:15.5.10"
|
||||
dependencies:
|
||||
"@next/env": "npm:14.2.35"
|
||||
"@next/swc-darwin-arm64": "npm:14.2.33"
|
||||
"@next/swc-darwin-x64": "npm:14.2.33"
|
||||
"@next/swc-linux-arm64-gnu": "npm:14.2.33"
|
||||
"@next/swc-linux-arm64-musl": "npm:14.2.33"
|
||||
"@next/swc-linux-x64-gnu": "npm:14.2.33"
|
||||
"@next/swc-linux-x64-musl": "npm:14.2.33"
|
||||
"@next/swc-win32-arm64-msvc": "npm:14.2.33"
|
||||
"@next/swc-win32-ia32-msvc": "npm:14.2.33"
|
||||
"@next/swc-win32-x64-msvc": "npm:14.2.33"
|
||||
"@swc/helpers": "npm:0.5.5"
|
||||
busboy: "npm:1.6.0"
|
||||
"@next/env": "npm:15.5.10"
|
||||
"@next/swc-darwin-arm64": "npm:15.5.7"
|
||||
"@next/swc-darwin-x64": "npm:15.5.7"
|
||||
"@next/swc-linux-arm64-gnu": "npm:15.5.7"
|
||||
"@next/swc-linux-arm64-musl": "npm:15.5.7"
|
||||
"@next/swc-linux-x64-gnu": "npm:15.5.7"
|
||||
"@next/swc-linux-x64-musl": "npm:15.5.7"
|
||||
"@next/swc-win32-arm64-msvc": "npm:15.5.7"
|
||||
"@next/swc-win32-x64-msvc": "npm:15.5.7"
|
||||
"@swc/helpers": "npm:0.5.15"
|
||||
caniuse-lite: "npm:^1.0.30001579"
|
||||
graceful-fs: "npm:^4.2.11"
|
||||
postcss: "npm:8.4.31"
|
||||
styled-jsx: "npm:5.1.1"
|
||||
sharp: "npm:^0.34.3"
|
||||
styled-jsx: "npm:5.1.6"
|
||||
peerDependencies:
|
||||
"@opentelemetry/api": ^1.1.0
|
||||
"@playwright/test": ^1.41.2
|
||||
react: ^18.2.0
|
||||
react-dom: ^18.2.0
|
||||
"@playwright/test": ^1.51.1
|
||||
babel-plugin-react-compiler: "*"
|
||||
react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
|
||||
react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
|
||||
sass: ^1.3.0
|
||||
dependenciesMeta:
|
||||
"@next/swc-darwin-arm64":
|
||||
@@ -16280,20 +16316,22 @@ __metadata:
|
||||
optional: true
|
||||
"@next/swc-win32-arm64-msvc":
|
||||
optional: true
|
||||
"@next/swc-win32-ia32-msvc":
|
||||
optional: true
|
||||
"@next/swc-win32-x64-msvc":
|
||||
optional: true
|
||||
sharp:
|
||||
optional: true
|
||||
peerDependenciesMeta:
|
||||
"@opentelemetry/api":
|
||||
optional: true
|
||||
"@playwright/test":
|
||||
optional: true
|
||||
babel-plugin-react-compiler:
|
||||
optional: true
|
||||
sass:
|
||||
optional: true
|
||||
bin:
|
||||
next: dist/bin/next
|
||||
checksum: 10c0/5b1eadd554cd2cb1f030335d71a9363d16d86453f60a2331333887804c8b4b04a16fcb1ddb58229b792b6c365dbd0fafd9ccacd727c85134101a124bd6b4c06a
|
||||
checksum: 10c0/ebf358cfc13e856ac2d60f6b1eb166560c541796d3422d6719712c0e8038626407f6075cb0d2805d9d6392404a5b0e63e501515982d78d7e934b721ea9753b17
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -17241,6 +17279,24 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"playwright-core@npm:1.58.0":
|
||||
version: 1.58.0
|
||||
resolution: "playwright-core@npm:1.58.0"
|
||||
bin:
|
||||
playwright-core: cli.js
|
||||
checksum: 10c0/72f59ffed79357f3042ba8ebced54d63a1bdb01e4422e1d3238415ac1ee25254d4a1809f77c562045fc25805e71ad3de8e8ac0e3521e48b9c6f108cd5419ec48
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"playwright-core@npm:1.58.2":
|
||||
version: 1.58.2
|
||||
resolution: "playwright-core@npm:1.58.2"
|
||||
bin:
|
||||
playwright-core: cli.js
|
||||
checksum: 10c0/5aa15b2b764e6ffe738293a09081a6f7023847a0dbf4cd05fe10eed2e25450d321baf7482f938f2d2eb330291e197fa23e57b29a5b552b89927ceb791266225b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"playwright@npm:1.55.0":
|
||||
version: 1.55.0
|
||||
resolution: "playwright@npm:1.55.0"
|
||||
@@ -17256,7 +17312,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"playwright@npm:1.57.0, playwright@npm:^1.55.0":
|
||||
"playwright@npm:1.57.0":
|
||||
version: 1.57.0
|
||||
resolution: "playwright@npm:1.57.0"
|
||||
dependencies:
|
||||
@@ -17271,6 +17327,36 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"playwright@npm:1.58.0":
|
||||
version: 1.58.0
|
||||
resolution: "playwright@npm:1.58.0"
|
||||
dependencies:
|
||||
fsevents: "npm:2.3.2"
|
||||
playwright-core: "npm:1.58.0"
|
||||
dependenciesMeta:
|
||||
fsevents:
|
||||
optional: true
|
||||
bin:
|
||||
playwright: cli.js
|
||||
checksum: 10c0/f0565966a485f0bf0748897c19aa403f97c4c83bb936b7dfc6b2f1c056d4befb24810f451e4b8cb760db3733bfef1cf7f00b369664637e48befd6fe9e42f541a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"playwright@npm:^1.58.0":
|
||||
version: 1.58.2
|
||||
resolution: "playwright@npm:1.58.2"
|
||||
dependencies:
|
||||
fsevents: "npm:2.3.2"
|
||||
playwright-core: "npm:1.58.2"
|
||||
dependenciesMeta:
|
||||
fsevents:
|
||||
optional: true
|
||||
bin:
|
||||
playwright: cli.js
|
||||
checksum: 10c0/d060d9b7cc124bd8b5dffebaab5e84f6b34654a553758fe7b19cc598dfbee93f6ecfbdc1832b40a6380ae04eade86ef3285ba03aa0b136799e83402246dc0727
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"plist@npm:^3.0.5":
|
||||
version: 3.1.0
|
||||
resolution: "plist@npm:3.1.0"
|
||||
@@ -17625,11 +17711,11 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"qs@npm:^6.11.0":
|
||||
version: 6.14.0
|
||||
resolution: "qs@npm:6.14.0"
|
||||
version: 6.15.0
|
||||
resolution: "qs@npm:6.15.0"
|
||||
dependencies:
|
||||
side-channel: "npm:^1.1.0"
|
||||
checksum: 10c0/8ea5d91bf34f440598ee389d4a7d95820e3b837d3fd9f433871f7924801becaa0cd3b3b4628d49a7784d06a8aea9bc4554d2b6d8d584e2d221dc06238a42909c
|
||||
checksum: 10c0/ff341078a78a991d8a48b4524d52949211447b4b1ad907f489cac0770cbc346a28e47304455c0320e5fb000f8762d64b03331e3b71865f663bf351bcba8cdb4b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -19170,7 +19256,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"sharp@npm:^0.34.5":
|
||||
"sharp@npm:^0.34.3, sharp@npm:^0.34.5":
|
||||
version: 0.34.5
|
||||
resolution: "sharp@npm:0.34.5"
|
||||
dependencies:
|
||||
@@ -19674,13 +19760,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"streamsearch@npm:^1.1.0":
|
||||
version: 1.1.0
|
||||
resolution: "streamsearch@npm:1.1.0"
|
||||
checksum: 10c0/fbd9aecc2621364384d157f7e59426f4bfd385e8b424b5aaa79c83a6f5a1c8fd2e4e3289e95de1eb3511cb96bb333d6281a9919fafce760e4edb35b2cd2facab
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"strict-uri-encode@npm:^2.0.0":
|
||||
version: 2.0.0
|
||||
resolution: "strict-uri-encode@npm:2.0.0"
|
||||
@@ -19911,19 +19990,19 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"styled-jsx@npm:5.1.1":
|
||||
version: 5.1.1
|
||||
resolution: "styled-jsx@npm:5.1.1"
|
||||
"styled-jsx@npm:5.1.6":
|
||||
version: 5.1.6
|
||||
resolution: "styled-jsx@npm:5.1.6"
|
||||
dependencies:
|
||||
client-only: "npm:0.0.1"
|
||||
peerDependencies:
|
||||
react: ">= 16.8.0 || 17.x.x || ^18.0.0-0"
|
||||
react: ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0"
|
||||
peerDependenciesMeta:
|
||||
"@babel/core":
|
||||
optional: true
|
||||
babel-plugin-macros:
|
||||
optional: true
|
||||
checksum: 10c0/42655cdadfa5388f8a48bb282d6b450df7d7b8cf066ac37038bd0499d3c9f084815ebd9ff9dfa12a218fd4441338851db79603498d7557207009c1cf4d609835
|
||||
checksum: 10c0/ace50e7ea5ae5ae6a3b65a50994c51fca6ae7df9c7ecfd0104c36be0b4b3a9c5c1a2374d16e2a11e256d0b20be6d47256d768ecb4f91ab390f60752a075780f5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -20414,7 +20493,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tslib@npm:^2.0.1, tslib@npm:^2.6.2":
|
||||
"tslib@npm:^2.0.1, tslib@npm:^2.6.2, tslib@npm:^2.8.0":
|
||||
version: 2.8.1
|
||||
resolution: "tslib@npm:2.8.1"
|
||||
checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62
|
||||
@@ -20582,9 +20661,9 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"undici@npm:^6.18.2":
|
||||
version: 6.21.2
|
||||
resolution: "undici@npm:6.21.2"
|
||||
checksum: 10c0/799bbc02b77dda9b6b12d56d2620a3a4d4cf087908d6a548acc3ce32f21b5c27467f75c2c4b30fab281daf341210be3d685e8fe99854288de541715ae5735027
|
||||
version: 6.23.0
|
||||
resolution: "undici@npm:6.23.0"
|
||||
checksum: 10c0/d846b3fdfd05aa6081ba1eab5db6bbc21b283042c7a43722b86d1ee2bf749d7c990ceac0c809f9a07ffd88b1b0f4c0f548a8362c035088cb1997d63abdda499c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
|
||||
Reference in New Issue
Block a user