first commit

This commit is contained in:
Akhib.Shaik 2025-11-03 13:38:27 +05:30
parent c46490b8fd
commit 698aa7aa45
7271 changed files with 2282896 additions and 1 deletions

249
DASHBOARD_SETUP.md Normal file
View File

@ -0,0 +1,249 @@
# Modern Dashboard Setup Guide
## Overview
Your React frontend now has a beautiful modern dashboard that consumes data from Frappe Dashboard Chart and Number Card doctypes.
## What's Been Created
### 1. Backend API File
**File**: `frappe_dashboard_api.py`
- Copy this to your Frappe app: `asset_lite/api/dashboard_api.py`
- Contains endpoints:
- `get_number_cards()` - Returns KPI counts (total assets, work orders by status)
- `list_dashboard_charts()` - Lists all public Dashboard Chart docs
- `get_dashboard_chart_data(chart_name)` - Returns chart-ready JSON for any Report-based Dashboard Chart
- `get_repair_cost_by_item(year)` - Example specialized chart endpoint
### 2. Frontend Components
#### `src/pages/ModernDashboard.tsx` (NEW)
Modern dashboard matching your reference image with:
- Gradient KPI cards (pink, cyan, emerald)
- Tab switcher (Variation 1 / Variation 2)
- Work Order Status chart with bar visualization
- Bandwidth Reports chart (multi-dataset bars)
- Progress bars for metrics
- Message statistics cards
- Author rankings with trend indicators
#### `src/components/SimpleChart.tsx`
Lightweight SVG-based chart renderer:
- Bar charts (single & stacked)
- Pie charts
- No external dependencies
#### `src/components/ChartTile.tsx`
Reusable tile that fetches and displays a Dashboard Chart by name
### 3. API Integration
#### `src/config/api.ts`
Added endpoints:
```typescript
DASHBOARD_NUMBER_CARDS: '/api/method/asset_lite.api.dashboard_api.get_number_cards'
DASHBOARD_LIST_CHARTS: '/api/method/asset_lite.api.dashboard_api.list_dashboard_charts'
DASHBOARD_CHART_DATA: '/api/method/asset_lite.api.dashboard_api.get_dashboard_chart_data'
```
#### `src/services/apiService.ts`
Added methods:
- `getNumberCards()`
- `listDashboardCharts(publicOnly)`
- `getDashboardChartData(chartName, filters)`
#### `src/hooks/useApi.ts`
Added hooks:
- `useNumberCards()` - Fetches KPI card data
- `useDashboardChart(chartName, filters)` - Fetches specific chart data
- `useChartsList(publicOnly)` - Lists available charts
### 4. Routing
**File**: `src/App.tsx`
- `/dashboard` route already points to `ModernDashboard` component
- Protected by authentication
- Includes sidebar navigation
## Installation Steps
### Step 1: Deploy Backend API
```bash
# Navigate to your Frappe app directory
cd frappe-bench/apps/asset_lite
# Create the api directory if it doesn't exist
mkdir -p asset_lite/api
# Copy the Python file
cp /path/to/frappe_dashboard_api.py asset_lite/api/dashboard_api.py
# Restart your Frappe server
bench restart
```
### Step 2: Verify Dashboard Charts in Frappe
Ensure these Dashboard Charts exist and are marked as "Public":
- Up & Down Time Chart
- Work Order Status Chart
- Maintenance - Asset wise Count
- Asset Maintenance Assignees Status Count
- Asset Maintenance Frequency Chart
- PPM Status
- PPM Template Counts
- Repair Cost
Each chart should:
- Chart Type: "Report"
- Use Report Chart: ✓ checked
- Have a Report Name configured
- Have X Field set
- Have Y Axis fields configured in child table
- Is Public: ✓ checked
### Step 3: Test the API Endpoints
```bash
# Test number cards
curl -X GET "https://seeraasm-med.seeraarabia.com/api/method/asset_lite.api.dashboard_api.get_number_cards" \
-H "Authorization: token YOUR_API_KEY:YOUR_API_SECRET"
# Test chart data
curl -X GET "https://seeraasm-med.seeraarabia.com/api/method/asset_lite.api.dashboard_api.get_dashboard_chart_data?chart_name=Work%20Order%20Status%20Chart" \
-H "Authorization: token YOUR_API_KEY:YOUR_API_SECRET"
```
### Step 4: Run Frontend
```bash
cd frappe-frontend
npm install
npm run dev
```
Navigate to: `http://localhost:5173/dashboard`
## Dashboard Features
### KPI Cards (Top Row)
- **Total Assets**: Pink gradient, shows count from Asset doctype
- **Work Orders**: Cyan gradient, shows open + in progress count
- **Completed**: Green gradient, shows completed work orders
### Charts Section
- **Work Order Status**: Bar chart from "Work Order Status Chart" Dashboard Chart
- **Bandwidth Reports**: Multi-dataset chart from "Maintenance - Asset wise Count"
- Both support tab switching and dynamic data loading
### Additional Sections
- Top Authors ranking (mock data for now)
- Progress metrics with colored bars
- Message statistics at bottom
## Customization
### Change Chart Names
Edit `src/pages/ModernDashboard.tsx` lines with `useDashboardChart`:
```typescript
const { data: workOrderChart } = useDashboardChart('Your Chart Name Here');
```
### Add More KPI Cards
1. Add new field in backend `get_number_cards()` function
2. Update TypeScript interface in `src/services/apiService.ts`
3. Add card in `ModernDashboard.tsx` KPI grid
### Customize Colors
Tailwind gradient classes used:
- `from-pink-400 to-pink-300`
- `from-cyan-400 to-cyan-300`
- `from-emerald-400 to-emerald-300`
Change these to any Tailwind color you want.
### Add Filters to Charts
Pass filters to chart hook:
```typescript
const { data: chart } = useDashboardChart('Chart Name', {
from_date: '2025-01-01',
to_date: '2025-12-31',
status: 'Open'
});
```
## Troubleshooting
### Charts Not Loading
1. Check browser console for API errors
2. Verify Dashboard Chart docname is correct (case-sensitive)
3. Ensure chart is marked "Public" or user has permission
4. Check that Report exists and returns data
### Number Cards Show Zero
1. Verify Work Order statuses match those in `get_number_cards()` function
2. Adjust status filters in Python code if your statuses differ:
```python
work_orders_open = frappe.db.count("Work Order", {"status": ["in", ["Your", "Custom", "Statuses"]]})
```
### CORS Errors
1. Check Vite proxy configuration in `vite.config.ts`
2. Ensure Frappe CORS settings allow your frontend domain
3. Verify cookies are being sent (credentials: 'include')
## API Reference
### GET /api/method/asset_lite.api.dashboard_api.get_number_cards
Returns:
```json
{
"total_assets": 123,
"work_orders_open": 7,
"work_orders_in_progress": 3,
"work_orders_completed": 42
}
```
### GET /api/method/asset_lite.api.dashboard_api.get_dashboard_chart_data
Params:
- `chart_name` (required): Dashboard Chart docname
- `report_filters` (optional): JSON string of filters
Returns:
```json
{
"labels": ["A", "B", "C"],
"datasets": [
{
"name": "Series 1",
"values": [10, 20, 15],
"color": "#4F46E5"
}
],
"type": "Bar",
"options": {},
"source": {"report": "Report Name"}
}
```
## Next Steps
1. **Replace Mock Data**: Update TOP AUTHORS section with real user activity data
2. **Add Real-time Updates**: Use WebSocket or polling to refresh charts every N seconds
3. **Add Date Range Picker**: Let users filter charts by date range
4. **Export Features**: Add PDF/Excel export for charts
5. **Drill-down**: Make chart bars/slices clickable to view detail pages
6. **Responsive Design**: Already responsive, but test on mobile/tablet
7. **Dark Mode**: Add theme toggle using Tailwind dark: classes
## Support
If you encounter issues:
1. Check Frappe logs: `bench logs`
2. Check browser console for frontend errors
3. Verify API responses in Network tab
4. Ensure all Dashboard Charts are properly configured in Frappe
---
**Created**: 2025-10-30
**Version**: 1.0
**Frontend**: React + TypeScript + Vite + TailwindCSS
**Backend**: Frappe v15+ with custom API module

181
DEPLOY_ASSET_API.md Normal file
View File

@ -0,0 +1,181 @@
# Deploy Asset API to Frappe Server
## Issue
When trying to create/edit/delete assets, you get an error: "Failed to save asset" or "Failed to create asset"
This happens because the Asset API endpoints are not deployed on your Frappe server yet.
## Solution
Follow these steps to deploy the Asset API:
### Step 1: SSH into Your Frappe Server
```bash
ssh user@seeraasm-med.seeraarabia.com
```
Replace `user` with your actual SSH username.
### Step 2: Navigate to the Asset Lite App API Directory
```bash
cd frappe-bench/apps/asset_lite/asset_lite/api/
```
If the `api` directory doesn't exist, create it:
```bash
mkdir -p frappe-bench/apps/asset_lite/asset_lite/api/
cd frappe-bench/apps/asset_lite/asset_lite/api/
```
### Step 3: Create the Asset API File
Create a new file called `asset_api.py`:
```bash
nano asset_api.py
```
### Step 4: Copy the API Code
Copy the **ENTIRE contents** of the file `frappe_asset_api.py` from your project folder and paste it into the editor.
The file contains these API endpoints:
- `get_assets` - Get list of assets with filters
- `get_asset_details` - Get details of a specific asset
- `create_asset` - Create a new asset
- `update_asset` - Update an existing asset
- `delete_asset` - Delete an asset
- `get_asset_filters` - Get filter options
- `get_asset_stats` - Get asset statistics
- `search_assets` - Search assets by keyword
### Step 5: Save and Exit
In nano:
- Press `Ctrl + O` (to save)
- Press `Enter` (to confirm)
- Press `Ctrl + X` (to exit)
### Step 6: Create __init__.py (if needed)
Make sure there's an `__init__.py` file in the api directory:
```bash
touch __init__.py
```
### Step 7: Restart Frappe
Go back to the bench directory and restart:
```bash
cd ~/frappe-bench
bench restart
```
Or if using supervisor:
```bash
sudo supervisorctl restart all
```
### Step 8: Test the API
Open your browser console and try creating an asset again. You should now see detailed logs:
```
[useAssetMutations] Creating asset with data: {...}
[useAssetMutations] Create asset response: {...}
```
## Verify Deployment
You can verify the API is deployed by checking if the endpoint exists:
```bash
curl -X GET "https://seeraasm-med.seeraarabia.com/api/method/asset_lite.api.asset_api.get_assets?limit=1"
```
You should get a response (even if it's an authentication error, that means the endpoint exists).
## Troubleshooting
### Error: "Module has no attribute 'asset_api'"
**Cause:** The file wasn't created in the right location or Frappe hasn't reloaded.
**Solution:**
1. Check the file exists: `ls -la ~/frappe-bench/apps/asset_lite/asset_lite/api/asset_api.py`
2. Restart Frappe: `cd ~/frappe-bench && bench restart`
### Error: "Not permitted to create asset"
**Cause:** Your user doesn't have permissions for the Asset doctype.
**Solution:**
1. Log in to Frappe desk as Administrator
2. Go to User Permissions
3. Grant your user "Create" permission for Asset doctype
### Error: "Asset doctype not found"
**Cause:** The Asset Lite app doesn't have an Asset doctype, or it's named differently.
**Solution:**
Check what doctypes are available:
```bash
cd ~/frappe-bench
bench console
```
Then in the console:
```python
import frappe
frappe.get_all('DocType', filters={'module': 'Asset Lite'}, fields=['name'])
```
You may need to adjust the doctype name in the API code.
## Expected Behavior After Deployment
**Create Asset:** Form data is saved, new asset is created with auto-generated ID
**Edit Asset:** Changes are saved to existing asset
**Delete Asset:** Asset is deleted after confirmation
**Duplicate Asset:** New asset is created based on existing one
**Export/Print:** Asset data is exported or printed
## Console Debugging
After deployment, when you try to save an asset, you should see in the browser console:
```javascript
[useAssetMutations] Creating asset with data: {
asset_name: "Test Asset",
company: "Test Company",
custom_asset_type: "Medical Equipment",
// ... other fields
}
[useAssetMutations] Create asset response: {
success: true,
asset: { name: "ACC-ASS-2025-00097", ... },
message: "Asset created successfully"
}
```
If you see errors instead, they will now show the actual backend error message.
## Need Help?
If you continue having issues:
1. Check the Frappe error logs: `tail -f ~/frappe-bench/logs/error.log`
2. Check the worker logs: `tail -f ~/frappe-bench/logs/worker.error.log`
3. Verify your user has the correct permissions in Frappe
4. Make sure the Asset doctype exists in your Asset Lite app

150
DEPLOY_BACKEND.md Normal file
View File

@ -0,0 +1,150 @@
# Backend Deployment Guide
## Quick Deploy
Copy the updated `frappe_dashboard_api.py` to your Frappe server:
```bash
# Step 1: Copy file to Frappe app
scp frappe_dashboard_api.py user@your-server:/tmp/
# Step 2: SSH to server
ssh user@your-server
# Step 3: Move to correct location
cd /path/to/frappe-bench/apps/asset_lite
mkdir -p asset_lite/api
cp /tmp/frappe_dashboard_api.py asset_lite/api/dashboard_api.py
# Step 4: Restart Frappe
bench restart
# Step 5: Test the API
curl "https://seeraasm-med.seeraarabia.com/api/method/asset_lite.api.dashboard_api.get_number_cards"
```
## What This API Does
### 1. `get_number_cards()`
Returns counts for KPI cards:
- Total Assets
- Open Work Orders
- Work Orders In Progress
- Completed Work Orders
### 2. `list_dashboard_charts()`
Lists all public Dashboard Charts with their configuration
### 3. `get_dashboard_chart_data(chart_name, filters)`
**Supports BOTH:**
- **Report Charts** - Uses the Report's query and x/y field configuration
- **Custom Charts** - Queries the source doctype directly based on `based_on` and `value_based_on` fields
### 4. `get_repair_cost_by_item(year)`
Specialized endpoint for repair cost analysis
## What Was Fixed
### Issue 1: "Unknown column 'label'"
- ✅ Removed `label` field from queries
- ✅ Now only queries `y_field` and `color`
### Issue 2: "DashboardChart object has no attribute 'get_chart_data'"
- ✅ Replaced with custom SQL queries
- ✅ Reads `document_type`, `based_on`, `value_based_on` fields
- ✅ Builds appropriate GROUP BY queries
### Issue 3: Empty datasets
- ✅ Added proper error handling
- ✅ Logs errors to Frappe error log
- ✅ Returns meaningful error messages
## Chart Types Supported
### Report Charts (with "Use Report Chart" checked)
Examples from your Frappe:
- Up & Down Time Chart
- Work Order Status Chart
- PPM Status
- PPM Template Counts
- Repair Cost
**Configuration Required:**
- Chart Type: Report
- Report Name: Valid report name
- Use Report Chart: ✓ checked
- X Field: Field name for X-axis
- Y Axis: At least one row with y_field and color
### Custom Charts (DocType-based)
Examples from your Frappe:
- Maintenance - Asset wise Count
- Asset Maintenance Assignees Status Count
- Asset Maintenance Frequency Chart
**Configuration Required:**
- Chart Type: Custom
- Document Type: Source doctype (e.g., "Asset Maintenance")
- Based On: Field to group by (e.g., "assigned_to")
- Value Based On: Field to count (optional, defaults to "name")
## Troubleshooting
### Charts still showing "No data"
1. **Check chart exists:**
```sql
SELECT name, chart_name, chart_type, document_type, based_on
FROM `tabDashboard Chart`
WHERE name = 'Up & Down Time Chart';
```
2. **Check if Public:**
```sql
SELECT name, is_public FROM `tabDashboard Chart`;
```
3. **Test API directly:**
```bash
# In browser (while logged in):
https://seeraasm-med.seeraarabia.com/api/method/asset_lite.api.dashboard_api.get_dashboard_chart_data?chart_name=Up%20%26%20Down%20Time%20Chart
```
4. **Check Frappe logs:**
```bash
bench logs
# or
tail -f logs/web.error.log
```
### API returns 404
- Backend file not copied to correct location
- App name is not `asset_lite` (update paths in API calls)
### API returns 500
- Check Frappe error logs
- Verify chart configuration matches what API expects
## Next Steps After Deploy
1. Deploy this file to your Frappe server
2. Restart: `bench restart`
3. Hard refresh your React dashboard (Ctrl+Shift+R)
4. Check browser console for data logs
5. Charts should now display with real data!
## Expected Console Output (Success)
After successful deployment, you should see:
```
Up & Down Time Chart data: {labels: ["up", "down"], datasets: [{values: [7092, 16]}], type: "Pie"}
Work Order Status Chart data: {labels: ["Open", "Completed"], datasets: [{values: [3, 2]}], type: "Bar"}
Maintenance - Asset wise Count data: {labels: ["Asset1", "Asset2"], datasets: [{values: [10, 5]}], type: "Bar"}
```
---
**File to deploy:** `frappe_dashboard_api.py`
**Location:** `asset_lite/api/dashboard_api.py`
**Restart:** `bench restart`

View File

@ -1,6 +1,6 @@
# Frappe React Frontend
A modern React frontend application built with TypeScript, Vite, and TailwindCSS that connects to your existing Frappe backend.
A modern React frontend application built with TypeScript, Vite, and TailwindCSS that connects to our existing Frappe backend.
## Features

210
TROUBLESHOOTING_CHARTS.md Normal file
View File

@ -0,0 +1,210 @@
# Charts Not Showing - Troubleshooting Guide
## Step 1: Check Browser Console
1. Open your browser's Developer Tools (F12)
2. Go to the **Console** tab
3. Look for error messages for each chart
4. Look for API call logs showing chart data
You should see logs like:
```
Up & Down Time Chart data: {labels: [...], datasets: [...]}
```
If you see errors instead, note them down.
## Step 2: Verify Backend API is Deployed
The Python file `frappe_dashboard_api.py` must be copied to your Frappe server:
```bash
# SSH to your Frappe server
cd frappe-bench/apps/asset_lite
# Create api directory if it doesn't exist
mkdir -p asset_lite/api
# Copy the file
cp /path/to/frappe_dashboard_api.py asset_lite/api/dashboard_api.py
# Restart Frappe
bench restart
```
## Step 3: Test API Directly
Open a new browser tab and try accessing the API directly:
### Test Number Cards
```
https://seeraasm-med.seeraarabia.com/api/method/asset_lite.api.dashboard_api.get_number_cards
```
**Expected Response:**
```json
{
"message": {
"total_assets": 7109,
"work_orders_open": 3,
"work_orders_in_progress": 1,
"work_orders_completed": 2
}
}
```
### Test Chart Data
```
https://seeraasm-med.seeraarabia.com/api/method/asset_lite.api.dashboard_api.get_dashboard_chart_data?chart_name=Work%20Order%20Status%20Chart
```
**Expected Response:**
```json
{
"message": {
"labels": ["Open", "Completed", "Pending"],
"datasets": [{
"name": "Count",
"values": [10, 20, 5],
"color": "#4F46E5"
}],
"type": "Bar"
}
}
```
## Step 4: Check Dashboard Chart Names
The chart names in React MUST match EXACTLY (including spaces and capitalization) with your Frappe Dashboard Chart docnames.
In Frappe, go to: **Desk → Dashboard Chart List**
Current names in React code:
- `Up & Down Time Chart`
- `Work Order Status Chart`
- `Maintenance - Asset wise Count`
- `Asset Maintenance Assignees Status Count`
- `Asset Maintenance Frequency Chart`
- `PPM Status`
- `PPM Template Counts`
If your Frappe charts have different names, update them in `ModernDashboard.tsx` line 12-18.
## Step 5: Verify Dashboard Chart Configuration
Each Dashboard Chart in Frappe must have:
1. **Chart Type:** "Report"
2. **Use Report Chart:** ✓ (checked)
3. **Report Name:** A valid report name
4. **X Field:** The field to use for X-axis (e.g., `status`, `item_name`)
5. **Y Axis Fields:** At least one entry in child table with:
- Y Field (e.g., `count`, `amount`)
- Color (e.g., `#4F46E5`)
- Label (e.g., `Count`)
6. **Is Public:** ✓ (checked) OR user has permission
## Step 6: Check Network Tab
1. Open Developer Tools (F12)
2. Go to **Network** tab
3. Refresh the dashboard page
4. Look for API calls to `get_dashboard_chart_data`
5. Click on each call and check:
- **Status Code:** Should be 200
- **Response:** Should contain chart data
### Common Errors:
**404 Not Found**
- Backend API file not deployed
- Endpoint path is wrong
**500 Internal Server Error**
- Chart doesn't exist in Frappe
- Report has an error
- Python code has a bug
**401 Unauthorized**
- Not logged in
- Session expired
**403 Forbidden**
- Chart is not Public
- User doesn't have permission
## Step 7: Quick Fixes
### If API endpoint doesn't exist (404):
```bash
# On Frappe server
cd frappe-bench/apps/asset_lite
ls -la asset_lite/api/ # Check if dashboard_api.py exists
bench restart
```
### If chart names don't match:
Edit `src/pages/ModernDashboard.tsx` and update chart names to match exactly.
### If charts are private:
In Frappe, for each Dashboard Chart:
1. Open the chart
2. Check **Is Public**
3. Save
### If using wrong report:
The backend expects Report-based charts. Regular charts won't work.
## Step 8: Enable Debug Mode
Add this to see what's being fetched:
Open `src/hooks/useApi.ts` and check if errors are being caught properly.
## Step 9: Test with Mock Data
Temporarily add mock data to verify charts render:
```typescript
// In ModernDashboard.tsx, replace chart fetch with:
const mockData = {
labels: ['A', 'B', 'C'],
datasets: [{
name: 'Test',
values: [10, 20, 15],
color: '#4F46E5'
}],
type: 'Bar'
};
const { data: workOrderChart } = { data: mockData, loading: false, error: null };
```
If charts appear with mock data, the problem is the API. If not, it's the chart rendering logic.
## Step 10: Contact Support
If none of the above work, provide:
1. Browser console errors
2. Network tab screenshots showing API responses
3. Frappe Dashboard Chart configuration screenshots
4. Frappe error logs: `bench logs`
---
## Quick Checklist
- [ ] `frappe_dashboard_api.py` copied to `asset_lite/api/dashboard_api.py`
- [ ] Frappe server restarted (`bench restart`)
- [ ] Chart names in React match Frappe exactly
- [ ] All charts are marked "Is Public" in Frappe
- [ ] Charts are "Report" type with "Use Report Chart" checked
- [ ] Each chart has X Field and Y Axis configured
- [ ] Can access API endpoint directly in browser
- [ ] Browser console shows no 404/500 errors
- [ ] Logged in user has permissions
---
**Most Common Issue:** Backend API file not deployed to Frappe server yet!

23
eslint.config.js Normal file
View File

@ -0,0 +1,23 @@
import js from '@eslint/js'
import globals from 'globals'
import reactHooks from 'eslint-plugin-react-hooks'
import reactRefresh from 'eslint-plugin-react-refresh'
import tseslint from 'typescript-eslint'
import { defineConfig, globalIgnores } from 'eslint/config'
export default defineConfig([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
js.configs.recommended,
tseslint.configs.recommended,
reactHooks.configs['recommended-latest'],
reactRefresh.configs.vite,
],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
},
},
])

166
frappe_api_setup.py Normal file
View File

@ -0,0 +1,166 @@
# Add this file to your Frappe app: asset_lite/api/custom_api.py
# This file should be placed at: /path/to/your/frappe/sites/seeraasm-med/apps/asset_lite/asset_lite/api/custom_api.py
import frappe
from frappe import _
from frappe.utils import now, today, get_datetime
import json
@frappe.whitelist(allow_guest=False)
def get_user_details(user_id=None):
"""
Get detailed user information
Usage: /api/method/asset_lite.api.custom_api.get_user_details
"""
try:
if not user_id:
user_id = frappe.session.user
user = frappe.get_doc("User", user_id)
# Get user roles
roles = frappe.get_roles(user_id)
response_data = {
"user_id": user_id,
"full_name": user.full_name,
"email": user.email,
"user_image": user.user_image,
"roles": roles,
"last_login": user.last_login,
"enabled": user.enabled,
"creation": user.creation,
"modified": user.modified
}
frappe.response.message = response_data
frappe.response.status_code = 200
except Exception as e:
frappe.log_error(f"Error in get_user_details: {str(e)}")
frappe.response.message = {"error": str(e)}
frappe.response.status_code = 500
@frappe.whitelist(allow_guest=False)
def get_doctype_records(doctype, filters=None, fields=None, limit=20, offset=0):
"""
Get records from any DocType with filtering and pagination
Usage: /api/method/asset_lite.api.custom_api.get_doctype_records
"""
try:
# Parse filters and fields if provided as JSON strings
if isinstance(filters, str):
filters = json.loads(filters)
if isinstance(fields, str):
fields = json.loads(fields)
# Build the query
query_filters = filters or {}
# Get records
records = frappe.get_list(
doctype,
filters=query_filters,
fields=fields or ["*"],
limit=limit,
start=offset,
order_by="creation desc"
)
# Get total count for pagination
total_count = frappe.db.count(doctype, query_filters)
response_data = {
"records": records,
"total_count": total_count,
"limit": limit,
"offset": offset,
"has_more": (offset + limit) < total_count
}
frappe.response.message = response_data
frappe.response.status_code = 200
except Exception as e:
frappe.log_error(f"Error in get_doctype_records: {str(e)}")
frappe.response.message = {"error": str(e)}
frappe.response.status_code = 500
@frappe.whitelist(allow_guest=False)
def get_dashboard_stats():
"""
Get dashboard statistics
Usage: /api/method/asset_lite.api.custom_api.get_dashboard_stats
"""
try:
# Example: Get counts for different DocTypes
stats = {
"total_users": frappe.db.count("User", {"enabled": 1}),
"total_customers": frappe.db.count("Customer"),
"total_items": frappe.db.count("Item"),
"total_orders": frappe.db.count("Sales Order"),
"recent_activities": []
}
# Get recent activities (example)
recent_users = frappe.get_list(
"User",
fields=["name", "full_name", "creation"],
limit=5,
order_by="creation desc"
)
stats["recent_activities"] = recent_users
frappe.response.message = stats
frappe.response.status_code = 200
except Exception as e:
frappe.log_error(f"Error in get_dashboard_stats: {str(e)}")
frappe.response.message = {"error": str(e)}
frappe.response.status_code = 500
# Example KYC API for your KYCDetails component
@frappe.whitelist(allow_guest=False)
def get_kyc_details():
"""
Get KYC details - customize this based on your actual KYC DocType
Usage: /api/method/asset_lite.api.custom_api.get_kyc_details
"""
try:
# Replace 'KYC' with your actual DocType name
kyc_records = frappe.get_list(
"KYC", # Change this to your actual DocType
fields=["name", "kyc_status", "kyc_type", "creation"],
limit=50,
order_by="creation desc"
)
frappe.response.message = kyc_records
frappe.response.status_code = 200
except Exception as e:
frappe.log_error(f"Error in get_kyc_details: {str(e)}")
frappe.response.message = {"error": str(e)}
frappe.response.status_code = 500
# Simple test endpoint to verify API is working
@frappe.whitelist(allow_guest=False)
def test_api():
"""
Simple test endpoint to verify the API is working
Usage: /api/method/asset_lite.api.custom_api.test_api
"""
try:
frappe.response.message = {
"status": "success",
"message": "API is working!",
"user": frappe.session.user,
"timestamp": now()
}
frappe.response.status_code = 200
except Exception as e:
frappe.log_error(f"Error in test_api: {str(e)}")
frappe.response.message = {"error": str(e)}
frappe.response.status_code = 500

438
frappe_asset_api.py Normal file
View File

@ -0,0 +1,438 @@
# Asset API Endpoints for Frappe
# File location: frappe-bench/apps/asset_lite/asset_lite/api/asset_api.py
import frappe
from frappe import _
@frappe.whitelist()
def get_assets(filters=None, fields=None, limit=20, offset=0, order_by=None):
"""
Get list of assets with filters and pagination
Args:
filters: JSON string of filters (e.g., '{"company": "ABC Corp"}')
fields: JSON string of fields to return (e.g., '["asset_name", "location"]')
limit: Number of records to return (default: 20)
offset: Number of records to skip (default: 0)
order_by: Sort order (e.g., "creation desc")
Returns:
{
"assets": [...],
"total_count": int,
"limit": int,
"offset": int,
"has_more": bool
}
"""
try:
# Parse filters if provided
if filters and isinstance(filters, str):
import json
filters = json.loads(filters)
# Parse fields if provided
if fields and isinstance(fields, str):
import json
fields = json.loads(fields)
else:
# Default fields to return
fields = [
'name',
'asset_name',
'company',
'custom_serial_number',
'location',
'custom_manufacturer',
'department',
'custom_asset_type',
'custom_manufacturing_year',
'custom_model',
'custom_class',
'custom_device_status',
'custom_down_time',
'asset_owner_company',
'custom_up_time',
'custom_modality',
'custom_attach_image',
'custom_site_contractor',
'custom_total_amount',
'creation',
'modified',
'owner',
'modified_by'
]
# Get total count
total_count = frappe.db.count('Asset', filters=filters or {})
# Get assets
assets = frappe.get_all(
'Asset',
filters=filters or {},
fields=fields,
limit_page_length=int(limit),
limit_start=int(offset),
order_by=order_by or 'creation desc'
)
# Calculate has_more
has_more = (int(offset) + int(limit)) < total_count
frappe.response['message'] = {
'assets': assets,
'total_count': total_count,
'limit': int(limit),
'offset': int(offset),
'has_more': has_more
}
except Exception as e:
frappe.log_error(frappe.get_traceback(), 'Get Assets API Error')
frappe.response['message'] = {
'error': str(e),
'assets': [],
'total_count': 0
}
@frappe.whitelist()
def get_asset_details(asset_name):
"""
Get detailed information about a specific asset
Args:
asset_name: Name/ID of the asset
Returns:
Asset document with all fields
"""
try:
if not asset_name:
frappe.throw(_('Asset name is required'))
# Check if user has permission to read this asset
if not frappe.has_permission('Asset', 'read', asset_name):
frappe.throw(_('Not permitted to access this asset'))
# Get asset details
asset = frappe.get_doc('Asset', asset_name)
frappe.response['message'] = asset.as_dict()
except Exception as e:
frappe.log_error(frappe.get_traceback(), 'Get Asset Details API Error')
frappe.response['message'] = {
'error': str(e)
}
@frappe.whitelist()
def create_asset(asset_data):
"""
Create a new asset
Args:
asset_data: JSON string containing asset fields
Returns:
Created asset document
"""
try:
import json
# Parse asset data
if isinstance(asset_data, str):
asset_data = json.loads(asset_data)
# Check if user has permission to create asset
if not frappe.has_permission('Asset', 'create'):
frappe.throw(_('Not permitted to create asset'))
# Create new asset
asset = frappe.get_doc({
'doctype': 'Asset',
**asset_data
})
asset.insert()
frappe.db.commit()
frappe.response['message'] = {
'success': True,
'asset': asset.as_dict(),
'message': _('Asset created successfully')
}
except Exception as e:
frappe.db.rollback()
frappe.log_error(frappe.get_traceback(), 'Create Asset API Error')
frappe.response['message'] = {
'success': False,
'error': str(e)
}
@frappe.whitelist()
def update_asset(asset_name, asset_data):
"""
Update an existing asset
Args:
asset_name: Name/ID of the asset
asset_data: JSON string containing fields to update
Returns:
Updated asset document
"""
try:
import json
if not asset_name:
frappe.throw(_('Asset name is required'))
# Parse asset data
if isinstance(asset_data, str):
asset_data = json.loads(asset_data)
# Check if user has permission to update this asset
if not frappe.has_permission('Asset', 'write', asset_name):
frappe.throw(_('Not permitted to update this asset'))
# Get and update asset
asset = frappe.get_doc('Asset', asset_name)
# Update fields
for key, value in asset_data.items():
if hasattr(asset, key):
setattr(asset, key, value)
asset.save()
frappe.db.commit()
frappe.response['message'] = {
'success': True,
'asset': asset.as_dict(),
'message': _('Asset updated successfully')
}
except Exception as e:
frappe.db.rollback()
frappe.log_error(frappe.get_traceback(), 'Update Asset API Error')
frappe.response['message'] = {
'success': False,
'error': str(e)
}
@frappe.whitelist()
def delete_asset(asset_name):
"""
Delete an asset
Args:
asset_name: Name/ID of the asset
Returns:
Success message
"""
try:
if not asset_name:
frappe.throw(_('Asset name is required'))
# Check if user has permission to delete this asset
if not frappe.has_permission('Asset', 'delete', asset_name):
frappe.throw(_('Not permitted to delete this asset'))
# Delete asset
frappe.delete_doc('Asset', asset_name)
frappe.db.commit()
frappe.response['message'] = {
'success': True,
'message': _('Asset deleted successfully')
}
except Exception as e:
frappe.db.rollback()
frappe.log_error(frappe.get_traceback(), 'Delete Asset API Error')
frappe.response['message'] = {
'success': False,
'error': str(e)
}
@frappe.whitelist()
def get_asset_filters():
"""
Get available filter options for assets
Returns:
{
"companies": [...],
"locations": [...],
"departments": [...],
"asset_types": [...],
"manufacturers": [...],
"device_statuses": [...]
}
"""
try:
filters = {
'companies': frappe.get_all('Company', fields=['name'], pluck='name'),
'locations': frappe.db.get_all('Asset',
filters={'location': ['!=', '']},
fields=['location'],
distinct=True,
pluck='location'
),
'departments': frappe.get_all('Department', fields=['name'], pluck='name'),
'asset_types': frappe.db.get_all('Asset',
filters={'custom_asset_type': ['!=', '']},
fields=['custom_asset_type'],
distinct=True,
pluck='custom_asset_type'
),
'manufacturers': frappe.db.get_all('Asset',
filters={'custom_manufacturer': ['!=', '']},
fields=['custom_manufacturer'],
distinct=True,
pluck='custom_manufacturer'
),
'device_statuses': frappe.db.get_all('Asset',
filters={'custom_device_status': ['!=', '']},
fields=['custom_device_status'],
distinct=True,
pluck='custom_device_status'
),
}
frappe.response['message'] = filters
except Exception as e:
frappe.log_error(frappe.get_traceback(), 'Get Asset Filters API Error')
frappe.response['message'] = {
'error': str(e)
}
@frappe.whitelist()
def get_asset_stats():
"""
Get statistics about assets
Returns:
{
"total_assets": int,
"by_status": {...},
"by_company": {...},
"by_type": {...},
"total_amount": float
}
"""
try:
# Total assets
total_assets = frappe.db.count('Asset')
# Assets by device status
by_status = {}
status_data = frappe.db.sql("""
SELECT custom_device_status, COUNT(*) as count
FROM `tabAsset`
WHERE custom_device_status IS NOT NULL AND custom_device_status != ''
GROUP BY custom_device_status
""", as_dict=True)
for row in status_data:
by_status[row.custom_device_status] = row.count
# Assets by company
by_company = {}
company_data = frappe.db.sql("""
SELECT company, COUNT(*) as count
FROM `tabAsset`
WHERE company IS NOT NULL AND company != ''
GROUP BY company
""", as_dict=True)
for row in company_data:
by_company[row.company] = row.count
# Assets by type
by_type = {}
type_data = frappe.db.sql("""
SELECT custom_asset_type, COUNT(*) as count
FROM `tabAsset`
WHERE custom_asset_type IS NOT NULL AND custom_asset_type != ''
GROUP BY custom_asset_type
""", as_dict=True)
for row in type_data:
by_type[row.custom_asset_type] = row.count
# Total amount
total_amount = frappe.db.sql("""
SELECT SUM(custom_total_amount) as total
FROM `tabAsset`
WHERE custom_total_amount IS NOT NULL
""")[0][0] or 0
frappe.response['message'] = {
'total_assets': total_assets,
'by_status': by_status,
'by_company': by_company,
'by_type': by_type,
'total_amount': float(total_amount)
}
except Exception as e:
frappe.log_error(frappe.get_traceback(), 'Get Asset Stats API Error')
frappe.response['message'] = {
'error': str(e)
}
@frappe.whitelist()
def search_assets(search_term, limit=10):
"""
Search assets by name, serial number, or other fields
Args:
search_term: Search query string
limit: Maximum number of results (default: 10)
Returns:
List of matching assets
"""
try:
if not search_term:
frappe.response['message'] = []
return
search_term = f"%{search_term}%"
assets = frappe.db.sql("""
SELECT
name,
asset_name,
custom_serial_number,
location,
company,
custom_device_status
FROM `tabAsset`
WHERE
asset_name LIKE %(search)s
OR custom_serial_number LIKE %(search)s
OR location LIKE %(search)s
OR custom_manufacturer LIKE %(search)s
LIMIT %(limit)s
""", {
'search': search_term,
'limit': int(limit)
}, as_dict=True)
frappe.response['message'] = assets
except Exception as e:
frappe.log_error(frappe.get_traceback(), 'Search Assets API Error')
frappe.response['message'] = {
'error': str(e)
}

247
frappe_dashboard_api.py Normal file
View File

@ -0,0 +1,247 @@
import frappe
from frappe import _
from frappe.utils import nowdate
import json
def _ok(payload, code=200):
frappe.response.status_code = code
frappe.response.message = payload
def _err(msg, code=500):
frappe.response.status_code = code
frappe.response.message = {"error": msg}
@frappe.whitelist()
def get_number_cards():
"""
Returns counts for Number Cards:
- total_assets
- work_orders_open
- work_orders_in_progress
- work_orders_completed
"""
try:
total_assets = frappe.db.count("Asset")
work_orders_open = frappe.db.count("Work Order", {"status": ["in", ["Not Started", "Open", "Pending"]]})
work_orders_in_progress = frappe.db.count("Work Order", {"status": ["in", ["In Process", "In Progress", "Started"]]})
work_orders_completed = frappe.db.count("Work Order", {"status": ["in", ["Completed", "Closed", "Finished"]]})
_ok({
"total_assets": total_assets,
"work_orders_open": work_orders_open,
"work_orders_in_progress": work_orders_in_progress,
"work_orders_completed": work_orders_completed,
})
except Exception as e:
frappe.log_error(frappe.get_traceback(), "get_number_cards")
_err(str(e))
@frappe.whitelist()
def list_dashboard_charts(search=None, public_only=True, limit=50):
"""
List available Dashboard Chart docs and their y-axis rows.
"""
try:
filters = {}
if str(public_only) in ("1", "true", "True"): # tolerate string flags
filters["is_public"] = 1
charts = frappe.get_all(
"Dashboard Chart",
filters=filters,
fields=[
"name",
"chart_name",
"type",
"is_public",
"chart_type",
"report_name",
"use_report_chart",
"x_field",
"time_interval",
"timespan",
"custom_options",
],
limit=int(limit or 50),
order_by="modified desc",
)
for c in charts:
y_rows = frappe.get_all(
"Dashboard Chart Field",
filters={"parenttype": "Dashboard Chart", "parent": c["name"]},
fields=["y_field", "color"],
order_by="idx asc",
)
c["y_axes"] = y_rows
_ok({"charts": charts})
except Exception as e:
frappe.log_error(frappe.get_traceback(), "list_dashboard_charts")
_err(str(e))
@frappe.whitelist()
def get_dashboard_chart_data(chart_name, report_filters=None):
"""
Return chart-ready JSON for any Dashboard Chart (Report-based or Custom).
"""
try:
if isinstance(report_filters, str):
report_filters = json.loads(report_filters or "{}")
report_filters = report_filters or {}
chart = frappe.get_doc("Dashboard Chart", chart_name)
# Handle Custom charts (non-Report based)
if chart.chart_type != "Report" or not chart.use_report_chart:
# For Custom charts, query the source doctype directly
try:
# Get chart configuration
source = chart.document_type
based_on = chart.based_on
value_based_on = chart.value_based_on or "name"
# Build aggregation query
if chart.type == "Pie":
# Group by based_on field and count
data = frappe.db.sql(f"""
SELECT {based_on} as label, COUNT({value_based_on}) as value
FROM `tab{source}`
GROUP BY {based_on}
ORDER BY value DESC
""", as_dict=True)
labels = [str(d.get("label")) for d in data]
values = [float(d.get("value") or 0) for d in data]
_ok({
"labels": labels,
"datasets": [{"name": "count", "values": values}],
"type": "Pie",
"options": _parse_custom_options(chart.custom_options),
"source": {"doctype": source},
})
else:
# Bar chart: group by based_on
data = frappe.db.sql(f"""
SELECT {based_on} as label, COUNT({value_based_on}) as value
FROM `tab{source}`
GROUP BY {based_on}
ORDER BY value DESC
LIMIT 20
""", as_dict=True)
labels = [str(d.get("label")) for d in data]
values = [float(d.get("value") or 0) for d in data]
_ok({
"labels": labels,
"datasets": [{"name": "count", "values": values, "color": "#4F46E5"}],
"type": "Bar",
"options": _parse_custom_options(chart.custom_options),
"source": {"doctype": source},
})
except Exception as e:
frappe.log_error(frappe.get_traceback(), f"Custom Chart Error: {chart_name}")
_err(f"Error processing custom chart: {str(e)}")
return
y_axes = frappe.get_all(
"Dashboard Chart Field",
filters={"parenttype": "Dashboard Chart", "parent": chart.name},
fields=["y_field", "color"],
order_by="idx asc",
)
run = frappe.get_attr("frappe.desk.query_report.run")
report_result = run(chart.report_name, filters=report_filters)
rows = report_result.get("result", []) or []
data_rows = [r for r in rows if not r.get("is_total_row")]
x_key = chart.x_field
labels = [str(r.get(x_key)) for r in data_rows if r.get(x_key) is not None]
datasets = []
for y in y_axes:
series_name = y.get("y_field") # Use field name as series name
values = []
for r in data_rows:
val = r.get(y.get("y_field"))
try:
values.append(float(val) if val is not None else 0)
except Exception:
values.append(0)
datasets.append({"name": series_name, "values": values, "color": y.get("color")})
chart_type = (chart.type or "Bar").title()
if chart_type.lower() == "pie":
ds = datasets[0] if datasets else {"name": "value", "values": []}
_ok({
"labels": labels,
"datasets": [ds],
"type": "Pie",
"options": _parse_custom_options(chart.custom_options),
"source": {"report": chart.report_name},
})
return
_ok({
"labels": labels,
"datasets": datasets,
"type": chart_type,
"options": _parse_custom_options(chart.custom_options),
"source": {"report": chart.report_name},
})
except Exception as e:
frappe.log_error(frappe.get_traceback(), "get_dashboard_chart_data")
_err(str(e))
def _parse_custom_options(raw):
if not raw:
return {}
try:
if isinstance(raw, dict):
return raw
return json.loads(raw)
except Exception:
return {}
@frappe.whitelist()
def get_repair_cost_by_item(year=None):
"""
Example specialized endpoint for 'Repair Cost' report style chart
(X: item_code, Y: amount, Filter: Year)
"""
try:
year = int(year or frappe.utils.getdate(nowdate()).year)
rows = frappe.db.sql(
"""
SELECT item_code, SUM(amount) as amount
FROM `tabWork Order` wo
WHERE YEAR(wo.posting_date) = %(year)s
GROUP BY item_code
ORDER BY amount DESC
""",
{"year": year},
as_dict=True,
)
labels = [r.item_code or "Unknown" for r in rows]
values = [float(r.amount or 0) for r in rows]
_ok({
"labels": labels,
"datasets": [{"name": f"Repair Cost {year}", "values": values}],
"type": "Bar",
"options": {},
})
except Exception as e:
frappe.log_error(frappe.get_traceback(), "get_repair_cost_by_item")
_err(str(e))

13
index.html Normal file
View File

@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>frappe-frontend</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>

16
node_modules/.bin/acorn generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../acorn/bin/acorn" "$@"
else
exec node "$basedir/../acorn/bin/acorn" "$@"
fi

17
node_modules/.bin/acorn.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\acorn\bin\acorn" %*

28
node_modules/.bin/acorn.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../acorn/bin/acorn" $args
} else {
& "$basedir/node$exe" "$basedir/../acorn/bin/acorn" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../acorn/bin/acorn" $args
} else {
& "node$exe" "$basedir/../acorn/bin/acorn" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/autoprefixer generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../autoprefixer/bin/autoprefixer" "$@"
else
exec node "$basedir/../autoprefixer/bin/autoprefixer" "$@"
fi

17
node_modules/.bin/autoprefixer.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\autoprefixer\bin\autoprefixer" %*

28
node_modules/.bin/autoprefixer.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../autoprefixer/bin/autoprefixer" $args
} else {
& "$basedir/node$exe" "$basedir/../autoprefixer/bin/autoprefixer" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../autoprefixer/bin/autoprefixer" $args
} else {
& "node$exe" "$basedir/../autoprefixer/bin/autoprefixer" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/baseline-browser-mapping generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../baseline-browser-mapping/dist/cli.js" "$@"
else
exec node "$basedir/../baseline-browser-mapping/dist/cli.js" "$@"
fi

17
node_modules/.bin/baseline-browser-mapping.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\baseline-browser-mapping\dist\cli.js" %*

28
node_modules/.bin/baseline-browser-mapping.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../baseline-browser-mapping/dist/cli.js" $args
} else {
& "$basedir/node$exe" "$basedir/../baseline-browser-mapping/dist/cli.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../baseline-browser-mapping/dist/cli.js" $args
} else {
& "node$exe" "$basedir/../baseline-browser-mapping/dist/cli.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/browserslist generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../browserslist/cli.js" "$@"
else
exec node "$basedir/../browserslist/cli.js" "$@"
fi

17
node_modules/.bin/browserslist.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\browserslist\cli.js" %*

28
node_modules/.bin/browserslist.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../browserslist/cli.js" $args
} else {
& "$basedir/node$exe" "$basedir/../browserslist/cli.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../browserslist/cli.js" $args
} else {
& "node$exe" "$basedir/../browserslist/cli.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/cssesc generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../cssesc/bin/cssesc" "$@"
else
exec node "$basedir/../cssesc/bin/cssesc" "$@"
fi

17
node_modules/.bin/cssesc.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\cssesc\bin\cssesc" %*

28
node_modules/.bin/cssesc.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../cssesc/bin/cssesc" $args
} else {
& "$basedir/node$exe" "$basedir/../cssesc/bin/cssesc" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../cssesc/bin/cssesc" $args
} else {
& "node$exe" "$basedir/../cssesc/bin/cssesc" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/esbuild generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../esbuild/bin/esbuild" "$@"
else
exec node "$basedir/../esbuild/bin/esbuild" "$@"
fi

17
node_modules/.bin/esbuild.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\esbuild\bin\esbuild" %*

28
node_modules/.bin/esbuild.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../esbuild/bin/esbuild" $args
} else {
& "$basedir/node$exe" "$basedir/../esbuild/bin/esbuild" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../esbuild/bin/esbuild" $args
} else {
& "node$exe" "$basedir/../esbuild/bin/esbuild" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/eslint generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../eslint/bin/eslint.js" "$@"
else
exec node "$basedir/../eslint/bin/eslint.js" "$@"
fi

17
node_modules/.bin/eslint.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\eslint\bin\eslint.js" %*

28
node_modules/.bin/eslint.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../eslint/bin/eslint.js" $args
} else {
& "$basedir/node$exe" "$basedir/../eslint/bin/eslint.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../eslint/bin/eslint.js" $args
} else {
& "node$exe" "$basedir/../eslint/bin/eslint.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/glob generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../glob/dist/esm/bin.mjs" "$@"
else
exec node "$basedir/../glob/dist/esm/bin.mjs" "$@"
fi

17
node_modules/.bin/glob.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\glob\dist\esm\bin.mjs" %*

28
node_modules/.bin/glob.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../glob/dist/esm/bin.mjs" $args
} else {
& "$basedir/node$exe" "$basedir/../glob/dist/esm/bin.mjs" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../glob/dist/esm/bin.mjs" $args
} else {
& "node$exe" "$basedir/../glob/dist/esm/bin.mjs" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/jiti generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../jiti/lib/jiti-cli.mjs" "$@"
else
exec node "$basedir/../jiti/lib/jiti-cli.mjs" "$@"
fi

17
node_modules/.bin/jiti.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\jiti\lib\jiti-cli.mjs" %*

28
node_modules/.bin/jiti.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../jiti/lib/jiti-cli.mjs" $args
} else {
& "$basedir/node$exe" "$basedir/../jiti/lib/jiti-cli.mjs" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../jiti/lib/jiti-cli.mjs" $args
} else {
& "node$exe" "$basedir/../jiti/lib/jiti-cli.mjs" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/js-yaml generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../js-yaml/bin/js-yaml.js" "$@"
else
exec node "$basedir/../js-yaml/bin/js-yaml.js" "$@"
fi

17
node_modules/.bin/js-yaml.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\js-yaml\bin\js-yaml.js" %*

28
node_modules/.bin/js-yaml.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args
} else {
& "$basedir/node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args
} else {
& "node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/jsesc generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../jsesc/bin/jsesc" "$@"
else
exec node "$basedir/../jsesc/bin/jsesc" "$@"
fi

17
node_modules/.bin/jsesc.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\jsesc\bin\jsesc" %*

28
node_modules/.bin/jsesc.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../jsesc/bin/jsesc" $args
} else {
& "$basedir/node$exe" "$basedir/../jsesc/bin/jsesc" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../jsesc/bin/jsesc" $args
} else {
& "node$exe" "$basedir/../jsesc/bin/jsesc" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/json5 generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../json5/lib/cli.js" "$@"
else
exec node "$basedir/../json5/lib/cli.js" "$@"
fi

17
node_modules/.bin/json5.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\json5\lib\cli.js" %*

28
node_modules/.bin/json5.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../json5/lib/cli.js" $args
} else {
& "$basedir/node$exe" "$basedir/../json5/lib/cli.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../json5/lib/cli.js" $args
} else {
& "node$exe" "$basedir/../json5/lib/cli.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/nanoid generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../nanoid/bin/nanoid.cjs" "$@"
else
exec node "$basedir/../nanoid/bin/nanoid.cjs" "$@"
fi

17
node_modules/.bin/nanoid.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\nanoid\bin\nanoid.cjs" %*

28
node_modules/.bin/nanoid.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args
} else {
& "$basedir/node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args
} else {
& "node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/node-which generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../which/bin/node-which" "$@"
else
exec node "$basedir/../which/bin/node-which" "$@"
fi

17
node_modules/.bin/node-which.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\which\bin\node-which" %*

28
node_modules/.bin/node-which.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../which/bin/node-which" $args
} else {
& "$basedir/node$exe" "$basedir/../which/bin/node-which" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../which/bin/node-which" $args
} else {
& "node$exe" "$basedir/../which/bin/node-which" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/parser generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../@babel/parser/bin/babel-parser.js" "$@"
else
exec node "$basedir/../@babel/parser/bin/babel-parser.js" "$@"
fi

17
node_modules/.bin/parser.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\@babel\parser\bin\babel-parser.js" %*

28
node_modules/.bin/parser.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../@babel/parser/bin/babel-parser.js" $args
} else {
& "$basedir/node$exe" "$basedir/../@babel/parser/bin/babel-parser.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../@babel/parser/bin/babel-parser.js" $args
} else {
& "node$exe" "$basedir/../@babel/parser/bin/babel-parser.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/resolve generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../resolve/bin/resolve" "$@"
else
exec node "$basedir/../resolve/bin/resolve" "$@"
fi

17
node_modules/.bin/resolve.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\resolve\bin\resolve" %*

28
node_modules/.bin/resolve.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../resolve/bin/resolve" $args
} else {
& "$basedir/node$exe" "$basedir/../resolve/bin/resolve" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../resolve/bin/resolve" $args
} else {
& "node$exe" "$basedir/../resolve/bin/resolve" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/rollup generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../rollup/dist/bin/rollup" "$@"
else
exec node "$basedir/../rollup/dist/bin/rollup" "$@"
fi

17
node_modules/.bin/rollup.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\rollup\dist\bin\rollup" %*

28
node_modules/.bin/rollup.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../rollup/dist/bin/rollup" $args
} else {
& "$basedir/node$exe" "$basedir/../rollup/dist/bin/rollup" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../rollup/dist/bin/rollup" $args
} else {
& "node$exe" "$basedir/../rollup/dist/bin/rollup" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/semver generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../semver/bin/semver.js" "$@"
else
exec node "$basedir/../semver/bin/semver.js" "$@"
fi

17
node_modules/.bin/semver.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\semver\bin\semver.js" %*

28
node_modules/.bin/semver.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../semver/bin/semver.js" $args
} else {
& "$basedir/node$exe" "$basedir/../semver/bin/semver.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../semver/bin/semver.js" $args
} else {
& "node$exe" "$basedir/../semver/bin/semver.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/sucrase generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../sucrase/bin/sucrase" "$@"
else
exec node "$basedir/../sucrase/bin/sucrase" "$@"
fi

16
node_modules/.bin/sucrase-node generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../sucrase/bin/sucrase-node" "$@"
else
exec node "$basedir/../sucrase/bin/sucrase-node" "$@"
fi

17
node_modules/.bin/sucrase-node.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\sucrase\bin\sucrase-node" %*

28
node_modules/.bin/sucrase-node.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../sucrase/bin/sucrase-node" $args
} else {
& "$basedir/node$exe" "$basedir/../sucrase/bin/sucrase-node" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../sucrase/bin/sucrase-node" $args
} else {
& "node$exe" "$basedir/../sucrase/bin/sucrase-node" $args
}
$ret=$LASTEXITCODE
}
exit $ret

17
node_modules/.bin/sucrase.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\sucrase\bin\sucrase" %*

28
node_modules/.bin/sucrase.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../sucrase/bin/sucrase" $args
} else {
& "$basedir/node$exe" "$basedir/../sucrase/bin/sucrase" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../sucrase/bin/sucrase" $args
} else {
& "node$exe" "$basedir/../sucrase/bin/sucrase" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/tailwind generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../tailwindcss/lib/cli.js" "$@"
else
exec node "$basedir/../tailwindcss/lib/cli.js" "$@"
fi

17
node_modules/.bin/tailwind.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\tailwindcss\lib\cli.js" %*

28
node_modules/.bin/tailwind.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../tailwindcss/lib/cli.js" $args
} else {
& "$basedir/node$exe" "$basedir/../tailwindcss/lib/cli.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../tailwindcss/lib/cli.js" $args
} else {
& "node$exe" "$basedir/../tailwindcss/lib/cli.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/tailwindcss generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../tailwindcss/lib/cli.js" "$@"
else
exec node "$basedir/../tailwindcss/lib/cli.js" "$@"
fi

17
node_modules/.bin/tailwindcss.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\tailwindcss\lib\cli.js" %*

28
node_modules/.bin/tailwindcss.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../tailwindcss/lib/cli.js" $args
} else {
& "$basedir/node$exe" "$basedir/../tailwindcss/lib/cli.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../tailwindcss/lib/cli.js" $args
} else {
& "node$exe" "$basedir/../tailwindcss/lib/cli.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/tsc generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../typescript/bin/tsc" "$@"
else
exec node "$basedir/../typescript/bin/tsc" "$@"
fi

17
node_modules/.bin/tsc.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\typescript\bin\tsc" %*

28
node_modules/.bin/tsc.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../typescript/bin/tsc" $args
} else {
& "$basedir/node$exe" "$basedir/../typescript/bin/tsc" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../typescript/bin/tsc" $args
} else {
& "node$exe" "$basedir/../typescript/bin/tsc" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/tsserver generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../typescript/bin/tsserver" "$@"
else
exec node "$basedir/../typescript/bin/tsserver" "$@"
fi

17
node_modules/.bin/tsserver.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\typescript\bin\tsserver" %*

28
node_modules/.bin/tsserver.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../typescript/bin/tsserver" $args
} else {
& "$basedir/node$exe" "$basedir/../typescript/bin/tsserver" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../typescript/bin/tsserver" $args
} else {
& "node$exe" "$basedir/../typescript/bin/tsserver" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/update-browserslist-db generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../update-browserslist-db/cli.js" "$@"
else
exec node "$basedir/../update-browserslist-db/cli.js" "$@"
fi

17
node_modules/.bin/update-browserslist-db.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\update-browserslist-db\cli.js" %*

28
node_modules/.bin/update-browserslist-db.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../update-browserslist-db/cli.js" $args
} else {
& "$basedir/node$exe" "$basedir/../update-browserslist-db/cli.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../update-browserslist-db/cli.js" $args
} else {
& "node$exe" "$basedir/../update-browserslist-db/cli.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
node_modules/.bin/vite generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../vite/bin/vite.js" "$@"
else
exec node "$basedir/../vite/bin/vite.js" "$@"
fi

17
node_modules/.bin/vite.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\vite\bin\vite.js" %*

28
node_modules/.bin/vite.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../vite/bin/vite.js" $args
} else {
& "$basedir/node$exe" "$basedir/../vite/bin/vite.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../vite/bin/vite.js" $args
} else {
& "node$exe" "$basedir/../vite/bin/vite.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

4144
node_modules/.package-lock.json generated vendored Normal file

File diff suppressed because it is too large Load Diff

67
node_modules/.vite/deps/_metadata.json generated vendored Normal file
View File

@ -0,0 +1,67 @@
{
"hash": "4b000bef",
"configHash": "7cc09d5b",
"lockfileHash": "aa9c04ea",
"browserHash": "6a970aed",
"optimized": {
"react": {
"src": "../../react/index.js",
"file": "react.js",
"fileHash": "6bedc2a9",
"needsInterop": true
},
"react-dom": {
"src": "../../react-dom/index.js",
"file": "react-dom.js",
"fileHash": "fdd4792b",
"needsInterop": true
},
"react/jsx-dev-runtime": {
"src": "../../react/jsx-dev-runtime.js",
"file": "react_jsx-dev-runtime.js",
"fileHash": "cd0de2aa",
"needsInterop": true
},
"react/jsx-runtime": {
"src": "../../react/jsx-runtime.js",
"file": "react_jsx-runtime.js",
"fileHash": "ea762930",
"needsInterop": true
},
"axios": {
"src": "../../axios/index.js",
"file": "axios.js",
"fileHash": "c48e11f7",
"needsInterop": false
},
"react-dom/client": {
"src": "../../react-dom/client.js",
"file": "react-dom_client.js",
"fileHash": "5363edec",
"needsInterop": true
},
"react-icons/fa": {
"src": "../../react-icons/fa/index.mjs",
"file": "react-icons_fa.js",
"fileHash": "7c02b8f7",
"needsInterop": false
},
"react-router-dom": {
"src": "../../react-router-dom/dist/index.mjs",
"file": "react-router-dom.js",
"fileHash": "69de7168",
"needsInterop": false
}
},
"chunks": {
"chunk-F5X6INBZ": {
"file": "chunk-F5X6INBZ.js"
},
"chunk-KMU3Z7QX": {
"file": "chunk-KMU3Z7QX.js"
},
"chunk-G3PMV62Z": {
"file": "chunk-G3PMV62Z.js"
}
}
}

2601
node_modules/.vite/deps/axios.js generated vendored Normal file

File diff suppressed because it is too large Load Diff

7
node_modules/.vite/deps/axios.js.map generated vendored Normal file

File diff suppressed because one or more lines are too long

280
node_modules/.vite/deps/chunk-F5X6INBZ.js generated vendored Normal file
View File

@ -0,0 +1,280 @@
import {
require_react
} from "./chunk-KMU3Z7QX.js";
import {
__commonJS
} from "./chunk-G3PMV62Z.js";
// node_modules/react-dom/cjs/react-dom.development.js
var require_react_dom_development = __commonJS({
"node_modules/react-dom/cjs/react-dom.development.js"(exports) {
"use strict";
(function() {
function noop() {
}
function testStringCoercion(value) {
return "" + value;
}
function createPortal$1(children, containerInfo, implementation) {
var key = 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;
try {
testStringCoercion(key);
var JSCompiler_inline_result = false;
} catch (e) {
JSCompiler_inline_result = true;
}
JSCompiler_inline_result && (console.error(
"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",
"function" === typeof Symbol && Symbol.toStringTag && key[Symbol.toStringTag] || key.constructor.name || "Object"
), testStringCoercion(key));
return {
$$typeof: REACT_PORTAL_TYPE,
key: null == key ? null : "" + key,
children,
containerInfo,
implementation
};
}
function getCrossOriginStringAs(as, input) {
if ("font" === as) return "";
if ("string" === typeof input)
return "use-credentials" === input ? input : "";
}
function getValueDescriptorExpectingObjectForWarning(thing) {
return null === thing ? "`null`" : void 0 === thing ? "`undefined`" : "" === thing ? "an empty string" : 'something with type "' + typeof thing + '"';
}
function getValueDescriptorExpectingEnumForWarning(thing) {
return null === thing ? "`null`" : void 0 === thing ? "`undefined`" : "" === thing ? "an empty string" : "string" === typeof thing ? JSON.stringify(thing) : "number" === typeof thing ? "`" + thing + "`" : 'something with type "' + typeof thing + '"';
}
function resolveDispatcher() {
var dispatcher = ReactSharedInternals.H;
null === dispatcher && console.error(
"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem."
);
return dispatcher;
}
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
var React = require_react(), Internals = {
d: {
f: noop,
r: function() {
throw Error(
"Invalid form element. requestFormReset must be passed a form that was rendered by React."
);
},
D: noop,
C: noop,
L: noop,
m: noop,
X: noop,
S: noop,
M: noop
},
p: 0,
findDOMNode: null
}, REACT_PORTAL_TYPE = Symbol.for("react.portal"), ReactSharedInternals = React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;
"function" === typeof Map && null != Map.prototype && "function" === typeof Map.prototype.forEach && "function" === typeof Set && null != Set.prototype && "function" === typeof Set.prototype.clear && "function" === typeof Set.prototype.forEach || console.error(
"React depends on Map and Set built-in types. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"
);
exports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = Internals;
exports.createPortal = function(children, container) {
var key = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;
if (!container || 1 !== container.nodeType && 9 !== container.nodeType && 11 !== container.nodeType)
throw Error("Target container is not a DOM element.");
return createPortal$1(children, container, null, key);
};
exports.flushSync = function(fn) {
var previousTransition = ReactSharedInternals.T, previousUpdatePriority = Internals.p;
try {
if (ReactSharedInternals.T = null, Internals.p = 2, fn)
return fn();
} finally {
ReactSharedInternals.T = previousTransition, Internals.p = previousUpdatePriority, Internals.d.f() && console.error(
"flushSync was called from inside a lifecycle method. React cannot flush when React is already rendering. Consider moving this call to a scheduler task or micro task."
);
}
};
exports.preconnect = function(href, options) {
"string" === typeof href && href ? null != options && "object" !== typeof options ? console.error(
"ReactDOM.preconnect(): Expected the `options` argument (second) to be an object but encountered %s instead. The only supported option at this time is `crossOrigin` which accepts a string.",
getValueDescriptorExpectingEnumForWarning(options)
) : null != options && "string" !== typeof options.crossOrigin && console.error(
"ReactDOM.preconnect(): Expected the `crossOrigin` option (second argument) to be a string but encountered %s instead. Try removing this option or passing a string value instead.",
getValueDescriptorExpectingObjectForWarning(options.crossOrigin)
) : console.error(
"ReactDOM.preconnect(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.",
getValueDescriptorExpectingObjectForWarning(href)
);
"string" === typeof href && (options ? (options = options.crossOrigin, options = "string" === typeof options ? "use-credentials" === options ? options : "" : void 0) : options = null, Internals.d.C(href, options));
};
exports.prefetchDNS = function(href) {
if ("string" !== typeof href || !href)
console.error(
"ReactDOM.prefetchDNS(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.",
getValueDescriptorExpectingObjectForWarning(href)
);
else if (1 < arguments.length) {
var options = arguments[1];
"object" === typeof options && options.hasOwnProperty("crossOrigin") ? console.error(
"ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. It looks like the you are attempting to set a crossOrigin property for this DNS lookup hint. Browsers do not perform DNS queries using CORS and setting this attribute on the resource hint has no effect. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.",
getValueDescriptorExpectingEnumForWarning(options)
) : console.error(
"ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.",
getValueDescriptorExpectingEnumForWarning(options)
);
}
"string" === typeof href && Internals.d.D(href);
};
exports.preinit = function(href, options) {
"string" === typeof href && href ? null == options || "object" !== typeof options ? console.error(
"ReactDOM.preinit(): Expected the `options` argument (second) to be an object with an `as` property describing the type of resource to be preinitialized but encountered %s instead.",
getValueDescriptorExpectingEnumForWarning(options)
) : "style" !== options.as && "script" !== options.as && console.error(
'ReactDOM.preinit(): Expected the `as` property in the `options` argument (second) to contain a valid value describing the type of resource to be preinitialized but encountered %s instead. Valid values for `as` are "style" and "script".',
getValueDescriptorExpectingEnumForWarning(options.as)
) : console.error(
"ReactDOM.preinit(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.",
getValueDescriptorExpectingObjectForWarning(href)
);
if ("string" === typeof href && options && "string" === typeof options.as) {
var as = options.as, crossOrigin = getCrossOriginStringAs(as, options.crossOrigin), integrity = "string" === typeof options.integrity ? options.integrity : void 0, fetchPriority = "string" === typeof options.fetchPriority ? options.fetchPriority : void 0;
"style" === as ? Internals.d.S(
href,
"string" === typeof options.precedence ? options.precedence : void 0,
{
crossOrigin,
integrity,
fetchPriority
}
) : "script" === as && Internals.d.X(href, {
crossOrigin,
integrity,
fetchPriority,
nonce: "string" === typeof options.nonce ? options.nonce : void 0
});
}
};
exports.preinitModule = function(href, options) {
var encountered = "";
"string" === typeof href && href || (encountered += " The `href` argument encountered was " + getValueDescriptorExpectingObjectForWarning(href) + ".");
void 0 !== options && "object" !== typeof options ? encountered += " The `options` argument encountered was " + getValueDescriptorExpectingObjectForWarning(options) + "." : options && "as" in options && "script" !== options.as && (encountered += " The `as` option encountered was " + getValueDescriptorExpectingEnumForWarning(options.as) + ".");
if (encountered)
console.error(
"ReactDOM.preinitModule(): Expected up to two arguments, a non-empty `href` string and, optionally, an `options` object with a valid `as` property.%s",
encountered
);
else
switch (encountered = options && "string" === typeof options.as ? options.as : "script", encountered) {
case "script":
break;
default:
encountered = getValueDescriptorExpectingEnumForWarning(encountered), console.error(
'ReactDOM.preinitModule(): Currently the only supported "as" type for this function is "script" but received "%s" instead. This warning was generated for `href` "%s". In the future other module types will be supported, aligning with the import-attributes proposal. Learn more here: (https://github.com/tc39/proposal-import-attributes)',
encountered,
href
);
}
if ("string" === typeof href)
if ("object" === typeof options && null !== options) {
if (null == options.as || "script" === options.as)
encountered = getCrossOriginStringAs(
options.as,
options.crossOrigin
), Internals.d.M(href, {
crossOrigin: encountered,
integrity: "string" === typeof options.integrity ? options.integrity : void 0,
nonce: "string" === typeof options.nonce ? options.nonce : void 0
});
} else null == options && Internals.d.M(href);
};
exports.preload = function(href, options) {
var encountered = "";
"string" === typeof href && href || (encountered += " The `href` argument encountered was " + getValueDescriptorExpectingObjectForWarning(href) + ".");
null == options || "object" !== typeof options ? encountered += " The `options` argument encountered was " + getValueDescriptorExpectingObjectForWarning(options) + "." : "string" === typeof options.as && options.as || (encountered += " The `as` option encountered was " + getValueDescriptorExpectingObjectForWarning(options.as) + ".");
encountered && console.error(
'ReactDOM.preload(): Expected two arguments, a non-empty `href` string and an `options` object with an `as` property valid for a `<link rel="preload" as="..." />` tag.%s',
encountered
);
if ("string" === typeof href && "object" === typeof options && null !== options && "string" === typeof options.as) {
encountered = options.as;
var crossOrigin = getCrossOriginStringAs(
encountered,
options.crossOrigin
);
Internals.d.L(href, encountered, {
crossOrigin,
integrity: "string" === typeof options.integrity ? options.integrity : void 0,
nonce: "string" === typeof options.nonce ? options.nonce : void 0,
type: "string" === typeof options.type ? options.type : void 0,
fetchPriority: "string" === typeof options.fetchPriority ? options.fetchPriority : void 0,
referrerPolicy: "string" === typeof options.referrerPolicy ? options.referrerPolicy : void 0,
imageSrcSet: "string" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,
imageSizes: "string" === typeof options.imageSizes ? options.imageSizes : void 0,
media: "string" === typeof options.media ? options.media : void 0
});
}
};
exports.preloadModule = function(href, options) {
var encountered = "";
"string" === typeof href && href || (encountered += " The `href` argument encountered was " + getValueDescriptorExpectingObjectForWarning(href) + ".");
void 0 !== options && "object" !== typeof options ? encountered += " The `options` argument encountered was " + getValueDescriptorExpectingObjectForWarning(options) + "." : options && "as" in options && "string" !== typeof options.as && (encountered += " The `as` option encountered was " + getValueDescriptorExpectingObjectForWarning(options.as) + ".");
encountered && console.error(
'ReactDOM.preloadModule(): Expected two arguments, a non-empty `href` string and, optionally, an `options` object with an `as` property valid for a `<link rel="modulepreload" as="..." />` tag.%s',
encountered
);
"string" === typeof href && (options ? (encountered = getCrossOriginStringAs(
options.as,
options.crossOrigin
), Internals.d.m(href, {
as: "string" === typeof options.as && "script" !== options.as ? options.as : void 0,
crossOrigin: encountered,
integrity: "string" === typeof options.integrity ? options.integrity : void 0
})) : Internals.d.m(href));
};
exports.requestFormReset = function(form) {
Internals.d.r(form);
};
exports.unstable_batchedUpdates = function(fn, a) {
return fn(a);
};
exports.useFormState = function(action, initialState, permalink) {
return resolveDispatcher().useFormState(action, initialState, permalink);
};
exports.useFormStatus = function() {
return resolveDispatcher().useHostTransitionStatus();
};
exports.version = "19.2.0";
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
})();
}
});
// node_modules/react-dom/index.js
var require_react_dom = __commonJS({
"node_modules/react-dom/index.js"(exports, module) {
if (false) {
checkDCE();
module.exports = null;
} else {
module.exports = require_react_dom_development();
}
}
});
export {
require_react_dom
};
/*! Bundled license information:
react-dom/cjs/react-dom.development.js:
(**
* @license React
* react-dom.development.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*)
*/
//# sourceMappingURL=chunk-F5X6INBZ.js.map

7
node_modules/.vite/deps/chunk-F5X6INBZ.js.map generated vendored Normal file

File diff suppressed because one or more lines are too long

35
node_modules/.vite/deps/chunk-G3PMV62Z.js generated vendored Normal file
View File

@ -0,0 +1,35 @@
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
export {
__commonJS,
__export,
__toESM
};

7
node_modules/.vite/deps/chunk-G3PMV62Z.js.map generated vendored Normal file
View File

@ -0,0 +1,7 @@
{
"version": 3,
"sources": [],
"sourcesContent": [],
"mappings": "",
"names": []
}

1004
node_modules/.vite/deps/chunk-KMU3Z7QX.js generated vendored Normal file

File diff suppressed because it is too large Load Diff

7
node_modules/.vite/deps/chunk-KMU3Z7QX.js.map generated vendored Normal file

File diff suppressed because one or more lines are too long

3
node_modules/.vite/deps/package.json generated vendored Normal file
View File

@ -0,0 +1,3 @@
{
"type": "module"
}

6
node_modules/.vite/deps/react-dom.js generated vendored Normal file
View File

@ -0,0 +1,6 @@
import {
require_react_dom
} from "./chunk-F5X6INBZ.js";
import "./chunk-KMU3Z7QX.js";
import "./chunk-G3PMV62Z.js";
export default require_react_dom();

Some files were not shown because too many files have changed in this diff Show More