diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..03bd1d2 --- /dev/null +++ b/.npmignore @@ -0,0 +1,10 @@ +.esdoc.json +.eslintrc.json +.prettierrc +.vscode/ +LICENSE +documents/ +jest.config.js +task.todo +tsconfig.json +/src \ No newline at end of file diff --git a/.prettierrc b/.prettierrc index b2095be..05c3b38 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,4 +1,5 @@ { "semi": false, + "printWidth": 120, "singleQuote": true } diff --git a/documents/if.md b/documents/if.md index b676f4f..0057352 100644 --- a/documents/if.md +++ b/documents/if.md @@ -2,7 +2,8 @@ ## 概要 -入力した式で処理を分岐させることができる +入力した式で処理を分岐させることができる。 +属性として、ほかのタグに記述したときは、式がtrueと評価されたときに、タグを実行する。 ## 引数詳細 @@ -12,7 +13,7 @@ condition: 評価するJavaScript式 then: 式がtrueの場合、実行されるscenarioオブジェクト else: 式がfalseの場合、実行されるscenarioオブジェクト -## webTaleScript +## webTaleScript(タグ) ```html @@ -26,14 +27,39 @@ else: 式がfalseの場合、実行されるscenarioオブジェクト ``` -## scenarioオブジェクト +## webTaleScript(属性) + +```html + + + hogeは、1だったよ! + + +``` + +## scenarioオブジェクト(タグ) ```json { type: 'if', condition: '', - then: [], - else:[] + content: { + type:'then', + content: [], + }, + content: { + type:'else', + content: [], + } +} +``` + +## scenarioオブジェクト(属性) + +```json +{ + type: 'text', + if: '', } ``` diff --git a/documents/spec.md b/documents/spec.md index ec0cbcc..493596f 100644 --- a/documents/spec.md +++ b/documents/spec.md @@ -76,14 +76,76 @@ drawer <- canvasに描画する奴(画像の移動やフィルターの処理 soundObject <- 音楽再生・操作するやつ imageObject <- 画像保持・フィルター操作するやつ -TIPS: 対応するWTSがある場合のみ、説明に記述がある +## 独自マークアップ言語について -### セーブ&ロード機能 +WebTaleScript(以下:WTS)という名称で、HTMLに似たマークアップ言語で、ゲームの進行を制御できる。 +WTSは、対応するJSに変換される。 +タグ名と要素はエンジンのインターフェースで定義しているメソッド名と引数名と同じ名前である。 +シーンファイルとは、WebTaleScript(WTS)とJavaScriptの両方でゲームの進行制御を記述するためのファイルである。 +scenarioとLogicの二つのセクションがあり、ゲーム進行制御をscenarioセクションはWTSで、Logicセクションは、scenarioセクションで使う処理や背景のデータ、変数の定義をJavaScriptで記述する。 -進行状況をLocalStorageからJSONに保存またはJSONから読込 +```vue +%% WebTaleScriptのサンプル %% + + +   + + +   + +  夏の陽気が残る9月の初旬 +  < + name="燈火">「先輩、別れてください」 +  < + name="智樹"> 「え、ごめん。今・・・なんて」 +  聞き取れなかったわけじゃない。 +  言われた意味が分からなかった。 +  理解したくなかった。 +  < + name="燈火">「最初から好きじゃなかったんです・・・」 +  < + name="智樹"> 「「そんな・・・そんなこと・・・」 +   視界が揺らぎ、自分が立っているのか分からなくなる。 +   額からはイヤな汗が首筋を伝わり落ちる。 +   これは夢だとそうも思いたかった。 +   目が覚めて、授業中に寝てしまって、みんなで昼飯をとって、そんないつも通りに生活があるんだと。 +   だが、そんな都合のいい現実は有るはずがないのだ。 +   そして、すれ違い瞬間、最後の言葉が俺の耳に届いた。 +   < + name="燈火">「さよなら・・・」 + + +const sceneConfig = { +  background: '屋上.jpg' +} + +``` -- save(id: number) // 指定したIDにあるパスへJSONを保存する。` -- load(id: number) // 指定したIDにあるパスからJSONを読む込むする。 +```Javascript +// このようなJSに変換される + export let index = 0 + export const sceneConfig ={ + background: '屋上.jpg' + }; +export const scenario = [ + {type: "choice", prompt: "プロローグをスキップしますか?", items: [{onSelect: [{type: "jump", index: 1}],label: "はい"},{onSelect: undefined,label: "いいえ"}]}, + {type: text, msg: "夏の陽気が残る9月の初旬"}, + {type: +, name:"燈火",msg: "先輩、別れてください"}, + {type: +, name: "智樹", msg: "え、ごめん。今・・・なんて"}, + {type: text, msg: "聞き取れなかったわけじゃない。/n言われた意味が分からなかった。/n理解したくなかった。"} + ] + // 他のロジック +export const skipScenario = () => { + index = 1 +} +``` ### テキスト表示 @@ -103,12 +165,15 @@ HTMLのメッセージウィンドウへ入力された条件でテキストを - overview: メッセージをクリアする -- say(name:string, pattern: string, voice: string, ...text) - - overview: textのwrapperでキャラクターのセリフの時に使うことを想定している。キャラが表示されていないときは、表示する - - name: リソース定義オブジェクトのcharaのnameの値、定義していない値を指定可能。 - - pattern: リソース定義オブジェクトのcharaのfacesの値、未定義のキャラの場合、無視される。 - - voice: 再生するボイスファイルを指定できる。 - - 対応するWTS:`msg` +- + +say(name:string, pattern: string, voice: string, ...text) + +- overview: textのwrapperでキャラクターのセリフの時に使うことを想定している。キャラが表示されていないときは、表示する +- name: リソース定義オブジェクトのcharaのnameの値、定義していない値を指定可能。 +- pattern: リソース定義オブジェクトのcharaのfacesの値、未定義のキャラの場合、無視される。 +- voice: 再生するボイスファイルを指定できる。 +- 対応するWTS:`msg` ### 画像の表示 @@ -200,26 +265,28 @@ HTMLのメッセージウィンドウへ入力された条件でテキストを - メソッド呼び出し - call(name: string) - - overview: logicセクションで宣言したメソッドを呼び出す。 - - name: 呼び出すメソッドの名称を記載する - - restriction: 変数や関数の定義は実行後に消えるため、ほかのタグから呼び出せない。 + - overview: logicセクションで宣言したメソッドを呼び出す。 + - name: 呼び出すメソッドの名称を記載する + - restriction: 変数や関数の定義は実行後に消えるため、ほかのタグから呼び出せない。 + - リソース定義 - define(type: ['audio'|'se'|'voice'|'chara'|'picture'|'background'|'key'], name: string, path: string) - - リソースのパスを任意の名前と紐づけたオブジェクトを対応するオブジェクトに追加する。 - - Type:登録オブジェクトの種類を指定できる - - 'audio': 主に、BGMなどの音楽ファイル - - 'se':SE向けの音声ファイル - - 'voice':キャラクターボイス - - 'chara':キャラクターの立ち絵 - - 'picture':その他の画像 - - 'background':背景画像 - - 'key':ユーザー任意のユーザーショートカット - - name: オブジェクト内での識別名 - - path: 対応するリソースのパス(キーボードショートカットの場合はショートカットの組み合わせ) + - リソースのパスを任意の名前と紐づけたオブジェクトを対応するオブジェクトに追加する。 + - Type:登録オブジェクトの種類を指定できる + - 'audio': 主に、BGMなどの音楽ファイル + - 'se':SE向けの音声ファイル + - 'voice':キャラクターボイス + - 'chara':キャラクターの立ち絵 + - 'picture':その他の画像 + - 'background':背景画像 + - 'key':ユーザー任意のユーザーショートカット + - name: オブジェクト内での識別名 + - path: 対応するリソースのパス(キーボードショートカットの場合はショートカットの組み合わせ) + - 画面の表示・移動 -次のシーンに移動 - 対応するWTS: `` -- 選択肢の表示・定義 +- 選択肢の表示・定義 - choice(id:number, prompt: String, Items:{onSelect: function, label: String, src?: String}) - 対応するWTS: @@ -229,156 +296,106 @@ HTMLのメッセージウィンドウへ入力された条件でテキストを ``` -- 進行制御 - jump(index: number) - 対応するWTS: `` +- 進行制御 + - jump(index: number) + - 対応するWTS: `` + - if (condition: string, then: webTaleScript, else: webTaleScript) + - 対応するWTS + + ```html + + + + + + + + + ``` + +- セーブ&ロード機能 + - 進行状況をJSONに保存またはJSONから読込 + - saveDataList.jsonを起動時に読み込む + +- save(id: number, data:Object) // 指定したIDにあるパスへJSONを保存する。` +- load(id: number) // 指定したIDにあるパスからJSONを読む込むする。 + +- セーブデータ形式 + - 以下を基本として、開発者の指定したオブジェクトを保存する。 + + ```javascript + [ + { + displayedImage // 表示しているキャラと座標・表情 + scnario: 'title', // どのシーンなのか。 + index: '0' // テキスト行 + // これ以降ゲーム開発者の指定したデータ + } + ] + ``` ### 管理変数・オブジェクト構造 +- Scenarioオブジェクト + - WebTaleScriptを変換したJSONのこと + - WebTaleKitはこのオブジェクトを読み取り・書き込むことでゲームを実行する。 + - 以下のScenarioオブジェクトの形式例であり、typeでタグの種類を示し、contentの中に文字列などデータが格納されている。 +  オプションは、`オプション名:値`の形式で、Scenarioオブジェクトにプロパティとして追加される。 + + ```json + { + type: 'tagName', + content: { + }, + } + ``` + - リソース定義オブジェクト - リソースのパスと名前を紐づけることができる。 - 名前で呼び出すリソースを指定できるようになる。 - ルートディレクトリに下記のように記述したconfig.jsを置くと、そこを読み込んで、設定してくれる。 - importで外部JSに分けたコンフィグを読み込める。 -```js -// リソース種別: {リソース名:リソースのパス} -// 変数名はリソース定義メソッド(define)のTypeを参照すること。 -export const audio = [{ title: '/audio/mainTheme.wav' }] -export const se = [{ corsor: '/audio/cousor.wav' }] -``` + ```javascript + // リソース種別: {リソース名:リソースのパス} + // 変数名はリソース定義メソッド(define)のTypeを参照すること。 + export const audio = [{ title: '/audio/mainTheme.wav' }] + export const se = [{ corsor: '/audio/cousor.wav' }] + ``` - バックログ管理一次配列 -```javascript -;['テキスト1', 'テキスト2', 'テキスト3'] -``` - -- キャラクター表示座標管理一次配列 - -```javascript -[ - charaName: {x:0, y:0, pos: 0} -] -``` - -- 表示している背景画像名/現在実行中のシナリオスクリプトの名前/次に読む行の数 - -```javascript -{ - background: 'hoge.png', - scnario: 'title', - index: '0' -} -``` - -- シーンごとに選択された選択肢のIDのオブジェクト配列 - -```js -selected: { - '{scene名}':[id] -} -``` - -- セーブファイル管理配列 - -```javascript -save: ['save/save202401210420.json'] -``` + ```javascript + ['テキスト1', 'テキスト2', 'テキスト3'] + ``` - ゲーム設定ファイルまたはオブジェクト - オブジェクト(sceneConfig)の場合は、そのシーン全体。ファイル(コンフィグファイル)の場合は、ゲーム全体で設定が適応される。 - 解像度や文字の大きさ、共通で使うメッセージウインドウや選択肢ボタンの画像パスなどを設定できる。 - 設定の優先度は、WTS > sceneConfig > configファイル + - リソース管理オブジェクト - WTSで音楽再生・画像表示をした際に、メソッドから返される管理用オブジェクトが格納される。hideなどの既存のリソースを操作するメソッドで操作対象を特定するのに使う。 -```javascript -// プロパティ名は、pathないしname。値は戻り値のオブジェクトが入っている。 - { - '/audio/mainTheme.wav': {}, - 'cursor': {} - } -``` - -## その他仕様 - -セーブデータに記録するもの - -- 表示しているキャラと座標・表情 -- テキスト行 -- どのシーンなのか。 -- フラグの状態 - 保存場所はlocalStorage + ```javascript + // プロパティ名は、pathないしname。値は戻り値のオブジェクトが入っている。 +  { +  '/audio/mainTheme.wav': {}, +  'cursor': {} +  } + ``` -管理用オブジェクト +リソース操作用オブジェクト - soundやshowの戻り値として返されるオブジェクト。これを使って、画像にフィルターをかけたり、音楽の操作を行う。 -```javascript -{ - id: string, //リソースに振られる一意な値 - objejct: obejct //音声リソースの場合は、audioContext。画像の場合は、表示している子レイヤーの番号が入っている。 -} - -``` - -## 独自マークアップ言語について + ```javascript + { + id: string, //リソースに振られる一意な値 + objejct: obejct //音声リソースの場合は、audioContext。画像の場合は、表示している子レイヤーの番号が入っている。 + } -WebTaleScript(以下:WTS)という名称で、HTMLに似たマークアップ言語で、ゲームの進行を制御できる。 -WTSは、対応するJSに変換される。 -タグ名と要素はエンジンのインターフェースで定義しているメソッド名と引数名と同じ名前である。 -シーンファイルとは、WebTaleScript(WTS)とJavaScriptの両方でゲームの進行制御を記述するためのファイルである。 -scenarioとLogicの二つのセクションがあり、ゲーム進行制御をscenarioセクションはWTSで、Logicセクションは、scenarioセクションで使う処理や背景のデータ、変数の定義をJavaScriptで記述する。 - -```vue -%% WebTaleScriptのサンプル %% - - -   - - -   - -  夏の陽気が残る9月の初旬 -  「先輩、別れてください」 「え、ごめん。今・・・なんて」 -  聞き取れなかったわけじゃない。 -  言われた意味が分からなかった。 -  理解したくなかった。 -  「最初から好きじゃなかったんです・・・」 「「そんな・・・そんなこと・・・」 -   視界が揺らぎ、自分が立っているのか分からなくなる。 -   額からはイヤな汗が首筋を伝わり落ちる。 -   これは夢だとそうも思いたかった。 -   目が覚めて、授業中に寝てしまって、みんなで昼飯をとって、そんないつも通りに生活があるんだと。 -   だが、そんな都合のいい現実は有るはずがないのだ。 -   そして、すれ違い瞬間、最後の言葉が俺の耳に届いた。 -   「さよなら・・・」 - - -const sceneConfig = { -  background: '屋上.jpg' -} - -``` - -```Javascript -// このようなJSに変換される - export let index = 0 - export const sceneConfig ={ - background: '屋上.jpg' - }; -export const scenario = [ - {type: "choice", prompt: "プロローグをスキップしますか?", items: [{onSelect: [{type: "jump", index: 1}],label: "はい"},{onSelect: undefined,label: "いいえ"}]}, - {type: text, msg: "夏の陽気が残る9月の初旬"}, - {type: say, name:"燈火",msg: "先輩、別れてください"}, - {type: say, name: "智樹", msg: "え、ごめん。今・・・なんて"}, - {type: text, msg: "聞き取れなかったわけじゃない。/n言われた意味が分からなかった。/n理解したくなかった。"} - ] - // 他のロジック -export const skipScenario = () => { - index = 1 -} -``` + ``` ## ディレクトリ構造 diff --git a/engineConfig.json b/engineConfig.json index 3f1ead0..a35443c 100644 --- a/engineConfig.json +++ b/engineConfig.json @@ -2,8 +2,8 @@ "title": "NO TITLE", "description": "NO DESCRIPTION", "resolution": { - "width": 800, - "height": 600 + "width": 1280, + "height": 720 }, "fullScreen": "false", "url": "" diff --git a/package-lock.json b/package-lock.json index d60fc40..53ca9b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,17 @@ { "name": "webtalekit", - "version": "0.2.1", + "version": "0.2.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "webtalekit", - "version": "0.2.1", + "version": "0.2.3", "license": "MIT", "dependencies": { "html-minifier": "^4.0.0", "html-to-json-parser": "^2.0.1", + "rimraf": "^6.0.1", "stacktrace-js": "^2.0.2", "storejs": "^2.1.0" }, @@ -23,6 +24,7 @@ "esdoc": "^1.1.0", "esdoc-standard-plugin": "^1.0.0", "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", "eslint-config-standard": "^17.1.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-n": "^16.6.2", @@ -763,16 +765,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -788,18 +780,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@eslint/js": { "version": "8.57.0", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", @@ -823,28 +803,6 @@ "node": ">=10.10.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -868,7 +826,6 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -885,7 +842,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, "engines": { "node": ">=12" }, @@ -897,7 +853,6 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, "engines": { "node": ">=12" }, @@ -908,14 +863,12 @@ "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -932,7 +885,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -947,7 +899,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -1303,16 +1254,6 @@ } } }, - "node_modules/@jest/reporters/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/@jest/reporters/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1329,26 +1270,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/reporters/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@jest/reporters/node_modules/jest-worker": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", @@ -1379,18 +1300,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/@jest/reporters/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@jest/reporters/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -1661,7 +1570,6 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, "optional": true, "engines": { "node": ">=14" @@ -2403,7 +2311,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -2412,7 +2319,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -2899,8 +2805,7 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/batch": { "version": "0.6.1", @@ -3010,7 +2915,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -3438,7 +3342,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -3455,8 +3358,7 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/colorette": { "version": "2.0.20", @@ -4117,8 +4019,7 @@ "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "node_modules/ecc-jsbn": { "version": "0.1.2", @@ -4158,8 +4059,7 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/encodeurl": { "version": "1.0.2", @@ -4753,6 +4653,18 @@ "eslint": ">=6.0.0" } }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, "node_modules/eslint-config-standard": { "version": "17.1.0", "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", @@ -4879,16 +4791,6 @@ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, - "node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", @@ -4910,18 +4812,6 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-import/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -4959,16 +4849,6 @@ "eslint": ">=7.0.0" } }, - "node_modules/eslint-plugin-n/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/eslint-plugin-n/node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -4996,18 +4876,6 @@ "node": ">=10" } }, - "node_modules/eslint-plugin-n/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/eslint-plugin-n/node_modules/semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", @@ -5069,16 +4937,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -5149,18 +5007,6 @@ "node": ">= 0.8.0" } }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/eslint/node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -5619,6 +5465,22 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/flatted": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", @@ -5658,7 +5520,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -5674,7 +5535,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -5688,7 +5548,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "engines": { "node": ">=8" } @@ -5697,7 +5556,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -5709,7 +5567,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "engines": { "node": ">=8" } @@ -5718,7 +5575,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, "engines": { "node": ">=14" }, @@ -5730,7 +5586,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -5939,6 +5794,27 @@ "assert-plus": "^1.0.0" } }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -6927,7 +6803,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -7171,8 +7046,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/isobject": { "version": "3.0.1", @@ -7683,16 +7557,6 @@ } } }, - "node_modules/jest-config/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/jest-config/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -7709,38 +7573,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-config/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-config/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/jest-config/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -8271,16 +8103,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-runtime/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/jest-runtime/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -8297,38 +8119,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-runtime/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-runtime/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/jest-runtime/node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -8920,6 +8710,14 @@ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==" }, + "node_modules/lru-cache": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.0.tgz", + "integrity": "sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==", + "engines": { + "node": "20 || >=22" + } + }, "node_modules/make-dir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", @@ -9102,6 +8900,28 @@ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimatch/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", @@ -9109,10 +8929,9 @@ "dev": true }, "node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "engines": { "node": ">=16 || 14 >=14.17" } @@ -9462,6 +9281,11 @@ "node": ">=6" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==" + }, "node_modules/param-case": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", @@ -10301,60 +10125,89 @@ } }, "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", + "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", "dependencies": { - "glob": "^7.1.3" + "glob": "^11.0.0", + "package-json-from-dist": "^1.0.0" }, "bin": { - "rimraf": "bin.js" + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, + "node_modules/rimraf/node_modules/glob": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", + "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, + "node_modules/rimraf/node_modules/jackspeak": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz", + "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@isaacs/cliui": "^8.0.2" }, "engines": { - "node": "*" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/run-applescript": { @@ -10931,7 +10784,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/storejs/-/storejs-2.1.0.tgz", "integrity": "sha512-0AZJCucZVGYGAEmkK44xf7rkUEhsPuocSHwTcAU3HEyGWl/VYRsc9FURznqxPWVdeIfCrleWalRcwskppxeDYA==", - "dev": true, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } @@ -10962,7 +10814,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -10977,7 +10828,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -11036,7 +10886,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -11049,7 +10898,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -11196,48 +11044,6 @@ "node": ">=8" } }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/test-exclude/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -12466,7 +12272,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -13099,16 +12904,6 @@ "strip-json-comments": "^3.1.1" }, "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -13117,54 +12912,24 @@ "requires": { "type-fest": "^0.20.2" } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } } } }, "@eslint/js": { "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", - "dev": true - }, - "@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true + }, + "@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" } }, "@humanwhocodes/module-importer": { @@ -13183,7 +12948,6 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, "requires": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -13196,26 +12960,22 @@ "ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" }, "ansi-styles": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" }, "emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, "requires": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -13226,7 +12986,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "requires": { "ansi-regex": "^6.0.1" } @@ -13235,7 +12994,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, "requires": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -13508,16 +13266,6 @@ "v8-to-istanbul": "^9.0.1" }, "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -13528,20 +13276,6 @@ "supports-color": "^7.1.0" } }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "jest-worker": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", @@ -13565,15 +13299,6 @@ } } }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -13793,7 +13518,6 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, "optional": true }, "@sinclair/typebox": { @@ -14462,14 +14186,12 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -14859,8 +14581,7 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "batch": { "version": "0.6.1", @@ -14956,7 +14677,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, "requires": { "balanced-match": "^1.0.0" } @@ -15264,7 +14984,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -15278,8 +14997,7 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "colorette": { "version": "2.0.20", @@ -15786,8 +15504,7 @@ "eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "ecc-jsbn": { "version": "0.1.2", @@ -15821,8 +15538,7 @@ "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "encodeurl": { "version": "1.0.2", @@ -16299,16 +16015,6 @@ "text-table": "^0.2.0" }, "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -16355,15 +16061,6 @@ "type-check": "~0.4.0" } }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, "optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -16441,6 +16138,13 @@ "dev": true, "requires": {} }, + "eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "requires": {} + }, "eslint-config-standard": { "version": "17.1.0", "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", @@ -16526,16 +16230,6 @@ "tsconfig-paths": "^3.15.0" }, "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", @@ -16554,15 +16248,6 @@ "esutils": "^2.0.2" } }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, "semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -16590,16 +16275,6 @@ "semver": "^7.5.3" }, "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -16618,15 +16293,6 @@ "yallist": "^4.0.0" } }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, "semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", @@ -16956,6 +16622,17 @@ "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, "flatted": { @@ -16983,7 +16660,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, "requires": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -16993,7 +16669,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -17003,14 +16678,12 @@ "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "requires": { "shebang-regex": "^3.0.0" } @@ -17018,20 +16691,17 @@ "shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -17180,6 +16850,20 @@ "assert-plus": "^1.0.0" } }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -17937,8 +17621,7 @@ "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-generator-fn": { "version": "2.1.0", @@ -18091,8 +17774,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "isobject": { "version": "3.0.1", @@ -18460,16 +18142,6 @@ "strip-json-comments": "^3.1.1" }, "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -18480,29 +18152,6 @@ "supports-color": "^7.1.0" } }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -18919,16 +18568,6 @@ "strip-bom": "^4.0.0" }, "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -18939,29 +18578,6 @@ "supports-color": "^7.1.0" } }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, "strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -19454,6 +19070,11 @@ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==" }, + "lru-cache": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.0.tgz", + "integrity": "sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==" + }, "make-dir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", @@ -19586,6 +19207,27 @@ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + } + } + }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", @@ -19593,10 +19235,9 @@ "dev": true }, "minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" }, "ms": { "version": "2.1.2", @@ -19858,6 +19499,11 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, + "package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==" + }, "param-case": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", @@ -20484,45 +20130,51 @@ "dev": true }, "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", + "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", "requires": { - "glob": "^7.1.3" + "glob": "^11.0.0", + "package-json-from-dist": "^1.0.0" }, "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, + "glob": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", + "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" } }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, + "jackspeak": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz", + "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" } }, "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", "requires": { - "brace-expansion": "^1.1.7" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" } } } @@ -20989,8 +20641,7 @@ "storejs": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/storejs/-/storejs-2.1.0.tgz", - "integrity": "sha512-0AZJCucZVGYGAEmkK44xf7rkUEhsPuocSHwTcAU3HEyGWl/VYRsc9FURznqxPWVdeIfCrleWalRcwskppxeDYA==", - "dev": true + "integrity": "sha512-0AZJCucZVGYGAEmkK44xf7rkUEhsPuocSHwTcAU3HEyGWl/VYRsc9FURznqxPWVdeIfCrleWalRcwskppxeDYA==" }, "string_decoder": { "version": "1.3.0", @@ -21015,7 +20666,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -21026,7 +20676,6 @@ "version": "npm:string-width@4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -21070,7 +20719,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -21079,7 +20727,6 @@ "version": "npm:strip-ansi@6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -21167,41 +20814,6 @@ "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } } }, "text-table": { @@ -22055,7 +21667,6 @@ "version": "npm:wrap-ansi@7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", diff --git a/package.json b/package.json index 6fcfbdf..f1a6f39 100644 --- a/package.json +++ b/package.json @@ -1,22 +1,25 @@ { "name": "webtalekit", - "version": "0.2.1", + "version": "0.2.3", "description": "Web知識でノベルゲーを作ることを目指したやつ", "main": "./src/index.js", "scripts": { + "lint": "eslint . --ext .ts --ext .js", "test": "jest", - "build": "rm -rf ./dist/ && tsc && cp -r package.json engineConfig.json parser/ dist/ && cp -r src/utils/ dist/src && cp src/core/index.js src/core/resourceManager.js dist/src/core/ && npm pack ./dist/" + "build": "rimraf ./dist/ && tsc && cp -r package.json engineConfig.json parser/ dist/ && cp -r src/utils/ dist/src && cp src/core/index.js src/core/resourceManager.js dist/src/core/", + "prepare": "npm run build" }, "bin": { - "wtc": "./parser/cli.js" + "wtc": "parser/cli.js" }, "author": "EndoHizumi", "license": "MIT", "dependencies": { "html-minifier": "^4.0.0", "html-to-json-parser": "^2.0.1", - "storejs": "^2.1.0", - "stacktrace-js": "^2.0.2" + "rimraf": "^6.0.1", + "stacktrace-js": "^2.0.2", + "storejs": "^2.1.0" }, "devDependencies": { "@types/jest": "^29.5.12", @@ -24,6 +27,7 @@ "esdoc": "^1.1.0", "esdoc-standard-plugin": "^1.0.0", "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", "eslint-config-standard": "^17.1.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-n": "^16.6.2", diff --git a/src/core/drawer.ts b/src/core/drawer.ts index c10e6d4..fd58288 100644 --- a/src/core/drawer.ts +++ b/src/core/drawer.ts @@ -1,5 +1,6 @@ import { ImageObject } from '../resource/ImageObject' import { outputLog } from '../utils/logger' +import { sleep } from '../utils/waitUtil' /* drawerの目的 @@ -7,12 +8,14 @@ import { outputLog } from '../utils/logger' */ export class Drawer { private gameScreen: HTMLElement - private nameview!: HTMLElement + private nameView!: HTMLElement private messageText!: HTMLElement - private waitCircle!: HTMLElement private interactiveView!: HTMLElement private ctx!: CanvasRenderingContext2D + private screenHtml!: HTMLElement private config: any + isSkip: boolean = false + readySkip: boolean = false constructor(gameContainer: HTMLElement) { this.gameScreen = gameContainer @@ -22,18 +25,18 @@ export class Drawer { this.adjustScale(this.gameScreen) } - setScreen(screenHtml: HTMLElement) { - this.nameview = screenHtml.querySelector('#nameView') as HTMLElement + setScreen(screenHtml: HTMLElement, resolution: { width: number; height: number }) { + this.screenHtml = screenHtml + this.nameView = screenHtml.querySelector('#nameView') as HTMLElement this.messageText = screenHtml.querySelector('#messageView') as HTMLElement - this.waitCircle = screenHtml.querySelector('#waitCircle') as HTMLElement this.interactiveView = screenHtml.querySelector( '#interactiveView', ) as HTMLElement - // canvasをDOMに追加する(800 x 600) + // canvasをDOMに追加する const canvas = document.createElement('canvas') - canvas.width = 1280 - canvas.height = 720 + canvas.width = resolution.width || 1280 + canvas.height = resolution.height || 720 // canvasのコンテキストを取得する this.gameScreen.appendChild(canvas) this.ctx = canvas.getContext('2d') as CanvasRenderingContext2D @@ -44,44 +47,26 @@ export class Drawer { this.adjustScale(this.gameScreen) } - async drawText(scene: any) { - let isSkip = false - // Enterキーが押されたら全文表示 - setTimeout(() => { - document.addEventListener('keydown', function eventHandler(event) { - if (event.key === 'Enter') { - isSkip = true - document.removeEventListener('keydown', eventHandler) // イベントリスナーを削除 - } - }) - }, 100) - if (scene.clear === undefined || scene.clear === true) { - this.messageText.innerHTML = '' - } - if (scene.name !== undefined) { - this.nameview.innerHTML = scene.name - } else { - this.nameview.innerHTML = '' - } - - for (const line of scene.content) { - for (const char of line) { - if (isSkip) { - this.messageText.innerHTML = '' - this.messageText.innerHTML += line - isSkip = false - break - } - await this.sleep(scene.speed || 50) // 50ミリ秒待機 + drawName(name: string) { + this.nameView.innerHTML = name + } + + async drawText(text: string, wait: number) { + this.messageText.innerHTML = '' + for (const char of text) { + //prettier-ignore + setTimeout(() => { this.readySkip = true, wait*500 }); + // 100ミリ秒待ってから、スキップボタンが押されたら即座に表示 + if (!this.isSkip) { this.messageText.innerHTML += char - } - if (typeof scene.wait === 'number') { - if (scene.wait > 0) { - await this.sleep(scene.wait) - } + await sleep(wait) } else { - // 改行ごとにクリック待ち - await this.clickWait() + if (this.readySkip) { + this.messageText.innerHTML = text + this.readySkip = false + this.isSkip = false + break + } } } } @@ -150,6 +135,7 @@ export class Drawer { }) button.innerHTML = choice.label button.onclick = () => { + outputLog('click', 'debug', choice) this.interactiveView.querySelectorAll('.choice').forEach((element) => { element.parentNode?.removeChild(element) }) @@ -184,7 +170,7 @@ export class Drawer { y: 0, } const size: { width: number; height: number } = displayedImages[key].size - const reverse: boolean = displayedImages[key].reverse || false + const reverse: boolean = displayedImages[key].look || false const entry: { time: number; wait: boolean } = displayedImages[key] .entry || { time: 1, wait: false } if (entry.wait) { @@ -246,30 +232,6 @@ export class Drawer { imageHeight, ) //CanvasRenderingContext2D.drawImage: Passed-in canvas is empty } - // クリック待ち処理 - clickWait() { - this.waitCircle.style.visibility = 'visible' - - return new Promise((resolve) => { - const clickHandler = () => { - this.gameScreen.removeEventListener('click', clickHandler) - this.waitCircle.style.visibility = 'hidden' - resolve(null) - } - this.gameScreen.addEventListener('click', clickHandler) - - document.addEventListener('keydown', (event) => { - if (event.key === 'Enter') { - clickHandler() - } - }) - }) - } - - // sleep関数 - sleep(ms: number) { - return new Promise((resolve) => setTimeout(resolve, ms)) - } adjustScale(targetElement: HTMLElement) { // ターゲット要素の元の幅と高さ @@ -290,4 +252,11 @@ export class Drawer { // ターゲット要素にスケールを適用 targetElement.style.transform = `scale(${scale})` } + + setVisibility(name: string, isVisible: boolean) { + const target = this.screenHtml.querySelector(name) as HTMLElement + if (target) { + target.style.visibility = isVisible ? 'visible' : 'hidden' + } + } } diff --git a/src/core/index.js b/src/core/index.js index 316a747..6334cbb 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -5,8 +5,13 @@ import { ResourceManager } from './resourceManager' import { SoundObject } from '../resource/soundObject' import engineConfig from '../../engineConfig.json' import { outputLog } from '../utils/logger' +import { sleep } from '../utils/waitUtil' export class Core { + isAuto = false + isNext = false + isSkip = false + onNextHandler = null sceneFile = {} sceneConfig = {} commandList = { @@ -31,11 +36,7 @@ export class Core { // ScenarioManagerの初期化(変数の初期値設定) this.scenarioManager = new ScenarioManager() // ResourceManagerの初期化(引数にconfigを渡して、リソース管理配列を作る) - this.resourceManager = new ResourceManager( - import(/* webpackIgnore: true */ '/src/resource/config.js'), - ) // webpackIgnoreでバンドルを無視する - this.isNext = false - this.index = 0 + this.resourceManager = new ResourceManager(import(/* webpackIgnore: true */ '/src/resource/config.js')) // webpackIgnoreでバンドルを無視する this.displayedImages = {} this.usedSounds = {} } @@ -49,19 +50,36 @@ export class Core { await this.loadScene('title') // 画面を表示する await this.loadScreen(this.sceneConfig) - // シナリオを進行する - while (1) { - this.index = 0 - await this.setScenario(this.sceneFile.scenario) + // 入力イベントを設定する + document.addEventListener('keydown', (e) => { + if (e.key === 'Enter') { + this.onNextHandler() + } else if (e.key === 'Control') { + this.drawer.isSkip = true + this.isNext = true + } + }) + document.addEventListener('keyup', (e) => { + if (e.key === 'Control') { + this.drawer.isSkip = true + this.isNext = false + } + }) + document.addEventListener('click', (e) => { + this.onNextHandler() + }) + + // シナリオを実行する + while (this.scenarioManager.hasNext()) { + await this.runScenario() } } async loadScene(sceneFileName) { outputLog('call', 'debug', sceneFileName) // sceneファイルを読み込む - this.sceneFile = await import( - /* webpackChunkName: "[request]" */ `/src/js/${sceneFileName}.js` - ) + this.sceneFile = await import(/* webpackChunkName: "[request]" */ `/src/js/${sceneFileName}.js`) + this.scenarioManager.setScenario(this.sceneFile.scenario, sceneFileName) this.sceneConfig = { ...this.sceneConfig, ...this.sceneFile.sceneConfig } outputLog('sceneFile', 'debug', this.sceneFile) } @@ -78,13 +96,11 @@ export class Core { const styleElement = doc.head.getElementsByTagName('style')[0] document.head.appendChild(styleElement) // ゲーム進行用に必要な情報をセットする - this.drawer.setScreen(this.gameContainer) + this.drawer.setScreen(this.gameContainer, engineConfig.resolution) // シナリオの進行状況を保存 this.scenarioManager.progress.currentScene = sceneConfig.name // 背景画像を表示する - const background = await new ImageObject().setImageAsync( - sceneConfig.background, - ) + const background = await new ImageObject().setImageAsync(sceneConfig.background) this.displayedImages['background'] = { image: background, size: { @@ -99,60 +115,87 @@ export class Core { bgm.play(true) } - async setScenario(scenario) { - const returnValues = [] - outputLog('setScenario:scenario', 'debug', scenario) - // scenario配列をmapで処理して、ゲームを進行する。 - while (this.index < scenario.length) { - outputLog('this.index', 'debug', this.index) - let line = scenario[this.index] - outputLog('setScenario:line', 'debug', line) - this.index++ - const boundFunction = this.commandList[line.type || 'text'].bind(this) - // prettier-ignore - outputLog(`boundFunction:${boundFunction.name.split(' ')[1]}`,'debug',line) - line = await this.httpHandler(line) - returnValues.push(await boundFunction(line)) + async runScenario() { + outputLog('call index:', 'debug', this.scenarioManager.getIndex()) + let scenarioObject = this.scenarioManager.next() + if (!scenarioObject) { + return } - return returnValues - .filter((v) => v) - .reduce( - (acc, content) => ({ - ...acc, - [content.type]: content.item, - }), - {}, - ) + outputLog('scenarioObject', 'debug', scenarioObject) + // prettier-ignore + const boundFunction = this.commandList[scenarioObject.type || 'text'].bind(this) + // prettier-ignore + outputLog(`boundFunction:${boundFunction.name.split(' ')[1]}`,'debug',scenarioObject) + scenarioObject = await this.httpHandler(scenarioObject) + await boundFunction(scenarioObject) } - async textHandler(line) { - outputLog('textHandler:line', 'debug', line) + async textHandler(scenarioObject) { + outputLog('textHandler:line', 'debug', scenarioObject) // 文章だけの場合は、contentプロパティに配列として設定する - if (typeof line === 'string') line = { content: [line] } + if (typeof scenarioObject === 'string') scenarioObject = { content: [scenarioObject] } // httpレスポンスがある場合は、list.contentに追加して、表示対象に加える - if (line.then || line.error) { - line.content = line.content.concat(line.then || line.error) + if (scenarioObject.then || scenarioObject.error) { + scenarioObject.content = scenarioObject.content.concat(scenarioObject.then || scenarioObject.error) } - outputLog('call', 'debug', line) + outputLog('call', 'debug', scenarioObject) // {{}}が含まれている場合は、変換処理を行う - line.content = line.content.map((text) => - text.replace(/{{([^{}]+)}}/g, (match, p1, offset, string) => { + scenarioObject.content = scenarioObject.content.map((text) => + text.replace(/{{([^{}]+)}}/g, (match) => { const expr = match.slice(2, -2) const returnValue = this.executeCode(`return ${expr}`) - return typeof returnValue == 'object' - ? JSON.stringify(returnValue) - : returnValue + return typeof returnValue == 'object' ? JSON.stringify(returnValue) : returnValue }), ) - await this.drawer.drawText(line) - this.scenarioManager.setHistory(line) + // 名前が設定されている場合は、名前を表示する + if (scenarioObject.name) { + this.drawer.drawName(scenarioObject.name) + } else { + this.drawer.drawName('') + } + + //prettier-ignore + this.onNextHandler = () => { this.drawer.isSkip = true } + // 表示する文章を1行ずつ表示する + for (const line of scenarioObject.content) { + await this.drawer.drawText(line, line.speed || 50) + //prettier-ignore + this.onNextHandler = () => { this.isNext = true } + if (typeof line.wait === 'number') { + if (line.wait > 0 || this.isAuto) { + const waitTime = line.wait || 1500 + // 指定された時間だけ待機 + await sleep(line.wait) + } + } else { + // 改行ごとに入力待ち + await this.clickWait() + } + } + this.drawer.isSkip = false + this.scenarioManager.setHistory(scenarioObject.content) + } + + // クリック待ち処理 + async clickWait() { + outputLog('call', 'debug') + this.drawer.setVisibility('#waitCircle', true) + return new Promise((resolve) => { + const intervalId = setInterval(() => { + if (this.isNext) { + this.drawer.setVisibility('#waitCircle', false) + clearInterval(intervalId) + this.isNext = false + resolve(null) + } + }, 500) + }) } async sayHandler(line) { outputLog('call', 'debug', line) // say(name:string, pattern: string, voice: {playの引数}, ...text) - if (line.voice) - await this.soundHandler({ path: line.voice, play: undefined }) + if (line.voice) await this.soundHandler({ path: line.voice, play: undefined }) await this.textHandler({ content: line.content, name: line.name }) this.scenarioManager.setHistory(line) } @@ -160,32 +203,57 @@ export class Core { async choiceHandler(line) { outputLog('call', 'debug', line) this.textHandler(line.prompt) - const { selectId, onSelect: selectHandler } = - await this.drawer.drawChoices(line) + const { selectId, onSelect: selectHandler } = await this.drawer.drawChoices(line) if (selectHandler !== undefined) { - const pastIndex = this.index - this.index = 0 - const returns = await this.setScenario(selectHandler) - outputLog('choiceHandler:returns', 'debug', returns) - this.index = returns?.jump ? returns.jump : pastIndex + this.scenarioManager.addScenario(selectHandler) } this.scenarioManager.setHistory({ line, ...selectId }) } jumpHandler(line) { - outputLog('currentIndex:', 'debug', this.index) - outputLog('jump.index:', 'debug', line.index) - return { type: 'jump', item: line.index } + outputLog('call:', 'debug', line.index) + this.newpageHandler() + this.scenarioManager.setIndex(Number(line.index)) } async showHandler(line) { outputLog('line', 'debug', line) // 表示する画像の情報を管理オブジェクトに追加 - const key = line.name || line.path.split('/').pop() + const key = line.name || line.src.split('/').pop() + const baseLine = engineConfig.resolution.height / 2 + const centerPoint = { + left: { x: engineConfig.resolution.width * 0.25, y: baseLine }, + center: { x: engineConfig.resolution.width * 0.5, y: baseLine }, + right: { x: engineConfig.resolution.width * 0.75, y: baseLine }, + } + + const image = await this.getImageObject(line) + // 画像の表示位置を設定 + const position = { x: line.x, y: line.y } + // prettier-ignore + const size = line.width && line.height ? { width: line.width, height: line.height } : { width: image.getSize().width, height: image.getSize().height } + + if (line.pos) { + const pos = line.pos.split(':') + const baseLines = { + top: 0, + middle: engineConfig.resolution.height / 2, + bottom: engineConfig.resolution.height, + } + // エイリアスが設定されている場合、画像の中心点を求めて、画像の表示位置を設定する + position.x = centerPoint[pos[0]].x - size.width / 2 + if (pos[1] === 'middle') { + position.y = baseLines[pos[1]] - size.width / 2 + } else if (pos[1]) { + position.y = baseLines[pos[1]] + } else { + position.y = baseLine / 2 + } + } this.displayedImages[key] = { - image: await this.getImageObject(line), - pos: { x: line.x, y: line.y }, - size: { width: line.width, height: line.height }, + image, + pos: position, + size: size, look: line.look, entry: line.entry, } @@ -209,12 +277,7 @@ export class Core { outputLog('moveToHandler:line', 'debug', line) const key = line.name outputLog('moveToHandler:displayedImages', 'debug', this.displayedImages) - await this.drawer.moveTo( - key, - this.displayedImages, - { x: line.x, y: line.y }, - line.duration | 1, - ) + await this.drawer.moveTo(key, this.displayedImages, { x: line.x, y: line.y }, line.duration | 1) } async getImageObject(line) { @@ -224,9 +287,9 @@ export class Core { if (line.name) { const targetImage = this.displayedImages[line.name] const imageObject = targetImage ? targetImage.image : new ImageObject() - image = await imageObject.setImageAsync(line.path) + image = await imageObject.setImageAsync(line.src) } else { - image = await new ImageObject().setImageAsync(line.path) + image = await new ImageObject().setImageAsync(line.src) } return image } @@ -244,7 +307,7 @@ export class Core { soundObject.pause() } // soundObjectを管理オブジェクトに追加 - const key = line.name || line.path.split('/').pop() + const key = line.name || line.src.split('/').pop() this.usedSounds[key] = { audio: soundObject, } @@ -255,12 +318,10 @@ export class Core { let resource if (line.name) { const targetResource = this.usedSounds[line.name] - const soundObject = targetResource - ? targetResource.audio - : new SoundObject() - resource = await soundObject.setAudioAsync(line.path) + const soundObject = targetResource ? targetResource.audio : new SoundObject() + resource = await soundObject.setAudioAsync(line.src) } else { - resource = await new SoundObject().setAudioAsync(line.path) + resource = await new SoundObject().setAudioAsync(line.src) } return resource } @@ -280,30 +341,22 @@ export class Core { this.drawer.show(this.displayedImages) } - // Sceneファイルに、ビルド時に判断処理を追加して、そこに処理をお願いしたほうがいいかも? async ifHandler(line) { outputLog('call', 'debug', line) const isTrue = this.executeCode(`return ${line.condition}`) outputLog(`${isTrue}`, 'debug') if (isTrue) { outputLog('', 'debug', line.content[0].content) - const pastIndex = this.index - this.index = 0 - await this.setScenario(line.content[0].content) - this.index = pastIndex + this.scenarioManager.addScenario(line.content[0].content) } else { outputLog('', 'debug', line.content[1].content) - const pastIndex = this.index - this.index = 0 - await this.setScenario(line.content[1].content) - this.index = pastIndex + this.scenarioManager.addScenario(line.content[1].content) } } async routeHandler(line) { outputLog('call', 'debug', line) - // 現在のシナリオを終了させる - this.index = this.sceneFile.scenario.length + 1 + this.newpageHandler() // sceneファイルを読み込む await this.loadScene(line.to) // 画面を表示する @@ -325,7 +378,7 @@ export class Core { // prettier-ignore const progressText = line.content.filter((content) => content.type === 'progress')[0] if (progressText) { - await this.textHandler(progressText) + await this.textHandler({ content: [progressText.content][0], wait: 0 }) } // get,post,put,delete属性を処理する const headers = line.content @@ -348,31 +401,19 @@ export class Core { ) outputLog('headers', 'debug', headers) outputLog('body', 'debug', body) - const response = await fetch( - line.get || line.post || line.put || line.delete, - { - method: line.get - ? 'GET' - : line.post - ? 'POST' - : line.put - ? 'PUT' - : 'DELETE', - headers: headers, - body: JSON.stringify(body), - }, - ) + const response = await fetch(line.get || line.post || line.put || line.delete, { + method: line.get ? 'GET' : line.post ? 'POST' : line.put ? 'PUT' : 'DELETE', + headers: headers, + body: JSON.stringify(body), + }) if (response.ok) { const json = await response.json() this.sceneFile.res = json outputLog('res', 'debug', json) - line.then = line.content.filter( - (content) => content.type === 'then', - )[0].content + line.then = line.content.filter((content) => content.type === 'then')[0].content } else { - line.error = line.content.filter( - (content) => content.type === 'then', - )[0].content + this.sceneFile.res = json + line.error = line.content.filter((content) => content.type === 'error')[0].content } if (line.content) { line.content = line.content.filter( diff --git a/src/core/scenarioManager.ts b/src/core/scenarioManager.ts index 03f7994..e10a6b4 100644 --- a/src/core/scenarioManager.ts +++ b/src/core/scenarioManager.ts @@ -1,10 +1,12 @@ import { ImageObject } from "../resource/ImageObject" +import { outputLog } from "../utils/logger" export class ScenarioManager { private backlist: any private saveDataList: any private progress: any private ctx: any private background: ImageObject = new ImageObject() + private scenarioData: any constructor () { this.backlist = [] @@ -19,6 +21,60 @@ export class ScenarioManager { } } + setScenario (scenario: any, sceneName: string=''): void { + outputLog('call','debug', {scenario, sceneName}) + this.scenarioData = scenario + this.progress.currentScene = sceneName + this.progress.currentIndex = 0 + } + + addScenario (scenario: any, index: number): void { + outputLog('call','debug', {scenario, index}) + // index指定がある場合はその値に挿入する + if(index) { + this.scenarioData.splice(index, 0, ...scenario) + } else { + // 現在の位置に挿入する + this.scenarioData.splice(this.progress.currentIndex+1, 0, ...scenario) + } + outputLog('call','debug', this.scenarioData) + } + + getScenario (): any { + return this.scenarioData + } + + next(): any { + outputLog('call: index:','debug', this.progress.currentIndex) + if(this.progress.currentIndex <= this.scenarioData.length) { + this.progress.currentIndex += 1 + return this.scenarioData[this.progress.currentIndex] + } else { + return null + } + } + + hasNext(): boolean { + return this.progress.currentIndex < this.scenarioData.length + } + + getIndex(): number { + return this.progress.currentIndex + } + + setIndex(index: number): void { + outputLog('call index:','debug', index) + this.progress.currentIndex = index + } + + setSceneName(sceneName: string): void { + this.progress.currentScene = sceneName + } + + getSceneName(): string { + return this.progress.currentScene + } + setHistory (text: string): void { this.backlist.push(text) } diff --git a/src/index.js b/src/index.js deleted file mode 100644 index 88ed2e9..0000000 --- a/src/index.js +++ /dev/null @@ -1,6 +0,0 @@ -import { Core } from './core/' -// coreをインスタンス化する -window.onload = function () { - const core = new Core() - core.start() -} diff --git a/src/utils/store.js b/src/utils/store.js index 59d4ff1..540f0b0 100644 --- a/src/utils/store.js +++ b/src/utils/store.js @@ -1,7 +1,7 @@ -import store from 'storejs' +import storejs from 'storejs' -const generateStore = () => { - const allData = store.getAll() +export const generateStore = () => { + const allData = storejs() class Store { constructor(data) { @@ -9,24 +9,9 @@ const generateStore = () => { } set(key, value) { - store.set(key, value) + storejs.set(key, value) this[key] = value } } - - const storeInstance = new Store(allData) - - // Proxyを使用してsetメソッド以外での値の追加を禁止 - return new Proxy(storeInstance, { - set(target, prop, value) { - if (prop === 'set') { - return true // setメソッド自体の変更は許可 - } - throw new Error('値の追加はsetメソッドを使用してください。') - }, - defineProperty() { - throw new Error('新しいプロパティの定義は許可されていません。') - }, - }) + return new Store(allData) } -export default generateStore diff --git a/src/utils/waitUtil.js b/src/utils/waitUtil.js new file mode 100644 index 0000000..ffc6db3 --- /dev/null +++ b/src/utils/waitUtil.js @@ -0,0 +1,4 @@ +// sleep関数 +export async function sleep(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)) +}