@xiaonoodles/meetfun-i18n 1.2.17 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/FIX_WEBPACK_RESOLUTION.md +245 -245
- package/LICENSE +22 -22
- package/MIGRATION_GUIDE.md +253 -253
- package/README.md +482 -482
- package/TROUBLESHOOTING.md +280 -280
- package/VERIFY_FIX.md +272 -272
- package/VUE2_USAGE.md +170 -170
- package/dist/index.esm.js +40 -16
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +40 -16
- package/dist/index.js.map +1 -1
- package/dist/vue2/index.cjs +2589 -17
- package/dist/vue2/index.cjs.map +1 -1
- package/dist/vue2/index.esm.js +2575 -3
- package/dist/vue2/index.esm.js.map +1 -1
- package/package.json +78 -78
- package/vue2/index.d.ts +3 -3
- package/vue2/index.js +3 -3
- package/vue2/index.mjs +4 -4
- package/vue2/package.json +14 -14
- package/vue2.d.ts +3 -3
- package/vue2.mjs +13 -13
|
@@ -1,245 +1,245 @@
|
|
|
1
|
-
# Webpack 5 路径解析修复说明
|
|
2
|
-
|
|
3
|
-
## 问题根源
|
|
4
|
-
|
|
5
|
-
Webpack 5 在处理 npm 包的子路径导入时,默认不会完全遵循 `package.json` 的 `exports` 字段。当使用 `import from 'meetfun-i18n/vue2'` 时,Webpack 会尝试查找物理路径 `node_modules/meetfun-i18n/vue2`。
|
|
6
|
-
|
|
7
|
-
## 解决方案
|
|
8
|
-
|
|
9
|
-
创建了一个真实的 `vue2/` 目录,其中包含:
|
|
10
|
-
|
|
11
|
-
### 目录结构
|
|
12
|
-
|
|
13
|
-
```
|
|
14
|
-
meetfun-i18n/
|
|
15
|
-
├── dist/
|
|
16
|
-
│ ├── index.js # Vue3 版本
|
|
17
|
-
│ ├── index.esm.js
|
|
18
|
-
│ └── vue2/
|
|
19
|
-
│ ├── index.js # Vue2 实际代码
|
|
20
|
-
│ └── index.esm.js
|
|
21
|
-
├── vue2/ # ← 新增物理目录
|
|
22
|
-
│ ├── package.json # 指向 dist/vue2
|
|
23
|
-
│ ├── index.js # CommonJS 入口
|
|
24
|
-
│ ├── index.mjs # ES Module 入口
|
|
25
|
-
│ └── index.d.ts # TypeScript 类型
|
|
26
|
-
└── package.json
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
### vue2/package.json
|
|
30
|
-
|
|
31
|
-
```json
|
|
32
|
-
{
|
|
33
|
-
"main": "../dist/vue2/index.js",
|
|
34
|
-
"module": "../dist/vue2/index.esm.js",
|
|
35
|
-
"types": "../dist/vue2/index.d.ts"
|
|
36
|
-
}
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
这个文件告诉 Webpack:
|
|
40
|
-
- CommonJS (`require`) → 使用 `../dist/vue2/index.js`
|
|
41
|
-
- ES Module (`import`) → 使用 `../dist/vue2/index.esm.js`
|
|
42
|
-
- TypeScript → 使用 `../dist/vue2/index.d.ts`
|
|
43
|
-
|
|
44
|
-
### vue2/index.js (CommonJS 入口)
|
|
45
|
-
|
|
46
|
-
```javascript
|
|
47
|
-
module.exports = require('../dist/vue2/index.js')
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
### vue2/index.mjs (ES Module 入口)
|
|
51
|
-
|
|
52
|
-
```javascript
|
|
53
|
-
export * from '../dist/vue2/index.esm.js'
|
|
54
|
-
export { default } from '../dist/vue2/index.esm.js'
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
## 工作原理
|
|
58
|
-
|
|
59
|
-
现在当您使用:
|
|
60
|
-
```javascript
|
|
61
|
-
import { createMeetFunI18n } from 'meetfun-i18n/vue2'
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
Webpack 会:
|
|
65
|
-
1. 找到 `node_modules/meetfun-i18n/vue2` 目录
|
|
66
|
-
2. 读取 `vue2/package.json`
|
|
67
|
-
3. 根据模块类型选择:
|
|
68
|
-
- ES Module → `vue2/index.mjs` → `dist/vue2/index.esm.js`
|
|
69
|
-
- CommonJS → `vue2/index.js` → `dist/vue2/index.js`
|
|
70
|
-
4. 最终加载正确的 Vue2 版本代码
|
|
71
|
-
|
|
72
|
-
## 多层保护
|
|
73
|
-
|
|
74
|
-
我们提供了多种方式确保兼容性:
|
|
75
|
-
|
|
76
|
-
### 1. 根目录入口文件
|
|
77
|
-
```
|
|
78
|
-
vue2.js # CommonJS
|
|
79
|
-
vue2.mjs # ES Module
|
|
80
|
-
vue2.d.ts # TypeScript
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
### 2. vue2 目录
|
|
84
|
-
```
|
|
85
|
-
vue2/
|
|
86
|
-
├── package.json
|
|
87
|
-
├── index.js
|
|
88
|
-
├── index.mjs
|
|
89
|
-
└── index.d.ts
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
### 3. package.json exports
|
|
93
|
-
```json
|
|
94
|
-
{
|
|
95
|
-
"exports": {
|
|
96
|
-
"./vue2": {
|
|
97
|
-
"types": "./vue2.d.ts",
|
|
98
|
-
"import": "./vue2.mjs",
|
|
99
|
-
"require": "./vue2.js"
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
无论打包工具采用哪种解析策略,都能正确找到 Vue2 版本的代码。
|
|
106
|
-
|
|
107
|
-
## 验证方法
|
|
108
|
-
|
|
109
|
-
### 1. 检查文件是否存在
|
|
110
|
-
|
|
111
|
-
```bash
|
|
112
|
-
ls node_modules/meetfun-i18n/vue2/
|
|
113
|
-
# 应该看到:
|
|
114
|
-
# index.js index.mjs index.d.ts package.json
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
### 2. 检查是否加载正确
|
|
118
|
-
|
|
119
|
-
在您的代码中添加:
|
|
120
|
-
|
|
121
|
-
```javascript
|
|
122
|
-
import { createMeetFunI18n } from 'meetfun-i18n/vue2'
|
|
123
|
-
|
|
124
|
-
// 创建一个测试实例
|
|
125
|
-
const i18n = createMeetFunI18n({}, {
|
|
126
|
-
queryLangDictHotData: () => {},
|
|
127
|
-
queryLangDictColdData: () => {}
|
|
128
|
-
})
|
|
129
|
-
|
|
130
|
-
const instance = i18n.getI18n()
|
|
131
|
-
|
|
132
|
-
// 检查实例类型
|
|
133
|
-
console.log('i18n 类型:', instance.constructor.name)
|
|
134
|
-
// Vue2 应该输出: VueI18n
|
|
135
|
-
// Vue3 会输出: Composer
|
|
136
|
-
|
|
137
|
-
console.log('是否有 t 方法:', typeof instance.t)
|
|
138
|
-
// Vue2 应该输出: function
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
### 3. 清除缓存后重新安装
|
|
142
|
-
|
|
143
|
-
```bash
|
|
144
|
-
# 删除 node_modules
|
|
145
|
-
rm -rf node_modules
|
|
146
|
-
|
|
147
|
-
# 删除锁文件
|
|
148
|
-
rm pnpm-lock.yaml
|
|
149
|
-
|
|
150
|
-
# 重新安装
|
|
151
|
-
pnpm install
|
|
152
|
-
|
|
153
|
-
# 清除构建缓存
|
|
154
|
-
rm -rf unpackage # uni-app
|
|
155
|
-
rm -rf .cache # Webpack
|
|
156
|
-
|
|
157
|
-
# 重新运行
|
|
158
|
-
npm run dev
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
## 常见问题
|
|
162
|
-
|
|
163
|
-
### Q: 为什么需要这么多入口文件?
|
|
164
|
-
|
|
165
|
-
A: 不同的打包工具和配置有不同的模块解析策略:
|
|
166
|
-
- **现代打包工具**(支持 exports)→ 使用 package.json exports
|
|
167
|
-
- **Webpack 5**(部分支持)→ 查找物理目录 vue2/
|
|
168
|
-
- **老版本工具** → 使用根目录的 vue2.js/vue2.mjs
|
|
169
|
-
|
|
170
|
-
这种多层设计确保最大兼容性。
|
|
171
|
-
|
|
172
|
-
### Q: 如果还是报错怎么办?
|
|
173
|
-
|
|
174
|
-
A: 尝试以下步骤:
|
|
175
|
-
|
|
176
|
-
1. **完全重新安装**
|
|
177
|
-
```bash
|
|
178
|
-
rm -rf node_modules pnpm-lock.yaml
|
|
179
|
-
pnpm install
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
2. **清除所有缓存**
|
|
183
|
-
```bash
|
|
184
|
-
rm -rf unpackage .cache dist
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
3. **检查 vue-i18n 版本**
|
|
188
|
-
```bash
|
|
189
|
-
pnpm list vue-i18n
|
|
190
|
-
# Vue2 项目应该是 8.x.x
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
4. **强制安装正确版本**
|
|
194
|
-
```bash
|
|
195
|
-
pnpm add vue-i18n@^8.0.0 --force
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
### Q: TypeScript 提示找不到模块?
|
|
199
|
-
|
|
200
|
-
A: 在 `tsconfig.json` 中添加:
|
|
201
|
-
|
|
202
|
-
```json
|
|
203
|
-
{
|
|
204
|
-
"compilerOptions": {
|
|
205
|
-
"moduleResolution": "node",
|
|
206
|
-
"resolveJsonModule": true,
|
|
207
|
-
"esModuleInterop": true
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
## 更新步骤
|
|
213
|
-
|
|
214
|
-
用户需要更新到最新版本:
|
|
215
|
-
|
|
216
|
-
```bash
|
|
217
|
-
# 更新包
|
|
218
|
-
pnpm update meetfun-i18n
|
|
219
|
-
|
|
220
|
-
# 或指定版本
|
|
221
|
-
pnpm add meetfun-i18n@1.2.1
|
|
222
|
-
|
|
223
|
-
# 验证安装
|
|
224
|
-
ls node_modules/meetfun-i18n/vue2/
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
## 测试结果
|
|
228
|
-
|
|
229
|
-
更新后,以下导入应该都能正常工作:
|
|
230
|
-
|
|
231
|
-
```javascript
|
|
232
|
-
// ✅ 所有这些方式都应该能工作
|
|
233
|
-
import { createMeetFunI18n } from 'meetfun-i18n/vue2'
|
|
234
|
-
const { createMeetFunI18n } = require('meetfun-i18n/vue2')
|
|
235
|
-
|
|
236
|
-
// ✅ TypeScript 也能正确识别类型
|
|
237
|
-
import type { I18nConfig } from 'meetfun-i18n/vue2'
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
## 相关文档
|
|
241
|
-
|
|
242
|
-
- [TROUBLESHOOTING.md](./TROUBLESHOOTING.md) - 故障排除完整指南
|
|
243
|
-
- [TEST_IMPORT.md](./TEST_IMPORT.md) - 导入测试说明
|
|
244
|
-
- [VUE2_USAGE.md](./VUE2_USAGE.md) - Vue2 使用指南
|
|
245
|
-
|
|
1
|
+
# Webpack 5 路径解析修复说明
|
|
2
|
+
|
|
3
|
+
## 问题根源
|
|
4
|
+
|
|
5
|
+
Webpack 5 在处理 npm 包的子路径导入时,默认不会完全遵循 `package.json` 的 `exports` 字段。当使用 `import from 'meetfun-i18n/vue2'` 时,Webpack 会尝试查找物理路径 `node_modules/meetfun-i18n/vue2`。
|
|
6
|
+
|
|
7
|
+
## 解决方案
|
|
8
|
+
|
|
9
|
+
创建了一个真实的 `vue2/` 目录,其中包含:
|
|
10
|
+
|
|
11
|
+
### 目录结构
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
meetfun-i18n/
|
|
15
|
+
├── dist/
|
|
16
|
+
│ ├── index.js # Vue3 版本
|
|
17
|
+
│ ├── index.esm.js
|
|
18
|
+
│ └── vue2/
|
|
19
|
+
│ ├── index.js # Vue2 实际代码
|
|
20
|
+
│ └── index.esm.js
|
|
21
|
+
├── vue2/ # ← 新增物理目录
|
|
22
|
+
│ ├── package.json # 指向 dist/vue2
|
|
23
|
+
│ ├── index.js # CommonJS 入口
|
|
24
|
+
│ ├── index.mjs # ES Module 入口
|
|
25
|
+
│ └── index.d.ts # TypeScript 类型
|
|
26
|
+
└── package.json
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### vue2/package.json
|
|
30
|
+
|
|
31
|
+
```json
|
|
32
|
+
{
|
|
33
|
+
"main": "../dist/vue2/index.js",
|
|
34
|
+
"module": "../dist/vue2/index.esm.js",
|
|
35
|
+
"types": "../dist/vue2/index.d.ts"
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
这个文件告诉 Webpack:
|
|
40
|
+
- CommonJS (`require`) → 使用 `../dist/vue2/index.js`
|
|
41
|
+
- ES Module (`import`) → 使用 `../dist/vue2/index.esm.js`
|
|
42
|
+
- TypeScript → 使用 `../dist/vue2/index.d.ts`
|
|
43
|
+
|
|
44
|
+
### vue2/index.js (CommonJS 入口)
|
|
45
|
+
|
|
46
|
+
```javascript
|
|
47
|
+
module.exports = require('../dist/vue2/index.js')
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### vue2/index.mjs (ES Module 入口)
|
|
51
|
+
|
|
52
|
+
```javascript
|
|
53
|
+
export * from '../dist/vue2/index.esm.js'
|
|
54
|
+
export { default } from '../dist/vue2/index.esm.js'
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## 工作原理
|
|
58
|
+
|
|
59
|
+
现在当您使用:
|
|
60
|
+
```javascript
|
|
61
|
+
import { createMeetFunI18n } from 'meetfun-i18n/vue2'
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Webpack 会:
|
|
65
|
+
1. 找到 `node_modules/meetfun-i18n/vue2` 目录
|
|
66
|
+
2. 读取 `vue2/package.json`
|
|
67
|
+
3. 根据模块类型选择:
|
|
68
|
+
- ES Module → `vue2/index.mjs` → `dist/vue2/index.esm.js`
|
|
69
|
+
- CommonJS → `vue2/index.js` → `dist/vue2/index.js`
|
|
70
|
+
4. 最终加载正确的 Vue2 版本代码
|
|
71
|
+
|
|
72
|
+
## 多层保护
|
|
73
|
+
|
|
74
|
+
我们提供了多种方式确保兼容性:
|
|
75
|
+
|
|
76
|
+
### 1. 根目录入口文件
|
|
77
|
+
```
|
|
78
|
+
vue2.js # CommonJS
|
|
79
|
+
vue2.mjs # ES Module
|
|
80
|
+
vue2.d.ts # TypeScript
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### 2. vue2 目录
|
|
84
|
+
```
|
|
85
|
+
vue2/
|
|
86
|
+
├── package.json
|
|
87
|
+
├── index.js
|
|
88
|
+
├── index.mjs
|
|
89
|
+
└── index.d.ts
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### 3. package.json exports
|
|
93
|
+
```json
|
|
94
|
+
{
|
|
95
|
+
"exports": {
|
|
96
|
+
"./vue2": {
|
|
97
|
+
"types": "./vue2.d.ts",
|
|
98
|
+
"import": "./vue2.mjs",
|
|
99
|
+
"require": "./vue2.js"
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
无论打包工具采用哪种解析策略,都能正确找到 Vue2 版本的代码。
|
|
106
|
+
|
|
107
|
+
## 验证方法
|
|
108
|
+
|
|
109
|
+
### 1. 检查文件是否存在
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
ls node_modules/meetfun-i18n/vue2/
|
|
113
|
+
# 应该看到:
|
|
114
|
+
# index.js index.mjs index.d.ts package.json
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### 2. 检查是否加载正确
|
|
118
|
+
|
|
119
|
+
在您的代码中添加:
|
|
120
|
+
|
|
121
|
+
```javascript
|
|
122
|
+
import { createMeetFunI18n } from 'meetfun-i18n/vue2'
|
|
123
|
+
|
|
124
|
+
// 创建一个测试实例
|
|
125
|
+
const i18n = createMeetFunI18n({}, {
|
|
126
|
+
queryLangDictHotData: () => {},
|
|
127
|
+
queryLangDictColdData: () => {}
|
|
128
|
+
})
|
|
129
|
+
|
|
130
|
+
const instance = i18n.getI18n()
|
|
131
|
+
|
|
132
|
+
// 检查实例类型
|
|
133
|
+
console.log('i18n 类型:', instance.constructor.name)
|
|
134
|
+
// Vue2 应该输出: VueI18n
|
|
135
|
+
// Vue3 会输出: Composer
|
|
136
|
+
|
|
137
|
+
console.log('是否有 t 方法:', typeof instance.t)
|
|
138
|
+
// Vue2 应该输出: function
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### 3. 清除缓存后重新安装
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
# 删除 node_modules
|
|
145
|
+
rm -rf node_modules
|
|
146
|
+
|
|
147
|
+
# 删除锁文件
|
|
148
|
+
rm pnpm-lock.yaml
|
|
149
|
+
|
|
150
|
+
# 重新安装
|
|
151
|
+
pnpm install
|
|
152
|
+
|
|
153
|
+
# 清除构建缓存
|
|
154
|
+
rm -rf unpackage # uni-app
|
|
155
|
+
rm -rf .cache # Webpack
|
|
156
|
+
|
|
157
|
+
# 重新运行
|
|
158
|
+
npm run dev
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## 常见问题
|
|
162
|
+
|
|
163
|
+
### Q: 为什么需要这么多入口文件?
|
|
164
|
+
|
|
165
|
+
A: 不同的打包工具和配置有不同的模块解析策略:
|
|
166
|
+
- **现代打包工具**(支持 exports)→ 使用 package.json exports
|
|
167
|
+
- **Webpack 5**(部分支持)→ 查找物理目录 vue2/
|
|
168
|
+
- **老版本工具** → 使用根目录的 vue2.js/vue2.mjs
|
|
169
|
+
|
|
170
|
+
这种多层设计确保最大兼容性。
|
|
171
|
+
|
|
172
|
+
### Q: 如果还是报错怎么办?
|
|
173
|
+
|
|
174
|
+
A: 尝试以下步骤:
|
|
175
|
+
|
|
176
|
+
1. **完全重新安装**
|
|
177
|
+
```bash
|
|
178
|
+
rm -rf node_modules pnpm-lock.yaml
|
|
179
|
+
pnpm install
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
2. **清除所有缓存**
|
|
183
|
+
```bash
|
|
184
|
+
rm -rf unpackage .cache dist
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
3. **检查 vue-i18n 版本**
|
|
188
|
+
```bash
|
|
189
|
+
pnpm list vue-i18n
|
|
190
|
+
# Vue2 项目应该是 8.x.x
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
4. **强制安装正确版本**
|
|
194
|
+
```bash
|
|
195
|
+
pnpm add vue-i18n@^8.0.0 --force
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Q: TypeScript 提示找不到模块?
|
|
199
|
+
|
|
200
|
+
A: 在 `tsconfig.json` 中添加:
|
|
201
|
+
|
|
202
|
+
```json
|
|
203
|
+
{
|
|
204
|
+
"compilerOptions": {
|
|
205
|
+
"moduleResolution": "node",
|
|
206
|
+
"resolveJsonModule": true,
|
|
207
|
+
"esModuleInterop": true
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## 更新步骤
|
|
213
|
+
|
|
214
|
+
用户需要更新到最新版本:
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
# 更新包
|
|
218
|
+
pnpm update meetfun-i18n
|
|
219
|
+
|
|
220
|
+
# 或指定版本
|
|
221
|
+
pnpm add meetfun-i18n@1.2.1
|
|
222
|
+
|
|
223
|
+
# 验证安装
|
|
224
|
+
ls node_modules/meetfun-i18n/vue2/
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
## 测试结果
|
|
228
|
+
|
|
229
|
+
更新后,以下导入应该都能正常工作:
|
|
230
|
+
|
|
231
|
+
```javascript
|
|
232
|
+
// ✅ 所有这些方式都应该能工作
|
|
233
|
+
import { createMeetFunI18n } from 'meetfun-i18n/vue2'
|
|
234
|
+
const { createMeetFunI18n } = require('meetfun-i18n/vue2')
|
|
235
|
+
|
|
236
|
+
// ✅ TypeScript 也能正确识别类型
|
|
237
|
+
import type { I18nConfig } from 'meetfun-i18n/vue2'
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
## 相关文档
|
|
241
|
+
|
|
242
|
+
- [TROUBLESHOOTING.md](./TROUBLESHOOTING.md) - 故障排除完整指南
|
|
243
|
+
- [TEST_IMPORT.md](./TEST_IMPORT.md) - 导入测试说明
|
|
244
|
+
- [VUE2_USAGE.md](./VUE2_USAGE.md) - Vue2 使用指南
|
|
245
|
+
|
package/LICENSE
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2025 meetfun
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
22
|
-
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 meetfun
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|