Compare commits
56 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 540c7237ef | |||
| 4266168aab | |||
| 768f38fc97 | |||
|
|
a4a738da53 | ||
|
|
fa6d66835c | ||
|
|
4cf41c9b61 | ||
|
|
cd9f534f2f | ||
|
|
3397eb125a | ||
|
|
d263e7d59d | ||
|
|
cd2a14ede7 | ||
|
|
4d367e4ab2 | ||
|
|
a32c87e599 | ||
|
|
df580e2c11 | ||
|
|
794baefc7a | ||
|
|
de70d29ca6 | ||
|
|
b353c384d1 | ||
|
|
040ca2e79d | ||
|
|
56b4f43b90 | ||
|
|
74686cf664 | ||
|
|
b8be7a400f | ||
|
|
21257751f6 | ||
|
|
f2b74f2074 | ||
|
|
5e833efb61 | ||
|
|
fc43dd5a3c | ||
|
|
74b6843ef9 | ||
|
|
4cb494647a | ||
|
|
5536dbd85d | ||
|
|
ac3fddf1cc | ||
|
|
53caea62bb | ||
|
|
79514823e2 | ||
|
|
985f33d90c | ||
|
|
357c43e511 | ||
|
|
b46609313c | ||
|
|
dacc33f439 | ||
|
|
77d38c6e52 | ||
|
|
4ae44fbc38 | ||
|
|
1016738d44 | ||
|
|
0f2407562e | ||
|
|
3d97a942ae | ||
|
|
9f0b50b3b0 | ||
|
|
10b3870853 | ||
|
|
91061d118e | ||
|
|
783be74125 | ||
|
|
fbd3ef7017 | ||
|
|
e56cee18e9 | ||
|
|
32b88f0536 | ||
|
|
80dd136a7d | ||
|
|
25bcd220c5 | ||
|
|
2ad03775a6 | ||
|
|
1791ae3dc0 | ||
|
|
829e2415e6 | ||
|
|
6152c1e196 | ||
|
|
5e12acdb4c | ||
|
|
f7eca4f6d6 | ||
|
|
e744cc2670 | ||
|
|
ec156b6c83 |
518
.github/workflows/buildAndRelease.yml
vendored
Normal file
518
.github/workflows/buildAndRelease.yml
vendored
Normal file
|
|
@ -0,0 +1,518 @@
|
||||||
|
name: Build and Release
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- 'v*'
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Setup JDK 21
|
||||||
|
uses: actions/setup-java@v4
|
||||||
|
with:
|
||||||
|
java-version: '21'
|
||||||
|
distribution: 'temurin'
|
||||||
|
|
||||||
|
- name: Make gradlew executable
|
||||||
|
run: chmod +x ./gradlew
|
||||||
|
|
||||||
|
- name: Run Forge data generation
|
||||||
|
run: |
|
||||||
|
echo "=== 运行 NeoForge 数据生成 ==="
|
||||||
|
./gradlew runData --no-daemon
|
||||||
|
|
||||||
|
continue-on-error: false
|
||||||
|
|
||||||
|
- name: Build with Gradle
|
||||||
|
run: ./gradlew build --no-daemon
|
||||||
|
|
||||||
|
- name: Prepare release files
|
||||||
|
run: |
|
||||||
|
mkdir -p release-files
|
||||||
|
|
||||||
|
# 收集所有模块的构建产物
|
||||||
|
echo "=== 收集 common 模块构建产物 ==="
|
||||||
|
if [ -d "common/build/libs" ]; then
|
||||||
|
cp common/build/libs/*.jar release-files/ 2>/dev/null || echo "common 模块没有 jar 文件"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "=== 收集 fabric 模块构建产物 ==="
|
||||||
|
if [ -d "fabric/build/libs" ]; then
|
||||||
|
cp fabric/build/libs/*-dev.jar release-files/ 2>/dev/null || true # 排除dev jar
|
||||||
|
cp fabric/build/libs/*-sources.jar release-files/ 2>/dev/null || true
|
||||||
|
cp fabric/build/libs/*-javadoc.jar release-files/ 2>/dev/null || true
|
||||||
|
# 只复制主jar(没有sources/javadoc/dev classifier的jar)
|
||||||
|
find fabric/build/libs -name "*.jar" ! -name "*-sources.jar" ! -name "*-javadoc.jar" ! -name "*-dev.jar" -exec cp {} release-files/ \;
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "=== 收集 forge 模块构建产物 ==="
|
||||||
|
if [ -d "forge/build/libs" ]; then
|
||||||
|
cp forge/build/libs/*-sources.jar release-files/ 2>/dev/null || true
|
||||||
|
cp forge/build/libs/*-javadoc.jar release-files/ 2>/dev/null || true
|
||||||
|
# 只复制主jar(没有sources/javadoc classifier的jar)
|
||||||
|
find forge/build/libs -name "*.jar" ! -name "*-sources.jar" ! -name "*-javadoc.jar" -exec cp {} release-files/ \;
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "=== 收集 neoforge 模块构建产物 ==="
|
||||||
|
if [ -d "neoforge/build/libs" ]; then
|
||||||
|
cp neoforge/build/libs/*-sources.jar release-files/ 2>/dev/null || true
|
||||||
|
cp neoforge/build/libs/*-javadoc.jar release-files/ 2>/dev/null || true
|
||||||
|
# 只复制主jar(没有sources/javadoc classifier的jar)
|
||||||
|
find neoforge/build/libs -name "*.jar" ! -name "*-sources.jar" ! -name "*-javadoc.jar" -exec cp {} release-files/ \;
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "=== 准备发布的文件 ==="
|
||||||
|
ls -la release-files/
|
||||||
|
|
||||||
|
- name: Upload release artifacts
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: release-files
|
||||||
|
path: release-files/
|
||||||
|
retention-days: 7
|
||||||
|
|
||||||
|
release:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: build
|
||||||
|
if: startsWith(github.ref, 'refs/tags/v')
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout with full history
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Determine version type
|
||||||
|
id: version_type
|
||||||
|
run: |
|
||||||
|
if [[ "${{ github.ref_name }}" == *"alpha"* ]]; then
|
||||||
|
echo "type=alpha" >> $GITHUB_OUTPUT
|
||||||
|
elif [[ "${{ github.ref_name }}" == *"beta"* ]]; then
|
||||||
|
echo "type=beta" >> $GITHUB_OUTPUT
|
||||||
|
elif [[ "${{ github.ref_name }}" == *"rc"* ]]; then
|
||||||
|
echo "type=beta" >> $GITHUB_OUTPUT
|
||||||
|
else
|
||||||
|
echo "type=release" >> $GITHUB_OUTPUT
|
||||||
|
fi
|
||||||
|
- name: Download artifacts
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: release-files
|
||||||
|
path: ./dist
|
||||||
|
|
||||||
|
- name: Extract version info
|
||||||
|
id: version_info
|
||||||
|
run: |
|
||||||
|
# 从tag中提取版本号(去掉v前缀)
|
||||||
|
VERSION="${GITHUB_REF_NAME#v}"
|
||||||
|
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
||||||
|
echo "minecraft_version=$(grep "^minecraft_version=" gradle.properties | cut -d'=' -f2)" >> $GITHUB_OUTPUT
|
||||||
|
# 从 gradle.properties 提取 mod_id,如果没有则尝试从文件名推断
|
||||||
|
MOD_ID=$(grep "^mod_id=" gradle.properties | cut -d'=' -f2 || echo "")
|
||||||
|
if [ -z "$MOD_ID" ]; then
|
||||||
|
# 尝试从现有的 jar 文件名提取 mod_id
|
||||||
|
SAMPLE_JAR=$(ls dist/ | grep -m 1 -E ".*-(fabric|forge)-.*\.jar" || echo "")
|
||||||
|
if [ -n "$SAMPLE_JAR" ]; then
|
||||||
|
MOD_ID=$(echo "$SAMPLE_JAR" | sed -E 's/-(fabric|forge)-.*//')
|
||||||
|
else
|
||||||
|
MOD_ID="mymod" # 默认值,请根据实际情况修改
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo "mod_id=$MOD_ID" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
# 从 gradle.properties 提取 mod_name(用于显示)
|
||||||
|
MOD_NAME=$(grep "^mod_name=" gradle.properties | cut -d'=' -f2 || echo "My Mod")
|
||||||
|
echo "mod_name=$MOD_NAME" >> $GITHUB_OUTPUT
|
||||||
|
# 从 gradle.properties 提取 modrinth_id
|
||||||
|
MODRINTH_ID=$(grep "^modrinth_id=" gradle.properties | cut -d'=' -f2 || echo "")
|
||||||
|
echo "modrinth_id=$MODRINTH_ID" >> $GITHUB_OUTPUT
|
||||||
|
# 从 gradle.properties 提取 curseforge_id
|
||||||
|
CURSEFORGE_ID=$(grep "^curseforge_id=" gradle.properties | cut -d'=' -f2 || echo "")
|
||||||
|
echo "curseforge_id=$CURSEFORGE_ID" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
# Java版本 - 使用简单格式,不用JSON
|
||||||
|
JAVA_VERSIONS=$(grep "^java_versions=" gradle.properties | cut -d'=' -f2- || echo "21,17")
|
||||||
|
# 清理格式,移除无效字符
|
||||||
|
JAVA_VERSIONS=$(echo "$JAVA_VERSIONS" | sed 's/\[//g; s/\]//g; s/"//g; s/ //g; s/21a/21/g' | tr -d '\r')
|
||||||
|
echo "java_versions=$JAVA_VERSIONS" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
# 读取发布控制布尔值(默认都为 true)
|
||||||
|
PUBLISH_GITHUB=$(grep "^publish_github=" gradle.properties | cut -d'=' -f2 | tr '[:upper:]' '[:lower:]' | tr -d ' ' || echo "true")
|
||||||
|
if [ "$PUBLISH_GITHUB" = "true" ] || [ "$PUBLISH_GITHUB" = "1" ] || [ "$PUBLISH_GITHUB" = "yes" ]; then
|
||||||
|
echo "publish_github=true" >> $GITHUB_OUTPUT
|
||||||
|
else
|
||||||
|
echo "publish_github=false" >> $GITHUB_OUTPUT
|
||||||
|
fi
|
||||||
|
|
||||||
|
PUBLISH_MODRINTH=$(grep "^publish_modrinth=" gradle.properties | cut -d'=' -f2 | tr '[:upper:]' '[:lower:]' | tr -d ' ' || echo "true")
|
||||||
|
if [ "$PUBLISH_MODRINTH" = "true" ] || [ "$PUBLISH_MODRINTH" = "1" ] || [ "$PUBLISH_MODRINTH" = "yes" ]; then
|
||||||
|
echo "publish_modrinth=true" >> $GITHUB_OUTPUT
|
||||||
|
else
|
||||||
|
echo "publish_modrinth=false" >> $GITHUB_OUTPUT
|
||||||
|
fi
|
||||||
|
|
||||||
|
PUBLISH_CURSEFORGE=$(grep "^publish_curseforge=" gradle.properties | cut -d'=' -f2 | tr '[:upper:]' '[:lower:]' | tr -d ' ' || echo "true")
|
||||||
|
if [ "$PUBLISH_CURSEFORGE" = "true" ] || [ "$PUBLISH_CURSEFORGE" = "1" ] || [ "$PUBLISH_CURSEFORGE" = "yes" ]; then
|
||||||
|
echo "publish_curseforge=true" >> $GITHUB_OUTPUT
|
||||||
|
else
|
||||||
|
echo "publish_curseforge=false" >> $GITHUB_OUTPUT
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 读取依赖配置 - 使用简单字符串,不用JSON
|
||||||
|
FABRIC_MODRINTH_DEPS=$(grep "^fabric_modrinth_dependencies=" gradle.properties | cut -d'=' -f2- || echo "")
|
||||||
|
echo "fabric_modrinth_dependencies=$FABRIC_MODRINTH_DEPS" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
FORGE_MODRINTH_DEPS=$(grep "^forge_modrinth_dependencies=" gradle.properties | cut -d'=' -f2- || echo "")
|
||||||
|
echo "forge_modrinth_dependencies=$FORGE_MODRINTH_DEPS" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
NEOFORGE_MODRINTH_DEPS=$(grep "^neoforge_modrinth_dependencies=" gradle.properties | cut -d'=' -f2- || echo "")
|
||||||
|
echo "neoforge_modrinth_dependencies=$NEOFORGE_MODRINTH_DEPS" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
FABRIC_CURSEFORGE_DEPS=$(grep "^fabric_curseforge_dependencies=" gradle.properties | cut -d'=' -f2- || echo "")
|
||||||
|
echo "fabric_curseforge_dependencies=$FABRIC_CURSEFORGE_DEPS" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
FORGE_CURSEFORGE_DEPS=$(grep "^forge_curseforge_dependencies=" gradle.properties | cut -d'=' -f2- || echo "")
|
||||||
|
echo "forge_curseforge_dependencies=$FORGE_CURSEFORGE_DEPS" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
NEOFORGE_CURSEFORGE_DEPS=$(grep "^neoforge_curseforge_dependencies=" gradle.properties | cut -d'=' -f2- || echo "")
|
||||||
|
echo "neoforge_curseforge_dependencies=$NEOFORGE_CURSEFORGE_DEPS" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Generate CZ-compliant changelog
|
||||||
|
id: generate_changelog
|
||||||
|
run: |
|
||||||
|
CURRENT_TAG="${{ github.ref_name }}"
|
||||||
|
PREV_TAG=$(git describe --tags --abbrev=0 $(git rev-list --tags --skip=1 --max-count=1) 2>/dev/null || echo "")
|
||||||
|
|
||||||
|
# 创建临时文件
|
||||||
|
TEMP_FILE=$(mktemp)
|
||||||
|
|
||||||
|
echo "# 🚀 版本 $CURRENT_TAG 发布" > $TEMP_FILE
|
||||||
|
echo "" >> $TEMP_FILE
|
||||||
|
echo "## 📋 变更摘要" >> $TEMP_FILE
|
||||||
|
echo "" >> $TEMP_FILE
|
||||||
|
|
||||||
|
if [ -z "$PREV_TAG" ]; then
|
||||||
|
echo "### 初始版本发布" >> $TEMP_FILE
|
||||||
|
echo "" >> $TEMP_FILE
|
||||||
|
echo "这是项目的第一个正式版本。" >> $TEMP_FILE
|
||||||
|
echo "" >> $TEMP_FILE
|
||||||
|
# 获取所有提交并按类型分组
|
||||||
|
git log --pretty=format:"%s" --reverse | while read -r line; do
|
||||||
|
echo "- $line" >> $TEMP_FILE
|
||||||
|
done
|
||||||
|
else
|
||||||
|
echo "### 从 $PREV_TAG 到 $CURRENT_TAG 的变更" >> $TEMP_FILE
|
||||||
|
echo "" >> $TEMP_FILE
|
||||||
|
|
||||||
|
# 定义符合CZ规范的提交类型映射
|
||||||
|
declare -A commit_types
|
||||||
|
commit_types=(
|
||||||
|
["✨ 新功能"]="^(feat|feature)(\(.*\))?:"
|
||||||
|
["🐛 修复"]="^(fix|bugfix)(\(.*\))?:"
|
||||||
|
["📝 文档"]="^(docs|documentation)(\(.*\))?:"
|
||||||
|
["🎨 样式"]="^(style)(\(.*\))?:"
|
||||||
|
["🔨 重构"]="^(refactor)(\(.*\))?:"
|
||||||
|
["⚡️ 性能"]="^(perf|performance)(\(.*\))?:"
|
||||||
|
["✅ 测试"]="^(test)(\(.*\))?:"
|
||||||
|
["🔧 构建"]="^(build)(\(.*\))?:"
|
||||||
|
["👷 CI"]="^(ci)(\(.*\))?:"
|
||||||
|
["📦 依赖"]="^(chore|deps)(\(.*\))?:"
|
||||||
|
["⏪ 回退"]="^(revert)(\(.*\))?:"
|
||||||
|
["🛠 合并"]="^Merge "
|
||||||
|
)
|
||||||
|
|
||||||
|
# 获取所有提交
|
||||||
|
COMMITS=$(git log --pretty=format:"%s" $PREV_TAG..HEAD)
|
||||||
|
|
||||||
|
# 处理每种类型的提交
|
||||||
|
for type_name in "${!commit_types[@]}"; do
|
||||||
|
pattern="${commit_types[$type_name]}"
|
||||||
|
|
||||||
|
# 提取匹配的提交
|
||||||
|
matched_commits=$(echo "$COMMITS" | grep -E "$pattern" || true)
|
||||||
|
|
||||||
|
if [ -n "$matched_commits" ]; then
|
||||||
|
echo "#### $type_name" >> $TEMP_FILE
|
||||||
|
echo "" >> $TEMP_FILE
|
||||||
|
|
||||||
|
# 处理每条提交,提取scope和subject
|
||||||
|
echo "$matched_commits" | while read -r commit; do
|
||||||
|
# 解析scope和subject
|
||||||
|
if [[ $commit =~ ^[a-z]+\((.*)\):\ (.*) ]]; then
|
||||||
|
scope="${BASH_REMATCH[1]}"
|
||||||
|
subject="${BASH_REMATCH[2]}"
|
||||||
|
echo "- **$scope**: $subject" >> $TEMP_FILE
|
||||||
|
elif [[ $commit =~ ^[a-z]+:\ (.*) ]]; then
|
||||||
|
subject="${BASH_REMATCH[1]}"
|
||||||
|
echo "- $subject" >> $TEMP_FILE
|
||||||
|
else
|
||||||
|
echo "- $commit" >> $TEMP_FILE
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo "" >> $TEMP_FILE
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# 处理破坏性变更(BREAKING CHANGE)
|
||||||
|
breaking_changes=$(git log --pretty=format:"%b" $PREV_TAG..HEAD | grep -i "BREAKING CHANGE" || true)
|
||||||
|
if [ -n "$breaking_changes" ]; then
|
||||||
|
echo "#### ⚠️ 破坏性变更" >> $TEMP_FILE
|
||||||
|
echo "" >> $TEMP_FILE
|
||||||
|
echo "$breaking_changes" | while read -r line; do
|
||||||
|
echo "- $line" >> $TEMP_FILE
|
||||||
|
done
|
||||||
|
echo "" >> $TEMP_FILE
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 处理未分类的提交
|
||||||
|
uncategorized="$COMMITS"
|
||||||
|
for pattern in "${commit_types[@]}"; do
|
||||||
|
uncategorized=$(echo "$uncategorized" | grep -v -E "$pattern" || true)
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -n "$uncategorized" ]; then
|
||||||
|
echo "#### 📝 其他更改" >> $TEMP_FILE
|
||||||
|
echo "" >> $TEMP_FILE
|
||||||
|
echo "$uncategorized" | while read -r commit; do
|
||||||
|
echo "- $commit" >> $TEMP_FILE
|
||||||
|
done
|
||||||
|
echo "" >> $TEMP_FILE
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "## 📊 统计信息" >> $TEMP_FILE
|
||||||
|
echo "" >> $TEMP_FILE
|
||||||
|
|
||||||
|
if [ -z "$PREV_TAG" ]; then
|
||||||
|
TOTAL_COMMITS=$(git rev-list --count HEAD)
|
||||||
|
echo "- 总提交数: $TOTAL_COMMITS" >> $TEMP_FILE
|
||||||
|
echo "- 首次发布" >> $TEMP_FILE
|
||||||
|
else
|
||||||
|
COMMITS=$(git rev-list --count $PREV_TAG..HEAD)
|
||||||
|
echo "- 本次发布提交数: $COMMITS" >> $TEMP_FILE
|
||||||
|
echo "- 上一个版本: $PREV_TAG" >> $TEMP_FILE
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "- 发布日期: $(date '+%Y年%m月%d日')" >> $TEMP_FILE
|
||||||
|
echo "- 当前版本: $CURRENT_TAG" >> $TEMP_FILE
|
||||||
|
echo "- Minecraft版本: ${{ steps.version_info.outputs.minecraft_version }}" >> $TEMP_FILE
|
||||||
|
echo "" >> $TEMP_FILE
|
||||||
|
echo "---" >> $TEMP_FILE
|
||||||
|
echo "" >> $TEMP_FILE
|
||||||
|
|
||||||
|
echo "### 📜 详细提交历史" >> $TEMP_FILE
|
||||||
|
echo "" >> $TEMP_FILE
|
||||||
|
echo "<details>" >> $TEMP_FILE
|
||||||
|
echo "<summary>点击展开查看完整提交历史</summary>" >> $TEMP_FILE
|
||||||
|
echo "" >> $TEMP_FILE
|
||||||
|
echo "\`\`\`" >> $TEMP_FILE
|
||||||
|
|
||||||
|
if [ -z "$PREV_TAG" ]; then
|
||||||
|
# 使用 while 循环确保每条提交独立一行
|
||||||
|
git log --pretty=format:"%h %s - %an (%ad)" --date=short --reverse | while IFS= read -r line; do
|
||||||
|
echo "$line" >> $TEMP_FILE
|
||||||
|
done
|
||||||
|
else
|
||||||
|
git log --pretty=format:"%h %s - %an (%ad)" --date=short $PREV_TAG..HEAD | while IFS= read -r line; do
|
||||||
|
echo "$line" >> $TEMP_FILE
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 确保文件末尾有换行
|
||||||
|
echo "" >> $TEMP_FILE
|
||||||
|
echo "\`\`\`" >> $TEMP_FILE
|
||||||
|
echo "</details>" >> $TEMP_FILE
|
||||||
|
|
||||||
|
# 将文件内容输出到变量
|
||||||
|
CHANGELOG_CONTENT=$(cat $TEMP_FILE)
|
||||||
|
echo "changelog<<EOF" >> $GITHUB_OUTPUT
|
||||||
|
echo "$CHANGELOG_CONTENT" >> $GITHUB_OUTPUT
|
||||||
|
echo "EOF" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Create Release
|
||||||
|
if: steps.version_info.outputs.publish_github == 'true'
|
||||||
|
uses: ncipollo/release-action@v1
|
||||||
|
with:
|
||||||
|
artifacts: |
|
||||||
|
dist/*.jar
|
||||||
|
tag: ${{ github.ref_name }}
|
||||||
|
name: "${{ steps.version_info.outputs.minecraft_version }} - ${{ github.ref_name }}"
|
||||||
|
body: ${{ steps.generate_changelog.outputs.changelog }}
|
||||||
|
draft: false
|
||||||
|
prerelease: ${{ contains(github.ref_name, 'rc') || contains(github.ref_name, 'beta') || contains(github.ref_name, 'alpha') }}
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
allowUpdates: true
|
||||||
|
removeArtifacts: true
|
||||||
|
# Fabric 发布到 Modrinth 和 CurseForge
|
||||||
|
- name: Publish Fabric to Modrinth & CurseForge
|
||||||
|
uses: Kir-Antipov/mc-publish@v3.3
|
||||||
|
if: success() && (steps.version_info.outputs.publish_modrinth == 'true' || steps.version_info.outputs.publish_curseforge == 'true')
|
||||||
|
continue-on-error: true
|
||||||
|
with:
|
||||||
|
# 文件匹配规则 - 只匹配 fabric 的文件
|
||||||
|
files: |
|
||||||
|
dist/${{ steps.version_info.outputs.mod_id }}-fabric-${{ steps.version_info.outputs.minecraft_version }}-${{ steps.version_info.outputs.version }}.jar
|
||||||
|
dist/${{ steps.version_info.outputs.mod_id }}-fabric-${{ steps.version_info.outputs.minecraft_version }}-${{ steps.version_info.outputs.version }}-javadoc.jar
|
||||||
|
dist/${{ steps.version_info.outputs.mod_id }}-fabric-${{ steps.version_info.outputs.minecraft_version }}-${{ steps.version_info.outputs.version }}-sources.jar
|
||||||
|
|
||||||
|
# 版本信息
|
||||||
|
name: ${{ steps.version_info.outputs.mod_name }} ${{ steps.version_info.outputs.version }} (Fabric/${{ steps.version_info.outputs.minecraft_version }})
|
||||||
|
version: "${{ steps.version_info.outputs.minecraft_version }}-fabric-${{ steps.version_info.outputs.version }}"
|
||||||
|
|
||||||
|
# 更新日志
|
||||||
|
changelog: ${{ steps.generate_changelog.outputs.changelog }}
|
||||||
|
|
||||||
|
# 版本类型
|
||||||
|
version-type: ${{ steps.version_type.outputs.type }}
|
||||||
|
|
||||||
|
# 只指定 Fabric 加载器
|
||||||
|
loaders: fabric
|
||||||
|
|
||||||
|
# 游戏版本
|
||||||
|
game-versions: |
|
||||||
|
${{ steps.version_info.outputs.minecraft_version }}
|
||||||
|
|
||||||
|
# Java版本
|
||||||
|
java: |
|
||||||
|
${{ steps.version_info.outputs.java_versions }}
|
||||||
|
|
||||||
|
# Modrinth 配置
|
||||||
|
modrinth-id: ${{ steps.version_info.outputs.modrinth_id }}
|
||||||
|
modrinth-token: ${{ secrets.MODRINTH_TOKEN }}
|
||||||
|
modrinth-featured: true
|
||||||
|
modrinth-unfeature-mode: any
|
||||||
|
modrinth-dependencies: ${{ steps.version_info.outputs.fabric_modrinth_dependencies }}
|
||||||
|
# CurseForge 配置
|
||||||
|
curseforge-id: ${{ steps.version_info.outputs.curseforge_id }}
|
||||||
|
curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }}
|
||||||
|
curseforge-dependencies: ${{ steps.version_info.outputs.fabric_curseforge_dependencies }}
|
||||||
|
|
||||||
|
# 失败处理
|
||||||
|
fail-mode: skip
|
||||||
|
|
||||||
|
# Forge 发布到 Modrinth 和 CurseForge
|
||||||
|
- name: Publish Forge to Modrinth & CurseForge
|
||||||
|
uses: Kir-Antipov/mc-publish@v3.3
|
||||||
|
if: success() && (steps.version_info.outputs.publish_modrinth == 'true' || steps.version_info.outputs.publish_curseforge == 'true')
|
||||||
|
continue-on-error: true
|
||||||
|
with:
|
||||||
|
# 文件匹配规则 - 只匹配 forge 的文件
|
||||||
|
files: |
|
||||||
|
dist/${{ steps.version_info.outputs.mod_id }}-forge-${{ steps.version_info.outputs.minecraft_version }}-${{ steps.version_info.outputs.version }}.jar
|
||||||
|
dist/${{ steps.version_info.outputs.mod_id }}-forge-${{ steps.version_info.outputs.minecraft_version }}-${{ steps.version_info.outputs.version }}-javadoc.jar
|
||||||
|
dist/${{ steps.version_info.outputs.mod_id }}-forge-${{ steps.version_info.outputs.minecraft_version }}-${{ steps.version_info.outputs.version }}-sources.jar
|
||||||
|
|
||||||
|
# 版本信息
|
||||||
|
name: ${{ steps.version_info.outputs.mod_name }} ${{ steps.version_info.outputs.version }} (Forge/${{ steps.version_info.outputs.minecraft_version }})
|
||||||
|
version: "${{ steps.version_info.outputs.minecraft_version }}-forge-${{ steps.version_info.outputs.version }}"
|
||||||
|
|
||||||
|
# 更新日志
|
||||||
|
changelog: ${{ steps.generate_changelog.outputs.changelog }}
|
||||||
|
|
||||||
|
# 版本类型
|
||||||
|
version-type: ${{ steps.version_type.outputs.type }}
|
||||||
|
|
||||||
|
# 只指定 Forge 加载器
|
||||||
|
loaders: forge
|
||||||
|
|
||||||
|
# 游戏版本
|
||||||
|
game-versions: |
|
||||||
|
${{ steps.version_info.outputs.minecraft_version }}
|
||||||
|
|
||||||
|
# Java版本
|
||||||
|
java: |
|
||||||
|
${{ steps.version_info.outputs.java_versions }}
|
||||||
|
|
||||||
|
# Modrinth 配置
|
||||||
|
modrinth-id: ${{ steps.version_info.outputs.modrinth_id }}
|
||||||
|
modrinth-token: ${{ secrets.MODRINTH_TOKEN }}
|
||||||
|
modrinth-featured: true
|
||||||
|
modrinth-unfeature-mode: any
|
||||||
|
modrinth-dependencies: ${{ steps.version_info.outputs.forge_modrinth_dependencies }}
|
||||||
|
|
||||||
|
# CurseForge 配置
|
||||||
|
curseforge-id: ${{ steps.version_info.outputs.curseforge_id }}
|
||||||
|
curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }}
|
||||||
|
curseforge-dependencies: ${{ steps.version_info.outputs.forge_curseforge_dependencies }}
|
||||||
|
|
||||||
|
# 失败处理
|
||||||
|
fail-mode: skip
|
||||||
|
|
||||||
|
# NeoForge 发布到 Modrinth 和 CurseForge
|
||||||
|
- name: Publish NeoForge to Modrinth & CurseForge
|
||||||
|
uses: Kir-Antipov/mc-publish@v3.3
|
||||||
|
if: success() && (steps.version_info.outputs.publish_modrinth == 'true' || steps.version_info.outputs.publish_curseforge == 'true')
|
||||||
|
continue-on-error: true
|
||||||
|
with:
|
||||||
|
# 文件匹配规则 - 只匹配 forge 的文件
|
||||||
|
files: |
|
||||||
|
dist/${{ steps.version_info.outputs.mod_id }}-neoforge-${{ steps.version_info.outputs.minecraft_version }}-${{ steps.version_info.outputs.version }}.jar
|
||||||
|
dist/${{ steps.version_info.outputs.mod_id }}-neoforge-${{ steps.version_info.outputs.minecraft_version }}-${{ steps.version_info.outputs.version }}-javadoc.jar
|
||||||
|
dist/${{ steps.version_info.outputs.mod_id }}-neoforge-${{ steps.version_info.outputs.minecraft_version }}-${{ steps.version_info.outputs.version }}-sources.jar
|
||||||
|
|
||||||
|
# 版本信息
|
||||||
|
name: ${{ steps.version_info.outputs.mod_name }} ${{ steps.version_info.outputs.version }} (Forge/${{ steps.version_info.outputs.minecraft_version }})
|
||||||
|
version: "${{ steps.version_info.outputs.minecraft_version }}-neoforge-${{ steps.version_info.outputs.version }}"
|
||||||
|
|
||||||
|
# 更新日志
|
||||||
|
changelog: ${{ steps.generate_changelog.outputs.changelog }}
|
||||||
|
|
||||||
|
# 版本类型
|
||||||
|
version-type: ${{ steps.version_type.outputs.type }}
|
||||||
|
|
||||||
|
# 只指定 Forge 加载器
|
||||||
|
loaders: neoforge
|
||||||
|
|
||||||
|
# 游戏版本
|
||||||
|
game-versions: |
|
||||||
|
${{ steps.version_info.outputs.minecraft_version }}
|
||||||
|
|
||||||
|
# Java版本
|
||||||
|
java: |
|
||||||
|
${{ steps.version_info.outputs.java_versions }}
|
||||||
|
|
||||||
|
# Modrinth 配置
|
||||||
|
modrinth-id: ${{ steps.version_info.outputs.modrinth_id }}
|
||||||
|
modrinth-token: ${{ secrets.MODRINTH_TOKEN }}
|
||||||
|
modrinth-featured: true
|
||||||
|
modrinth-unfeature-mode: any
|
||||||
|
modrinth-dependencies: ${{ steps.version_info.outputs.neoforge_modrinth_dependencies }}
|
||||||
|
|
||||||
|
# CurseForge 配置
|
||||||
|
curseforge-id: ${{ steps.version_info.outputs.curseforge_id }}
|
||||||
|
curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }}
|
||||||
|
curseforge-dependencies: ${{ steps.version_info.outputs.neoforge_curseforge_dependencies }}
|
||||||
|
|
||||||
|
# 失败处理
|
||||||
|
fail-mode: skip
|
||||||
|
|
||||||
|
# 发布完成后列出结果
|
||||||
|
- name: Summary
|
||||||
|
if: always()
|
||||||
|
run: |
|
||||||
|
echo "## 发布结果摘要" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "### GitHub Release" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- 标签: ${{ github.ref_name }}" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- URL: https://github.com/${{ github.repository }}/releases/tag/${{ github.ref_name }}" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "### Modrinth" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- 项目ID: ${{ steps.version_info.outputs.modrinth_id }}" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- Fabric版本: ${{ steps.version_info.outputs.version }}-fabric" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- Forge版本: ${{ steps.version_info.outputs.version }}-forge" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- NeoForge版本: ${{ steps.version_info.outputs.version }}-neoforge" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "### CurseForge" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- 项目ID: ${{ steps.version_info.outputs.curseforge_id }}" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- Fabric版本: ${{ steps.version_info.outputs.version }}-fabric" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- Forge版本: ${{ steps.version_info.outputs.version }}-forge" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- NeoForge版本: ${{ steps.version_info.outputs.version }}-neoforge" >> $GITHUB_STEP_SUMMARY
|
||||||
30
.github/workflows/styleCheck.yml
vendored
Normal file
30
.github/workflows/styleCheck.yml
vendored
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
name: Check Style in Pull Request
|
||||||
|
on:
|
||||||
|
pull_request_target:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
checkstyle:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
pull-requests: write
|
||||||
|
checks: write
|
||||||
|
contents: read
|
||||||
|
steps:
|
||||||
|
- name: checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: refs/pull/${{ github.event.number }}/merge
|
||||||
|
- name: Setup Java 17
|
||||||
|
uses: actions/setup-java@v3.6.0
|
||||||
|
with:
|
||||||
|
distribution: zulu
|
||||||
|
java-version: 17
|
||||||
|
- uses: reviewdog/action-setup@v1
|
||||||
|
with:
|
||||||
|
reviewdog_version: latest
|
||||||
|
- name: download checkstyle
|
||||||
|
run: curl -o checkstyle.jar -L https://github.com/checkstyle/checkstyle/releases/download/checkstyle-12.1.2/checkstyle-12.1.2-all.jar
|
||||||
|
- name: checkstyle
|
||||||
|
env:
|
||||||
|
REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
run: java -jar checkstyle.jar -c style.xml -f xml */src | reviewdog -f=checkstyle -name="Checkstyle" -reporter=github-pr-review -fail-level=any
|
||||||
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -21,3 +21,4 @@ build
|
||||||
# other
|
# other
|
||||||
eclipse
|
eclipse
|
||||||
run
|
run
|
||||||
|
runs
|
||||||
|
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
<component name="DependencyValidationManager">
|
|
||||||
<scope name="Fabric sources" pattern="!ext[Gradle: cpw.mods:*:*]:*/&&!ext[Gradle: mezz.jei:*:*:*]:*/&&!ext[Gradle: net.jodah:typetools:*]:*/&&!ext[Gradle: net.minecraft:client:extra:*]:*/&&!ext[Gradle: net.minecraft:joined*:*]:*/&&!ext[Gradle: net.minecraft:mappings_official:zip:*]:*/&&!ext[Gradle: net.minecraftforge:*:*]:*/" />
|
|
||||||
</component>
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
<component name="DependencyValidationManager">
|
|
||||||
<scope name="Forge sources" pattern="!ext[Gradle: loom_mappings_*:*:*]:*/&&!ext[Gradle: net.fabricmc:*:*]:*/&&!ext[Gradle: net.minecraft:joined*:*]:*/&&!ext[Gradle: net.minecraft:mappings_official:zip:*]:*/&&!ext[Gradle: net.minecraft:minecraft-project-*:*]:*/" />
|
|
||||||
</component>
|
|
||||||
31
README.md
31
README.md
|
|
@ -1,25 +1,32 @@
|
||||||
# MultiLoader Template
|
# MultiLoader Template
|
||||||
|
|
||||||
This project provides a Gradle project template that can compile mods for both Forge and Fabric using a common sourceset. This project does not require any third party libraries or dependencies. If you have any questions or want to discuss the project join our [Discord](https://discord.myceliummod.network).
|
This project provides a Gradle project template that can compile Minecraft mods for multiple modloaders using a common project for the sources. This project does not require any third party libraries or dependencies. If you have any questions or want to discuss the project, please join our [Discord](https://discord.myceliummod.network).
|
||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
## IntelliJ IDEA
|
### IntelliJ IDEA
|
||||||
This guide will show how to import the MultiLoader Template into IntelliJ IDEA. The setup process is roughly equivalent to setting up Forge and Fabric independently and should be very familiar to anyone who has worked with their MDKs.
|
This guide will show how to import the MultiLoader Template into IntelliJ IDEA. The setup process is roughly equivalent to setting up the modloaders independently and should be very familiar to anyone who has worked with their MDKs.
|
||||||
|
|
||||||
1. Clone or download this repository to your computer.
|
1. Clone or download this repository to your computer.
|
||||||
2. Configure the project by editing the `group`, `mod_name`, `mod_author`, and `mod_id` properties in the `gradle.properties` file. You will also need to change the `rootProject.name` property in `settings.gradle`, this should match the folder name of your project, or else IDEA may complain.
|
2. Configure the project by setting the properties in the `gradle.properties` file. You will also need to change the `rootProject.name` property in `settings.gradle`, this should match the folder name of your project, or else IDEA may complain.
|
||||||
3. Open the template's root folder as a new project in IDEA. This is the folder that contains this README file and the gradlew executable.
|
3. Open the template's root folder as a new project in IDEA. This is the folder that contains this README.md file and the gradlew executable.
|
||||||
4. If your default JVM/JDK is not Java 17 you will encounter an error when opening the project. This error is fixed by going to `File > Settings > Build, Execution, Deployment > Build Tools > Gradle > Gradle JVM`and changing the value to a valid Java 17 JVM. You will also need to set the Project SDK to Java 17. This can be done by going to `File > Project Structure > Project SDK`. Once both have been set open the Gradle tab in IDEA and click the refresh button to reload the project.
|
4. If your default JVM/JDK is not Java 21 you will encounter an error when opening the project. This error is fixed by going to `File > Settings > Build, Execution, Deployment > Build Tools > Gradle > Gradle JVM` and changing the value to a valid Java 21 JVM. You will also need to set the Project SDK to Java 21. This can be done by going to `File > Project Structure > Project SDK`. Once both have been set open the Gradle tab in IDEA and click the refresh button to reload the project.
|
||||||
5. Open the Gradle tab in IDEA if it has not already been opened. Navigate to `Your Project > Common > Tasks > vanilla gradle > decompile`. Run this task to decompile Minecraft.
|
5. Open your Run/Debug Configurations. Under the `Application` category there should now be options to run Fabric and NeoForge projects. Select one of the client options and try to run it.
|
||||||
6. Open the Gradle tab in IDEA if it has not already been opened. Navigate to `Your Project > Forge > Tasks > forgegradle runs > genIntellijRuns`. Run this task to set up run configurations for Forge.
|
6. Assuming you were able to run the game in step 5 your workspace should now be set up.
|
||||||
7. Open your Run/Debug Configurations. Under the Application category there should now be options to run Forge and Fabric projects. Select one of the client options and try to run it.
|
|
||||||
8. Assuming you were able to run the game in step 7 your workspace should now be set up.
|
|
||||||
|
|
||||||
### Eclipse
|
### Eclipse
|
||||||
While it is possible to use this template in Eclipse it is not recommended. During the development of this template multiple critical bugs and quirks related to Eclipse were found at nearly every level of the required build tools. While we continue to work with these tools to report and resolve issues support for projects like these are not there yet. For now Eclipse is considered unsupported by this project. The development cycle for build tools is notoriously slow so there are no ETAs available.
|
While it is possible to use this template in Eclipse it is not recommended. During the development of this template multiple critical bugs and quirks related to Eclipse were found at nearly every level of the required build tools. While we continue to work with these tools to report and resolve issues support for projects like these are not there yet. For now Eclipse is considered unsupported by this project. The development cycle for build tools is notoriously slow so there are no ETAs available.
|
||||||
|
|
||||||
## Development Guide
|
## Development Guide
|
||||||
When using this template the majority of your mod is developed in the Common project. The Common project is compiled against the vanilla game and is used to hold code that is shared between the different loader-specific versions of your mod. The Common project has no knowledge or access to ModLoader specific code, apis, or concepts. Code that requires something from a specific loader must be done through the project that is specific to that loader, such as the Forge or Fabric project.
|
When using this template the majority of your mod should be developed in the `common` project. The `common` project is compiled against the vanilla game and is used to hold code that is shared between the different loader-specific versions of your mod. The `common` project has no knowledge or access to ModLoader specific code, apis, or concepts. Code that requires something from a specific loader must be done through the project that is specific to that loader, such as the `fabric` or `neoforge` projects.
|
||||||
|
|
||||||
Loader specific projects such as the Forge and Fabric project are used to load the Common project into the game. These projects also define code that is specific to that loader. Loader specific projects can access all of the code in the Common project. It is important to remember that the Common project can not access code from loader specific projects.
|
Loader specific projects such as the `fabric` and `neoforge` project are used to load the `common` project into the game. These projects also define code that is specific to that loader. Loader specific projects can access all the code in the `common` project. It is important to remember that the `common` project can not access code from loader specific projects.
|
||||||
|
|
||||||
|
## Removing Platforms and Loaders
|
||||||
|
While this template has support for many modloaders, new loaders may appear in the future, and existing loaders may become less relevant.
|
||||||
|
|
||||||
|
Removing loader specific projects is as easy as deleting the folder, and removing the `include("projectname")` line from the `settings.gradle` file.
|
||||||
|
For example if you wanted to remove support for `forge` you would follow the following steps:
|
||||||
|
|
||||||
|
1. Delete the subproject folder. For example, delete `MultiLoader-Template/forge`.
|
||||||
|
2. Remove the project from `settings.gradle`. For example, remove `include("forge")`.
|
||||||
|
|
|
||||||
94
build.gradle
94
build.gradle
|
|
@ -1,90 +1,6 @@
|
||||||
plugins {
|
plugins {
|
||||||
id 'fabric-loom' version '1.2-SNAPSHOT' apply(false)
|
// see https://fabricmc.net/develop/ for new versions
|
||||||
id 'net.minecraftforge.gradle' version '[6.0,6.2)' apply(false)
|
id 'fabric-loom' version '1.8-SNAPSHOT' apply false
|
||||||
id 'org.spongepowered.gradle.vanilla' version '0.2.1-SNAPSHOT' apply(false)
|
// see https://projects.neoforged.net/neoforged/moddevgradle for new versions
|
||||||
id("org.spongepowered.mixin") version "0.7-SNAPSHOT" apply(false)
|
id 'net.neoforged.moddev' version '2.0.49-beta' apply false
|
||||||
}
|
}
|
||||||
|
|
||||||
subprojects {
|
|
||||||
apply plugin: 'java'
|
|
||||||
|
|
||||||
java.toolchain.languageVersion = JavaLanguageVersion.of(17)
|
|
||||||
java.withSourcesJar()
|
|
||||||
java.withJavadocJar()
|
|
||||||
|
|
||||||
jar {
|
|
||||||
from(rootProject.file("LICENSE")) {
|
|
||||||
rename { "${it}_${mod_name}" }
|
|
||||||
}
|
|
||||||
manifest {
|
|
||||||
attributes([
|
|
||||||
'Specification-Title' : mod_name,
|
|
||||||
'Specification-Vendor' : mod_author,
|
|
||||||
'Specification-Version' : project.jar.archiveVersion,
|
|
||||||
'Implementation-Title' : project.name,
|
|
||||||
'Implementation-Version' : project.jar.archiveVersion,
|
|
||||||
'Implementation-Vendor' : mod_author,
|
|
||||||
'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"),
|
|
||||||
'Timestamp' : System.currentTimeMillis(),
|
|
||||||
'Built-On-Java' : "${System.getProperty('java.vm.version')} (${System.getProperty('java.vm.vendor')})",
|
|
||||||
'Built-On-Minecraft' : minecraft_version
|
|
||||||
])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sourcesJar {
|
|
||||||
from(rootProject.file("LICENSE")) {
|
|
||||||
rename { "${it}_${mod_name}" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
repositories {
|
|
||||||
mavenCentral()
|
|
||||||
maven {
|
|
||||||
name = 'Sponge / Mixin'
|
|
||||||
url = 'https://repo.spongepowered.org/repository/maven-public/'
|
|
||||||
}
|
|
||||||
maven {
|
|
||||||
name = 'BlameJared Maven (JEI / CraftTweaker / Bookshelf)'
|
|
||||||
url = 'https://maven.blamejared.com'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.withType(JavaCompile).configureEach {
|
|
||||||
|
|
||||||
it.options.encoding = 'UTF-8'
|
|
||||||
it.options.getRelease().set(17)
|
|
||||||
}
|
|
||||||
|
|
||||||
processResources {
|
|
||||||
def expandProps = [
|
|
||||||
"version": version,
|
|
||||||
"group": project.group, //Else we target the task's group.
|
|
||||||
"minecraft_version": minecraft_version,
|
|
||||||
"forge_version": forge_version,
|
|
||||||
"forge_loader_version_range": forge_loader_version_range,
|
|
||||||
"forge_version_range": forge_version_range,
|
|
||||||
"minecraft_version_range": minecraft_version_range,
|
|
||||||
"fabric_version": fabric_version,
|
|
||||||
"fabric_loader_version": fabric_loader_version,
|
|
||||||
"mod_name": mod_name,
|
|
||||||
"mod_author": mod_author,
|
|
||||||
"mod_id": mod_id,
|
|
||||||
"license": license,
|
|
||||||
"description": project.description
|
|
||||||
]
|
|
||||||
|
|
||||||
filesMatching(['pack.mcmeta', 'fabric.mod.json', 'META-INF/mods.toml', '*.mixins.json']) {
|
|
||||||
expand expandProps
|
|
||||||
}
|
|
||||||
inputs.properties(expandProps)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Disables Gradle's custom module metadata from being published to maven. The
|
|
||||||
// metadata includes mapped dependencies which are not reasonably consumable by
|
|
||||||
// other mod developers.
|
|
||||||
tasks.withType(GenerateModuleMetadata).configureEach {
|
|
||||||
|
|
||||||
enabled = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
3
buildSrc/build.gradle
Normal file
3
buildSrc/build.gradle
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
plugins {
|
||||||
|
id 'groovy-gradle-plugin'
|
||||||
|
}
|
||||||
153
buildSrc/src/main/groovy/multiloader-common.gradle
Normal file
153
buildSrc/src/main/groovy/multiloader-common.gradle
Normal file
|
|
@ -0,0 +1,153 @@
|
||||||
|
plugins {
|
||||||
|
id 'java-library'
|
||||||
|
id 'maven-publish'
|
||||||
|
}
|
||||||
|
|
||||||
|
base {
|
||||||
|
archivesName = "${mod_id}-${project.name}-${minecraft_version}"
|
||||||
|
}
|
||||||
|
|
||||||
|
java {
|
||||||
|
toolchain.languageVersion = JavaLanguageVersion.of(java_version)
|
||||||
|
withSourcesJar()
|
||||||
|
withJavadocJar()
|
||||||
|
}
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
mavenCentral()
|
||||||
|
// https://docs.gradle.org/current/userguide/declaring_repositories.html#declaring_content_exclusively_found_in_one_repository
|
||||||
|
exclusiveContent {
|
||||||
|
forRepository {
|
||||||
|
maven {
|
||||||
|
name = 'Sponge'
|
||||||
|
url = 'https://repo.spongepowered.org/repository/maven-public'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
filter { includeGroupAndSubgroups('org.spongepowered') }
|
||||||
|
}
|
||||||
|
exclusiveContent {
|
||||||
|
forRepositories(
|
||||||
|
maven {
|
||||||
|
name = 'ParchmentMC'
|
||||||
|
url = 'https://maven.parchmentmc.org/'
|
||||||
|
},
|
||||||
|
maven {
|
||||||
|
name = "NeoForge"
|
||||||
|
url = 'https://maven.neoforged.net/releases'
|
||||||
|
}
|
||||||
|
)
|
||||||
|
filter { includeGroup('org.parchmentmc.data') }
|
||||||
|
}
|
||||||
|
maven {
|
||||||
|
name = 'BlameJared'
|
||||||
|
url = 'https://maven.blamejared.com'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Declare capabilities on the outgoing configurations.
|
||||||
|
// Read more about capabilities here: https://docs.gradle.org/current/userguide/component_capabilities.html#sec:declaring-additional-capabilities-for-a-local-component
|
||||||
|
['apiElements', 'runtimeElements', 'sourcesElements', 'javadocElements'].each { variant ->
|
||||||
|
configurations."$variant".outgoing {
|
||||||
|
capability("$group:${base.archivesName.get()}:$version")
|
||||||
|
capability("$group:$mod_id-${project.name}-${minecraft_version}:$version")
|
||||||
|
capability("$group:$mod_id:$version")
|
||||||
|
}
|
||||||
|
publishing.publications.configureEach {
|
||||||
|
suppressPomMetadataWarningsFor(variant)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sourcesJar {
|
||||||
|
from(rootProject.file('LICENSE')) {
|
||||||
|
rename { "${it}_${mod_name}" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
jar {
|
||||||
|
from(rootProject.file('LICENSE')) {
|
||||||
|
rename { "${it}_${mod_name}" }
|
||||||
|
}
|
||||||
|
|
||||||
|
manifest {
|
||||||
|
attributes([
|
||||||
|
'Specification-Title' : mod_name,
|
||||||
|
'Specification-Vendor' : mod_author,
|
||||||
|
'Specification-Version' : project.jar.archiveVersion,
|
||||||
|
'Implementation-Title' : project.name,
|
||||||
|
'Implementation-Version': project.jar.archiveVersion,
|
||||||
|
'Implementation-Vendor' : mod_author,
|
||||||
|
'Built-On-Minecraft' : minecraft_version
|
||||||
|
])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
processResources {
|
||||||
|
var expandProps = [
|
||||||
|
'version' : version,
|
||||||
|
'group' : project.group, //Else we target the task's group.
|
||||||
|
'minecraft_version' : minecraft_version,
|
||||||
|
'minecraft_version_range' : minecraft_version_range,
|
||||||
|
'fabric_version' : fabric_version,
|
||||||
|
'fabric_loader_version' : fabric_loader_version,
|
||||||
|
'mod_name' : mod_name,
|
||||||
|
'mod_author' : mod_author,
|
||||||
|
'mod_id' : mod_id,
|
||||||
|
'license' : license,
|
||||||
|
'description' : project.description,
|
||||||
|
'neoforge_version' : neoforge_version,
|
||||||
|
'neoforge_loader_version_range': neoforge_loader_version_range,
|
||||||
|
"forge_version": forge_version,
|
||||||
|
"forge_loader_version_range": forge_loader_version_range,
|
||||||
|
'credits' : credits,
|
||||||
|
'java_version' : java_version
|
||||||
|
]
|
||||||
|
|
||||||
|
filesMatching(['pack.mcmeta', 'fabric.mod.json', 'META-INF/mods.toml', 'META-INF/neoforge.mods.toml', '*.mixins.json']) {
|
||||||
|
expand expandProps
|
||||||
|
}
|
||||||
|
inputs.properties(expandProps)
|
||||||
|
}
|
||||||
|
|
||||||
|
publishing {
|
||||||
|
publications {
|
||||||
|
register('mavenJava', MavenPublication) {
|
||||||
|
artifactId base.archivesName.get()
|
||||||
|
from components.java
|
||||||
|
}
|
||||||
|
}
|
||||||
|
repositories {
|
||||||
|
// 本地仓库
|
||||||
|
maven {
|
||||||
|
name = 'local'
|
||||||
|
url = layout.buildDirectory.dir("repo")
|
||||||
|
}
|
||||||
|
// Nexus 远程仓库
|
||||||
|
maven {
|
||||||
|
name = 'LTDNexus'
|
||||||
|
url = 'https://nexus.bot.leisuretimedock.top/repository/maven-releases/'
|
||||||
|
credentials {
|
||||||
|
username = System.getenv('LTDNexusUsername') ?: ''
|
||||||
|
password = System.getenv('LTDNexusPassword') ?: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 任务依赖 ====================
|
||||||
|
|
||||||
|
tasks.withType(PublishToMavenRepository) {
|
||||||
|
dependsOn assemble
|
||||||
|
dependsOn javadoc
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.named('build') {
|
||||||
|
dependsOn javadoc, sourcesJar
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.register('cleanRepo', Delete) {
|
||||||
|
delete layout.buildDirectory.dir("repo")
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.named('clean') {
|
||||||
|
dependsOn cleanRepo
|
||||||
|
}
|
||||||
50
buildSrc/src/main/groovy/multiloader-loader.gradle
Normal file
50
buildSrc/src/main/groovy/multiloader-loader.gradle
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
plugins {
|
||||||
|
id 'multiloader-common'
|
||||||
|
}
|
||||||
|
|
||||||
|
configurations {
|
||||||
|
commonJava{
|
||||||
|
canBeResolved = true
|
||||||
|
}
|
||||||
|
commonResources{
|
||||||
|
canBeResolved = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compileOnly(project(':common')) {
|
||||||
|
capabilities {
|
||||||
|
requireCapability "$group:$mod_id"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
commonJava project(path: ':common', configuration: 'commonJava')
|
||||||
|
commonResources project(path: ':common', configuration: 'commonResources')
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.named('compileJava', JavaCompile) {
|
||||||
|
dependsOn(configurations.commonJava)
|
||||||
|
source(configurations.commonJava)
|
||||||
|
}
|
||||||
|
|
||||||
|
processResources {
|
||||||
|
dependsOn(configurations.commonResources)
|
||||||
|
from(configurations.commonResources)
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.named('javadoc', Javadoc).configure {
|
||||||
|
dependsOn(configurations.commonJava)
|
||||||
|
source(configurations.commonJava)
|
||||||
|
options.encoding = 'UTF-8'
|
||||||
|
options.charSet = 'UTF-8'
|
||||||
|
options.links("https://docs.oracle.com/en/java/javase/21/docs/api/")
|
||||||
|
options.memberLevel = JavadocMemberLevel.PUBLIC
|
||||||
|
options.addBooleanOption('Xdoclint:none', true)
|
||||||
|
options.addStringOption('doctitle', "${mod_id} ${minecraft_version} ${version} Javadoc")
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.named('sourcesJar', Jar) {
|
||||||
|
dependsOn(configurations.commonJava)
|
||||||
|
from(configurations.commonJava)
|
||||||
|
dependsOn(configurations.commonResources)
|
||||||
|
from(configurations.commonResources)
|
||||||
|
}
|
||||||
|
|
@ -1,34 +1,45 @@
|
||||||
plugins {
|
plugins {
|
||||||
id 'idea'
|
id 'multiloader-common'
|
||||||
id 'java'
|
id 'net.neoforged.moddev'
|
||||||
id 'maven-publish'
|
|
||||||
id 'org.spongepowered.gradle.vanilla'
|
|
||||||
}
|
}
|
||||||
base {
|
|
||||||
archivesName = "${mod_name}-common-${minecraft_version}"
|
neoForge {
|
||||||
}
|
neoFormVersion = neo_form_version
|
||||||
minecraft {
|
// Automatically enable AccessTransformers if the file exists
|
||||||
version(minecraft_version)
|
def at = file('src/main/resources/META-INF/accesstransformer.cfg')
|
||||||
if(file("src/main/resources/${mod_id}.accesswidener").exists()){
|
if (at.exists()) {
|
||||||
accessWideners(file("src/main/resources/${mod_id}.accesswidener"))
|
accessTransformers.from(at.absolutePath)
|
||||||
|
}
|
||||||
|
parchment {
|
||||||
|
minecraftVersion = parchment_minecraft
|
||||||
|
mappingsVersion = parchment_version
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compileOnly group:'org.spongepowered', name:'mixin', version:'0.8.5'
|
compileOnly group: 'org.spongepowered', name: 'mixin', version: '0.8.5'
|
||||||
implementation group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.1'
|
// fabric and neoforge both bundle mixinextras, so it is safe to use it in common
|
||||||
|
compileOnly group: 'io.github.llamalad7', name: 'mixinextras-common', version: '0.3.5'
|
||||||
|
annotationProcessor group: 'io.github.llamalad7', name: 'mixinextras-common', version: '0.3.5'
|
||||||
}
|
}
|
||||||
|
|
||||||
publishing {
|
configurations {
|
||||||
publications {
|
commonJava {
|
||||||
mavenJava(MavenPublication) {
|
canBeResolved = false
|
||||||
artifactId base.archivesName.get()
|
canBeConsumed = true
|
||||||
from components.java
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
repositories {
|
commonResources {
|
||||||
maven {
|
canBeResolved = false
|
||||||
url "file://" + System.getenv("local_maven")
|
canBeConsumed = true
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
artifacts {
|
||||||
|
commonJava sourceSets.main.java.sourceDirectories.singleFile
|
||||||
|
commonResources sourceSets.main.resources.sourceDirectories.singleFile, file('src/generated/resources')
|
||||||
|
}
|
||||||
|
|
||||||
|
clean {
|
||||||
|
delete 'generated'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ package com.example.examplemod.mixin;
|
||||||
|
|
||||||
import com.example.examplemod.Constants;
|
import com.example.examplemod.Constants;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.screens.TitleScreen;
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,16 @@
|
||||||
{
|
{
|
||||||
"required": true,
|
"required": true,
|
||||||
"minVersion": "0.8",
|
"minVersion": "0.8",
|
||||||
"package": "com.example.examplemod.mixin",
|
"package": "com.example.examplemod.mixin",
|
||||||
"refmap": "${mod_id}.refmap.json",
|
"refmap": "${mod_id}.refmap.json",
|
||||||
"compatibilityLevel": "JAVA_17",
|
"compatibilityLevel": "JAVA_18",
|
||||||
"mixins": [
|
"mixins": [],
|
||||||
],
|
"client": [
|
||||||
"client": [
|
"MixinMinecraft"
|
||||||
"MixinMinecraft"
|
],
|
||||||
],
|
"server": [],
|
||||||
"server": [
|
"injectors": {
|
||||||
],
|
"defaultRequire": 1
|
||||||
"injectors": {
|
}
|
||||||
"defaultRequire": 1
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,25 @@
|
||||||
plugins {
|
plugins {
|
||||||
id 'java'
|
id 'multiloader-loader'
|
||||||
id 'idea'
|
|
||||||
id 'maven-publish'
|
|
||||||
id 'fabric-loom'
|
id 'fabric-loom'
|
||||||
}
|
}
|
||||||
base {
|
|
||||||
archivesName = "${mod_name}-fabric-${minecraft_version}"
|
|
||||||
}
|
|
||||||
dependencies {
|
dependencies {
|
||||||
minecraft "com.mojang:minecraft:${minecraft_version}"
|
minecraft "com.mojang:minecraft:${minecraft_version}"
|
||||||
mappings loom.officialMojangMappings()
|
mappings loom.layered {
|
||||||
|
officialMojangMappings()
|
||||||
|
parchment("org.parchmentmc.data:parchment-${parchment_minecraft}:${parchment_version}@zip")
|
||||||
|
}
|
||||||
modImplementation "net.fabricmc:fabric-loader:${fabric_loader_version}"
|
modImplementation "net.fabricmc:fabric-loader:${fabric_loader_version}"
|
||||||
modImplementation "net.fabricmc.fabric-api:fabric-api:${fabric_version}"
|
modImplementation "net.fabricmc.fabric-api:fabric-api:${fabric_version}"
|
||||||
implementation group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.1'
|
localRuntime 'net.covers1624:DevLogin:0.1.0.5'
|
||||||
implementation project(":common")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
loom {
|
loom {
|
||||||
|
def commonResources = project(':common').file('src/main/resources/').getAbsolutePath().toString()
|
||||||
|
def fabricResources = file('src/main/resources/').getAbsolutePath().toString()
|
||||||
|
def fabricBuildResources = file('build/resources/main/').getAbsolutePath().toString()
|
||||||
|
def commonBuildResources = project(':common').file('build/resources/main/').getAbsolutePath().toString()
|
||||||
|
def generatedOutput = project(':common').file('src/generated/resources/').getAbsolutePath().toString()
|
||||||
|
|
||||||
if (project(":common").file("src/main/resources/${mod_id}.accesswidener").exists()) {
|
if (project(":common").file("src/main/resources/${mod_id}.accesswidener").exists()) {
|
||||||
accessWidenerPath.set(project(":common").file("src/main/resources/${mod_id}.accesswidener"))
|
accessWidenerPath.set(project(":common").file("src/main/resources/${mod_id}.accesswidener"))
|
||||||
}
|
}
|
||||||
|
|
@ -26,43 +29,114 @@ loom {
|
||||||
runs {
|
runs {
|
||||||
client {
|
client {
|
||||||
client()
|
client()
|
||||||
setConfigName("Fabric Client")
|
setConfigName('Fabric Client')
|
||||||
ideConfigGenerated(true)
|
ideConfigGenerated(true)
|
||||||
runDir("run")
|
runDir('runs/client')
|
||||||
|
programArgs "--username", "dev"
|
||||||
|
def args = [
|
||||||
|
"-Dlib39.modid=${mod_id}".toString(),
|
||||||
|
"-Dlib39.output=${generatedOutput}".toString(),
|
||||||
|
"-Dlib39.existing.fabric=${fabricResources}".toString(),
|
||||||
|
"-Dlib39.existing.common=${commonResources}".toString(),
|
||||||
|
"-Dlib39.existing.fabricBuild=${fabricBuildResources}".toString(),
|
||||||
|
"-Dlib39.existing.commonBuild=${commonBuildResources}".toString()
|
||||||
|
]
|
||||||
|
vmArgs.addAll(args)
|
||||||
|
|
||||||
|
// 也可以添加JVM参数
|
||||||
|
vmArgs.addAll(
|
||||||
|
"-Dfabric.log.level=info",
|
||||||
|
"-Dmixin.debug.export=true"
|
||||||
|
)
|
||||||
}
|
}
|
||||||
server {
|
server {
|
||||||
server()
|
server()
|
||||||
setConfigName("Fabric Server")
|
setConfigName('Fabric Server')
|
||||||
ideConfigGenerated(true)
|
ideConfigGenerated(true)
|
||||||
runDir("run")
|
runDir('runs/server')
|
||||||
|
def args = [
|
||||||
|
"-Dlib39.modid=${mod_id}".toString(),
|
||||||
|
"-Dlib39.output=${generatedOutput}".toString(),
|
||||||
|
"-Dlib39.existing.fabric=${fabricResources}".toString(),
|
||||||
|
"-Dlib39.existing.common=${commonResources}".toString(),
|
||||||
|
"-Dlib39.existing.fabricBuild=${fabricBuildResources}".toString(),
|
||||||
|
"-Dlib39.existing.commonBuild=${commonBuildResources}".toString()
|
||||||
|
]
|
||||||
|
vmArgs.addAll(args)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
tasks.named('sourcesJar', Jar) {
|
||||||
|
dependsOn classes
|
||||||
tasks.withType(JavaCompile).configureEach {
|
dependsOn project(':common').tasks.named('sourcesJar') // 显式依赖common的source
|
||||||
source(project(":common").sourceSets.main.allSource)
|
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
||||||
}
|
archiveClassifier.set('sources')
|
||||||
tasks.withType(Javadoc).configureEach {
|
from sourceSets.main.allSource
|
||||||
source(project(":common").sourceSets.main.allJava)
|
from project(':common').sourceSets.main.allSource
|
||||||
}
|
|
||||||
tasks.named("sourcesJar", Jar) {
|
|
||||||
from(project(":common").sourceSets.main.allSource)
|
|
||||||
}
|
|
||||||
|
|
||||||
processResources {
|
|
||||||
from project(":common").sourceSets.main.resources
|
|
||||||
}
|
|
||||||
|
|
||||||
publishing {
|
|
||||||
publications {
|
|
||||||
mavenJava(MavenPublication) {
|
|
||||||
artifactId base.archivesName.get()
|
|
||||||
from components.java
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
repositories {
|
|
||||||
maven {
|
tasks.named('javadoc', Javadoc) {
|
||||||
url "file://" + System.getenv("local_maven")
|
source project(':common').sourceSets.main.allJava
|
||||||
}
|
dependsOn project(':common').tasks.named('javadoc') // 显式依赖common的javadoc
|
||||||
|
source sourceSets.main.allJava
|
||||||
|
classpath = configurations.compileClasspath
|
||||||
|
classpath += project(':common').sourceSets.main.compileClasspath
|
||||||
|
options.encoding = 'UTF-8'
|
||||||
|
options.charSet = 'UTF-8'
|
||||||
|
options.links("https://docs.oracle.com/en/java/javase/21/docs/api/")
|
||||||
|
options.memberLevel = JavadocMemberLevel.PUBLIC
|
||||||
|
options.addBooleanOption('Xdoclint:none', true)
|
||||||
|
options.addStringOption('doctitle', "${mod_id} ${minecraft_version} ${version} Javadoc")
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
tasks.named('javadocJar', Jar) {
|
||||||
|
dependsOn javadoc
|
||||||
|
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
||||||
|
archiveClassifier.set('javadoc')
|
||||||
|
from javadoc.destinationDir
|
||||||
|
from project(':common').javadoc.destinationDir
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.named('build') {
|
||||||
|
dependsOn tasks.named('sourcesJar')
|
||||||
|
dependsOn tasks.named('javadocJar')
|
||||||
|
}
|
||||||
|
publishing {
|
||||||
|
publications {
|
||||||
|
mavenJava(MavenPublication) {
|
||||||
|
// 重置artifactsId
|
||||||
|
artifactId = "${mod_id}-fabric-${minecraft_version}"
|
||||||
|
artifacts.clear()
|
||||||
|
// 手动添加需要的artifacts
|
||||||
|
artifact(remapJar) {
|
||||||
|
builtBy remapJar
|
||||||
|
}
|
||||||
|
artifact(remapSourcesJar) {
|
||||||
|
builtBy remapSourcesJar
|
||||||
|
classifier = 'sources'
|
||||||
|
}
|
||||||
|
artifact(javadocJar) {
|
||||||
|
builtBy javadocJar
|
||||||
|
classifier = 'javadoc'
|
||||||
|
}
|
||||||
|
pom {
|
||||||
|
name = mod_name
|
||||||
|
description = project.description ?: "default"
|
||||||
|
developers {
|
||||||
|
developer {
|
||||||
|
id = mod_author
|
||||||
|
name = mod_author
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.named('generateMetadataFileForMavenJavaPublication') {
|
||||||
|
dependsOn tasks.named('remapJar')
|
||||||
|
dependsOn tasks.named('remapSourcesJar')
|
||||||
|
dependsOn tasks.named('javadocJar')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,18 +1,16 @@
|
||||||
{
|
{
|
||||||
"required": true,
|
"required": true,
|
||||||
"minVersion": "0.8",
|
"minVersion": "0.8",
|
||||||
"package": "com.example.examplemod.mixin",
|
"package": "com.example.examplemod.mixin",
|
||||||
"refmap": "${mod_id}.refmap.json",
|
"refmap": "${mod_id}.refmap.json",
|
||||||
"compatibilityLevel": "JAVA_17",
|
"compatibilityLevel": "JAVA_21",
|
||||||
"mixins": [
|
"mixins": [],
|
||||||
],
|
"client": [
|
||||||
"client": [
|
"MixinTitleScreen"
|
||||||
"MixinTitleScreen"
|
],
|
||||||
],
|
"server": [],
|
||||||
"server": [
|
"injectors": {
|
||||||
],
|
"defaultRequire": 1
|
||||||
"injectors": {
|
|
||||||
"defaultRequire": 1
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"schemaVersion": 1,
|
"schemaVersion": 1,
|
||||||
"id": "mod_id",
|
"id": "${mod_id}",
|
||||||
"version": "${version}",
|
"version": "${version}",
|
||||||
"name": "${mod_name}",
|
"name": "${mod_name}",
|
||||||
"description": "${description}",
|
"description": "${description}",
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
"sources": "https://github.com/FabricMC/fabric-example-mod"
|
"sources": "https://github.com/FabricMC/fabric-example-mod"
|
||||||
},
|
},
|
||||||
"license": "${license}",
|
"license": "${license}",
|
||||||
"icon": "assets/modid/${mod_id}.png",
|
"icon": "${mod_id}.png",
|
||||||
"environment": "*",
|
"environment": "*",
|
||||||
"entrypoints": {
|
"entrypoints": {
|
||||||
"main": [
|
"main": [
|
||||||
|
|
@ -24,10 +24,10 @@
|
||||||
"${mod_id}.fabric.mixins.json"
|
"${mod_id}.fabric.mixins.json"
|
||||||
],
|
],
|
||||||
"depends": {
|
"depends": {
|
||||||
"fabricloader": ">=0.14",
|
"fabricloader": ">=${fabric_loader_version}",
|
||||||
"fabric": "*",
|
"fabric-api": "*",
|
||||||
"minecraft": "1.20",
|
"minecraft": "${minecraft_version}",
|
||||||
"java": ">=17"
|
"java": ">=${java_version}"
|
||||||
},
|
},
|
||||||
"suggests": {
|
"suggests": {
|
||||||
"another-mod": "*"
|
"another-mod": "*"
|
||||||
|
|
|
||||||
|
|
@ -1,112 +1,177 @@
|
||||||
plugins {
|
plugins {
|
||||||
id 'idea'
|
id 'multiloader-loader'
|
||||||
id 'maven-publish'
|
id 'net.minecraftforge.gradle' version '[6.0.24,6.2)'
|
||||||
id 'net.minecraftforge.gradle'
|
id 'org.spongepowered.mixin' version '0.7-SNAPSHOT'
|
||||||
id 'org.spongepowered.mixin'
|
|
||||||
}
|
}
|
||||||
base {
|
base {
|
||||||
archivesName = "${mod_name}-forge-${minecraft_version}"
|
archivesName = "${mod_name}-forge-${minecraft_version}"
|
||||||
}
|
}
|
||||||
mixin {
|
mixin {
|
||||||
add(sourceSets.main, "${mod_id}.refmap.json")
|
|
||||||
|
|
||||||
config("${mod_id}.mixins.json")
|
config("${mod_id}.mixins.json")
|
||||||
config("${mod_id}.forge.mixins.json")
|
config("${mod_id}.forge.mixins.json")
|
||||||
}
|
}
|
||||||
|
jar {
|
||||||
|
manifest {
|
||||||
|
attributes["MixinConfigs"] = "${mod_id}.mixins.json,${mod_id}.forge.mixins.json"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
minecraft {
|
minecraft {
|
||||||
|
def commonResources = project(':common').file('src/main/resources/').getAbsolutePath()
|
||||||
|
def forgeResources = file('src/main/resources/').getAbsolutePath()
|
||||||
|
def forgeBuildResources = file('build/resources/main/').getAbsolutePath()
|
||||||
|
def commonBuildResources = project(':common').file('build/resources/main/').getAbsolutePath()
|
||||||
|
def generatedOutput = project(':common').file('src/generated/resources/').getAbsolutePath()
|
||||||
|
|
||||||
mappings channel: 'official', version: minecraft_version
|
mappings channel: 'official', version: minecraft_version
|
||||||
|
|
||||||
copyIdeResources = true //Calls processResources when in dev
|
copyIdeResources = true //Calls processResources when in dev
|
||||||
|
|
||||||
|
reobf = false // Forge 1.20.6+ uses official mappings at runtime, so we shouldn't reobf from official to SRG
|
||||||
|
|
||||||
// Automatically enable forge AccessTransformers if the file exists
|
// Automatically enable forge AccessTransformers if the file exists
|
||||||
// This location is hardcoded in Forge and can not be changed.
|
// This location is hardcoded in Forge and can not be changed.
|
||||||
// https://github.com/MinecraftForge/MinecraftForge/blob/be1698bb1554f9c8fa2f58e32b9ab70bc4385e60/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModFile.java#L123
|
// https://github.com/MinecraftForge/MinecraftForge/blob/be1698bb1554f9c8fa2f58e32b9ab70bc4385e60/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModFile.java#L123
|
||||||
if (file('src/main/resources/META-INF/accesstransformer.cfg').exists()) {
|
// Forge still uses SRG names during compile time, so we cannot use the common AT's
|
||||||
accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')
|
def at = project(':common').file('src/main/resources/META-INF/accesstransformer.cfg')
|
||||||
|
if (at.exists()) {
|
||||||
|
accessTransformers = ["src/main/resources/META-INF/accesstransformer.cfg"]
|
||||||
}
|
}
|
||||||
|
|
||||||
runs {
|
runs {
|
||||||
client {
|
client {
|
||||||
workingDirectory project.file('run')
|
workingDirectory file('runs/client')
|
||||||
ideaModule "${rootProject.name}.${project.name}.main"
|
ideaModule "${rootProject.name}.${project.name}.main"
|
||||||
taskName 'Client'
|
taskName 'Client'
|
||||||
property 'mixin.env.remapRefMap', 'true'
|
|
||||||
property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg"
|
|
||||||
mods {
|
mods {
|
||||||
modClientRun {
|
modClientRun {
|
||||||
source sourceSets.main
|
source sourceSets.main
|
||||||
source project(":common").sourceSets.main
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
args '--mod', project.mod_id,
|
||||||
|
'--all',
|
||||||
|
'--existing', forgeResources,
|
||||||
|
'--existing', commonResources,
|
||||||
|
'--existing', forgeBuildResources,
|
||||||
|
'--existing', commonBuildResources
|
||||||
}
|
}
|
||||||
|
|
||||||
server {
|
server {
|
||||||
workingDirectory project.file('run')
|
workingDirectory file('runs/server')
|
||||||
ideaModule "${rootProject.name}.${project.name}.main"
|
ideaModule "${rootProject.name}.${project.name}.main"
|
||||||
taskName 'Server'
|
taskName 'Server'
|
||||||
property 'mixin.env.remapRefMap', 'true'
|
|
||||||
property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg"
|
|
||||||
mods {
|
mods {
|
||||||
modServerRun {
|
modServerRun {
|
||||||
source sourceSets.main
|
source sourceSets.main
|
||||||
source project(":common").sourceSets.main
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
args '--mod', project.mod_id,
|
||||||
|
'--all',
|
||||||
|
'--existing', forgeResources,
|
||||||
|
'--existing', commonResources,
|
||||||
|
'--existing', forgeBuildResources,
|
||||||
|
'--existing', commonBuildResources
|
||||||
}
|
}
|
||||||
|
|
||||||
data {
|
data {
|
||||||
workingDirectory project.file('run')
|
workingDirectory file('runs/data')
|
||||||
ideaModule "${rootProject.name}.${project.name}.main"
|
ideaModule "${rootProject.name}.${project.name}.main"
|
||||||
args '--mod', mod_id, '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')
|
args '--mod', mod_id, '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')
|
||||||
taskName 'Data'
|
taskName 'Data'
|
||||||
property 'mixin.env.remapRefMap', 'true'
|
|
||||||
property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg"
|
|
||||||
mods {
|
mods {
|
||||||
modDataRun {
|
modDataRun {
|
||||||
source sourceSets.main
|
source sourceSets.main
|
||||||
source project(":common").sourceSets.main
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
args '--mod', mod_id,
|
||||||
|
'--all',
|
||||||
|
'--output', generatedOutput,
|
||||||
|
'--existing', forgeResources,
|
||||||
|
'--existing', commonResources,
|
||||||
|
'--existing', forgeBuildResources,
|
||||||
|
'--existing', commonBuildResources
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sourceSets.main.resources.srcDir 'src/generated/resources'
|
sourceSets.main.resources.srcDir project(':common').file('src/generated/resources')
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}"
|
minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}"
|
||||||
compileOnly project(":common")
|
|
||||||
annotationProcessor("org.spongepowered:mixin:0.8.5-SNAPSHOT:processor")
|
annotationProcessor("org.spongepowered:mixin:0.8.5-SNAPSHOT:processor")
|
||||||
|
|
||||||
|
// Forge's hack fix
|
||||||
|
implementation('net.sf.jopt-simple:jopt-simple:5.0.4') { version { strictly '5.0.4' } }
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.withType(JavaCompile).configureEach {
|
// 配置sourceJar任务
|
||||||
source(project(":common").sourceSets.main.allSource)
|
tasks.named('sourcesJar', Jar) {
|
||||||
|
dependsOn classes
|
||||||
|
dependsOn project(':common').tasks.named('sourcesJar') // 显式依赖common的source
|
||||||
|
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
||||||
|
archiveClassifier.set('sources')
|
||||||
|
from sourceSets.main.allSource
|
||||||
|
from project(':common').sourceSets.main.allSource
|
||||||
}
|
}
|
||||||
tasks.withType(Javadoc).configureEach {
|
|
||||||
source(project(":common").sourceSets.main.allJava)
|
// 配置javadoc任务
|
||||||
|
tasks.named('javadoc', Javadoc) {
|
||||||
|
source project(':common').sourceSets.main.allJava
|
||||||
|
source sourceSets.main.allJava
|
||||||
|
classpath = configurations.compileClasspath
|
||||||
|
classpath += project(':common').sourceSets.main.compileClasspath
|
||||||
|
options.encoding = 'UTF-8'
|
||||||
|
options.charSet = 'UTF-8'
|
||||||
|
options.links("https://docs.oracle.com/en/java/javase/17/docs/api/")
|
||||||
|
options.memberLevel = JavadocMemberLevel.PUBLIC
|
||||||
|
options.addBooleanOption('Xdoclint:none', true)
|
||||||
|
options.addStringOption('doctitle', "${mod_id} ${minecraft_version} ${version} Javadoc")
|
||||||
}
|
}
|
||||||
tasks.named("sourcesJar", Jar) {
|
|
||||||
from(project(":common").sourceSets.main.allSource)
|
// 配置javadocJar任务
|
||||||
|
tasks.named('javadocJar', Jar) {
|
||||||
|
dependsOn javadoc
|
||||||
|
dependsOn project(':common').tasks.named('javadoc') // 显式依赖common的javadoc
|
||||||
|
|
||||||
|
archiveClassifier.set('javadoc')
|
||||||
|
from javadoc.destinationDir
|
||||||
|
from project(':common').javadoc.destinationDir
|
||||||
|
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
||||||
|
}
|
||||||
|
|
||||||
|
// 确保build任务包含所有需要的jar
|
||||||
|
tasks.named('build') {
|
||||||
|
dependsOn tasks.named('sourcesJar')
|
||||||
|
dependsOn tasks.named('javadocJar')
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sourceSets.each {
|
||||||
|
def dir = layout.buildDirectory.dir("sourcesSets/$it.name")
|
||||||
|
it.output.resourcesDir = dir
|
||||||
|
it.java.destinationDirectory = dir
|
||||||
}
|
}
|
||||||
|
|
||||||
processResources {
|
processResources {
|
||||||
from project(":common").sourceSets.main.resources
|
from project(':common').sourceSets.main.resources
|
||||||
}
|
inputs.property "version", project.version
|
||||||
|
inputs.property "minecraft_version", minecraft_version
|
||||||
|
inputs.property "forge_version", forge_version
|
||||||
|
inputs.property "mod_id", mod_id
|
||||||
|
inputs.property "mod_name", mod_name
|
||||||
|
inputs.property "description", description
|
||||||
|
inputs.property "mod_author", mod_author
|
||||||
|
|
||||||
jar.finalizedBy('reobfJar')
|
filesMatching(['META-INF/mods.toml', 'pack.mcmeta']) {
|
||||||
|
expand([
|
||||||
publishing {
|
version: project.version,
|
||||||
publications {
|
minecraft_version: minecraft_version,
|
||||||
mavenJava(MavenPublication) {
|
forge_version: forge_version,
|
||||||
artifactId base.archivesName.get()
|
mod_id: mod_id,
|
||||||
from components.java
|
mod_name: mod_name,
|
||||||
fg.component(it)
|
description: description,
|
||||||
}
|
mod_author: mod_author
|
||||||
|
])
|
||||||
}
|
}
|
||||||
repositories {
|
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
||||||
maven {
|
}
|
||||||
url "file://" + System.getenv("local_maven")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -4,16 +4,16 @@ import net.minecraftforge.fml.common.Mod;
|
||||||
|
|
||||||
@Mod(Constants.MOD_ID)
|
@Mod(Constants.MOD_ID)
|
||||||
public class ExampleMod {
|
public class ExampleMod {
|
||||||
|
|
||||||
public ExampleMod() {
|
public ExampleMod() {
|
||||||
|
|
||||||
// This method is invoked by the Forge mod loader when it is ready
|
// This method is invoked by the Forge mod loader when it is ready
|
||||||
// to load your mod. You can access Forge and Common code in this
|
// to load your mod. You can access Forge and Common code in this
|
||||||
// project.
|
// project.
|
||||||
|
|
||||||
// Use Forge to bootstrap the Common mod.
|
// Use Forge to bootstrap the Common mod.
|
||||||
Constants.LOG.info("Hello Forge world!");
|
Constants.LOG.info("Hello Forge world!");
|
||||||
CommonClass.init();
|
CommonClass.init();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2,20 +2,21 @@ modLoader = "javafml" #mandatory
|
||||||
loaderVersion = "${forge_loader_version_range}" #mandatory This is typically bumped every Minecraft version by Forge. See https://files.minecraftforge.net/ for a list of versions.
|
loaderVersion = "${forge_loader_version_range}" #mandatory This is typically bumped every Minecraft version by Forge. See https://files.minecraftforge.net/ for a list of versions.
|
||||||
license = "${license}" # Review your options at https://choosealicense.com/.
|
license = "${license}" # Review your options at https://choosealicense.com/.
|
||||||
#issueTrackerURL="https://change.me.to.your.issue.tracker.example.invalid/" #optional
|
#issueTrackerURL="https://change.me.to.your.issue.tracker.example.invalid/" #optional
|
||||||
|
#clientSideOnly=true #optional
|
||||||
[[mods]] #mandatory
|
[[mods]] #mandatory
|
||||||
modId = "${mod_id}" #mandatory
|
modId = "${mod_id}" #mandatory
|
||||||
version = "${version}" #mandatory
|
version = "${version}" #mandatory
|
||||||
displayName = "${mod_name}" #mandatory
|
displayName = "${mod_name}" #mandatory
|
||||||
#updateJSONURL="https://change.me.example.invalid/updates.json" #optional (see https://mcforge.readthedocs.io/en/latest/gettingstarted/autoupdate/)
|
#updateJSONURL="https://change.me.example.invalid/updates.json" #optional (see https://mcforge.readthedocs.io/en/latest/gettingstarted/autoupdate/)
|
||||||
#displayURL="https://change.me.to.your.mods.homepage.example.invalid/" #optional (displayed in the mod UI)
|
#displayURL="https://change.me.to.your.mods.homepage.example.invalid/" #optional (displayed in the mod UI)
|
||||||
logoFile = "${mod_id}.png" #optional (needs to be in the root of your mod jar (root of your 'resources' folder))
|
logoFile = "${mod_id}.png" #optional
|
||||||
credits = "Thanks for this example mod goes to Java" #optional
|
credits = "${credits}" #optional
|
||||||
authors = "${mod_author}" #optional
|
authors = "${mod_author}" #optional
|
||||||
description = '''${description}''' #mandatory (Supports multiline text)
|
description = '''${description}''' #mandatory (Supports multiline text)
|
||||||
[[dependencies.${mod_id}]] #optional
|
[[dependencies.${mod_id}]] #optional
|
||||||
modId = "forge" #mandatory
|
modId = "forge" #mandatory
|
||||||
mandatory = true #mandatory
|
mandatory = true #mandatory
|
||||||
versionRange = "${forge_version_range}" #mandatory
|
versionRange = "[${forge_version},)" #mandatory
|
||||||
ordering = "NONE" # The order that this dependency should load in relation to your mod, required to be either 'BEFORE' or 'AFTER' if the dependency is not mandatory
|
ordering = "NONE" # The order that this dependency should load in relation to your mod, required to be either 'BEFORE' or 'AFTER' if the dependency is not mandatory
|
||||||
side = "BOTH" # Side this dependency is applied on - 'BOTH', 'CLIENT' or 'SERVER'
|
side = "BOTH" # Side this dependency is applied on - 'BOTH', 'CLIENT' or 'SERVER'
|
||||||
[[dependencies.${mod_id}]]
|
[[dependencies.${mod_id}]]
|
||||||
|
|
@ -23,4 +24,4 @@ modId = "minecraft"
|
||||||
mandatory = true
|
mandatory = true
|
||||||
versionRange = "${minecraft_version_range}"
|
versionRange = "${minecraft_version_range}"
|
||||||
ordering = "NONE"
|
ordering = "NONE"
|
||||||
side = "BOTH"
|
side = "BOTH"
|
||||||
|
|
@ -1,17 +1,14 @@
|
||||||
{
|
{
|
||||||
"required": true,
|
"required": true,
|
||||||
"minVersion": "0.8",
|
"minVersion": "0.8",
|
||||||
"package": "com.example.examplemod.mixin",
|
"package": "com.example.examplemod.mixin",
|
||||||
"refmap": "${mod_id}.refmap.json",
|
"compatibilityLevel": "JAVA_18",
|
||||||
"compatibilityLevel": "JAVA_17",
|
"mixins": [],
|
||||||
"mixins": [
|
"client": [
|
||||||
],
|
"MixinTitleScreen"
|
||||||
"client": [
|
],
|
||||||
"MixinTitleScreen"
|
"server": [],
|
||||||
],
|
"injectors": {
|
||||||
"server": [
|
"defaultRequire": 1
|
||||||
],
|
}
|
||||||
"injectors": {
|
|
||||||
"defaultRequire": 1
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
@ -1,31 +1,39 @@
|
||||||
# Important Notes:
|
# Important Notes:
|
||||||
# fabric.mod.json's modid field cannot be expanded, you must change it manually.
|
|
||||||
# Every field you add must be added to the root build.gradle expandProps map.
|
# Every field you add must be added to the root build.gradle expandProps map.
|
||||||
|
|
||||||
# Project
|
# Project
|
||||||
version=1.0.0
|
version=1.0.0
|
||||||
group=com.example.examplemod
|
group=com.example.examplemod
|
||||||
|
java_version=21
|
||||||
|
|
||||||
# Common
|
# Common
|
||||||
minecraft_version=1.20
|
minecraft_version=1.21.1
|
||||||
|
|
||||||
# Forge
|
|
||||||
forge_version=46.0.12
|
|
||||||
forge_loader_version_range=[46,)
|
|
||||||
forge_version_range=[46,)
|
|
||||||
minecraft_version_range=[1.20, 1.21)
|
|
||||||
|
|
||||||
# Fabric
|
|
||||||
fabric_version=0.83.0+1.20
|
|
||||||
fabric_loader_version=0.14.21
|
|
||||||
|
|
||||||
# Mod options
|
|
||||||
mod_name=ExampleMod
|
mod_name=ExampleMod
|
||||||
mod_author=Jared
|
mod_author=Jared
|
||||||
mod_id=examplemod
|
mod_id=examplemod
|
||||||
license=C0-1.0
|
license=CC0-1.0
|
||||||
|
credits=
|
||||||
description=The description of your mod. \nAccepts multilines.
|
description=The description of your mod. \nAccepts multilines.
|
||||||
|
minecraft_version_range=[1.21.1, 1.22)
|
||||||
|
## This is the version of minecraft that the 'common' project uses, you can find a list of all versions here
|
||||||
|
## https://projects.neoforged.net/neoforged/neoform
|
||||||
|
neo_form_version=1.21.1-20240808.144430
|
||||||
|
# The version of ParchmentMC that is used, see https://parchmentmc.org/docs/getting-started#choose-a-version for new versions
|
||||||
|
parchment_minecraft=1.21
|
||||||
|
parchment_version=2024.11.10
|
||||||
|
|
||||||
|
# Fabric
|
||||||
|
fabric_version=0.109.0+1.21.1
|
||||||
|
fabric_loader_version=0.16.9
|
||||||
|
|
||||||
|
# Forge
|
||||||
|
forge_version=52.0.28
|
||||||
|
forge_loader_version_range=[52,)
|
||||||
|
|
||||||
|
# NeoForge
|
||||||
|
neoforge_version=21.1.80
|
||||||
|
neoforge_loader_version_range=[4,)
|
||||||
|
|
||||||
# Gradle
|
# Gradle
|
||||||
org.gradle.jvmargs=-Xmx3G
|
org.gradle.jvmargs=-Xmx3G
|
||||||
org.gradle.daemon=false
|
org.gradle.daemon=false
|
||||||
|
|
|
||||||
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
4
gradle/wrapper/gradle-wrapper.properties
vendored
4
gradle/wrapper/gradle-wrapper.properties
vendored
|
|
@ -1,5 +1,7 @@
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
|
||||||
|
networkTimeout=10000
|
||||||
|
validateDistributionUrl=true
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
|
|
||||||
38
gradlew
vendored
38
gradlew
vendored
|
|
@ -15,6 +15,8 @@
|
||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
#
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
#
|
#
|
||||||
|
|
@ -55,7 +57,7 @@
|
||||||
# Darwin, MinGW, and NonStop.
|
# Darwin, MinGW, and NonStop.
|
||||||
#
|
#
|
||||||
# (3) This script is generated from the Groovy template
|
# (3) This script is generated from the Groovy template
|
||||||
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
||||||
# within the Gradle project.
|
# within the Gradle project.
|
||||||
#
|
#
|
||||||
# You can find Gradle at https://github.com/gradle/gradle/.
|
# You can find Gradle at https://github.com/gradle/gradle/.
|
||||||
|
|
@ -80,13 +82,12 @@ do
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
|
# This is normally unused
|
||||||
|
# shellcheck disable=SC2034
|
||||||
APP_NAME="Gradle"
|
|
||||||
APP_BASE_NAME=${0##*/}
|
APP_BASE_NAME=${0##*/}
|
||||||
|
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
|
||||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
|
||||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
' "$PWD" ) || exit
|
||||||
|
|
||||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||||
MAX_FD=maximum
|
MAX_FD=maximum
|
||||||
|
|
@ -133,22 +134,29 @@ location of your Java installation."
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
JAVACMD=java
|
JAVACMD=java
|
||||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
if ! command -v java >/dev/null 2>&1
|
||||||
|
then
|
||||||
|
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||||
|
|
||||||
Please set the JAVA_HOME variable in your environment to match the
|
Please set the JAVA_HOME variable in your environment to match the
|
||||||
location of your Java installation."
|
location of your Java installation."
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Increase the maximum file descriptors if we can.
|
# Increase the maximum file descriptors if we can.
|
||||||
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
|
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
|
||||||
case $MAX_FD in #(
|
case $MAX_FD in #(
|
||||||
max*)
|
max*)
|
||||||
|
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
|
||||||
|
# shellcheck disable=SC2039,SC3045
|
||||||
MAX_FD=$( ulimit -H -n ) ||
|
MAX_FD=$( ulimit -H -n ) ||
|
||||||
warn "Could not query maximum file descriptor limit"
|
warn "Could not query maximum file descriptor limit"
|
||||||
esac
|
esac
|
||||||
case $MAX_FD in #(
|
case $MAX_FD in #(
|
||||||
'' | soft) :;; #(
|
'' | soft) :;; #(
|
||||||
*)
|
*)
|
||||||
|
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
|
||||||
|
# shellcheck disable=SC2039,SC3045
|
||||||
ulimit -n "$MAX_FD" ||
|
ulimit -n "$MAX_FD" ||
|
||||||
warn "Could not set maximum file descriptor limit to $MAX_FD"
|
warn "Could not set maximum file descriptor limit to $MAX_FD"
|
||||||
esac
|
esac
|
||||||
|
|
@ -193,11 +201,15 @@ if "$cygwin" || "$msys" ; then
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Collect all arguments for the java command;
|
|
||||||
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
|
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||||
# shell script including quotes and variable substitutions, so put them in
|
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||||
# double quotes to make sure that they get re-expanded; and
|
|
||||||
# * put everything else in single quotes, so that it's not re-expanded.
|
# Collect all arguments for the java command:
|
||||||
|
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
|
||||||
|
# and any embedded shellness will be escaped.
|
||||||
|
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
|
||||||
|
# treated as '${Hostname}' itself on the command line.
|
||||||
|
|
||||||
set -- \
|
set -- \
|
||||||
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
||||||
|
|
|
||||||
23
gradlew.bat
vendored
23
gradlew.bat
vendored
|
|
@ -13,6 +13,8 @@
|
||||||
@rem See the License for the specific language governing permissions and
|
@rem See the License for the specific language governing permissions and
|
||||||
@rem limitations under the License.
|
@rem limitations under the License.
|
||||||
@rem
|
@rem
|
||||||
|
@rem SPDX-License-Identifier: Apache-2.0
|
||||||
|
@rem
|
||||||
|
|
||||||
@if "%DEBUG%"=="" @echo off
|
@if "%DEBUG%"=="" @echo off
|
||||||
@rem ##########################################################################
|
@rem ##########################################################################
|
||||||
|
|
@ -26,6 +28,7 @@ if "%OS%"=="Windows_NT" setlocal
|
||||||
|
|
||||||
set DIRNAME=%~dp0
|
set DIRNAME=%~dp0
|
||||||
if "%DIRNAME%"=="" set DIRNAME=.
|
if "%DIRNAME%"=="" set DIRNAME=.
|
||||||
|
@rem This is normally unused
|
||||||
set APP_BASE_NAME=%~n0
|
set APP_BASE_NAME=%~n0
|
||||||
set APP_HOME=%DIRNAME%
|
set APP_HOME=%DIRNAME%
|
||||||
|
|
||||||
|
|
@ -42,11 +45,11 @@ set JAVA_EXE=java.exe
|
||||||
%JAVA_EXE% -version >NUL 2>&1
|
%JAVA_EXE% -version >NUL 2>&1
|
||||||
if %ERRORLEVEL% equ 0 goto execute
|
if %ERRORLEVEL% equ 0 goto execute
|
||||||
|
|
||||||
echo.
|
echo. 1>&2
|
||||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
|
||||||
echo.
|
echo. 1>&2
|
||||||
echo Please set the JAVA_HOME variable in your environment to match the
|
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||||
echo location of your Java installation.
|
echo location of your Java installation. 1>&2
|
||||||
|
|
||||||
goto fail
|
goto fail
|
||||||
|
|
||||||
|
|
@ -56,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||||
|
|
||||||
if exist "%JAVA_EXE%" goto execute
|
if exist "%JAVA_EXE%" goto execute
|
||||||
|
|
||||||
echo.
|
echo. 1>&2
|
||||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
|
||||||
echo.
|
echo. 1>&2
|
||||||
echo Please set the JAVA_HOME variable in your environment to match the
|
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||||
echo location of your Java installation.
|
echo location of your Java installation. 1>&2
|
||||||
|
|
||||||
goto fail
|
goto fail
|
||||||
|
|
||||||
|
|
|
||||||
112
neoforge/build.gradle
Normal file
112
neoforge/build.gradle
Normal file
|
|
@ -0,0 +1,112 @@
|
||||||
|
plugins {
|
||||||
|
id 'multiloader-loader'
|
||||||
|
id 'net.neoforged.moddev'
|
||||||
|
}
|
||||||
|
def commonResources = project(':common').file('src/main/resources/').getAbsolutePath()
|
||||||
|
def neoforgeResources = file('src/main/resources/').getAbsolutePath()
|
||||||
|
def neoforgeBuildResources = file('build/resources/main/').getAbsolutePath()
|
||||||
|
def commonBuildResources = project(':common').file('build/resources/main/').getAbsolutePath()
|
||||||
|
def generatedOutput = project(':common').file('src/generated/resources/').getAbsolutePath()
|
||||||
|
neoForge {
|
||||||
|
version = neoforge_version
|
||||||
|
// Automatically enable neoforge AccessTransformers if the file exists
|
||||||
|
def at = project(':common').file('src/main/resources/META-INF/accesstransformer.cfg')
|
||||||
|
if (at.exists()) {
|
||||||
|
accessTransformers.from(at.absolutePath)
|
||||||
|
}
|
||||||
|
parchment {
|
||||||
|
minecraftVersion = parchment_minecraft
|
||||||
|
mappingsVersion = parchment_version
|
||||||
|
}
|
||||||
|
runs {
|
||||||
|
configureEach {
|
||||||
|
systemProperty('neoforge.enabledGameTestNamespaces', mod_id)
|
||||||
|
ideName = "NeoForge ${it.name.capitalize()} (${project.path})" // Unify the run config names with fabric
|
||||||
|
}
|
||||||
|
client {
|
||||||
|
client()
|
||||||
|
programArguments.addAll(
|
||||||
|
'--mod', project.mod_id,
|
||||||
|
'--all',
|
||||||
|
'--existing', neoforgeResources,
|
||||||
|
'--existing', commonResources,
|
||||||
|
'--existing', neoforgeBuildResources,
|
||||||
|
'--existing', commonBuildResources
|
||||||
|
)
|
||||||
|
}
|
||||||
|
data {
|
||||||
|
data()
|
||||||
|
|
||||||
|
// DataGen can be run by - "./gradlew :neoforge:runData" in Terminal.
|
||||||
|
// Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources.
|
||||||
|
programArguments.addAll(
|
||||||
|
'--mod', project.mod_id,
|
||||||
|
'--all',
|
||||||
|
'--output', generatedOutput,
|
||||||
|
'--existing', neoforgeResources,
|
||||||
|
'--existing', commonResources,
|
||||||
|
'--existing', neoforgeBuildResources,
|
||||||
|
'--existing', commonBuildResources
|
||||||
|
)
|
||||||
|
}
|
||||||
|
server {
|
||||||
|
server()
|
||||||
|
programArguments.addAll(
|
||||||
|
'--mod', project.mod_id,
|
||||||
|
'--all',
|
||||||
|
'--existing', neoforgeResources,
|
||||||
|
'--existing', commonResources,
|
||||||
|
'--existing', neoforgeBuildResources,
|
||||||
|
'--existing', commonBuildResources
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mods {
|
||||||
|
"${mod_id}" {
|
||||||
|
sourceSet sourceSets.main
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 配置sourceJar任务
|
||||||
|
tasks.named('sourcesJar', Jar) {
|
||||||
|
dependsOn classes
|
||||||
|
dependsOn project(':common').tasks.named('sourcesJar') // 显式依赖common的source
|
||||||
|
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
||||||
|
archiveClassifier.set('sources')
|
||||||
|
from sourceSets.main.allSource
|
||||||
|
from project(':common').sourceSets.main.allSource
|
||||||
|
}
|
||||||
|
|
||||||
|
// 配置javadoc任务
|
||||||
|
tasks.named('javadoc', Javadoc) {
|
||||||
|
source project(':common').sourceSets.main.allJava
|
||||||
|
source sourceSets.main.allJava
|
||||||
|
classpath = configurations.compileClasspath
|
||||||
|
classpath += project(':common').sourceSets.main.compileClasspath
|
||||||
|
options.encoding = 'UTF-8'
|
||||||
|
options.charSet = 'UTF-8'
|
||||||
|
options.links("https://docs.oracle.com/en/java/javase/21/docs/api/")
|
||||||
|
options.memberLevel = JavadocMemberLevel.PUBLIC
|
||||||
|
options.addBooleanOption('Xdoclint:none', true)
|
||||||
|
options.addStringOption('doctitle', "${mod_id} ${minecraft_version} ${version} Javadoc")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 配置javadocJar任务
|
||||||
|
tasks.named('javadocJar', Jar) {
|
||||||
|
dependsOn javadoc
|
||||||
|
dependsOn project(':common').tasks.named('javadoc') // 显式依赖common的javadoc
|
||||||
|
|
||||||
|
archiveClassifier.set('javadoc')
|
||||||
|
from javadoc.destinationDir
|
||||||
|
from project(':common').javadoc.destinationDir
|
||||||
|
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
||||||
|
}
|
||||||
|
|
||||||
|
// 确保build任务包含所有需要的jar
|
||||||
|
tasks.named('build') {
|
||||||
|
dependsOn tasks.named('sourcesJar')
|
||||||
|
dependsOn tasks.named('javadocJar')
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceSets.main.resources.srcDir project(':common').file('src/generated/resources')
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
package com.example.examplemod;
|
||||||
|
|
||||||
|
|
||||||
|
import net.neoforged.bus.api.IEventBus;
|
||||||
|
import net.neoforged.fml.common.Mod;
|
||||||
|
|
||||||
|
@Mod(Constants.MOD_ID)
|
||||||
|
public class ExampleMod {
|
||||||
|
|
||||||
|
public ExampleMod(IEventBus eventBus) {
|
||||||
|
|
||||||
|
// This method is invoked by the NeoForge mod loader when it is ready
|
||||||
|
// to load your mod. You can access NeoForge and Common code in this
|
||||||
|
// project.
|
||||||
|
|
||||||
|
// Use NeoForge to bootstrap the Common mod.
|
||||||
|
Constants.LOG.info("Hello NeoForge world!");
|
||||||
|
CommonClass.init();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
package com.example.examplemod.mixin;
|
||||||
|
|
||||||
|
import com.example.examplemod.Constants;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.gui.screens.TitleScreen;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
|
@Mixin(TitleScreen.class)
|
||||||
|
public class MixinTitleScreen {
|
||||||
|
|
||||||
|
@Inject(at = @At("HEAD"), method = "init()V")
|
||||||
|
private void init(CallbackInfo info) {
|
||||||
|
|
||||||
|
Constants.LOG.info("This line is printed by an example mod mixin from NeoForge!");
|
||||||
|
Constants.LOG.info("MC Version: {}", Minecraft.getInstance().getVersionType());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
package com.example.examplemod.platform;
|
||||||
|
|
||||||
|
import com.example.examplemod.platform.services.IPlatformHelper;
|
||||||
|
import net.neoforged.fml.ModList;
|
||||||
|
import net.neoforged.fml.loading.FMLLoader;
|
||||||
|
|
||||||
|
public class NeoForgePlatformHelper implements IPlatformHelper {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getPlatformName() {
|
||||||
|
|
||||||
|
return "NeoForge";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isModLoaded(String modId) {
|
||||||
|
|
||||||
|
return ModList.get().isLoaded(modId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isDevelopmentEnvironment() {
|
||||||
|
|
||||||
|
return !FMLLoader.isProduction();
|
||||||
|
}
|
||||||
|
}
|
||||||
36
neoforge/src/main/resources/META-INF/neoforge.mods.toml
Normal file
36
neoforge/src/main/resources/META-INF/neoforge.mods.toml
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
modLoader = "javafml" #mandatory
|
||||||
|
loaderVersion = "${neoforge_loader_version_range}" #mandatory
|
||||||
|
license = "${license}" # Review your options at https://choosealicense.com/.
|
||||||
|
#issueTrackerURL="https://change.me.to.your.issue.tracker.example.invalid/" #optional
|
||||||
|
[[mods]] #mandatory
|
||||||
|
modId = "${mod_id}" #mandatory
|
||||||
|
version = "${version}" #mandatory
|
||||||
|
displayName = "${mod_name}" #mandatory
|
||||||
|
#updateJSONURL="https://change.me.example.invalid/updates.json" #optional (see https://docs.neoforged.net/docs/misc/updatechecker/)
|
||||||
|
#displayURL="https://change.me.to.your.mods.homepage.example.invalid/" #optional (displayed in the mod UI)
|
||||||
|
logoFile="${mod_id}.png" #optional
|
||||||
|
credits="${credits}" #optional
|
||||||
|
authors = "${mod_author}" #optional
|
||||||
|
description = '''${description}''' #mandatory (Supports multiline text)
|
||||||
|
[[mixins]]
|
||||||
|
config = "${mod_id}.mixins.json"
|
||||||
|
[[mixins]]
|
||||||
|
config = "${mod_id}.neoforge.mixins.json"
|
||||||
|
[[dependencies.${mod_id}]] #optional
|
||||||
|
modId = "neoforge" #mandatory
|
||||||
|
type="required" #mandatory (Can be one of "required", "optional", "incompatible" or "discouraged")
|
||||||
|
versionRange = "[${neoforge_version},)" #mandatory
|
||||||
|
ordering = "NONE" # The order that this dependency should load in relation to your mod, required to be either 'BEFORE' or 'AFTER' if the dependency is not mandatory
|
||||||
|
side = "BOTH" # Side this dependency is applied on - 'BOTH', 'CLIENT' or 'SERVER'
|
||||||
|
[[dependencies.${mod_id}]]
|
||||||
|
modId = "minecraft"
|
||||||
|
type="required" #mandatory (Can be one of "required", "optional", "incompatible" or "discouraged")
|
||||||
|
versionRange = "${minecraft_version_range}"
|
||||||
|
ordering = "NONE"
|
||||||
|
side = "BOTH"
|
||||||
|
|
||||||
|
# Features are specific properties of the game environment, that you may want to declare you require. This example declares
|
||||||
|
# that your mod requires GL version 3.2 or higher. Other features will be added. They are side aware so declaring this won't
|
||||||
|
# stop your mod loading on the server for example.
|
||||||
|
#[features.${mod_id}]
|
||||||
|
#openGLVersion="[3.2,)"
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
com.example.examplemod.platform.NeoForgePlatformHelper
|
||||||
14
neoforge/src/main/resources/examplemod.neoforge.mixins.json
Normal file
14
neoforge/src/main/resources/examplemod.neoforge.mixins.json
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"required": true,
|
||||||
|
"minVersion": "0.8",
|
||||||
|
"package": "com.example.examplemod.mixin",
|
||||||
|
"compatibilityLevel": "JAVA_21",
|
||||||
|
"mixins": [],
|
||||||
|
"client": [
|
||||||
|
"MixinTitleScreen"
|
||||||
|
],
|
||||||
|
"server": [],
|
||||||
|
"injectors": {
|
||||||
|
"defaultRequire": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
16
node_modules/.bin/conventional-commits-parser
generated
vendored
Normal file
16
node_modules/.bin/conventional-commits-parser
generated
vendored
Normal 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/../conventional-commits-parser/dist/cli/index.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../conventional-commits-parser/dist/cli/index.js" "$@"
|
||||||
|
fi
|
||||||
17
node_modules/.bin/conventional-commits-parser.cmd
generated
vendored
Normal file
17
node_modules/.bin/conventional-commits-parser.cmd
generated
vendored
Normal 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%\..\conventional-commits-parser\dist\cli\index.js" %*
|
||||||
28
node_modules/.bin/conventional-commits-parser.ps1
generated
vendored
Normal file
28
node_modules/.bin/conventional-commits-parser.ps1
generated
vendored
Normal 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/../conventional-commits-parser/dist/cli/index.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../conventional-commits-parser/dist/cli/index.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../conventional-commits-parser/dist/cli/index.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../conventional-commits-parser/dist/cli/index.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
16
node_modules/.bin/jiti
generated
vendored
Normal file
16
node_modules/.bin/jiti
generated
vendored
Normal 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
17
node_modules/.bin/jiti.cmd
generated
vendored
Normal 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
28
node_modules/.bin/jiti.ps1
generated
vendored
Normal 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
|
||||||
2058
node_modules/.package-lock.json
generated
vendored
Normal file
2058
node_modules/.package-lock.json
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
22
node_modules/@babel/code-frame/LICENSE
generated
vendored
Normal file
22
node_modules/@babel/code-frame/LICENSE
generated
vendored
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2014-present Sebastian McKenzie and other contributors
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
19
node_modules/@babel/code-frame/README.md
generated
vendored
Normal file
19
node_modules/@babel/code-frame/README.md
generated
vendored
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
# @babel/code-frame
|
||||||
|
|
||||||
|
> Generate errors that contain a code frame that point to source locations.
|
||||||
|
|
||||||
|
See our website [@babel/code-frame](https://babeljs.io/docs/babel-code-frame) for more information.
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
Using npm:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm install --save-dev @babel/code-frame
|
||||||
|
```
|
||||||
|
|
||||||
|
or using yarn:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
yarn add @babel/code-frame --dev
|
||||||
|
```
|
||||||
217
node_modules/@babel/code-frame/lib/index.js
generated
vendored
Normal file
217
node_modules/@babel/code-frame/lib/index.js
generated
vendored
Normal file
|
|
@ -0,0 +1,217 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
Object.defineProperty(exports, '__esModule', { value: true });
|
||||||
|
|
||||||
|
var picocolors = require('picocolors');
|
||||||
|
var jsTokens = require('js-tokens');
|
||||||
|
var helperValidatorIdentifier = require('@babel/helper-validator-identifier');
|
||||||
|
|
||||||
|
function isColorSupported() {
|
||||||
|
return (typeof process === "object" && (process.env.FORCE_COLOR === "0" || process.env.FORCE_COLOR === "false") ? false : picocolors.isColorSupported
|
||||||
|
);
|
||||||
|
}
|
||||||
|
const compose = (f, g) => v => f(g(v));
|
||||||
|
function buildDefs(colors) {
|
||||||
|
return {
|
||||||
|
keyword: colors.cyan,
|
||||||
|
capitalized: colors.yellow,
|
||||||
|
jsxIdentifier: colors.yellow,
|
||||||
|
punctuator: colors.yellow,
|
||||||
|
number: colors.magenta,
|
||||||
|
string: colors.green,
|
||||||
|
regex: colors.magenta,
|
||||||
|
comment: colors.gray,
|
||||||
|
invalid: compose(compose(colors.white, colors.bgRed), colors.bold),
|
||||||
|
gutter: colors.gray,
|
||||||
|
marker: compose(colors.red, colors.bold),
|
||||||
|
message: compose(colors.red, colors.bold),
|
||||||
|
reset: colors.reset
|
||||||
|
};
|
||||||
|
}
|
||||||
|
const defsOn = buildDefs(picocolors.createColors(true));
|
||||||
|
const defsOff = buildDefs(picocolors.createColors(false));
|
||||||
|
function getDefs(enabled) {
|
||||||
|
return enabled ? defsOn : defsOff;
|
||||||
|
}
|
||||||
|
|
||||||
|
const sometimesKeywords = new Set(["as", "async", "from", "get", "of", "set"]);
|
||||||
|
const NEWLINE$1 = /\r\n|[\n\r\u2028\u2029]/;
|
||||||
|
const BRACKET = /^[()[\]{}]$/;
|
||||||
|
let tokenize;
|
||||||
|
const JSX_TAG = /^[a-z][\w-]*$/i;
|
||||||
|
const getTokenType = function (token, offset, text) {
|
||||||
|
if (token.type === "name") {
|
||||||
|
const tokenValue = token.value;
|
||||||
|
if (helperValidatorIdentifier.isKeyword(tokenValue) || helperValidatorIdentifier.isStrictReservedWord(tokenValue, true) || sometimesKeywords.has(tokenValue)) {
|
||||||
|
return "keyword";
|
||||||
|
}
|
||||||
|
if (JSX_TAG.test(tokenValue) && (text[offset - 1] === "<" || text.slice(offset - 2, offset) === "</")) {
|
||||||
|
return "jsxIdentifier";
|
||||||
|
}
|
||||||
|
const firstChar = String.fromCodePoint(tokenValue.codePointAt(0));
|
||||||
|
if (firstChar !== firstChar.toLowerCase()) {
|
||||||
|
return "capitalized";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (token.type === "punctuator" && BRACKET.test(token.value)) {
|
||||||
|
return "bracket";
|
||||||
|
}
|
||||||
|
if (token.type === "invalid" && (token.value === "@" || token.value === "#")) {
|
||||||
|
return "punctuator";
|
||||||
|
}
|
||||||
|
return token.type;
|
||||||
|
};
|
||||||
|
tokenize = function* (text) {
|
||||||
|
let match;
|
||||||
|
while (match = jsTokens.default.exec(text)) {
|
||||||
|
const token = jsTokens.matchToToken(match);
|
||||||
|
yield {
|
||||||
|
type: getTokenType(token, match.index, text),
|
||||||
|
value: token.value
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function highlight(text) {
|
||||||
|
if (text === "") return "";
|
||||||
|
const defs = getDefs(true);
|
||||||
|
let highlighted = "";
|
||||||
|
for (const {
|
||||||
|
type,
|
||||||
|
value
|
||||||
|
} of tokenize(text)) {
|
||||||
|
if (type in defs) {
|
||||||
|
highlighted += value.split(NEWLINE$1).map(str => defs[type](str)).join("\n");
|
||||||
|
} else {
|
||||||
|
highlighted += value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return highlighted;
|
||||||
|
}
|
||||||
|
|
||||||
|
let deprecationWarningShown = false;
|
||||||
|
const NEWLINE = /\r\n|[\n\r\u2028\u2029]/;
|
||||||
|
function getMarkerLines(loc, source, opts, startLineBaseZero) {
|
||||||
|
const startLoc = Object.assign({
|
||||||
|
column: 0,
|
||||||
|
line: -1
|
||||||
|
}, loc.start);
|
||||||
|
const endLoc = Object.assign({}, startLoc, loc.end);
|
||||||
|
const {
|
||||||
|
linesAbove = 2,
|
||||||
|
linesBelow = 3
|
||||||
|
} = opts || {};
|
||||||
|
const startLine = startLoc.line - startLineBaseZero;
|
||||||
|
const startColumn = startLoc.column;
|
||||||
|
const endLine = endLoc.line - startLineBaseZero;
|
||||||
|
const endColumn = endLoc.column;
|
||||||
|
let start = Math.max(startLine - (linesAbove + 1), 0);
|
||||||
|
let end = Math.min(source.length, endLine + linesBelow);
|
||||||
|
if (startLine === -1) {
|
||||||
|
start = 0;
|
||||||
|
}
|
||||||
|
if (endLine === -1) {
|
||||||
|
end = source.length;
|
||||||
|
}
|
||||||
|
const lineDiff = endLine - startLine;
|
||||||
|
const markerLines = {};
|
||||||
|
if (lineDiff) {
|
||||||
|
for (let i = 0; i <= lineDiff; i++) {
|
||||||
|
const lineNumber = i + startLine;
|
||||||
|
if (!startColumn) {
|
||||||
|
markerLines[lineNumber] = true;
|
||||||
|
} else if (i === 0) {
|
||||||
|
const sourceLength = source[lineNumber - 1].length;
|
||||||
|
markerLines[lineNumber] = [startColumn, sourceLength - startColumn + 1];
|
||||||
|
} else if (i === lineDiff) {
|
||||||
|
markerLines[lineNumber] = [0, endColumn];
|
||||||
|
} else {
|
||||||
|
const sourceLength = source[lineNumber - i].length;
|
||||||
|
markerLines[lineNumber] = [0, sourceLength];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (startColumn === endColumn) {
|
||||||
|
if (startColumn) {
|
||||||
|
markerLines[startLine] = [startColumn, 0];
|
||||||
|
} else {
|
||||||
|
markerLines[startLine] = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
markerLines[startLine] = [startColumn, endColumn - startColumn];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
start,
|
||||||
|
end,
|
||||||
|
markerLines
|
||||||
|
};
|
||||||
|
}
|
||||||
|
function codeFrameColumns(rawLines, loc, opts = {}) {
|
||||||
|
const shouldHighlight = opts.forceColor || isColorSupported() && opts.highlightCode;
|
||||||
|
const startLineBaseZero = (opts.startLine || 1) - 1;
|
||||||
|
const defs = getDefs(shouldHighlight);
|
||||||
|
const lines = rawLines.split(NEWLINE);
|
||||||
|
const {
|
||||||
|
start,
|
||||||
|
end,
|
||||||
|
markerLines
|
||||||
|
} = getMarkerLines(loc, lines, opts, startLineBaseZero);
|
||||||
|
const hasColumns = loc.start && typeof loc.start.column === "number";
|
||||||
|
const numberMaxWidth = String(end + startLineBaseZero).length;
|
||||||
|
const highlightedLines = shouldHighlight ? highlight(rawLines) : rawLines;
|
||||||
|
let frame = highlightedLines.split(NEWLINE, end).slice(start, end).map((line, index) => {
|
||||||
|
const number = start + 1 + index;
|
||||||
|
const paddedNumber = ` ${number + startLineBaseZero}`.slice(-numberMaxWidth);
|
||||||
|
const gutter = ` ${paddedNumber} |`;
|
||||||
|
const hasMarker = markerLines[number];
|
||||||
|
const lastMarkerLine = !markerLines[number + 1];
|
||||||
|
if (hasMarker) {
|
||||||
|
let markerLine = "";
|
||||||
|
if (Array.isArray(hasMarker)) {
|
||||||
|
const markerSpacing = line.slice(0, Math.max(hasMarker[0] - 1, 0)).replace(/[^\t]/g, " ");
|
||||||
|
const numberOfMarkers = hasMarker[1] || 1;
|
||||||
|
markerLine = ["\n ", defs.gutter(gutter.replace(/\d/g, " ")), " ", markerSpacing, defs.marker("^").repeat(numberOfMarkers)].join("");
|
||||||
|
if (lastMarkerLine && opts.message) {
|
||||||
|
markerLine += " " + defs.message(opts.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return [defs.marker(">"), defs.gutter(gutter), line.length > 0 ? ` ${line}` : "", markerLine].join("");
|
||||||
|
} else {
|
||||||
|
return ` ${defs.gutter(gutter)}${line.length > 0 ? ` ${line}` : ""}`;
|
||||||
|
}
|
||||||
|
}).join("\n");
|
||||||
|
if (opts.message && !hasColumns) {
|
||||||
|
frame = `${" ".repeat(numberMaxWidth + 1)}${opts.message}\n${frame}`;
|
||||||
|
}
|
||||||
|
if (shouldHighlight) {
|
||||||
|
return defs.reset(frame);
|
||||||
|
} else {
|
||||||
|
return frame;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function index (rawLines, lineNumber, colNumber, opts = {}) {
|
||||||
|
if (!deprecationWarningShown) {
|
||||||
|
deprecationWarningShown = true;
|
||||||
|
const message = "Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`.";
|
||||||
|
if (process.emitWarning) {
|
||||||
|
process.emitWarning(message, "DeprecationWarning");
|
||||||
|
} else {
|
||||||
|
const deprecationError = new Error(message);
|
||||||
|
deprecationError.name = "DeprecationWarning";
|
||||||
|
console.warn(new Error(message));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
colNumber = Math.max(colNumber, 0);
|
||||||
|
const location = {
|
||||||
|
start: {
|
||||||
|
column: colNumber,
|
||||||
|
line: lineNumber
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return codeFrameColumns(rawLines, location, opts);
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.codeFrameColumns = codeFrameColumns;
|
||||||
|
exports.default = index;
|
||||||
|
exports.highlight = highlight;
|
||||||
|
//# sourceMappingURL=index.js.map
|
||||||
1
node_modules/@babel/code-frame/lib/index.js.map
generated
vendored
Normal file
1
node_modules/@babel/code-frame/lib/index.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
32
node_modules/@babel/code-frame/package.json
generated
vendored
Normal file
32
node_modules/@babel/code-frame/package.json
generated
vendored
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
{
|
||||||
|
"name": "@babel/code-frame",
|
||||||
|
"version": "7.29.0",
|
||||||
|
"description": "Generate errors that contain a code frame that point to source locations.",
|
||||||
|
"author": "The Babel Team (https://babel.dev/team)",
|
||||||
|
"homepage": "https://babel.dev/docs/en/next/babel-code-frame",
|
||||||
|
"bugs": "https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen",
|
||||||
|
"license": "MIT",
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/babel/babel.git",
|
||||||
|
"directory": "packages/babel-code-frame"
|
||||||
|
},
|
||||||
|
"main": "./lib/index.js",
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/helper-validator-identifier": "^7.28.5",
|
||||||
|
"js-tokens": "^4.0.0",
|
||||||
|
"picocolors": "^1.1.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"charcodes": "^0.2.0",
|
||||||
|
"import-meta-resolve": "^4.1.0",
|
||||||
|
"strip-ansi": "^4.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.9.0"
|
||||||
|
},
|
||||||
|
"type": "commonjs"
|
||||||
|
}
|
||||||
22
node_modules/@babel/helper-validator-identifier/LICENSE
generated
vendored
Normal file
22
node_modules/@babel/helper-validator-identifier/LICENSE
generated
vendored
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2014-present Sebastian McKenzie and other contributors
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
19
node_modules/@babel/helper-validator-identifier/README.md
generated
vendored
Normal file
19
node_modules/@babel/helper-validator-identifier/README.md
generated
vendored
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
# @babel/helper-validator-identifier
|
||||||
|
|
||||||
|
> Validate identifier/keywords name
|
||||||
|
|
||||||
|
See our website [@babel/helper-validator-identifier](https://babeljs.io/docs/babel-helper-validator-identifier) for more information.
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
Using npm:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm install --save @babel/helper-validator-identifier
|
||||||
|
```
|
||||||
|
|
||||||
|
or using yarn:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
yarn add @babel/helper-validator-identifier
|
||||||
|
```
|
||||||
70
node_modules/@babel/helper-validator-identifier/lib/identifier.js
generated
vendored
Normal file
70
node_modules/@babel/helper-validator-identifier/lib/identifier.js
generated
vendored
Normal file
|
|
@ -0,0 +1,70 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.isIdentifierChar = isIdentifierChar;
|
||||||
|
exports.isIdentifierName = isIdentifierName;
|
||||||
|
exports.isIdentifierStart = isIdentifierStart;
|
||||||
|
let nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u0870-\u0887\u0889-\u088f\u08a0-\u08c9\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c5c\u0c5d\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cdc-\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u1711\u171f-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4c\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c8a\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7dc\ua7f1-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc";
|
||||||
|
let nonASCIIidentifierChars = "\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0897-\u089f\u08ca-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0cf3\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ece\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u180f-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf-\u1add\u1ae0-\u1aeb\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1dff\u200c\u200d\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\u30fb\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f\uff65";
|
||||||
|
const nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");
|
||||||
|
const nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");
|
||||||
|
nonASCIIidentifierStartChars = nonASCIIidentifierChars = null;
|
||||||
|
const astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 4, 51, 13, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 7, 25, 39, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 39, 27, 10, 22, 251, 41, 7, 1, 17, 5, 57, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 31, 9, 2, 0, 3, 0, 2, 37, 2, 0, 26, 0, 2, 0, 45, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 200, 32, 32, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 24, 43, 261, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 26, 3994, 6, 582, 6842, 29, 1763, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 433, 44, 212, 63, 33, 24, 3, 24, 45, 74, 6, 0, 67, 12, 65, 1, 2, 0, 15, 4, 10, 7381, 42, 31, 98, 114, 8702, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 229, 29, 3, 0, 208, 30, 2, 2, 2, 1, 2, 6, 3, 4, 10, 1, 225, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4381, 3, 5773, 3, 7472, 16, 621, 2467, 541, 1507, 4938, 6, 8489];
|
||||||
|
const astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 7, 9, 32, 4, 318, 1, 78, 5, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 68, 8, 2, 0, 3, 0, 2, 3, 2, 4, 2, 0, 15, 1, 83, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 7, 19, 58, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 199, 7, 137, 9, 54, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 55, 9, 266, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 10, 5350, 0, 7, 14, 11465, 27, 2343, 9, 87, 9, 39, 4, 60, 6, 26, 9, 535, 9, 470, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4178, 9, 519, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 245, 1, 2, 9, 233, 0, 3, 0, 8, 1, 6, 0, 475, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];
|
||||||
|
function isInAstralSet(code, set) {
|
||||||
|
let pos = 0x10000;
|
||||||
|
for (let i = 0, length = set.length; i < length; i += 2) {
|
||||||
|
pos += set[i];
|
||||||
|
if (pos > code) return false;
|
||||||
|
pos += set[i + 1];
|
||||||
|
if (pos >= code) return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
function isIdentifierStart(code) {
|
||||||
|
if (code < 65) return code === 36;
|
||||||
|
if (code <= 90) return true;
|
||||||
|
if (code < 97) return code === 95;
|
||||||
|
if (code <= 122) return true;
|
||||||
|
if (code <= 0xffff) {
|
||||||
|
return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));
|
||||||
|
}
|
||||||
|
return isInAstralSet(code, astralIdentifierStartCodes);
|
||||||
|
}
|
||||||
|
function isIdentifierChar(code) {
|
||||||
|
if (code < 48) return code === 36;
|
||||||
|
if (code < 58) return true;
|
||||||
|
if (code < 65) return false;
|
||||||
|
if (code <= 90) return true;
|
||||||
|
if (code < 97) return code === 95;
|
||||||
|
if (code <= 122) return true;
|
||||||
|
if (code <= 0xffff) {
|
||||||
|
return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));
|
||||||
|
}
|
||||||
|
return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes);
|
||||||
|
}
|
||||||
|
function isIdentifierName(name) {
|
||||||
|
let isFirst = true;
|
||||||
|
for (let i = 0; i < name.length; i++) {
|
||||||
|
let cp = name.charCodeAt(i);
|
||||||
|
if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) {
|
||||||
|
const trail = name.charCodeAt(++i);
|
||||||
|
if ((trail & 0xfc00) === 0xdc00) {
|
||||||
|
cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isFirst) {
|
||||||
|
isFirst = false;
|
||||||
|
if (!isIdentifierStart(cp)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!isIdentifierChar(cp)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return !isFirst;
|
||||||
|
}
|
||||||
|
|
||||||
|
//# sourceMappingURL=identifier.js.map
|
||||||
1
node_modules/@babel/helper-validator-identifier/lib/identifier.js.map
generated
vendored
Normal file
1
node_modules/@babel/helper-validator-identifier/lib/identifier.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
57
node_modules/@babel/helper-validator-identifier/lib/index.js
generated
vendored
Normal file
57
node_modules/@babel/helper-validator-identifier/lib/index.js
generated
vendored
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isIdentifierChar", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _identifier.isIdentifierChar;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isIdentifierName", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _identifier.isIdentifierName;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isIdentifierStart", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _identifier.isIdentifierStart;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isKeyword", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _keyword.isKeyword;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isReservedWord", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _keyword.isReservedWord;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isStrictBindOnlyReservedWord", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _keyword.isStrictBindOnlyReservedWord;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isStrictBindReservedWord", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _keyword.isStrictBindReservedWord;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isStrictReservedWord", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _keyword.isStrictReservedWord;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
var _identifier = require("./identifier.js");
|
||||||
|
var _keyword = require("./keyword.js");
|
||||||
|
|
||||||
|
//# sourceMappingURL=index.js.map
|
||||||
1
node_modules/@babel/helper-validator-identifier/lib/index.js.map
generated
vendored
Normal file
1
node_modules/@babel/helper-validator-identifier/lib/index.js.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"names":["_identifier","require","_keyword"],"sources":["../src/index.ts"],"sourcesContent":["export {\n isIdentifierName,\n isIdentifierChar,\n isIdentifierStart,\n} from \"./identifier.ts\";\nexport {\n isReservedWord,\n isStrictBindOnlyReservedWord,\n isStrictBindReservedWord,\n isStrictReservedWord,\n isKeyword,\n} from \"./keyword.ts\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAKA,IAAAC,QAAA,GAAAD,OAAA","ignoreList":[]}
|
||||||
35
node_modules/@babel/helper-validator-identifier/lib/keyword.js
generated
vendored
Normal file
35
node_modules/@babel/helper-validator-identifier/lib/keyword.js
generated
vendored
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.isKeyword = isKeyword;
|
||||||
|
exports.isReservedWord = isReservedWord;
|
||||||
|
exports.isStrictBindOnlyReservedWord = isStrictBindOnlyReservedWord;
|
||||||
|
exports.isStrictBindReservedWord = isStrictBindReservedWord;
|
||||||
|
exports.isStrictReservedWord = isStrictReservedWord;
|
||||||
|
const reservedWords = {
|
||||||
|
keyword: ["break", "case", "catch", "continue", "debugger", "default", "do", "else", "finally", "for", "function", "if", "return", "switch", "throw", "try", "var", "const", "while", "with", "new", "this", "super", "class", "extends", "export", "import", "null", "true", "false", "in", "instanceof", "typeof", "void", "delete"],
|
||||||
|
strict: ["implements", "interface", "let", "package", "private", "protected", "public", "static", "yield"],
|
||||||
|
strictBind: ["eval", "arguments"]
|
||||||
|
};
|
||||||
|
const keywords = new Set(reservedWords.keyword);
|
||||||
|
const reservedWordsStrictSet = new Set(reservedWords.strict);
|
||||||
|
const reservedWordsStrictBindSet = new Set(reservedWords.strictBind);
|
||||||
|
function isReservedWord(word, inModule) {
|
||||||
|
return inModule && word === "await" || word === "enum";
|
||||||
|
}
|
||||||
|
function isStrictReservedWord(word, inModule) {
|
||||||
|
return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);
|
||||||
|
}
|
||||||
|
function isStrictBindOnlyReservedWord(word) {
|
||||||
|
return reservedWordsStrictBindSet.has(word);
|
||||||
|
}
|
||||||
|
function isStrictBindReservedWord(word, inModule) {
|
||||||
|
return isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word);
|
||||||
|
}
|
||||||
|
function isKeyword(word) {
|
||||||
|
return keywords.has(word);
|
||||||
|
}
|
||||||
|
|
||||||
|
//# sourceMappingURL=keyword.js.map
|
||||||
1
node_modules/@babel/helper-validator-identifier/lib/keyword.js.map
generated
vendored
Normal file
1
node_modules/@babel/helper-validator-identifier/lib/keyword.js.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"names":["reservedWords","keyword","strict","strictBind","keywords","Set","reservedWordsStrictSet","reservedWordsStrictBindSet","isReservedWord","word","inModule","isStrictReservedWord","has","isStrictBindOnlyReservedWord","isStrictBindReservedWord","isKeyword"],"sources":["../src/keyword.ts"],"sourcesContent":["const reservedWords = {\n keyword: [\n \"break\",\n \"case\",\n \"catch\",\n \"continue\",\n \"debugger\",\n \"default\",\n \"do\",\n \"else\",\n \"finally\",\n \"for\",\n \"function\",\n \"if\",\n \"return\",\n \"switch\",\n \"throw\",\n \"try\",\n \"var\",\n \"const\",\n \"while\",\n \"with\",\n \"new\",\n \"this\",\n \"super\",\n \"class\",\n \"extends\",\n \"export\",\n \"import\",\n \"null\",\n \"true\",\n \"false\",\n \"in\",\n \"instanceof\",\n \"typeof\",\n \"void\",\n \"delete\",\n ],\n strict: [\n \"implements\",\n \"interface\",\n \"let\",\n \"package\",\n \"private\",\n \"protected\",\n \"public\",\n \"static\",\n \"yield\",\n ],\n strictBind: [\"eval\", \"arguments\"],\n};\nconst keywords = new Set(reservedWords.keyword);\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\n\n/**\n * Checks if word is a reserved word in non-strict mode\n */\nexport function isReservedWord(word: string, inModule: boolean): boolean {\n return (inModule && word === \"await\") || word === \"enum\";\n}\n\n/**\n * Checks if word is a reserved word in non-binding strict mode\n *\n * Includes non-strict reserved words\n */\nexport function isStrictReservedWord(word: string, inModule: boolean): boolean {\n return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode, but it is allowed as\n * a normal identifier.\n */\nexport function isStrictBindOnlyReservedWord(word: string): boolean {\n return reservedWordsStrictBindSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode\n *\n * Includes non-strict reserved words and non-binding strict reserved words\n */\nexport function isStrictBindReservedWord(\n word: string,\n inModule: boolean,\n): boolean {\n return (\n isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word)\n );\n}\n\nexport function isKeyword(word: string): boolean {\n return keywords.has(word);\n}\n"],"mappings":";;;;;;;;;;AAAA,MAAMA,aAAa,GAAG;EACpBC,OAAO,EAAE,CACP,OAAO,EACP,MAAM,EACN,OAAO,EACP,UAAU,EACV,UAAU,EACV,SAAS,EACT,IAAI,EACJ,MAAM,EACN,SAAS,EACT,KAAK,EACL,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,KAAK,EACL,KAAK,EACL,OAAO,EACP,OAAO,EACP,MAAM,EACN,KAAK,EACL,MAAM,EACN,OAAO,EACP,OAAO,EACP,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,MAAM,EACN,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,QAAQ,CACT;EACDC,MAAM,EAAE,CACN,YAAY,EACZ,WAAW,EACX,KAAK,EACL,SAAS,EACT,SAAS,EACT,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,OAAO,CACR;EACDC,UAAU,EAAE,CAAC,MAAM,EAAE,WAAW;AAClC,CAAC;AACD,MAAMC,QAAQ,GAAG,IAAIC,GAAG,CAACL,aAAa,CAACC,OAAO,CAAC;AAC/C,MAAMK,sBAAsB,GAAG,IAAID,GAAG,CAACL,aAAa,CAACE,MAAM,CAAC;AAC5D,MAAMK,0BAA0B,GAAG,IAAIF,GAAG,CAACL,aAAa,CAACG,UAAU,CAAC;AAK7D,SAASK,cAAcA,CAACC,IAAY,EAAEC,QAAiB,EAAW;EACvE,OAAQA,QAAQ,IAAID,IAAI,KAAK,OAAO,IAAKA,IAAI,KAAK,MAAM;AAC1D;AAOO,SAASE,oBAAoBA,CAACF,IAAY,EAAEC,QAAiB,EAAW;EAC7E,OAAOF,cAAc,CAACC,IAAI,EAAEC,QAAQ,CAAC,IAAIJ,sBAAsB,CAACM,GAAG,CAACH,IAAI,CAAC;AAC3E;AAMO,SAASI,4BAA4BA,CAACJ,IAAY,EAAW;EAClE,OAAOF,0BAA0B,CAACK,GAAG,CAACH,IAAI,CAAC;AAC7C;AAOO,SAASK,wBAAwBA,CACtCL,IAAY,EACZC,QAAiB,EACR;EACT,OACEC,oBAAoB,CAACF,IAAI,EAAEC,QAAQ,CAAC,IAAIG,4BAA4B,CAACJ,IAAI,CAAC;AAE9E;AAEO,SAASM,SAASA,CAACN,IAAY,EAAW;EAC/C,OAAOL,QAAQ,CAACQ,GAAG,CAACH,IAAI,CAAC;AAC3B","ignoreList":[]}
|
||||||
31
node_modules/@babel/helper-validator-identifier/package.json
generated
vendored
Normal file
31
node_modules/@babel/helper-validator-identifier/package.json
generated
vendored
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
{
|
||||||
|
"name": "@babel/helper-validator-identifier",
|
||||||
|
"version": "7.28.5",
|
||||||
|
"description": "Validate identifier/keywords name",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/babel/babel.git",
|
||||||
|
"directory": "packages/babel-helper-validator-identifier"
|
||||||
|
},
|
||||||
|
"license": "MIT",
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
|
"main": "./lib/index.js",
|
||||||
|
"exports": {
|
||||||
|
".": {
|
||||||
|
"types": "./lib/index.d.ts",
|
||||||
|
"default": "./lib/index.js"
|
||||||
|
},
|
||||||
|
"./package.json": "./package.json"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@unicode/unicode-17.0.0": "^1.6.10",
|
||||||
|
"charcodes": "^0.2.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.9.0"
|
||||||
|
},
|
||||||
|
"author": "The Babel Team (https://babel.dev/team)",
|
||||||
|
"type": "commonjs"
|
||||||
|
}
|
||||||
105
node_modules/@commitlint/config-validator/lib/commitlint.schema.json
generated
vendored
Normal file
105
node_modules/@commitlint/config-validator/lib/commitlint.schema.json
generated
vendored
Normal file
|
|
@ -0,0 +1,105 @@
|
||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema",
|
||||||
|
"type": "object",
|
||||||
|
"definitions": {
|
||||||
|
"rule": {
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"description": "A rule",
|
||||||
|
"type": "array",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"description": "Level: 0 disables the rule. For 1 it will be considered a warning, for 2 an error",
|
||||||
|
"type": "number",
|
||||||
|
"enum": [0, 1, 2]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Applicable: always|never: never inverts the rule",
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["always", "never"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Value: the value for this rule"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"minItems": 1,
|
||||||
|
"maxItems": 3,
|
||||||
|
"additionalItems": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "A rule",
|
||||||
|
"typeof": "function"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"properties": {
|
||||||
|
"extends": {
|
||||||
|
"description": "Resolveable ids to commitlint configurations to extend",
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" }
|
||||||
|
},
|
||||||
|
{ "type": "string" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"parserPreset": {
|
||||||
|
"description": "Resolveable id to conventional-changelog parser preset to import and use",
|
||||||
|
"oneOf": [
|
||||||
|
{ "type": "string" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"name": { "type": "string" },
|
||||||
|
"path": { "type": "string" },
|
||||||
|
"parserOpts": {}
|
||||||
|
},
|
||||||
|
"additionalProperties": true
|
||||||
|
},
|
||||||
|
{ "typeof": "function" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"helpUrl": {
|
||||||
|
"description": "Custom URL to show upon failure",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"formatter": {
|
||||||
|
"description": "Resolveable id to package, from node_modules, which formats the output",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"rules": {
|
||||||
|
"description": "Rules to check against",
|
||||||
|
"type": "object",
|
||||||
|
"propertyNames": { "type": "string" },
|
||||||
|
"additionalProperties": { "$ref": "#/definitions/rule" }
|
||||||
|
},
|
||||||
|
"plugins": {
|
||||||
|
"description": "Resolveable ids of commitlint plugins from node_modules",
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"anyOf": [
|
||||||
|
{ "type": "string" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"required": ["rules"],
|
||||||
|
"properties": {
|
||||||
|
"rules": {
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ignores": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "typeof": "function" },
|
||||||
|
"description": "Additional commits to ignore, defined by ignore matchers"
|
||||||
|
},
|
||||||
|
"defaultIgnores": {
|
||||||
|
"description": "Whether commitlint uses the default ignore rules",
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
9
node_modules/@commitlint/config-validator/lib/formatErrors.d.ts
generated
vendored
Normal file
9
node_modules/@commitlint/config-validator/lib/formatErrors.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
import type { ErrorObject } from "ajv";
|
||||||
|
/**
|
||||||
|
* Formats an array of schema validation errors.
|
||||||
|
* @param errors An array of error messages to format.
|
||||||
|
* @returns Formatted error message
|
||||||
|
* Based on https://github.com/eslint/eslint/blob/master/lib/shared/config-validator.js#L237-L261
|
||||||
|
*/
|
||||||
|
export declare function formatErrors(errors: ErrorObject[]): string;
|
||||||
|
//# sourceMappingURL=formatErrors.d.ts.map
|
||||||
1
node_modules/@commitlint/config-validator/lib/formatErrors.d.ts.map
generated
vendored
Normal file
1
node_modules/@commitlint/config-validator/lib/formatErrors.d.ts.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"formatErrors.d.ts","sourceRoot":"","sources":["../src/formatErrors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AAEvC;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAoC1D"}
|
||||||
35
node_modules/@commitlint/config-validator/lib/formatErrors.js
generated
vendored
Normal file
35
node_modules/@commitlint/config-validator/lib/formatErrors.js
generated
vendored
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
/**
|
||||||
|
* Formats an array of schema validation errors.
|
||||||
|
* @param errors An array of error messages to format.
|
||||||
|
* @returns Formatted error message
|
||||||
|
* Based on https://github.com/eslint/eslint/blob/master/lib/shared/config-validator.js#L237-L261
|
||||||
|
*/
|
||||||
|
export function formatErrors(errors) {
|
||||||
|
return errors
|
||||||
|
.map((error) => {
|
||||||
|
if (error.keyword === "additionalProperties" &&
|
||||||
|
"additionalProperty" in error.params) {
|
||||||
|
const formattedPropertyPath = error.instancePath.length
|
||||||
|
? `${error.instancePath.slice(1)}.${error.params.additionalProperty}`
|
||||||
|
: error.params.additionalProperty;
|
||||||
|
return `Unexpected top-level property "${formattedPropertyPath}"`;
|
||||||
|
}
|
||||||
|
if (error.keyword === "type") {
|
||||||
|
const formattedField = error.instancePath.slice(1);
|
||||||
|
if (!formattedField) {
|
||||||
|
return `Config has the wrong type - ${error.message}`;
|
||||||
|
}
|
||||||
|
return `Property "${formattedField}" has the wrong type - ${error.message}`;
|
||||||
|
}
|
||||||
|
const field = (error.instancePath[0] === "."
|
||||||
|
? error.instancePath.slice(1)
|
||||||
|
: error.instancePath) || "Config";
|
||||||
|
if (error.keyword === "typeof") {
|
||||||
|
return `"${field}" should be a ${error.schema}. Value: ${JSON.stringify(error.data)}`;
|
||||||
|
}
|
||||||
|
return `"${field}" ${error.message}. Value: ${JSON.stringify(error.data)}`;
|
||||||
|
})
|
||||||
|
.map((message) => `\t- ${message}.\n`)
|
||||||
|
.join("");
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=formatErrors.js.map
|
||||||
1
node_modules/@commitlint/config-validator/lib/formatErrors.js.map
generated
vendored
Normal file
1
node_modules/@commitlint/config-validator/lib/formatErrors.js.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"formatErrors.js","sourceRoot":"","sources":["../src/formatErrors.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,MAAqB;IACjD,OAAO,MAAM;SACX,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACd,IACC,KAAK,CAAC,OAAO,KAAK,sBAAsB;YACxC,oBAAoB,IAAI,KAAK,CAAC,MAAM,EACnC,CAAC;YACF,MAAM,qBAAqB,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM;gBACtD,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAAE;gBACrE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC;YAEnC,OAAO,kCAAkC,qBAAqB,GAAG,CAAC;QACnE,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAC9B,MAAM,cAAc,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACnD,IAAI,CAAC,cAAc,EAAE,CAAC;gBACrB,OAAO,+BAA+B,KAAK,CAAC,OAAO,EAAE,CAAC;YACvD,CAAC;YACD,OAAO,aAAa,cAAc,0BAA0B,KAAK,CAAC,OAAO,EAAE,CAAC;QAC7E,CAAC;QACD,MAAM,KAAK,GACV,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,GAAG;YAC7B,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7B,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,QAAQ,CAAC;QACpC,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,IAAI,KAAK,iBAAiB,KAAK,CAAC,MAAM,YAAY,IAAI,CAAC,SAAS,CACtE,KAAK,CAAC,IAAI,CACV,EAAE,CAAC;QACL,CAAC;QAED,OAAO,IAAI,KAAK,KAAK,KAAK,CAAC,OAAO,YAAY,IAAI,CAAC,SAAS,CAC3D,KAAK,CAAC,IAAI,CACV,EAAE,CAAC;IACL,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,OAAO,KAAK,CAAC;SACrC,IAAI,CAAC,EAAE,CAAC,CAAC;AACZ,CAAC"}
|
||||||
3
node_modules/@commitlint/config-validator/lib/validate.d.ts
generated
vendored
Normal file
3
node_modules/@commitlint/config-validator/lib/validate.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
import { UserConfig } from "@commitlint/types";
|
||||||
|
export declare function validateConfig(source: string, config: unknown): asserts config is UserConfig;
|
||||||
|
//# sourceMappingURL=validate.d.ts.map
|
||||||
1
node_modules/@commitlint/config-validator/lib/validate.d.ts.map
generated
vendored
Normal file
1
node_modules/@commitlint/config-validator/lib/validate.d.ts.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAsB/C,wBAAgB,cAAc,CAC7B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,GACb,OAAO,CAAC,MAAM,IAAI,UAAU,CA4B9B"}
|
||||||
39
node_modules/@commitlint/config-validator/lib/validate.js
generated
vendored
Normal file
39
node_modules/@commitlint/config-validator/lib/validate.js
generated
vendored
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
import { createRequire } from "node:module";
|
||||||
|
import _Ajv from "ajv";
|
||||||
|
import { formatErrors } from "./formatErrors.js";
|
||||||
|
const require = createRequire(import.meta.url);
|
||||||
|
const schema = require("./commitlint.schema.json");
|
||||||
|
const TYPE_OF = [
|
||||||
|
"undefined",
|
||||||
|
"string",
|
||||||
|
"number",
|
||||||
|
"object",
|
||||||
|
"function",
|
||||||
|
"boolean",
|
||||||
|
"symbol",
|
||||||
|
];
|
||||||
|
// FIXME: https://github.com/ajv-validator/ajv/issues/2132
|
||||||
|
const Ajv = _Ajv;
|
||||||
|
export function validateConfig(source, config) {
|
||||||
|
const ajv = new Ajv({
|
||||||
|
meta: false,
|
||||||
|
strict: false,
|
||||||
|
useDefaults: true,
|
||||||
|
validateSchema: false,
|
||||||
|
verbose: true,
|
||||||
|
});
|
||||||
|
ajv.addKeyword({
|
||||||
|
keyword: "typeof",
|
||||||
|
validate: function typeOfFunc(schema, data) {
|
||||||
|
return typeof data === schema;
|
||||||
|
},
|
||||||
|
metaSchema: { type: "string", enum: TYPE_OF },
|
||||||
|
schema: true,
|
||||||
|
});
|
||||||
|
const validate = ajv.compile(schema);
|
||||||
|
const isValid = validate(config);
|
||||||
|
if (!isValid && validate.errors && validate.errors.length) {
|
||||||
|
throw new Error(`Commitlint configuration in ${source} is invalid:\n${formatErrors(validate.errors)}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=validate.js.map
|
||||||
1
node_modules/@commitlint/config-validator/lib/validate.js.map
generated
vendored
Normal file
1
node_modules/@commitlint/config-validator/lib/validate.js.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,IAAI,MAAM,KAAK,CAAC;AAEvB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,MAAM,MAAM,GAA8C,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAE9F,MAAM,OAAO,GAAG;IACf,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,SAAS;IACT,QAAQ;CACR,CAAC;AAEF,0DAA0D;AAC1D,MAAM,GAAG,GAAG,IAAsC,CAAC;AAEnD,MAAM,UAAU,cAAc,CAC7B,MAAc,EACd,MAAe;IAEf,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC;QACnB,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,KAAK;QACb,WAAW,EAAE,IAAI;QACjB,cAAc,EAAE,KAAK;QACrB,OAAO,EAAE,IAAI;KACb,CAAC,CAAC;IAEH,GAAG,CAAC,UAAU,CAAC;QACd,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,SAAS,UAAU,CAAC,MAAW,EAAE,IAAS;YACnD,OAAO,OAAO,IAAI,KAAK,MAAM,CAAC;QAC/B,CAAC;QACD,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE;QAC7C,MAAM,EAAE,IAAI;KACZ,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEjC,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CACd,+BAA+B,MAAM,iBAAiB,YAAY,CACjE,QAAQ,CAAC,MAAM,CACf,EAAE,CACH,CAAC;IACH,CAAC;AACF,CAAC"}
|
||||||
21
node_modules/@commitlint/config-validator/license.md
generated
vendored
Normal file
21
node_modules/@commitlint/config-validator/license.md
generated
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2016 - present Mario Nebl
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
46
node_modules/@commitlint/config-validator/package.json
generated
vendored
Normal file
46
node_modules/@commitlint/config-validator/package.json
generated
vendored
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
{
|
||||||
|
"name": "@commitlint/config-validator",
|
||||||
|
"type": "module",
|
||||||
|
"version": "20.5.0",
|
||||||
|
"description": "config validator for commitlint.config.js",
|
||||||
|
"main": "lib/validate.js",
|
||||||
|
"types": "lib/validate.d.ts",
|
||||||
|
"files": [
|
||||||
|
"lib/"
|
||||||
|
],
|
||||||
|
"scripts": {
|
||||||
|
"deps": "dep-check",
|
||||||
|
"pkg": "pkg-check --skip-import"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=v18"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/conventional-changelog/commitlint.git",
|
||||||
|
"directory": "@commitlint/config-validator"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/conventional-changelog/commitlint/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://commitlint.js.org/",
|
||||||
|
"keywords": [
|
||||||
|
"conventional-changelog",
|
||||||
|
"commitlint",
|
||||||
|
"library",
|
||||||
|
"core"
|
||||||
|
],
|
||||||
|
"author": {
|
||||||
|
"name": "Mario Nebl",
|
||||||
|
"email": "hello@herebecode.com"
|
||||||
|
},
|
||||||
|
"license": "MIT",
|
||||||
|
"devDependencies": {
|
||||||
|
"@commitlint/utils": "^20.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@commitlint/types": "^20.5.0",
|
||||||
|
"ajv": "^8.11.0"
|
||||||
|
},
|
||||||
|
"gitHead": "a7918e9cf70f822505cb4422c03150a86f802627"
|
||||||
|
}
|
||||||
7
node_modules/@commitlint/execute-rule/lib/index.d.ts
generated
vendored
Normal file
7
node_modules/@commitlint/execute-rule/lib/index.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
type Rule<T> = readonly [string, Config<T>];
|
||||||
|
type Config<T> = T | Promise<T> | ExectableConfig<T>;
|
||||||
|
type ExectableConfig<T> = (() => T) | (() => Promise<T>);
|
||||||
|
type ExecutedRule<T> = readonly [string, T];
|
||||||
|
export default execute;
|
||||||
|
export declare function execute<T = unknown>(rule?: Rule<T>): Promise<ExecutedRule<T> | null>;
|
||||||
|
//# sourceMappingURL=index.d.ts.map
|
||||||
1
node_modules/@commitlint/execute-rule/lib/index.d.ts.map
generated
vendored
Normal file
1
node_modules/@commitlint/execute-rule/lib/index.d.ts.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,KAAK,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,KAAK,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;AACrD,KAAK,eAAe,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzD,KAAK,YAAY,CAAC,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAE5C,eAAe,OAAO,CAAC;AAEvB,wBAAsB,OAAO,CAAC,CAAC,GAAG,OAAO,EACxC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GACZ,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAUjC"}
|
||||||
13
node_modules/@commitlint/execute-rule/lib/index.js
generated
vendored
Normal file
13
node_modules/@commitlint/execute-rule/lib/index.js
generated
vendored
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
export default execute;
|
||||||
|
export async function execute(rule) {
|
||||||
|
if (!Array.isArray(rule)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
const [name, config] = rule;
|
||||||
|
const fn = executable(config) ? config : async () => config;
|
||||||
|
return [name, await fn()];
|
||||||
|
}
|
||||||
|
function executable(config) {
|
||||||
|
return typeof config === "function";
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=index.js.map
|
||||||
1
node_modules/@commitlint/execute-rule/lib/index.js.map
generated
vendored
Normal file
1
node_modules/@commitlint/execute-rule/lib/index.js.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,eAAe,OAAO,CAAC;AAEvB,MAAM,CAAC,KAAK,UAAU,OAAO,CAC5B,IAAc;IAEd,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAE5B,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC;IAE5D,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,UAAU,CAAI,MAAiB;IACvC,OAAO,OAAO,MAAM,KAAK,UAAU,CAAC;AACrC,CAAC"}
|
||||||
21
node_modules/@commitlint/execute-rule/license.md
generated
vendored
Normal file
21
node_modules/@commitlint/execute-rule/license.md
generated
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2016 - present Mario Nebl
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
42
node_modules/@commitlint/execute-rule/package.json
generated
vendored
Normal file
42
node_modules/@commitlint/execute-rule/package.json
generated
vendored
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
{
|
||||||
|
"name": "@commitlint/execute-rule",
|
||||||
|
"type": "module",
|
||||||
|
"version": "20.0.0",
|
||||||
|
"description": "Lint your commit messages",
|
||||||
|
"main": "lib/index.js",
|
||||||
|
"types": "lib/index.d.ts",
|
||||||
|
"files": [
|
||||||
|
"lib/"
|
||||||
|
],
|
||||||
|
"scripts": {
|
||||||
|
"deps": "dep-check",
|
||||||
|
"pkg": "pkg-check"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=v18"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/conventional-changelog/commitlint.git",
|
||||||
|
"directory": "@commitlint/execute-rule"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/conventional-changelog/commitlint/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://commitlint.js.org/",
|
||||||
|
"keywords": [
|
||||||
|
"conventional-changelog",
|
||||||
|
"commitlint",
|
||||||
|
"library",
|
||||||
|
"core"
|
||||||
|
],
|
||||||
|
"author": {
|
||||||
|
"name": "Mario Nebl",
|
||||||
|
"email": "hello@herebecode.com"
|
||||||
|
},
|
||||||
|
"license": "MIT",
|
||||||
|
"devDependencies": {
|
||||||
|
"@commitlint/utils": "^20.0.0"
|
||||||
|
},
|
||||||
|
"gitHead": "407be6c96b1a108ee012ed5330b0d80a165952d5"
|
||||||
|
}
|
||||||
15
node_modules/@commitlint/load/README.md
generated
vendored
Normal file
15
node_modules/@commitlint/load/README.md
generated
vendored
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
# @commitlint/load
|
||||||
|
|
||||||
|
Load shared commitlint configuration
|
||||||
|
|
||||||
|
## Getting started
|
||||||
|
|
||||||
|
```shell
|
||||||
|
npm install --save-dev @commitlint/load
|
||||||
|
```
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
|
||||||
|
Consult [API docs](https://commitlint.js.org/api/load) for comprehensive documentation.
|
||||||
|
|
||||||
|
Documentation generated from [`docs` folder](../../docs/api/format.md).
|
||||||
5
node_modules/@commitlint/load/lib/load.d.ts
generated
vendored
Normal file
5
node_modules/@commitlint/load/lib/load.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
import { resolveFrom, resolveFromSilent, resolveGlobalSilent } from "@commitlint/resolve-extends";
|
||||||
|
import { LoadOptions, QualifiedConfig, UserConfig } from "@commitlint/types";
|
||||||
|
export default function load(seed?: UserConfig, options?: LoadOptions): Promise<QualifiedConfig>;
|
||||||
|
export { resolveFrom, resolveFromSilent, resolveGlobalSilent };
|
||||||
|
//# sourceMappingURL=load.d.ts.map
|
||||||
1
node_modules/@commitlint/load/lib/load.d.ts.map
generated
vendored
Normal file
1
node_modules/@commitlint/load/lib/load.d.ts.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../src/load.ts"],"names":[],"mappings":"AAIA,OAAuB,EACtB,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EAEnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACN,WAAW,EAEX,eAAe,EAEf,UAAU,EACV,MAAM,mBAAmB,CAAC;AAmB3B,wBAA8B,IAAI,CACjC,IAAI,GAAE,UAAe,EACrB,OAAO,GAAE,WAAgB,GACvB,OAAO,CAAC,eAAe,CAAC,CAsG1B;AAED,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,CAAC"}
|
||||||
102
node_modules/@commitlint/load/lib/load.js
generated
vendored
Normal file
102
node_modules/@commitlint/load/lib/load.js
generated
vendored
Normal file
|
|
@ -0,0 +1,102 @@
|
||||||
|
import path from "node:path";
|
||||||
|
import { validateConfig } from "@commitlint/config-validator";
|
||||||
|
import executeRule from "@commitlint/execute-rule";
|
||||||
|
import resolveExtends, { resolveFrom, resolveFromSilent, resolveGlobalSilent, loadParserPreset, } from "@commitlint/resolve-extends";
|
||||||
|
import isPlainObject from "is-plain-obj";
|
||||||
|
import { merge } from "es-toolkit/compat";
|
||||||
|
import { loadConfig } from "./utils/load-config.js";
|
||||||
|
import { loadParserOpts } from "./utils/load-parser-opts.js";
|
||||||
|
import loadPlugin from "./utils/load-plugin.js";
|
||||||
|
/**
|
||||||
|
* formatter should be kept as is when unable to resolve it from config directory
|
||||||
|
*/
|
||||||
|
const resolveFormatter = (formatter, parent) => {
|
||||||
|
try {
|
||||||
|
return resolveFrom(formatter, parent);
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
return formatter;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
export default async function load(seed = {}, options = {}) {
|
||||||
|
const cwd = typeof options.cwd === "undefined" ? process.cwd() : options.cwd;
|
||||||
|
const loaded = await loadConfig(cwd, options.file);
|
||||||
|
const baseDirectory = loaded?.filepath ? path.dirname(loaded.filepath) : cwd;
|
||||||
|
const configFilePath = loaded?.filepath;
|
||||||
|
let config = {};
|
||||||
|
if (loaded) {
|
||||||
|
const resolvedConfig = typeof loaded.config === "function"
|
||||||
|
? await loaded.config()
|
||||||
|
: await loaded.config;
|
||||||
|
validateConfig(loaded.filepath || "", resolvedConfig);
|
||||||
|
config = resolvedConfig;
|
||||||
|
}
|
||||||
|
// Merge passed config with file based options
|
||||||
|
config = merge({
|
||||||
|
extends: [],
|
||||||
|
plugins: [],
|
||||||
|
rules: {},
|
||||||
|
}, config, seed);
|
||||||
|
// Resolve parserPreset key
|
||||||
|
if (typeof config.parserPreset === "string") {
|
||||||
|
const resolvedParserPreset = resolveFrom(config.parserPreset, configFilePath);
|
||||||
|
config.parserPreset = {
|
||||||
|
name: config.parserPreset,
|
||||||
|
...(await loadParserPreset(resolvedParserPreset)),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// Resolve extends key
|
||||||
|
const extended = await resolveExtends(config, {
|
||||||
|
prefix: "commitlint-config",
|
||||||
|
cwd: baseDirectory,
|
||||||
|
parserPreset: await config.parserPreset,
|
||||||
|
});
|
||||||
|
if (!extended.formatter || typeof extended.formatter !== "string") {
|
||||||
|
extended.formatter = "@commitlint/format";
|
||||||
|
}
|
||||||
|
let plugins = {};
|
||||||
|
if (Array.isArray(extended.plugins)) {
|
||||||
|
const deduplicatedPlugins = [...new Set(extended.plugins)];
|
||||||
|
for (const plugin of deduplicatedPlugins) {
|
||||||
|
if (typeof plugin === "string") {
|
||||||
|
plugins = await loadPlugin(plugins, plugin, {
|
||||||
|
debug: process.env.DEBUG === "true",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
plugins.local = plugin;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const rules = (await Promise.all(Object.entries(extended.rules || {}).map((entry) => executeRule(entry)))).reduce((registry, item) => {
|
||||||
|
// type of `item` can be null, but Object.entries always returns key pair
|
||||||
|
const [key, value] = item;
|
||||||
|
registry[key] = value;
|
||||||
|
return registry;
|
||||||
|
}, {});
|
||||||
|
const helpUrl = typeof extended.helpUrl === "string"
|
||||||
|
? extended.helpUrl
|
||||||
|
: typeof config.helpUrl === "string"
|
||||||
|
? config.helpUrl
|
||||||
|
: "https://github.com/conventional-changelog/commitlint/#what-is-commitlint";
|
||||||
|
const prompt = extended.prompt && isPlainObject(extended.prompt) ? extended.prompt : {};
|
||||||
|
return {
|
||||||
|
extends: Array.isArray(extended.extends)
|
||||||
|
? extended.extends
|
||||||
|
: typeof extended.extends === "string"
|
||||||
|
? [extended.extends]
|
||||||
|
: [],
|
||||||
|
// Resolve config-relative formatter module
|
||||||
|
formatter: resolveFormatter(extended.formatter, configFilePath),
|
||||||
|
// Resolve parser-opts from preset
|
||||||
|
parserPreset: await loadParserOpts(extended.parserPreset),
|
||||||
|
ignores: extended.ignores,
|
||||||
|
defaultIgnores: extended.defaultIgnores,
|
||||||
|
plugins: plugins,
|
||||||
|
rules: rules,
|
||||||
|
helpUrl: helpUrl,
|
||||||
|
prompt,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
export { resolveFrom, resolveFromSilent, resolveGlobalSilent };
|
||||||
|
//# sourceMappingURL=load.js.map
|
||||||
1
node_modules/@commitlint/load/lib/load.js.map
generated
vendored
Normal file
1
node_modules/@commitlint/load/lib/load.js.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"load.js","sourceRoot":"","sources":["../src/load.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,cAAc,EAAE,EACtB,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,GAChB,MAAM,6BAA6B,CAAC;AAQrC,OAAO,aAAa,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAEhD;;GAEG;AACH,MAAM,gBAAgB,GAAG,CAAC,SAAiB,EAAE,MAAe,EAAU,EAAE;IACvE,IAAI,CAAC;QACJ,OAAO,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,IAAI,CACjC,OAAmB,EAAE,EACrB,UAAuB,EAAE;IAEzB,MAAM,GAAG,GAAG,OAAO,OAAO,CAAC,GAAG,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IAC7E,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,MAAM,aAAa,GAAG,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC7E,MAAM,cAAc,GAAG,MAAM,EAAE,QAAQ,CAAC;IACxC,IAAI,MAAM,GAAe,EAAE,CAAC;IAC5B,IAAI,MAAM,EAAE,CAAC;QACZ,MAAM,cAAc,GACnB,OAAO,MAAM,CAAC,MAAM,KAAK,UAAU;YAClC,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE;YACvB,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC;QACxB,cAAc,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC;QACtD,MAAM,GAAG,cAAc,CAAC;IACzB,CAAC;IAED,8CAA8C;IAC9C,MAAM,GAAG,KAAK,CACb;QACC,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,EAAE;KACT,EACD,MAAM,EACN,IAAI,CACJ,CAAC;IAEF,2BAA2B;IAC3B,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC7C,MAAM,oBAAoB,GAAG,WAAW,CACvC,MAAM,CAAC,YAAY,EACnB,cAAc,CACd,CAAC;QAEF,MAAM,CAAC,YAAY,GAAG;YACrB,IAAI,EAAE,MAAM,CAAC,YAAY;YACzB,GAAG,CAAC,MAAM,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;SACjD,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE;QAC7C,MAAM,EAAE,mBAAmB;QAC3B,GAAG,EAAE,aAAa;QAClB,YAAY,EAAE,MAAM,MAAM,CAAC,YAAY;KACvC,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,OAAO,QAAQ,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QACnE,QAAQ,CAAC,SAAS,GAAG,oBAAoB,CAAC;IAC3C,CAAC;IAED,IAAI,OAAO,GAAkB,EAAE,CAAC;IAChC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACrC,MAAM,mBAAmB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3D,KAAK,MAAM,MAAM,IAAI,mBAAmB,EAAE,CAAC;YAC1C,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAChC,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE;oBAC3C,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,MAAM;iBACnC,CAAC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC;YACxB,CAAC;QACF,CAAC;IACF,CAAC;IAED,MAAM,KAAK,GAAG,CACb,MAAM,OAAO,CAAC,GAAG,CAChB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CACvE,CACD,CAAC,MAAM,CAAiB,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;QAC3C,yEAAyE;QACzE,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAK,CAAC;QAC3B,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,OAAO,QAAQ,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,OAAO,GACZ,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ;QACnC,CAAC,CAAC,QAAQ,CAAC,OAAO;QAClB,CAAC,CAAC,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;YACnC,CAAC,CAAC,MAAM,CAAC,OAAO;YAChB,CAAC,CAAC,0EAA0E,CAAC;IAEhF,MAAM,MAAM,GACX,QAAQ,CAAC,MAAM,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1E,OAAO;QACN,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;YACvC,CAAC,CAAC,QAAQ,CAAC,OAAO;YAClB,CAAC,CAAC,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ;gBACrC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;gBACpB,CAAC,CAAC,EAAE;QACN,2CAA2C;QAC3C,SAAS,EAAE,gBAAgB,CAAC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;QAC/D,kCAAkC;QAClC,YAAY,EAAE,MAAM,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC;QACzD,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,cAAc,EAAE,QAAQ,CAAC,cAAc;QACvC,OAAO,EAAE,OAAO;QAChB,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,OAAO;QAChB,MAAM;KACN,CAAC;AACH,CAAC;AAED,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,CAAC"}
|
||||||
9
node_modules/@commitlint/load/lib/utils/load-config.d.ts
generated
vendored
Normal file
9
node_modules/@commitlint/load/lib/utils/load-config.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
export interface LoadConfigResult {
|
||||||
|
config: unknown;
|
||||||
|
filepath: string;
|
||||||
|
isEmpty?: boolean;
|
||||||
|
}
|
||||||
|
export declare function loadConfig(cwd: string, configPath?: string): Promise<LoadConfigResult | null>;
|
||||||
|
export declare const isDynamicAwaitSupported: () => boolean;
|
||||||
|
export declare const isEsmModule: (cwd: string) => boolean;
|
||||||
|
//# sourceMappingURL=load-config.d.ts.map
|
||||||
1
node_modules/@commitlint/load/lib/utils/load-config.d.ts.map
generated
vendored
Normal file
1
node_modules/@commitlint/load/lib/utils/load-config.d.ts.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"load-config.d.ts","sourceRoot":"","sources":["../../src/utils/load-config.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,gBAAgB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAKD,wBAAsB,UAAU,CAC/B,GAAG,EAAE,MAAM,EACX,UAAU,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CA6DlC;AAKD,eAAO,MAAM,uBAAuB,eAOnC,CAAC;AAGF,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,YAStC,CAAC"}
|
||||||
81
node_modules/@commitlint/load/lib/utils/load-config.js
generated
vendored
Normal file
81
node_modules/@commitlint/load/lib/utils/load-config.js
generated
vendored
Normal file
|
|
@ -0,0 +1,81 @@
|
||||||
|
import { existsSync, readFileSync } from "node:fs";
|
||||||
|
import path from "node:path";
|
||||||
|
import { cosmiconfig, defaultLoadersSync, defaultLoaders, } from "cosmiconfig";
|
||||||
|
import { TypeScriptLoader } from "cosmiconfig-typescript-loader";
|
||||||
|
const moduleName = "commitlint";
|
||||||
|
const searchStrategy = "global";
|
||||||
|
export async function loadConfig(cwd, configPath) {
|
||||||
|
let tsLoaderInstance;
|
||||||
|
const tsLoader = (...args) => {
|
||||||
|
if (!tsLoaderInstance) {
|
||||||
|
tsLoaderInstance = TypeScriptLoader();
|
||||||
|
}
|
||||||
|
return tsLoaderInstance(...args);
|
||||||
|
};
|
||||||
|
// If dynamic await is supported (Node >= v20.8.0) or directory uses ESM, support
|
||||||
|
// async js/cjs loaders (dynamic import). Otherwise, use synchronous js/cjs loaders.
|
||||||
|
const loaders = isDynamicAwaitSupported() || isEsmModule(cwd)
|
||||||
|
? defaultLoaders
|
||||||
|
: defaultLoadersSync;
|
||||||
|
const explorer = cosmiconfig(moduleName, {
|
||||||
|
searchStrategy,
|
||||||
|
searchPlaces: [
|
||||||
|
// cosmiconfig overrides default searchPlaces if any new search place is added (For e.g. `*.ts` files),
|
||||||
|
// we need to manually merge default searchPlaces from https://github.com/davidtheclark/cosmiconfig#searchplaces
|
||||||
|
"package.json",
|
||||||
|
"package.yaml",
|
||||||
|
`.${moduleName}rc`,
|
||||||
|
`.${moduleName}rc.json`,
|
||||||
|
`.${moduleName}rc.yaml`,
|
||||||
|
`.${moduleName}rc.yml`,
|
||||||
|
`.${moduleName}rc.js`,
|
||||||
|
`.${moduleName}rc.cjs`,
|
||||||
|
`.${moduleName}rc.mjs`,
|
||||||
|
`${moduleName}.config.js`,
|
||||||
|
`${moduleName}.config.cjs`,
|
||||||
|
`${moduleName}.config.mjs`,
|
||||||
|
// files supported by TypescriptLoader
|
||||||
|
`.${moduleName}rc.ts`,
|
||||||
|
`.${moduleName}rc.cts`,
|
||||||
|
`.${moduleName}rc.mts`,
|
||||||
|
`${moduleName}.config.ts`,
|
||||||
|
`${moduleName}.config.cts`,
|
||||||
|
`${moduleName}.config.mts`,
|
||||||
|
],
|
||||||
|
loaders: {
|
||||||
|
".ts": tsLoader,
|
||||||
|
".cts": tsLoader,
|
||||||
|
".mts": tsLoader,
|
||||||
|
".cjs": loaders[".cjs"],
|
||||||
|
".js": loaders[".js"],
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const explicitPath = configPath ? path.resolve(cwd, configPath) : undefined;
|
||||||
|
const explore = explicitPath ? explorer.load : explorer.search;
|
||||||
|
const searchPath = explicitPath ? explicitPath : cwd;
|
||||||
|
const local = await explore(searchPath);
|
||||||
|
if (local) {
|
||||||
|
return local;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
// See the following issues for more context, contributing to failing Jest tests:
|
||||||
|
// - Issue: https://github.com/nodejs/node/issues/40058
|
||||||
|
// - Resolution: https://github.com/nodejs/node/pull/48510 (Node v20.8.0)
|
||||||
|
export const isDynamicAwaitSupported = () => {
|
||||||
|
const [major, minor] = process.version
|
||||||
|
.replace("v", "")
|
||||||
|
.split(".")
|
||||||
|
.map((val) => parseInt(val));
|
||||||
|
return major >= 20 && minor >= 8;
|
||||||
|
};
|
||||||
|
// Is the given directory set up to use ESM (ECMAScript Modules)?
|
||||||
|
export const isEsmModule = (cwd) => {
|
||||||
|
const packagePath = path.join(cwd, "package.json");
|
||||||
|
if (!existsSync(packagePath)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
const packageJSON = readFileSync(packagePath, { encoding: "utf-8" });
|
||||||
|
return JSON.parse(packageJSON)?.type === "module";
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=load-config.js.map
|
||||||
1
node_modules/@commitlint/load/lib/utils/load-config.js.map
generated
vendored
Normal file
1
node_modules/@commitlint/load/lib/utils/load-config.js.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"load-config.js","sourceRoot":"","sources":["../../src/utils/load-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACN,WAAW,EACX,kBAAkB,EAElB,cAAc,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAQjE,MAAM,UAAU,GAAG,YAAY,CAAC;AAChC,MAAM,cAAc,GAAG,QAAQ,CAAC;AAEhC,MAAM,CAAC,KAAK,UAAU,UAAU,CAC/B,GAAW,EACX,UAAmB;IAEnB,IAAI,gBAAoC,CAAC;IACzC,MAAM,QAAQ,GAAW,CAAC,GAAG,IAAI,EAAE,EAAE;QACpC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACvB,gBAAgB,GAAG,gBAAgB,EAAE,CAAC;QACvC,CAAC;QACD,OAAO,gBAAgB,CAAC,GAAG,IAAI,CAAC,CAAC;IAClC,CAAC,CAAC;IAEF,iFAAiF;IACjF,oFAAoF;IACpF,MAAM,OAAO,GACZ,uBAAuB,EAAE,IAAI,WAAW,CAAC,GAAG,CAAC;QAC5C,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,kBAAkB,CAAC;IAEvB,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,EAAE;QACxC,cAAc;QACd,YAAY,EAAE;YACb,uGAAuG;YACvG,gHAAgH;YAChH,cAAc;YACd,cAAc;YACd,IAAI,UAAU,IAAI;YAClB,IAAI,UAAU,SAAS;YACvB,IAAI,UAAU,SAAS;YACvB,IAAI,UAAU,QAAQ;YACtB,IAAI,UAAU,OAAO;YACrB,IAAI,UAAU,QAAQ;YACtB,IAAI,UAAU,QAAQ;YACtB,GAAG,UAAU,YAAY;YACzB,GAAG,UAAU,aAAa;YAC1B,GAAG,UAAU,aAAa;YAE1B,sCAAsC;YACtC,IAAI,UAAU,OAAO;YACrB,IAAI,UAAU,QAAQ;YACtB,IAAI,UAAU,QAAQ;YACtB,GAAG,UAAU,YAAY;YACzB,GAAG,UAAU,aAAa;YAC1B,GAAG,UAAU,aAAa;SAC1B;QACD,OAAO,EAAE;YACR,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;YACvB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC;SACrB;KACD,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5E,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC/D,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC;IACrD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IAExC,IAAI,KAAK,EAAE,CAAC;QACX,OAAO,KAAK,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC;AAED,iFAAiF;AACjF,wDAAwD;AACxD,0EAA0E;AAC1E,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,EAAE;IAC3C,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO;SACpC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;SAChB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAE9B,OAAO,KAAK,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC;AAClC,CAAC,CAAC;AAEF,iEAAiE;AACjE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,EAAE;IAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAEnD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,YAAY,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACrE,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,IAAI,KAAK,QAAQ,CAAC;AACnD,CAAC,CAAC"}
|
||||||
5
node_modules/@commitlint/load/lib/utils/load-parser-opts.d.ts
generated
vendored
Normal file
5
node_modules/@commitlint/load/lib/utils/load-parser-opts.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
import { ParserPreset } from "@commitlint/types";
|
||||||
|
type Awaitable<T> = T | PromiseLike<T>;
|
||||||
|
export declare function loadParserOpts(pendingParser: string | Awaitable<ParserPreset> | (() => Awaitable<ParserPreset>) | undefined): Promise<ParserPreset | undefined>;
|
||||||
|
export {};
|
||||||
|
//# sourceMappingURL=load-parser-opts.d.ts.map
|
||||||
1
node_modules/@commitlint/load/lib/utils/load-parser-opts.d.ts.map
generated
vendored
Normal file
1
node_modules/@commitlint/load/lib/utils/load-parser-opts.d.ts.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"load-parser-opts.d.ts","sourceRoot":"","sources":["../../src/utils/load-parser-opts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAgBvC,wBAAsB,cAAc,CACnC,aAAa,EACV,MAAM,GACN,SAAS,CAAC,YAAY,CAAC,GACvB,CAAC,MAAM,SAAS,CAAC,YAAY,CAAC,CAAC,GAC/B,SAAS,GACV,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAiEnC"}
|
||||||
60
node_modules/@commitlint/load/lib/utils/load-parser-opts.js
generated
vendored
Normal file
60
node_modules/@commitlint/load/lib/utils/load-parser-opts.js
generated
vendored
Normal file
|
|
@ -0,0 +1,60 @@
|
||||||
|
function isObjectLike(obj) {
|
||||||
|
return Boolean(obj) && typeof obj === "object"; // typeof null === 'object'
|
||||||
|
}
|
||||||
|
function isParserOptsFunction(obj) {
|
||||||
|
return typeof obj.parserOpts === "function";
|
||||||
|
}
|
||||||
|
export async function loadParserOpts(pendingParser) {
|
||||||
|
if (typeof pendingParser === "function") {
|
||||||
|
return loadParserOpts(pendingParser());
|
||||||
|
}
|
||||||
|
if (!pendingParser || typeof pendingParser !== "object") {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
// Await for the module, loaded with require
|
||||||
|
const parser = await pendingParser;
|
||||||
|
// exit early, no opts to resolve
|
||||||
|
if (!parser.parserOpts) {
|
||||||
|
return parser;
|
||||||
|
}
|
||||||
|
// Pull nested parserOpts, might happen if overwritten with a module in main config
|
||||||
|
if (typeof parser.parserOpts === "object") {
|
||||||
|
// Await parser opts if applicable
|
||||||
|
parser.parserOpts = await parser.parserOpts;
|
||||||
|
if (isObjectLike(parser.parserOpts) &&
|
||||||
|
isObjectLike(parser.parserOpts.parserOpts)) {
|
||||||
|
// Preserve any user-provided properties (e.g. issuePrefixes) that
|
||||||
|
// were merged at the outer parserOpts level during config resolution,
|
||||||
|
// while unwrapping the inner module-provided parserOpts (#4640).
|
||||||
|
const { parserOpts: inner, ...rest } = parser.parserOpts;
|
||||||
|
parser.parserOpts = { ...inner, ...rest };
|
||||||
|
}
|
||||||
|
return parser;
|
||||||
|
}
|
||||||
|
// Create parser opts from factory
|
||||||
|
if (isParserOptsFunction(parser) &&
|
||||||
|
typeof parser.name === "string" &&
|
||||||
|
parser.name.startsWith("conventional-changelog-")) {
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
const result = parser.parserOpts((_, opts) => {
|
||||||
|
resolve({
|
||||||
|
...parser,
|
||||||
|
parserOpts: opts?.parserOpts,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
// If result has data or a promise, the parser doesn't support factory-init
|
||||||
|
// due to https://github.com/nodejs/promises-debugging/issues/16 it just quits, so let's use this fallback
|
||||||
|
if (result) {
|
||||||
|
Promise.resolve(result).then((opts) => {
|
||||||
|
resolve({
|
||||||
|
...parser,
|
||||||
|
parserOpts: opts?.parserOpts || opts?.parser,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return parser;
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=load-parser-opts.js.map
|
||||||
1
node_modules/@commitlint/load/lib/utils/load-parser-opts.js.map
generated
vendored
Normal file
1
node_modules/@commitlint/load/lib/utils/load-parser-opts.js.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"load-parser-opts.js","sourceRoot":"","sources":["../../src/utils/load-parser-opts.ts"],"names":[],"mappings":"AAIA,SAAS,YAAY,CAAC,GAAY;IACjC,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,2BAA2B;AAC5E,CAAC;AAED,SAAS,oBAAoB,CAC5B,GAAM;IAMN,OAAO,OAAO,GAAG,CAAC,UAAU,KAAK,UAAU,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,aAIY;IAEZ,IAAI,OAAO,aAAa,KAAK,UAAU,EAAE,CAAC;QACzC,OAAO,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,CAAC,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;QACzD,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,4CAA4C;IAC5C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;IAEnC,iCAAiC;IACjC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC;IACf,CAAC;IAED,mFAAmF;IACnF,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC3C,kCAAkC;QAClC,MAAM,CAAC,UAAU,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC;QAC5C,IACC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC;YAC/B,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,EACzC,CAAC;YACF,kEAAkE;YAClE,sEAAsE;YACtE,iEAAiE;YACjE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC,UAGH,CAAC;YAC5C,MAAM,CAAC,UAAU,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC;QAC3C,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IAED,kCAAkC;IAClC,IACC,oBAAoB,CAAC,MAAM,CAAC;QAC5B,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;QAC/B,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,yBAAyB,CAAC,EAChD,CAAC;QACF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAQ,EAAE,IAAI,EAAE,EAAE;gBACnD,OAAO,CAAC;oBACP,GAAG,MAAM;oBACT,UAAU,EAAE,IAAI,EAAE,UAAU;iBAC5B,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,2EAA2E;YAC3E,0GAA0G;YAC1G,IAAI,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;oBACrC,OAAO,CAAC;wBACP,GAAG,MAAM;wBACT,UAAU,EAAE,IAAI,EAAE,UAAU,IAAI,IAAI,EAAE,MAAM;qBAC5C,CAAC,CAAC;gBACJ,CAAC,CAAC,CAAC;YACJ,CAAC;YACD,OAAO;QACR,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC"}
|
||||||
7
node_modules/@commitlint/load/lib/utils/load-plugin.d.ts
generated
vendored
Normal file
7
node_modules/@commitlint/load/lib/utils/load-plugin.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
import { PluginRecords } from "@commitlint/types";
|
||||||
|
export interface LoadPluginOptions {
|
||||||
|
debug?: boolean;
|
||||||
|
searchPaths?: string[];
|
||||||
|
}
|
||||||
|
export default function loadPlugin(plugins: PluginRecords, pluginName: string, options?: LoadPluginOptions | boolean): Promise<PluginRecords>;
|
||||||
|
//# sourceMappingURL=load-plugin.d.ts.map
|
||||||
1
node_modules/@commitlint/load/lib/utils/load-plugin.d.ts.map
generated
vendored
Normal file
1
node_modules/@commitlint/load/lib/utils/load-plugin.d.ts.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"load-plugin.d.ts","sourceRoot":"","sources":["../../src/utils/load-plugin.ts"],"names":[],"mappings":"AAKA,OAAO,EAAU,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAqC1D,MAAM,WAAW,iBAAiB;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAWD,wBAA8B,UAAU,CACvC,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,iBAAiB,GAAG,OAAY,GACvC,OAAO,CAAC,aAAa,CAAC,CAuJxB"}
|
||||||
157
node_modules/@commitlint/load/lib/utils/load-plugin.js
generated
vendored
Normal file
157
node_modules/@commitlint/load/lib/utils/load-plugin.js
generated
vendored
Normal file
|
|
@ -0,0 +1,157 @@
|
||||||
|
import { createRequire } from "node:module";
|
||||||
|
import fs from "node:fs";
|
||||||
|
import path from "node:path";
|
||||||
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
||||||
|
import pc from "picocolors";
|
||||||
|
import { normalizePackageName, getShorthandName } from "./plugin-naming.js";
|
||||||
|
import { WhitespacePluginError, MissingPluginError } from "./plugin-errors.js";
|
||||||
|
import { resolveFromNpxCache } from "@commitlint/resolve-extends";
|
||||||
|
const require = createRequire(import.meta.url);
|
||||||
|
const __dirname = path.resolve(fileURLToPath(import.meta.url), "..");
|
||||||
|
const dynamicImport = async (id) => {
|
||||||
|
const imported = await import(path.isAbsolute(id) ? pathToFileURL(id).toString() : id);
|
||||||
|
return ("default" in imported && imported.default) || imported;
|
||||||
|
};
|
||||||
|
function sanitizeErrorMessage(message) {
|
||||||
|
return message
|
||||||
|
.replace(/\/[^/]+\/node_modules/g, "...")
|
||||||
|
.replace(/\\[^\\]+\\node_modules/g, "...");
|
||||||
|
}
|
||||||
|
function findPackageJson(dir) {
|
||||||
|
let current = dir;
|
||||||
|
const root = path.parse(dir).root;
|
||||||
|
while (current !== root) {
|
||||||
|
const pkgPath = path.join(current, "package.json");
|
||||||
|
if (fs.existsSync(pkgPath)) {
|
||||||
|
return pkgPath;
|
||||||
|
}
|
||||||
|
current = path.dirname(current);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
function normalizeOptions(options) {
|
||||||
|
if (typeof options === "boolean") {
|
||||||
|
return { debug: options };
|
||||||
|
}
|
||||||
|
return options;
|
||||||
|
}
|
||||||
|
export default async function loadPlugin(plugins, pluginName, options = {}) {
|
||||||
|
const normalized = normalizeOptions(options);
|
||||||
|
const { debug = false, searchPaths = [] } = normalized;
|
||||||
|
for (const searchPath of searchPaths) {
|
||||||
|
if (typeof searchPath !== "string" || !path.isAbsolute(searchPath)) {
|
||||||
|
throw new Error(`Invalid searchPath "${searchPath}": must be an absolute path`);
|
||||||
|
}
|
||||||
|
if (!fs.existsSync(searchPath)) {
|
||||||
|
throw new Error(`Invalid searchPath "${searchPath}": directory does not exist`);
|
||||||
|
}
|
||||||
|
if (!fs.statSync(searchPath).isDirectory()) {
|
||||||
|
throw new Error(`Invalid searchPath "${searchPath}": must be a directory, not a file`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const longName = normalizePackageName(pluginName);
|
||||||
|
const shortName = getShorthandName(longName);
|
||||||
|
if (pluginName.match(/\s+/u)) {
|
||||||
|
throw new WhitespacePluginError(pluginName, {
|
||||||
|
pluginName: longName,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const pluginKey = longName === pluginName ? shortName : pluginName;
|
||||||
|
if (!plugins[pluginKey]) {
|
||||||
|
let plugin;
|
||||||
|
let resolvedPath;
|
||||||
|
// Try to load from npx cache directories using require.resolve
|
||||||
|
const npxResolvedPath = resolveFromNpxCache(longName);
|
||||||
|
if (npxResolvedPath) {
|
||||||
|
try {
|
||||||
|
plugin = await dynamicImport(npxResolvedPath);
|
||||||
|
resolvedPath = npxResolvedPath;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
if (debug) {
|
||||||
|
console.debug(`Failed to load plugin ${longName} from npx cache: ${err.message}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Try to load from additional search paths (extended config's node_modules)
|
||||||
|
if (!plugin) {
|
||||||
|
for (const searchPath of searchPaths) {
|
||||||
|
try {
|
||||||
|
resolvedPath = require.resolve(longName, { paths: [searchPath] });
|
||||||
|
plugin = await dynamicImport(resolvedPath);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
if (debug) {
|
||||||
|
console.debug(`Failed to load plugin ${longName} from ${searchPath}: ${err.message}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Try default resolution as last resort
|
||||||
|
if (!plugin) {
|
||||||
|
try {
|
||||||
|
plugin = await dynamicImport(longName);
|
||||||
|
// Try to resolve path for debug logging
|
||||||
|
try {
|
||||||
|
resolvedPath = require.resolve(longName);
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
// Ignore - path not critical
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
let resolutionError;
|
||||||
|
try {
|
||||||
|
resolvedPath = require.resolve(longName);
|
||||||
|
}
|
||||||
|
catch (resolveErr) {
|
||||||
|
resolutionError = resolveErr;
|
||||||
|
}
|
||||||
|
if (resolutionError) {
|
||||||
|
// Resolution failed - throw MissingPluginError
|
||||||
|
if (debug) {
|
||||||
|
console.debug(`Failed to resolve plugin ${longName}: ${resolutionError.message}`);
|
||||||
|
}
|
||||||
|
throw new MissingPluginError(pluginName, sanitizeErrorMessage(resolutionError.message), {
|
||||||
|
pluginName: longName,
|
||||||
|
commitlintPath: path.resolve(__dirname, "../.."),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// Resolution succeeded but import failed - rethrow original error
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// This step is costly, so skip if debug is disabled
|
||||||
|
if (debug) {
|
||||||
|
let version = null;
|
||||||
|
if (resolvedPath) {
|
||||||
|
try {
|
||||||
|
const pkgPath = findPackageJson(path.dirname(resolvedPath));
|
||||||
|
if (pkgPath) {
|
||||||
|
version = require(pkgPath).version;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
// Do nothing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const loadedPluginAndVersion = version
|
||||||
|
? `${longName}@${version}`
|
||||||
|
: `${longName}, version unknown`;
|
||||||
|
const fromPath = resolvedPath ? ` (from ${resolvedPath})` : "";
|
||||||
|
console.log(pc.blue(`Loaded plugin ${pluginName} (${loadedPluginAndVersion})${fromPath}`));
|
||||||
|
}
|
||||||
|
if (plugin) {
|
||||||
|
plugins[pluginKey] = plugin;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
throw new MissingPluginError(pluginName, "Plugin loaded but is undefined", {
|
||||||
|
pluginName: longName,
|
||||||
|
commitlintPath: path.resolve(__dirname, "../.."),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return plugins;
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=load-plugin.js.map
|
||||||
1
node_modules/@commitlint/load/lib/utils/load-plugin.js.map
generated
vendored
Normal file
1
node_modules/@commitlint/load/lib/utils/load-plugin.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
13
node_modules/@commitlint/load/lib/utils/plugin-errors.d.ts
generated
vendored
Normal file
13
node_modules/@commitlint/load/lib/utils/plugin-errors.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
export declare class WhitespacePluginError extends Error {
|
||||||
|
__proto__: ErrorConstructor;
|
||||||
|
messageTemplate: string;
|
||||||
|
messageData: any;
|
||||||
|
constructor(pluginName?: string, data?: any);
|
||||||
|
}
|
||||||
|
export declare class MissingPluginError extends Error {
|
||||||
|
__proto__: ErrorConstructor;
|
||||||
|
messageTemplate: string;
|
||||||
|
messageData: any;
|
||||||
|
constructor(pluginName?: string, errorMessage?: string, data?: any);
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=plugin-errors.d.ts.map
|
||||||
1
node_modules/@commitlint/load/lib/utils/plugin-errors.d.ts.map
generated
vendored
Normal file
1
node_modules/@commitlint/load/lib/utils/plugin-errors.d.ts.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"plugin-errors.d.ts","sourceRoot":"","sources":["../../src/utils/plugin-errors.ts"],"names":[],"mappings":"AAAA,qBAAa,qBAAsB,SAAQ,KAAK;IAC/C,SAAS,mBAAS;IAEX,eAAe,EAAE,MAAM,CAAsB;IAC7C,WAAW,EAAE,GAAG,CAAM;gBAEjB,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE,GAAQ;CAO/C;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC5C,SAAS,mBAAS;IAEX,eAAe,EAAE,MAAM,CAAoB;IAC3C,WAAW,EAAE,GAAG,CAAC;gBAEZ,UAAU,CAAC,EAAE,MAAM,EAAE,YAAY,GAAE,MAAW,EAAE,IAAI,GAAE,GAAQ;CAO1E"}
|
||||||
21
node_modules/@commitlint/load/lib/utils/plugin-errors.js
generated
vendored
Normal file
21
node_modules/@commitlint/load/lib/utils/plugin-errors.js
generated
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
export class WhitespacePluginError extends Error {
|
||||||
|
__proto__ = Error;
|
||||||
|
messageTemplate = "whitespace-found";
|
||||||
|
messageData = {};
|
||||||
|
constructor(pluginName, data = {}) {
|
||||||
|
super(`Whitespace found in plugin name '${pluginName}'`);
|
||||||
|
this.messageData = data;
|
||||||
|
Object.setPrototypeOf(this, WhitespacePluginError.prototype);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export class MissingPluginError extends Error {
|
||||||
|
__proto__ = Error;
|
||||||
|
messageTemplate = "plugin-missing";
|
||||||
|
messageData;
|
||||||
|
constructor(pluginName, errorMessage = "", data = {}) {
|
||||||
|
super(`Failed to load plugin ${pluginName}: ${errorMessage}`);
|
||||||
|
this.messageData = data;
|
||||||
|
Object.setPrototypeOf(this, MissingPluginError.prototype);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=plugin-errors.js.map
|
||||||
1
node_modules/@commitlint/load/lib/utils/plugin-errors.js.map
generated
vendored
Normal file
1
node_modules/@commitlint/load/lib/utils/plugin-errors.js.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"plugin-errors.js","sourceRoot":"","sources":["../../src/utils/plugin-errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC/C,SAAS,GAAG,KAAK,CAAC;IAEX,eAAe,GAAW,kBAAkB,CAAC;IAC7C,WAAW,GAAQ,EAAE,CAAC;IAE7B,YAAY,UAAmB,EAAE,OAAY,EAAE;QAC9C,KAAK,CAAC,oCAAoC,UAAU,GAAG,CAAC,CAAC;QAEzD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC9D,CAAC;CACD;AAED,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC5C,SAAS,GAAG,KAAK,CAAC;IAEX,eAAe,GAAW,gBAAgB,CAAC;IAC3C,WAAW,CAAM;IAExB,YAAY,UAAmB,EAAE,eAAuB,EAAE,EAAE,OAAY,EAAE;QACzE,KAAK,CAAC,yBAAyB,UAAU,KAAK,YAAY,EAAE,CAAC,CAAC;QAE9D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC3D,CAAC;CACD"}
|
||||||
20
node_modules/@commitlint/load/lib/utils/plugin-naming.d.ts
generated
vendored
Normal file
20
node_modules/@commitlint/load/lib/utils/plugin-naming.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
/**
|
||||||
|
* Brings package name to correct format based on prefix
|
||||||
|
* @param {string} name The name of the package.
|
||||||
|
* @returns {string} Normalized name of the package
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
export declare function normalizePackageName(name: string): string;
|
||||||
|
/**
|
||||||
|
* Removes the prefix from a fullname.
|
||||||
|
* @param {string} fullname The term which may have the prefix.
|
||||||
|
* @returns {string} The term without prefix.
|
||||||
|
*/
|
||||||
|
export declare function getShorthandName(fullname: string): string;
|
||||||
|
/**
|
||||||
|
* Gets the scope (namespace) of a term.
|
||||||
|
* @param {string} term The term which may have the namespace.
|
||||||
|
* @returns {string} The namepace of the term if it has one.
|
||||||
|
*/
|
||||||
|
export declare function getNamespaceFromTerm(term: string): string;
|
||||||
|
//# sourceMappingURL=plugin-naming.d.ts.map
|
||||||
1
node_modules/@commitlint/load/lib/utils/plugin-naming.d.ts.map
generated
vendored
Normal file
1
node_modules/@commitlint/load/lib/utils/plugin-naming.d.ts.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"plugin-naming.d.ts","sourceRoot":"","sources":["../../src/utils/plugin-naming.ts"],"names":[],"mappings":"AAeA;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,UA2ChD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,UAiBhD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,UAIhD"}
|
||||||
80
node_modules/@commitlint/load/lib/utils/plugin-naming.js
generated
vendored
Normal file
80
node_modules/@commitlint/load/lib/utils/plugin-naming.js
generated
vendored
Normal file
|
|
@ -0,0 +1,80 @@
|
||||||
|
import path from "node:path";
|
||||||
|
// largely adapted from eslint's plugin system
|
||||||
|
const NAMESPACE_REGEX = /^@.*\//u;
|
||||||
|
// In eslint this is a parameter - we don't need to support the extra options
|
||||||
|
const prefix = "commitlint-plugin";
|
||||||
|
// Replace Windows with posix style paths
|
||||||
|
function convertPathToPosix(filepath) {
|
||||||
|
const normalizedFilepath = path.normalize(filepath);
|
||||||
|
const posixFilepath = normalizedFilepath.replace(/\\/gu, "/");
|
||||||
|
return posixFilepath;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Brings package name to correct format based on prefix
|
||||||
|
* @param {string} name The name of the package.
|
||||||
|
* @returns {string} Normalized name of the package
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
export function normalizePackageName(name) {
|
||||||
|
let normalizedName = name;
|
||||||
|
/**
|
||||||
|
* On Windows, name can come in with Windows slashes instead of Unix slashes.
|
||||||
|
* Normalize to Unix first to avoid errors later on.
|
||||||
|
* https://github.com/eslint/eslint/issues/5644
|
||||||
|
*/
|
||||||
|
if (normalizedName.indexOf("\\") > -1) {
|
||||||
|
normalizedName = convertPathToPosix(normalizedName);
|
||||||
|
}
|
||||||
|
if (normalizedName.charAt(0) === "@") {
|
||||||
|
/**
|
||||||
|
* it's a scoped package
|
||||||
|
* package name is the prefix, or just a username
|
||||||
|
*/
|
||||||
|
const scopedPackageShortcutRegex = new RegExp(`^(@[^/]+)(?:/(?:${prefix})?)?$`, "u"), scopedPackageNameRegex = new RegExp(`^${prefix}(?:-|$)`, "u");
|
||||||
|
if (scopedPackageShortcutRegex.test(normalizedName)) {
|
||||||
|
normalizedName = normalizedName.replace(scopedPackageShortcutRegex, `$1/${prefix}`);
|
||||||
|
}
|
||||||
|
else if (!scopedPackageNameRegex.test(normalizedName.split("/")[1])) {
|
||||||
|
/**
|
||||||
|
* for scoped packages, insert the prefix after the first / unless
|
||||||
|
* the path is already @scope/eslint or @scope/eslint-xxx-yyy
|
||||||
|
*/
|
||||||
|
normalizedName = normalizedName.replace(/^@([^/]+)\/(.*)$/u, `@$1/${prefix}-$2`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (normalizedName.indexOf(`${prefix}-`) !== 0) {
|
||||||
|
normalizedName = `${prefix}-${normalizedName}`;
|
||||||
|
}
|
||||||
|
return normalizedName;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Removes the prefix from a fullname.
|
||||||
|
* @param {string} fullname The term which may have the prefix.
|
||||||
|
* @returns {string} The term without prefix.
|
||||||
|
*/
|
||||||
|
export function getShorthandName(fullname) {
|
||||||
|
if (fullname[0] === "@") {
|
||||||
|
let matchResult = new RegExp(`^(@[^/]+)/${prefix}$`, "u").exec(fullname);
|
||||||
|
if (matchResult) {
|
||||||
|
return matchResult[1];
|
||||||
|
}
|
||||||
|
matchResult = new RegExp(`^(@[^/]+)/${prefix}-(.+)$`, "u").exec(fullname);
|
||||||
|
if (matchResult) {
|
||||||
|
return `${matchResult[1]}/${matchResult[2]}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (fullname.startsWith(`${prefix}-`)) {
|
||||||
|
return fullname.slice(prefix.length + 1);
|
||||||
|
}
|
||||||
|
return fullname;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Gets the scope (namespace) of a term.
|
||||||
|
* @param {string} term The term which may have the namespace.
|
||||||
|
* @returns {string} The namepace of the term if it has one.
|
||||||
|
*/
|
||||||
|
export function getNamespaceFromTerm(term) {
|
||||||
|
const match = NAMESPACE_REGEX.exec(term);
|
||||||
|
return match ? match[0] : "";
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=plugin-naming.js.map
|
||||||
1
node_modules/@commitlint/load/lib/utils/plugin-naming.js.map
generated
vendored
Normal file
1
node_modules/@commitlint/load/lib/utils/plugin-naming.js.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"plugin-naming.js","sourceRoot":"","sources":["../../src/utils/plugin-naming.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,8CAA8C;AAC9C,MAAM,eAAe,GAAG,SAAS,CAAC;AAClC,6EAA6E;AAC7E,MAAM,MAAM,GAAG,mBAAmB,CAAC;AAEnC,yCAAyC;AACzC,SAAS,kBAAkB,CAAC,QAAgB;IAC3C,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE9D,OAAO,aAAa,CAAC;AACtB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAChD,IAAI,cAAc,GAAG,IAAI,CAAC;IAE1B;;;;OAIG;IACH,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACvC,cAAc,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QACtC;;;WAGG;QACH,MAAM,0BAA0B,GAAG,IAAI,MAAM,CAC3C,mBAAmB,MAAM,OAAO,EAChC,GAAG,CACH,EACD,sBAAsB,GAAG,IAAI,MAAM,CAAC,IAAI,MAAM,SAAS,EAAE,GAAG,CAAC,CAAC;QAE/D,IAAI,0BAA0B,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YACrD,cAAc,GAAG,cAAc,CAAC,OAAO,CACtC,0BAA0B,EAC1B,MAAM,MAAM,EAAE,CACd,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE;;;eAGG;YACH,cAAc,GAAG,cAAc,CAAC,OAAO,CACtC,mBAAmB,EACnB,OAAO,MAAM,KAAK,CAClB,CAAC;QACH,CAAC;IACF,CAAC;SAAM,IAAI,cAAc,CAAC,OAAO,CAAC,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,cAAc,GAAG,GAAG,MAAM,IAAI,cAAc,EAAE,CAAC;IAChD,CAAC;IAED,OAAO,cAAc,CAAC;AACvB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAChD,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QACzB,IAAI,WAAW,GAAG,IAAI,MAAM,CAAC,aAAa,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEzE,IAAI,WAAW,EAAE,CAAC;YACjB,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;QAED,WAAW,GAAG,IAAI,MAAM,CAAC,aAAa,MAAM,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1E,IAAI,WAAW,EAAE,CAAC;YACjB,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,CAAC;IACF,CAAC;SAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,OAAO,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAChD,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEzC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9B,CAAC"}
|
||||||
21
node_modules/@commitlint/load/license.md
generated
vendored
Normal file
21
node_modules/@commitlint/load/license.md
generated
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2016 - present Mario Nebl
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
16
node_modules/@commitlint/load/node_modules/.bin/js-yaml
generated
vendored
Normal file
16
node_modules/@commitlint/load/node_modules/.bin/js-yaml
generated
vendored
Normal 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/@commitlint/load/node_modules/.bin/js-yaml.cmd
generated
vendored
Normal file
17
node_modules/@commitlint/load/node_modules/.bin/js-yaml.cmd
generated
vendored
Normal 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/@commitlint/load/node_modules/.bin/js-yaml.ps1
generated
vendored
Normal file
28
node_modules/@commitlint/load/node_modules/.bin/js-yaml.ps1
generated
vendored
Normal 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/@commitlint/load/node_modules/.bin/tsc
generated
vendored
Normal file
16
node_modules/@commitlint/load/node_modules/.bin/tsc
generated
vendored
Normal 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
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user