├── server.ts ├── packages ├── core │ ├── .npmignore │ ├── tsconfig.json │ ├── index.ts │ ├── package.json │ ├── platforms │ │ ├── reddit.ts │ │ ├── hackernews.ts │ │ ├── youtube.ts │ │ ├── x.ts │ │ ├── github.ts │ │ ├── pinterest.ts │ │ ├── google.ts │ │ └── tiktok.ts │ └── README.md └── server │ ├── tsconfig.json │ ├── endpoints.ts │ ├── package.json │ └── index.ts ├── .env.example ├── .prettierrc ├── tsconfig.json ├── .eslintrc ├── .gitignore ├── package.json ├── LICENSE ├── README.md └── yarn.lock /server.ts: -------------------------------------------------------------------------------- 1 | import 'fastify'; 2 | import './packages/server/index.js'; 3 | -------------------------------------------------------------------------------- /packages/core/.npmignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.log 3 | ./index.ts 4 | ./platforms/ -------------------------------------------------------------------------------- /packages/server/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "dist" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | ## Trendgetter API 2 | # *Keep your API keys secret!* 3 | 4 | HOST= 5 | PORT=3000 6 | 7 | ############################### 8 | ## YouTube 9 | ############################### 10 | YOUTUBE_API_KEY= -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 120, 3 | "trailingComma": "all", 4 | "useTabs": false, 5 | "tabWidth": 2, 6 | "semi": true, 7 | "singleQuote": true, 8 | "bracketSpacing": true, 9 | "arrowParens": "always", 10 | "endOfLine": "lf" 11 | } 12 | -------------------------------------------------------------------------------- /packages/core/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "dist", 5 | "declaration": true 6 | }, 7 | "include": ["package.json", "index.ts", "platforms/**/*"], 8 | "exclude": ["node_modules", "dist"] 9 | } 10 | -------------------------------------------------------------------------------- /packages/core/index.ts: -------------------------------------------------------------------------------- 1 | export * from './platforms/github.js'; 2 | export * from './platforms/google.js'; 3 | export * from './platforms/hackernews.js'; 4 | export * from './platforms/pinterest.js'; 5 | export * from './platforms/reddit.js'; 6 | export * from './platforms/tiktok.js'; 7 | export * from './platforms/youtube.js'; 8 | export * from './platforms/x.js'; 9 | -------------------------------------------------------------------------------- /packages/server/endpoints.ts: -------------------------------------------------------------------------------- 1 | import * as trendgetter from '@trendgetter/core'; 2 | 3 | export const ENDPOINTS = { 4 | 'github/repos': trendgetter.github.repos, 5 | 'google/topics': trendgetter.google.topics, 6 | 'hackernews/posts': trendgetter.hackernews.posts, 7 | 'pinterest/pins': trendgetter.pinterest.pins, 8 | 'reddit/posts': trendgetter.reddit.posts, 9 | 'tiktok/videos': trendgetter.tiktok.videos, 10 | 'youtube/videos': trendgetter.youtube.videos, 11 | 'x/tags': trendgetter.x.tags, 12 | } as const; 13 | 14 | export type Endpoint = keyof typeof ENDPOINTS; 15 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "nodenext", 4 | "allowJs": true, 5 | "experimentalDecorators": true, 6 | "emitDecoratorMetadata": true, 7 | "esModuleInterop": true, 8 | "resolveJsonModule": true, 9 | "allowSyntheticDefaultImports": true, 10 | "skipLibCheck": true, 11 | "target": "es2020", 12 | "noImplicitAny": true, 13 | "moduleResolution": "nodenext", 14 | "sourceMap": false, 15 | "outDir": "dist", 16 | "baseUrl": ".", 17 | "paths": { 18 | "trendgetter": ["packages/core"] 19 | } 20 | }, 21 | "include": ["package.json", "server.ts"], 22 | "exclude": ["node_modules", "dist"] 23 | } 24 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "plugins": ["@typescript-eslint"], 5 | "extends": [ 6 | "eslint:recommended", 7 | "plugin:@typescript-eslint/eslint-recommended", 8 | "plugin:@typescript-eslint/recommended", 9 | ], 10 | "rules": { 11 | "@typescript-eslint/ban-ts-comment": "off", 12 | "@typescript-eslint/no-var-requires": "off", 13 | "@typescript-eslint/no-unused-vars": [ 14 | "warn", 15 | { 16 | "argsIgnorePattern": "^_", 17 | "varsIgnorePattern": "^_", 18 | "caughtErrorsIgnorePattern": "^_", 19 | }, 20 | ], 21 | }, 22 | "ignorePatterns": ["node_modules/", "dist/"], 23 | } 24 | -------------------------------------------------------------------------------- /packages/server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@trendgetter/api", 3 | "displayName": "Trendgetter API", 4 | "version": "2.0.0", 5 | "description": "Trendgetter API Server", 6 | "repository": "github:zivsteve/trendgetter", 7 | "license": "MIT", 8 | "main": "dist/index.js", 9 | "type": "module", 10 | "private": true, 11 | "scripts": { 12 | "dev": "tsx watch index.ts", 13 | "start": "node dist/index.js", 14 | "build": "tsc -p ." 15 | }, 16 | "dependencies": { 17 | "@fastify/cors": "^11.2.0", 18 | "dotenv": "^17.2.3", 19 | "fastify": "^5.6.2" 20 | }, 21 | "devDependencies": { 22 | "@types/node": "^25.0.2", 23 | "tsx": "^4.21.0", 24 | "typescript": "^5.9.3" 25 | }, 26 | "engines": { 27 | "node": "24" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Build 2 | dist/ 3 | 4 | # Logs 5 | logs 6 | *.log 7 | npm-debug.log* 8 | yarn-debug.log* 9 | yarn-error.log* 10 | lerna-debug.log* 11 | 12 | # Diagnostic reports (https://nodejs.org/api/report.html) 13 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 14 | 15 | # Runtime data 16 | pids 17 | *.pid 18 | *.seed 19 | *.pid.lock 20 | 21 | # Compiled binary addons (https://nodejs.org/api/addons.html) 22 | build/Release 23 | 24 | # Dependency directories 25 | node_modules/ 26 | 27 | # TypeScript cache 28 | *.tsbuildinfo 29 | 30 | # npm cache 31 | .npm 32 | .npmrc 33 | 34 | # eslint cache 35 | .eslintcache 36 | 37 | # Output of 'npm pack' 38 | *.tgz 39 | 40 | # dotenv 41 | .env 42 | .env.test 43 | .env.prod 44 | 45 | # VSCode 46 | .vscode-test 47 | .vscode/ 48 | 49 | # IDEA 50 | .idea/ 51 | 52 | # Mac 53 | .DS_Store 54 | 55 | # Yarn v2+ 56 | .yarn-integrity 57 | .yarn/* 58 | .yarnrc.yml 59 | !.yarn/releases/ 60 | !.yarn/plugins/ 61 | !.yarn/versions/ 62 | !.yarn/sdks/ 63 | !.yarn/patches/ 64 | .vercel 65 | .env*.local 66 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "trendgetter", 3 | "displayName": "Trendgetter", 4 | "description": "A free and open-source API that provides trending data from various platforms such as Google, YouTube, X, Reddit, GitHub, and TikTok.", 5 | "repository": "github:zivsteve/trendgetter", 6 | "license": "MIT", 7 | "main": "dist/src/index.js", 8 | "type": "module", 9 | "private": true, 10 | "workspaces": [ 11 | "packages/*" 12 | ], 13 | "scripts": { 14 | "dev": "yarn workspace @trendgetter/api dev", 15 | "start": "yarn workspace @trendgetter/api start", 16 | "build:root": "tsc -p tsconfig.json", 17 | "build:server": "yarn workspace @trendgetter/api build", 18 | "build": "yarn workspace @trendgetter/core build", 19 | "publish": "yarn workspace @trendgetter/core publish" 20 | }, 21 | "dependencies": { 22 | "fastify": "^5.6.2" 23 | }, 24 | "devDependencies": { 25 | "typescript": "^5.9.3" 26 | }, 27 | "engines": { 28 | "node": "24" 29 | }, 30 | "packageManager": "yarn@4.12.0" 31 | } 32 | -------------------------------------------------------------------------------- /packages/core/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@trendgetter/core", 3 | "displayName": "Trendgetter", 4 | "version": "2.0.2-beta.1", 5 | "description": "A free and open-source API that provides trending data from various platforms such as Google, YouTube, X, Reddit, GitHub, and TikTok.", 6 | "keywords": [ 7 | "trending", 8 | "trends", 9 | "api", 10 | "google trends", 11 | "youtube trends", 12 | "x trends", 13 | "reddit trends", 14 | "github trends", 15 | "tiktok trends" 16 | ], 17 | "repository": "github:zivsteve/trendgetter", 18 | "license": "MIT", 19 | "main": "dist/index.js", 20 | "type": "module", 21 | "scripts": { 22 | "build": "tsc -p .", 23 | "publish": "npm publish --access public" 24 | }, 25 | "dependencies": { 26 | "axios": "^1.13.2", 27 | "jsdom": "^26.1.0", 28 | "playwright": "^1.57.0" 29 | }, 30 | "devDependencies": { 31 | "@types/jsdom": "^27.0.0", 32 | "@types/node": "^25.0.2", 33 | "typescript": "^5.9.3" 34 | }, 35 | "packageManager": "yarn@4.12.0" 36 | } 37 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020-present Zivsteve 4 | 5 | All rights reserved. 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. 24 | -------------------------------------------------------------------------------- /packages/core/platforms/reddit.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | const axiosReddit = axios.create({ 4 | baseURL: 'https://www.reddit.com', 5 | }); 6 | 7 | export interface RedditParams { 8 | subreddit?: string; 9 | t?: 'hour' | 'day' | 'week' | 'month' | 'year' | 'all'; 10 | } 11 | 12 | /** 13 | * Fetches trending posts from Reddit's popular page. 14 | * 15 | * @param subreddit - The subreddit to fetch trending posts from (default is 'popular'). 16 | * @param t - The time range for trending posts. Can be 'hour', 'day', 'week', 'month', 'year', or 'all'. 17 | */ 18 | export async function getRedditTrendingPosts(params?: RedditParams) { 19 | // Reddit allows appending .json to almost any URL to get the JSON representation. 20 | const res = await axiosReddit.get(`/r/${params?.subreddit || 'popular'}/top.json`, { params }); 21 | 22 | const posts = res.data.data.children.map((child: any) => { 23 | const post = child.data; 24 | return { 25 | id: post.id, 26 | title: post.title, 27 | url: `${axiosReddit.defaults.baseURL}${post.permalink}`, 28 | subreddit: post.subreddit, 29 | upvotes: post.ups, 30 | comments_count: post.num_comments, 31 | image_url: post.thumbnail && post.thumbnail.startsWith('http') ? post.thumbnail : null, 32 | video_url: post.is_video ? post.media?.reddit_video?.fallback_url : null, 33 | }; 34 | }); 35 | 36 | return posts; 37 | } 38 | 39 | export const reddit = { 40 | posts: getRedditTrendingPosts, 41 | }; 42 | -------------------------------------------------------------------------------- /packages/core/platforms/hackernews.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | const axiosHN = axios.create({ 4 | baseURL: 'https://hacker-news.firebaseio.com/v0', 5 | }); 6 | 7 | export interface HackerNewsParams { 8 | type?: 'top' | 'new' | 'best'; 9 | limit?: number; 10 | } 11 | 12 | /** 13 | * Fetches trending posts from Hacker News. 14 | * 15 | * @param type - The type of trending posts to fetch. Can be 'top', 'new', or 'best'. 16 | */ 17 | export async function getHackerNewsTrendingPosts(params?: HackerNewsParams) { 18 | // Hacker News provides a public API to fetch top, new, and best stories. 19 | const TYPES = { 20 | top: 'topstories', 21 | new: 'newstories', 22 | best: 'beststories', 23 | }; 24 | type Type = keyof typeof TYPES; 25 | 26 | const type = params?.type && TYPES[params.type as Type] ? params.type : 'top'; 27 | const typeKey = TYPES[type as Type]; 28 | 29 | const res = await axiosHN.get(`/${typeKey}.json`); 30 | // The API returns an array of post IDs. 31 | const postIds: number[] = res.data.slice(0, params?.limit ? +params.limit : 20); 32 | 33 | // Fetch details for each post by its ID. 34 | const postPromises = postIds.map(async (id) => { 35 | const postRes = await axiosHN.get(`/item/${id}.json`); 36 | return postRes.data; 37 | }); 38 | const posts = await Promise.all(postPromises); 39 | 40 | return posts.map((post) => ({ 41 | id: post.id, 42 | type: post.type, 43 | by: post.by, 44 | time: post.time, 45 | title: post.title, 46 | url: post.url ? post.url : `https://news.ycombinator.com/item?id=${post.id}`, 47 | score: post.score, 48 | })); 49 | } 50 | 51 | export const hackernews = { 52 | posts: getHackerNewsTrendingPosts, 53 | }; 54 | -------------------------------------------------------------------------------- /packages/server/index.ts: -------------------------------------------------------------------------------- 1 | import 'dotenv/config'; 2 | import Fastify from 'fastify'; 3 | import fastifyCors from '@fastify/cors'; 4 | import pkg from './package.json' with { type: 'json' }; 5 | import { Endpoint, ENDPOINTS } from './endpoints.js'; 6 | 7 | // Initialize Fastify server with plugins. 8 | const fastify = Fastify({ logger: true }); 9 | fastify.register(fastifyCors); 10 | 11 | // Root endpoint providing basic API information. 12 | fastify.get('/', async (request, reply) => { 13 | return { 14 | name: pkg.name, 15 | description: pkg.description, 16 | version: pkg.version, 17 | repository: pkg.repository, 18 | user_agent: request.headers['user-agent'], 19 | user_ip: request.headers['x-forwarded-for'] || request.ip, 20 | uptime: +process.uptime().toFixed(0), 21 | }; 22 | }); 23 | 24 | // Dynamic endpoint to handle various trending data requests. 25 | fastify.get('/api/:platform/:type', async (request, reply) => { 26 | const { platform, type } = request.params as { platform: string; type: string }; 27 | const params = request.query as Record; 28 | 29 | const endpointKey = `${platform}/${type}` as Endpoint; 30 | const fetchFunction = ENDPOINTS[endpointKey]; 31 | 32 | if (!fetchFunction) { 33 | reply.status(404).send({ error: 'Endpoint not found.' }); 34 | return; 35 | } 36 | 37 | try { 38 | const data = await fetchFunction(params); 39 | reply.send({ data }); 40 | } catch (error: any) { 41 | reply.status(500).send({ error: error.message || 'An error occurred while fetching data.' }); 42 | } 43 | }); 44 | 45 | // Start the server. 46 | fastify.listen({ 47 | host: process.env.HOST || '0.0.0.0', 48 | port: +(process.env.PORT || 3000), 49 | }); 50 | -------------------------------------------------------------------------------- /packages/core/platforms/youtube.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | const axiosYT = axios.create({ 4 | baseURL: 'https://youtube.googleapis.com/youtube/v3', 5 | }); 6 | 7 | export interface YoutubeParams { 8 | country_code?: string; 9 | limit?: number; 10 | } 11 | 12 | const DEFAULT_PARAMS: YoutubeParams = { 13 | country_code: 'US', 14 | limit: 10, 15 | }; 16 | 17 | /** 18 | * Fetches trending videos from YouTube using the YouTube Data API. 19 | * 20 | * @param country_code - The region code to fetch trending videos for (default is 'US'). 21 | * @param limit - The number of trending videos to fetch (default is 10). 22 | */ 23 | export async function getYoutubeTrendingVideos(params?: YoutubeParams) { 24 | // YouTube has unfortunately removed their trending page. 25 | // However, we can use the YouTube Data API to fetch trending videos. 26 | const res = await axiosYT.get('/videos', { 27 | params: { 28 | part: 'snippet,contentDetails,statistics', 29 | chart: 'mostPopular', 30 | regionCode: params?.country_code || DEFAULT_PARAMS.country_code, 31 | maxResults: params?.limit || DEFAULT_PARAMS.limit, 32 | key: youtube.apiKey, 33 | }, 34 | }); 35 | 36 | return res.data?.items 37 | ?.map((item: any) => ({ 38 | title: item.snippet.title, 39 | description: item.snippet.description, 40 | date: item.snippet.publishedAt, 41 | channel_title: item.snippet.channelTitle, 42 | statistics: { 43 | view_count: item.statistics.viewCount, 44 | like_count: item.statistics.likeCount, 45 | comment_count: item.statistics.commentCount, 46 | }, 47 | details: item.contentDetails, 48 | })) 49 | ?.sort((a: any, b: any) => +b.statistics.view_count - +a.statistics.view_count); 50 | } 51 | 52 | export const youtube = { 53 | videos: getYoutubeTrendingVideos, 54 | apiKey: process?.env?.YOUTUBE_API_KEY || '', 55 | }; 56 | -------------------------------------------------------------------------------- /packages/core/README.md: -------------------------------------------------------------------------------- 1 | # 🌎 Trendgetter 2 | 3 | ![GitHub package.json version](https://img.shields.io/npm/v/@trendgetter/core.svg) 4 | ![GitHub](https://img.shields.io/github/license/zivsteve/trendgetter?style=flat-square) 5 | 6 | --- 7 | 8 | Trendgetter is a free and open-source API that provides trending data from various platforms such as Google, YouTube, X, Reddit, GitHub, and TikTok. 9 | 10 | ## Installing 11 | 12 | Using npm: 13 | 14 | ```bash 15 | npm install @trendgetter/core 16 | ``` 17 | 18 | Using yarn: 19 | 20 | ``` 21 | yarn add @trendgetter/core 22 | ``` 23 | 24 | ## Usage 25 | 26 | Import the package: 27 | 28 | ```typescript 29 | import * as trendgetter from '@trendgetter/core'; 30 | ``` 31 | 32 | Fetch trending data using the desired platform: 33 | 34 | ```typescript 35 | const results = await trendgetter.youtube.videos(); 36 | console.log(results); 37 | ``` 38 | 39 | ## Available Platforms 40 | 41 | ```typescript 42 | trendgetter.github.repos(); 43 | trendgetter.google.topics(); 44 | trendgetter.hackernews.posts(); 45 | trendgetter.pinterest.pins(); 46 | trendgetter.reddit.posts(); 47 | trendgetter.tiktok.videos(); 48 | trendgetter.x.tags(); 49 | trendgetter.youtube.videos(); 50 | ``` 51 | 52 | --- 53 | 54 | #### Note: Some platforms may require API keys: 55 | 56 | ```typescript 57 | trendgetter.youtube.apiKey = 'YOUTUBE_API_KEY'; 58 | ``` 59 | 60 | If you are using environment variables, they will be picked up automatically. 61 | 62 | --- 63 | 64 | ## Using Parameters 65 | 66 | Each platform's methods accept an optional `params` object to customize the request: 67 | 68 | ```typescript 69 | const results = await trendgetter.youtube.videos({ regionCode: 'GB', maxResults: 5 }); 70 | console.log(results); 71 | ``` 72 | 73 | > See the [API Documentation](https://github.com/zivsteve/trendgetter) 74 | > for detailed information on available parameters for each platform. 75 | 76 | --- 77 | 78 | ### Contributing 79 | 80 | Feel free to open issues or submit pull requests for improvements or new features! 81 | -------------------------------------------------------------------------------- /packages/core/platforms/x.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | import { JSDOM } from 'jsdom'; 3 | 4 | const axiosX = axios.create({ 5 | baseURL: 'https://trends24.in', 6 | }); 7 | 8 | export interface XParams { 9 | location?: string; 10 | } 11 | 12 | /** 13 | * Fetches trending tags from X (formerly Twitter) Trends page. 14 | * 15 | * @param location - The location to fetch trending tags for (default is 'worldwide'). 16 | */ 17 | export async function getXTrendingTags(params?: XParams) { 18 | const location = `${params?.location || ''}`.replace(/\s+/g, '-').toLowerCase(); 19 | 20 | // X has unfortunately made their API very expensive. 21 | // As a workaround, we will scrape the trends from the public trends page. 22 | const res = await axiosX.get(`/${location}`); 23 | 24 | const dom = new JSDOM(res.data); 25 | const document = dom.window.document; 26 | 27 | const tagElements = document.querySelectorAll('.trend-name'); 28 | const tags = Array.from(tagElements).map((tagElement) => { 29 | const name = tagElement.querySelector('a') ? tagElement.querySelector('a')!.textContent!.trim() : null; 30 | const url = tagElement.querySelector('a') ? tagElement.querySelector('a')!.getAttribute('href') : null; 31 | const statCardLink = document.querySelector(`.stat-card-item a[href="${url}"]`); 32 | return { 33 | name: name, 34 | url: url, 35 | count: tagElement.querySelector('[data-count]') 36 | ? +tagElement.querySelector('[data-count]')!.getAttribute('data-count')! 37 | : null, 38 | length: statCardLink ? statCardLink.nextSibling?.textContent?.trim() : null, 39 | }; 40 | }); 41 | 42 | const combinedTags: Record = {}; 43 | tags.forEach((tag) => { 44 | if (tag.name) { 45 | if (!combinedTags[tag.name]) { 46 | combinedTags[tag.name] = { ...tag }; 47 | } else { 48 | combinedTags[tag.name].count += tag.count || 0; 49 | } 50 | } 51 | }); 52 | 53 | const uniqueTags = Object.values(combinedTags); 54 | 55 | uniqueTags.sort((a: any, b: any) => (b.count || 0) - (a.count || 0)); 56 | 57 | return uniqueTags; 58 | } 59 | 60 | export const x = { 61 | tags: getXTrendingTags, 62 | }; 63 | -------------------------------------------------------------------------------- /packages/core/platforms/github.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | import { JSDOM } from 'jsdom'; 3 | 4 | const axiosGH = axios.create({ 5 | baseURL: 'https://github.com', 6 | }); 7 | 8 | export interface GithubParams { 9 | since?: 'daily' | 'weekly' | 'monthly'; 10 | language?: string; 11 | spoken_language_code?: string; 12 | } 13 | 14 | /** 15 | * Fetches trending repositories from GitHub Trending page. 16 | * 17 | * @param since - The time range for trending repositories. Can be 'daily', 'weekly', or 'monthly'. 18 | * @param language - The programming language to filter repositories by. 19 | * @param spoken_language_code - The spoken language to filter repositories by. (e.g., 'en' for English) 20 | */ 21 | export async function getGithubTrendingRepos(params?: GithubParams) { 22 | // GitHub has a public trending page that can be scraped for trending repositories and does not require authentication. 23 | const res = await axiosGH.get(`/trending/${params?.language || ''}`, { params }); 24 | 25 | const dom = new JSDOM(res.data); 26 | const document = dom.window.document; 27 | 28 | const repoElements = document.querySelectorAll('article.Box-row'); 29 | const repos = Array.from(repoElements).map((repoElement) => { 30 | const titleElement = repoElement.querySelector('h2 a'); 31 | const descriptionElement = repoElement.querySelector('p.col-9'); 32 | const languageElement = repoElement.querySelector('span[itemprop="programmingLanguage"]'); 33 | const starsElement = repoElement.querySelector('a.Link--muted[href$="/stargazers"]'); 34 | const forksElement = repoElement.querySelector('a.Link--muted[href$="/forks"]'); 35 | const starsTodayElement = repoElement.querySelector('span.d-inline-block.float-sm-right'); 36 | 37 | return { 38 | name: titleElement ? titleElement.textContent.trim().replace(/\s+/g, '') : null, 39 | url: titleElement ? `${axiosGH.defaults.baseURL}${titleElement.getAttribute('href')}` : null, 40 | description: descriptionElement ? descriptionElement.textContent.trim() : null, 41 | language: languageElement ? languageElement.textContent.trim() : null, 42 | stars: starsElement ? +starsElement.textContent.trim().replace(',', '') : null, 43 | forks: forksElement ? +forksElement.textContent.trim().replace(',', '') : null, 44 | stars_today: starsTodayElement ? +starsTodayElement.textContent.trim().split(' ')[0].replace(',', '') : null, 45 | }; 46 | }); 47 | 48 | return repos; 49 | } 50 | 51 | export const github = { 52 | repos: getGithubTrendingRepos, 53 | }; 54 | -------------------------------------------------------------------------------- /packages/core/platforms/pinterest.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | const axiosPinterest = axios.create({ 4 | baseURL: 'https://trends.pinterest.com', 5 | }); 6 | 7 | /** Enum for Pinterest pin categories. */ 8 | export enum PinsCategory { 9 | ALL = undefined, 10 | ANIMALS = '925056443165', 11 | ARCHITECTURE = '918105274631', 12 | ART = '961238559656', 13 | BEAUTY = '935541271955', 14 | DESIGN = '902065567321', 15 | DIY_AND_CRAFTS = '934876475639', 16 | EDUCATION = '922134410098', 17 | ELECTRONICS = '960887632144', 18 | ENTERTAINMENT = '953061268473', 19 | EVENT_PLANNING = '941870572865', 20 | FASHION = '948967005229', 21 | FINANCE = '913207199297', 22 | FOOD_AND_DRINK = '918530398158', 23 | HEALTH = '898620064290', 24 | HOME_DECOR = '935249274030', 25 | LAWN_AND_GARDEN = '909983286710', 26 | PARENTING = '920236059316', 27 | QUOTES = '948192800438', 28 | SPORTS = '919812032692', 29 | TRAVEL = '908182459161', 30 | VEHICLES = '918093243960', 31 | WEDDINGS = '903260720461', 32 | } 33 | 34 | export interface PinterestParams { 35 | country_code?: string; 36 | category?: PinsCategory; 37 | } 38 | 39 | /** 40 | * Fetches trending pins from Pinterest's popular page. 41 | * 42 | * @param country_code - The country code to fetch trending pins for (default is 'US'). 43 | * @param category - The category to filter trending pins by (default is PinsCategory.ALL). Multiple categories can be provided as an array. 44 | * 45 | * {@link PinsCategory} - Enum for Pinterest pin categories. Example: PinsCategory.FOOD_AND_DRINK 46 | * 47 | * @example 48 | * ```typescript 49 | * await pinterest.pins({ 50 | * country_code: 'US', 51 | * category: PinsCategory.FOOD_AND_DRINK, 52 | * }) 53 | * ``` 54 | */ 55 | export async function getPinterestTrendingPins(params?: PinterestParams) { 56 | // Pinterest provides a private API to fetch trending pins. 57 | const res = await axiosPinterest.get('/resource/ApiResource/get', { 58 | params: { 59 | source_url: '/', 60 | data: JSON.stringify({ 61 | options: { 62 | url: `/ads/v4/trends/topics/featured/${params?.country_code || 'US'}/SAVE`, 63 | interests: [params?.category || PinsCategory.ALL].flat().filter(Boolean), 64 | data: { publish_state: 'PUBLISHED' }, 65 | }, 66 | context: {}, 67 | }), 68 | _: `${Date.now()}`, 69 | ...params, 70 | }, 71 | headers: { 72 | 'X-Pinterest-Pws-Handler': 'trends/index.js', // Important header to mimic Pinterest's internal requests 73 | }, 74 | }); 75 | 76 | return ( 77 | res.data?.resource_response?.data?.map((item: any) => ({ 78 | id: item.id, 79 | name: item.name, 80 | description: item.description, 81 | pins: item.pins, 82 | })) || [] 83 | ); 84 | } 85 | 86 | export const pinterest = { 87 | pins: getPinterestTrendingPins, 88 | }; 89 | -------------------------------------------------------------------------------- /packages/core/platforms/google.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | import { JSDOM } from 'jsdom'; 3 | 4 | /** Enum for Google topic categories. */ 5 | export enum GoogleCategory { 6 | ALL = undefined, 7 | AUTOS_AND_VEHICLES = 1, 8 | BEAUTY_AND_FASHION = 2, 9 | BUSINESS_AND_FINANCE = 3, 10 | ENTERTAINMENT = 4, 11 | FOOD_AND_DRINK = 5, 12 | GAMES = 6, 13 | HEALTH = 7, 14 | HOBBIES_AND_LEISURE = 8, 15 | JOBS_AND_EDUCATION = 9, 16 | LAW_AND_GOVERNMENT = 10, 17 | OTHER = 11, 18 | PETS_AND_ANIMALS = 12, 19 | POLITICS = 13, 20 | SCIENCE = 14, 21 | SHOPPING = 15, 22 | SPORTS = 16, 23 | TECHNOLOGY = 17, 24 | TRAVEL_AND_TRANSPORTATION = 18, 25 | CLIMATE = 19, 26 | } 27 | 28 | export interface GoogleParams { 29 | geo?: string; 30 | hl?: string; 31 | hours?: number; 32 | status?: string; 33 | sort?: string; 34 | category?: GoogleCategory; 35 | } 36 | 37 | const DEFAULT_PARAMS: GoogleParams = { 38 | geo: 'US', 39 | hl: 'en-US', 40 | hours: 24, 41 | status: 'active', 42 | sort: 'relevance', 43 | category: GoogleCategory.ALL, 44 | }; 45 | 46 | /** 47 | * Fetches trending topics from Google Trends RSS feed. 48 | * 49 | * @param geo - The geographical location to filter trends by (e.g., 'US' for United States). 50 | * @param hl - The language for the trends (e.g., 'en-US' for English - United States). 51 | * @param hours - The time range for trending topics in hours (e.g., 1, 4, 24). 52 | * @param status - Whether to include only active trends ('active'). 53 | * @param sort - The sorting method for trends ('title', 'sort-volume', 'recency', 'relevance (default)'). 54 | * @param category - The category to filter trending topics by (default is GoogleCategory.ALL). 55 | * 56 | * {@link GoogleCategory} - Enum for Google topic categories. Example: GoogleCategory.SPORTS 57 | * 58 | * @example 59 | * ```typescript 60 | * await google.topics({ 61 | * geo: 'US', 62 | * hl: 'en-US', 63 | * hours: 24, 64 | * category: GoogleCategory.SPORTS, 65 | * }) 66 | * ``` 67 | */ 68 | export async function getGoogleTrendingTopics(params?: GoogleParams) { 69 | // Google Trends provides a public RSS feed for trending topics. 70 | const res = await axios.get('https://trends.google.com/trending/rss', { 71 | params: { 72 | geo: params?.geo || DEFAULT_PARAMS.geo, 73 | hl: params?.hl || DEFAULT_PARAMS.hl, 74 | hours: params?.hours || DEFAULT_PARAMS.hours, 75 | status: params?.status || DEFAULT_PARAMS.status, 76 | sort: params?.sort || DEFAULT_PARAMS.sort, 77 | cat: params?.category || DEFAULT_PARAMS.category, 78 | }, 79 | }); 80 | 81 | const dom = new JSDOM(res.data, { contentType: 'text/xml' }); 82 | const document = dom.window.document; 83 | 84 | const itemElements = document.querySelectorAll('item'); 85 | const topics = Array.from(itemElements).map((itemElement) => { 86 | const titleElement = itemElement.querySelector('title'); 87 | const linkElement = itemElement.querySelector('link'); 88 | const pubDateElement = itemElement.querySelector('pubDate'); 89 | const descriptionElement = itemElement.querySelector('description'); 90 | const trafficElement = itemElement.getElementsByTagName('ht:approx_traffic'); 91 | const imageElement = itemElement.getElementsByTagName('ht:picture'); 92 | const imageSourceElement = itemElement.getElementsByTagName('ht:picture_source'); 93 | 94 | return { 95 | title: titleElement ? titleElement.textContent.trim() : null, 96 | link: linkElement ? linkElement.textContent.trim() : null, 97 | date: pubDateElement ? new Date(pubDateElement.textContent.trim()) : null, 98 | description: descriptionElement ? descriptionElement.textContent.trim() : null, 99 | approximate_traffic: trafficElement ? trafficElement[0].textContent.trim() : null, 100 | image_url: imageElement ? imageElement[0].textContent.trim() : null, 101 | image_source: imageSourceElement ? imageSourceElement[0].textContent.trim() : null, 102 | }; 103 | }); 104 | 105 | return topics; 106 | } 107 | 108 | export const google = { 109 | topics: getGoogleTrendingTopics, 110 | }; 111 | -------------------------------------------------------------------------------- /packages/core/platforms/tiktok.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | import playwright from 'playwright'; 3 | import { JSDOM } from 'jsdom'; 4 | 5 | const axiosTT = axios.create({ 6 | baseURL: 'https://ads.tiktok.com', 7 | }); 8 | 9 | export interface TikTokParams { 10 | period?: number; 11 | page?: number; 12 | limit?: number; 13 | country_code?: string; 14 | } 15 | 16 | const DEFAULT_PARAMS: TikTokParams = { 17 | period: 7, 18 | page: 1, 19 | limit: 10, 20 | country_code: 'US', 21 | }; 22 | 23 | /** 24 | * Fetches trending videos from TikTok Creative Center. 25 | * 26 | * @param period - The time period to fetch trending videos for, in days (default is 7). 27 | * @param page - The page number to fetch (default is 1). 28 | * @param limit - The number of videos to fetch per page (default is 10). 29 | * @param country_code - The country code to filter videos by (default is 'US'). 30 | */ 31 | export async function getTikTokTrendingVideos(params?: TikTokParams) { 32 | // TikTok's API requires authentication headers that are generated dynamically. 33 | // A simple way to obtain these headers is to use a headless browser to visit the TikTok Creative Center page 34 | // and intercept the necessary headers from the network requests. 35 | const browser = await playwright.webkit.launch({ 36 | headless: true, 37 | }); 38 | const context = await browser.newContext(); 39 | const page = await context.newPage(); 40 | 41 | // Intercept requests to capture authentication headers 42 | // These headers are required to access the private TikTok API. 43 | let timestamp = 0; 44 | let webId = ''; 45 | let userSign = ''; 46 | page.on('request', async (request) => { 47 | try { 48 | const timestampHeader = request.headers()['timestamp']; 49 | const webIdHeader = request.headers()['web-id']; 50 | const userSignHeader = request.headers()['user-sign']; 51 | 52 | if (timestampHeader && webIdHeader && userSignHeader) { 53 | timestamp = +timestampHeader; 54 | webId = webIdHeader || ''; 55 | userSign = userSignHeader || ''; 56 | 57 | // Close the page once we have the required headers. 58 | await page.close(); 59 | } 60 | } catch (err) {} 61 | }); 62 | 63 | // Navigate to the TikTok Creative Center to trigger the request interception. 64 | try { 65 | const url = `${axiosTT.defaults.baseURL}/business/creativecenter/inspiration/popular/pc/en`; 66 | await page.goto(url); 67 | await page.waitForEvent('close'); 68 | } catch (err) {} 69 | 70 | if (!timestamp || !webId || !userSign) { 71 | throw new Error('Failed to retrieve TikTok authentication headers.'); 72 | } 73 | 74 | // Fetch trending videos using the captured headers. 75 | const res = await axiosTT.get('/creative_radar_api/v1/popular_trend/list', { 76 | params: { 77 | period: params?.period || DEFAULT_PARAMS.period, 78 | page: params?.page || DEFAULT_PARAMS.page, 79 | limit: params?.limit || DEFAULT_PARAMS.limit, 80 | country_code: params?.country_code || DEFAULT_PARAMS.country_code, 81 | }, 82 | headers: { 83 | Timestamp: timestamp, 84 | 'Web-Id': webId, 85 | 'User-Sign': userSign, 86 | }, 87 | }); 88 | 89 | const data = await Promise.all( 90 | res.data?.data?.videos?.map(async (video: any) => { 91 | const itemData = await axios.get(video.item_url); 92 | 93 | const dom = new JSDOM(itemData.data); 94 | const document = dom.window.document; 95 | 96 | // The video details are stored in a JSON object within a script tag. 97 | const jsonElement = document.querySelector('#__UNIVERSAL_DATA_FOR_REHYDRATION__'); 98 | 99 | // JSON is formatted weirdly... so we need to extract it manually 100 | const between = (str: string, start: string, end: string) => str.split(start)[1]?.split(end)[0] || null; 101 | const statsJson = between(jsonElement?.textContent || '', '"stats":', ',"statsV2"'); 102 | const stats = statsJson ? JSON.parse(statsJson) : {}; 103 | 104 | return { 105 | image_url: video.cover, 106 | duration: video.duration, 107 | url: video.item_url, 108 | title: video.title, 109 | statistics: { 110 | play_count: stats.playCount || null, 111 | like_count: stats.diggCount || null, 112 | comment_count: stats.commentCount || null, 113 | share_count: stats.shareCount || null, 114 | }, 115 | }; 116 | }) || [], 117 | ); 118 | 119 | return data; 120 | } 121 | 122 | export const tiktok = { 123 | videos: getTikTokTrendingVideos, 124 | }; 125 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 🌎 Trendgetter 2 | 3 | ![GitHub package.json version](https://img.shields.io/npm/v/@trendgetter/core.svg) 4 | ![GitHub](https://img.shields.io/github/license/zivsteve/trendgetter?style=flat-square) 5 | 6 | --- 7 | 8 | Trendgetter is a free and open-source API that provides trending data from various platforms such as Google, YouTube, X, Reddit, GitHub, and TikTok. 9 | 10 | You can clone this repository and run your own instance of the API. 11 | 12 | ## 🎉 Trendgetter API 2.0 is here! 13 | 14 | The Trendgetter API has been completely rewritten from scratch to provide a more robust and scalable solution for fetching trending data from multiple platforms. The new version includes improved error handling, better performance, and support for additional platforms. 15 | 16 | Try it out now! 17 | https://trendgetter.vercel.app/ 18 | 19 | --- 20 | 21 | ### How to Use 22 | 23 | 1. **Clone the repository:** 24 | 25 | ```bash 26 | git clone https://github.com/zivsteve/trendgetter.git 27 | cd trendgetter-api 28 | yarn 29 | yarn dev 30 | ``` 31 | 32 | 2. **Set up environment variables:** 33 | 34 | - Copy the `.env.example` file to `.env` and fill in any required API keys. 35 | 36 | 3. **Access the API endpoints:** 37 | - The API will be running at `http://localhost:3000` by default. 38 | - You can access the available endpoints as described below. 39 | 40 | --- 41 | 42 | ### Available Platforms & Explanations: 43 | 44 | --- 45 | 46 |
47 | 48 | Google 49 | 50 | 51 | GET [`/api/google/topics`](https://trendgetter.vercel.app/api/google/topics) 52 | 53 | > Get trending search topics from Google Trends. 54 | 55 | | Parameter | Type | Default | Description | 56 | | --------- | ------ | ------- | ------------------------------------------------- | 57 | | `hl` | string | `en` | Language code (e.g., `en`, `es`, `fr`) | 58 | | `geo` | string | `US` | Geographic location code (e.g., `US`, `GB`, `IN`) | 59 | | `cat` | string | `ALL` | Category code for trends | 60 | 61 | _Check the `GoogleCategory` enum for available categories._ 62 | 63 | **Google Trends RSS Feed** 64 | 65 | Google provides an official RSS feed for trending search terms: 66 | https://trends.google.com/trending/rss 67 | 68 |
69 | 70 | --- 71 | 72 |
73 | YouTube 74 | 75 | GET [`/api/youtube/videos`](https://trendgetter.vercel.app/api/youtube/videos) 76 | 77 | > Get trending videos from YouTube. 78 | 79 | | Parameter | Type | Default | Description | 80 | | ------------- | ------ | ------- | ------------------------------------------------------------------------------ | 81 | | `region_code` | string | `US` | The region code for which to retrieve trending videos (e.g., `US`, `GB`, `IN`) | 82 | | `limit` | string | `10` | The maximum number of trending videos to retrieve. | 83 | 84 | **YouTube Data API v3** 85 | 86 | Unfortunately, YouTube removed their official trending page in 2025. 87 | 88 | However, you can still retrieve trending videos using the YouTube Data API v3: 89 | https://developers.google.com/youtube/v3/docs/videos/list 90 | 91 |
92 | 93 | --- 94 | 95 |
96 | X (formerly Twitter) 97 | 98 | GET [`/api/x/tags`](https://trendgetter.vercel.app/api/x/tags) 99 | 100 | > Get trending hashtags from X (formerly Twitter). 101 | 102 | | Parameter | Type | Default | Description | 103 | | ---------- | ------ | ------- | --------------------------------------------------------------------------------------------------- | 104 | | `location` | string | `''` | The location for which to retrieve trending hashtags (e.g., `US`, `GB`). Leave empty for worldwide. | 105 | 106 | **Workaround for X's limited API** 107 | 108 | Unfortunately, X made their official API really expensive and limited access. 109 | 110 | The platform also requires authentication for accessing trending topics. 111 | 112 | A workaround is to scrape this third-party site that displays X's trending topics: 113 | https://trends24.in/ 114 | 115 |
116 | 117 | --- 118 | 119 |
120 | Reddit 121 | 122 | GET [`/api/reddit/posts`](https://trendgetter.vercel.app/api/reddit/posts) 123 | 124 | > Get trending posts from Reddit. 125 | 126 | | Parameter | Type | Default | Description | 127 | | ----------- | ------ | --------- | ------------------------------------------------------------------------------------------- | 128 | | `subreddit` | string | `popular` | The subreddit from which to retrieve trending posts (e.g., `popular`, `all`, `funny`) | 129 | | `t` | string | `day` | The time range for trending posts. Can be 'hour', 'day', 'week', 'month', 'year', or 'all'. | 130 | 131 | **Reddit API** 132 | 133 | Reddit has an amazing API. You can add .json to almost any page to get it's posts. 134 | 135 | For example, the top posts of r/popular: 136 | https://www.reddit.com/r/popular/top.json 137 | 138 |
139 | 140 | --- 141 | 142 |
143 | Hacker News / Y Combinator 144 | 145 | GET [`/api/hackernews/posts`](https://trendgetter.vercel.app/api/hackernews/posts) 146 | 147 | > Get trending posts from Hacker News. 148 | 149 | | Parameter | Type | Default | Description | 150 | | --------- | ------ | ------- | -------------------------------------------------------------------- | 151 | | `type` | string | `top` | The type of trending posts to fetch. Can be 'top', 'new', or 'best'. | 152 | | `limit` | number | `20` | The maximum number of trending posts to retrieve. | 153 | 154 | **Hacker News API** 155 | 156 | Hacker News provides a public API to fetch top, new, and best posts: 157 | https://github.com/HackerNews/API 158 | 159 |
160 | 161 | --- 162 | 163 |
164 | Pinterest 165 | 166 | GET [`/api/pinterest/pins`](https://trendgetter.vercel.app/api/pinterest/pins) 167 | 168 | > Get trending pins from Pinterest. 169 | 170 | | Parameter | Type | Default | Description | 171 | | ------------- | ------ | ------- | ------------------------------------------------------------------------------------- | 172 | | `countryCode` | string | `US` | The country code to fetch trending pins for (e.g., `US`, `GB`, `IN`) | 173 | | `category` | string | `ALL` | The category to filter trending pins by. Multiple values can be provided as an array. | 174 | 175 | _Check the `PinsCategory` enum for available categories._ 176 | 177 | **Pinterest's Unofficial API** 178 | 179 | Pinterest does provide an official API, but we can use their private API to fetch trending pins. 180 | 181 | This is done by mimicking the requests made by the Pinterest web application: 182 | https://trends.pinterest.com 183 | 184 |
185 | 186 | --- 187 | 188 |
189 | GitHub 190 | 191 | GET [`/api/github/repos`](https://trendgetter.vercel.app/api/github/repos) 192 | 193 | > Get trending repositories from GitHub. 194 | 195 | | Parameter | Type | Default | Description | 196 | | ---------------------- | ------ | ------- | --------------------------------------------------------------------------------- | 197 | | `since` | string | `daily` | The time range for trending repositories. Can be 'daily', 'weekly', or 'monthly'. | 198 | | `language` | string | `''` | The programming language to filter repositories by (e.g., 'javascript', 'python') | 199 | | `spoken_language_code` | string | `''` | The spoken language to filter repositories by. (e.g., 'en' for English) | 200 | 201 | **GitHub Trending Page** 202 | 203 | GitHub doesn't have an official API, but it has a trending page which we can parse: 204 | https://github.com/trending 205 | 206 | We can also get trending developers: 207 | https://github.com/trending/developers 208 | 209 |
210 | 211 | --- 212 | 213 |
214 | TikTok 215 | 216 | GET [`/api/tiktok/videos`](https://trendgetter.vercel.app/api/tiktok/videos) 217 | 218 | > Get trending videos from TikTok. 219 | 220 | | Parameter | Type | Default | Description | 221 | | -------------- | ------ | ------- | ------------------------------------------------------------------------------- | 222 | | `period` | number | `7` | The time period (in days) to retrieve trending videos for. Can be 1, 7, or 30. | 223 | | `page` | number | `1` | The page number of results to retrieve. | 224 | | `limit` | number | `10` | The maximum number of trending videos to retrieve per page. | 225 | | `country_code` | string | `US` | The country code for which to retrieve trending videos (e.g., `US`, `GB`, `IN`) | 226 | 227 | **TikTok's Unofficial API** 228 | 229 | TikTok does not provide an official API for trending videos. 230 | 231 | However, we can use TikTok's internal API endpoints from their Creative Center to fetch trending videos by mimicking the requests made by the TikTok web application. 232 | 233 | https://ads.tiktok.com/business/creativecenter/inspiration/popular/pc/en 234 | 235 |
236 | 237 | --- 238 | 239 | ### Donate 240 | 241 | Help me improve this project! Any amount is much appreciated :) 242 | 243 | 244 | Buy Me A Coffee 245 | 246 | 247 | --- 248 | 249 | ## License 250 | 251 | > Copyright (C) 2020-present Zivsteve. 252 | > Licensed under the [MIT](https://opensource.org/licenses/MIT) license. 253 | > (See the [LICENSE](https://github.com/zivsteve/trendgetter-api/blob/master/LICENSE) file for the whole license text.) 254 | 255 | # Contributing 256 | 257 | Feel free to open issues or submit pull requests for improvements or new features! 258 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # This file is generated by running "yarn install" inside your project. 2 | # Manual changes might be lost - proceed with caution! 3 | 4 | __metadata: 5 | version: 8 6 | cacheKey: 10c0 7 | 8 | "@asamuzakjp/css-color@npm:^3.2.0": 9 | version: 3.2.0 10 | resolution: "@asamuzakjp/css-color@npm:3.2.0" 11 | dependencies: 12 | "@csstools/css-calc": "npm:^2.1.3" 13 | "@csstools/css-color-parser": "npm:^3.0.9" 14 | "@csstools/css-parser-algorithms": "npm:^3.0.4" 15 | "@csstools/css-tokenizer": "npm:^3.0.3" 16 | lru-cache: "npm:^10.4.3" 17 | checksum: 10c0/a4bf1c831751b1fae46b437e37e8a38c0b5bd58d23230157ae210bd1e905fe509b89b7c243e63d1522d852668a6292ed730a160e21342772b4e5b7b8ea14c092 18 | languageName: node 19 | linkType: hard 20 | 21 | "@csstools/color-helpers@npm:^5.1.0": 22 | version: 5.1.0 23 | resolution: "@csstools/color-helpers@npm:5.1.0" 24 | checksum: 10c0/b7f99d2e455cf1c9b41a67a5327d5d02888cd5c8802a68b1887dffef537d9d4bc66b3c10c1e62b40bbed638b6c1d60b85a232f904ed7b39809c4029cb36567db 25 | languageName: node 26 | linkType: hard 27 | 28 | "@csstools/css-calc@npm:^2.1.3, @csstools/css-calc@npm:^2.1.4": 29 | version: 2.1.4 30 | resolution: "@csstools/css-calc@npm:2.1.4" 31 | peerDependencies: 32 | "@csstools/css-parser-algorithms": ^3.0.5 33 | "@csstools/css-tokenizer": ^3.0.4 34 | checksum: 10c0/42ce5793e55ec4d772083808a11e9fb2dfe36db3ec168713069a276b4c3882205b3507c4680224c28a5d35fe0bc2d308c77f8f2c39c7c09aad8747708eb8ddd8 35 | languageName: node 36 | linkType: hard 37 | 38 | "@csstools/css-color-parser@npm:^3.0.9": 39 | version: 3.1.0 40 | resolution: "@csstools/css-color-parser@npm:3.1.0" 41 | dependencies: 42 | "@csstools/color-helpers": "npm:^5.1.0" 43 | "@csstools/css-calc": "npm:^2.1.4" 44 | peerDependencies: 45 | "@csstools/css-parser-algorithms": ^3.0.5 46 | "@csstools/css-tokenizer": ^3.0.4 47 | checksum: 10c0/0e0c670ad54ec8ec4d9b07568b80defd83b9482191f5e8ca84ab546b7be6db5d7cc2ba7ac9fae54488b129a4be235d6183d3aab4416fec5e89351f73af4222c5 48 | languageName: node 49 | linkType: hard 50 | 51 | "@csstools/css-parser-algorithms@npm:^3.0.4": 52 | version: 3.0.5 53 | resolution: "@csstools/css-parser-algorithms@npm:3.0.5" 54 | peerDependencies: 55 | "@csstools/css-tokenizer": ^3.0.4 56 | checksum: 10c0/d9a1c888bd43849ae3437ca39251d5c95d2c8fd6b5ccdb7c45491dfd2c1cbdc3075645e80901d120e4d2c1993db9a5b2d83793b779dbbabcfb132adb142eb7f7 57 | languageName: node 58 | linkType: hard 59 | 60 | "@csstools/css-tokenizer@npm:^3.0.3": 61 | version: 3.0.4 62 | resolution: "@csstools/css-tokenizer@npm:3.0.4" 63 | checksum: 10c0/3b589f8e9942075a642213b389bab75a2d50d05d203727fcdac6827648a5572674caff07907eff3f9a2389d86a4ee47308fafe4f8588f4a77b7167c588d2559f 64 | languageName: node 65 | linkType: hard 66 | 67 | "@esbuild/aix-ppc64@npm:0.27.1": 68 | version: 0.27.1 69 | resolution: "@esbuild/aix-ppc64@npm:0.27.1" 70 | conditions: os=aix & cpu=ppc64 71 | languageName: node 72 | linkType: hard 73 | 74 | "@esbuild/android-arm64@npm:0.27.1": 75 | version: 0.27.1 76 | resolution: "@esbuild/android-arm64@npm:0.27.1" 77 | conditions: os=android & cpu=arm64 78 | languageName: node 79 | linkType: hard 80 | 81 | "@esbuild/android-arm@npm:0.27.1": 82 | version: 0.27.1 83 | resolution: "@esbuild/android-arm@npm:0.27.1" 84 | conditions: os=android & cpu=arm 85 | languageName: node 86 | linkType: hard 87 | 88 | "@esbuild/android-x64@npm:0.27.1": 89 | version: 0.27.1 90 | resolution: "@esbuild/android-x64@npm:0.27.1" 91 | conditions: os=android & cpu=x64 92 | languageName: node 93 | linkType: hard 94 | 95 | "@esbuild/darwin-arm64@npm:0.27.1": 96 | version: 0.27.1 97 | resolution: "@esbuild/darwin-arm64@npm:0.27.1" 98 | conditions: os=darwin & cpu=arm64 99 | languageName: node 100 | linkType: hard 101 | 102 | "@esbuild/darwin-x64@npm:0.27.1": 103 | version: 0.27.1 104 | resolution: "@esbuild/darwin-x64@npm:0.27.1" 105 | conditions: os=darwin & cpu=x64 106 | languageName: node 107 | linkType: hard 108 | 109 | "@esbuild/freebsd-arm64@npm:0.27.1": 110 | version: 0.27.1 111 | resolution: "@esbuild/freebsd-arm64@npm:0.27.1" 112 | conditions: os=freebsd & cpu=arm64 113 | languageName: node 114 | linkType: hard 115 | 116 | "@esbuild/freebsd-x64@npm:0.27.1": 117 | version: 0.27.1 118 | resolution: "@esbuild/freebsd-x64@npm:0.27.1" 119 | conditions: os=freebsd & cpu=x64 120 | languageName: node 121 | linkType: hard 122 | 123 | "@esbuild/linux-arm64@npm:0.27.1": 124 | version: 0.27.1 125 | resolution: "@esbuild/linux-arm64@npm:0.27.1" 126 | conditions: os=linux & cpu=arm64 127 | languageName: node 128 | linkType: hard 129 | 130 | "@esbuild/linux-arm@npm:0.27.1": 131 | version: 0.27.1 132 | resolution: "@esbuild/linux-arm@npm:0.27.1" 133 | conditions: os=linux & cpu=arm 134 | languageName: node 135 | linkType: hard 136 | 137 | "@esbuild/linux-ia32@npm:0.27.1": 138 | version: 0.27.1 139 | resolution: "@esbuild/linux-ia32@npm:0.27.1" 140 | conditions: os=linux & cpu=ia32 141 | languageName: node 142 | linkType: hard 143 | 144 | "@esbuild/linux-loong64@npm:0.27.1": 145 | version: 0.27.1 146 | resolution: "@esbuild/linux-loong64@npm:0.27.1" 147 | conditions: os=linux & cpu=loong64 148 | languageName: node 149 | linkType: hard 150 | 151 | "@esbuild/linux-mips64el@npm:0.27.1": 152 | version: 0.27.1 153 | resolution: "@esbuild/linux-mips64el@npm:0.27.1" 154 | conditions: os=linux & cpu=mips64el 155 | languageName: node 156 | linkType: hard 157 | 158 | "@esbuild/linux-ppc64@npm:0.27.1": 159 | version: 0.27.1 160 | resolution: "@esbuild/linux-ppc64@npm:0.27.1" 161 | conditions: os=linux & cpu=ppc64 162 | languageName: node 163 | linkType: hard 164 | 165 | "@esbuild/linux-riscv64@npm:0.27.1": 166 | version: 0.27.1 167 | resolution: "@esbuild/linux-riscv64@npm:0.27.1" 168 | conditions: os=linux & cpu=riscv64 169 | languageName: node 170 | linkType: hard 171 | 172 | "@esbuild/linux-s390x@npm:0.27.1": 173 | version: 0.27.1 174 | resolution: "@esbuild/linux-s390x@npm:0.27.1" 175 | conditions: os=linux & cpu=s390x 176 | languageName: node 177 | linkType: hard 178 | 179 | "@esbuild/linux-x64@npm:0.27.1": 180 | version: 0.27.1 181 | resolution: "@esbuild/linux-x64@npm:0.27.1" 182 | conditions: os=linux & cpu=x64 183 | languageName: node 184 | linkType: hard 185 | 186 | "@esbuild/netbsd-arm64@npm:0.27.1": 187 | version: 0.27.1 188 | resolution: "@esbuild/netbsd-arm64@npm:0.27.1" 189 | conditions: os=netbsd & cpu=arm64 190 | languageName: node 191 | linkType: hard 192 | 193 | "@esbuild/netbsd-x64@npm:0.27.1": 194 | version: 0.27.1 195 | resolution: "@esbuild/netbsd-x64@npm:0.27.1" 196 | conditions: os=netbsd & cpu=x64 197 | languageName: node 198 | linkType: hard 199 | 200 | "@esbuild/openbsd-arm64@npm:0.27.1": 201 | version: 0.27.1 202 | resolution: "@esbuild/openbsd-arm64@npm:0.27.1" 203 | conditions: os=openbsd & cpu=arm64 204 | languageName: node 205 | linkType: hard 206 | 207 | "@esbuild/openbsd-x64@npm:0.27.1": 208 | version: 0.27.1 209 | resolution: "@esbuild/openbsd-x64@npm:0.27.1" 210 | conditions: os=openbsd & cpu=x64 211 | languageName: node 212 | linkType: hard 213 | 214 | "@esbuild/openharmony-arm64@npm:0.27.1": 215 | version: 0.27.1 216 | resolution: "@esbuild/openharmony-arm64@npm:0.27.1" 217 | conditions: os=openharmony & cpu=arm64 218 | languageName: node 219 | linkType: hard 220 | 221 | "@esbuild/sunos-x64@npm:0.27.1": 222 | version: 0.27.1 223 | resolution: "@esbuild/sunos-x64@npm:0.27.1" 224 | conditions: os=sunos & cpu=x64 225 | languageName: node 226 | linkType: hard 227 | 228 | "@esbuild/win32-arm64@npm:0.27.1": 229 | version: 0.27.1 230 | resolution: "@esbuild/win32-arm64@npm:0.27.1" 231 | conditions: os=win32 & cpu=arm64 232 | languageName: node 233 | linkType: hard 234 | 235 | "@esbuild/win32-ia32@npm:0.27.1": 236 | version: 0.27.1 237 | resolution: "@esbuild/win32-ia32@npm:0.27.1" 238 | conditions: os=win32 & cpu=ia32 239 | languageName: node 240 | linkType: hard 241 | 242 | "@esbuild/win32-x64@npm:0.27.1": 243 | version: 0.27.1 244 | resolution: "@esbuild/win32-x64@npm:0.27.1" 245 | conditions: os=win32 & cpu=x64 246 | languageName: node 247 | linkType: hard 248 | 249 | "@fastify/ajv-compiler@npm:^4.0.0": 250 | version: 4.0.5 251 | resolution: "@fastify/ajv-compiler@npm:4.0.5" 252 | dependencies: 253 | ajv: "npm:^8.12.0" 254 | ajv-formats: "npm:^3.0.1" 255 | fast-uri: "npm:^3.0.0" 256 | checksum: 10c0/b701602c5fad35d1327a6ebda530ca5ba2c7728223cd214b2b24af7cb2522c864b6cbbe77335ddd6a55d03f76899fb009386da783121b7ece136feb7ea937e13 257 | languageName: node 258 | linkType: hard 259 | 260 | "@fastify/cors@npm:^11.2.0": 261 | version: 11.2.0 262 | resolution: "@fastify/cors@npm:11.2.0" 263 | dependencies: 264 | fastify-plugin: "npm:^5.0.0" 265 | toad-cache: "npm:^3.7.0" 266 | checksum: 10c0/a3c4f20041196fe6c1f807a4600e9a9842f6984dc7bf362e068048a40d643e106a5679a4f58ee2cf9afb9edddbfd546477f97ed3106ac188dc704fd975cea7f9 267 | languageName: node 268 | linkType: hard 269 | 270 | "@fastify/error@npm:^4.0.0": 271 | version: 4.2.0 272 | resolution: "@fastify/error@npm:4.2.0" 273 | checksum: 10c0/8bdafe95b368a71dfc5644ef22e0a2412dfbb2f300cf4658fdbd9035c96d7c034c53fd7d38e1150437d9cf7a2d75e6bd05e458cf9ba5f2e47e527df8a5e0bd4e 274 | languageName: node 275 | linkType: hard 276 | 277 | "@fastify/fast-json-stringify-compiler@npm:^5.0.0": 278 | version: 5.0.3 279 | resolution: "@fastify/fast-json-stringify-compiler@npm:5.0.3" 280 | dependencies: 281 | fast-json-stringify: "npm:^6.0.0" 282 | checksum: 10c0/1f0e33c973fc228de44d997a8a1a43e883a580a8c971773bb9cb2375b0114694f81b47c52ac7e788eb6372d1f3dfc10be3176bad354a80d502d8b26a93dbc6c9 283 | languageName: node 284 | linkType: hard 285 | 286 | "@fastify/forwarded@npm:^3.0.0": 287 | version: 3.0.1 288 | resolution: "@fastify/forwarded@npm:3.0.1" 289 | checksum: 10c0/fad9f7fb7ff4bf2f8ba782f79d46de190469817ed1bd55dc789927c381a38e63b53ab8c127d9444d703a449c5393529533bea365a25f6eb85a5ecbc78460be2a 290 | languageName: node 291 | linkType: hard 292 | 293 | "@fastify/merge-json-schemas@npm:^0.2.0": 294 | version: 0.2.1 295 | resolution: "@fastify/merge-json-schemas@npm:0.2.1" 296 | dependencies: 297 | dequal: "npm:^2.0.3" 298 | checksum: 10c0/dfa884a8f62d53f71de273fdcd0e501b213367767a7d8c522ae87ba6fb571b3eea85175d6e019036d7c0c5419be60305abe54899b9459f76ed5333358699efcb 299 | languageName: node 300 | linkType: hard 301 | 302 | "@fastify/proxy-addr@npm:^5.0.0": 303 | version: 5.1.0 304 | resolution: "@fastify/proxy-addr@npm:5.1.0" 305 | dependencies: 306 | "@fastify/forwarded": "npm:^3.0.0" 307 | ipaddr.js: "npm:^2.1.0" 308 | checksum: 10c0/d9167e848086cb66a0ae8b008eb6a79e9ae0e17c3e8697a3a22b23152376e22843bea6642a2c07eba5460faa786ebda6157dfa6537ac7b733f758428cd51988b 309 | languageName: node 310 | linkType: hard 311 | 312 | "@isaacs/balanced-match@npm:^4.0.1": 313 | version: 4.0.1 314 | resolution: "@isaacs/balanced-match@npm:4.0.1" 315 | checksum: 10c0/7da011805b259ec5c955f01cee903da72ad97c5e6f01ca96197267d3f33103d5b2f8a1af192140f3aa64526c593c8d098ae366c2b11f7f17645d12387c2fd420 316 | languageName: node 317 | linkType: hard 318 | 319 | "@isaacs/brace-expansion@npm:^5.0.0": 320 | version: 5.0.0 321 | resolution: "@isaacs/brace-expansion@npm:5.0.0" 322 | dependencies: 323 | "@isaacs/balanced-match": "npm:^4.0.1" 324 | checksum: 10c0/b4d4812f4be53afc2c5b6c545001ff7a4659af68d4484804e9d514e183d20269bb81def8682c01a22b17c4d6aed14292c8494f7d2ac664e547101c1a905aa977 325 | languageName: node 326 | linkType: hard 327 | 328 | "@isaacs/fs-minipass@npm:^4.0.0": 329 | version: 4.0.1 330 | resolution: "@isaacs/fs-minipass@npm:4.0.1" 331 | dependencies: 332 | minipass: "npm:^7.0.4" 333 | checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 334 | languageName: node 335 | linkType: hard 336 | 337 | "@npmcli/agent@npm:^4.0.0": 338 | version: 4.0.0 339 | resolution: "@npmcli/agent@npm:4.0.0" 340 | dependencies: 341 | agent-base: "npm:^7.1.0" 342 | http-proxy-agent: "npm:^7.0.0" 343 | https-proxy-agent: "npm:^7.0.1" 344 | lru-cache: "npm:^11.2.1" 345 | socks-proxy-agent: "npm:^8.0.3" 346 | checksum: 10c0/f7b5ce0f3dd42c3f8c6546e8433573d8049f67ef11ec22aa4704bc41483122f68bf97752e06302c455ead667af5cb753e6a09bff06632bc465c1cfd4c4b75a53 347 | languageName: node 348 | linkType: hard 349 | 350 | "@npmcli/fs@npm:^5.0.0": 351 | version: 5.0.0 352 | resolution: "@npmcli/fs@npm:5.0.0" 353 | dependencies: 354 | semver: "npm:^7.3.5" 355 | checksum: 10c0/26e376d780f60ff16e874a0ac9bc3399186846baae0b6e1352286385ac134d900cc5dafaded77f38d77f86898fc923ae1cee9d7399f0275b1aa24878915d722b 356 | languageName: node 357 | linkType: hard 358 | 359 | "@pinojs/redact@npm:^0.4.0": 360 | version: 0.4.0 361 | resolution: "@pinojs/redact@npm:0.4.0" 362 | checksum: 10c0/4b311ba17ee0cf154ff9c39eb063ec04cd0d0017cb3750efcdf06c2d485df3e1095e13e872175993568c5568c23e4508dd877c981bbc9c5ae5e384d569efcdff 363 | languageName: node 364 | linkType: hard 365 | 366 | "@trendgetter/api@workspace:packages/server": 367 | version: 0.0.0-use.local 368 | resolution: "@trendgetter/api@workspace:packages/server" 369 | dependencies: 370 | "@fastify/cors": "npm:^11.2.0" 371 | "@types/node": "npm:^25.0.2" 372 | dotenv: "npm:^17.2.3" 373 | fastify: "npm:^5.6.2" 374 | tsx: "npm:^4.21.0" 375 | typescript: "npm:^5.9.3" 376 | languageName: unknown 377 | linkType: soft 378 | 379 | "@trendgetter/core@workspace:packages/core": 380 | version: 0.0.0-use.local 381 | resolution: "@trendgetter/core@workspace:packages/core" 382 | dependencies: 383 | "@types/jsdom": "npm:^27.0.0" 384 | "@types/node": "npm:^25.0.2" 385 | axios: "npm:^1.13.2" 386 | jsdom: "npm:^26.1.0" 387 | playwright: "npm:^1.57.0" 388 | typescript: "npm:^5.9.3" 389 | languageName: unknown 390 | linkType: soft 391 | 392 | "@types/jsdom@npm:^27.0.0": 393 | version: 27.0.0 394 | resolution: "@types/jsdom@npm:27.0.0" 395 | dependencies: 396 | "@types/node": "npm:*" 397 | "@types/tough-cookie": "npm:*" 398 | parse5: "npm:^7.0.0" 399 | checksum: 10c0/1ec7ff7177e1f7266e51279f07f3cd013e1713766b01eebceac783061675b31c672a47b0a508dcbaf040f7f22d90405858378c6c5358991989fbe8b95adde354 400 | languageName: node 401 | linkType: hard 402 | 403 | "@types/node@npm:*": 404 | version: 25.0.1 405 | resolution: "@types/node@npm:25.0.1" 406 | dependencies: 407 | undici-types: "npm:~7.16.0" 408 | checksum: 10c0/1d5ca9f240d0cf8e43d5281c0e6ee96fb22d37dc2e5ef52c6ca71de47957a6128e124990cedf5b14c03d0250737bd78ad370d93bcf1729a75ca4e54384fdd51a 409 | languageName: node 410 | linkType: hard 411 | 412 | "@types/node@npm:^25.0.2": 413 | version: 25.0.2 414 | resolution: "@types/node@npm:25.0.2" 415 | dependencies: 416 | undici-types: "npm:~7.16.0" 417 | checksum: 10c0/12c4044bf2e46ba3d313ddf6256ee3c88e336a62d129fe788eeab8ff2631b3df51eb31ade4cdc04552fbe51e285f0663c49b60c78acd31da2b9f2c86a84347e3 418 | languageName: node 419 | linkType: hard 420 | 421 | "@types/tough-cookie@npm:*": 422 | version: 4.0.5 423 | resolution: "@types/tough-cookie@npm:4.0.5" 424 | checksum: 10c0/68c6921721a3dcb40451543db2174a145ef915bc8bcbe7ad4e59194a0238e776e782b896c7a59f4b93ac6acefca9161fccb31d1ce3b3445cb6faa467297fb473 425 | languageName: node 426 | linkType: hard 427 | 428 | "abbrev@npm:^4.0.0": 429 | version: 4.0.0 430 | resolution: "abbrev@npm:4.0.0" 431 | checksum: 10c0/b4cc16935235e80702fc90192e349e32f8ef0ed151ef506aa78c81a7c455ec18375c4125414b99f84b2e055199d66383e787675f0bcd87da7a4dbd59f9eac1d5 432 | languageName: node 433 | linkType: hard 434 | 435 | "abstract-logging@npm:^2.0.1": 436 | version: 2.0.1 437 | resolution: "abstract-logging@npm:2.0.1" 438 | checksum: 10c0/304879d9babcf6772260e5ddde632e6428e1f42f7a7a116d4689e97ad813a20e0ec2dd1e0a122f3617557f40091b9ca85735de4b48c17a2041268cb47b3f8ef1 439 | languageName: node 440 | linkType: hard 441 | 442 | "agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": 443 | version: 7.1.4 444 | resolution: "agent-base@npm:7.1.4" 445 | checksum: 10c0/c2c9ab7599692d594b6a161559ada307b7a624fa4c7b03e3afdb5a5e31cd0e53269115b620fcab024c5ac6a6f37fa5eb2e004f076ad30f5f7e6b8b671f7b35fe 446 | languageName: node 447 | linkType: hard 448 | 449 | "ajv-formats@npm:^3.0.1": 450 | version: 3.0.1 451 | resolution: "ajv-formats@npm:3.0.1" 452 | dependencies: 453 | ajv: "npm:^8.0.0" 454 | peerDependencies: 455 | ajv: ^8.0.0 456 | peerDependenciesMeta: 457 | ajv: 458 | optional: true 459 | checksum: 10c0/168d6bca1ea9f163b41c8147bae537e67bd963357a5488a1eaf3abe8baa8eec806d4e45f15b10767e6020679315c7e1e5e6803088dfb84efa2b4e9353b83dd0a 460 | languageName: node 461 | linkType: hard 462 | 463 | "ajv@npm:^8.0.0, ajv@npm:^8.12.0": 464 | version: 8.17.1 465 | resolution: "ajv@npm:8.17.1" 466 | dependencies: 467 | fast-deep-equal: "npm:^3.1.3" 468 | fast-uri: "npm:^3.0.1" 469 | json-schema-traverse: "npm:^1.0.0" 470 | require-from-string: "npm:^2.0.2" 471 | checksum: 10c0/ec3ba10a573c6b60f94639ffc53526275917a2df6810e4ab5a6b959d87459f9ef3f00d5e7865b82677cb7d21590355b34da14d1d0b9c32d75f95a187e76fff35 472 | languageName: node 473 | linkType: hard 474 | 475 | "async-function@npm:^1.0.0": 476 | version: 1.0.0 477 | resolution: "async-function@npm:1.0.0" 478 | checksum: 10c0/669a32c2cb7e45091330c680e92eaeb791bc1d4132d827591e499cd1f776ff5a873e77e5f92d0ce795a8d60f10761dec9ddfe7225a5de680f5d357f67b1aac73 479 | languageName: node 480 | linkType: hard 481 | 482 | "async-generator-function@npm:^1.0.0": 483 | version: 1.0.0 484 | resolution: "async-generator-function@npm:1.0.0" 485 | checksum: 10c0/2c50ef856c543ad500d8d8777d347e3c1ba623b93e99c9263ecc5f965c1b12d2a140e2ab6e43c3d0b85366110696f28114649411cbcd10b452a92a2318394186 486 | languageName: node 487 | linkType: hard 488 | 489 | "asynckit@npm:^0.4.0": 490 | version: 0.4.0 491 | resolution: "asynckit@npm:0.4.0" 492 | checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d 493 | languageName: node 494 | linkType: hard 495 | 496 | "atomic-sleep@npm:^1.0.0": 497 | version: 1.0.0 498 | resolution: "atomic-sleep@npm:1.0.0" 499 | checksum: 10c0/e329a6665512736a9bbb073e1761b4ec102f7926cce35037753146a9db9c8104f5044c1662e4a863576ce544fb8be27cd2be6bc8c1a40147d03f31eb1cfb6e8a 500 | languageName: node 501 | linkType: hard 502 | 503 | "avvio@npm:^9.0.0": 504 | version: 9.1.0 505 | resolution: "avvio@npm:9.1.0" 506 | dependencies: 507 | "@fastify/error": "npm:^4.0.0" 508 | fastq: "npm:^1.17.1" 509 | checksum: 10c0/bdc294a7e8f38e1e21f9d338d97d7240025db54f1005fc419cfe0499a35edf2276ab1fe91135739faa3a9437358ec6912d5a56f23361b061880333cb4f1c7884 510 | languageName: node 511 | linkType: hard 512 | 513 | "axios@npm:^1.13.2": 514 | version: 1.13.2 515 | resolution: "axios@npm:1.13.2" 516 | dependencies: 517 | follow-redirects: "npm:^1.15.6" 518 | form-data: "npm:^4.0.4" 519 | proxy-from-env: "npm:^1.1.0" 520 | checksum: 10c0/e8a42e37e5568ae9c7a28c348db0e8cf3e43d06fcbef73f0048669edfe4f71219664da7b6cc991b0c0f01c28a48f037c515263cb79be1f1ae8ff034cd813867b 521 | languageName: node 522 | linkType: hard 523 | 524 | "cacache@npm:^20.0.1": 525 | version: 20.0.3 526 | resolution: "cacache@npm:20.0.3" 527 | dependencies: 528 | "@npmcli/fs": "npm:^5.0.0" 529 | fs-minipass: "npm:^3.0.0" 530 | glob: "npm:^13.0.0" 531 | lru-cache: "npm:^11.1.0" 532 | minipass: "npm:^7.0.3" 533 | minipass-collect: "npm:^2.0.1" 534 | minipass-flush: "npm:^1.0.5" 535 | minipass-pipeline: "npm:^1.2.4" 536 | p-map: "npm:^7.0.2" 537 | ssri: "npm:^13.0.0" 538 | unique-filename: "npm:^5.0.0" 539 | checksum: 10c0/c7da1ca694d20e8f8aedabd21dc11518f809a7d2b59aa76a1fc655db5a9e62379e465c157ddd2afe34b19230808882288effa6911b2de26a088a6d5645123462 540 | languageName: node 541 | linkType: hard 542 | 543 | "call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": 544 | version: 1.0.2 545 | resolution: "call-bind-apply-helpers@npm:1.0.2" 546 | dependencies: 547 | es-errors: "npm:^1.3.0" 548 | function-bind: "npm:^1.1.2" 549 | checksum: 10c0/47bd9901d57b857590431243fea704ff18078b16890a6b3e021e12d279bbf211d039155e27d7566b374d49ee1f8189344bac9833dec7a20cdec370506361c938 550 | languageName: node 551 | linkType: hard 552 | 553 | "chownr@npm:^3.0.0": 554 | version: 3.0.0 555 | resolution: "chownr@npm:3.0.0" 556 | checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 557 | languageName: node 558 | linkType: hard 559 | 560 | "combined-stream@npm:^1.0.8": 561 | version: 1.0.8 562 | resolution: "combined-stream@npm:1.0.8" 563 | dependencies: 564 | delayed-stream: "npm:~1.0.0" 565 | checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 566 | languageName: node 567 | linkType: hard 568 | 569 | "cookie@npm:^1.0.1": 570 | version: 1.1.1 571 | resolution: "cookie@npm:1.1.1" 572 | checksum: 10c0/79c4ddc0fcad9c4f045f826f42edf54bcc921a29586a4558b0898277fa89fb47be95bc384c2253f493af7b29500c830da28341274527328f18eba9f58afa112c 573 | languageName: node 574 | linkType: hard 575 | 576 | "cssstyle@npm:^4.2.1": 577 | version: 4.6.0 578 | resolution: "cssstyle@npm:4.6.0" 579 | dependencies: 580 | "@asamuzakjp/css-color": "npm:^3.2.0" 581 | rrweb-cssom: "npm:^0.8.0" 582 | checksum: 10c0/71add1b0ffafa1bedbef6855db6189b9523d3320e015a0bf3fbd504760efb9a81e1f1a225228d5fa892ee58e56d06994ca372e7f4e461cda7c4c9985fe075f65 583 | languageName: node 584 | linkType: hard 585 | 586 | "data-urls@npm:^5.0.0": 587 | version: 5.0.0 588 | resolution: "data-urls@npm:5.0.0" 589 | dependencies: 590 | whatwg-mimetype: "npm:^4.0.0" 591 | whatwg-url: "npm:^14.0.0" 592 | checksum: 10c0/1b894d7d41c861f3a4ed2ae9b1c3f0909d4575ada02e36d3d3bc584bdd84278e20709070c79c3b3bff7ac98598cb191eb3e86a89a79ea4ee1ef360e1694f92ad 593 | languageName: node 594 | linkType: hard 595 | 596 | "debug@npm:4, debug@npm:^4.3.4": 597 | version: 4.4.3 598 | resolution: "debug@npm:4.4.3" 599 | dependencies: 600 | ms: "npm:^2.1.3" 601 | peerDependenciesMeta: 602 | supports-color: 603 | optional: true 604 | checksum: 10c0/d79136ec6c83ecbefd0f6a5593da6a9c91ec4d7ddc4b54c883d6e71ec9accb5f67a1a5e96d00a328196b5b5c86d365e98d8a3a70856aaf16b4e7b1985e67f5a6 605 | languageName: node 606 | linkType: hard 607 | 608 | "decimal.js@npm:^10.5.0": 609 | version: 10.6.0 610 | resolution: "decimal.js@npm:10.6.0" 611 | checksum: 10c0/07d69fbcc54167a340d2d97de95f546f9ff1f69d2b45a02fd7a5292412df3cd9eb7e23065e532a318f5474a2e1bccf8392fdf0443ef467f97f3bf8cb0477e5aa 612 | languageName: node 613 | linkType: hard 614 | 615 | "delayed-stream@npm:~1.0.0": 616 | version: 1.0.0 617 | resolution: "delayed-stream@npm:1.0.0" 618 | checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 619 | languageName: node 620 | linkType: hard 621 | 622 | "dequal@npm:^2.0.3": 623 | version: 2.0.3 624 | resolution: "dequal@npm:2.0.3" 625 | checksum: 10c0/f98860cdf58b64991ae10205137c0e97d384c3a4edc7f807603887b7c4b850af1224a33d88012009f150861cbee4fa2d322c4cc04b9313bee312e47f6ecaa888 626 | languageName: node 627 | linkType: hard 628 | 629 | "dotenv@npm:^17.2.3": 630 | version: 17.2.3 631 | resolution: "dotenv@npm:17.2.3" 632 | checksum: 10c0/c884403209f713214a1b64d4d1defa4934c2aa5b0002f5a670ae298a51e3c3ad3ba79dfee2f8df49f01ae74290fcd9acdb1ab1d09c7bfb42b539036108bb2ba0 633 | languageName: node 634 | linkType: hard 635 | 636 | "dunder-proto@npm:^1.0.1": 637 | version: 1.0.1 638 | resolution: "dunder-proto@npm:1.0.1" 639 | dependencies: 640 | call-bind-apply-helpers: "npm:^1.0.1" 641 | es-errors: "npm:^1.3.0" 642 | gopd: "npm:^1.2.0" 643 | checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 644 | languageName: node 645 | linkType: hard 646 | 647 | "encoding@npm:^0.1.13": 648 | version: 0.1.13 649 | resolution: "encoding@npm:0.1.13" 650 | dependencies: 651 | iconv-lite: "npm:^0.6.2" 652 | checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 653 | languageName: node 654 | linkType: hard 655 | 656 | "entities@npm:^6.0.0": 657 | version: 6.0.1 658 | resolution: "entities@npm:6.0.1" 659 | checksum: 10c0/ed836ddac5acb34341094eb495185d527bd70e8632b6c0d59548cbfa23defdbae70b96f9a405c82904efa421230b5b3fd2283752447d737beffd3f3e6ee74414 660 | languageName: node 661 | linkType: hard 662 | 663 | "env-paths@npm:^2.2.0": 664 | version: 2.2.1 665 | resolution: "env-paths@npm:2.2.1" 666 | checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 667 | languageName: node 668 | linkType: hard 669 | 670 | "err-code@npm:^2.0.2": 671 | version: 2.0.3 672 | resolution: "err-code@npm:2.0.3" 673 | checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 674 | languageName: node 675 | linkType: hard 676 | 677 | "es-define-property@npm:^1.0.1": 678 | version: 1.0.1 679 | resolution: "es-define-property@npm:1.0.1" 680 | checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c 681 | languageName: node 682 | linkType: hard 683 | 684 | "es-errors@npm:^1.3.0": 685 | version: 1.3.0 686 | resolution: "es-errors@npm:1.3.0" 687 | checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 688 | languageName: node 689 | linkType: hard 690 | 691 | "es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": 692 | version: 1.1.1 693 | resolution: "es-object-atoms@npm:1.1.1" 694 | dependencies: 695 | es-errors: "npm:^1.3.0" 696 | checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c 697 | languageName: node 698 | linkType: hard 699 | 700 | "es-set-tostringtag@npm:^2.1.0": 701 | version: 2.1.0 702 | resolution: "es-set-tostringtag@npm:2.1.0" 703 | dependencies: 704 | es-errors: "npm:^1.3.0" 705 | get-intrinsic: "npm:^1.2.6" 706 | has-tostringtag: "npm:^1.0.2" 707 | hasown: "npm:^2.0.2" 708 | checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af 709 | languageName: node 710 | linkType: hard 711 | 712 | "esbuild@npm:~0.27.0": 713 | version: 0.27.1 714 | resolution: "esbuild@npm:0.27.1" 715 | dependencies: 716 | "@esbuild/aix-ppc64": "npm:0.27.1" 717 | "@esbuild/android-arm": "npm:0.27.1" 718 | "@esbuild/android-arm64": "npm:0.27.1" 719 | "@esbuild/android-x64": "npm:0.27.1" 720 | "@esbuild/darwin-arm64": "npm:0.27.1" 721 | "@esbuild/darwin-x64": "npm:0.27.1" 722 | "@esbuild/freebsd-arm64": "npm:0.27.1" 723 | "@esbuild/freebsd-x64": "npm:0.27.1" 724 | "@esbuild/linux-arm": "npm:0.27.1" 725 | "@esbuild/linux-arm64": "npm:0.27.1" 726 | "@esbuild/linux-ia32": "npm:0.27.1" 727 | "@esbuild/linux-loong64": "npm:0.27.1" 728 | "@esbuild/linux-mips64el": "npm:0.27.1" 729 | "@esbuild/linux-ppc64": "npm:0.27.1" 730 | "@esbuild/linux-riscv64": "npm:0.27.1" 731 | "@esbuild/linux-s390x": "npm:0.27.1" 732 | "@esbuild/linux-x64": "npm:0.27.1" 733 | "@esbuild/netbsd-arm64": "npm:0.27.1" 734 | "@esbuild/netbsd-x64": "npm:0.27.1" 735 | "@esbuild/openbsd-arm64": "npm:0.27.1" 736 | "@esbuild/openbsd-x64": "npm:0.27.1" 737 | "@esbuild/openharmony-arm64": "npm:0.27.1" 738 | "@esbuild/sunos-x64": "npm:0.27.1" 739 | "@esbuild/win32-arm64": "npm:0.27.1" 740 | "@esbuild/win32-ia32": "npm:0.27.1" 741 | "@esbuild/win32-x64": "npm:0.27.1" 742 | dependenciesMeta: 743 | "@esbuild/aix-ppc64": 744 | optional: true 745 | "@esbuild/android-arm": 746 | optional: true 747 | "@esbuild/android-arm64": 748 | optional: true 749 | "@esbuild/android-x64": 750 | optional: true 751 | "@esbuild/darwin-arm64": 752 | optional: true 753 | "@esbuild/darwin-x64": 754 | optional: true 755 | "@esbuild/freebsd-arm64": 756 | optional: true 757 | "@esbuild/freebsd-x64": 758 | optional: true 759 | "@esbuild/linux-arm": 760 | optional: true 761 | "@esbuild/linux-arm64": 762 | optional: true 763 | "@esbuild/linux-ia32": 764 | optional: true 765 | "@esbuild/linux-loong64": 766 | optional: true 767 | "@esbuild/linux-mips64el": 768 | optional: true 769 | "@esbuild/linux-ppc64": 770 | optional: true 771 | "@esbuild/linux-riscv64": 772 | optional: true 773 | "@esbuild/linux-s390x": 774 | optional: true 775 | "@esbuild/linux-x64": 776 | optional: true 777 | "@esbuild/netbsd-arm64": 778 | optional: true 779 | "@esbuild/netbsd-x64": 780 | optional: true 781 | "@esbuild/openbsd-arm64": 782 | optional: true 783 | "@esbuild/openbsd-x64": 784 | optional: true 785 | "@esbuild/openharmony-arm64": 786 | optional: true 787 | "@esbuild/sunos-x64": 788 | optional: true 789 | "@esbuild/win32-arm64": 790 | optional: true 791 | "@esbuild/win32-ia32": 792 | optional: true 793 | "@esbuild/win32-x64": 794 | optional: true 795 | bin: 796 | esbuild: bin/esbuild 797 | checksum: 10c0/8bfcf13a499a9e7b7da4b68273e12b453c7d7a5e39c944c2e5a4c64a0594d6df1391fc168a5353c22bc94eeae38dd9897199ddbbc4973525b0aae18186e996bd 798 | languageName: node 799 | linkType: hard 800 | 801 | "exponential-backoff@npm:^3.1.1": 802 | version: 3.1.3 803 | resolution: "exponential-backoff@npm:3.1.3" 804 | checksum: 10c0/77e3ae682b7b1f4972f563c6dbcd2b0d54ac679e62d5d32f3e5085feba20483cf28bd505543f520e287a56d4d55a28d7874299941faf637e779a1aa5994d1267 805 | languageName: node 806 | linkType: hard 807 | 808 | "fast-decode-uri-component@npm:^1.0.1": 809 | version: 1.0.1 810 | resolution: "fast-decode-uri-component@npm:1.0.1" 811 | checksum: 10c0/039d50c2e99d64f999c3f2126c23fbf75a04a4117e218a149ca0b1d2aeb8c834b7b19d643b9d35d4eabce357189a6a94085f78cf48869e6e26cc59b036284bc3 812 | languageName: node 813 | linkType: hard 814 | 815 | "fast-deep-equal@npm:^3.1.3": 816 | version: 3.1.3 817 | resolution: "fast-deep-equal@npm:3.1.3" 818 | checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 819 | languageName: node 820 | linkType: hard 821 | 822 | "fast-json-stringify@npm:^6.0.0": 823 | version: 6.1.1 824 | resolution: "fast-json-stringify@npm:6.1.1" 825 | dependencies: 826 | "@fastify/merge-json-schemas": "npm:^0.2.0" 827 | ajv: "npm:^8.12.0" 828 | ajv-formats: "npm:^3.0.1" 829 | fast-uri: "npm:^3.0.0" 830 | json-schema-ref-resolver: "npm:^3.0.0" 831 | rfdc: "npm:^1.2.0" 832 | checksum: 10c0/15bf8e1e183c1631687d40907e4330b1ae764f790fbdeedf1f2b5d75fece457a445a1a99c0ea8e8113612928e4dae32bfccd7a7a7da57555d6be893471478a7a 833 | languageName: node 834 | linkType: hard 835 | 836 | "fast-querystring@npm:^1.0.0": 837 | version: 1.1.2 838 | resolution: "fast-querystring@npm:1.1.2" 839 | dependencies: 840 | fast-decode-uri-component: "npm:^1.0.1" 841 | checksum: 10c0/e8223273a9b199722f760f5a047a77ad049a14bd444b821502cb8218f5925e3a5fffb56b64389bca73ab2ac6f1aa7aebbe4e203e5f6e53ff5978de97c0fde4e3 842 | languageName: node 843 | linkType: hard 844 | 845 | "fast-uri@npm:^3.0.0, fast-uri@npm:^3.0.1": 846 | version: 3.1.0 847 | resolution: "fast-uri@npm:3.1.0" 848 | checksum: 10c0/44364adca566f70f40d1e9b772c923138d47efeac2ae9732a872baafd77061f26b097ba2f68f0892885ad177becd065520412b8ffeec34b16c99433c5b9e2de7 849 | languageName: node 850 | linkType: hard 851 | 852 | "fastify-plugin@npm:^5.0.0": 853 | version: 5.1.0 854 | resolution: "fastify-plugin@npm:5.1.0" 855 | checksum: 10c0/61b330b8cb03a3581b796d745137499a782934abcf65dbf9a41d07248520cfd220b3ae8b16afeaf81af712e68e1ac24352895132cfeb2b372c66662c0170f365 856 | languageName: node 857 | linkType: hard 858 | 859 | "fastify@npm:^5.6.2": 860 | version: 5.6.2 861 | resolution: "fastify@npm:5.6.2" 862 | dependencies: 863 | "@fastify/ajv-compiler": "npm:^4.0.0" 864 | "@fastify/error": "npm:^4.0.0" 865 | "@fastify/fast-json-stringify-compiler": "npm:^5.0.0" 866 | "@fastify/proxy-addr": "npm:^5.0.0" 867 | abstract-logging: "npm:^2.0.1" 868 | avvio: "npm:^9.0.0" 869 | fast-json-stringify: "npm:^6.0.0" 870 | find-my-way: "npm:^9.0.0" 871 | light-my-request: "npm:^6.0.0" 872 | pino: "npm:^10.1.0" 873 | process-warning: "npm:^5.0.0" 874 | rfdc: "npm:^1.3.1" 875 | secure-json-parse: "npm:^4.0.0" 876 | semver: "npm:^7.6.0" 877 | toad-cache: "npm:^3.7.0" 878 | checksum: 10c0/a3c31316ba5db03eb14a5dc46571fe0f888d0f4569befb8a0aedebc7b24fbd6139e7b16f2bf0dad793345ad66cd5952bdffe182ee2ab0d4e4cb5f331f74a7781 879 | languageName: node 880 | linkType: hard 881 | 882 | "fastq@npm:^1.17.1": 883 | version: 1.19.1 884 | resolution: "fastq@npm:1.19.1" 885 | dependencies: 886 | reusify: "npm:^1.0.4" 887 | checksum: 10c0/ebc6e50ac7048daaeb8e64522a1ea7a26e92b3cee5cd1c7f2316cdca81ba543aa40a136b53891446ea5c3a67ec215fbaca87ad405f102dd97012f62916905630 888 | languageName: node 889 | linkType: hard 890 | 891 | "fdir@npm:^6.5.0": 892 | version: 6.5.0 893 | resolution: "fdir@npm:6.5.0" 894 | peerDependencies: 895 | picomatch: ^3 || ^4 896 | peerDependenciesMeta: 897 | picomatch: 898 | optional: true 899 | checksum: 10c0/e345083c4306b3aed6cb8ec551e26c36bab5c511e99ea4576a16750ddc8d3240e63826cc624f5ae17ad4dc82e68a253213b60d556c11bfad064b7607847ed07f 900 | languageName: node 901 | linkType: hard 902 | 903 | "find-my-way@npm:^9.0.0": 904 | version: 9.3.0 905 | resolution: "find-my-way@npm:9.3.0" 906 | dependencies: 907 | fast-deep-equal: "npm:^3.1.3" 908 | fast-querystring: "npm:^1.0.0" 909 | safe-regex2: "npm:^5.0.0" 910 | checksum: 10c0/f221bc0c70b2c2a6f9282fd3e0ac1911fcbb68ac718da043ddcefdec3b9d884a54d6ef1bf92e1b2ff83400e50f3c22141206a8ea3308bf0e9e37fd177843425d 911 | languageName: node 912 | linkType: hard 913 | 914 | "follow-redirects@npm:^1.15.6": 915 | version: 1.15.11 916 | resolution: "follow-redirects@npm:1.15.11" 917 | peerDependenciesMeta: 918 | debug: 919 | optional: true 920 | checksum: 10c0/d301f430542520a54058d4aeeb453233c564aaccac835d29d15e050beb33f339ad67d9bddbce01739c5dc46a6716dbe3d9d0d5134b1ca203effa11a7ef092343 921 | languageName: node 922 | linkType: hard 923 | 924 | "form-data@npm:^4.0.4": 925 | version: 4.0.5 926 | resolution: "form-data@npm:4.0.5" 927 | dependencies: 928 | asynckit: "npm:^0.4.0" 929 | combined-stream: "npm:^1.0.8" 930 | es-set-tostringtag: "npm:^2.1.0" 931 | hasown: "npm:^2.0.2" 932 | mime-types: "npm:^2.1.12" 933 | checksum: 10c0/dd6b767ee0bbd6d84039db12a0fa5a2028160ffbfaba1800695713b46ae974a5f6e08b3356c3195137f8530dcd9dfcb5d5ae1eeff53d0db1e5aad863b619ce3b 934 | languageName: node 935 | linkType: hard 936 | 937 | "fs-minipass@npm:^3.0.0": 938 | version: 3.0.3 939 | resolution: "fs-minipass@npm:3.0.3" 940 | dependencies: 941 | minipass: "npm:^7.0.3" 942 | checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 943 | languageName: node 944 | linkType: hard 945 | 946 | "fsevents@npm:2.3.2": 947 | version: 2.3.2 948 | resolution: "fsevents@npm:2.3.2" 949 | dependencies: 950 | node-gyp: "npm:latest" 951 | checksum: 10c0/be78a3efa3e181cda3cf7a4637cb527bcebb0bd0ea0440105a3bb45b86f9245b307dc10a2507e8f4498a7d4ec349d1910f4d73e4d4495b16103106e07eee735b 952 | conditions: os=darwin 953 | languageName: node 954 | linkType: hard 955 | 956 | "fsevents@npm:~2.3.3": 957 | version: 2.3.3 958 | resolution: "fsevents@npm:2.3.3" 959 | dependencies: 960 | node-gyp: "npm:latest" 961 | checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 962 | conditions: os=darwin 963 | languageName: node 964 | linkType: hard 965 | 966 | "fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin": 967 | version: 2.3.2 968 | resolution: "fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=df0bf1" 969 | dependencies: 970 | node-gyp: "npm:latest" 971 | conditions: os=darwin 972 | languageName: node 973 | linkType: hard 974 | 975 | "fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": 976 | version: 2.3.3 977 | resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" 978 | dependencies: 979 | node-gyp: "npm:latest" 980 | conditions: os=darwin 981 | languageName: node 982 | linkType: hard 983 | 984 | "function-bind@npm:^1.1.2": 985 | version: 1.1.2 986 | resolution: "function-bind@npm:1.1.2" 987 | checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 988 | languageName: node 989 | linkType: hard 990 | 991 | "generator-function@npm:^2.0.0": 992 | version: 2.0.1 993 | resolution: "generator-function@npm:2.0.1" 994 | checksum: 10c0/8a9f59df0f01cfefafdb3b451b80555e5cf6d76487095db91ac461a0e682e4ff7a9dbce15f4ecec191e53586d59eece01949e05a4b4492879600bbbe8e28d6b8 995 | languageName: node 996 | linkType: hard 997 | 998 | "get-intrinsic@npm:^1.2.6": 999 | version: 1.3.1 1000 | resolution: "get-intrinsic@npm:1.3.1" 1001 | dependencies: 1002 | async-function: "npm:^1.0.0" 1003 | async-generator-function: "npm:^1.0.0" 1004 | call-bind-apply-helpers: "npm:^1.0.2" 1005 | es-define-property: "npm:^1.0.1" 1006 | es-errors: "npm:^1.3.0" 1007 | es-object-atoms: "npm:^1.1.1" 1008 | function-bind: "npm:^1.1.2" 1009 | generator-function: "npm:^2.0.0" 1010 | get-proto: "npm:^1.0.1" 1011 | gopd: "npm:^1.2.0" 1012 | has-symbols: "npm:^1.1.0" 1013 | hasown: "npm:^2.0.2" 1014 | math-intrinsics: "npm:^1.1.0" 1015 | checksum: 10c0/9f4ab0cf7efe0fd2c8185f52e6f637e708f3a112610c88869f8f041bb9ecc2ce44bf285dfdbdc6f4f7c277a5b88d8e94a432374d97cca22f3de7fc63795deb5d 1016 | languageName: node 1017 | linkType: hard 1018 | 1019 | "get-proto@npm:^1.0.1": 1020 | version: 1.0.1 1021 | resolution: "get-proto@npm:1.0.1" 1022 | dependencies: 1023 | dunder-proto: "npm:^1.0.1" 1024 | es-object-atoms: "npm:^1.0.0" 1025 | checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c 1026 | languageName: node 1027 | linkType: hard 1028 | 1029 | "get-tsconfig@npm:^4.7.5": 1030 | version: 4.13.0 1031 | resolution: "get-tsconfig@npm:4.13.0" 1032 | dependencies: 1033 | resolve-pkg-maps: "npm:^1.0.0" 1034 | checksum: 10c0/2c49ef8d3907047a107f229fd610386fe3b7fe9e42dfd6b42e7406499493cdda8c62e83e57e8d7a98125610774b9f604d3a0ff308d7f9de5c7ac6d1b07cb6036 1035 | languageName: node 1036 | linkType: hard 1037 | 1038 | "glob@npm:^13.0.0": 1039 | version: 13.0.0 1040 | resolution: "glob@npm:13.0.0" 1041 | dependencies: 1042 | minimatch: "npm:^10.1.1" 1043 | minipass: "npm:^7.1.2" 1044 | path-scurry: "npm:^2.0.0" 1045 | checksum: 10c0/8e2f5821f3f7c312dd102e23a15b80c79e0837a9872784293ba2e15ec73b3f3749a49a42a31bfcb4e52c84820a474e92331c2eebf18819d20308f5c33876630a 1046 | languageName: node 1047 | linkType: hard 1048 | 1049 | "gopd@npm:^1.2.0": 1050 | version: 1.2.0 1051 | resolution: "gopd@npm:1.2.0" 1052 | checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead 1053 | languageName: node 1054 | linkType: hard 1055 | 1056 | "graceful-fs@npm:^4.2.6": 1057 | version: 4.2.11 1058 | resolution: "graceful-fs@npm:4.2.11" 1059 | checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 1060 | languageName: node 1061 | linkType: hard 1062 | 1063 | "has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": 1064 | version: 1.1.0 1065 | resolution: "has-symbols@npm:1.1.0" 1066 | checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e 1067 | languageName: node 1068 | linkType: hard 1069 | 1070 | "has-tostringtag@npm:^1.0.2": 1071 | version: 1.0.2 1072 | resolution: "has-tostringtag@npm:1.0.2" 1073 | dependencies: 1074 | has-symbols: "npm:^1.0.3" 1075 | checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c 1076 | languageName: node 1077 | linkType: hard 1078 | 1079 | "hasown@npm:^2.0.2": 1080 | version: 2.0.2 1081 | resolution: "hasown@npm:2.0.2" 1082 | dependencies: 1083 | function-bind: "npm:^1.1.2" 1084 | checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 1085 | languageName: node 1086 | linkType: hard 1087 | 1088 | "html-encoding-sniffer@npm:^4.0.0": 1089 | version: 4.0.0 1090 | resolution: "html-encoding-sniffer@npm:4.0.0" 1091 | dependencies: 1092 | whatwg-encoding: "npm:^3.1.1" 1093 | checksum: 10c0/523398055dc61ac9b34718a719cb4aa691e4166f29187e211e1607de63dc25ac7af52ca7c9aead0c4b3c0415ffecb17326396e1202e2e86ff4bca4c0ee4c6140 1094 | languageName: node 1095 | linkType: hard 1096 | 1097 | "http-cache-semantics@npm:^4.1.1": 1098 | version: 4.2.0 1099 | resolution: "http-cache-semantics@npm:4.2.0" 1100 | checksum: 10c0/45b66a945cf13ec2d1f29432277201313babf4a01d9e52f44b31ca923434083afeca03f18417f599c9ab3d0e7b618ceb21257542338b57c54b710463b4a53e37 1101 | languageName: node 1102 | linkType: hard 1103 | 1104 | "http-proxy-agent@npm:^7.0.0, http-proxy-agent@npm:^7.0.2": 1105 | version: 7.0.2 1106 | resolution: "http-proxy-agent@npm:7.0.2" 1107 | dependencies: 1108 | agent-base: "npm:^7.1.0" 1109 | debug: "npm:^4.3.4" 1110 | checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 1111 | languageName: node 1112 | linkType: hard 1113 | 1114 | "https-proxy-agent@npm:^7.0.1, https-proxy-agent@npm:^7.0.6": 1115 | version: 7.0.6 1116 | resolution: "https-proxy-agent@npm:7.0.6" 1117 | dependencies: 1118 | agent-base: "npm:^7.1.2" 1119 | debug: "npm:4" 1120 | checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac 1121 | languageName: node 1122 | linkType: hard 1123 | 1124 | "iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2": 1125 | version: 0.6.3 1126 | resolution: "iconv-lite@npm:0.6.3" 1127 | dependencies: 1128 | safer-buffer: "npm:>= 2.1.2 < 3.0.0" 1129 | checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 1130 | languageName: node 1131 | linkType: hard 1132 | 1133 | "imurmurhash@npm:^0.1.4": 1134 | version: 0.1.4 1135 | resolution: "imurmurhash@npm:0.1.4" 1136 | checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 1137 | languageName: node 1138 | linkType: hard 1139 | 1140 | "ip-address@npm:^10.0.1": 1141 | version: 10.1.0 1142 | resolution: "ip-address@npm:10.1.0" 1143 | checksum: 10c0/0103516cfa93f6433b3bd7333fa876eb21263912329bfa47010af5e16934eeeff86f3d2ae700a3744a137839ddfad62b900c7a445607884a49b5d1e32a3d7566 1144 | languageName: node 1145 | linkType: hard 1146 | 1147 | "ipaddr.js@npm:^2.1.0": 1148 | version: 2.3.0 1149 | resolution: "ipaddr.js@npm:2.3.0" 1150 | checksum: 10c0/084bab99e2f6875d7a62adc3325e1c64b038a12c9521e35fb967b5e263a8b3afb1b8884dd77c276092331f5d63298b767491e10997ef147c62da01b143780bbd 1151 | languageName: node 1152 | linkType: hard 1153 | 1154 | "is-potential-custom-element-name@npm:^1.0.1": 1155 | version: 1.0.1 1156 | resolution: "is-potential-custom-element-name@npm:1.0.1" 1157 | checksum: 10c0/b73e2f22bc863b0939941d369486d308b43d7aef1f9439705e3582bfccaa4516406865e32c968a35f97a99396dac84e2624e67b0a16b0a15086a785e16ce7db9 1158 | languageName: node 1159 | linkType: hard 1160 | 1161 | "isexe@npm:^3.1.1": 1162 | version: 3.1.1 1163 | resolution: "isexe@npm:3.1.1" 1164 | checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 1165 | languageName: node 1166 | linkType: hard 1167 | 1168 | "jsdom@npm:^26.1.0": 1169 | version: 26.1.0 1170 | resolution: "jsdom@npm:26.1.0" 1171 | dependencies: 1172 | cssstyle: "npm:^4.2.1" 1173 | data-urls: "npm:^5.0.0" 1174 | decimal.js: "npm:^10.5.0" 1175 | html-encoding-sniffer: "npm:^4.0.0" 1176 | http-proxy-agent: "npm:^7.0.2" 1177 | https-proxy-agent: "npm:^7.0.6" 1178 | is-potential-custom-element-name: "npm:^1.0.1" 1179 | nwsapi: "npm:^2.2.16" 1180 | parse5: "npm:^7.2.1" 1181 | rrweb-cssom: "npm:^0.8.0" 1182 | saxes: "npm:^6.0.0" 1183 | symbol-tree: "npm:^3.2.4" 1184 | tough-cookie: "npm:^5.1.1" 1185 | w3c-xmlserializer: "npm:^5.0.0" 1186 | webidl-conversions: "npm:^7.0.0" 1187 | whatwg-encoding: "npm:^3.1.1" 1188 | whatwg-mimetype: "npm:^4.0.0" 1189 | whatwg-url: "npm:^14.1.1" 1190 | ws: "npm:^8.18.0" 1191 | xml-name-validator: "npm:^5.0.0" 1192 | peerDependencies: 1193 | canvas: ^3.0.0 1194 | peerDependenciesMeta: 1195 | canvas: 1196 | optional: true 1197 | checksum: 10c0/5b14a5bc32ce077a06fb42d1ab95b1191afa5cbbce8859e3b96831c5143becbbcbf0511d4d4934e922d2901443ced2cdc3b734c1cf30b5f73b3e067ce457d0f4 1198 | languageName: node 1199 | linkType: hard 1200 | 1201 | "json-schema-ref-resolver@npm:^3.0.0": 1202 | version: 3.0.0 1203 | resolution: "json-schema-ref-resolver@npm:3.0.0" 1204 | dependencies: 1205 | dequal: "npm:^2.0.3" 1206 | checksum: 10c0/0b6f4b66951ac0f6864949c08317cf0b7f7ae94e8da0b94e40df3561dc1a0b77a69b669d60aa1511b06aa18469203886eb2e89fd6bb3dcf0be46c329d69b0115 1207 | languageName: node 1208 | linkType: hard 1209 | 1210 | "json-schema-traverse@npm:^1.0.0": 1211 | version: 1.0.0 1212 | resolution: "json-schema-traverse@npm:1.0.0" 1213 | checksum: 10c0/71e30015d7f3d6dc1c316d6298047c8ef98a06d31ad064919976583eb61e1018a60a0067338f0f79cabc00d84af3fcc489bd48ce8a46ea165d9541ba17fb30c6 1214 | languageName: node 1215 | linkType: hard 1216 | 1217 | "light-my-request@npm:^6.0.0": 1218 | version: 6.6.0 1219 | resolution: "light-my-request@npm:6.6.0" 1220 | dependencies: 1221 | cookie: "npm:^1.0.1" 1222 | process-warning: "npm:^4.0.0" 1223 | set-cookie-parser: "npm:^2.6.0" 1224 | checksum: 10c0/1440853cd3822ab83fbb1be4456099082dec8e9e3a4ea35c9d8d7d17a7ab98c83ad0a4c39a73a8c2b31b9ca70c57506e5b7a929495c149463ca0daca0d90dc6f 1225 | languageName: node 1226 | linkType: hard 1227 | 1228 | "lru-cache@npm:^10.4.3": 1229 | version: 10.4.3 1230 | resolution: "lru-cache@npm:10.4.3" 1231 | checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb 1232 | languageName: node 1233 | linkType: hard 1234 | 1235 | "lru-cache@npm:^11.0.0, lru-cache@npm:^11.1.0, lru-cache@npm:^11.2.1": 1236 | version: 11.2.4 1237 | resolution: "lru-cache@npm:11.2.4" 1238 | checksum: 10c0/4a24f9b17537619f9144d7b8e42cd5a225efdfd7076ebe7b5e7dc02b860a818455201e67fbf000765233fe7e339d3c8229fc815e9b58ee6ede511e07608c19b2 1239 | languageName: node 1240 | linkType: hard 1241 | 1242 | "make-fetch-happen@npm:^15.0.0": 1243 | version: 15.0.3 1244 | resolution: "make-fetch-happen@npm:15.0.3" 1245 | dependencies: 1246 | "@npmcli/agent": "npm:^4.0.0" 1247 | cacache: "npm:^20.0.1" 1248 | http-cache-semantics: "npm:^4.1.1" 1249 | minipass: "npm:^7.0.2" 1250 | minipass-fetch: "npm:^5.0.0" 1251 | minipass-flush: "npm:^1.0.5" 1252 | minipass-pipeline: "npm:^1.2.4" 1253 | negotiator: "npm:^1.0.0" 1254 | proc-log: "npm:^6.0.0" 1255 | promise-retry: "npm:^2.0.1" 1256 | ssri: "npm:^13.0.0" 1257 | checksum: 10c0/525f74915660be60b616bcbd267c4a5b59481b073ba125e45c9c3a041bb1a47a2bd0ae79d028eb6f5f95bf9851a4158423f5068539c3093621abb64027e8e461 1258 | languageName: node 1259 | linkType: hard 1260 | 1261 | "math-intrinsics@npm:^1.1.0": 1262 | version: 1.1.0 1263 | resolution: "math-intrinsics@npm:1.1.0" 1264 | checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f 1265 | languageName: node 1266 | linkType: hard 1267 | 1268 | "mime-db@npm:1.52.0": 1269 | version: 1.52.0 1270 | resolution: "mime-db@npm:1.52.0" 1271 | checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa 1272 | languageName: node 1273 | linkType: hard 1274 | 1275 | "mime-types@npm:^2.1.12": 1276 | version: 2.1.35 1277 | resolution: "mime-types@npm:2.1.35" 1278 | dependencies: 1279 | mime-db: "npm:1.52.0" 1280 | checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 1281 | languageName: node 1282 | linkType: hard 1283 | 1284 | "minimatch@npm:^10.1.1": 1285 | version: 10.1.1 1286 | resolution: "minimatch@npm:10.1.1" 1287 | dependencies: 1288 | "@isaacs/brace-expansion": "npm:^5.0.0" 1289 | checksum: 10c0/c85d44821c71973d636091fddbfbffe62370f5ee3caf0241c5b60c18cd289e916200acb2361b7e987558cd06896d153e25d505db9fc1e43e6b4b6752e2702902 1290 | languageName: node 1291 | linkType: hard 1292 | 1293 | "minipass-collect@npm:^2.0.1": 1294 | version: 2.0.1 1295 | resolution: "minipass-collect@npm:2.0.1" 1296 | dependencies: 1297 | minipass: "npm:^7.0.3" 1298 | checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e 1299 | languageName: node 1300 | linkType: hard 1301 | 1302 | "minipass-fetch@npm:^5.0.0": 1303 | version: 5.0.0 1304 | resolution: "minipass-fetch@npm:5.0.0" 1305 | dependencies: 1306 | encoding: "npm:^0.1.13" 1307 | minipass: "npm:^7.0.3" 1308 | minipass-sized: "npm:^1.0.3" 1309 | minizlib: "npm:^3.0.1" 1310 | dependenciesMeta: 1311 | encoding: 1312 | optional: true 1313 | checksum: 10c0/9443aab5feab190972f84b64116e54e58dd87a58e62399cae0a4a7461b80568281039b7c3a38ba96453431ebc799d1e26999e548540156216729a4967cd5ef06 1314 | languageName: node 1315 | linkType: hard 1316 | 1317 | "minipass-flush@npm:^1.0.5": 1318 | version: 1.0.5 1319 | resolution: "minipass-flush@npm:1.0.5" 1320 | dependencies: 1321 | minipass: "npm:^3.0.0" 1322 | checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd 1323 | languageName: node 1324 | linkType: hard 1325 | 1326 | "minipass-pipeline@npm:^1.2.4": 1327 | version: 1.2.4 1328 | resolution: "minipass-pipeline@npm:1.2.4" 1329 | dependencies: 1330 | minipass: "npm:^3.0.0" 1331 | checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 1332 | languageName: node 1333 | linkType: hard 1334 | 1335 | "minipass-sized@npm:^1.0.3": 1336 | version: 1.0.3 1337 | resolution: "minipass-sized@npm:1.0.3" 1338 | dependencies: 1339 | minipass: "npm:^3.0.0" 1340 | checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb 1341 | languageName: node 1342 | linkType: hard 1343 | 1344 | "minipass@npm:^3.0.0": 1345 | version: 3.3.6 1346 | resolution: "minipass@npm:3.3.6" 1347 | dependencies: 1348 | yallist: "npm:^4.0.0" 1349 | checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c 1350 | languageName: node 1351 | linkType: hard 1352 | 1353 | "minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": 1354 | version: 7.1.2 1355 | resolution: "minipass@npm:7.1.2" 1356 | checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 1357 | languageName: node 1358 | linkType: hard 1359 | 1360 | "minizlib@npm:^3.0.1, minizlib@npm:^3.1.0": 1361 | version: 3.1.0 1362 | resolution: "minizlib@npm:3.1.0" 1363 | dependencies: 1364 | minipass: "npm:^7.1.2" 1365 | checksum: 10c0/5aad75ab0090b8266069c9aabe582c021ae53eb33c6c691054a13a45db3b4f91a7fb1bd79151e6b4e9e9a86727b522527c0a06ec7d45206b745d54cd3097bcec 1366 | languageName: node 1367 | linkType: hard 1368 | 1369 | "ms@npm:^2.1.3": 1370 | version: 2.1.3 1371 | resolution: "ms@npm:2.1.3" 1372 | checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 1373 | languageName: node 1374 | linkType: hard 1375 | 1376 | "negotiator@npm:^1.0.0": 1377 | version: 1.0.0 1378 | resolution: "negotiator@npm:1.0.0" 1379 | checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b 1380 | languageName: node 1381 | linkType: hard 1382 | 1383 | "node-gyp@npm:latest": 1384 | version: 12.1.0 1385 | resolution: "node-gyp@npm:12.1.0" 1386 | dependencies: 1387 | env-paths: "npm:^2.2.0" 1388 | exponential-backoff: "npm:^3.1.1" 1389 | graceful-fs: "npm:^4.2.6" 1390 | make-fetch-happen: "npm:^15.0.0" 1391 | nopt: "npm:^9.0.0" 1392 | proc-log: "npm:^6.0.0" 1393 | semver: "npm:^7.3.5" 1394 | tar: "npm:^7.5.2" 1395 | tinyglobby: "npm:^0.2.12" 1396 | which: "npm:^6.0.0" 1397 | bin: 1398 | node-gyp: bin/node-gyp.js 1399 | checksum: 10c0/f43efea8aaf0beb6b2f6184e533edad779b2ae38062953e21951f46221dd104006cc574154f2ad4a135467a5aae92c49e84ef289311a82e08481c5df0e8dc495 1400 | languageName: node 1401 | linkType: hard 1402 | 1403 | "nopt@npm:^9.0.0": 1404 | version: 9.0.0 1405 | resolution: "nopt@npm:9.0.0" 1406 | dependencies: 1407 | abbrev: "npm:^4.0.0" 1408 | bin: 1409 | nopt: bin/nopt.js 1410 | checksum: 10c0/1822eb6f9b020ef6f7a7516d7b64a8036e09666ea55ac40416c36e4b2b343122c3cff0e2f085675f53de1d2db99a2a89a60ccea1d120bcd6a5347bf6ceb4a7fd 1411 | languageName: node 1412 | linkType: hard 1413 | 1414 | "nwsapi@npm:^2.2.16": 1415 | version: 2.2.23 1416 | resolution: "nwsapi@npm:2.2.23" 1417 | checksum: 10c0/e44bfc9246baf659581206ed716d291a1905185247795fb8a302cb09315c943a31023b4ac4d026a5eaf32b2def51d77b3d0f9ebf4f3d35f70e105fcb6447c76e 1418 | languageName: node 1419 | linkType: hard 1420 | 1421 | "on-exit-leak-free@npm:^2.1.0": 1422 | version: 2.1.2 1423 | resolution: "on-exit-leak-free@npm:2.1.2" 1424 | checksum: 10c0/faea2e1c9d696ecee919026c32be8d6a633a7ac1240b3b87e944a380e8a11dc9c95c4a1f8fb0568de7ab8db3823e790f12bda45296b1d111e341aad3922a0570 1425 | languageName: node 1426 | linkType: hard 1427 | 1428 | "p-map@npm:^7.0.2": 1429 | version: 7.0.4 1430 | resolution: "p-map@npm:7.0.4" 1431 | checksum: 10c0/a5030935d3cb2919d7e89454d1ce82141e6f9955413658b8c9403cfe379283770ed3048146b44cde168aa9e8c716505f196d5689db0ae3ce9a71521a2fef3abd 1432 | languageName: node 1433 | linkType: hard 1434 | 1435 | "parse5@npm:^7.0.0, parse5@npm:^7.2.1": 1436 | version: 7.3.0 1437 | resolution: "parse5@npm:7.3.0" 1438 | dependencies: 1439 | entities: "npm:^6.0.0" 1440 | checksum: 10c0/7fd2e4e247e85241d6f2a464d0085eed599a26d7b0a5233790c49f53473232eb85350e8133344d9b3fd58b89339e7ad7270fe1f89d28abe50674ec97b87f80b5 1441 | languageName: node 1442 | linkType: hard 1443 | 1444 | "path-scurry@npm:^2.0.0": 1445 | version: 2.0.1 1446 | resolution: "path-scurry@npm:2.0.1" 1447 | dependencies: 1448 | lru-cache: "npm:^11.0.0" 1449 | minipass: "npm:^7.1.2" 1450 | checksum: 10c0/2a16ed0e81fbc43513e245aa5763354e25e787dab0d539581a6c3f0f967461a159ed6236b2559de23aa5b88e7dc32b469b6c47568833dd142a4b24b4f5cd2620 1451 | languageName: node 1452 | linkType: hard 1453 | 1454 | "picomatch@npm:^4.0.3": 1455 | version: 4.0.3 1456 | resolution: "picomatch@npm:4.0.3" 1457 | checksum: 10c0/9582c951e95eebee5434f59e426cddd228a7b97a0161a375aed4be244bd3fe8e3a31b846808ea14ef2c8a2527a6eeab7b3946a67d5979e81694654f939473ae2 1458 | languageName: node 1459 | linkType: hard 1460 | 1461 | "pino-abstract-transport@npm:^2.0.0": 1462 | version: 2.0.0 1463 | resolution: "pino-abstract-transport@npm:2.0.0" 1464 | dependencies: 1465 | split2: "npm:^4.0.0" 1466 | checksum: 10c0/02c05b8f2ffce0d7c774c8e588f61e8b77de8ccb5f8125afd4a7325c9ea0e6af7fb78168999657712ae843e4462bb70ac550dfd6284f930ee57f17f486f25a9f 1467 | languageName: node 1468 | linkType: hard 1469 | 1470 | "pino-std-serializers@npm:^7.0.0": 1471 | version: 7.0.0 1472 | resolution: "pino-std-serializers@npm:7.0.0" 1473 | checksum: 10c0/73e694d542e8de94445a03a98396cf383306de41fd75ecc07085d57ed7a57896198508a0dec6eefad8d701044af21eb27253ccc352586a03cf0d4a0bd25b4133 1474 | languageName: node 1475 | linkType: hard 1476 | 1477 | "pino@npm:^10.1.0": 1478 | version: 10.1.0 1479 | resolution: "pino@npm:10.1.0" 1480 | dependencies: 1481 | "@pinojs/redact": "npm:^0.4.0" 1482 | atomic-sleep: "npm:^1.0.0" 1483 | on-exit-leak-free: "npm:^2.1.0" 1484 | pino-abstract-transport: "npm:^2.0.0" 1485 | pino-std-serializers: "npm:^7.0.0" 1486 | process-warning: "npm:^5.0.0" 1487 | quick-format-unescaped: "npm:^4.0.3" 1488 | real-require: "npm:^0.2.0" 1489 | safe-stable-stringify: "npm:^2.3.1" 1490 | sonic-boom: "npm:^4.0.1" 1491 | thread-stream: "npm:^3.0.0" 1492 | bin: 1493 | pino: bin.js 1494 | checksum: 10c0/49c1dd80d5f99f02bde1acf2f60cef7686948a937f751f6cb368c2868c7e82e54aeabac63a34587e16019965cbf0eb6e609edf92c439a98a0a4fcb0add277eaf 1495 | languageName: node 1496 | linkType: hard 1497 | 1498 | "playwright-core@npm:1.57.0": 1499 | version: 1.57.0 1500 | resolution: "playwright-core@npm:1.57.0" 1501 | bin: 1502 | playwright-core: cli.js 1503 | checksum: 10c0/798e35d83bf48419a8c73de20bb94d68be5dde68de23f95d80a0ebe401e3b83e29e3e84aea7894d67fa6c79d2d3d40cc5bcde3e166f657ce50987aaa2421b6a9 1504 | languageName: node 1505 | linkType: hard 1506 | 1507 | "playwright@npm:^1.57.0": 1508 | version: 1.57.0 1509 | resolution: "playwright@npm:1.57.0" 1510 | dependencies: 1511 | fsevents: "npm:2.3.2" 1512 | playwright-core: "npm:1.57.0" 1513 | dependenciesMeta: 1514 | fsevents: 1515 | optional: true 1516 | bin: 1517 | playwright: cli.js 1518 | checksum: 10c0/ab03c99a67b835bdea9059f516ad3b6e42c21025f9adaa161a4ef6bc7ca716dcba476d287140bb240d06126eb23f889a8933b8f5f1f1a56b80659d92d1358899 1519 | languageName: node 1520 | linkType: hard 1521 | 1522 | "proc-log@npm:^6.0.0": 1523 | version: 6.1.0 1524 | resolution: "proc-log@npm:6.1.0" 1525 | checksum: 10c0/4f178d4062733ead9d71a9b1ab24ebcecdfe2250916a5b1555f04fe2eda972a0ec76fbaa8df1ad9c02707add6749219d118a4fc46dc56bdfe4dde4b47d80bb82 1526 | languageName: node 1527 | linkType: hard 1528 | 1529 | "process-warning@npm:^4.0.0": 1530 | version: 4.0.1 1531 | resolution: "process-warning@npm:4.0.1" 1532 | checksum: 10c0/577a268b9fd5c3d9f6dbb4348220099391d830905642845d591e7ee8b1e45043d98b7b9826a3c1379bdd1686cdfe0f6cf349cb812affc5853b662e6a9896579e 1533 | languageName: node 1534 | linkType: hard 1535 | 1536 | "process-warning@npm:^5.0.0": 1537 | version: 5.0.0 1538 | resolution: "process-warning@npm:5.0.0" 1539 | checksum: 10c0/941f48863d368ec161e0b5890ba0c6af94170078f3d6b5e915c19b36fb59edb0dc2f8e834d25e0d375a8bf368a49d490f080508842168832b93489d17843ec29 1540 | languageName: node 1541 | linkType: hard 1542 | 1543 | "promise-retry@npm:^2.0.1": 1544 | version: 2.0.1 1545 | resolution: "promise-retry@npm:2.0.1" 1546 | dependencies: 1547 | err-code: "npm:^2.0.2" 1548 | retry: "npm:^0.12.0" 1549 | checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 1550 | languageName: node 1551 | linkType: hard 1552 | 1553 | "proxy-from-env@npm:^1.1.0": 1554 | version: 1.1.0 1555 | resolution: "proxy-from-env@npm:1.1.0" 1556 | checksum: 10c0/fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b 1557 | languageName: node 1558 | linkType: hard 1559 | 1560 | "punycode@npm:^2.3.1": 1561 | version: 2.3.1 1562 | resolution: "punycode@npm:2.3.1" 1563 | checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 1564 | languageName: node 1565 | linkType: hard 1566 | 1567 | "quick-format-unescaped@npm:^4.0.3": 1568 | version: 4.0.4 1569 | resolution: "quick-format-unescaped@npm:4.0.4" 1570 | checksum: 10c0/fe5acc6f775b172ca5b4373df26f7e4fd347975578199e7d74b2ae4077f0af05baa27d231de1e80e8f72d88275ccc6028568a7a8c9ee5e7368ace0e18eff93a4 1571 | languageName: node 1572 | linkType: hard 1573 | 1574 | "real-require@npm:^0.2.0": 1575 | version: 0.2.0 1576 | resolution: "real-require@npm:0.2.0" 1577 | checksum: 10c0/23eea5623642f0477412ef8b91acd3969015a1501ed34992ada0e3af521d3c865bb2fe4cdbfec5fe4b505f6d1ef6a03e5c3652520837a8c3b53decff7e74b6a0 1578 | languageName: node 1579 | linkType: hard 1580 | 1581 | "require-from-string@npm:^2.0.2": 1582 | version: 2.0.2 1583 | resolution: "require-from-string@npm:2.0.2" 1584 | checksum: 10c0/aaa267e0c5b022fc5fd4eef49d8285086b15f2a1c54b28240fdf03599cbd9c26049fee3eab894f2e1f6ca65e513b030a7c264201e3f005601e80c49fb2937ce2 1585 | languageName: node 1586 | linkType: hard 1587 | 1588 | "resolve-pkg-maps@npm:^1.0.0": 1589 | version: 1.0.0 1590 | resolution: "resolve-pkg-maps@npm:1.0.0" 1591 | checksum: 10c0/fb8f7bbe2ca281a73b7ef423a1cbc786fb244bd7a95cbe5c3fba25b27d327150beca8ba02f622baea65919a57e061eb5005204daa5f93ed590d9b77463a567ab 1592 | languageName: node 1593 | linkType: hard 1594 | 1595 | "ret@npm:~0.5.0": 1596 | version: 0.5.0 1597 | resolution: "ret@npm:0.5.0" 1598 | checksum: 10c0/220868b194f87bf1998e32e409086eec6b39e860c052bf267f8ad4d0131706a9773d45fd3f91acfb1a7c928fce002b694ab86fdba90bc8d4b8df68fa8645c5cc 1599 | languageName: node 1600 | linkType: hard 1601 | 1602 | "retry@npm:^0.12.0": 1603 | version: 0.12.0 1604 | resolution: "retry@npm:0.12.0" 1605 | checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe 1606 | languageName: node 1607 | linkType: hard 1608 | 1609 | "reusify@npm:^1.0.4": 1610 | version: 1.1.0 1611 | resolution: "reusify@npm:1.1.0" 1612 | checksum: 10c0/4eff0d4a5f9383566c7d7ec437b671cc51b25963bd61bf127c3f3d3f68e44a026d99b8d2f1ad344afff8d278a8fe70a8ea092650a716d22287e8bef7126bb2fa 1613 | languageName: node 1614 | linkType: hard 1615 | 1616 | "rfdc@npm:^1.2.0, rfdc@npm:^1.3.1": 1617 | version: 1.4.1 1618 | resolution: "rfdc@npm:1.4.1" 1619 | checksum: 10c0/4614e4292356cafade0b6031527eea9bc90f2372a22c012313be1dcc69a3b90c7338158b414539be863fa95bfcb2ddcd0587be696841af4e6679d85e62c060c7 1620 | languageName: node 1621 | linkType: hard 1622 | 1623 | "rrweb-cssom@npm:^0.8.0": 1624 | version: 0.8.0 1625 | resolution: "rrweb-cssom@npm:0.8.0" 1626 | checksum: 10c0/56f2bfd56733adb92c0b56e274c43f864b8dd48784d6fe946ef5ff8d438234015e59ad837fc2ad54714b6421384141c1add4eb569e72054e350d1f8a50b8ac7b 1627 | languageName: node 1628 | linkType: hard 1629 | 1630 | "safe-regex2@npm:^5.0.0": 1631 | version: 5.0.0 1632 | resolution: "safe-regex2@npm:5.0.0" 1633 | dependencies: 1634 | ret: "npm:~0.5.0" 1635 | checksum: 10c0/83d5b1b60a5a97cb71a6e615518ec4a47761b3600aba389089be59a417498185250db2368080afc2f5e91237d68809c6c634b97a2e1cc8bd56a4c7eef2eeb6cf 1636 | languageName: node 1637 | linkType: hard 1638 | 1639 | "safe-stable-stringify@npm:^2.3.1": 1640 | version: 2.5.0 1641 | resolution: "safe-stable-stringify@npm:2.5.0" 1642 | checksum: 10c0/baea14971858cadd65df23894a40588ed791769db21bafb7fd7608397dbdce9c5aac60748abae9995e0fc37e15f2061980501e012cd48859740796bea2987f49 1643 | languageName: node 1644 | linkType: hard 1645 | 1646 | "safer-buffer@npm:>= 2.1.2 < 3.0.0": 1647 | version: 2.1.2 1648 | resolution: "safer-buffer@npm:2.1.2" 1649 | checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 1650 | languageName: node 1651 | linkType: hard 1652 | 1653 | "saxes@npm:^6.0.0": 1654 | version: 6.0.0 1655 | resolution: "saxes@npm:6.0.0" 1656 | dependencies: 1657 | xmlchars: "npm:^2.2.0" 1658 | checksum: 10c0/3847b839f060ef3476eb8623d099aa502ad658f5c40fd60c105ebce86d244389b0d76fcae30f4d0c728d7705ceb2f7e9b34bb54717b6a7dbedaf5dad2d9a4b74 1659 | languageName: node 1660 | linkType: hard 1661 | 1662 | "secure-json-parse@npm:^4.0.0": 1663 | version: 4.1.0 1664 | resolution: "secure-json-parse@npm:4.1.0" 1665 | checksum: 10c0/52b3f8125ea974db1333a5b63e6a1df550c36c0d5f9a263911d6732812bd02e938b30be324dcbbb9da3ef9bf5a84849e0dd911f56544003d3c09e8eee12504de 1666 | languageName: node 1667 | linkType: hard 1668 | 1669 | "semver@npm:^7.3.5, semver@npm:^7.6.0": 1670 | version: 7.7.3 1671 | resolution: "semver@npm:7.7.3" 1672 | bin: 1673 | semver: bin/semver.js 1674 | checksum: 10c0/4afe5c986567db82f44c8c6faef8fe9df2a9b1d98098fc1721f57c696c4c21cebd572f297fc21002f81889492345b8470473bc6f4aff5fb032a6ea59ea2bc45e 1675 | languageName: node 1676 | linkType: hard 1677 | 1678 | "set-cookie-parser@npm:^2.6.0": 1679 | version: 2.7.2 1680 | resolution: "set-cookie-parser@npm:2.7.2" 1681 | checksum: 10c0/4381a9eb7ee951dfe393fe7aacf76b9a3b4e93a684d2162ab35594fa4053cc82a4d7d7582bf397718012c9adcf839b8cd8f57c6c42901ea9effe33c752da4a45 1682 | languageName: node 1683 | linkType: hard 1684 | 1685 | "smart-buffer@npm:^4.2.0": 1686 | version: 4.2.0 1687 | resolution: "smart-buffer@npm:4.2.0" 1688 | checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 1689 | languageName: node 1690 | linkType: hard 1691 | 1692 | "socks-proxy-agent@npm:^8.0.3": 1693 | version: 8.0.5 1694 | resolution: "socks-proxy-agent@npm:8.0.5" 1695 | dependencies: 1696 | agent-base: "npm:^7.1.2" 1697 | debug: "npm:^4.3.4" 1698 | socks: "npm:^2.8.3" 1699 | checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 1700 | languageName: node 1701 | linkType: hard 1702 | 1703 | "socks@npm:^2.8.3": 1704 | version: 2.8.7 1705 | resolution: "socks@npm:2.8.7" 1706 | dependencies: 1707 | ip-address: "npm:^10.0.1" 1708 | smart-buffer: "npm:^4.2.0" 1709 | checksum: 10c0/2805a43a1c4bcf9ebf6e018268d87b32b32b06fbbc1f9282573583acc155860dc361500f89c73bfbb157caa1b4ac78059eac0ef15d1811eb0ca75e0bdadbc9d2 1710 | languageName: node 1711 | linkType: hard 1712 | 1713 | "sonic-boom@npm:^4.0.1": 1714 | version: 4.2.0 1715 | resolution: "sonic-boom@npm:4.2.0" 1716 | dependencies: 1717 | atomic-sleep: "npm:^1.0.0" 1718 | checksum: 10c0/ae897e6c2cd6d3cb7cdcf608bc182393b19c61c9413a85ce33ffd25891485589f39bece0db1de24381d0a38fc03d08c9862ded0c60f184f1b852f51f97af9684 1719 | languageName: node 1720 | linkType: hard 1721 | 1722 | "split2@npm:^4.0.0": 1723 | version: 4.2.0 1724 | resolution: "split2@npm:4.2.0" 1725 | checksum: 10c0/b292beb8ce9215f8c642bb68be6249c5a4c7f332fc8ecadae7be5cbdf1ea95addc95f0459ef2e7ad9d45fd1064698a097e4eb211c83e772b49bc0ee423e91534 1726 | languageName: node 1727 | linkType: hard 1728 | 1729 | "ssri@npm:^13.0.0": 1730 | version: 13.0.0 1731 | resolution: "ssri@npm:13.0.0" 1732 | dependencies: 1733 | minipass: "npm:^7.0.3" 1734 | checksum: 10c0/405f3a531cd98b013cecb355d63555dca42fd12c7bc6671738aaa9a82882ff41cdf0ef9a2b734ca4f9a760338f114c29d01d9238a65db3ccac27929bd6e6d4b2 1735 | languageName: node 1736 | linkType: hard 1737 | 1738 | "symbol-tree@npm:^3.2.4": 1739 | version: 3.2.4 1740 | resolution: "symbol-tree@npm:3.2.4" 1741 | checksum: 10c0/dfbe201ae09ac6053d163578778c53aa860a784147ecf95705de0cd23f42c851e1be7889241495e95c37cabb058edb1052f141387bef68f705afc8f9dd358509 1742 | languageName: node 1743 | linkType: hard 1744 | 1745 | "tar@npm:^7.5.2": 1746 | version: 7.5.2 1747 | resolution: "tar@npm:7.5.2" 1748 | dependencies: 1749 | "@isaacs/fs-minipass": "npm:^4.0.0" 1750 | chownr: "npm:^3.0.0" 1751 | minipass: "npm:^7.1.2" 1752 | minizlib: "npm:^3.1.0" 1753 | yallist: "npm:^5.0.0" 1754 | checksum: 10c0/a7d8b801139b52f93a7e34830db0de54c5aa45487c7cb551f6f3d44a112c67f1cb8ffdae856b05fd4f17b1749911f1c26f1e3a23bbe0279e17fd96077f13f467 1755 | languageName: node 1756 | linkType: hard 1757 | 1758 | "thread-stream@npm:^3.0.0": 1759 | version: 3.1.0 1760 | resolution: "thread-stream@npm:3.1.0" 1761 | dependencies: 1762 | real-require: "npm:^0.2.0" 1763 | checksum: 10c0/c36118379940b77a6ef3e6f4d5dd31e97b8210c3f7b9a54eb8fe6358ab173f6d0acfaf69b9c3db024b948c0c5fd2a7df93e2e49151af02076b35ada3205ec9a6 1764 | languageName: node 1765 | linkType: hard 1766 | 1767 | "tinyglobby@npm:^0.2.12": 1768 | version: 0.2.15 1769 | resolution: "tinyglobby@npm:0.2.15" 1770 | dependencies: 1771 | fdir: "npm:^6.5.0" 1772 | picomatch: "npm:^4.0.3" 1773 | checksum: 10c0/869c31490d0d88eedb8305d178d4c75e7463e820df5a9b9d388291daf93e8b1eb5de1dad1c1e139767e4269fe75f3b10d5009b2cc14db96ff98986920a186844 1774 | languageName: node 1775 | linkType: hard 1776 | 1777 | "tldts-core@npm:^6.1.86": 1778 | version: 6.1.86 1779 | resolution: "tldts-core@npm:6.1.86" 1780 | checksum: 10c0/8133c29375f3f99f88fce5f4d62f6ecb9532b106f31e5423b27c1eb1b6e711bd41875184a456819ceaed5c8b94f43911b1ad57e25c6eb86e1fc201228ff7e2af 1781 | languageName: node 1782 | linkType: hard 1783 | 1784 | "tldts@npm:^6.1.32": 1785 | version: 6.1.86 1786 | resolution: "tldts@npm:6.1.86" 1787 | dependencies: 1788 | tldts-core: "npm:^6.1.86" 1789 | bin: 1790 | tldts: bin/cli.js 1791 | checksum: 10c0/27ae7526d9d78cb97b2de3f4d102e0b4321d1ccff0648a7bb0e039ed54acbce86bacdcd9cd3c14310e519b457854e7bafbef1f529f58a1e217a737ced63f0940 1792 | languageName: node 1793 | linkType: hard 1794 | 1795 | "toad-cache@npm:^3.7.0": 1796 | version: 3.7.0 1797 | resolution: "toad-cache@npm:3.7.0" 1798 | checksum: 10c0/7dae2782ee20b22c9798bb8b71dec7ec6a0091021d2ea9dd6e8afccab6b65b358fdba49a02209fac574499702e2c000660721516c87c2538d1b2c0ba03e8c0c3 1799 | languageName: node 1800 | linkType: hard 1801 | 1802 | "tough-cookie@npm:^5.1.1": 1803 | version: 5.1.2 1804 | resolution: "tough-cookie@npm:5.1.2" 1805 | dependencies: 1806 | tldts: "npm:^6.1.32" 1807 | checksum: 10c0/5f95023a47de0f30a902bba951664b359725597d8adeabc66a0b93a931c3af801e1e697dae4b8c21a012056c0ea88bd2bf4dfe66b2adcf8e2f42cd9796fe0626 1808 | languageName: node 1809 | linkType: hard 1810 | 1811 | "tr46@npm:^5.1.0": 1812 | version: 5.1.1 1813 | resolution: "tr46@npm:5.1.1" 1814 | dependencies: 1815 | punycode: "npm:^2.3.1" 1816 | checksum: 10c0/ae270e194d52ec67ebd695c1a42876e0f19b96e4aca2ab464ab1d9d17dc3acd3e18764f5034c93897db73421563be27c70c98359c4501136a497e46deda5d5ec 1817 | languageName: node 1818 | linkType: hard 1819 | 1820 | "trendgetter@workspace:.": 1821 | version: 0.0.0-use.local 1822 | resolution: "trendgetter@workspace:." 1823 | dependencies: 1824 | fastify: "npm:^5.6.2" 1825 | typescript: "npm:^5.9.3" 1826 | languageName: unknown 1827 | linkType: soft 1828 | 1829 | "tsx@npm:^4.21.0": 1830 | version: 4.21.0 1831 | resolution: "tsx@npm:4.21.0" 1832 | dependencies: 1833 | esbuild: "npm:~0.27.0" 1834 | fsevents: "npm:~2.3.3" 1835 | get-tsconfig: "npm:^4.7.5" 1836 | dependenciesMeta: 1837 | fsevents: 1838 | optional: true 1839 | bin: 1840 | tsx: dist/cli.mjs 1841 | checksum: 10c0/f5072923cd8459a1f9a26df87823a2ab5754641739d69df2a20b415f61814322b751fa6be85db7c6ec73cf68ba8fac2fd1cfc76bdb0aa86ded984d84d5d2126b 1842 | languageName: node 1843 | linkType: hard 1844 | 1845 | "typescript@npm:^5.9.3": 1846 | version: 5.9.3 1847 | resolution: "typescript@npm:5.9.3" 1848 | bin: 1849 | tsc: bin/tsc 1850 | tsserver: bin/tsserver 1851 | checksum: 10c0/6bd7552ce39f97e711db5aa048f6f9995b53f1c52f7d8667c1abdc1700c68a76a308f579cd309ce6b53646deb4e9a1be7c813a93baaf0a28ccd536a30270e1c5 1852 | languageName: node 1853 | linkType: hard 1854 | 1855 | "typescript@patch:typescript@npm%3A^5.9.3#optional!builtin": 1856 | version: 5.9.3 1857 | resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" 1858 | bin: 1859 | tsc: bin/tsc 1860 | tsserver: bin/tsserver 1861 | checksum: 10c0/ad09fdf7a756814dce65bc60c1657b40d44451346858eea230e10f2e95a289d9183b6e32e5c11e95acc0ccc214b4f36289dcad4bf1886b0adb84d711d336a430 1862 | languageName: node 1863 | linkType: hard 1864 | 1865 | "undici-types@npm:~7.16.0": 1866 | version: 7.16.0 1867 | resolution: "undici-types@npm:7.16.0" 1868 | checksum: 10c0/3033e2f2b5c9f1504bdc5934646cb54e37ecaca0f9249c983f7b1fc2e87c6d18399ebb05dc7fd5419e02b2e915f734d872a65da2e3eeed1813951c427d33cc9a 1869 | languageName: node 1870 | linkType: hard 1871 | 1872 | "unique-filename@npm:^5.0.0": 1873 | version: 5.0.0 1874 | resolution: "unique-filename@npm:5.0.0" 1875 | dependencies: 1876 | unique-slug: "npm:^6.0.0" 1877 | checksum: 10c0/afb897e9cf4c2fb622ea716f7c2bb462001928fc5f437972213afdf1cc32101a230c0f1e9d96fc91ee5185eca0f2feb34127145874975f347be52eb91d6ccc2c 1878 | languageName: node 1879 | linkType: hard 1880 | 1881 | "unique-slug@npm:^6.0.0": 1882 | version: 6.0.0 1883 | resolution: "unique-slug@npm:6.0.0" 1884 | dependencies: 1885 | imurmurhash: "npm:^0.1.4" 1886 | checksum: 10c0/da7ade4cb04eb33ad0499861f82fe95ce9c7c878b7139dc54d140ecfb6a6541c18a5c8dac16188b8b379fe62c0c1f1b710814baac910cde5f4fec06212126c6a 1887 | languageName: node 1888 | linkType: hard 1889 | 1890 | "w3c-xmlserializer@npm:^5.0.0": 1891 | version: 5.0.0 1892 | resolution: "w3c-xmlserializer@npm:5.0.0" 1893 | dependencies: 1894 | xml-name-validator: "npm:^5.0.0" 1895 | checksum: 10c0/8712774c1aeb62dec22928bf1cdfd11426c2c9383a1a63f2bcae18db87ca574165a0fbe96b312b73652149167ac6c7f4cf5409f2eb101d9c805efe0e4bae798b 1896 | languageName: node 1897 | linkType: hard 1898 | 1899 | "webidl-conversions@npm:^7.0.0": 1900 | version: 7.0.0 1901 | resolution: "webidl-conversions@npm:7.0.0" 1902 | checksum: 10c0/228d8cb6d270c23b0720cb2d95c579202db3aaf8f633b4e9dd94ec2000a04e7e6e43b76a94509cdb30479bd00ae253ab2371a2da9f81446cc313f89a4213a2c4 1903 | languageName: node 1904 | linkType: hard 1905 | 1906 | "whatwg-encoding@npm:^3.1.1": 1907 | version: 3.1.1 1908 | resolution: "whatwg-encoding@npm:3.1.1" 1909 | dependencies: 1910 | iconv-lite: "npm:0.6.3" 1911 | checksum: 10c0/273b5f441c2f7fda3368a496c3009edbaa5e43b71b09728f90425e7f487e5cef9eb2b846a31bd760dd8077739c26faf6b5ca43a5f24033172b003b72cf61a93e 1912 | languageName: node 1913 | linkType: hard 1914 | 1915 | "whatwg-mimetype@npm:^4.0.0": 1916 | version: 4.0.0 1917 | resolution: "whatwg-mimetype@npm:4.0.0" 1918 | checksum: 10c0/a773cdc8126b514d790bdae7052e8bf242970cebd84af62fb2f35a33411e78e981f6c0ab9ed1fe6ec5071b09d5340ac9178e05b52d35a9c4bcf558ba1b1551df 1919 | languageName: node 1920 | linkType: hard 1921 | 1922 | "whatwg-url@npm:^14.0.0, whatwg-url@npm:^14.1.1": 1923 | version: 14.2.0 1924 | resolution: "whatwg-url@npm:14.2.0" 1925 | dependencies: 1926 | tr46: "npm:^5.1.0" 1927 | webidl-conversions: "npm:^7.0.0" 1928 | checksum: 10c0/f746fc2f4c906607d09537de1227b13f9494c171141e5427ed7d2c0dd0b6a48b43d8e71abaae57d368d0c06b673fd8ec63550b32ad5ed64990c7b0266c2b4272 1929 | languageName: node 1930 | linkType: hard 1931 | 1932 | "which@npm:^6.0.0": 1933 | version: 6.0.0 1934 | resolution: "which@npm:6.0.0" 1935 | dependencies: 1936 | isexe: "npm:^3.1.1" 1937 | bin: 1938 | node-which: bin/which.js 1939 | checksum: 10c0/fe9d6463fe44a76232bb6e3b3181922c87510a5b250a98f1e43a69c99c079b3f42ddeca7e03d3e5f2241bf2d334f5a7657cfa868b97c109f3870625842f4cc15 1940 | languageName: node 1941 | linkType: hard 1942 | 1943 | "ws@npm:^8.18.0": 1944 | version: 8.18.3 1945 | resolution: "ws@npm:8.18.3" 1946 | peerDependencies: 1947 | bufferutil: ^4.0.1 1948 | utf-8-validate: ">=5.0.2" 1949 | peerDependenciesMeta: 1950 | bufferutil: 1951 | optional: true 1952 | utf-8-validate: 1953 | optional: true 1954 | checksum: 10c0/eac918213de265ef7cb3d4ca348b891a51a520d839aa51cdb8ca93d4fa7ff9f6ccb339ccee89e4075324097f0a55157c89fa3f7147bde9d8d7e90335dc087b53 1955 | languageName: node 1956 | linkType: hard 1957 | 1958 | "xml-name-validator@npm:^5.0.0": 1959 | version: 5.0.0 1960 | resolution: "xml-name-validator@npm:5.0.0" 1961 | checksum: 10c0/3fcf44e7b73fb18be917fdd4ccffff3639373c7cb83f8fc35df6001fecba7942f1dbead29d91ebb8315e2f2ff786b508f0c9dc0215b6353f9983c6b7d62cb1f5 1962 | languageName: node 1963 | linkType: hard 1964 | 1965 | "xmlchars@npm:^2.2.0": 1966 | version: 2.2.0 1967 | resolution: "xmlchars@npm:2.2.0" 1968 | checksum: 10c0/b64b535861a6f310c5d9bfa10834cf49127c71922c297da9d4d1b45eeaae40bf9b4363275876088fbe2667e5db028d2cd4f8ee72eed9bede840a67d57dab7593 1969 | languageName: node 1970 | linkType: hard 1971 | 1972 | "yallist@npm:^4.0.0": 1973 | version: 4.0.0 1974 | resolution: "yallist@npm:4.0.0" 1975 | checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a 1976 | languageName: node 1977 | linkType: hard 1978 | 1979 | "yallist@npm:^5.0.0": 1980 | version: 5.0.0 1981 | resolution: "yallist@npm:5.0.0" 1982 | checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 1983 | languageName: node 1984 | linkType: hard 1985 | --------------------------------------------------------------------------------