diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
index 5cadd2fdb..a405fd376 100644
--- a/.devcontainer/Dockerfile
+++ b/.devcontainer/Dockerfile
@@ -5,7 +5,7 @@ USER root
RUN apt-get update
RUN apt-get install -y \
mosquitto \
-mosquitto-clients
+mosquitto-clients
RUN mosquitto_passwd -b -c /etc/mosquitto/passwd local dev
RUN echo -e "allow_anonymous false \
password_file /etc/mosquitto/passwd" > /etc/mosquitto/conf.d/default.conf
@@ -25,4 +25,10 @@ RUN apt-get update
RUN apt-get install -y \
mongodb-org
RUN sed -i "s,\\(^[[:blank:]]*bindIp:\\) .*,\\1 0.0.0.0," /etc/mongod.conf
-RUN sed -i "s,\\(^[[:blank:]]*dbPath:\\) .*,\\1 /workspaces/playnite-web/.mongodb/data," /etc/mongod.conf
\ No newline at end of file
+RUN sed -i "s,\\(^[[:blank:]]*dbPath:\\) .*,\\1 /workspaces/playnite-web/.mongodb/data," /etc/mongod.conf
+
+RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
+RUN echo "deb https://download.mono-project.com/repo/debian stable-buster main" > /etc/apt/sources.list.d/mono-official-stable.list
+RUN apt-get update -y
+RUN apt-get install -y \
+mono-complete
diff --git a/.gitignore b/.gitignore
index b06e99896..47988ddb0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,7 @@
.mongodb
-.nx/cache
\ No newline at end of file
+.nx/cache
+
+.dist
+.test-runs
diff --git a/.pnp.cjs b/.pnp.cjs
index 35b9f7fc4..3284397d4 100755
--- a/.pnp.cjs
+++ b/.pnp.cjs
@@ -12,12 +12,17 @@ const RAW_RUNTIME_STATE =
{\
"name": "playnite-web",\
"reference": "workspace:."\
+ },\
+ {\
+ "name": "playnite-web-plugin",\
+ "reference": "workspace:apps/playnite-web-plugin"\
}\
],\
"enableTopLevelFallback": true,\
"ignorePatternData": "(^(?:\\\\.yarn\\\\/sdks(?:\\\\/(?!\\\\.{1,2}(?:\\\\/|$))(?:(?:(?!(?:^|\\\\/)\\\\.{1,2}(?:\\\\/|$)).)*?)|$))$)",\
"fallbackExclusionList": [\
- ["playnite-web", ["workspace:."]]\
+ ["playnite-web", ["workspace:."]],\
+ ["playnite-web-plugin", ["workspace:apps/playnite-web-plugin"]]\
],\
"fallbackPool": [\
],\
@@ -31,6 +36,30 @@ const RAW_RUNTIME_STATE =
"linkType": "SOFT"\
}]\
]],\
+ ["@isaacs/cliui", [\
+ ["npm:8.0.2", {\
+ "packageLocation": "../../root/.yarn/berry/cache/@isaacs-cliui-npm-8.0.2-f4364666d5-10c0.zip/node_modules/@isaacs/cliui/",\
+ "packageDependencies": [\
+ ["@isaacs/cliui", "npm:8.0.2"],\
+ ["string-width", "npm:5.1.2"],\
+ ["string-width-cjs", [\
+ "string-width",\
+ "npm:4.2.3"\
+ ]],\
+ ["strip-ansi", "npm:7.1.0"],\
+ ["strip-ansi-cjs", [\
+ "strip-ansi",\
+ "npm:6.0.1"\
+ ]],\
+ ["wrap-ansi", "npm:8.1.0"],\
+ ["wrap-ansi-cjs", [\
+ "wrap-ansi",\
+ "npm:7.0.0"\
+ ]]\
+ ],\
+ "linkType": "HARD"\
+ }]\
+ ]],\
["@jest/schemas", [\
["npm:29.6.3", {\
"packageLocation": "../../root/.yarn/berry/cache/@jest-schemas-npm-29.6.3-292730e442-10c0.zip/node_modules/@jest/schemas/",\
@@ -142,6 +171,15 @@ const RAW_RUNTIME_STATE =
"linkType": "HARD"\
}]\
]],\
+ ["@pkgjs/parseargs", [\
+ ["npm:0.11.0", {\
+ "packageLocation": "../../root/.yarn/berry/cache/@pkgjs-parseargs-npm-0.11.0-cd2a3fe948-10c0.zip/node_modules/@pkgjs/parseargs/",\
+ "packageDependencies": [\
+ ["@pkgjs/parseargs", "npm:0.11.0"]\
+ ],\
+ "linkType": "HARD"\
+ }]\
+ ]],\
["@sinclair/typebox", [\
["npm:0.27.8", {\
"packageLocation": "../../root/.yarn/berry/cache/@sinclair-typebox-npm-0.27.8-23e206d653-10c0.zip/node_modules/@sinclair/typebox/",\
@@ -197,6 +235,13 @@ const RAW_RUNTIME_STATE =
["ansi-regex", "npm:5.0.1"]\
],\
"linkType": "HARD"\
+ }],\
+ ["npm:6.0.1", {\
+ "packageLocation": "../../root/.yarn/berry/cache/ansi-regex-npm-6.0.1-8d663a607d-10c0.zip/node_modules/ansi-regex/",\
+ "packageDependencies": [\
+ ["ansi-regex", "npm:6.0.1"]\
+ ],\
+ "linkType": "HARD"\
}]\
]],\
["ansi-styles", [\
@@ -214,6 +259,13 @@ const RAW_RUNTIME_STATE =
["ansi-styles", "npm:5.2.0"]\
],\
"linkType": "HARD"\
+ }],\
+ ["npm:6.2.1", {\
+ "packageLocation": "../../root/.yarn/berry/cache/ansi-styles-npm-6.2.1-d43647018c-10c0.zip/node_modules/ansi-styles/",\
+ "packageDependencies": [\
+ ["ansi-styles", "npm:6.2.1"]\
+ ],\
+ "linkType": "HARD"\
}]\
]],\
["argparse", [\
@@ -293,6 +345,14 @@ const RAW_RUNTIME_STATE =
["concat-map", "npm:0.0.1"]\
],\
"linkType": "HARD"\
+ }],\
+ ["npm:2.0.1", {\
+ "packageLocation": "../../root/.yarn/berry/cache/brace-expansion-npm-2.0.1-17aa2616f9-10c0.zip/node_modules/brace-expansion/",\
+ "packageDependencies": [\
+ ["brace-expansion", "npm:2.0.1"],\
+ ["balanced-match", "npm:1.0.2"]\
+ ],\
+ "linkType": "HARD"\
}]\
]],\
["buffer", [\
@@ -386,6 +446,18 @@ const RAW_RUNTIME_STATE =
"linkType": "HARD"\
}]\
]],\
+ ["cross-spawn", [\
+ ["npm:7.0.3", {\
+ "packageLocation": "../../root/.yarn/berry/cache/cross-spawn-npm-7.0.3-e4ff3e65b3-10c0.zip/node_modules/cross-spawn/",\
+ "packageDependencies": [\
+ ["cross-spawn", "npm:7.0.3"],\
+ ["path-key", "npm:3.1.1"],\
+ ["shebang-command", "npm:2.0.0"],\
+ ["which", "npm:2.0.2"]\
+ ],\
+ "linkType": "HARD"\
+ }]\
+ ]],\
["define-lazy-prop", [\
["npm:2.0.0", {\
"packageLocation": "../../root/.yarn/berry/cache/define-lazy-prop-npm-2.0.0-bba0cd91a7-10c0.zip/node_modules/define-lazy-prop/",\
@@ -440,6 +512,15 @@ const RAW_RUNTIME_STATE =
"linkType": "HARD"\
}]\
]],\
+ ["eastasianwidth", [\
+ ["npm:0.2.0", {\
+ "packageLocation": "../../root/.yarn/berry/cache/eastasianwidth-npm-0.2.0-c37eb16bd1-10c0.zip/node_modules/eastasianwidth/",\
+ "packageDependencies": [\
+ ["eastasianwidth", "npm:0.2.0"]\
+ ],\
+ "linkType": "HARD"\
+ }]\
+ ]],\
["emoji-regex", [\
["npm:8.0.0", {\
"packageLocation": "../../root/.yarn/berry/cache/emoji-regex-npm-8.0.0-213764015c-10c0.zip/node_modules/emoji-regex/",\
@@ -447,6 +528,13 @@ const RAW_RUNTIME_STATE =
["emoji-regex", "npm:8.0.0"]\
],\
"linkType": "HARD"\
+ }],\
+ ["npm:9.2.2", {\
+ "packageLocation": "../../root/.yarn/berry/cache/emoji-regex-npm-9.2.2-e6fac8d058-10c0.zip/node_modules/emoji-regex/",\
+ "packageDependencies": [\
+ ["emoji-regex", "npm:9.2.2"]\
+ ],\
+ "linkType": "HARD"\
}]\
]],\
["end-of-stream", [\
@@ -537,6 +625,17 @@ const RAW_RUNTIME_STATE =
"linkType": "HARD"\
}]\
]],\
+ ["foreground-child", [\
+ ["npm:3.1.1", {\
+ "packageLocation": "../../root/.yarn/berry/cache/foreground-child-npm-3.1.1-77e78ed774-10c0.zip/node_modules/foreground-child/",\
+ "packageDependencies": [\
+ ["foreground-child", "npm:3.1.1"],\
+ ["cross-spawn", "npm:7.0.3"],\
+ ["signal-exit", "npm:4.1.0"]\
+ ],\
+ "linkType": "HARD"\
+ }]\
+ ]],\
["form-data", [\
["npm:4.0.0", {\
"packageLocation": "../../root/.yarn/berry/cache/form-data-npm-4.0.0-916facec2d-10c0.zip/node_modules/form-data/",\
@@ -589,6 +688,18 @@ const RAW_RUNTIME_STATE =
}]\
]],\
["glob", [\
+ ["npm:10.3.10", {\
+ "packageLocation": "../../root/.yarn/berry/cache/glob-npm-10.3.10-da1ef8b112-10c0.zip/node_modules/glob/",\
+ "packageDependencies": [\
+ ["glob", "npm:10.3.10"],\
+ ["foreground-child", "npm:3.1.1"],\
+ ["jackspeak", "npm:2.3.6"],\
+ ["minimatch", "npm:9.0.3"],\
+ ["minipass", "npm:7.0.4"],\
+ ["path-scurry", "npm:1.10.1"]\
+ ],\
+ "linkType": "HARD"\
+ }],\
["npm:7.1.4", {\
"packageLocation": "../../root/.yarn/berry/cache/glob-npm-7.1.4-8bd8317a74-10c0.zip/node_modules/glob/",\
"packageDependencies": [\
@@ -700,6 +811,26 @@ const RAW_RUNTIME_STATE =
"linkType": "HARD"\
}]\
]],\
+ ["isexe", [\
+ ["npm:2.0.0", {\
+ "packageLocation": "../../root/.yarn/berry/cache/isexe-npm-2.0.0-b58870bd2e-10c0.zip/node_modules/isexe/",\
+ "packageDependencies": [\
+ ["isexe", "npm:2.0.0"]\
+ ],\
+ "linkType": "HARD"\
+ }]\
+ ]],\
+ ["jackspeak", [\
+ ["npm:2.3.6", {\
+ "packageLocation": "../../root/.yarn/berry/cache/jackspeak-npm-2.3.6-42e1233172-10c0.zip/node_modules/jackspeak/",\
+ "packageDependencies": [\
+ ["jackspeak", "npm:2.3.6"],\
+ ["@isaacs/cliui", "npm:8.0.2"],\
+ ["@pkgjs/parseargs", "npm:0.11.0"]\
+ ],\
+ "linkType": "HARD"\
+ }]\
+ ]],\
["jest-diff", [\
["npm:29.7.0", {\
"packageLocation": "../../root/.yarn/berry/cache/jest-diff-npm-29.7.0-0149e01930-10c0.zip/node_modules/jest-diff/",\
@@ -780,6 +911,14 @@ const RAW_RUNTIME_STATE =
}]\
]],\
["lru-cache", [\
+ ["npm:10.0.2", {\
+ "packageLocation": "../../root/.yarn/berry/cache/lru-cache-npm-10.0.2-fcff47e16f-10c0.zip/node_modules/lru-cache/",\
+ "packageDependencies": [\
+ ["lru-cache", "npm:10.0.2"],\
+ ["semver", "npm:7.5.4"]\
+ ],\
+ "linkType": "HARD"\
+ }],\
["npm:6.0.0", {\
"packageLocation": "../../root/.yarn/berry/cache/lru-cache-npm-6.0.0-b4c8668fe1-10c0.zip/node_modules/lru-cache/",\
"packageDependencies": [\
@@ -833,6 +972,14 @@ const RAW_RUNTIME_STATE =
["brace-expansion", "npm:1.1.11"]\
],\
"linkType": "HARD"\
+ }],\
+ ["npm:9.0.3", {\
+ "packageLocation": "../../root/.yarn/berry/cache/minimatch-npm-9.0.3-69d7d6fad5-10c0.zip/node_modules/minimatch/",\
+ "packageDependencies": [\
+ ["minimatch", "npm:9.0.3"],\
+ ["brace-expansion", "npm:2.0.1"]\
+ ],\
+ "linkType": "HARD"\
}]\
]],\
["minimist", [\
@@ -844,6 +991,15 @@ const RAW_RUNTIME_STATE =
"linkType": "HARD"\
}]\
]],\
+ ["minipass", [\
+ ["npm:7.0.4", {\
+ "packageLocation": "../../root/.yarn/berry/cache/minipass-npm-7.0.4-eacb4e042e-10c0.zip/node_modules/minipass/",\
+ "packageDependencies": [\
+ ["minipass", "npm:7.0.4"]\
+ ],\
+ "linkType": "HARD"\
+ }]\
+ ]],\
["node-machine-id", [\
["npm:1.1.12", {\
"packageLocation": "../../root/.yarn/berry/cache/node-machine-id-npm-1.1.12-ad6d29fa15-10c0.zip/node_modules/node-machine-id/",\
@@ -984,6 +1140,17 @@ const RAW_RUNTIME_STATE =
"linkType": "HARD"\
}]\
]],\
+ ["path-scurry", [\
+ ["npm:1.10.1", {\
+ "packageLocation": "../../root/.yarn/berry/cache/path-scurry-npm-1.10.1-52bd946f2e-10c0.zip/node_modules/path-scurry/",\
+ "packageDependencies": [\
+ ["path-scurry", "npm:1.10.1"],\
+ ["lru-cache", "npm:10.0.2"],\
+ ["minipass", "npm:7.0.4"]\
+ ],\
+ "linkType": "HARD"\
+ }]\
+ ]],\
["playnite-web", [\
["workspace:.", {\
"packageLocation": "./",\
@@ -994,6 +1161,17 @@ const RAW_RUNTIME_STATE =
"linkType": "SOFT"\
}]\
]],\
+ ["playnite-web-plugin", [\
+ ["workspace:apps/playnite-web-plugin", {\
+ "packageLocation": "./apps/playnite-web-plugin/",\
+ "packageDependencies": [\
+ ["playnite-web-plugin", "workspace:apps/playnite-web-plugin"],\
+ ["nx", "virtual:93ec3e0c90a0f2b1b356454dffdf00a3b612a4be4e9dcd20c989fcaf09851ad9dd8a48c40c5be361bd69837a631dce28bf5fdb296f636722dc69caa95cdccc8f#npm:17.1.2"],\
+ ["rimraf", "npm:5.0.5"]\
+ ],\
+ "linkType": "SOFT"\
+ }]\
+ ]],\
["pretty-format", [\
["npm:29.7.0", {\
"packageLocation": "../../root/.yarn/berry/cache/pretty-format-npm-29.7.0-7d330b2ea2-10c0.zip/node_modules/pretty-format/",\
@@ -1064,6 +1242,14 @@ const RAW_RUNTIME_STATE =
["glob", "npm:7.2.3"]\
],\
"linkType": "HARD"\
+ }],\
+ ["npm:5.0.5", {\
+ "packageLocation": "../../root/.yarn/berry/cache/rimraf-npm-5.0.5-19228633fd-10c0.zip/node_modules/rimraf/",\
+ "packageDependencies": [\
+ ["rimraf", "npm:5.0.5"],\
+ ["glob", "npm:10.3.10"]\
+ ],\
+ "linkType": "HARD"\
}]\
]],\
["safe-buffer", [\
@@ -1083,6 +1269,33 @@ const RAW_RUNTIME_STATE =
["lru-cache", "npm:6.0.0"]\
],\
"linkType": "HARD"\
+ }],\
+ ["npm:7.5.4", {\
+ "packageLocation": "../../root/.yarn/berry/cache/semver-npm-7.5.4-c4ad957fcd-10c0.zip/node_modules/semver/",\
+ "packageDependencies": [\
+ ["semver", "npm:7.5.4"],\
+ ["lru-cache", "npm:6.0.0"]\
+ ],\
+ "linkType": "HARD"\
+ }]\
+ ]],\
+ ["shebang-command", [\
+ ["npm:2.0.0", {\
+ "packageLocation": "../../root/.yarn/berry/cache/shebang-command-npm-2.0.0-eb2b01921d-10c0.zip/node_modules/shebang-command/",\
+ "packageDependencies": [\
+ ["shebang-command", "npm:2.0.0"],\
+ ["shebang-regex", "npm:3.0.0"]\
+ ],\
+ "linkType": "HARD"\
+ }]\
+ ]],\
+ ["shebang-regex", [\
+ ["npm:3.0.0", {\
+ "packageLocation": "../../root/.yarn/berry/cache/shebang-regex-npm-3.0.0-899a0cd65e-10c0.zip/node_modules/shebang-regex/",\
+ "packageDependencies": [\
+ ["shebang-regex", "npm:3.0.0"]\
+ ],\
+ "linkType": "HARD"\
}]\
]],\
["signal-exit", [\
@@ -1092,6 +1305,13 @@ const RAW_RUNTIME_STATE =
["signal-exit", "npm:3.0.7"]\
],\
"linkType": "HARD"\
+ }],\
+ ["npm:4.1.0", {\
+ "packageLocation": "../../root/.yarn/berry/cache/signal-exit-npm-4.1.0-61fb957687-10c0.zip/node_modules/signal-exit/",\
+ "packageDependencies": [\
+ ["signal-exit", "npm:4.1.0"]\
+ ],\
+ "linkType": "HARD"\
}]\
]],\
["sprintf-js", [\
@@ -1113,6 +1333,16 @@ const RAW_RUNTIME_STATE =
["strip-ansi", "npm:6.0.1"]\
],\
"linkType": "HARD"\
+ }],\
+ ["npm:5.1.2", {\
+ "packageLocation": "../../root/.yarn/berry/cache/string-width-npm-5.1.2-bf60531341-10c0.zip/node_modules/string-width/",\
+ "packageDependencies": [\
+ ["string-width", "npm:5.1.2"],\
+ ["eastasianwidth", "npm:0.2.0"],\
+ ["emoji-regex", "npm:9.2.2"],\
+ ["strip-ansi", "npm:7.1.0"]\
+ ],\
+ "linkType": "HARD"\
}]\
]],\
["string_decoder", [\
@@ -1133,6 +1363,14 @@ const RAW_RUNTIME_STATE =
["ansi-regex", "npm:5.0.1"]\
],\
"linkType": "HARD"\
+ }],\
+ ["npm:7.1.0", {\
+ "packageLocation": "../../root/.yarn/berry/cache/strip-ansi-npm-7.1.0-7453b80b79-10c0.zip/node_modules/strip-ansi/",\
+ "packageDependencies": [\
+ ["strip-ansi", "npm:7.1.0"],\
+ ["ansi-regex", "npm:6.0.1"]\
+ ],\
+ "linkType": "HARD"\
}]\
]],\
["strip-bom", [\
@@ -1247,6 +1485,16 @@ const RAW_RUNTIME_STATE =
"linkType": "HARD"\
}]\
]],\
+ ["which", [\
+ ["npm:2.0.2", {\
+ "packageLocation": "../../root/.yarn/berry/cache/which-npm-2.0.2-320ddf72f7-10c0.zip/node_modules/which/",\
+ "packageDependencies": [\
+ ["which", "npm:2.0.2"],\
+ ["isexe", "npm:2.0.0"]\
+ ],\
+ "linkType": "HARD"\
+ }]\
+ ]],\
["wrap-ansi", [\
["npm:7.0.0", {\
"packageLocation": "../../root/.yarn/berry/cache/wrap-ansi-npm-7.0.0-ad6e1a0554-10c0.zip/node_modules/wrap-ansi/",\
@@ -1257,6 +1505,16 @@ const RAW_RUNTIME_STATE =
["strip-ansi", "npm:6.0.1"]\
],\
"linkType": "HARD"\
+ }],\
+ ["npm:8.1.0", {\
+ "packageLocation": "../../root/.yarn/berry/cache/wrap-ansi-npm-8.1.0-26a4e6ae28-10c0.zip/node_modules/wrap-ansi/",\
+ "packageDependencies": [\
+ ["wrap-ansi", "npm:8.1.0"],\
+ ["ansi-styles", "npm:6.2.1"],\
+ ["string-width", "npm:5.1.2"],\
+ ["strip-ansi", "npm:7.1.0"]\
+ ],\
+ "linkType": "HARD"\
}]\
]],\
["wrappy", [\
diff --git a/.vscode/settings.json b/.vscode/settings.json
index e068e482c..1967d8bdd 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -2,5 +2,6 @@
"search.exclude": {
"**/.yarn": true,
"**/.pnp.*": true
- }
+ },
+ "dotnet.defaultSolution": "PlayniteWebPlugin.sln"
}
diff --git a/.yarn/install-state.gz b/.yarn/install-state.gz
index 1ebcd2957..ce5422444 100644
Binary files a/.yarn/install-state.gz and b/.yarn/install-state.gz differ
diff --git a/PlayniteWebPlugin.sln b/PlayniteWebPlugin.sln
new file mode 100644
index 000000000..2a1c86a2c
--- /dev/null
+++ b/PlayniteWebPlugin.sln
@@ -0,0 +1,33 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.0.31903.59
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "apps", "apps", "{00172130-52A7-4DBA-9F4E-5361DE868BCD}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "playnite-web-plugin", "playnite-web-plugin", "{579FD8D9-5E3F-4385-AA2B-0C94920B94BF}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{2F45A914-AE3B-4391-B023-EC8BCFCB36F4}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PlayniteWebPlugin", "apps\playnite-web-plugin\src\PlayniteWebPlugin.csproj", "{11E4F3D4-D252-4B55-8E3F-9A70192E3D74}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {11E4F3D4-D252-4B55-8E3F-9A70192E3D74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {11E4F3D4-D252-4B55-8E3F-9A70192E3D74}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {11E4F3D4-D252-4B55-8E3F-9A70192E3D74}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {11E4F3D4-D252-4B55-8E3F-9A70192E3D74}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {579FD8D9-5E3F-4385-AA2B-0C94920B94BF} = {00172130-52A7-4DBA-9F4E-5361DE868BCD}
+ {11E4F3D4-D252-4B55-8E3F-9A70192E3D74} = {2F45A914-AE3B-4391-B023-EC8BCFCB36F4}
+ {2F45A914-AE3B-4391-B023-EC8BCFCB36F4} = {579FD8D9-5E3F-4385-AA2B-0C94920B94BF}
+ EndGlobalSection
+EndGlobal
diff --git a/apps/playnite-web-plugin/package.json b/apps/playnite-web-plugin/package.json
new file mode 100644
index 000000000..9f1102e8b
--- /dev/null
+++ b/apps/playnite-web-plugin/package.json
@@ -0,0 +1,8 @@
+{
+ "name": "playnite-web-plugin",
+ "version": "1.0.0",
+ "devDependencies": {
+ "nx": "^17.1.2",
+ "rimraf": "^5.0.5"
+ }
+}
diff --git a/apps/playnite-web-plugin/project.json b/apps/playnite-web-plugin/project.json
new file mode 100644
index 000000000..1b172fbb9
--- /dev/null
+++ b/apps/playnite-web-plugin/project.json
@@ -0,0 +1,31 @@
+{
+ "name": "playnite-web-plugin",
+ "sourceRoot": "apps/playnite-web-plugin/src",
+ "projectType": "application",
+ "targets": {
+ "clean": {
+ "executor": "nx:run-commands",
+ "outputs": ["{projectRoot}/.dist"],
+ "options": {
+ "command": "yarn rimraf .dist",
+ "cwd": "{projectRoot}"
+ }
+ },
+ "build": {
+ "executor": "nx:run-commands",
+ "options": {
+ "command": "dotnet build --configuration Release --no-dependencies",
+ "cwd": "{projectRoot}/src"
+ }
+ },
+ "test/unit": {
+ "executor": "nx:run-commands",
+ "options": {
+ "command": "dotnet build && dotnet test --results-directory ../../../.test-runs/unit --configuration Release --framework net4.6.2",
+ "cwd": "{projectRoot}/tests/unit/src"
+ }
+ }
+ },
+ "tags": [],
+ "implicitDependencies": []
+}
diff --git a/apps/playnite-web-plugin/src/Directory.Build.props b/apps/playnite-web-plugin/src/Directory.Build.props
new file mode 100644
index 000000000..e82fd708f
--- /dev/null
+++ b/apps/playnite-web-plugin/src/Directory.Build.props
@@ -0,0 +1,26 @@
+
+
+ true
+
+
+
+ $(MSBuildThisFileDirectory)\..\.dist\
+
+
+
+
+ $(DistRoot)
+ $(DistRoot)bin
+ $(DistRoot)obj\
+ $(CommonIntermediateOutputRoot)$(Configuration)\$(MSBuildProjectName)\
+ $(BaseIntermediateOutputPath)
+ $(BaseIntermediateOutputPath)GlobalAssemblyInfo.cs
+ $(BinariesFolder)\$(Configuration)
+ true
+ $(BinariesFolder)\$(Configuration)\$(MSBuildProjectName)
+ $(CommonOutputDirectory)\
+ $(OutputPath)
+ $(IntermediateOutputPath)AssemblyAttributes.cs
+
+
+
diff --git a/apps/playnite-web-plugin/src/PlayniteWebPlugin.csproj b/apps/playnite-web-plugin/src/PlayniteWebPlugin.csproj
new file mode 100644
index 000000000..d3050a546
--- /dev/null
+++ b/apps/playnite-web-plugin/src/PlayniteWebPlugin.csproj
@@ -0,0 +1,16 @@
+
+
+
+ Debug
+
+
+
+ net4.6.2
+
+
+
+
+
+
+
+
diff --git a/apps/playnite-web-plugin/src/Plugin.cs b/apps/playnite-web-plugin/src/Plugin.cs
new file mode 100644
index 000000000..6ea611cb1
--- /dev/null
+++ b/apps/playnite-web-plugin/src/Plugin.cs
@@ -0,0 +1,97 @@
+using Playnite.SDK;
+using Playnite.SDK.Events;
+using Playnite.SDK.Plugins;
+using System;
+using System.Collections.Generic;
+using System.Windows.Controls;
+
+namespace PlayniteWebPlugin
+{
+ public class WebPlugin : GenericPlugin
+ {
+ private static readonly ILogger logger = LogManager.GetLogger();
+
+ private readonly List mainMenuItems;
+
+ private readonly List sidebarItems;
+
+
+ public WebPlugin(IPlayniteAPI api) : base(api)
+ {
+
+ sidebarItems = new List
+ {
+ };
+ mainMenuItems = new List
+ {
+
+ };
+ }
+
+
+ #region Overrides of Plugin
+
+ public override Guid Id { get; } = Guid.Parse("6d116e57-cebb-4ef0-a1ed-030a8aa6a7e7");
+
+ public override void OnLibraryUpdated(OnLibraryUpdatedEventArgs args)
+ {
+
+ }
+
+ public override void Dispose()
+ {
+ base.Dispose();
+ }
+
+ public override void OnGameInstalled(OnGameInstalledEventArgs args)
+ {
+ }
+
+ public override void OnGameStarted(OnGameStartedEventArgs args)
+ {
+ }
+
+ public override void OnGameStarting(OnGameStartingEventArgs args)
+ {
+ }
+
+ public override void OnGameStopped(OnGameStoppedEventArgs args)
+ {
+ }
+
+ public override void OnGameUninstalled(OnGameUninstalledEventArgs args)
+ {
+ }
+
+ public override void OnApplicationStarted(OnApplicationStartedEventArgs args)
+ {
+
+ }
+
+ public override void OnApplicationStopped(OnApplicationStoppedEventArgs args)
+ {
+ }
+
+ public override IEnumerable GetSidebarItems()
+ {
+ return sidebarItems;
+ }
+
+ public override IEnumerable GetMainMenuItems(GetMainMenuItemsArgs args)
+ {
+ return mainMenuItems;
+ }
+
+ public override ISettings GetSettings(bool firstRunSettings)
+ {
+ throw new NotImplementedException();
+ }
+
+ public override UserControl GetSettingsView(bool firstRunSettings)
+ {
+ throw new NotImplementedException();
+ }
+
+ #endregion
+ }
+}
diff --git a/apps/playnite-web-plugin/tests/unit/src/Directory.Build.props b/apps/playnite-web-plugin/tests/unit/src/Directory.Build.props
new file mode 100644
index 000000000..e82fd708f
--- /dev/null
+++ b/apps/playnite-web-plugin/tests/unit/src/Directory.Build.props
@@ -0,0 +1,26 @@
+
+
+ true
+
+
+
+ $(MSBuildThisFileDirectory)\..\.dist\
+
+
+
+
+ $(DistRoot)
+ $(DistRoot)bin
+ $(DistRoot)obj\
+ $(CommonIntermediateOutputRoot)$(Configuration)\$(MSBuildProjectName)\
+ $(BaseIntermediateOutputPath)
+ $(BaseIntermediateOutputPath)GlobalAssemblyInfo.cs
+ $(BinariesFolder)\$(Configuration)
+ true
+ $(BinariesFolder)\$(Configuration)\$(MSBuildProjectName)
+ $(CommonOutputDirectory)\
+ $(OutputPath)
+ $(IntermediateOutputPath)AssemblyAttributes.cs
+
+
+
diff --git a/apps/playnite-web-plugin/tests/unit/src/PlayniteWebPlugin.Tests.csproj b/apps/playnite-web-plugin/tests/unit/src/PlayniteWebPlugin.Tests.csproj
new file mode 100644
index 000000000..1788f73ec
--- /dev/null
+++ b/apps/playnite-web-plugin/tests/unit/src/PlayniteWebPlugin.Tests.csproj
@@ -0,0 +1,23 @@
+
+
+
+ Debug
+
+
+
+ net4.6.2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/playnite-web-plugin/tests/unit/src/Plugin.cs b/apps/playnite-web-plugin/tests/unit/src/Plugin.cs
new file mode 100644
index 000000000..5bcb3de4f
--- /dev/null
+++ b/apps/playnite-web-plugin/tests/unit/src/Plugin.cs
@@ -0,0 +1,21 @@
+using NUnit.Framework;
+
+namespace PlayniteWebPlugin.UnitTests
+{
+ [TestFixture]
+ public class ExampleTest
+ {
+ [SetUp]
+ public void SetUp()
+ {
+ }
+
+ [Test]
+ public void TrueIsTrue()
+ {
+ var result = true;
+
+ Assert.That(result, Is.EqualTo(true), "True should be true");
+ }
+ }
+}
diff --git a/nx.json b/nx.json
index c6a78be63..88e9c2f60 100644
--- a/nx.json
+++ b/nx.json
@@ -1,5 +1,14 @@
{
- "targetDefaults": {},
+ "targetDefaults": {
+ "build": {
+ "dependsOn": ["^build", "restore"],
+ "cache": true
+ },
+ "test/unit": {
+ "dependsOn": ["restore", "^restore"],
+ "cache": true
+ }
+ },
"affected": {
"defaultBase": "main"
}
diff --git a/tsconfig.base.json b/tsconfig.base.json
new file mode 100644
index 000000000..51de50276
--- /dev/null
+++ b/tsconfig.base.json
@@ -0,0 +1,19 @@
+{
+ "compilerOptions": {
+ "allowJs": true,
+ "baseUrl": "./",
+ "checkJs": true,
+ "esModuleInterop": true,
+ "forceConsistentCasingInFileNames": true,
+ "isolatedModules": true,
+ "module": "ESNext",
+ "moduleResolution": "NodeNext",
+ "noImplicitAny": false,
+ "removeComments": true,
+ "resolveJsonModule": true,
+ "skipLibCheck": true,
+ "sourceMap": true,
+ "strict": true,
+ "target": "ESNext"
+ }
+}
diff --git a/yarn.lock b/yarn.lock
index 74fe07a8d..9436a4528 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -5,6 +5,20 @@ __metadata:
version: 8
cacheKey: 10c0
+"@isaacs/cliui@npm:^8.0.2":
+ version: 8.0.2
+ resolution: "@isaacs/cliui@npm:8.0.2"
+ dependencies:
+ string-width: "npm:^5.1.2"
+ string-width-cjs: "npm:string-width@^4.2.0"
+ strip-ansi: "npm:^7.0.1"
+ strip-ansi-cjs: "npm:strip-ansi@^6.0.1"
+ wrap-ansi: "npm:^8.1.0"
+ wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0"
+ checksum: b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e
+ languageName: node
+ linkType: hard
+
"@jest/schemas@npm:^29.6.3":
version: 29.6.3
resolution: "@jest/schemas@npm:29.6.3"
@@ -96,6 +110,13 @@ __metadata:
languageName: node
linkType: hard
+"@pkgjs/parseargs@npm:^0.11.0":
+ version: 0.11.0
+ resolution: "@pkgjs/parseargs@npm:0.11.0"
+ checksum: 5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd
+ languageName: node
+ linkType: hard
+
"@sinclair/typebox@npm:^0.27.8":
version: 0.27.8
resolution: "@sinclair/typebox@npm:0.27.8"
@@ -145,6 +166,13 @@ __metadata:
languageName: node
linkType: hard
+"ansi-regex@npm:^6.0.1":
+ version: 6.0.1
+ resolution: "ansi-regex@npm:6.0.1"
+ checksum: cbe16dbd2c6b2735d1df7976a7070dd277326434f0212f43abf6d87674095d247968209babdaad31bb00882fa68807256ba9be340eec2f1004de14ca75f52a08
+ languageName: node
+ linkType: hard
+
"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0":
version: 4.3.0
resolution: "ansi-styles@npm:4.3.0"
@@ -161,6 +189,13 @@ __metadata:
languageName: node
linkType: hard
+"ansi-styles@npm:^6.1.0":
+ version: 6.2.1
+ resolution: "ansi-styles@npm:6.2.1"
+ checksum: 5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c
+ languageName: node
+ linkType: hard
+
"argparse@npm:^1.0.7":
version: 1.0.10
resolution: "argparse@npm:1.0.10"
@@ -230,6 +265,15 @@ __metadata:
languageName: node
linkType: hard
+"brace-expansion@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "brace-expansion@npm:2.0.1"
+ dependencies:
+ balanced-match: "npm:^1.0.0"
+ checksum: b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f
+ languageName: node
+ linkType: hard
+
"buffer@npm:^5.5.0":
version: 5.7.1
resolution: "buffer@npm:5.7.1"
@@ -309,6 +353,17 @@ __metadata:
languageName: node
linkType: hard
+"cross-spawn@npm:^7.0.0":
+ version: 7.0.3
+ resolution: "cross-spawn@npm:7.0.3"
+ dependencies:
+ path-key: "npm:^3.1.0"
+ shebang-command: "npm:^2.0.0"
+ which: "npm:^2.0.1"
+ checksum: 5738c312387081c98d69c98e105b6327b069197f864a60593245d64c8089c8a0a744e16349281210d56835bb9274130d825a78b2ad6853ca13cfbeffc0c31750
+ languageName: node
+ linkType: hard
+
"define-lazy-prop@npm:^2.0.0":
version: 2.0.0
resolution: "define-lazy-prop@npm:2.0.0"
@@ -351,6 +406,13 @@ __metadata:
languageName: node
linkType: hard
+"eastasianwidth@npm:^0.2.0":
+ version: 0.2.0
+ resolution: "eastasianwidth@npm:0.2.0"
+ checksum: 26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39
+ languageName: node
+ linkType: hard
+
"emoji-regex@npm:^8.0.0":
version: 8.0.0
resolution: "emoji-regex@npm:8.0.0"
@@ -358,6 +420,13 @@ __metadata:
languageName: node
linkType: hard
+"emoji-regex@npm:^9.2.2":
+ version: 9.2.2
+ resolution: "emoji-regex@npm:9.2.2"
+ checksum: af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639
+ languageName: node
+ linkType: hard
+
"end-of-stream@npm:^1.4.1":
version: 1.4.4
resolution: "end-of-stream@npm:1.4.4"
@@ -428,6 +497,16 @@ __metadata:
languageName: node
linkType: hard
+"foreground-child@npm:^3.1.0":
+ version: 3.1.1
+ resolution: "foreground-child@npm:3.1.1"
+ dependencies:
+ cross-spawn: "npm:^7.0.0"
+ signal-exit: "npm:^4.0.1"
+ checksum: 9700a0285628abaeb37007c9a4d92bd49f67210f09067638774338e146c8e9c825c5c877f072b2f75f41dc6a2d0be8664f79ffc03f6576649f54a84fb9b47de0
+ languageName: node
+ linkType: hard
+
"form-data@npm:^4.0.0":
version: 4.0.0
resolution: "form-data@npm:4.0.0"
@@ -485,6 +564,21 @@ __metadata:
languageName: node
linkType: hard
+"glob@npm:^10.3.7":
+ version: 10.3.10
+ resolution: "glob@npm:10.3.10"
+ dependencies:
+ foreground-child: "npm:^3.1.0"
+ jackspeak: "npm:^2.3.5"
+ minimatch: "npm:^9.0.1"
+ minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0"
+ path-scurry: "npm:^1.10.1"
+ bin:
+ glob: dist/esm/bin.mjs
+ checksum: 13d8a1feb7eac7945f8c8480e11cd4a44b24d26503d99a8d8ac8d5aefbf3e9802a2b6087318a829fad04cb4e829f25c5f4f1110c68966c498720dd261c7e344d
+ languageName: node
+ linkType: hard
+
"glob@npm:^7.1.3":
version: 7.2.3
resolution: "glob@npm:7.2.3"
@@ -569,6 +663,26 @@ __metadata:
languageName: node
linkType: hard
+"isexe@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "isexe@npm:2.0.0"
+ checksum: 228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d
+ languageName: node
+ linkType: hard
+
+"jackspeak@npm:^2.3.5":
+ version: 2.3.6
+ resolution: "jackspeak@npm:2.3.6"
+ dependencies:
+ "@isaacs/cliui": "npm:^8.0.2"
+ "@pkgjs/parseargs": "npm:^0.11.0"
+ dependenciesMeta:
+ "@pkgjs/parseargs":
+ optional: true
+ checksum: f01d8f972d894cd7638bc338e9ef5ddb86f7b208ce177a36d718eac96ec86638a6efa17d0221b10073e64b45edc2ce15340db9380b1f5d5c5d000cbc517dc111
+ languageName: node
+ linkType: hard
+
"jest-diff@npm:^29.4.1":
version: 29.7.0
resolution: "jest-diff@npm:29.7.0"
@@ -656,6 +770,15 @@ __metadata:
languageName: node
linkType: hard
+"lru-cache@npm:^9.1.1 || ^10.0.0":
+ version: 10.0.2
+ resolution: "lru-cache@npm:10.0.2"
+ dependencies:
+ semver: "npm:^7.3.5"
+ checksum: 5c83a7a2a320a445129cb67a1794437db5483942df63536026fba1cb7ba2e1f7456037876cc9d31076132010f92cb943bee358d336dd94105e50ea971e6d737d
+ languageName: node
+ linkType: hard
+
"mime-db@npm:1.52.0":
version: 1.52.0
resolution: "mime-db@npm:1.52.0"
@@ -697,6 +820,15 @@ __metadata:
languageName: node
linkType: hard
+"minimatch@npm:^9.0.1":
+ version: 9.0.3
+ resolution: "minimatch@npm:9.0.3"
+ dependencies:
+ brace-expansion: "npm:^2.0.1"
+ checksum: 85f407dcd38ac3e180f425e86553911d101455ca3ad5544d6a7cec16286657e4f8a9aa6695803025c55e31e35a91a2252b5dc8e7d527211278b8b65b4dbd5eac
+ languageName: node
+ linkType: hard
+
"minimist@npm:^1.2.0, minimist@npm:^1.2.6":
version: 1.2.8
resolution: "minimist@npm:1.2.8"
@@ -704,6 +836,13 @@ __metadata:
languageName: node
linkType: hard
+"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0":
+ version: 7.0.4
+ resolution: "minipass@npm:7.0.4"
+ checksum: 6c7370a6dfd257bf18222da581ba89a5eaedca10e158781232a8b5542a90547540b4b9b7e7f490e4cda43acfbd12e086f0453728ecf8c19e0ef6921bc5958ac5
+ languageName: node
+ linkType: hard
+
"node-machine-id@npm:1.1.12":
version: 1.1.12
resolution: "node-machine-id@npm:1.1.12"
@@ -720,7 +859,7 @@ __metadata:
languageName: node
linkType: hard
-"nx@npm:17.1.2":
+"nx@npm:17.1.2, nx@npm:^17.1.2":
version: 17.1.2
resolution: "nx@npm:17.1.2"
dependencies:
@@ -841,13 +980,32 @@ __metadata:
languageName: node
linkType: hard
-"path-key@npm:^3.0.0":
+"path-key@npm:^3.0.0, path-key@npm:^3.1.0":
version: 3.1.1
resolution: "path-key@npm:3.1.1"
checksum: 748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c
languageName: node
linkType: hard
+"path-scurry@npm:^1.10.1":
+ version: 1.10.1
+ resolution: "path-scurry@npm:1.10.1"
+ dependencies:
+ lru-cache: "npm:^9.1.1 || ^10.0.0"
+ minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0"
+ checksum: e5dc78a7348d25eec61ab166317e9e9c7b46818aa2c2b9006c507a6ff48c672d011292d9662527213e558f5652ce0afcc788663a061d8b59ab495681840c0c1e
+ languageName: node
+ linkType: hard
+
+"playnite-web-plugin@workspace:apps/playnite-web-plugin":
+ version: 0.0.0-use.local
+ resolution: "playnite-web-plugin@workspace:apps/playnite-web-plugin"
+ dependencies:
+ nx: "npm:^17.1.2"
+ rimraf: "npm:^5.0.5"
+ languageName: unknown
+ linkType: soft
+
"playnite-web@workspace:.":
version: 0.0.0-use.local
resolution: "playnite-web@workspace:."
@@ -920,6 +1078,17 @@ __metadata:
languageName: node
linkType: hard
+"rimraf@npm:^5.0.5":
+ version: 5.0.5
+ resolution: "rimraf@npm:5.0.5"
+ dependencies:
+ glob: "npm:^10.3.7"
+ bin:
+ rimraf: dist/esm/bin.mjs
+ checksum: d50dbe724f33835decd88395b25ed35995077c60a50ae78ded06e0185418914e555817aad1b4243edbff2254548c2f6ad6f70cc850040bebb4da9e8cc016f586
+ languageName: node
+ linkType: hard
+
"safe-buffer@npm:~5.2.0":
version: 5.2.1
resolution: "safe-buffer@npm:5.2.1"
@@ -938,6 +1107,33 @@ __metadata:
languageName: node
linkType: hard
+"semver@npm:^7.3.5":
+ version: 7.5.4
+ resolution: "semver@npm:7.5.4"
+ dependencies:
+ lru-cache: "npm:^6.0.0"
+ bin:
+ semver: bin/semver.js
+ checksum: 5160b06975a38b11c1ab55950cb5b8a23db78df88275d3d8a42ccf1f29e55112ac995b3a26a522c36e3b5f76b0445f1eef70d696b8c7862a2b4303d7b0e7609e
+ languageName: node
+ linkType: hard
+
+"shebang-command@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "shebang-command@npm:2.0.0"
+ dependencies:
+ shebang-regex: "npm:^3.0.0"
+ checksum: a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e
+ languageName: node
+ linkType: hard
+
+"shebang-regex@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "shebang-regex@npm:3.0.0"
+ checksum: 1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690
+ languageName: node
+ linkType: hard
+
"signal-exit@npm:^3.0.2":
version: 3.0.7
resolution: "signal-exit@npm:3.0.7"
@@ -945,6 +1141,13 @@ __metadata:
languageName: node
linkType: hard
+"signal-exit@npm:^4.0.1":
+ version: 4.1.0
+ resolution: "signal-exit@npm:4.1.0"
+ checksum: 41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83
+ languageName: node
+ linkType: hard
+
"sprintf-js@npm:~1.0.2":
version: 1.0.3
resolution: "sprintf-js@npm:1.0.3"
@@ -952,7 +1155,7 @@ __metadata:
languageName: node
linkType: hard
-"string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3":
+"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3":
version: 4.2.3
resolution: "string-width@npm:4.2.3"
dependencies:
@@ -963,6 +1166,17 @@ __metadata:
languageName: node
linkType: hard
+"string-width@npm:^5.0.1, string-width@npm:^5.1.2":
+ version: 5.1.2
+ resolution: "string-width@npm:5.1.2"
+ dependencies:
+ eastasianwidth: "npm:^0.2.0"
+ emoji-regex: "npm:^9.2.2"
+ strip-ansi: "npm:^7.0.1"
+ checksum: ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca
+ languageName: node
+ linkType: hard
+
"string_decoder@npm:^1.1.1":
version: 1.3.0
resolution: "string_decoder@npm:1.3.0"
@@ -972,7 +1186,7 @@ __metadata:
languageName: node
linkType: hard
-"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1":
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1":
version: 6.0.1
resolution: "strip-ansi@npm:6.0.1"
dependencies:
@@ -981,6 +1195,15 @@ __metadata:
languageName: node
linkType: hard
+"strip-ansi@npm:^7.0.1":
+ version: 7.1.0
+ resolution: "strip-ansi@npm:7.1.0"
+ dependencies:
+ ansi-regex: "npm:^6.0.1"
+ checksum: a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4
+ languageName: node
+ linkType: hard
+
"strip-bom@npm:^3.0.0":
version: 3.0.0
resolution: "strip-bom@npm:3.0.0"
@@ -1078,7 +1301,18 @@ __metadata:
languageName: node
linkType: hard
-"wrap-ansi@npm:^7.0.0":
+"which@npm:^2.0.1":
+ version: 2.0.2
+ resolution: "which@npm:2.0.2"
+ dependencies:
+ isexe: "npm:^2.0.0"
+ bin:
+ node-which: ./bin/node-which
+ checksum: 66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f
+ languageName: node
+ linkType: hard
+
+"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0":
version: 7.0.0
resolution: "wrap-ansi@npm:7.0.0"
dependencies:
@@ -1089,6 +1323,17 @@ __metadata:
languageName: node
linkType: hard
+"wrap-ansi@npm:^8.1.0":
+ version: 8.1.0
+ resolution: "wrap-ansi@npm:8.1.0"
+ dependencies:
+ ansi-styles: "npm:^6.1.0"
+ string-width: "npm:^5.0.1"
+ strip-ansi: "npm:^7.0.1"
+ checksum: 138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60
+ languageName: node
+ linkType: hard
+
"wrappy@npm:1":
version: 1.0.2
resolution: "wrappy@npm:1.0.2"