diff --git a/app/about/ai/page.tsx b/app/about/ai/page.tsx
new file mode 100644
index 00000000..6b24fb36
--- /dev/null
+++ b/app/about/ai/page.tsx
@@ -0,0 +1,97 @@
+import { Metadata } from "next";
+import { Heading } from "@/markdown/heading";
+
+export const metadata: Metadata = {
+ title: "AI質問機能について",
+ description: "my.code(); のAI質問機能の詳細と利用上の注意事項について説明します。",
+};
+
+export default function AiPage() {
+ return (
+
+
AI質問機能について
+
+ my.code(); では、学習をサポートするためのAIアシスタント機能を提供しています。
+ ご利用前に以下の事項をご確認ください。
+
+
+
AIの回答の正確性について
+
+
+
+
AIの回答は誤りを含む場合があります
+
+ AIは非常に自信を持って誤った情報を回答することがあります。
+ AIの回答を鵜呑みにせず、必ず自分自身で内容を確認するようにしてください。
+
+
+
+
+
免責事項
+
+ AI質問機能の利用によって生じたいかなる損害についても、ut.code();
+ は責任を負いません。
+
+
+
使用しているAIモデルについて
+
+ AIモデルへのアクセスには{" "}
+
+ OpenRouter
+ {" "}
+ を使用しています。使用するモデルは ut.code();
+ が選択しており、ユーザーが変更することはできません。
+ また、使用するモデルは予告なく変更される場合があります。
+
+
+
データの取り扱いについて
+
+
+
+
入力データの利用について
+
+ -
+ AIへの質問内容やこのサイトで実行したコードのデータは、AIモデルのプロバイダーによって学習データとして利用される可能性があります。
+
+ -
+ また、サービス品質の向上等を目的として、ut.code();
+ のメンバーが閲覧可能な形でサイトに保存されます。
+
+ -
+ 個人情報や機密情報は入力しないようにしてください。
+
+
+
+
+
+ );
+}
diff --git a/app/about/license/ThirdPartyLicenses.tsx b/app/about/license/ThirdPartyLicenses.tsx
new file mode 100644
index 00000000..64a81584
--- /dev/null
+++ b/app/about/license/ThirdPartyLicenses.tsx
@@ -0,0 +1,97 @@
+"use client";
+
+import { useEffect, useState } from "react";
+
+interface LicenseEntry {
+ name: string;
+ version: string;
+ author?: string;
+ repository?: string;
+ source?: string;
+ license: string;
+ licenseText?: string;
+}
+
+export function ThirdPartyLicenses() {
+ const [licenses, setLicenses] = useState(null);
+ const [error, setError] = useState(false);
+ const [expanded, setExpanded] = useState(null);
+
+ useEffect(() => {
+ fetch("/_next/static/oss-licenses.json")
+ .then((res) => {
+ if (!res.ok) throw new Error("not found");
+ return res.json();
+ })
+ .then((data) => setLicenses(data))
+ .catch(() => setError(true));
+ }, []);
+
+ if (error) {
+ return (
+
+ ライセンス情報の読み込みに失敗しました。
+
+ );
+ }
+
+ if (!licenses) {
+ return (
+
+
+ 読み込み中...
+
+ );
+ }
+
+ return (
+
+ {licenses.map((pkg) => {
+ const key = `${pkg.name}@${pkg.version}`;
+ const isOpen = expanded === key;
+ return (
+
+
setExpanded(isOpen ? null : key)}
+ />
+
+ {pkg.name}
+ v{pkg.version}
+
+ {pkg.license}
+
+
+
+ {pkg.author && (
+
+ Author:
+ {pkg.author}
+
+ )}
+ {pkg.repository && (
+
+ Repository:
+
+ {pkg.repository}
+
+
+ )}
+ {pkg.licenseText && (
+
+ {pkg.licenseText}
+
+ )}
+
+
+ );
+ })}
+
+ );
+}
diff --git a/app/about/license/page.tsx b/app/about/license/page.tsx
new file mode 100644
index 00000000..06e023e0
--- /dev/null
+++ b/app/about/license/page.tsx
@@ -0,0 +1,31 @@
+import { Metadata } from "next";
+import { Heading } from "@/markdown/heading";
+import licenseText from "../../../LICENSE?raw";
+import { ThirdPartyLicenses } from "./ThirdPartyLicenses";
+
+export const metadata: Metadata = {
+ title: "ライセンス",
+ description: "my.code(); のライセンスおよび使用しているサードパーティライブラリのライセンス情報です。",
+};
+
+export default function LicensePage() {
+ return (
+
+
ライセンス
+
+
my.code(); のライセンス
+
+ my.code(); のソースコードは MIT ライセンスのもとで公開されています。
+
+
+ {licenseText}
+
+
+
サードパーティライブラリのライセンス
+
+ my.code(); は以下のオープンソースライブラリを使用しています。
+
+
+
+ );
+}
diff --git a/app/about/runtime/page.tsx b/app/about/runtime/page.tsx
new file mode 100644
index 00000000..54a91591
--- /dev/null
+++ b/app/about/runtime/page.tsx
@@ -0,0 +1,156 @@
+import { Metadata } from "next";
+import { Heading } from "@/markdown/heading";
+
+export const metadata: Metadata = {
+ title: "コード実行環境について",
+ description: "my.code(); で使用しているコード実行環境の仕組みを説明します。",
+};
+
+export default function RuntimePage() {
+ return (
+
+
コード実行環境について
+
+ my.code(); では、プログラミング言語ごとに異なる仕組みでコードを実行しています。
+ 以下にそれぞれの言語の実行環境について説明します。
+
+
+
ブラウザ内で実行される言語
+
+ 以下の言語は、サーバーへの通信を行わず、すべてお使いのブラウザ内で実行されます。
+ そのため、インターネット接続が不安定な環境でも、一度ページが読み込まれれば実行可能です。
+
+
+
+
+
+
Python
+
+ Python は{" "}
+
+ Pyodide
+ {" "}
+ を使用して実行されます。Pyodide は CPython(Python の公式実装)を
+ WebAssembly にコンパイルしたものです。Python コードはブラウザ内の
+ Web Worker 上で動作するため、ページの描画をブロックせずに実行できます。
+
+
+
+
+
+
+
Ruby
+
+ Ruby は{" "}
+
+ ruby.wasm
+ {" "}
+ を使用して実行されます。ruby.wasm は公式の CRuby を WebAssembly
+ にコンパイルしたものです。Python と同様に Web Worker 上で動作します。
+
+
+
+
+
+
+
JavaScript
+
+ JavaScript はブラウザ自身の JavaScript エンジンを利用して実行されます。
+ コードは安全なサンドボックス環境内で評価されます。
+
+
+
+
+
+
+
TypeScript
+
+ TypeScript は{" "}
+
+ @typescript/vfs
+ {" "}
+ を使用してブラウザ内でコンパイルされ、その後 JavaScript
+ と同じ仕組みで実行されます。
+
+
+
+
+
+
外部サービスを利用して実行される言語
+
+ 以下の言語は、外部のコンパイル・実行サービス(
+
+ Wandbox
+
+ )の API を通じて実行されます。コードはサーバーに送信されてコンパイル・実行され、
+ 結果がブラウザに返されます。そのため、実行にはインターネット接続が必要です。
+ また、入力したコードが Wandbox のサーバーに送信されることをご了承ください。
+
+
+
+
+
+
C++
+
+ Wandbox の g++ (GNU C++ Compiler) を使用してコンパイル・実行されます。
+ 最新の安定版コンパイラが使用され、Boost ライブラリも利用可能です。
+ 実行時にエラーが発生した場合は、スタックトレースが表示されます。
+
+
+
+
+
+
+
Rust
+
+ Wandbox の rustc (Rust コンパイラ) を使用してコンパイル・実行されます。
+ 最新版のコンパイラが使用されます。
+
+
+
+
+
+
+
+
+
+ 外部サービスを利用して実行される言語(C++・Rust)では、入力したコードが外部サーバーに送信されます。
+ 個人情報や機密情報を含むコードは入力しないようにしてください。
+
+
+
+
+ );
+}
diff --git a/app/footer.tsx b/app/footer.tsx
index 1227d5fd..138e2627 100644
--- a/app/footer.tsx
+++ b/app/footer.tsx
@@ -1,3 +1,5 @@
+import Link from "next/link";
+
export function Footer() {
return (
);
}
diff --git a/next.config.ts b/next.config.ts
index 5c237c16..8dc7dded 100644
--- a/next.config.ts
+++ b/next.config.ts
@@ -2,6 +2,8 @@ import type { NextConfig } from "next";
import { initOpenNextCloudflareForDev } from "@opennextjs/cloudflare";
import { PyodidePlugin } from "@pyodide/webpack-plugin";
import { version as pyodideVersion } from "pyodide/package.json";
+import LicensePlugin from "webpack-license-plugin";
+import { dirname } from "node:path";
initOpenNextCloudflareForDev();
@@ -42,7 +44,7 @@ const nextConfig: NextConfig = {
},
];
},
- webpack: (config) => {
+ webpack: (config, { isServer }) => {
config.plugins.push(
new PyodidePlugin({
// public/ 以下に書き出すと404
@@ -68,6 +70,26 @@ const nextConfig: NextConfig = {
resourceQuery: /raw/,
type: "asset/source",
});
+ // クライアントビルドのみサードパーティライセンスを /_next/static/oss-licenses.json に出力
+ if (!isServer) {
+ config.plugins.push(
+ new LicensePlugin({
+ outputFilename: "static/oss-licenses.json",
+ includeNoticeText: true,
+ excludedPackageTest: (packageName /*, version*/) => {
+ return packageName.startsWith("@my-code");
+ },
+ licenseOverrides: {
+ "@better-auth/core@1.4.20": "MIT",
+ "@better-fetch/fetch@1.1.21": "MIT",
+ },
+ includePackages: () =>
+ ["tailwindcss", "@fontsource/m-plus-rounded-1c"].map((pkg) =>
+ dirname(import.meta.resolve(`${pkg}/package.json`))
+ ),
+ })
+ );
+ }
return config;
},
async redirects() {
diff --git a/package-lock.json b/package-lock.json
index 75ec6a0b..098b2e8b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -65,6 +65,7 @@
"tsx": "^4.20.6",
"typescript": "5.9.3",
"unified": "^11.0.5",
+ "webpack-license-plugin": "^4.5.1",
"wrangler": "^4.27.0"
}
},
@@ -1962,7 +1963,6 @@
"cpu": [
"arm"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -1979,7 +1979,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -1996,7 +1995,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -2013,7 +2011,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -2030,7 +2027,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -2047,7 +2043,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -2064,7 +2059,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -2081,7 +2075,6 @@
"cpu": [
"arm"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -2098,7 +2091,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -2115,7 +2107,6 @@
"cpu": [
"ia32"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -2132,7 +2123,6 @@
"cpu": [
"loong64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -2149,7 +2139,6 @@
"cpu": [
"mips64el"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -2166,7 +2155,6 @@
"cpu": [
"ppc64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -2183,7 +2171,6 @@
"cpu": [
"riscv64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -2200,7 +2187,6 @@
"cpu": [
"s390x"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -2217,7 +2203,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -2234,7 +2219,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -2251,7 +2235,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -2268,7 +2251,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -2285,7 +2267,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -2302,7 +2283,6 @@
"cpu": [
"ia32"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -2319,7 +2299,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -4858,8 +4837,7 @@
"optional": true,
"os": [
"android"
- ],
- "peer": true
+ ]
},
"node_modules/@rollup/rollup-android-arm64": {
"version": "4.59.0",
@@ -4872,8 +4850,7 @@
"optional": true,
"os": [
"android"
- ],
- "peer": true
+ ]
},
"node_modules/@rollup/rollup-darwin-arm64": {
"version": "4.59.0",
@@ -4886,8 +4863,7 @@
"optional": true,
"os": [
"darwin"
- ],
- "peer": true
+ ]
},
"node_modules/@rollup/rollup-darwin-x64": {
"version": "4.59.0",
@@ -4900,8 +4876,7 @@
"optional": true,
"os": [
"darwin"
- ],
- "peer": true
+ ]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
"version": "4.59.0",
@@ -4914,8 +4889,7 @@
"optional": true,
"os": [
"freebsd"
- ],
- "peer": true
+ ]
},
"node_modules/@rollup/rollup-freebsd-x64": {
"version": "4.59.0",
@@ -4928,8 +4902,7 @@
"optional": true,
"os": [
"freebsd"
- ],
- "peer": true
+ ]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
"version": "4.59.0",
@@ -4942,8 +4915,7 @@
"optional": true,
"os": [
"linux"
- ],
- "peer": true
+ ]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
"version": "4.59.0",
@@ -4956,8 +4928,7 @@
"optional": true,
"os": [
"linux"
- ],
- "peer": true
+ ]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
"version": "4.59.0",
@@ -4970,8 +4941,7 @@
"optional": true,
"os": [
"linux"
- ],
- "peer": true
+ ]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
"version": "4.59.0",
@@ -4984,8 +4954,7 @@
"optional": true,
"os": [
"linux"
- ],
- "peer": true
+ ]
},
"node_modules/@rollup/rollup-linux-loong64-gnu": {
"version": "4.59.0",
@@ -4998,8 +4967,7 @@
"optional": true,
"os": [
"linux"
- ],
- "peer": true
+ ]
},
"node_modules/@rollup/rollup-linux-loong64-musl": {
"version": "4.59.0",
@@ -5012,8 +4980,7 @@
"optional": true,
"os": [
"linux"
- ],
- "peer": true
+ ]
},
"node_modules/@rollup/rollup-linux-ppc64-gnu": {
"version": "4.59.0",
@@ -5026,8 +4993,7 @@
"optional": true,
"os": [
"linux"
- ],
- "peer": true
+ ]
},
"node_modules/@rollup/rollup-linux-ppc64-musl": {
"version": "4.59.0",
@@ -5040,8 +5006,7 @@
"optional": true,
"os": [
"linux"
- ],
- "peer": true
+ ]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
"version": "4.59.0",
@@ -5054,8 +5019,7 @@
"optional": true,
"os": [
"linux"
- ],
- "peer": true
+ ]
},
"node_modules/@rollup/rollup-linux-riscv64-musl": {
"version": "4.59.0",
@@ -5068,8 +5032,7 @@
"optional": true,
"os": [
"linux"
- ],
- "peer": true
+ ]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
"version": "4.59.0",
@@ -5082,8 +5045,7 @@
"optional": true,
"os": [
"linux"
- ],
- "peer": true
+ ]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
"version": "4.59.0",
@@ -5096,8 +5058,7 @@
"optional": true,
"os": [
"linux"
- ],
- "peer": true
+ ]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
"version": "4.59.0",
@@ -5110,8 +5071,7 @@
"optional": true,
"os": [
"linux"
- ],
- "peer": true
+ ]
},
"node_modules/@rollup/rollup-openbsd-x64": {
"version": "4.59.0",
@@ -5124,8 +5084,7 @@
"optional": true,
"os": [
"openbsd"
- ],
- "peer": true
+ ]
},
"node_modules/@rollup/rollup-openharmony-arm64": {
"version": "4.59.0",
@@ -5138,8 +5097,7 @@
"optional": true,
"os": [
"openharmony"
- ],
- "peer": true
+ ]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
"version": "4.59.0",
@@ -5152,8 +5110,7 @@
"optional": true,
"os": [
"win32"
- ],
- "peer": true
+ ]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
"version": "4.59.0",
@@ -5166,8 +5123,7 @@
"optional": true,
"os": [
"win32"
- ],
- "peer": true
+ ]
},
"node_modules/@rollup/rollup-win32-x64-gnu": {
"version": "4.59.0",
@@ -5180,8 +5136,7 @@
"optional": true,
"os": [
"win32"
- ],
- "peer": true
+ ]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
"version": "4.59.0",
@@ -5194,8 +5149,7 @@
"optional": true,
"os": [
"win32"
- ],
- "peer": true
+ ]
},
"node_modules/@rtsao/scc": {
"version": "1.1.0",
@@ -14017,7 +13971,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
@@ -14038,7 +13991,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
@@ -14059,7 +14011,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
@@ -14080,7 +14031,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
@@ -14101,7 +14051,6 @@
"cpu": [
"arm"
],
- "dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
@@ -14122,7 +14071,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
@@ -14143,7 +14091,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
@@ -14164,7 +14111,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
@@ -14185,7 +14131,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
@@ -14206,7 +14151,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
@@ -14227,7 +14171,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
@@ -14299,8 +14242,7 @@
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
"integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
"devOptional": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/lodash.clonedeep": {
"version": "4.5.0",
@@ -16039,6 +15981,36 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/needle": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/needle/-/needle-3.5.0.tgz",
+ "integrity": "sha512-jaQyPKKk2YokHrEg+vFDYxXIHTCBgiZwSHOoVx/8V3GIBS8/VN6NdVRmg8q1ERtPkMvmOvebsgga4sAj5hls/w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "iconv-lite": "^0.6.3",
+ "sax": "^1.2.4"
+ },
+ "bin": {
+ "needle": "bin/needle"
+ },
+ "engines": {
+ "node": ">= 4.4.x"
+ }
+ },
+ "node_modules/needle/node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/negotiator": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz",
@@ -18222,6 +18194,16 @@
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"license": "MIT"
},
+ "node_modules/sax": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz",
+ "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=11.0.0"
+ }
+ },
"node_modules/scheduler": {
"version": "0.27.0",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
@@ -18726,6 +18708,41 @@
"license": "Apache-2.0",
"peer": true
},
+ "node_modules/spdx-exceptions": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
+ "dev": true,
+ "license": "CC-BY-3.0"
+ },
+ "node_modules/spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-expression-validate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-expression-validate/-/spdx-expression-validate-2.0.0.tgz",
+ "integrity": "sha512-b3wydZLM+Tc6CFvaRDBOF9d76oGIHNCLYFeHbftFXUWjnfZWganmDmvtM5sm1cRwJc/VDBMLyGGrsLFd1vOxbg==",
+ "dev": true,
+ "license": "(MIT AND CC-BY-3.0)",
+ "dependencies": {
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-license-ids": {
+ "version": "3.0.23",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz",
+ "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==",
+ "dev": true,
+ "license": "CC0-1.0"
+ },
"node_modules/split2": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
@@ -19484,7 +19501,6 @@
"cpu": [
"ppc64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -19501,7 +19517,6 @@
"cpu": [
"arm"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -19518,7 +19533,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -19535,7 +19549,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -19552,7 +19565,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -19569,7 +19581,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -19586,7 +19597,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -19603,7 +19613,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -19620,7 +19629,6 @@
"cpu": [
"arm"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -19637,7 +19645,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -19654,7 +19661,6 @@
"cpu": [
"ia32"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -19671,7 +19677,6 @@
"cpu": [
"loong64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -19688,7 +19693,6 @@
"cpu": [
"mips64el"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -19705,7 +19709,6 @@
"cpu": [
"ppc64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -19722,7 +19725,6 @@
"cpu": [
"riscv64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -19739,7 +19741,6 @@
"cpu": [
"s390x"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -19756,7 +19757,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -19773,7 +19773,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -19790,7 +19789,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -19807,7 +19805,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -19824,7 +19821,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -19841,7 +19837,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -19858,7 +19853,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -19875,7 +19869,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -19892,7 +19885,6 @@
"cpu": [
"ia32"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -19909,7 +19901,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -20490,7 +20481,6 @@
"os": [
"aix"
],
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -20507,7 +20497,6 @@
"os": [
"android"
],
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -20524,7 +20513,6 @@
"os": [
"android"
],
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -20541,7 +20529,6 @@
"os": [
"android"
],
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -20558,7 +20545,6 @@
"os": [
"darwin"
],
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -20575,7 +20561,6 @@
"os": [
"darwin"
],
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -20592,7 +20577,6 @@
"os": [
"freebsd"
],
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -20609,7 +20593,6 @@
"os": [
"freebsd"
],
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -20626,7 +20609,6 @@
"os": [
"linux"
],
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -20643,7 +20625,6 @@
"os": [
"linux"
],
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -20660,7 +20641,6 @@
"os": [
"linux"
],
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -20677,7 +20657,6 @@
"os": [
"linux"
],
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -20694,7 +20673,6 @@
"os": [
"linux"
],
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -20711,7 +20689,6 @@
"os": [
"linux"
],
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -20728,7 +20705,6 @@
"os": [
"linux"
],
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -20745,7 +20721,6 @@
"os": [
"linux"
],
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -20762,7 +20737,6 @@
"os": [
"linux"
],
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -20779,7 +20753,6 @@
"os": [
"netbsd"
],
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -20796,7 +20769,6 @@
"os": [
"netbsd"
],
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -20813,7 +20785,6 @@
"os": [
"openbsd"
],
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -20830,7 +20801,6 @@
"os": [
"openbsd"
],
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -20847,7 +20817,6 @@
"os": [
"openharmony"
],
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -20864,7 +20833,6 @@
"os": [
"sunos"
],
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -20881,7 +20849,6 @@
"os": [
"win32"
],
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -20898,7 +20865,6 @@
"os": [
"win32"
],
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -20915,7 +20881,6 @@
"os": [
"win32"
],
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -21274,13 +21239,32 @@
}
}
},
+ "node_modules/webpack-license-plugin": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/webpack-license-plugin/-/webpack-license-plugin-4.5.1.tgz",
+ "integrity": "sha512-WbjMSMPHzFePCSQJqP0qFskGPSwdf3JxIoXa1SK3d1hCXQee7KUrIb+riyXUId71kcHOSyE12pTyrhMl1ozszA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^5.3.0",
+ "lodash": "^4.17.21",
+ "needle": "^3.2.0",
+ "spdx-expression-validate": "^2.0.0",
+ "webpack-sources": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ },
+ "peerDependencies": {
+ "webpack": ">=4.0.0 < 6.0.0"
+ }
+ },
"node_modules/webpack-sources": {
"version": "3.3.4",
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.4.tgz",
"integrity": "sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=10.13.0"
}
diff --git a/package.json b/package.json
index e26cec42..16ac8a56 100644
--- a/package.json
+++ b/package.json
@@ -76,6 +76,7 @@
"tsx": "^4.20.6",
"typescript": "5.9.3",
"unified": "^11.0.5",
+ "webpack-license-plugin": "^4.5.1",
"wrangler": "^4.27.0"
}
}