Compare commits
4 Commits
3c60482a26
...
6562a1748f
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6562a1748f | ||
|
|
a26dad6159 | ||
|
|
0769cd11fa | ||
|
|
6b974073cb |
@@ -162,11 +162,19 @@ declare module 'astro:content' {
|
|||||||
};
|
};
|
||||||
|
|
||||||
type DataEntryMap = {
|
type DataEntryMap = {
|
||||||
|
"blog": Record<string, {
|
||||||
|
id: string;
|
||||||
|
body?: string;
|
||||||
|
collection: "blog";
|
||||||
|
data: any;
|
||||||
|
rendered?: RenderedContent;
|
||||||
|
filePath?: string;
|
||||||
|
}>;
|
||||||
"products": Record<string, {
|
"products": Record<string, {
|
||||||
id: string;
|
id: string;
|
||||||
body?: string;
|
body?: string;
|
||||||
collection: "products";
|
collection: "products";
|
||||||
data: InferEntrySchema<"products">;
|
data: any;
|
||||||
rendered?: RenderedContent;
|
rendered?: RenderedContent;
|
||||||
filePath?: string;
|
filePath?: string;
|
||||||
}>;
|
}>;
|
||||||
@@ -202,6 +210,6 @@ declare module 'astro:content' {
|
|||||||
LiveContentConfig['collections'][C]['loader']
|
LiveContentConfig['collections'][C]['loader']
|
||||||
>;
|
>;
|
||||||
|
|
||||||
export type ContentConfig = typeof import("../src/content.config.js");
|
export type ContentConfig = typeof import("../src/content.config.mjs");
|
||||||
export type LiveContentConfig = never;
|
export type LiveContentConfig = never;
|
||||||
}
|
}
|
||||||
40
.gitignore
vendored
40
.gitignore
vendored
@@ -1,39 +1 @@
|
|||||||
# dependencies
|
.node-version
|
||||||
/node_modules
|
|
||||||
/.pnp
|
|
||||||
.pnp.js
|
|
||||||
.yarn/install-state.gz
|
|
||||||
|
|
||||||
# testing
|
|
||||||
/coverage
|
|
||||||
|
|
||||||
# next.js
|
|
||||||
/.next/
|
|
||||||
/out/
|
|
||||||
|
|
||||||
# production
|
|
||||||
/build
|
|
||||||
|
|
||||||
# misc
|
|
||||||
.DS_Store
|
|
||||||
*.pem
|
|
||||||
|
|
||||||
# debug
|
|
||||||
npm-debug.log*
|
|
||||||
yarn-debug.log*
|
|
||||||
yarn-error.log*
|
|
||||||
|
|
||||||
# local env files
|
|
||||||
.env*.local
|
|
||||||
.env
|
|
||||||
|
|
||||||
# vercel
|
|
||||||
.vercel
|
|
||||||
|
|
||||||
# typescript
|
|
||||||
*.tsbuildinfo
|
|
||||||
next-env.d.ts
|
|
||||||
|
|
||||||
# IDE
|
|
||||||
.idea/
|
|
||||||
.vscode/
|
|
||||||
|
|||||||
11
Dockerfile
11
Dockerfile
@@ -6,13 +6,14 @@ WORKDIR /app
|
|||||||
# Copy package files
|
# Copy package files
|
||||||
COPY package*.json ./
|
COPY package*.json ./
|
||||||
|
|
||||||
# Install dependencies
|
# Install ALL dependencies (including sharp for image optimization)
|
||||||
RUN npm ci
|
RUN npm ci
|
||||||
|
|
||||||
# Copy source code
|
# Copy source code
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
# Build the project
|
# Build the project
|
||||||
|
# Astro automatically copies public/ to dist/
|
||||||
RUN npm run build
|
RUN npm run build
|
||||||
|
|
||||||
# Production Stage
|
# Production Stage
|
||||||
@@ -23,13 +24,11 @@ WORKDIR /app
|
|||||||
# Copy package files
|
# Copy package files
|
||||||
COPY package*.json ./
|
COPY package*.json ./
|
||||||
|
|
||||||
# Install production dependencies only
|
# Install ALL dependencies (sharp is required for Astro image optimization)
|
||||||
RUN npm ci --production
|
RUN npm ci
|
||||||
|
|
||||||
# Copy built assets from builder
|
# Copy ONLY dist folder (contains build + public assets like favicon)
|
||||||
COPY --from=builder /app/dist ./dist
|
COPY --from=builder /app/dist ./dist
|
||||||
COPY --from=builder /app/public ./public
|
|
||||||
COPY --from=builder /app/astro.config.mjs ./
|
|
||||||
|
|
||||||
# Expose port
|
# Expose port
|
||||||
EXPOSE 4321
|
EXPOSE 4321
|
||||||
|
|||||||
140
README.md
140
README.md
@@ -1,125 +1,43 @@
|
|||||||
# Deal Plus Tech - Next.js Website
|
# Astro Starter Kit: Minimal
|
||||||
|
|
||||||
Complete redesign of dealplustech.co.th website built with Next.js 14, TypeScript, and Tailwind CSS.
|
```sh
|
||||||
|
npm create astro@latest -- --template minimal
|
||||||
## Features
|
|
||||||
|
|
||||||
- 🚀 Next.js 14 with App Router
|
|
||||||
- 💅 Tailwind CSS for styling
|
|
||||||
- 📝 Headless WordPress integration for Blog
|
|
||||||
- 🌐 Thai URL support for product categories
|
|
||||||
- 📱 Fully responsive design
|
|
||||||
- 🔍 SEO optimized
|
|
||||||
|
|
||||||
## Getting Started
|
|
||||||
|
|
||||||
### Prerequisites
|
|
||||||
|
|
||||||
- Node.js 18.17 or later
|
|
||||||
- npm or yarn
|
|
||||||
|
|
||||||
### Installation
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm install
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Environment Variables
|
> 🧑🚀 **Seasoned astronaut?** Delete this file. Have fun!
|
||||||
|
|
||||||
Copy `.env.example` to `.env.local` and fill in your values:
|
## 🚀 Project Structure
|
||||||
|
|
||||||
```bash
|
Inside of your Astro project, you'll see the following folders and files:
|
||||||
cp .env.example .env.local
|
|
||||||
|
```text
|
||||||
|
/
|
||||||
|
├── public/
|
||||||
|
├── src/
|
||||||
|
│ └── pages/
|
||||||
|
│ └── index.astro
|
||||||
|
└── package.json
|
||||||
```
|
```
|
||||||
|
|
||||||
Required environment variables:
|
Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name.
|
||||||
- `NEXT_PUBLIC_WORDPRESS_API_URL` - Your WordPress REST API URL (e.g., https://your-domain.com/wp-json/wp/v2)
|
|
||||||
- `NEXT_PUBLIC_SITE_URL` - Your production site URL
|
|
||||||
- `NEXT_PUBLIC_PHONE` - Contact phone number
|
|
||||||
- `NEXT_PUBLIC_EMAIL` - Contact email
|
|
||||||
- `NEXT_PUBLIC_LINE_ID` - LINE ID for contact
|
|
||||||
- `NEXT_PUBLIC_FACEBOOK_URL` - Facebook page URL
|
|
||||||
- `NEXT_PUBLIC_COMPANY_ADDRESS` - Company address
|
|
||||||
|
|
||||||
### Development
|
There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components.
|
||||||
|
|
||||||
```bash
|
Any static assets, like images, can be placed in the `public/` directory.
|
||||||
npm run dev
|
|
||||||
```
|
|
||||||
|
|
||||||
Open [http://localhost:3000](http://localhost:3000) in your browser.
|
## 🧞 Commands
|
||||||
|
|
||||||
### Production Build
|
All commands are run from the root of the project, from a terminal:
|
||||||
|
|
||||||
```bash
|
| Command | Action |
|
||||||
npm run build
|
| :------------------------ | :----------------------------------------------- |
|
||||||
npm start
|
| `npm install` | Installs dependencies |
|
||||||
```
|
| `npm run dev` | Starts local dev server at `localhost:4321` |
|
||||||
|
| `npm run build` | Build your production site to `./dist/` |
|
||||||
|
| `npm run preview` | Preview your build locally, before deploying |
|
||||||
|
| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` |
|
||||||
|
| `npm run astro -- --help` | Get help using the Astro CLI |
|
||||||
|
|
||||||
## Project Structure
|
## 👀 Want to learn more?
|
||||||
|
|
||||||
```
|
Feel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat).
|
||||||
src/
|
|
||||||
├── app/ # Next.js App Router pages
|
|
||||||
│ ├── layout.tsx # Root layout
|
|
||||||
│ ├── page.tsx # Homepage
|
|
||||||
│ ├── about-us/ # About page
|
|
||||||
│ ├── services/ # Services page
|
|
||||||
│ ├── portfolio/ # Portfolio page
|
|
||||||
│ ├── contact-us/ # Contact page
|
|
||||||
│ ├── all-projects/ # FAQ page
|
|
||||||
│ ├── product/ # Products listing
|
|
||||||
│ ├── blog/ # Blog pages
|
|
||||||
│ └── [[...slug]]/ # Product category catch-all
|
|
||||||
├── components/
|
|
||||||
│ ├── layout/ # Header, Footer, FloatingContact
|
|
||||||
│ ├── sections/ # Page sections
|
|
||||||
│ └── ui/ # UI components
|
|
||||||
├── lib/
|
|
||||||
│ ├── utils.ts # Utility functions
|
|
||||||
│ └── wordpress.ts # WordPress API client
|
|
||||||
├── types/
|
|
||||||
│ └── index.ts # TypeScript types
|
|
||||||
├── data/
|
|
||||||
│ └── site-config.ts # Site configuration
|
|
||||||
└── styles/
|
|
||||||
└── globals.css # Global styles
|
|
||||||
```
|
|
||||||
|
|
||||||
## Deployment
|
|
||||||
|
|
||||||
### Vercel (Recommended)
|
|
||||||
|
|
||||||
1. Push your code to GitHub
|
|
||||||
2. Import your repository on Vercel
|
|
||||||
3. Add environment variables in Vercel dashboard
|
|
||||||
4. Deploy!
|
|
||||||
|
|
||||||
### Other Platforms
|
|
||||||
|
|
||||||
The project can be deployed to any platform that supports Next.js:
|
|
||||||
- Netlify
|
|
||||||
- AWS Amplify
|
|
||||||
- Docker
|
|
||||||
- Self-hosted Node.js server
|
|
||||||
|
|
||||||
## WordPress Integration
|
|
||||||
|
|
||||||
This site uses WordPress as a headless CMS for the Blog section.
|
|
||||||
|
|
||||||
### Setup WordPress
|
|
||||||
|
|
||||||
1. Install WordPress on your server
|
|
||||||
2. Ensure the REST API is enabled (default in modern WordPress)
|
|
||||||
3. Set `NEXT_PUBLIC_WORDPRESS_API_URL` to your WordPress API endpoint
|
|
||||||
4. Create posts with featured images for best display
|
|
||||||
|
|
||||||
### API Endpoints Used
|
|
||||||
|
|
||||||
- `/posts` - Blog posts
|
|
||||||
- `/categories` - Post categories
|
|
||||||
- `/_embed` - Embedded author and media data
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
Private project for Deal Plus Tech Co., Ltd.
|
|
||||||
|
|||||||
1
dealplustech-astro/.gitignore
vendored
1
dealplustech-astro/.gitignore
vendored
@@ -1 +0,0 @@
|
|||||||
.node-version
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
# Build Stage
|
|
||||||
FROM node:20-alpine AS builder
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
# Copy package files
|
|
||||||
COPY package*.json ./
|
|
||||||
|
|
||||||
# Install dependencies
|
|
||||||
RUN npm ci
|
|
||||||
|
|
||||||
# Copy source code
|
|
||||||
COPY . .
|
|
||||||
|
|
||||||
# Build the project
|
|
||||||
RUN npm run build
|
|
||||||
|
|
||||||
# Production Stage
|
|
||||||
FROM node:20-alpine
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
# Copy package files
|
|
||||||
COPY package*.json ./
|
|
||||||
|
|
||||||
# Install production dependencies only
|
|
||||||
RUN npm ci --production
|
|
||||||
|
|
||||||
# Copy built assets from builder
|
|
||||||
COPY --from=builder /app/dist ./dist
|
|
||||||
COPY --from=builder /app/public ./public
|
|
||||||
COPY --from=builder /app/astro.config.mjs ./
|
|
||||||
|
|
||||||
# Expose port
|
|
||||||
EXPOSE 4321
|
|
||||||
|
|
||||||
# Health check
|
|
||||||
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
|
||||||
CMD node -e "require('http').get('http://localhost:4321', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"
|
|
||||||
|
|
||||||
# Start the server
|
|
||||||
CMD ["npm", "run", "preview", "--", "--host", "0.0.0.0", "--port", "4321"]
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
# Astro Starter Kit: Minimal
|
|
||||||
|
|
||||||
```sh
|
|
||||||
npm create astro@latest -- --template minimal
|
|
||||||
```
|
|
||||||
|
|
||||||
> 🧑🚀 **Seasoned astronaut?** Delete this file. Have fun!
|
|
||||||
|
|
||||||
## 🚀 Project Structure
|
|
||||||
|
|
||||||
Inside of your Astro project, you'll see the following folders and files:
|
|
||||||
|
|
||||||
```text
|
|
||||||
/
|
|
||||||
├── public/
|
|
||||||
├── src/
|
|
||||||
│ └── pages/
|
|
||||||
│ └── index.astro
|
|
||||||
└── package.json
|
|
||||||
```
|
|
||||||
|
|
||||||
Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name.
|
|
||||||
|
|
||||||
There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components.
|
|
||||||
|
|
||||||
Any static assets, like images, can be placed in the `public/` directory.
|
|
||||||
|
|
||||||
## 🧞 Commands
|
|
||||||
|
|
||||||
All commands are run from the root of the project, from a terminal:
|
|
||||||
|
|
||||||
| Command | Action |
|
|
||||||
| :------------------------ | :----------------------------------------------- |
|
|
||||||
| `npm install` | Installs dependencies |
|
|
||||||
| `npm run dev` | Starts local dev server at `localhost:4321` |
|
|
||||||
| `npm run build` | Build your production site to `./dist/` |
|
|
||||||
| `npm run preview` | Preview your build locally, before deploying |
|
|
||||||
| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` |
|
|
||||||
| `npm run astro -- --help` | Get help using the Astro CLI |
|
|
||||||
|
|
||||||
## 👀 Want to learn more?
|
|
||||||
|
|
||||||
Feel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat).
|
|
||||||
5
dealplustech-astro/dist/blog/index.html
vendored
5
dealplustech-astro/dist/blog/index.html
vendored
@@ -1,5 +0,0 @@
|
|||||||
<!DOCTYPE html><html lang="th"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="Astro v5.18.0"><meta name="description" content="บทความความรู้เกี่ยวกับวัสดุท่อ อุปกรณ์ระบบท่อ และเทคนิคการติดตั้ง"><!-- Favicon --><link rel="icon" type="image/svg+xml" href="/favicon.svg"><!-- Google Fonts: Kanit for Thai --><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Kanit:wght@300;400;500;600;700&display=swap" rel="stylesheet"><!-- SEO --><meta property="og:title" content="บทความความรู้"><meta property="og:description" content="บทความความรู้เกี่ยวกับวัสดุท่อ อุปกรณ์ระบบท่อ และเทคนิคการติดตั้ง"><meta property="og:image" content="/og-image.jpg"><meta property="og:type" content="website"><meta name="twitter:card" content="summary_large_image"><title>บทความความรู้ | ดีล พลัส เทค</title><style>html{font-family:Kanit,system-ui,sans-serif}
|
|
||||||
</style></head> <body class="flex flex-col min-h-screen"> <main class="pt-32 pb-16"> <div class="container mx-auto px-4"> <!-- Hero --> <div class="text-center mb-12"> <h1 class="text-4xl md:text-5xl font-bold text-secondary-900 mb-4">
|
|
||||||
บทความ<span class="text-primary-600">ความรู้</span> </h1> <p class="text-xl text-secondary-600 max-w-2xl mx-auto">
|
|
||||||
บทความความรู้เกี่ยวกับวัสดุท่อ อุปกรณ์ระบบท่อ และเทคนิคการติดตั้ง
|
|
||||||
</p> </div> <!-- Blog Grid --> <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8"> </div> </div> </main> </body></html>
|
|
||||||
36
dealplustech-astro/dist/index.html
vendored
36
dealplustech-astro/dist/index.html
vendored
File diff suppressed because one or more lines are too long
2
dealplustech-astro/dist/products/index.html
vendored
2
dealplustech-astro/dist/products/index.html
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
107
dealplustech-astro/dist/products/ท่อhdpe/index.html
vendored
107
dealplustech-astro/dist/products/ท่อhdpe/index.html
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
dealplustech-astro/node_modules/.astro/data-store.json
generated
vendored
1
dealplustech-astro/node_modules/.astro/data-store.json
generated
vendored
File diff suppressed because one or more lines are too long
31
dealplustech-astro/node_modules/.vite/deps/_metadata.json
generated
vendored
31
dealplustech-astro/node_modules/.vite/deps/_metadata.json
generated
vendored
@@ -1,31 +0,0 @@
|
|||||||
{
|
|
||||||
"hash": "bd82ba1f",
|
|
||||||
"configHash": "06117f6a",
|
|
||||||
"lockfileHash": "503a0907",
|
|
||||||
"browserHash": "4ee2f0da",
|
|
||||||
"optimized": {
|
|
||||||
"astro > cssesc": {
|
|
||||||
"src": "../../cssesc/cssesc.js",
|
|
||||||
"file": "astro___cssesc.js",
|
|
||||||
"fileHash": "ac027a7e",
|
|
||||||
"needsInterop": true
|
|
||||||
},
|
|
||||||
"astro > aria-query": {
|
|
||||||
"src": "../../aria-query/lib/index.js",
|
|
||||||
"file": "astro___aria-query.js",
|
|
||||||
"fileHash": "e77ce3d0",
|
|
||||||
"needsInterop": true
|
|
||||||
},
|
|
||||||
"astro > axobject-query": {
|
|
||||||
"src": "../../axobject-query/lib/index.js",
|
|
||||||
"file": "astro___axobject-query.js",
|
|
||||||
"fileHash": "052bb1ed",
|
|
||||||
"needsInterop": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"chunks": {
|
|
||||||
"chunk-BUSYA2B4": {
|
|
||||||
"file": "chunk-BUSYA2B4.js"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
6776
dealplustech-astro/node_modules/.vite/deps/astro___aria-query.js
generated
vendored
6776
dealplustech-astro/node_modules/.vite/deps/astro___aria-query.js
generated
vendored
File diff suppressed because it is too large
Load Diff
7
dealplustech-astro/node_modules/.vite/deps/astro___aria-query.js.map
generated
vendored
7
dealplustech-astro/node_modules/.vite/deps/astro___aria-query.js.map
generated
vendored
File diff suppressed because one or more lines are too long
3754
dealplustech-astro/node_modules/.vite/deps/astro___axobject-query.js
generated
vendored
3754
dealplustech-astro/node_modules/.vite/deps/astro___axobject-query.js
generated
vendored
File diff suppressed because one or more lines are too long
7
dealplustech-astro/node_modules/.vite/deps/astro___axobject-query.js.map
generated
vendored
7
dealplustech-astro/node_modules/.vite/deps/astro___axobject-query.js.map
generated
vendored
File diff suppressed because one or more lines are too long
99
dealplustech-astro/node_modules/.vite/deps/astro___cssesc.js
generated
vendored
99
dealplustech-astro/node_modules/.vite/deps/astro___cssesc.js
generated
vendored
@@ -1,99 +0,0 @@
|
|||||||
import {
|
|
||||||
__commonJS
|
|
||||||
} from "./chunk-BUSYA2B4.js";
|
|
||||||
|
|
||||||
// node_modules/cssesc/cssesc.js
|
|
||||||
var require_cssesc = __commonJS({
|
|
||||||
"node_modules/cssesc/cssesc.js"(exports, module) {
|
|
||||||
var object = {};
|
|
||||||
var hasOwnProperty = object.hasOwnProperty;
|
|
||||||
var merge = function merge2(options, defaults) {
|
|
||||||
if (!options) {
|
|
||||||
return defaults;
|
|
||||||
}
|
|
||||||
var result = {};
|
|
||||||
for (var key in defaults) {
|
|
||||||
result[key] = hasOwnProperty.call(options, key) ? options[key] : defaults[key];
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
var regexAnySingleEscape = /[ -,\.\/:-@\[-\^`\{-~]/;
|
|
||||||
var regexSingleEscape = /[ -,\.\/:-@\[\]\^`\{-~]/;
|
|
||||||
var regexExcessiveSpaces = /(^|\\+)?(\\[A-F0-9]{1,6})\x20(?![a-fA-F0-9\x20])/g;
|
|
||||||
var cssesc = function cssesc2(string, options) {
|
|
||||||
options = merge(options, cssesc2.options);
|
|
||||||
if (options.quotes != "single" && options.quotes != "double") {
|
|
||||||
options.quotes = "single";
|
|
||||||
}
|
|
||||||
var quote = options.quotes == "double" ? '"' : "'";
|
|
||||||
var isIdentifier = options.isIdentifier;
|
|
||||||
var firstChar = string.charAt(0);
|
|
||||||
var output = "";
|
|
||||||
var counter = 0;
|
|
||||||
var length = string.length;
|
|
||||||
while (counter < length) {
|
|
||||||
var character = string.charAt(counter++);
|
|
||||||
var codePoint = character.charCodeAt();
|
|
||||||
var value = void 0;
|
|
||||||
if (codePoint < 32 || codePoint > 126) {
|
|
||||||
if (codePoint >= 55296 && codePoint <= 56319 && counter < length) {
|
|
||||||
var extra = string.charCodeAt(counter++);
|
|
||||||
if ((extra & 64512) == 56320) {
|
|
||||||
codePoint = ((codePoint & 1023) << 10) + (extra & 1023) + 65536;
|
|
||||||
} else {
|
|
||||||
counter--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
value = "\\" + codePoint.toString(16).toUpperCase() + " ";
|
|
||||||
} else {
|
|
||||||
if (options.escapeEverything) {
|
|
||||||
if (regexAnySingleEscape.test(character)) {
|
|
||||||
value = "\\" + character;
|
|
||||||
} else {
|
|
||||||
value = "\\" + codePoint.toString(16).toUpperCase() + " ";
|
|
||||||
}
|
|
||||||
} else if (/[\t\n\f\r\x0B]/.test(character)) {
|
|
||||||
value = "\\" + codePoint.toString(16).toUpperCase() + " ";
|
|
||||||
} else if (character == "\\" || !isIdentifier && (character == '"' && quote == character || character == "'" && quote == character) || isIdentifier && regexSingleEscape.test(character)) {
|
|
||||||
value = "\\" + character;
|
|
||||||
} else {
|
|
||||||
value = character;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
output += value;
|
|
||||||
}
|
|
||||||
if (isIdentifier) {
|
|
||||||
if (/^-[-\d]/.test(output)) {
|
|
||||||
output = "\\-" + output.slice(1);
|
|
||||||
} else if (/\d/.test(firstChar)) {
|
|
||||||
output = "\\3" + firstChar + " " + output.slice(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
output = output.replace(regexExcessiveSpaces, function($0, $1, $2) {
|
|
||||||
if ($1 && $1.length % 2) {
|
|
||||||
return $0;
|
|
||||||
}
|
|
||||||
return ($1 || "") + $2;
|
|
||||||
});
|
|
||||||
if (!isIdentifier && options.wrap) {
|
|
||||||
return quote + output + quote;
|
|
||||||
}
|
|
||||||
return output;
|
|
||||||
};
|
|
||||||
cssesc.options = {
|
|
||||||
"escapeEverything": false,
|
|
||||||
"isIdentifier": false,
|
|
||||||
"quotes": "single",
|
|
||||||
"wrap": false
|
|
||||||
};
|
|
||||||
cssesc.version = "3.0.0";
|
|
||||||
module.exports = cssesc;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
export default require_cssesc();
|
|
||||||
/*! Bundled license information:
|
|
||||||
|
|
||||||
cssesc/cssesc.js:
|
|
||||||
(*! https://mths.be/cssesc v3.0.0 by @mathias *)
|
|
||||||
*/
|
|
||||||
//# sourceMappingURL=astro___cssesc.js.map
|
|
||||||
7
dealplustech-astro/node_modules/.vite/deps/astro___cssesc.js.map
generated
vendored
7
dealplustech-astro/node_modules/.vite/deps/astro___cssesc.js.map
generated
vendored
@@ -1,7 +0,0 @@
|
|||||||
{
|
|
||||||
"version": 3,
|
|
||||||
"sources": ["../../cssesc/cssesc.js"],
|
|
||||||
"sourcesContent": ["/*! https://mths.be/cssesc v3.0.0 by @mathias */\n'use strict';\n\nvar object = {};\nvar hasOwnProperty = object.hasOwnProperty;\nvar merge = function merge(options, defaults) {\n\tif (!options) {\n\t\treturn defaults;\n\t}\n\tvar result = {};\n\tfor (var key in defaults) {\n\t\t// `if (defaults.hasOwnProperty(key) { … }` is not needed here, since\n\t\t// only recognized option names are used.\n\t\tresult[key] = hasOwnProperty.call(options, key) ? options[key] : defaults[key];\n\t}\n\treturn result;\n};\n\nvar regexAnySingleEscape = /[ -,\\.\\/:-@\\[-\\^`\\{-~]/;\nvar regexSingleEscape = /[ -,\\.\\/:-@\\[\\]\\^`\\{-~]/;\nvar regexAlwaysEscape = /['\"\\\\]/;\nvar regexExcessiveSpaces = /(^|\\\\+)?(\\\\[A-F0-9]{1,6})\\x20(?![a-fA-F0-9\\x20])/g;\n\n// https://mathiasbynens.be/notes/css-escapes#css\nvar cssesc = function cssesc(string, options) {\n\toptions = merge(options, cssesc.options);\n\tif (options.quotes != 'single' && options.quotes != 'double') {\n\t\toptions.quotes = 'single';\n\t}\n\tvar quote = options.quotes == 'double' ? '\"' : '\\'';\n\tvar isIdentifier = options.isIdentifier;\n\n\tvar firstChar = string.charAt(0);\n\tvar output = '';\n\tvar counter = 0;\n\tvar length = string.length;\n\twhile (counter < length) {\n\t\tvar character = string.charAt(counter++);\n\t\tvar codePoint = character.charCodeAt();\n\t\tvar value = void 0;\n\t\t// If it’s not a printable ASCII character…\n\t\tif (codePoint < 0x20 || codePoint > 0x7E) {\n\t\t\tif (codePoint >= 0xD800 && codePoint <= 0xDBFF && counter < length) {\n\t\t\t\t// It’s a high surrogate, and there is a next character.\n\t\t\t\tvar extra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) {\n\t\t\t\t\t// next character is low surrogate\n\t\t\t\t\tcodePoint = ((codePoint & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000;\n\t\t\t\t} else {\n\t\t\t\t\t// It’s an unmatched surrogate; only append this code unit, in case\n\t\t\t\t\t// the next code unit is the high surrogate of a surrogate pair.\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvalue = '\\\\' + codePoint.toString(16).toUpperCase() + ' ';\n\t\t} else {\n\t\t\tif (options.escapeEverything) {\n\t\t\t\tif (regexAnySingleEscape.test(character)) {\n\t\t\t\t\tvalue = '\\\\' + character;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = '\\\\' + codePoint.toString(16).toUpperCase() + ' ';\n\t\t\t\t}\n\t\t\t} else if (/[\\t\\n\\f\\r\\x0B]/.test(character)) {\n\t\t\t\tvalue = '\\\\' + codePoint.toString(16).toUpperCase() + ' ';\n\t\t\t} else if (character == '\\\\' || !isIdentifier && (character == '\"' && quote == character || character == '\\'' && quote == character) || isIdentifier && regexSingleEscape.test(character)) {\n\t\t\t\tvalue = '\\\\' + character;\n\t\t\t} else {\n\t\t\t\tvalue = character;\n\t\t\t}\n\t\t}\n\t\toutput += value;\n\t}\n\n\tif (isIdentifier) {\n\t\tif (/^-[-\\d]/.test(output)) {\n\t\t\toutput = '\\\\-' + output.slice(1);\n\t\t} else if (/\\d/.test(firstChar)) {\n\t\t\toutput = '\\\\3' + firstChar + ' ' + output.slice(1);\n\t\t}\n\t}\n\n\t// Remove spaces after `\\HEX` escapes that are not followed by a hex digit,\n\t// since they’re redundant. Note that this is only possible if the escape\n\t// sequence isn’t preceded by an odd number of backslashes.\n\toutput = output.replace(regexExcessiveSpaces, function ($0, $1, $2) {\n\t\tif ($1 && $1.length % 2) {\n\t\t\t// It’s not safe to remove the space, so don’t.\n\t\t\treturn $0;\n\t\t}\n\t\t// Strip the space.\n\t\treturn ($1 || '') + $2;\n\t});\n\n\tif (!isIdentifier && options.wrap) {\n\t\treturn quote + output + quote;\n\t}\n\treturn output;\n};\n\n// Expose default options (so they can be overridden globally).\ncssesc.options = {\n\t'escapeEverything': false,\n\t'isIdentifier': false,\n\t'quotes': 'single',\n\t'wrap': false\n};\n\ncssesc.version = '3.0.0';\n\nmodule.exports = cssesc;\n"],
|
|
||||||
"mappings": ";;;;;AAAA;AAAA;AAGA,QAAI,SAAS,CAAC;AACd,QAAI,iBAAiB,OAAO;AAC5B,QAAI,QAAQ,SAASA,OAAM,SAAS,UAAU;AAC7C,UAAI,CAAC,SAAS;AACb,eAAO;AAAA,MACR;AACA,UAAI,SAAS,CAAC;AACd,eAAS,OAAO,UAAU;AAGzB,eAAO,GAAG,IAAI,eAAe,KAAK,SAAS,GAAG,IAAI,QAAQ,GAAG,IAAI,SAAS,GAAG;AAAA,MAC9E;AACA,aAAO;AAAA,IACR;AAEA,QAAI,uBAAuB;AAC3B,QAAI,oBAAoB;AAExB,QAAI,uBAAuB;AAG3B,QAAI,SAAS,SAASC,QAAO,QAAQ,SAAS;AAC7C,gBAAU,MAAM,SAASA,QAAO,OAAO;AACvC,UAAI,QAAQ,UAAU,YAAY,QAAQ,UAAU,UAAU;AAC7D,gBAAQ,SAAS;AAAA,MAClB;AACA,UAAI,QAAQ,QAAQ,UAAU,WAAW,MAAM;AAC/C,UAAI,eAAe,QAAQ;AAE3B,UAAI,YAAY,OAAO,OAAO,CAAC;AAC/B,UAAI,SAAS;AACb,UAAI,UAAU;AACd,UAAI,SAAS,OAAO;AACpB,aAAO,UAAU,QAAQ;AACxB,YAAI,YAAY,OAAO,OAAO,SAAS;AACvC,YAAI,YAAY,UAAU,WAAW;AACrC,YAAI,QAAQ;AAEZ,YAAI,YAAY,MAAQ,YAAY,KAAM;AACzC,cAAI,aAAa,SAAU,aAAa,SAAU,UAAU,QAAQ;AAEnE,gBAAI,QAAQ,OAAO,WAAW,SAAS;AACvC,iBAAK,QAAQ,UAAW,OAAQ;AAE/B,4BAAc,YAAY,SAAU,OAAO,QAAQ,QAAS;AAAA,YAC7D,OAAO;AAGN;AAAA,YACD;AAAA,UACD;AACA,kBAAQ,OAAO,UAAU,SAAS,EAAE,EAAE,YAAY,IAAI;AAAA,QACvD,OAAO;AACN,cAAI,QAAQ,kBAAkB;AAC7B,gBAAI,qBAAqB,KAAK,SAAS,GAAG;AACzC,sBAAQ,OAAO;AAAA,YAChB,OAAO;AACN,sBAAQ,OAAO,UAAU,SAAS,EAAE,EAAE,YAAY,IAAI;AAAA,YACvD;AAAA,UACD,WAAW,iBAAiB,KAAK,SAAS,GAAG;AAC5C,oBAAQ,OAAO,UAAU,SAAS,EAAE,EAAE,YAAY,IAAI;AAAA,UACvD,WAAW,aAAa,QAAQ,CAAC,iBAAiB,aAAa,OAAO,SAAS,aAAa,aAAa,OAAQ,SAAS,cAAc,gBAAgB,kBAAkB,KAAK,SAAS,GAAG;AAC1L,oBAAQ,OAAO;AAAA,UAChB,OAAO;AACN,oBAAQ;AAAA,UACT;AAAA,QACD;AACA,kBAAU;AAAA,MACX;AAEA,UAAI,cAAc;AACjB,YAAI,UAAU,KAAK,MAAM,GAAG;AAC3B,mBAAS,QAAQ,OAAO,MAAM,CAAC;AAAA,QAChC,WAAW,KAAK,KAAK,SAAS,GAAG;AAChC,mBAAS,QAAQ,YAAY,MAAM,OAAO,MAAM,CAAC;AAAA,QAClD;AAAA,MACD;AAKA,eAAS,OAAO,QAAQ,sBAAsB,SAAU,IAAI,IAAI,IAAI;AACnE,YAAI,MAAM,GAAG,SAAS,GAAG;AAExB,iBAAO;AAAA,QACR;AAEA,gBAAQ,MAAM,MAAM;AAAA,MACrB,CAAC;AAED,UAAI,CAAC,gBAAgB,QAAQ,MAAM;AAClC,eAAO,QAAQ,SAAS;AAAA,MACzB;AACA,aAAO;AAAA,IACR;AAGA,WAAO,UAAU;AAAA,MAChB,oBAAoB;AAAA,MACpB,gBAAgB;AAAA,MAChB,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAEA,WAAO,UAAU;AAEjB,WAAO,UAAU;AAAA;AAAA;",
|
|
||||||
"names": ["merge", "cssesc"]
|
|
||||||
}
|
|
||||||
8
dealplustech-astro/node_modules/.vite/deps/chunk-BUSYA2B4.js
generated
vendored
8
dealplustech-astro/node_modules/.vite/deps/chunk-BUSYA2B4.js
generated
vendored
@@ -1,8 +0,0 @@
|
|||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __commonJS = (cb, mod) => function __require() {
|
|
||||||
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
||||||
};
|
|
||||||
|
|
||||||
export {
|
|
||||||
__commonJS
|
|
||||||
};
|
|
||||||
7
dealplustech-astro/node_modules/.vite/deps/chunk-BUSYA2B4.js.map
generated
vendored
7
dealplustech-astro/node_modules/.vite/deps/chunk-BUSYA2B4.js.map
generated
vendored
@@ -1,7 +0,0 @@
|
|||||||
{
|
|
||||||
"version": 3,
|
|
||||||
"sources": [],
|
|
||||||
"sourcesContent": [],
|
|
||||||
"mappings": "",
|
|
||||||
"names": []
|
|
||||||
}
|
|
||||||
3
dealplustech-astro/node_modules/lru-cache/dist/esm/package.json
generated
vendored
3
dealplustech-astro/node_modules/lru-cache/dist/esm/package.json
generated
vendored
@@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "module"
|
|
||||||
}
|
|
||||||
6048
dealplustech-astro/package-lock.json
generated
6048
dealplustech-astro/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,16 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "dealplustech-astro",
|
|
||||||
"type": "module",
|
|
||||||
"version": "0.0.1",
|
|
||||||
"scripts": {
|
|
||||||
"dev": "astro dev",
|
|
||||||
"build": "astro build",
|
|
||||||
"preview": "astro preview",
|
|
||||||
"astro": "astro"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@tailwindcss/vite": "^4.2.1",
|
|
||||||
"astro": "^5.17.1",
|
|
||||||
"tailwindcss": "^4.2.1"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 655 B |
@@ -1,9 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 128 128">
|
|
||||||
<path d="M50.4 78.5a75.1 75.1 0 0 0-28.5 6.9l24.2-65.7c.7-2 1.9-3.2 3.4-3.2h29c1.5 0 2.7 1.2 3.4 3.2l24.2 65.7s-11.6-7-28.5-7L67 45.5c-.4-1.7-1.6-2.8-2.9-2.8-1.3 0-2.5 1.1-2.9 2.7L50.4 78.5Zm-1.1 28.2Zm-4.2-20.2c-2 6.6-.6 15.8 4.2 20.2a17.5 17.5 0 0 1 .2-.7 5.5 5.5 0 0 1 5.7-4.5c2.8.1 4.3 1.5 4.7 4.7.2 1.1.2 2.3.2 3.5v.4c0 2.7.7 5.2 2.2 7.4a13 13 0 0 0 5.7 4.9v-.3l-.2-.3c-1.8-5.6-.5-9.5 4.4-12.8l1.5-1a73 73 0 0 0 3.2-2.2 16 16 0 0 0 6.8-11.4c.3-2 .1-4-.6-6l-.8.6-1.6 1a37 37 0 0 1-22.4 2.7c-5-.7-9.7-2-13.2-6.2Z" />
|
|
||||||
<style>
|
|
||||||
path { fill: #000; }
|
|
||||||
@media (prefers-color-scheme: dark) {
|
|
||||||
path { fill: #FFF; }
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 749 B |
@@ -1,104 +0,0 @@
|
|||||||
---
|
|
||||||
id: hdpe-pipe-advantages
|
|
||||||
title: "ข้อดีของท่อ HDPE ในงานระบบน้ำ ทำไมถึงเป็นตัวเลือกยอดนิยม"
|
|
||||||
excerpt: "ท่อ HDPE (High Density Polyethylene) เป็นท่อที่ได้รับความนิยมสูงในงานระบบน้ำ เนื่องจากความทนทานและความยืดหยุ่นที่เหนือกว่าท่อชนิดอื่น"
|
|
||||||
date: "2024-01-10"
|
|
||||||
author: "Deal Plus Tech"
|
|
||||||
categories: ["ท่อ HDPE", "ความรู้"]
|
|
||||||
featuredImage: "/images/2021/03/hdpe-pipe_000C.jpg"
|
|
||||||
---
|
|
||||||
|
|
||||||
## ท่อ HDPE คืออะไร?
|
|
||||||
|
|
||||||
ท่อ HDPE (High Density Polyethylene) หรือท่อเอชดีพีอี เป็นท่อที่ผลิตจากโพลิเอทิลีนความหนาแน่นสูง เป็นวัสดุพลาสติกที่มีความแข็งแรงและทนทานเป็นอย่างมาก
|
|
||||||
|
|
||||||
## ข้อดีของท่อ HDPE
|
|
||||||
|
|
||||||
### 1. ความยืดหยุ่นสูง
|
|
||||||
ท่อ HDPE สามารถโค้งงอได้ถึง 45 องศา ทำให้เหมาะสำหรับพื้นที่ติดตั้งจำกัด และสามารถรองรับการเคลื่อนไหวของดินได้ดี
|
|
||||||
|
|
||||||
### 2. ทนทานต่อสารเคมี
|
|
||||||
ท่อ HDPE ทนทานต่อการกัดกร่อนของสารเคมี กรด และด่าง ทำให้เหมาะสำหรับงานอุตสาหกรรม
|
|
||||||
|
|
||||||
### 3. อายุการใช้งานยาวนาน
|
|
||||||
ท่อ HDPE มีอายุการใช้งานมากกว่า 50 ปี เมื่อติดตั้งและใช้งานอย่างถูกต้อง
|
|
||||||
|
|
||||||
### 4. น้ำหนักเบา
|
|
||||||
ท่อ HDPE มีน้ำหนักเบากว่าท่อโลหะ ทำให้ง่ายต่อการขนส่งและติดตั้ง
|
|
||||||
|
|
||||||
### 5. การเชื่อมต่อที่แน่นหนา
|
|
||||||
การเชื่อมท่อ HDPE ด้วยวิธี Butt Fusion ทำให้ท่อเชื่อมต่อกันเป็นเนื้อเดียว ไม่มีรอยต่อ ป้องกันการรั่วซึม
|
|
||||||
|
|
||||||
### 6. ปลอดภัยต่อสุขภาพ
|
|
||||||
ท่อ HDPE ไม่เป็นสนิม ไม่ปล่อยสารพิษ ปลอดภัยสำหรับน้ำดื่ม
|
|
||||||
|
|
||||||
## การใช้งานท่อ HDPE
|
|
||||||
|
|
||||||
### งานประปา
|
|
||||||
- ท่อส่งน้ำประปา
|
|
||||||
- ระบบประปาในบ้านเรือน
|
|
||||||
- ระบบประปาในอาคาร
|
|
||||||
|
|
||||||
### งานเกษตร
|
|
||||||
- ระบบน้ำหยด
|
|
||||||
- ระบบสปริงเกลอร์
|
|
||||||
- ระบบน้ำเพื่อการเกษตร
|
|
||||||
|
|
||||||
### งานอุตสาหกรรม
|
|
||||||
- ท่อส่งสารเคมี
|
|
||||||
- ระบบบำบัดน้ำเสีย
|
|
||||||
- งานโรงงานอุตสาหกรรม
|
|
||||||
|
|
||||||
### งานโครงสร้างพื้นฐาน
|
|
||||||
- งานท่อใต้ดิน
|
|
||||||
- ท่อร้อยสายไฟ
|
|
||||||
- งานสาธารณูปโภค
|
|
||||||
|
|
||||||
## ขนาดท่อ HDPE ที่นิยมใช้
|
|
||||||
|
|
||||||
| ขนาด (มม.) | การใช้งาน |
|
|
||||||
|------------|-----------|
|
|
||||||
| 16-32 | งานประปาภายในบ้าน |
|
|
||||||
| 40-63 | งานประปาอาคารขนาดเล็ก |
|
|
||||||
| 75-110 | งานประปาอาคารขนาดใหญ่ |
|
|
||||||
| 125-315 | งานท่อส่งน้ำหลัก |
|
|
||||||
| 355-1200 | งานโครงสร้างพื้นฐาน |
|
|
||||||
|
|
||||||
## เกรดของท่อ HDPE
|
|
||||||
|
|
||||||
### PE80
|
|
||||||
- เหมาะสำหรับงานทั่วไป
|
|
||||||
- ทนแรงดันสูงสุด 8 MPa
|
|
||||||
|
|
||||||
### PE100
|
|
||||||
- เหมาะสำหรับงานที่ต้องการความแข็งแรงสูง
|
|
||||||
- ทนแรงดันสูงสุด 10 MPa
|
|
||||||
- เป็นเกรดที่นิยมใช้ในปัจจุบัน
|
|
||||||
|
|
||||||
## การติดตั้งท่อ HDPE
|
|
||||||
|
|
||||||
### วิธี Butt Fusion
|
|
||||||
1. ตัดท่อให้ตรง
|
|
||||||
2. ทำความสะอาดผิวท่อ
|
|
||||||
3. ใช้เครื่องเชื่อมท่อ HDPE
|
|
||||||
4. ให้ความร้อนจนผิวท่อละลาย
|
|
||||||
5. กดท่อเข้าด้วยกัน
|
|
||||||
6. รอให้เย็นตัวลง
|
|
||||||
|
|
||||||
### วิธี Electrofusion
|
|
||||||
1. ใช้ข้อต่อแบบ Electrofusion
|
|
||||||
2. เสียบปลั๊กไฟเข้ากับข้อต่อ
|
|
||||||
3. รอจนกระบวนการเชื่อมเสร็จสิ้น
|
|
||||||
|
|
||||||
## สรุป
|
|
||||||
|
|
||||||
ท่อ HDPE เป็นตัวเลือกที่ยอดเยี่ยมสำหรับงานระบบน้ำ เนื่องจากมีความทนทาน ความยืดหยุ่น และอายุการใช้งานที่ยาวนาน ไม่ว่าจะเป็นงานประปา งานเกษตร หรืองานอุตสาหกรรม ท่อ HDPE สามารถตอบโจทย์ได้ทุกการใช้งาน
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**สนใจสินค้าท่อ HDPE?**
|
|
||||||
ติดต่อเราได้ที่:
|
|
||||||
- โทร: 090-555-1415
|
|
||||||
- LINE: jppselection
|
|
||||||
|
|
||||||
[ดูสินค้าท่อ HDPE ทั้งหมด](/ท่อhdpe)
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
---
|
|
||||||
id: ppr-pipe-guide
|
|
||||||
title: "ท่อ PPR คืออะไร? คู่มือฉบับสมบูรณ์สำหรับการเลือกใช้งาน"
|
|
||||||
excerpt: "ท่อ PPR (Polypropylene Random Copolymer) เป็นท่อพลาสติกที่ได้รับความนิยมสูงในการใช้งานระบบประปา บทความนี้จะอธิบายทุกสิ่งที่คุณต้องรู้เกี่ยวกับท่อ PPR"
|
|
||||||
date: "2024-01-15"
|
|
||||||
author: "Deal Plus Tech"
|
|
||||||
categories: ["ท่อ PPR", "ความรู้", "คู่มือ"]
|
|
||||||
featuredImage: "/images/2021/03/ppr-pipe_000C.jpg"
|
|
||||||
---
|
|
||||||
|
|
||||||
## ท่อ PPR คืออะไร?
|
|
||||||
|
|
||||||
ท่อ PPR (Polypropylene Random Copolymer) หรือท่อพีพีอาร์ เป็นท่อพลาสติกที่ผลิตจากเม็ดพลาสติก PP-R 80 (Polypropylene Random Copolymer 80) ซึ่งเป็นวัสดุพลาสติกคุณภาพสูงที่มีความแข็งแรงและทนทานเป็นอย่างดี
|
|
||||||
|
|
||||||
## ข้อดีของท่อ PPR
|
|
||||||
|
|
||||||
### 1. ทนแรงดันและอุณหภูมิสูง
|
|
||||||
ท่อ PPR สามารถทนแรงดันได้สูงถึง 20 บาร์ และทนต่ออุณหภูมิได้สูงถึง 95°C ทำให้เหมาะสำหรับใช้งานทั้งระบบน้ำเย็นและน้ำร้อน
|
|
||||||
|
|
||||||
### 2. สะอาดและปลอดภัย
|
|
||||||
ท่อ PPR ไม่เป็นสนิม ปราศจากโลหะหนักและสิ่งปนเปื้อน ทำให้น้ำที่ไหลผ่านสะอาดและปลอดภัยต่อการบริโภค
|
|
||||||
|
|
||||||
### 3. อายุการใช้งานยาวนาน
|
|
||||||
ด้วยคุณสมบัติที่ทนทาน ท่อ PPR มีอายุการใช้งานยาวนานกว่า 50 ปี
|
|
||||||
|
|
||||||
### 4. ติดตั้งง่าย
|
|
||||||
การเชื่อมต่อท่อ PPR ใช้วิธีเชื่อมด้วยความร้อน ทำให้ท่อและข้อต่อเป็นเนื้อเดียวกัน ไม่มีปัญหารั่วซึม
|
|
||||||
|
|
||||||
### 5. ประหยัดพลังงาน
|
|
||||||
ท่อ PPR เป็นฉนวนกันความร้อนที่ดี ช่วยรักษาอุณหภูมิของน้ำได้ดีกว่าท่อโลหะ
|
|
||||||
|
|
||||||
## การเลือกท่อ PPR ที่เหมาะสม
|
|
||||||
|
|
||||||
### ขนาดท่อ
|
|
||||||
เลือกขนาดท่อให้เหมาะสมกับปริมาณน้ำที่ต้องการใช้งาน:
|
|
||||||
- ท่อขนาด 20-25 มม. เหมาะสำหรับบ้านเรือนทั่วไป
|
|
||||||
- ท่อขนาด 32-63 มม. เหมาะสำหรับอาคารขนาดใหญ่
|
|
||||||
|
|
||||||
### เกรดของท่อ
|
|
||||||
- **PN10** - สำหรับน้ำเย็น ทนแรงดัน 10 บาร์
|
|
||||||
- **PN16** - สำหรับน้ำอุ่น ทนแรงดัน 16 บาร์
|
|
||||||
- **PN20** - สำหรับน้ำร้อน ทนแรงดัน 20 บาร์
|
|
||||||
|
|
||||||
## การติดตั้งท่อ PPR
|
|
||||||
|
|
||||||
### ขั้นตอนการเชื่อมท่อ
|
|
||||||
1. ตัดท่อให้ตรงและเรียบ
|
|
||||||
2. ทำความสะอาดผิวท่อและข้อต่อ
|
|
||||||
3. ใช้เครื่องเชื่อมท่ออุณหภูมิ 260°C
|
|
||||||
4. สอดท่อและข้อต่อเข้าด้วยกัน
|
|
||||||
5. รอให้เย็นตัวลงประมาณ 2-3 นาที
|
|
||||||
|
|
||||||
### ข้อควรระวัง
|
|
||||||
- หลีกเลี่ยงการติดตั้งในพื้นที่ที่มีแสงแดดโดยตรง
|
|
||||||
- ควรทิ้งระยะห่างสำหรับการขยายตัวของท่อ
|
|
||||||
- ตรวจสอบความร้อนของเครื่องเชื่อมก่อนใช้งาน
|
|
||||||
|
|
||||||
## ท่อ PPR ตราช้าง
|
|
||||||
|
|
||||||
ท่อ PPR ตราช้าง เป็นท่อ PPR คุณภาพสูงที่ผลิตจากเม็ดพลาสติก PP-R 80 วัตถุดิบคุณภาพสูงมาตรฐานยุโรปจาก lyondellbasell
|
|
||||||
|
|
||||||
**คุณสมบัติเด่น:**
|
|
||||||
- ทนแรงดันได้สูงสุด 20 บาร์
|
|
||||||
- ทนต่ออุณหภูมิได้สูงถึง 95°C
|
|
||||||
- ผลิตตามมาตรฐาน DIN8077 และ DIN8078 ของประเทศเยอรมัน
|
|
||||||
- รับประกันคุณภาพ
|
|
||||||
|
|
||||||
## สรุป
|
|
||||||
|
|
||||||
ท่อ PPR เป็นตัวเลือกที่ดีสำหรับระบบประปาในปัจจุบัน เนื่องจากมีความทนทานสูง ติดตั้งง่าย และมีอายุการใช้งานยาวนาน หากคุณกำลังมองหาท่อสำหรับงานระบบน้ำ ท่อ PPR เป็นตัวเลือกที่คุ้มค่าและเหมาะสม
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**สนใจสินค้าท่อ PPR?**
|
|
||||||
ติดต่อเราได้ที่:
|
|
||||||
- โทร: 090-555-1415
|
|
||||||
- LINE: jppselection
|
|
||||||
- อีเมล: dealplustech@gmail.com
|
|
||||||
|
|
||||||
[ดูสินค้าท่อ PPR ทั้งหมด](/ท่อพีพีอาร์ตราช้าง)
|
|
||||||
@@ -1,126 +0,0 @@
|
|||||||
---
|
|
||||||
id: water-pump-maintenance
|
|
||||||
title: "การบำรุงรักษาปั๊มน้ำให้มีอายุการใช้งานยาวนาน"
|
|
||||||
excerpt: "ปั๊มน้ำเป็นอุปกรณ์สำคัญในระบบน้ำทุกบ้าน การบำรุงรักษาที่ถูกต้องจะช่วยยืดอายุการใช้งานและประหยัดค่าไฟฟ้า"
|
|
||||||
date: "2024-01-05"
|
|
||||||
author: "Deal Plus Tech"
|
|
||||||
categories: ["ปั๊มน้ำ", "บำรุงรักษา", "เคล็ดลับ"]
|
|
||||||
featuredImage: "/images/2021/02/Water-Pump1.jpg"
|
|
||||||
---
|
|
||||||
|
|
||||||
## ความสำคัญของการบำรุงรักษาปั๊มน้ำ
|
|
||||||
|
|
||||||
ปั๊มน้ำเป็นหัวใจของระบบน้ำในบ้าน การบำรุงรักษาอย่างสม่ำเสมอจะช่วย:
|
|
||||||
- ยืดอายุการใช้งานของปั๊มน้ำ
|
|
||||||
- ลดปัญหาการเสีย
|
|
||||||
- ประหยัดค่าไฟฟ้า
|
|
||||||
- ป้องกันอุบัติเหตุจากการรั่วซึม
|
|
||||||
|
|
||||||
## การบำรุงรักษาปั๊มน้ำแบบทำเอง
|
|
||||||
|
|
||||||
### 1. ตรวจสอบสายไฟและสวิตช์
|
|
||||||
- ตรวจสอบสายไฟว่ามีรอยชำรุดหรือไม่
|
|
||||||
- ตรวจสอบสวิตช์ว่าทำงานปกติหรือไม่
|
|
||||||
- หากพบความผิดปกติควรเรียกช่าง
|
|
||||||
|
|
||||||
### 2. ทำความสะอาดตัวกรอง
|
|
||||||
- ปิดวาล์วน้ำเข้าก่อนทำความสะอาด
|
|
||||||
- ถอดตัวกรองออกมาล้าง
|
|
||||||
- ตรวจสอบว่ามีสิ่งปนเปื้อนหรือไม่
|
|
||||||
- ติดตั้งกลับเข้าที่เดิม
|
|
||||||
|
|
||||||
### 3. ตรวจสอบแรงดันน้ำ
|
|
||||||
- สังเกตแรงดันน้ำว่าลดลงหรือไม่
|
|
||||||
- ตรวจสอบว่ามีเสียงผิดปกติหรือไม่
|
|
||||||
- หากแรงดันลดลงอาจมีการรั่วซึม
|
|
||||||
|
|
||||||
### 4. ตรวจสอบถังแรงดัน (Pressure Tank)
|
|
||||||
- ตรวจสอบว่าถังมีอากาศเพียงพอหรือไม่
|
|
||||||
- หากปั๊มเปิด-ปิดบ่อยผิดปกติ อาจต้องเติมอากาศ
|
|
||||||
- ควรตรวจสอบทุก 6 เดือน
|
|
||||||
|
|
||||||
## ปัญหาที่พบบ่อยและวิธีแก้ไข
|
|
||||||
|
|
||||||
### ปั๊มไม่ทำงาน
|
|
||||||
**สาเหตุ:**
|
|
||||||
- ไฟดับหรือสายไฟขาด
|
|
||||||
- สวิตช์เสีย
|
|
||||||
- มอเตอร์เสีย
|
|
||||||
|
|
||||||
**วิธีแก้:**
|
|
||||||
- ตรวจสอบไฟและสายไฟ
|
|
||||||
- เปลี่ยนสวิตช์
|
|
||||||
- เรียกช่างซ่อมมอเตอร์
|
|
||||||
|
|
||||||
### แรงดันน้ำต่ำ
|
|
||||||
**สาเหตุ:**
|
|
||||||
- ตัวกรองอุดตัน
|
|
||||||
- ท่อรั่ว
|
|
||||||
- ใบพัดสึกหรอ
|
|
||||||
|
|
||||||
**วิธีแก้:**
|
|
||||||
- ทำความสะอาดตัวกรอง
|
|
||||||
- ตรวจสอบและซ่อมท่อ
|
|
||||||
- เปลี่ยนใบพัด
|
|
||||||
|
|
||||||
### ปั๊มเปิด-ปิดบ่อย
|
|
||||||
**สาเหตุ:**
|
|
||||||
- ถังแรงดันอากาศรั่ว
|
|
||||||
- แผ่นไดอะแฟรมแตก
|
|
||||||
- วาล์วตรวจสอบแรงดันเสีย
|
|
||||||
|
|
||||||
**วิธีแก้:**
|
|
||||||
- เติมอากาศในถัง
|
|
||||||
- เปลี่ยนแผ่นไดอะแฟรม
|
|
||||||
- เปลี่ยนวาล์ว
|
|
||||||
|
|
||||||
### ปั๊มมีเสียงดังผิดปกติ
|
|
||||||
**สาเหตุ:**
|
|
||||||
- ลูกปืนเสีย
|
|
||||||
- ใบพัดชำรุด
|
|
||||||
- การติดตั้งไม่แน่นหนา
|
|
||||||
|
|
||||||
**วิธีแก้:**
|
|
||||||
- เปลี่ยนลูกปืน
|
|
||||||
- เปลี่ยนใบพัด
|
|
||||||
- ตรวจสอบการยึดแน่น
|
|
||||||
|
|
||||||
## ตารางการบำรุงรักษา
|
|
||||||
|
|
||||||
| รายการ | ความถี่ | หมายเหตุ |
|
|
||||||
|--------|---------|----------|
|
|
||||||
| ตรวจสอบสายไฟ | ทุกเดือน | มองหารอยชำรุด |
|
|
||||||
| ทำความสะอาดตัวกรอง | ทุก 3 เดือน | หรือเมื่อแรงดันลด |
|
|
||||||
| ตรวจสอบถังแรงดัน | ทุก 6 เดือน | เติมอากาศหากจำเป็น |
|
|
||||||
| ตรวจสอบสวิตช์ | ทุกปี | เปลี่ยนหากเสีย |
|
|
||||||
| ตรวจสอบใบพัด | ทุก 2 ปี | โดยช่างผู้เชี่ยวชาญ |
|
|
||||||
|
|
||||||
## เคล็ดลับการใช้งานปั๊มน้ำ
|
|
||||||
|
|
||||||
### ประหยัดไฟฟ้า
|
|
||||||
- เลือกขนาดปั๊มที่เหมาะสมกับการใช้งาน
|
|
||||||
- ติดตั้งถังแรงดันขนาดเหมาะสม
|
|
||||||
- หลีกเลี่ยงการเปิด-ปิดปั๊มบ่อย
|
|
||||||
|
|
||||||
### ป้องกันปัญหา
|
|
||||||
- อย่าให้ปั๊มแห้ง (ทำงานโดยไม่มีน้ำ)
|
|
||||||
- ตรวจสอบรอยรั่วอย่างสม่ำเสมอ
|
|
||||||
- ใช้ตัวกรองเพื่อป้องกันสิ่งสกปรก
|
|
||||||
|
|
||||||
### เมื่อต้องเปลี่ยนปั๊ม
|
|
||||||
- เลือกปั๊มที่มีคุณภาพ
|
|
||||||
- พิจารณาขนาดและกำลังที่เหมาะสม
|
|
||||||
- ติดตั้งโดยช่างผู้เชี่ยวชาญ
|
|
||||||
|
|
||||||
## สรุป
|
|
||||||
|
|
||||||
การบำรุงรักษาปั๊มน้ำอย่างสม่ำเสมอจะช่วยยืดอายุการใช้งาน ลดปัญหาการเสีย และประหยัดค่าใช้จ่ายในระยะยาว ควรตรวจสอบและบำรุงรักษาตามตารางที่กำหนด และหากพบปัญหาที่ไม่สามารถแก้ไขได้เอง ควรติดต่อช่างผู้เชี่ยวชาญ
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**ต้องการซื้อปั๊มน้ำหรืออุปกรณ์เสริม?**
|
|
||||||
ติดต่อเราได้ที่:
|
|
||||||
- โทร: 090-555-1415
|
|
||||||
- LINE: jppselection
|
|
||||||
|
|
||||||
[ดูสินค้าปั๊มน้ำทั้งหมด](/ปั๊มน้ำ-pump)
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,42 +0,0 @@
|
|||||||
// Utility functions migrated from Next.js
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Combines class names conditionally (like clsx + tailwind-merge)
|
|
||||||
*/
|
|
||||||
export function cn(...classes: Array<string | false | null | undefined>): string {
|
|
||||||
return classes.filter(Boolean).join(' ');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Format price in Thai Baht
|
|
||||||
*/
|
|
||||||
export function formatPrice(price: number): string {
|
|
||||||
return new Intl.NumberFormat('th-TH', {
|
|
||||||
style: 'currency',
|
|
||||||
currency: 'THB',
|
|
||||||
}).format(price);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Format date to Thai locale
|
|
||||||
*/
|
|
||||||
export function formatDateThai(date: Date | string): string {
|
|
||||||
return new Intl.DateTimeFormat('th-TH', {
|
|
||||||
year: 'numeric',
|
|
||||||
month: 'long',
|
|
||||||
day: 'numeric',
|
|
||||||
}).format(new Date(date));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generate slug from Thai text
|
|
||||||
*/
|
|
||||||
export function generateSlug(text: string): string {
|
|
||||||
return text
|
|
||||||
.toLowerCase()
|
|
||||||
.replace(/\s+/g, '-')
|
|
||||||
.replace(/[^\w-]+/g, '')
|
|
||||||
.replace(/--+/g, '-')
|
|
||||||
.replace(/^-+/, '')
|
|
||||||
.replace(/-+$/, '');
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"extends": "astro/tsconfigs/strict",
|
|
||||||
"include": [".astro/types.d.ts", "**/*"],
|
|
||||||
"exclude": ["dist"]
|
|
||||||
}
|
|
||||||
0
dealplustech-astro/node_modules/.bin/acorn → node_modules/.bin/acorn
generated
vendored
0
dealplustech-astro/node_modules/.bin/acorn → node_modules/.bin/acorn
generated
vendored
0
dealplustech-astro/node_modules/.bin/astro → node_modules/.bin/astro
generated
vendored
0
dealplustech-astro/node_modules/.bin/astro → node_modules/.bin/astro
generated
vendored
0
dealplustech-astro/node_modules/.bin/cssesc → node_modules/.bin/cssesc
generated
vendored
0
dealplustech-astro/node_modules/.bin/cssesc → node_modules/.bin/cssesc
generated
vendored
0
dealplustech-astro/node_modules/.bin/esbuild → node_modules/.bin/esbuild
generated
vendored
0
dealplustech-astro/node_modules/.bin/esbuild → node_modules/.bin/esbuild
generated
vendored
0
dealplustech-astro/node_modules/.bin/is-docker → node_modules/.bin/is-docker
generated
vendored
0
dealplustech-astro/node_modules/.bin/is-docker → node_modules/.bin/is-docker
generated
vendored
0
dealplustech-astro/node_modules/.bin/jiti → node_modules/.bin/jiti
generated
vendored
0
dealplustech-astro/node_modules/.bin/jiti → node_modules/.bin/jiti
generated
vendored
0
dealplustech-astro/node_modules/.bin/js-yaml → node_modules/.bin/js-yaml
generated
vendored
0
dealplustech-astro/node_modules/.bin/js-yaml → node_modules/.bin/js-yaml
generated
vendored
0
dealplustech-astro/node_modules/.bin/nanoid → node_modules/.bin/nanoid
generated
vendored
0
dealplustech-astro/node_modules/.bin/nanoid → node_modules/.bin/nanoid
generated
vendored
0
dealplustech-astro/node_modules/.bin/parser → node_modules/.bin/parser
generated
vendored
0
dealplustech-astro/node_modules/.bin/parser → node_modules/.bin/parser
generated
vendored
0
dealplustech-astro/node_modules/.bin/rollup → node_modules/.bin/rollup
generated
vendored
0
dealplustech-astro/node_modules/.bin/rollup → node_modules/.bin/rollup
generated
vendored
0
dealplustech-astro/node_modules/.bin/semver → node_modules/.bin/semver
generated
vendored
0
dealplustech-astro/node_modules/.bin/semver → node_modules/.bin/semver
generated
vendored
0
dealplustech-astro/node_modules/.bin/svgo → node_modules/.bin/svgo
generated
vendored
0
dealplustech-astro/node_modules/.bin/svgo → node_modules/.bin/svgo
generated
vendored
0
dealplustech-astro/node_modules/.bin/tsc → node_modules/.bin/tsc
generated
vendored
0
dealplustech-astro/node_modules/.bin/tsc → node_modules/.bin/tsc
generated
vendored
0
dealplustech-astro/node_modules/.bin/tsconfck → node_modules/.bin/tsconfck
generated
vendored
0
dealplustech-astro/node_modules/.bin/tsconfck → node_modules/.bin/tsconfck
generated
vendored
0
dealplustech-astro/node_modules/.bin/tsserver → node_modules/.bin/tsserver
generated
vendored
0
dealplustech-astro/node_modules/.bin/tsserver → node_modules/.bin/tsserver
generated
vendored
0
dealplustech-astro/node_modules/.bin/vite → node_modules/.bin/vite
generated
vendored
0
dealplustech-astro/node_modules/.bin/vite → node_modules/.bin/vite
generated
vendored
28
dealplustech-astro/node_modules/.package-lock.json → node_modules/.package-lock.json
generated
vendored
28
dealplustech-astro/node_modules/.package-lock.json → node_modules/.package-lock.json
generated
vendored
@@ -4,6 +4,18 @@
|
|||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
|
"node_modules/@alloc/quick-lru": {
|
||||||
|
"version": "5.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
|
||||||
|
"integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@astrojs/compiler": {
|
"node_modules/@astrojs/compiler": {
|
||||||
"version": "2.13.1",
|
"version": "2.13.1",
|
||||||
"resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.13.1.tgz",
|
"resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.13.1.tgz",
|
||||||
@@ -137,7 +149,6 @@
|
|||||||
"version": "1.8.1",
|
"version": "1.8.1",
|
||||||
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz",
|
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz",
|
||||||
"integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==",
|
"integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==",
|
||||||
"ideallyInert": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -1822,6 +1833,19 @@
|
|||||||
"node": ">= 20"
|
"node": ">= 20"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@tailwindcss/postcss": {
|
||||||
|
"version": "4.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.2.1.tgz",
|
||||||
|
"integrity": "sha512-OEwGIBnXnj7zJeonOh6ZG9woofIjGrd2BORfvE5p9USYKDCZoQmfqLcfNiRWoJlRWLdNPn2IgVZuWAOM4iTYMw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@alloc/quick-lru": "^5.2.0",
|
||||||
|
"@tailwindcss/node": "4.2.1",
|
||||||
|
"@tailwindcss/oxide": "4.2.1",
|
||||||
|
"postcss": "^8.5.6",
|
||||||
|
"tailwindcss": "4.2.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@tailwindcss/vite": {
|
"node_modules/@tailwindcss/vite": {
|
||||||
"version": "4.2.1",
|
"version": "4.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.2.1.tgz",
|
||||||
@@ -2770,7 +2794,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
|
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
|
||||||
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
|
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"ideallyInert": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -5099,7 +5122,6 @@
|
|||||||
"version": "2.8.1",
|
"version": "2.8.1",
|
||||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
|
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
|
||||||
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
|
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
|
||||||
"ideallyInert": true,
|
|
||||||
"license": "0BSD",
|
"license": "0BSD",
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
128
node_modules/@alloc/quick-lru/index.d.ts
generated
vendored
Normal file
128
node_modules/@alloc/quick-lru/index.d.ts
generated
vendored
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
declare namespace QuickLRU {
|
||||||
|
interface Options<KeyType, ValueType> {
|
||||||
|
/**
|
||||||
|
The maximum number of milliseconds an item should remain in the cache.
|
||||||
|
|
||||||
|
@default Infinity
|
||||||
|
|
||||||
|
By default, `maxAge` will be `Infinity`, which means that items will never expire.
|
||||||
|
Lazy expiration upon the next write or read call.
|
||||||
|
|
||||||
|
Individual expiration of an item can be specified by the `set(key, value, maxAge)` method.
|
||||||
|
*/
|
||||||
|
readonly maxAge?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
The maximum number of items before evicting the least recently used items.
|
||||||
|
*/
|
||||||
|
readonly maxSize: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Called right before an item is evicted from the cache.
|
||||||
|
|
||||||
|
Useful for side effects or for items like object URLs that need explicit cleanup (`revokeObjectURL`).
|
||||||
|
*/
|
||||||
|
onEviction?: (key: KeyType, value: ValueType) => void;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
declare class QuickLRU<KeyType, ValueType>
|
||||||
|
implements Iterable<[KeyType, ValueType]> {
|
||||||
|
/**
|
||||||
|
The stored item count.
|
||||||
|
*/
|
||||||
|
readonly size: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Simple ["Least Recently Used" (LRU) cache](https://en.m.wikipedia.org/wiki/Cache_replacement_policies#Least_Recently_Used_.28LRU.29).
|
||||||
|
|
||||||
|
The instance is [`iterable`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Iteration_protocols) so you can use it directly in a [`for…of`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/for...of) loop.
|
||||||
|
|
||||||
|
@example
|
||||||
|
```
|
||||||
|
import QuickLRU = require('quick-lru');
|
||||||
|
|
||||||
|
const lru = new QuickLRU({maxSize: 1000});
|
||||||
|
|
||||||
|
lru.set('🦄', '🌈');
|
||||||
|
|
||||||
|
lru.has('🦄');
|
||||||
|
//=> true
|
||||||
|
|
||||||
|
lru.get('🦄');
|
||||||
|
//=> '🌈'
|
||||||
|
```
|
||||||
|
*/
|
||||||
|
constructor(options: QuickLRU.Options<KeyType, ValueType>);
|
||||||
|
|
||||||
|
[Symbol.iterator](): IterableIterator<[KeyType, ValueType]>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Set an item. Returns the instance.
|
||||||
|
|
||||||
|
Individual expiration of an item can be specified with the `maxAge` option. If not specified, the global `maxAge` value will be used in case it is specified in the constructor, otherwise the item will never expire.
|
||||||
|
|
||||||
|
@returns The list instance.
|
||||||
|
*/
|
||||||
|
set(key: KeyType, value: ValueType, options?: {maxAge?: number}): this;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Get an item.
|
||||||
|
|
||||||
|
@returns The stored item or `undefined`.
|
||||||
|
*/
|
||||||
|
get(key: KeyType): ValueType | undefined;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Check if an item exists.
|
||||||
|
*/
|
||||||
|
has(key: KeyType): boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Get an item without marking it as recently used.
|
||||||
|
|
||||||
|
@returns The stored item or `undefined`.
|
||||||
|
*/
|
||||||
|
peek(key: KeyType): ValueType | undefined;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Delete an item.
|
||||||
|
|
||||||
|
@returns `true` if the item is removed or `false` if the item doesn't exist.
|
||||||
|
*/
|
||||||
|
delete(key: KeyType): boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Delete all items.
|
||||||
|
*/
|
||||||
|
clear(): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Update the `maxSize` in-place, discarding items as necessary. Insertion order is mostly preserved, though this is not a strong guarantee.
|
||||||
|
|
||||||
|
Useful for on-the-fly tuning of cache sizes in live systems.
|
||||||
|
*/
|
||||||
|
resize(maxSize: number): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Iterable for all the keys.
|
||||||
|
*/
|
||||||
|
keys(): IterableIterator<KeyType>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Iterable for all the values.
|
||||||
|
*/
|
||||||
|
values(): IterableIterator<ValueType>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Iterable for all entries, starting with the oldest (ascending in recency).
|
||||||
|
*/
|
||||||
|
entriesAscending(): IterableIterator<[KeyType, ValueType]>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Iterable for all entries, starting with the newest (descending in recency).
|
||||||
|
*/
|
||||||
|
entriesDescending(): IterableIterator<[KeyType, ValueType]>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export = QuickLRU;
|
||||||
263
node_modules/@alloc/quick-lru/index.js
generated
vendored
Normal file
263
node_modules/@alloc/quick-lru/index.js
generated
vendored
Normal file
@@ -0,0 +1,263 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
class QuickLRU {
|
||||||
|
constructor(options = {}) {
|
||||||
|
if (!(options.maxSize && options.maxSize > 0)) {
|
||||||
|
throw new TypeError('`maxSize` must be a number greater than 0');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof options.maxAge === 'number' && options.maxAge === 0) {
|
||||||
|
throw new TypeError('`maxAge` must be a number greater than 0');
|
||||||
|
}
|
||||||
|
|
||||||
|
this.maxSize = options.maxSize;
|
||||||
|
this.maxAge = options.maxAge || Infinity;
|
||||||
|
this.onEviction = options.onEviction;
|
||||||
|
this.cache = new Map();
|
||||||
|
this.oldCache = new Map();
|
||||||
|
this._size = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
_emitEvictions(cache) {
|
||||||
|
if (typeof this.onEviction !== 'function') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const [key, item] of cache) {
|
||||||
|
this.onEviction(key, item.value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_deleteIfExpired(key, item) {
|
||||||
|
if (typeof item.expiry === 'number' && item.expiry <= Date.now()) {
|
||||||
|
if (typeof this.onEviction === 'function') {
|
||||||
|
this.onEviction(key, item.value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.delete(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
_getOrDeleteIfExpired(key, item) {
|
||||||
|
const deleted = this._deleteIfExpired(key, item);
|
||||||
|
if (deleted === false) {
|
||||||
|
return item.value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_getItemValue(key, item) {
|
||||||
|
return item.expiry ? this._getOrDeleteIfExpired(key, item) : item.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
_peek(key, cache) {
|
||||||
|
const item = cache.get(key);
|
||||||
|
|
||||||
|
return this._getItemValue(key, item);
|
||||||
|
}
|
||||||
|
|
||||||
|
_set(key, value) {
|
||||||
|
this.cache.set(key, value);
|
||||||
|
this._size++;
|
||||||
|
|
||||||
|
if (this._size >= this.maxSize) {
|
||||||
|
this._size = 0;
|
||||||
|
this._emitEvictions(this.oldCache);
|
||||||
|
this.oldCache = this.cache;
|
||||||
|
this.cache = new Map();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_moveToRecent(key, item) {
|
||||||
|
this.oldCache.delete(key);
|
||||||
|
this._set(key, item);
|
||||||
|
}
|
||||||
|
|
||||||
|
* _entriesAscending() {
|
||||||
|
for (const item of this.oldCache) {
|
||||||
|
const [key, value] = item;
|
||||||
|
if (!this.cache.has(key)) {
|
||||||
|
const deleted = this._deleteIfExpired(key, value);
|
||||||
|
if (deleted === false) {
|
||||||
|
yield item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const item of this.cache) {
|
||||||
|
const [key, value] = item;
|
||||||
|
const deleted = this._deleteIfExpired(key, value);
|
||||||
|
if (deleted === false) {
|
||||||
|
yield item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
get(key) {
|
||||||
|
if (this.cache.has(key)) {
|
||||||
|
const item = this.cache.get(key);
|
||||||
|
|
||||||
|
return this._getItemValue(key, item);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.oldCache.has(key)) {
|
||||||
|
const item = this.oldCache.get(key);
|
||||||
|
if (this._deleteIfExpired(key, item) === false) {
|
||||||
|
this._moveToRecent(key, item);
|
||||||
|
return item.value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
set(key, value, {maxAge = this.maxAge === Infinity ? undefined : Date.now() + this.maxAge} = {}) {
|
||||||
|
if (this.cache.has(key)) {
|
||||||
|
this.cache.set(key, {
|
||||||
|
value,
|
||||||
|
maxAge
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this._set(key, {value, expiry: maxAge});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
has(key) {
|
||||||
|
if (this.cache.has(key)) {
|
||||||
|
return !this._deleteIfExpired(key, this.cache.get(key));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.oldCache.has(key)) {
|
||||||
|
return !this._deleteIfExpired(key, this.oldCache.get(key));
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
peek(key) {
|
||||||
|
if (this.cache.has(key)) {
|
||||||
|
return this._peek(key, this.cache);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.oldCache.has(key)) {
|
||||||
|
return this._peek(key, this.oldCache);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delete(key) {
|
||||||
|
const deleted = this.cache.delete(key);
|
||||||
|
if (deleted) {
|
||||||
|
this._size--;
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.oldCache.delete(key) || deleted;
|
||||||
|
}
|
||||||
|
|
||||||
|
clear() {
|
||||||
|
this.cache.clear();
|
||||||
|
this.oldCache.clear();
|
||||||
|
this._size = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
resize(newSize) {
|
||||||
|
if (!(newSize && newSize > 0)) {
|
||||||
|
throw new TypeError('`maxSize` must be a number greater than 0');
|
||||||
|
}
|
||||||
|
|
||||||
|
const items = [...this._entriesAscending()];
|
||||||
|
const removeCount = items.length - newSize;
|
||||||
|
if (removeCount < 0) {
|
||||||
|
this.cache = new Map(items);
|
||||||
|
this.oldCache = new Map();
|
||||||
|
this._size = items.length;
|
||||||
|
} else {
|
||||||
|
if (removeCount > 0) {
|
||||||
|
this._emitEvictions(items.slice(0, removeCount));
|
||||||
|
}
|
||||||
|
|
||||||
|
this.oldCache = new Map(items.slice(removeCount));
|
||||||
|
this.cache = new Map();
|
||||||
|
this._size = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.maxSize = newSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
* keys() {
|
||||||
|
for (const [key] of this) {
|
||||||
|
yield key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
* values() {
|
||||||
|
for (const [, value] of this) {
|
||||||
|
yield value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
* [Symbol.iterator]() {
|
||||||
|
for (const item of this.cache) {
|
||||||
|
const [key, value] = item;
|
||||||
|
const deleted = this._deleteIfExpired(key, value);
|
||||||
|
if (deleted === false) {
|
||||||
|
yield [key, value.value];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const item of this.oldCache) {
|
||||||
|
const [key, value] = item;
|
||||||
|
if (!this.cache.has(key)) {
|
||||||
|
const deleted = this._deleteIfExpired(key, value);
|
||||||
|
if (deleted === false) {
|
||||||
|
yield [key, value.value];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
* entriesDescending() {
|
||||||
|
let items = [...this.cache];
|
||||||
|
for (let i = items.length - 1; i >= 0; --i) {
|
||||||
|
const item = items[i];
|
||||||
|
const [key, value] = item;
|
||||||
|
const deleted = this._deleteIfExpired(key, value);
|
||||||
|
if (deleted === false) {
|
||||||
|
yield [key, value.value];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
items = [...this.oldCache];
|
||||||
|
for (let i = items.length - 1; i >= 0; --i) {
|
||||||
|
const item = items[i];
|
||||||
|
const [key, value] = item;
|
||||||
|
if (!this.cache.has(key)) {
|
||||||
|
const deleted = this._deleteIfExpired(key, value);
|
||||||
|
if (deleted === false) {
|
||||||
|
yield [key, value.value];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
* entriesAscending() {
|
||||||
|
for (const [key, value] of this._entriesAscending()) {
|
||||||
|
yield [key, value.value];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
get size() {
|
||||||
|
if (!this._size) {
|
||||||
|
return this.oldCache.size;
|
||||||
|
}
|
||||||
|
|
||||||
|
let oldCacheSize = 0;
|
||||||
|
for (const key of this.oldCache.keys()) {
|
||||||
|
if (!this.cache.has(key)) {
|
||||||
|
oldCacheSize++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Math.min(this._size + oldCacheSize, this.maxSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = QuickLRU;
|
||||||
43
node_modules/@alloc/quick-lru/package.json
generated
vendored
Normal file
43
node_modules/@alloc/quick-lru/package.json
generated
vendored
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
"name": "@alloc/quick-lru",
|
||||||
|
"version": "5.2.0",
|
||||||
|
"description": "Simple “Least Recently Used” (LRU) cache",
|
||||||
|
"license": "MIT",
|
||||||
|
"repository": "sindresorhus/quick-lru",
|
||||||
|
"funding": "https://github.com/sponsors/sindresorhus",
|
||||||
|
"author": {
|
||||||
|
"name": "Sindre Sorhus",
|
||||||
|
"email": "sindresorhus@gmail.com",
|
||||||
|
"url": "https://sindresorhus.com"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "xo && nyc ava && tsd"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"index.js",
|
||||||
|
"index.d.ts"
|
||||||
|
],
|
||||||
|
"keywords": [
|
||||||
|
"lru",
|
||||||
|
"quick",
|
||||||
|
"cache",
|
||||||
|
"caching",
|
||||||
|
"least",
|
||||||
|
"recently",
|
||||||
|
"used",
|
||||||
|
"fast",
|
||||||
|
"map",
|
||||||
|
"hash",
|
||||||
|
"buffer"
|
||||||
|
],
|
||||||
|
"devDependencies": {
|
||||||
|
"ava": "^2.0.0",
|
||||||
|
"coveralls": "^3.0.3",
|
||||||
|
"nyc": "^15.0.0",
|
||||||
|
"tsd": "^0.11.0",
|
||||||
|
"xo": "^0.26.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
139
node_modules/@alloc/quick-lru/readme.md
generated
vendored
Normal file
139
node_modules/@alloc/quick-lru/readme.md
generated
vendored
Normal file
@@ -0,0 +1,139 @@
|
|||||||
|
# quick-lru [](https://travis-ci.org/sindresorhus/quick-lru) [](https://coveralls.io/github/sindresorhus/quick-lru?branch=master)
|
||||||
|
|
||||||
|
> Simple [“Least Recently Used” (LRU) cache](https://en.m.wikipedia.org/wiki/Cache_replacement_policies#Least_Recently_Used_.28LRU.29)
|
||||||
|
|
||||||
|
Useful when you need to cache something and limit memory usage.
|
||||||
|
|
||||||
|
Inspired by the [`hashlru` algorithm](https://github.com/dominictarr/hashlru#algorithm), but instead uses [`Map`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Map) to support keys of any type, not just strings, and values can be `undefined`.
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
```
|
||||||
|
$ npm install quick-lru
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```js
|
||||||
|
const QuickLRU = require('quick-lru');
|
||||||
|
|
||||||
|
const lru = new QuickLRU({maxSize: 1000});
|
||||||
|
|
||||||
|
lru.set('🦄', '🌈');
|
||||||
|
|
||||||
|
lru.has('🦄');
|
||||||
|
//=> true
|
||||||
|
|
||||||
|
lru.get('🦄');
|
||||||
|
//=> '🌈'
|
||||||
|
```
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
### new QuickLRU(options?)
|
||||||
|
|
||||||
|
Returns a new instance.
|
||||||
|
|
||||||
|
### options
|
||||||
|
|
||||||
|
Type: `object`
|
||||||
|
|
||||||
|
#### maxSize
|
||||||
|
|
||||||
|
*Required*\
|
||||||
|
Type: `number`
|
||||||
|
|
||||||
|
The maximum number of items before evicting the least recently used items.
|
||||||
|
|
||||||
|
#### maxAge
|
||||||
|
|
||||||
|
Type: `number`\
|
||||||
|
Default: `Infinity`
|
||||||
|
|
||||||
|
The maximum number of milliseconds an item should remain in cache.
|
||||||
|
By default maxAge will be Infinity, which means that items will never expire.
|
||||||
|
|
||||||
|
Lazy expiration happens upon the next `write` or `read` call.
|
||||||
|
|
||||||
|
Individual expiration of an item can be specified by the `set(key, value, options)` method.
|
||||||
|
|
||||||
|
#### onEviction
|
||||||
|
|
||||||
|
*Optional*\
|
||||||
|
Type: `(key, value) => void`
|
||||||
|
|
||||||
|
Called right before an item is evicted from the cache.
|
||||||
|
|
||||||
|
Useful for side effects or for items like object URLs that need explicit cleanup (`revokeObjectURL`).
|
||||||
|
|
||||||
|
### Instance
|
||||||
|
|
||||||
|
The instance is [`iterable`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Iteration_protocols) so you can use it directly in a [`for…of`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/for...of) loop.
|
||||||
|
|
||||||
|
Both `key` and `value` can be of any type.
|
||||||
|
|
||||||
|
#### .set(key, value, options?)
|
||||||
|
|
||||||
|
Set an item. Returns the instance.
|
||||||
|
|
||||||
|
Individual expiration of an item can be specified with the `maxAge` option. If not specified, the global `maxAge` value will be used in case it is specified on the constructor, otherwise the item will never expire.
|
||||||
|
|
||||||
|
#### .get(key)
|
||||||
|
|
||||||
|
Get an item.
|
||||||
|
|
||||||
|
#### .has(key)
|
||||||
|
|
||||||
|
Check if an item exists.
|
||||||
|
|
||||||
|
#### .peek(key)
|
||||||
|
|
||||||
|
Get an item without marking it as recently used.
|
||||||
|
|
||||||
|
#### .delete(key)
|
||||||
|
|
||||||
|
Delete an item.
|
||||||
|
|
||||||
|
Returns `true` if the item is removed or `false` if the item doesn't exist.
|
||||||
|
|
||||||
|
#### .clear()
|
||||||
|
|
||||||
|
Delete all items.
|
||||||
|
|
||||||
|
#### .resize(maxSize)
|
||||||
|
|
||||||
|
Update the `maxSize`, discarding items as necessary. Insertion order is mostly preserved, though this is not a strong guarantee.
|
||||||
|
|
||||||
|
Useful for on-the-fly tuning of cache sizes in live systems.
|
||||||
|
|
||||||
|
#### .keys()
|
||||||
|
|
||||||
|
Iterable for all the keys.
|
||||||
|
|
||||||
|
#### .values()
|
||||||
|
|
||||||
|
Iterable for all the values.
|
||||||
|
|
||||||
|
#### .entriesAscending()
|
||||||
|
|
||||||
|
Iterable for all entries, starting with the oldest (ascending in recency).
|
||||||
|
|
||||||
|
#### .entriesDescending()
|
||||||
|
|
||||||
|
Iterable for all entries, starting with the newest (descending in recency).
|
||||||
|
|
||||||
|
#### .size
|
||||||
|
|
||||||
|
The stored item count.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
<b>
|
||||||
|
<a href="https://tidelift.com/subscription/pkg/npm-quick-lru?utm_source=npm-quick-lru&utm_medium=referral&utm_campaign=readme">Get professional support for this package with a Tidelift subscription</a>
|
||||||
|
</b>
|
||||||
|
<br>
|
||||||
|
<sub>
|
||||||
|
Tidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.
|
||||||
|
</sub>
|
||||||
|
</div>
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user