diff --git a/.github/workflows/auto-close-stale-pr.yml b/.github/workflows/auto-close-stale-pr.yml
index 6ae3fec5..5bcaa05b 100644
--- a/.github/workflows/auto-close-stale-pr.yml
+++ b/.github/workflows/auto-close-stale-pr.yml
@@ -18,4 +18,4 @@ jobs:
days-before-pr-stale: 21
days-before-pr-close: 7
exempt-draft-pr: true
- repo-token: ${{ secrets.GITHUB_TOKEN }}
+ repo-token: ${{ secrets.JF_BOT_TOKEN }}
diff --git a/.github/workflows/automations.yml b/.github/workflows/automations.yml
index d7a2f3df..2086d6d7 100644
--- a/.github/workflows/automations.yml
+++ b/.github/workflows/automations.yml
@@ -30,4 +30,5 @@ jobs:
uses: eps1lon/actions-label-merge-conflict@releases/2.x
with:
dirtyLabel: "merge conflict"
- repoToken: ${{ secrets.GITHUB_TOKEN }}
+ commentOnDirty: "This pull request has merge conflicts. Please resolve the conflicts so the PR can be reviewed. Thanks!"
+ repoToken: ${{ secrets.JF_BOT_TOKEN }}
diff --git a/.github/workflows/build-dev.yml b/.github/workflows/build-dev.yml
index fd5e902e..3c945d5e 100644
--- a/.github/workflows/build-dev.yml
+++ b/.github/workflows/build-dev.yml
@@ -12,7 +12,7 @@ jobs:
dev:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3
+ - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3
- uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3
with:
node-version: "lts/*"
diff --git a/.github/workflows/build-prod.yml b/.github/workflows/build-prod.yml
index bb3039d9..ded52f4e 100644
--- a/.github/workflows/build-prod.yml
+++ b/.github/workflows/build-prod.yml
@@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout master (the latest release)
- uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3
+ uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3
with:
ref: master
- name: Install jq to parse json
@@ -33,7 +33,7 @@ jobs:
- name: Save old Makefile version
run: awk 'BEGIN { FS=" = " } /^VERSION/ { print "oldMakeVersion="$2; }' Makefile >> $GITHUB_ENV
- name: Checkout PR branch
- uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3
+ uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3
- name: Save new package.json version
run: echo "newPackVersion=$(jq -r ".version" package.json)" >> $GITHUB_ENV
- name: package.json version must be updated
@@ -61,7 +61,7 @@ jobs:
prod:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3
+ - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3
- uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3
with:
node-version: "lts/*"
diff --git a/.gitignore b/.gitignore
index 3d5bcad8..4ce5573c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,18 +1,17 @@
*.svg
-jellyfin-roku.zip
-source/globals.brs
.env
-
-###BrightScript specific
+# BrightScript
dist/apps
out/
-
+build/
roku_modules
-
-#NPM modules
+source/globals.brs
+jellyfin-roku.zip
+# Rooibos
+bsconfig-tdd.json
+# NPM
node_modules/
-
-#Eclipse
+# Eclipse
.buildpath
.project
.settings
\ No newline at end of file
diff --git a/.vscode/brighterscript.code-snippets b/.vscode/brighterscript.code-snippets
new file mode 100644
index 00000000..23b25e21
--- /dev/null
+++ b/.vscode/brighterscript.code-snippets
@@ -0,0 +1,418 @@
+{
+ "rooibos beforeEach": {
+ "prefix": "beforeEach",
+ "body": [
+ "@beforeEach",
+ "function ${2:namespace}_${3:itGroup}_beforeEach()",
+ "\t$0",
+ "end function"
+ ]
+ },
+ "rooibos afterEach": {
+ "prefix": "afterEach",
+ "body": [
+ "@afterEach",
+ "function ${2:namespace}_${3:itGroup}_afterEach()",
+ "\t$0",
+ "end function"
+ ]
+ },
+ "rooibos setup": {
+ "prefix": "setup",
+ "body": [
+ "@setup",
+ "function ${2:namespace}_setup()",
+ "\t$0",
+ "end function"
+ ]
+ },
+ "rooibos tearDown": {
+ "prefix": "tearDown",
+ "body": [
+ "@tearDown",
+ "function ${2:namespace}_tearDown()",
+ "\t$0",
+ "end function"
+ ]
+ },
+ "rooibos ignore": {
+ "prefix": "ignore",
+ "body": [
+ "@ignore ${1:reason}",
+ "$0"
+ ]
+ },
+ "rooibos only": {
+ "prefix": "only",
+ "body": [
+ "@only",
+ "$0"
+ ]
+ },
+ "rooibos testSuite": {
+ "prefix": "suite",
+ "body": [
+ "@suite(\"$1\")",
+ "$0"
+ ]
+ },
+ "rooibos testcase": {
+ "prefix": "it",
+ "body": [
+ "@it(\"$1\")",
+ "function _()",
+ "\t$0",
+ "end function"
+ ]
+ },
+ "rooibos params": {
+ "prefix": "params",
+ "body": [
+ "@params(${1:values})$0"
+ ]
+ },
+ "rooibos it": {
+ "prefix": "describe",
+ "body": [
+ "'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+ "@describe(\"${1:groupName}\")",
+ "'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+ "",
+ "$0"
+ ]
+ },
+ "rooibos stub": {
+ "prefix": "stub",
+ "body": [
+ "m.stub(${1:target}, \"${2:methodName}\", [${3:methodArgs}], ${4:result})",
+ "$0"
+ ]
+ },
+ "rooibos mock": {
+ "prefix": "expect",
+ "body": [
+ "${1:mockName} = m.mock(${2:target}, \"${3:methodName}\", ${4:expectedNumberOfcalls}, [${5:methodArgs}], ${6:result})",
+ "$0"
+ ]
+ },
+ "rooibos expect": {
+ "prefix": "expect",
+ "body": [
+ "m.expectOnce(${1:target}, \"${2:methodName}\", ${3:expectedNumberOfcalls}, [${4:methodArgs}], ${5:result})",
+ "$0"
+ ]
+ },
+ "rooibos expectOnce": {
+ "prefix": "expectOnce",
+ "body": [
+ "m.expectOnce(${1:target}, \"${2:methodName}\", [${3:methodArgs}], ${4:result})",
+ "$0"
+ ]
+ },
+ "rooibos expectCallfunc": {
+ "prefix": "expectCallfunc",
+ "body": [
+ "m.expectOnce(${1:target}, \"callFunc\", [\"${2:methodName}\", ${3:methodArgs}], ${4:result})",
+ "$0"
+ ]
+ },
+ "rooibos expectObserveNodeField": {
+ "prefix": "eonf",
+ "body": [
+ "m.expectOnce(${1:target}, \"observeNodeField\", [${2:node},\"${3:fieldName}\", m.${4:callback}])",
+ "$0"
+ ]
+ },
+ "rooibos expectUnObserveNodeField": {
+ "prefix": "eunf",
+ "body": [
+ "m.expectOnce(${1:target}, \"unobserveNodeField\", [${2:node},\"${:fieldName}\", m.${4:callback}])",
+ "$0"
+ ]
+ },
+ "rooibos expectObjectOnce": {
+ "prefix": "expectObjectOnce",
+ "body": [
+ "${1:name} = { \"id\" : \"${1:name}\" }",
+ "m.expectOnce(${2:target}, \"${3:methodName}\", [${4:methodArgs}], ${1:name})",
+ "$0"
+ ]
+ },
+ "rooibos expectGetInstance": {
+ "prefix": "expectGetInstance",
+ "body": [
+ "${1:name} = { \"id\" : \"${1:name}\" }",
+ "m.expectOnce(${2:target}, \"getInstance\", [\"${3:instanceName}\"], ${1:name})",
+ "$0"
+ ]
+ },
+ "rooibos expectCreateSGNode": {
+ "prefix": "expectCreateSGNode",
+ "body": [
+ "${1:name} = { \"id\" : \"${1:name}\" }",
+ "m.expectOnce(${2:target}, \"createSGNode\", [\"${3:nodeType}\"$0], ${1:name})"
+ ]
+ },
+ "rooibos expectGetClassInstance": {
+ "prefix": "expectGetClassInstance",
+ "body": [
+ "${1:name} = { \"id\" : \"${1:name}\" }",
+ "m.expectOnce(${2:target}, \"getClassInstance\", [\"${3:instanceName}\"], ${1:name})",
+ "$0"
+ ]
+ },
+ "rooibos expectExpectOnce": {
+ "prefix": "expectExpect",
+ "body": [
+ "${1:name} = { \"id\" : \"${1:name}\" }",
+ "m.expectOnce(${2:target}, \"${3:methodName}\", [${4:methodArgs}], ${1:name})",
+ "m.expectOnce(${1:name}, \"${5:methodName}\", [${6:methodArgs}], ${7:name})",
+ "$0"
+ ]
+ },
+ "rooibos expectNone": {
+ "prefix": "expectNone",
+ "body": [
+ "m.expectNone(${1:target}, \"${2:methodName}\")",
+ "$0"
+ ]
+ },
+ "rooibos assertFalse": {
+ "prefix": "assertFalse",
+ "body": [
+ "m.assertFalse(${1:value})",
+ "$0"
+ ]
+ },
+ "rooibos assertAsync": {
+ "prefix": "assertAsync",
+ "body": [
+ "m.AssertAsyncField(${1:value}, $2{:fieldName})",
+ "$0"
+ ]
+ },
+ "rooibos assertTrue": {
+ "prefix": "assertTrue",
+ "body": [
+ "m.assertTrue(${1:value})",
+ "$0"
+ ]
+ },
+ "rooibos assertEqual": {
+ "prefix": "assertEqual",
+ "body": [
+ "m.assertEqual(${1:value}, ${2:expected})",
+ "$0"
+ ]
+ },
+ "rooibos assertLike": {
+ "prefix": "assertLike",
+ "body": [
+ "m.assertLike(${1:value}, ${2:expected})",
+ "$0"
+ ]
+ },
+ "rooibos assertNotEqual": {
+ "prefix": "assertNotEqual",
+ "body": [
+ "m.assertNotEqual(${1:value}, ${2:expected})",
+ "$0"
+ ]
+ },
+ "rooibos assertInvalid": {
+ "prefix": "assertInvalid",
+ "body": [
+ "m.assertInvalid(${1:value})",
+ "$0"
+ ]
+ },
+ "rooibos assertNotInvalid": {
+ "prefix": "assertNotInvalid",
+ "body": [
+ "m.assertNotInvalid(${1:value})",
+ "$0"
+ ]
+ },
+ "rooibos assertAAHasKey": {
+ "prefix": "assertAAHasKey",
+ "body": [
+ "m.assertAAHasKey(${1:value}, ${2:expected})",
+ "$0"
+ ]
+ },
+ "rooibos assertAANotHasKey": {
+ "prefix": "assertAANotHasKey",
+ "body": [
+ "m.assertAANotHasKey(${1:value}, ${2:expected})",
+ "$0"
+ ]
+ },
+ "rooibos assertAAHasKeys": {
+ "prefix": "assertAAHasKeys",
+ "body": [
+ "m.assertAAHasKeys(${1:value}, ${2:expected})",
+ "$0"
+ ]
+ },
+ "rooibos assertAANotHasKeys": {
+ "prefix": "assertAANotHasKeys",
+ "body": [
+ "m.assertAANotHasKeys(${1:value}, ${2:expected})",
+ "$0"
+ ]
+ },
+ "rooibos assertArrayContains": {
+ "prefix": "assertArrayContains",
+ "body": [
+ "m.assertArrayContains(${1:value}, ${2:expected})",
+ "$0"
+ ]
+ },
+ "rooibos assertArrayNotContains": {
+ "prefix": "assertArrayNotContains",
+ "body": [
+ "m.assertArrayNotContains(${1:value}, ${2:expected})",
+ "$0"
+ ]
+ },
+ "rooibos assertArrayContainsSubset": {
+ "prefix": "assertArrayContainsSubset",
+ "body": [
+ "m.assertArrayContainsSubset(${1:value}, ${2:expected})",
+ "$0"
+ ]
+ },
+ "rooibos assertArrayContainsAAs": {
+ "prefix": "assertArrayContainsAAs",
+ "body": [
+ "m.assertArrayContainsAAs(${1:value}, ${2:expected})",
+ "$0"
+ ]
+ },
+ "rooibos assertArrayNotContainsSubset": {
+ "prefix": "assertArrayNotContainsSubset",
+ "body": [
+ "m.assertArrayNotContainsSubset(${1:value}, ${2:expected})",
+ "$0"
+ ]
+ },
+ "rooibos assertArrayCount": {
+ "prefix": "assertArrayCount",
+ "body": [
+ "m.assertArrayCount(${1:value}, ${2:expected})",
+ "$0"
+ ]
+ },
+ "rooibos assertArrayNotCount": {
+ "prefix": "assertArrayNotCount",
+ "body": [
+ "m.assertArrayNotCount(${1:value}, ${2:expected})",
+ "$0"
+ ]
+ },
+ "rooibos assertEmpty": {
+ "prefix": "assertEmpty",
+ "body": [
+ "m.assertEmpty(${1:value})",
+ "$0"
+ ]
+ },
+ "rooibos assertNotEmpty": {
+ "prefix": "assertNotEmpty",
+ "body": [
+ "m.assertNotEmpty(${1:value})",
+ "$0"
+ ]
+ },
+ "rooibos assertArrayContainsOnlyValuesOfType": {
+ "prefix": "assertArrayContainsOnlyValuesOfType",
+ "body": [
+ "m.assertArrayContainsOnlyValuesOfType(${1:value}, ${2:expected})",
+ "$0"
+ ]
+ },
+ "rooibos assertType": {
+ "prefix": "assertType",
+ "body": [
+ "m.assertType(${1:value}, ${2:expected})",
+ "$0"
+ ]
+ },
+ "rooibos assertSubType": {
+ "prefix": "assertSubType",
+ "body": [
+ "m.assertSubType(${1:value}, ${2:expected})",
+ "$0"
+ ]
+ },
+ "rooibos assertNodeCount": {
+ "prefix": "assertNodeCount",
+ "body": [
+ "m.assertNodeCount(${1:value}, ${2:expected})",
+ "$0"
+ ]
+ },
+ "rooibos assertNodeNotCount": {
+ "prefix": "assertNodeNotCount",
+ "body": [
+ "m.assertNodeNotCount(${1:value}, ${2:expected})",
+ "$0"
+ ]
+ },
+ "rooibos assertNodeEmpty": {
+ "prefix": "assertNodeEmpty",
+ "body": [
+ "m.assertNodeEmpty(${1:value})",
+ "$0"
+ ]
+ },
+ "rooibos assertNodeNotEmpty": {
+ "prefix": "assertNodeNotEmpty",
+ "body": [
+ "m.assertNodeNotEmpty(${1:value})",
+ "$0"
+ ]
+ },
+ "rooibos assertNodeContains": {
+ "prefix": "assertNodeContains",
+ "body": [
+ "m.assertNodeContains(${1:value}, ${2:expected})",
+ "$0"
+ ]
+ },
+ "rooibos assertNodeNotContains": {
+ "prefix": "assertNodeNotContains",
+ "body": [
+ "m.assertNodeNotContains(${1:value}, ${2:expected})",
+ "$0"
+ ]
+ },
+ "rooibos assertNodeContainsFields": {
+ "prefix": "assertNodeContainsFields",
+ "body": [
+ "m.assertNodeContainsFields(${1:value}, ${2:expected})",
+ "$0"
+ ]
+ },
+ "rooibos assertNodeNotContainsFields": {
+ "prefix": "assertNodeNotContainsFields",
+ "body": [
+ "m.assertNodeNotContainsFields(${1:value}, ${2:expected})",
+ "$0"
+ ]
+ },
+ "rooibos assertAAContainsSubset": {
+ "prefix": "assertAAContainsSubset",
+ "body": [
+ "m.assertAAContainsSubset(${1:value}, ${2:expected})",
+ "$0"
+ ]
+ },
+ "rooibos assertMocks": {
+ "prefix": "assertMocks",
+ "body": [
+ "m.assertMocks(${1:value}, ${2:expected})",
+ "$0"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 4a9b3200..c4673d71 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -4,7 +4,7 @@
{
"type": "brightscript",
"request": "launch",
- "name": "Jellyfin Debug: Launch",
+ "name": "Jellyfin Debug",
"stopOnEntry": false,
// To enable RALE:
// set "brightscript.debug.raleTrackerTaskFileLocation": "/absolute/path/to/rale/TrackerTask.xml" in your vscode user settings
@@ -22,6 +22,66 @@
"source/**/*",
"manifest"
]
+ },
+ {
+ "name": "Run tests",
+ "type": "brightscript",
+ "request": "launch",
+ "consoleOutput": "full",
+ "internalConsoleOptions": "neverOpen",
+ "preLaunchTask": "build-tests",
+ "retainStagingFolder": true,
+ "stopOnEntry": false,
+ "files": [
+ "!**/images/*.*",
+ "!**/fonts/*.*",
+ "!*.jpg",
+ "!*.png",
+ "*",
+ "*.*",
+ "**/*.*",
+ "!*.zip",
+ "!**/*.zip"
+ ],
+ "rootDir": "${workspaceFolder}/build",
+ "sourceDirs": [
+ "${workspaceFolder}/test-app"
+ ],
+ "enableDebuggerAutoRecovery": true,
+ "stopDebuggerOnAppExit": true,
+ "enableVariablesPanel": false,
+ "injectRaleTrackerTask": false,
+ "enableDebugProtocol": false
+ },
+ {
+ "name": "Run test-tdd",
+ "type": "brightscript",
+ "request": "launch",
+ "consoleOutput": "full",
+ "internalConsoleOptions": "neverOpen",
+ "preLaunchTask": "build-tdd",
+ "retainStagingFolder": true,
+ "stopOnEntry": false,
+ "files": [
+ "!**/images/*.*",
+ "!**/fonts/*.*",
+ "!*.jpg",
+ "!*.png",
+ "*",
+ "*.*",
+ "**/*.*",
+ "!*.zip",
+ "!**/*.zip"
+ ],
+ "rootDir": "${workspaceFolder}/build",
+ "sourceDirs": [
+ "${workspaceFolder}/test-app"
+ ],
+ "enableDebuggerAutoRecovery": true,
+ "stopDebuggerOnAppExit": true,
+ "enableVariablesPanel": false,
+ "injectRaleTrackerTask": false,
+ "enableDebugProtocol": false
}
]
}
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 65c7ba47..a2379557 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -2,6 +2,13 @@
"files.associations": {
"*.ts": "xml"
},
+ "[xml]": {
+ "editor.defaultFormatter": "redhat.vscode-xml"
+ },
+ "[markdown]": {
+ "editor.defaultFormatter": "DavidAnson.vscode-markdownlint"
+ },
"xml.format.maxLineWidth": 0,
- "editor.formatOnSave": true
+ "editor.formatOnSave": true,
+ "brightscript.bsdk": "node_modules/brighterscript"
}
\ No newline at end of file
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
new file mode 100644
index 00000000..232baf36
--- /dev/null
+++ b/.vscode/tasks.json
@@ -0,0 +1,41 @@
+{
+ "version": "2.0.0",
+ "tasks": [
+ {
+ "label": "build-tests",
+ "type": "shell",
+ "command": "npm run build-tests",
+ "problemMatcher": [],
+ "presentation": {
+ "echo": true,
+ "reveal": "silent",
+ "focus": false,
+ "panel": "shared",
+ "showReuseMessage": false,
+ "clear": true
+ },
+ "group": {
+ "kind": "build",
+ "isDefault": true
+ }
+ },
+ {
+ "label": "build-tdd",
+ "type": "shell",
+ "command": "npm run build-tdd",
+ "problemMatcher": [],
+ "presentation": {
+ "echo": true,
+ "reveal": "silent",
+ "focus": false,
+ "panel": "shared",
+ "showReuseMessage": false,
+ "clear": true
+ },
+ "group": {
+ "kind": "build",
+ "isDefault": true
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/bsconfig-tests.json b/bsconfig-tests.json
new file mode 100644
index 00000000..ee5a654b
--- /dev/null
+++ b/bsconfig-tests.json
@@ -0,0 +1,44 @@
+{
+ "files": [
+ {
+ "src": "test-app/**/*"
+ },
+ {
+ "src": "source/**/!(Main.brs)",
+ "dest": "source"
+ },
+ {
+ "src": "components/**/*",
+ "dest": "components"
+ },
+ {
+ "src": "locale/**/*",
+ "dest": "locale"
+ },
+ {
+ "src": "settings/**/*",
+ "dest": "settings"
+ }
+ ],
+ "autoImportComponentScript": true,
+ "createPackage": false,
+ "stagingFolderPath": "build",
+ "plugins": [
+ "rooibos-roku"
+ ],
+ "rooibos": {
+ "isRecordingCodeCoverage": false,
+ "testsFilePattern": null,
+ "tags": [
+ "!integration",
+ "!deprecated",
+ "!fixme"
+ ],
+ "showOnlyFailures": true,
+ "catchCrashes": true,
+ "lineWidth": 70,
+ "failFast": false,
+ "sendHomeOnFinish": false
+ },
+ "sourceMap": true
+}
\ No newline at end of file
diff --git a/bsconfig.json b/bsconfig.json
index 4045d2b8..61a5eb62 100644
--- a/bsconfig.json
+++ b/bsconfig.json
@@ -9,11 +9,11 @@
"settings/*.*"
],
"plugins": [
- "@rokucommunity/bslint"
+ "@rokucommunity/bslint",
+ "rooibos-roku"
],
"diagnosticFilters": [
- "**/roku_modules/**/*",
- "**/testFramework/*",
- "**/tests/*"
+ "node_modules/**",
+ "**/roku_modules/**"
]
}
\ No newline at end of file
diff --git a/bsfmt.json b/bsfmt.json
index ce0f85d4..3deaa0f9 100644
--- a/bsfmt.json
+++ b/bsfmt.json
@@ -1,6 +1,9 @@
{
"files": [
"source/**/*.brs",
- "components/**/*.brs"
+ "source/**/*.bs",
+ "components/**/*.brs",
+ "components/**/*.bs",
+ "test-app/**/*.bs"
]
-}
+}
\ No newline at end of file
diff --git a/components/ItemGrid/LoadVideoContentTask.brs b/components/ItemGrid/LoadVideoContentTask.brs
index b82d7a3c..d6641899 100644
--- a/components/ItemGrid/LoadVideoContentTask.brs
+++ b/components/ItemGrid/LoadVideoContentTask.brs
@@ -13,7 +13,7 @@ sub loadItems()
m.top.content = [LoadItems_VideoPlayer(m.top.itemId)]
end sub
-function LoadItems_VideoPlayer(id, mediaSourceId = invalid, audio_stream_idx = 1, subtitle_idx = -1, forceTranscoding = false, showIntro = true, allowResumeDialog = true)
+function LoadItems_VideoPlayer(id as string, mediaSourceId = invalid as dynamic, audio_stream_idx = 1 as integer, subtitle_idx = -1 as integer, forceTranscoding = false as boolean, showIntro = true as boolean, allowResumeDialog = true as boolean) as dynamic
video = {}
video.id = id
@@ -32,7 +32,7 @@ function LoadItems_VideoPlayer(id, mediaSourceId = invalid, audio_stream_idx = 1
return video
end function
-sub LoadItems_AddVideoContent(video, mediaSourceId, audio_stream_idx = 1, subtitle_idx = -1, playbackPosition = -1, forceTranscoding = false, showIntro = true, allowResumeDialog = true)
+sub LoadItems_AddVideoContent(video as object, mediaSourceId as dynamic, audio_stream_idx = 1 as integer, subtitle_idx = -1 as integer, playbackPosition = -1 as integer, forceTranscoding = false as boolean, showIntro = true as boolean, allowResumeDialog = true as boolean)
meta = ItemMetaData(video.id)
diff --git a/components/PlayedCheckmark.brs b/components/PlayedCheckmark.brs
new file mode 100644
index 00000000..205bb6c2
--- /dev/null
+++ b/components/PlayedCheckmark.brs
@@ -0,0 +1,4 @@
+sub init()
+ checkmark = m.top.findNode("checkmark")
+ checkmark.font.size = 48
+end sub
diff --git a/components/PlayedCheckmark.xml b/components/PlayedCheckmark.xml
new file mode 100644
index 00000000..9d6285c6
--- /dev/null
+++ b/components/PlayedCheckmark.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/data/HomeData.brs b/components/data/HomeData.brs
index 1426bf6b..1b5a251a 100644
--- a/components/data/HomeData.brs
+++ b/components/data/HomeData.brs
@@ -28,8 +28,9 @@ sub setData()
end if
else if datum.type = "Episode"
- imgParams = { "AddPlayedIndicator": datum.UserData.Played }
+ m.top.isWatched = datum.UserData.Played
+ imgParams = {}
imgParams.Append({ "maxHeight": 261 })
imgParams.Append({ "maxWidth": 464 })
@@ -68,8 +69,9 @@ sub setData()
end if
else if datum.type = "Movie"
- imgParams = { AddPlayedIndicator: datum.UserData.Played }
+ m.top.isWatched = datum.UserData.Played
+ imgParams = {}
imgParams.Append({ "maxHeight": 261 })
imgParams.Append({ "maxWidth": 175 })
@@ -92,8 +94,9 @@ sub setData()
end if
else if datum.type = "Video"
- imgParams = { AddPlayedIndicator: datum.UserData.Played }
+ m.top.isWatched = datum.UserData.Played
+ imgParams = {}
imgParams.Append({ "maxHeight": 261 })
imgParams.Append({ "maxWidth": 175 })
diff --git a/components/data/HomeData.xml b/components/data/HomeData.xml
index 0f4efcd0..b0d27b0e 100644
--- a/components/data/HomeData.xml
+++ b/components/data/HomeData.xml
@@ -1,4 +1,4 @@
-
+
@@ -13,9 +13,10 @@
+
-
+
\ No newline at end of file
diff --git a/components/home/HomeItem.brs b/components/home/HomeItem.brs
index 1ec44c32..edfeed7e 100644
--- a/components/home/HomeItem.brs
+++ b/components/home/HomeItem.brs
@@ -9,6 +9,7 @@ sub init()
m.itemPoster.observeField("loadStatus", "onPosterLoadStatusChanged")
m.unplayedCount = m.top.findNode("unplayedCount")
m.unplayedEpisodeCount = m.top.findNode("unplayedEpisodeCount")
+ m.playedIndicator = m.top.findNode("playedIndicator")
m.showProgressBarAnimation = m.top.findNode("showProgressBar")
m.showProgressBarField = m.top.findNode("showProgressBarField")
@@ -37,12 +38,19 @@ sub itemContentChanged()
m.itemIcon.uri = itemData.iconUrl
end if
- if LCase(itemData.type) = "series"
- if get_user_setting("ui.tvshows.disableUnwatchedEpisodeCount", "false") = "false"
- if isValid(itemData.json.UserData) and isValid(itemData.json.UserData.UnplayedItemCount)
- if itemData.json.UserData.UnplayedItemCount > 0
- m.unplayedCount.visible = true
- m.unplayedEpisodeCount.text = itemData.json.UserData.UnplayedItemCount
+ if itemData.isWatched
+ m.playedIndicator.visible = true
+ m.unplayedCount.visible = false
+ else
+ m.playedIndicator.visible = false
+
+ if LCase(itemData.type) = "series"
+ if get_user_setting("ui.tvshows.disableUnwatchedEpisodeCount", "false") = "false"
+ if isValid(itemData.json.UserData) and isValid(itemData.json.UserData.UnplayedItemCount)
+ if itemData.json.UserData.UnplayedItemCount > 0
+ m.unplayedCount.visible = true
+ m.unplayedEpisodeCount.text = itemData.json.UserData.UnplayedItemCount
+ end if
end if
end if
end if
@@ -64,6 +72,8 @@ sub itemContentChanged()
return
end if
+ playedIndicatorLeftPosition = m.itemPoster.width - 60
+ m.playedIndicator.translation = [playedIndicatorLeftPosition, 0]
m.itemText.height = 34
m.itemText.font.size = 25
@@ -166,6 +176,20 @@ sub itemContentChanged()
return
end if
+ if itemData.type = "BoxSet"
+ m.itemText.text = itemData.name
+ m.itemPoster.uri = itemData.posterURL
+
+ ' Set small text to number of items in the collection
+ if isValid(itemData.json) and isValid(itemData.json.ChildCount)
+ m.itemTextExtra.text = StrI(itemData.json.ChildCount).trim() + " item"
+ if itemData.json.ChildCount > 1
+ m.itemTextExtra.text += "s"
+ end if
+ end if
+ return
+ end if
+
if itemData.type = "Series"
m.itemText.text = itemData.name
diff --git a/components/home/HomeItem.xml b/components/home/HomeItem.xml
index 90f5b3d9..86a8bd6a 100644
--- a/components/home/HomeItem.xml
+++ b/components/home/HomeItem.xml
@@ -7,6 +7,7 @@
+
diff --git a/components/home/LoadItemsTask.brs b/components/home/LoadItemsTask.brs
index f64a7996..e254b315 100644
--- a/components/home/LoadItemsTask.brs
+++ b/components/home/LoadItemsTask.brs
@@ -132,6 +132,12 @@ sub loadItems()
' Skip Books for now as we don't support it (issue #558)
if item.Type <> "Book"
tmp = CreateObject("roSGNode", "HomeData")
+
+ params = {}
+ params["Tags"] = item.PrimaryImageTag
+ params["MaxWidth"] = 234
+ params["MaxHeight"] = 330
+ tmp.posterURL = ImageUrl(item.Id, "Primary", params)
tmp.json = item
results.push(tmp)
end if
diff --git a/locale/es_ES/translations.ts b/locale/es_ES/translations.ts
index 1c867e9d..8bf6add0 100644
--- a/locale/es_ES/translations.ts
+++ b/locale/es_ES/translations.ts
@@ -1,3474 +1,3788 @@
- UTF-8
-
- default
-
-
- 192.168.1.100:8096 o https://ejemplo.com/jellyfin
-
-
-
- Cancelar
-
-
-
- Conectar al Servidor
-
-
-
- Termina en %1
-
-
-
- Entrar a Configuración
-
-
-
- Favorito
-
-
-
- Cargando…
-
-
-
- Falló el inicio de sesión.
-
-
-
- Aceptar
-
-
-
- Opciones
-
-
-
- Reproducir
-
-
-
- Por favor, inicie sesión
-
-
-
- Buscar
-
-
-
- No se encontró el servidor, ¿está en línea?
-
-
-
- Mezclar
-
-
-
- Iniciar Sesión
-
-
-
- Enviar
-
-
-
- Visto
-
-
-
- Cambiar servidor
-
-
-
- Desconectarse
-
-
-
- Agregar Usuario
-
-
-
- Perfil
-
-
-
- Mi Contenido
-
-
-
- Seguir viendo
-
-
-
- A Continuación
-
-
-
- Lo último en
-
-
-
- Inicio
-
-
-
- Ingres nombre de usuario
-
-
-
- Ingres la contraseña
-
-
-
- Sort Field
-
-
-
- Date Added
-
-
-
- Release Date
-
-
-
- Name
-
-
-
- Sort Order
-
-
-
- Descending
-
-
-
- Ascending
-
-
-
- Password
-
-
-
- Username
-
-
-
- Genres
-
-
-
- Director
-
-
-
- Video
-
-
-
- Audio
-
-
-
- Ingresar nombre de usuario
-
-
-
- Ingresar la contraseña
-
-
-
- Ingresar un valor...
-
-
-
- Ordenar por
-
-
-
- Añadido el
-
-
-
- Fecha de lanzamiento
-
-
-
- Nombre
-
-
-
- Orden de Clasificación
-
-
-
- Descendente
-
-
-
- Ascendente
-
-
-
- Contraseña
-
-
-
- Usuario
-
-
-
- Géneros
-
-
-
- Director
-
-
-
- Vídeo
-
-
-
- Audio
-
-
-
- Servidor
-
-
-
-
-
-
- Salir
-
-
-
- Modificar Servidor
-
-
-
- No fue posible cargar datos del canal desde el servidor
-
-
-
- Error al cargar datos del canal
-
-
-
- Cargando datos del canal
-
-
-
- Cerrar sesión
-
-
-
- Cambiar servidor
-
-
- Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
-
- Este %1 no contiene ítems
-
-
-
- Imposible cargar los datos del canal del servidor
-
-
-
- Error al cargar los datos del canal
-
-
-
- Cargando datos del canal
-
-
-
- Hubo un error al reproducir este ítem.
- Dialog detail when error occurs during playback
-
-
-
- Hubo un error al cargar los datos de este ítem del servidor.
- Dialog detail when unable to load Content from Server
-
-
-
- Error de reproducción
- Dialog title when error occurs during playback
-
-
-
- Error al cargar contenido
- Dialog title when unable to load Content from Server
-
-
-
- Desconectarse
-
-
-
- Cambiar servidor
-
-
- Title of Tab for options to filter library content
-
- Filtro
-
-
- Title of Tab for options to sort library content
-
- Organizar
-
-
- Title of Tab for switching "views" when looking at a library
-
- Vista
-
-
-
- Duración
-
-
-
- Fecha de estreno
-
-
-
- Nº de reproducciones
-
-
-
- Calificación por edades
-
-
-
- Fecha reproducido
-
-
-
- Fecha añadido
-
-
-
- Valoración de críticos
-
-
-
- Valoración IMDb
-
-
- Name or Title field of media item
-
- Nombre
-
-
- Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
-
- Este %1 no contiene ítems
-
-
-
- Imposible cargar los datos del canal del servidor
-
-
-
- Error al cargar los datos del canal
-
-
-
- Cargando datos del canal
-
-
-
- Hubo un error al reproducir este ítem.
- Dialog detail when error occurs during playback
-
-
-
- Hubo un error al cargar los datos de este ítem del servidor.
- Dialog detail when unable to load Content from Server
-
-
-
- Error de reproducción
- Dialog title when error occurs during playback
-
-
-
- Error al cargar contenido
- Dialog title when unable to load Content from Server
-
-
-
- Desconectarse
-
-
-
- Cambiar Servidor
-
-
-
- Error Durante la Reproducción
- Dialog title when error occurs during playback
-
-
-
- Error Recibiendo Contenido
- Dialog title when unable to load Content from Server
-
-
-
- Cerrar sesión
-
-
-
- Cambiar Servidor
-
-
-
- Error al cargar la información del canal
-
-
-
- Cargando información del canal ...
-
-
-
- Se encontró un error al reproducir este elemento.
- Dialog detail when error occurs during playback
-
-
-
- Hubo un error extrallendo esta informacion del el servidor.
- Dialog detail when unable to load Content from Server
-
-
-
- No es posible cargar los datos del canal desde el servidor
-
-
-
- Cargando información del canal
-
-
-
- Domingo
- Day of Week
-
-
-
- Lunes
- Day of Week
-
-
-
- Terminó a las
- (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
-
-
-
- Clasificación parental
-
-
-
- Fecha de reproducción
-
-
-
- Guía TV
- Menu option for showing Live TV Guide / Schedule
-
-
-
- Canales
- Menu option for showing Live TV Channel List
-
-
-
- Repetir
- If TV Shows has previously been broadcasted
-
-
-
- Directo
- If TV Show is being broadcast live (not pre-recorded)
-
-
-
- Finaliza en
- (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
-
-
-
- Inicia
- (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
-
-
-
- Inicia en
- (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
-
-
-
- Iniciado
- (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
-
-
-
- Iniciado a
- (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
-
-
-
- Sábado
- Day of Week
-
-
-
- Viernes
- Day of Week
-
-
-
- Jueves
- Day of Week
-
-
-
- Miércoles
- Day of Week
-
-
-
- Martes
- Day of Week
-
-
-
- mañana
- Next day
-
-
-
- ayer
- Previous day
-
-
-
- hoy
- Current day
-
-
- Title of Tab for options to filter library content
-
- Filtro
-
-
- Title of Tab for options to sort library content
-
- Ordenar
-
-
- Title of Tab for switching "views" when looking at a library
-
- Vista
-
-
-
- Tiempo de reproducción
-
-
-
- Fecha de lanzamiento
-
-
-
- Número de reproducciones
-
-
-
- Fecha añadido
-
-
-
- Calificación de la crítica
-
-
-
- Calificación de IMDb
-
-
- Name or Title field of media item
-
- Nombre
-
-
- Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
-
- Este %1 no contiene elementos
-
-
-
- El contenido no existe en el servidor
- Content of message box when the requested content is not found on the server
-
-
-
- No encontrado
- Title of message box when the requested content is not found on the server
-
-
-
- Conectando al servidor
- Message to display to user while client is attempting to connect to the server
-
-
-
- Guía TV
- Menu option for showing Live TV Guide / Schedule
-
-
-
- Canales
- Menu option for showing Live TV Channel List
-
-
-
- Repetido
- If TV Shows has previously been broadcasted
-
-
-
- Directo
- If TV Show is being broadcast live (not pre-recorded)
-
-
-
- Finaliza a las
- (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
-
-
-
- Terminó a las
- (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
-
-
-
- Inicia el
- (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
-
-
-
- Inicia a las
- (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
-
-
-
- Iniciado
- (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
-
-
-
- Iniciado a las
- (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
-
-
-
- Sábado
- Day of Week
-
-
-
- Viernes
- Day of Week
-
-
-
- Jueves
- Day of Week
-
-
-
- Miércoles
- Day of Week
-
-
-
- Martes
- Day of Week
-
-
-
- Lunes
- Day of Week
-
-
-
- Domingo
- Day of Week
-
-
-
- mañana
- Next day
-
-
-
- ayer
- Previous day
-
-
-
- hoy
- Current day
-
-
- Title of Tab for options to filter library content
-
- Filtro
-
-
- Title of Tab for options to sort library content
-
- Ordenar
-
-
- Title of Tab for switching "views" when looking at a library
-
- Vista
-
-
-
- Tiempo de reproducción
-
-
- Name or Title field of media item
-
- Nombre
-
-
-
- Fecha de lanzamiento
-
-
-
- Número de reproducciones
-
-
-
- Clasificación parental
-
-
-
- Fecha de reproducción
-
-
-
- Fecha añadido
-
-
-
- Calificación de la crítica
-
-
-
- Calificación de IMDb
-
-
- Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
-
- Este %1 no contiene elementos
-
-
-
- No es posible cargar los datos del canal desde el servidor
-
-
-
- Error al cargar la información del canal
-
-
-
- Cargando información del canal
-
-
-
- Se encontró un error al reproducir este elemento.
- Dialog detail when error occurs during playback
-
-
-
- Hubo un error extrayendo los datos de este objeto del servidor.
- Dialog detail when unable to load Content from Server
-
-
-
- Error Durante la Reproducción
- Dialog title when error occurs during playback
-
-
-
- Error recuperando contenido
- Dialog title when unable to load Content from Server
-
-
-
- Cerrar sesión
-
-
-
- Cambiar servidor
-
-
-
- El contenido no existe en el servidor
- Content of message box when the requested content is not found on the server
-
-
-
- No encontrado
- Title of message box when the requested content is not found on the server
-
-
-
- Conectando al servidor
- Message to display to user while client is attempting to connect to the server
-
-
-
- Guía TV
- Menu option for showing Live TV Guide / Schedule
-
-
-
- Canales
- Menu option for showing Live TV Channel List
-
-
-
- Repetido
- If TV Shows has previously been broadcasted
-
-
-
- Directo
- If TV Show is being broadcast live (not pre-recorded)
-
-
-
- Finaliza a las
- (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
-
-
-
- Terminó a las
- (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
-
-
-
- Inicia el
- (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
-
-
-
- Inicia a las
- (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
-
-
-
- Iniciado
- (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
-
-
-
- Iniciado a las
- (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
-
-
-
- Sábado
- Day of Week
-
-
-
- Viernes
- Day of Week
-
-
-
- Jueves
- Day of Week
-
-
-
- Miércoles
- Day of Week
-
-
-
- Martes
- Day of Week
-
-
-
- Lunes
- Day of Week
-
-
-
- Domingo
- Day of Week
-
-
-
- mañana
- Next day
-
-
-
- ayer
- Previous day
-
-
-
- hoy
- Current day
-
-
- Title of Tab for options to filter library content
-
- Filtro
-
-
- Title of Tab for options to sort library content
-
- Ordenar
-
-
- Title of Tab for switching "views" when looking at a library
-
- Vista
-
-
-
- Tiempo de reproducción
-
-
-
- Fecha de lanzamiento
-
-
-
- Número de reproducciones
-
-
-
- Clasificación parental
-
-
-
- Fecha de reproducción
-
-
-
- Fecha añadido
-
-
-
- Calificación de la crítica
-
-
-
- Calificación de IMDb
-
-
- Name or Title field of media item
-
- Nombre
-
-
- Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
-
- Este %1 no contiene elementos
-
-
-
- No es posible cargar los datos del canal desde el servidor
-
-
-
- Error al cargar la información del canal
-
-
-
- Cargando información del canal
-
-
-
- Se encontró un error al reproducir este elemento.
- Dialog detail when error occurs during playback
-
-
-
- Hubo un error extrayendo los datos de este objeto del servidor.
- Dialog detail when unable to load Content from Server
-
-
-
- Error Durante la Reproducción
- Dialog title when error occurs during playback
-
-
-
- Error recuperando contenido
- Dialog title when unable to load Content from Server
-
-
-
- Cerrar sesión
-
-
-
- Cambiar servidor
-
-
-
- Calificación de la crítica
-
-
-
- Deshabilitado
-
-
-
- Habilitado
-
-
-
- Soportar reproducción directa de contenido MPEG 2 (p. ej. televisión en directo). Esto prevendrá la transcodificación de contenido MPEG 2, pero consumirá más ancho de banda
- Settings Menu - Description for option
-
-
-
- Soporte de MPEG 2
- Settings Menu - Title for option
-
-
-
- Reproducción
- Title for Playback section in user setting screen.
-
-
-
- Versión
-
-
-
- Hubo un error al reproducir este contenido. El servidor no proporcionó información de transcodificación
- Content of message box when trying to play an item which requires transcoding, and the server did not provide transcode url
-
-
-
- Error obteniendo la información de reproducción
- Dialog Title: Received error from server when trying to get information about the selected item for playback
-
-
-
- ... o introduce la URL manualmente:
- Instructions on initial app launch when the user is asked to manually enter a server URL
-
-
-
- Escoge un servidor de Jellyfin de la red local
- Instructions on initial app launch when the user is asked to pick a server from a list
-
-
-
- Introduce la dirección IP o nombre del servidor
- Title of KeyboardDialog when manually entering a server URL
-
-
-
- El contenido solicitado no existe en el servidor
- Content of message box when the requested content is not found on the server
-
-
-
- Desconocido
- Title for a cast member for which we have no information for
-
-
-
- No encontrado
- Title of message box when the requested content is not found on the server
-
-
-
- Conectando al servidor
- Message to display to user while client is attempting to connect to the server
-
-
-
- Cerrar
-
-
-
- Cancelar grabación de episodios
-
-
-
- Cancelar grabación
-
-
-
- Grabar episodios
-
-
-
- Grabar
-
-
-
- Ver canal
-
-
-
- Guía de TV
- Menu option for showing Live TV Guide / Schedule
-
-
-
- Canales
- Menu option for showing Live TV Channel List
-
-
-
- Diferido
- If TV Shows has previously been broadcasted
-
-
-
- En directo
- If TV Show is being broadcast live (not pre-recorded)
-
-
-
- Termina el
- (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
-
-
-
- Terminó a las
- (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
-
-
-
- Empieza el
- (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
-
-
-
- Empieza a las
- (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
-
-
-
- Empezó el
- (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
-
-
-
- Empezó a las
- (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
-
-
-
- Sábado
- Day of Week
-
-
-
- Viernes
- Day of Week
-
-
-
- Jueves
- Day of Week
-
-
-
- Miércoles
- Day of Week
-
-
-
- Martes
- Day of Week
-
-
-
- Lunes
- Day of Week
-
-
-
- Domingo
- Day of Week
-
-
-
- Mañana
- Next day
-
-
-
- Ayer
- Previous day
-
-
-
- Hoy
- Current day
-
-
-
- Series de televisión
-
-
-
- Películas
-
-
-
- Presiona 'Aceptar' para cerrar
-
-
-
- Reparto y equipo
-
-
-
- Edad
-
-
-
- Fallecimiento
-
-
-
- Nacimiento
-
-
- Title of Tab for options to filter library content
-
- Filtro
-
-
- Title of Tab for options to sort library content
-
- Ordenar
-
-
- Title of Tab for switching "views" when looking at a library
-
- Vista
-
-
-
- Tiempo de reproducción
-
-
-
- Fecha de lanzamiento
-
-
-
- Número de reproducciones
-
-
-
- Clasificación parental
-
-
-
- Fecha de reproducción
-
-
-
- Fecha añadido
-
-
-
- Calificación de la crítica
-
-
-
- Calificación de IMDb
-
-
- Name or Title field of media item
-
- Nombre
-
-
- Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
-
- Este %1 no contiene elementos
-
-
-
- No es posible cargar los datos del canal desde el servidor
-
-
-
- Error al cargar la información del canal
-
-
-
- Cargando información del canal
-
-
-
- Se encontró un error al reproducir este elemento.
- Dialog detail when error occurs during playback
-
-
-
- Hubo un error extrayendo los datos de este objeto del servidor.
- Dialog detail when unable to load Content from Server
-
-
-
- Error durante la reproducción
- Dialog title when error occurs during playback
-
-
-
- Error obteniendo el contenido
- Dialog title when unable to load Content from Server
-
-
-
- Ahora
-
-
-
- Borrar guardado
-
-
-
- Guardar credenciales?
-
-
-
- Cerrar sesión
-
-
-
- Cambiar de servidor
-
-
-
- Ir al episodio
- Continue Watching Popup Menu - Navigate to the Episode Detail Page
-
-
-
- Agregar a Favoritos
- Button Text - When pressed, sets item as Favorite
-
-
-
- Desactivado
-
-
-
- Activado
-
-
-
- Termina a las
- (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
-
-
-
- Hoy
- Current day
-
-
-
- Cerrar Sesión
-
-
-
- Ir a la temporada
- Continue Watching Popup Menu - Navigate to the Season Page
-
-
-
- Ir a Series
- Continue Watching Popup Menu - Navigate to the Series Detail Page
-
-
-
- Marcar como Visto
- Button Text - When pressed, marks item as Warched
-
-
-
- Mostrar siempre los títulos debajo de las imágenes del póster. (Si está deshabilitado, el título se mostrará solo debajo del elemento resaltado)
- Description for option in Setting Screen
-
-
-
- Títulos de Elementos
- UI -> Media Grid -> Item Title in user setting screen.
-
-
-
- Opciones de la Cuadrícula de Medios
-
-
-
- Cuadrícula de Medios
- UI -> Media Grid section in user setting screen.
-
-
-
- Interfaz de Usuario
- Title for User Interface section in user setting screen.
-
-
-
- Admite reproducción directa de contenido MPEG 2 (por ejemplo, TV en vivo). Esto evitará la transcodificación de contenido MPEG 2, pero utiliza mucho más ancho de banda
- Settings Menu - Description for option
-
-
-
- Soporte de MPEG 2
- Settings Menu - Title for option
-
-
-
- Reproducir
- Title for Playback section in user setting screen.
-
-
-
- Versión
-
-
-
- Se encontró un error al reproducir este elemento. El servidor no proporcionó los datos de transcodificación requeridos.
- Content of message box when trying to play an item which requires transcoding, and the server did not provide transcode url
-
-
-
- Error obteniendo la Información de Reproducción
- Dialog Title: Received error from server when trying to get information about the selected item for playback
-
-
-
- ... o introduce la URL manualmente:
- Instructions on initial app launch when the user is asked to manually enter a server URL
-
-
-
- Escoge un servidor Jellyfin de la red local
- Instructions on initial app launch when the user is asked to pick a server from a list
-
-
-
- Introduce el nombre del servidor o la dirección IP
- Title of KeyboardDialog when manually entering a server URL
-
-
-
- El contenido solicitado no existe en el servidor
- Content of message box when the requested content is not found on the server
-
-
-
- Desconocido
- Title for a cast member for which we have no information for
-
-
-
- No encontrado
- Title of message box when the requested content is not found on the server
-
-
-
- Conectando al Servidor
- Message to display to user while client is attempting to connect to the server
-
-
-
- Cerrar
-
-
-
- Cancelar Grabación de Episodios
-
-
-
- Cancelar Grabación
-
-
-
- Grabar Episodios
-
-
-
- Grabar
-
-
-
- Ver Canal
-
-
-
- Guía de TV
- Menu option for showing Live TV Guide / Schedule
-
-
-
- Canales
- Menu option for showing Live TV Channel List
-
-
-
- Repetir
- If TV Shows has previously been broadcasted
-
-
-
- En Directo
- If TV Show is being broadcast live (not pre-recorded)
-
-
-
- Terminó el
- (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
-
-
-
- Empieza el
- (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
-
-
-
- Empieza a las
- (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
-
-
-
- Empezó el
- (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
-
-
-
- Empezó a las
- (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
-
-
-
- Sábado
- Day of Week
-
-
-
- Viernes
- Day of Week
-
-
-
- Jueves
- Day of Week
-
-
-
- Miércoles
- Day of Week
-
-
-
- Martes
- Day of Week
-
-
-
- Lunes
- Day of Week
-
-
-
- Domingo
- Day of Week
-
-
-
- Mañana
- Next day
-
-
-
- Ayer
- Previous day
-
-
-
- Programas de TV
-
-
-
- Películas
-
-
-
- Contenido Adicional
-
-
- Presiona 'OK' para cerrar
-
-
-
-
- Contenido similar
-
-
-
- Reparto y Equipo
-
-
-
- Edad
-
-
-
- Fallecimiento
-
-
-
- Nacimiento
-
-
- Title of Tab for options to filter library content
-
- Filtro
-
-
- Title of Tab for options to sort library content
-
- Ordenar
-
-
- Title of Tab for switching "views" when looking at a library
-
- Vista
-
-
-
- Duración
-
-
-
- Fecha de Lanzamiento
-
-
-
- Número de Reproducciones
-
-
-
- Clasificación Parental
-
-
-
- Reproducido el
-
-
-
- Añadido el
-
-
-
- Clasificación de los Críticos
-
-
-
- Calificación de IMDb
-
-
- Name or Title field of media item
-
- Nombre
-
-
- Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
-
- Este %1 no contiene elementos
-
-
-
- No se pueden cargar los Datos del Canal desde el servidor
-
-
-
- Error al cargar los Datos del Canal
-
-
-
- Cargando Datos del Canal
-
-
-
- Se encontró un error al reproducir este elemento.
- Dialog detail when error occurs during playback
-
-
-
- Hubo un error al extraer los datos de este elemento del servidor.
- Dialog detail when unable to load Content from Server
-
-
-
- Error durante la Reproducción
- Dialog title when error occurs during playback
-
-
-
- Error al Recuperar Contenido
- Dialog title when unable to load Content from Server
-
-
-
- Transmitiendo Ahora
-
-
-
- Eliminar Guardado
-
-
-
- ¿Guardar Credenciales?
-
-
-
- Cambiar Servidor
-
-
-
- Guardar credenciales?
-
-
-
- Eliminar Guardado
-
-
-
- Desconectar
-
-
-
- Cambiar Servidor
-
-
-
- Error al cargar los Datos del Canal
-
-
-
- Cargando Datos del Canal
-
-
-
- Se encontró un error al reproducir este elemento.
- Dialog detail when error occurs during playback
-
-
-
- Hubo un error extrayendo los datos de este elemento desde el servidor.
- Dialog detail when unable to load Content from Server
-
-
-
- Error durante la Reproducción
- Dialog title when error occurs during playback
-
-
-
- Error al Recuperar Contenido
- Dialog title when unable to load Content from Server
-
-
-
- En directo ahora
-
-
-
- ¿Guardar Credenciales?
-
-
-
- Desconectarse
-
-
-
- Cambiar Servidor
-
-
- Name or Title field of media item
-
- Nombre
-
-
- Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
-
- %1 no contiene ítems
-
-
-
- No se pudo cargar la Información de Canal del servidor
-
-
-
- Error al cargar Información de Canal
-
-
-
- Cargando Información de Canal
-
-
-
- Se a producido un error mientras se reproducía este ítem.
- Dialog detail when error occurs during playback
-
-
-
- Ha habido un error al intentar obtener este ítem del servidor.
- Dialog detail when unable to load Content from Server
-
-
-
- Error Durante la Reproducción
- Dialog title when error occurs during playback
-
-
-
- Error Obteniendo Contenido
- Dialog title when unable to load Content from Server
-
-
-
- Eliminar Guardados
-
-
-
- ¿Guardar credenciales?
-
-
-
- Cambiar de Servidor
-
-
- Name or Title field of media item
-
- Nombre
-
-
-
- Error de Reproducción de Contenido de Canal
-
-
-
- Terminar Sesión
-
-
-
- Borrar Credenciales
-
-
-
- Edad
-
-
-
- Criticas Raiting
-
-
-
- Nacido/a
-
-
-
- hoy
- Current day
-
-
-
- Reproduciendo Contenido de Canal
-
-
-
- Canales
- Menu option for showing Live TV Channel List
-
-
-
- Muerto/a
-
-
-
- Ver Canales
-
-
-
- si no hay servidores disponibles, puedes agregar manualmente la URL
- Instructions on initial app launch when the user is asked to manually enter a server URL
-
-
-
- Ha ocurrido un error tratando de recuperar la información desde el servidor.
- Dialog detail when unable to load Content from Server
-
-
- Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
-
- Este %1 no contiene elementos
-
-
-
- IMDb Raiting
-
-
-
- Fecha Agregada
-
-
-
- Fecha Reproducida
-
-
-
- Películas
-
-
-
- ayer
- Previous day
-
-
-
- mañana
- Next day
-
-
-
- Martes
- Day of Week
-
-
-
- Jueves
- Day of Week
-
-
-
- Viernes
- Day of Week
-
-
- Title of Tab for options to filter library content
-
- Filtro
-
-
-
- Domingo
- Day of Week
-
-
-
- Lunes
- Day of Week
-
-
-
- Miercoles
- Day of Week
-
-
-
- Sabado
- Day of Week
-
-
-
- Comienza a
- (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
-
-
-
- En Vivo
- If TV Show is being broadcast live (not pre-recorded)
-
-
-
- Repetir
- If TV Shows has previously been broadcasted
-
-
-
- Guia de Television
- Menu option for showing Live TV Guide / Schedule
-
-
-
- Grabar
-
-
-
- Grabar Series
-
-
-
- Cerrar
-
-
-
- desconocido
- Title for a cast member for which we have no information for
-
-
-
- Conectando con el Servidor
- Message to display to user while client is attempting to connect to the server
-
-
-
- No se ha encontrado
- Title of message box when the requested content is not found on the server
-
-
-
- Guardar Credenciales?
-
-
- Name or Title field of media item
-
- Nombre
-
-
-
- Ha ocurrido un error al reproducir este contenido.
- Dialog detail when error occurs during playback
-
-
-
- Error Recuperando Contenido
- Dialog title when unable to load Content from Server
-
-
-
- Padres Raiting
-
-
-
- Cambiar de Servidor
-
-
- Title of Tab for options to sort library content
-
- Clasificar
-
-
- Title of Tab for switching "views" when looking at a library
-
- Vista
-
-
-
- Tiempo de Ejecución
-
-
-
- Error Durante la Reproducción
- Dialog title when error occurs during playback
-
-
-
- No se ha podido reproducir el Contenido del Canal de este servidor
-
-
-
- Fecha de Premiere
-
-
-
- Cuenta de Reproducción
-
-
-
- Mas de este Estilo
-
-
-
- Funciones Especiales
-
-
- Press 'OK' to Close
-
-
-
-
- Programas de Televisión
-
-
-
- Termina a
- (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
-
-
-
- Cancelar la grabación
-
-
-
- Cancelar la grabación de Series
-
-
-
- Elige un servidor Jellyfin disponible de la red local
- Instructions on initial app launch when the user is asked to pick a server from a list
-
-
-
- Comenzó
- (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
-
-
-
- Comenzó a
- (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
-
-
-
- Comienza
- (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
-
-
-
- Terminó
- (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
-
-
-
- Agregar el nombre del servidor o direccion de IP
- Title of KeyboardDialog when manually entering a server URL
-
-
-
- Elige un servidor Jellyfin disponible de la red local:
- Instructions on initial app launch when the user is asked to pick a server from a list
-
-
-
- si no hay servidores disponibles, puedes agregar manualmente la URL:
- Instructions on initial app launch when the user is asked to manually enter a server URL
-
-
-
- Ha ocurrido un error tratando de recuperar la información desde el servidor.
- Dialog detail when unable to load Content from Server
-
-
-
- Reproduciendo Contenido de Canal
-
-
- Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
-
- Este %1 no contiene elementos
-
-
-
- Cambiar Servidor
-
-
-
- Borrar Credenciales
-
-
-
- Puntuación de la crítica
-
-
-
- Edad
-
-
-
- hoy
- Current day
-
-
-
- Muerto/a
-
-
-
- Puntuación de IMDb
-
-
-
- Reparto y equipo
-
-
-
- Sábado
- Day of Week
-
-
-
- Repetir
- If TV Shows has previously been broadcasted
-
-
-
- Cuadrícula de medios
- UI -> Media Grid section in user setting screen.
-
-
-
- Cerrar sesión
-
-
-
- ¿Guardar credenciales?
-
-
-
- Error durante la reproducción
- Dialog title when error occurs during playback
-
-
-
- Ha ocurrido un error al reproducir este contenido.
- Dialog detail when error occurs during playback
-
-
-
- Reproduciendo contenido del canal
-
-
-
- Error de reproducción de contenido del canal
-
-
- Name or Title field of media item
-
- Nombre
-
-
-
- Fecha en que se agregó
-
-
-
- Fecha de reproducción
-
-
-
- Control Parental
-
-
-
- Fecha de estreno
-
-
-
- Tiempo de duración
-
-
- Title of Tab for switching "views" when looking at a library
-
- Vista
-
-
- Title of Tab for options to sort library content
-
- Clasificar
-
-
- Title of Tab for options to filter library content
-
- Filtro
-
-
-
- Funciones especiales
-
-
-
- No se ha podido reproducir el contenido del canal de este servidor
-
-
-
- Conteo de reproducción
-
-
-
- En directo ahora
-
-
-
- Error recuperando contenido
- Dialog title when unable to load Content from Server
-
-
-
- Ha ocurrido un error al tratar de recuperar la información de este contenido desde el servidor.
- Dialog detail when unable to load Content from Server
-
-
- Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
-
- Este %1 no contiene elementos
-
-
-
- Nacido/a
-
-
-
- Mas de este estilo
-
-
-
- Se ha encontrado un error al reproducir este elemento. El servidor no proveyó la información necesaria para la transcodificación.
- Content of message box when trying to play an item which requires transcoding, and the server did not provide transcode url
-
-
-
- Utilizar la búsqueda remota por voz
- Help text in search voice text box
-
-
-
- Películas (presentación)
-
-
-
- Películas (cuadrícula)
-
-
-
- Programas de televisión
-
-
-
- ayer
- Previous day
-
-
-
- mañana
- Next day
-
-
-
- Jueves
- Day of Week
-
-
-
- Viernes
- Day of Week
-
-
-
- Comenzó a las
- (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
-
-
-
- Comienza a las
- (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
-
-
-
- En vivo
- If TV Show is being broadcast live (not pre-recorded)
-
-
-
- Guía de televisión
- Menu option for showing Live TV Guide / Schedule
-
-
-
- Grabar serie
-
-
-
- Cancelar la grabación
-
-
-
- Cancelar la grabación de la serie
-
-
-
- Cerrar
-
-
-
- Conectando con el servidor
- Message to display to user while client is attempting to connect to the server
-
-
-
- No se ha encontrado
- Title of message box when the requested content is not found on the server
-
-
-
- Desconocido
- Title for a cast member for which we have no information for
-
-
-
- El contenido solicitado no existe en el servidor
- Content of message box when the requested content is not found on the server
-
-
-
- Agregar el nombre del servidor o su dirección de IP
- Title of KeyboardDialog when manually entering a server URL
-
-
-
- Elige un servidor Jellyfin disponible en la red local:
- Instructions on initial app launch when the user is asked to pick a server from a list
-
-
-
- Soporte de reproducción directa para contenido MPEG-2 (ej., televisión en vivo). Esto previene la transcodificación de contenido MPEG-2, pero a mayor uso de ancho de banda.
- Settings Menu - Description for option
-
-
-
- Soporte de reproducción directa para contenido MPEG-4. Esto podría requerir ser deshabilitado para poder reproducir los archivos de video con encodificación DIVX.
- Settings Menu - Description for option
-
-
-
- **EXPERIMENTAL** Soporte de reproducción directa para contenido AV1 si este dispositivo Roku es compatible.
- Description of a setting - should we try to direct play experimental av1 codec
-
-
-
- Siempre mostrar los títulos por debajo de las imágenes de cartelera. (Si se deshabilita, el título se mostrará debajo del elemento resaltado solamente).
- Description for option in Setting Screen
-
-
-
- Conteo de elementos
- UI -> Media Grid -> Item Count in user setting screen.
-
-
-
- Mostrar el conteo de elementos en la biblioteca y en el índice del elemento seleccionado.
- Description for option in Setting Screen
-
-
-
- Agregar a favoritos
- Button Text - When pressed, sets item as Favorite
-
-
-
- Marcar como visto
- Button Text - When pressed, marks item as Warched
-
-
-
- Ir a serie
- Continue Watching Popup Menu - Navigate to the Series Detail Page
-
-
-
- Ir a la temporada
- Continue Watching Popup Menu - Navigate to the Season Page
-
-
-
- Ir al episodio
- Continue Watching Popup Menu - Navigate to the Episode Detail Page
-
-
-
- Buscar ahora
- Help text in search Box
-
+UTF-8
+
+ default
+
+
+ 192.168.1.100:8096 o https://ejemplo.com/jellyfin
+
+
+
+ Cancelar
+
+
+
+ Conectar al Servidor
+
+
+
+ Termina en %1
+
+
+
+ Entrar a Configuración
+
+
+
+ Favorito
+
+
+
+ Cargando…
+
+
+
+ Falló el inicio de sesión.
+
+
+
+ Aceptar
+
+
+
+ Opciones
+
+
+
+ Reproducir
+
+
+
+ Por favor, inicie sesión
+
+
+
+ Buscar
+
+
+
+ No se encontró el servidor, ¿está en línea?
+
+
+
+ Mezclar
+
+
+
+ Iniciar Sesión
+
+
+
+ Enviar
+
+
+
+ Visto
+
+
+
+ Cambiar servidor
+
+
+
+ Desconectarse
+
+
+
+ Agregar Usuario
+
+
+
+ Perfil
+
+
+
+ Mi Contenido
+
+
+
+ Seguir viendo
+
+
+
+ A Continuación
+
+
+
+ Lo último en
+
+
+
+ Inicio
+
+
+
+ Ingres nombre de usuario
+
+
+
+ Ingres la contraseña
+
+
+
+ Sort Field
+
+
+
+ Date Added
+
+
+
+ Release Date
+
+
+
+ Name
+
+
+
+ Sort Order
+
+
+
+ Descending
+
+
+
+ Ascending
+
+
+
+ Password
+
+
+
+ Username
+
+
+
+ Genres
+
+
+
+ Director
+
+
+
+ Video
+
+
+
+ Audio
+
+
+
+ Ingresar nombre de usuario
+
+
+
+ Ingresar la contraseña
+
+
+
+ Ingresar un valor...
+
+
+
+ Ordenar por
+
+
+
+ Añadido el
+
+
+
+ Fecha de lanzamiento
+
+
+
+ Nombre
+
+
+
+ Orden de Clasificación
+
+
+
+ Descendente
+
+
+
+ Ascendente
+
+
+
+ Contraseña
+
+
+
+ Usuario
+
+
+
+ Géneros
+
+
+
+ Director
+
+
+
+ Vídeo
+
+
+
+ Audio
+
+
+
+ Servidor
+
+
+
+
+
+
+ Salir
+
+
+
+ Modificar Servidor
+
+
+
+ No fue posible cargar datos del canal desde el servidor
+
+
+
+ Error al cargar datos del canal
+
+
+
+ Cargando datos del canal
+
+
+
+ Cerrar sesión
+
+
+
+ Cambiar servidor
+
+
+ Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
+
+ Este %1 no contiene ítems
+
+
+
+ Imposible cargar los datos del canal del servidor
+
+
+
+ Error al cargar los datos del canal
+
+
+
+ Cargando datos del canal
+
+
+
+ Hubo un error al reproducir este ítem.
+ Dialog detail when error occurs during playback
+
+
+
+ Hubo un error al cargar los datos de este ítem del servidor.
+ Dialog detail when unable to load Content from Server
+
+
+
+ Error de reproducción
+ Dialog title when error occurs during playback
+
+
+
+ Error al cargar contenido
+ Dialog title when unable to load Content from Server
+
+
+
+ Desconectarse
+
+
+
+ Cambiar servidor
+
+
+ Title of Tab for options to filter library content
+
+ Filtro
+
+
+ Title of Tab for options to sort library content
+
+ Organizar
+
+
+ Title of Tab for switching "views" when looking at a library
+
+ Vista
+
+
+
+ Duración
+
+
+
+ Fecha de estreno
+
+
+
+ Nº de reproducciones
+
+
+
+ Calificación por edades
+
+
+
+ Fecha reproducido
+
+
+
+ Fecha añadido
+
+
+
+ Valoración de críticos
+
+
+
+ Valoración IMDb
+
+
+ Name or Title field of media item
+
+ Nombre
+
+
+ Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
+
+ Este %1 no contiene ítems
+
+
+
+ Imposible cargar los datos del canal del servidor
+
+
+
+ Error al cargar los datos del canal
+
+
+
+ Cargando datos del canal
+
+
+
+ Hubo un error al reproducir este ítem.
+ Dialog detail when error occurs during playback
+
+
+
+ Hubo un error al cargar los datos de este ítem del servidor.
+ Dialog detail when unable to load Content from Server
+
+
+
+ Error de reproducción
+ Dialog title when error occurs during playback
+
+
+
+ Error al cargar contenido
+ Dialog title when unable to load Content from Server
+
+
+
+ Desconectarse
+
+
+
+ Cambiar Servidor
+
+
+
+ Error Durante la Reproducción
+ Dialog title when error occurs during playback
+
+
+
+ Error Recibiendo Contenido
+ Dialog title when unable to load Content from Server
+
+
+
+ Cerrar sesión
+
+
+
+ Cambiar Servidor
+
+
+
+ Error al cargar la información del canal
+
+
+
+ Cargando información del canal ...
+
+
+
+ Se encontró un error al reproducir este elemento.
+ Dialog detail when error occurs during playback
+
+
+
+ Hubo un error extrallendo esta informacion del el servidor.
+ Dialog detail when unable to load Content from Server
+
+
+
+ No es posible cargar los datos del canal desde el servidor
+
+
+
+ Cargando información del canal
+
+
+
+ Domingo
+ Day of Week
+
+
+
+ Lunes
+ Day of Week
+
+
+
+ Terminó a las
+ (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
+
+
+
+ Clasificación parental
+
+
+
+ Fecha de reproducción
+
+
+
+ Guía TV
+ Menu option for showing Live TV Guide / Schedule
+
+
+
+ Canales
+ Menu option for showing Live TV Channel List
+
+
+
+ Repetir
+ If TV Shows has previously been broadcasted
+
+
+
+ Directo
+ If TV Show is being broadcast live (not pre-recorded)
+
+
+
+ Finaliza en
+ (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
+
+
+
+ Inicia
+ (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
+
+
+
+ Inicia en
+ (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
+
+
+
+ Iniciado
+ (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
+
+
+
+ Iniciado a
+ (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
+
+
+
+ Sábado
+ Day of Week
+
+
+
+ Viernes
+ Day of Week
+
+
+
+ Jueves
+ Day of Week
+
+
+
+ Miércoles
+ Day of Week
+
+
+
+ Martes
+ Day of Week
+
+
+
+ mañana
+ Next day
+
+
+
+ ayer
+ Previous day
+
+
+
+ hoy
+ Current day
+
+
+ Title of Tab for options to filter library content
+
+ Filtro
+
+
+ Title of Tab for options to sort library content
+
+ Ordenar
+
+
+ Title of Tab for switching "views" when looking at a library
+
+ Vista
+
+
+
+ Tiempo de reproducción
+
+
+
+ Fecha de lanzamiento
+
+
+
+ Número de reproducciones
+
+
+
+ Fecha añadido
+
+
+
+ Calificación de la crítica
+
+
+
+ Calificación de IMDb
+
+
+ Name or Title field of media item
+
+ Nombre
+
+
+ Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
+
+ Este %1 no contiene elementos
+
+
+
+ El contenido no existe en el servidor
+ Content of message box when the requested content is not found on the server
+
+
+
+ No encontrado
+ Title of message box when the requested content is not found on the server
+
+
+
+ Conectando al servidor
+ Message to display to user while client is attempting to connect to the server
+
+
+
+ Guía TV
+ Menu option for showing Live TV Guide / Schedule
+
+
+
+ Canales
+ Menu option for showing Live TV Channel List
+
+
+
+ Repetido
+ If TV Shows has previously been broadcasted
+
+
+
+ Directo
+ If TV Show is being broadcast live (not pre-recorded)
+
+
+
+ Finaliza a las
+ (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
+
+
+
+ Terminó a las
+ (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
+
+
+
+ Inicia el
+ (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
+
+
+
+ Inicia a las
+ (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
+
+
+
+ Iniciado
+ (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
+
+
+
+ Iniciado a las
+ (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
+
+
+
+ Sábado
+ Day of Week
+
+
+
+ Viernes
+ Day of Week
+
+
+
+ Jueves
+ Day of Week
+
+
+
+ Miércoles
+ Day of Week
+
+
+
+ Martes
+ Day of Week
+
+
+
+ Lunes
+ Day of Week
+
+
+
+ Domingo
+ Day of Week
+
+
+
+ mañana
+ Next day
+
+
+
+ ayer
+ Previous day
+
+
+
+ hoy
+ Current day
+
+
+ Title of Tab for options to filter library content
+
+ Filtro
+
+
+ Title of Tab for options to sort library content
+
+ Ordenar
+
+
+ Title of Tab for switching "views" when looking at a library
+
+ Vista
+
+
+
+ Tiempo de reproducción
+
+
+ Name or Title field of media item
+
+ Nombre
+
+
+
+ Fecha de lanzamiento
+
+
+
+ Número de reproducciones
+
+
+
+ Clasificación parental
+
+
+
+ Fecha de reproducción
+
+
+
+ Fecha añadido
+
+
+
+ Calificación de la crítica
+
+
+
+ Calificación de IMDb
+
+
+ Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
+
+ Este %1 no contiene elementos
+
+
+
+ No es posible cargar los datos del canal desde el servidor
+
+
+
+ Error al cargar la información del canal
+
+
+
+ Cargando información del canal
+
+
+
+ Se encontró un error al reproducir este elemento.
+ Dialog detail when error occurs during playback
+
+
+
+ Hubo un error extrayendo los datos de este objeto del servidor.
+ Dialog detail when unable to load Content from Server
+
+
+
+ Error Durante la Reproducción
+ Dialog title when error occurs during playback
+
+
+
+ Error recuperando contenido
+ Dialog title when unable to load Content from Server
+
+
+
+ Cerrar sesión
+
+
+
+ Cambiar servidor
+
+
+
+ El contenido no existe en el servidor
+ Content of message box when the requested content is not found on the server
+
+
+
+ No encontrado
+ Title of message box when the requested content is not found on the server
+
+
+
+ Conectando al servidor
+ Message to display to user while client is attempting to connect to the server
+
+
+
+ Guía TV
+ Menu option for showing Live TV Guide / Schedule
+
+
+
+ Canales
+ Menu option for showing Live TV Channel List
+
+
+
+ Repetido
+ If TV Shows has previously been broadcasted
+
+
+
+ Directo
+ If TV Show is being broadcast live (not pre-recorded)
+
+
+
+ Finaliza a las
+ (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
+
+
+
+ Terminó a las
+ (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
+
+
+
+ Inicia el
+ (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
+
+
+
+ Inicia a las
+ (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
+
+
+
+ Iniciado
+ (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
+
+
+
+ Iniciado a las
+ (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
+
+
+
+ Sábado
+ Day of Week
+
+
+
+ Viernes
+ Day of Week
+
+
+
+ Jueves
+ Day of Week
+
+
+
+ Miércoles
+ Day of Week
+
+
+
+ Martes
+ Day of Week
+
+
+
+ Lunes
+ Day of Week
+
+
+
+ Domingo
+ Day of Week
+
+
+
+ mañana
+ Next day
+
+
+
+ ayer
+ Previous day
+
+
+
+ hoy
+ Current day
+
+
+ Title of Tab for options to filter library content
+
+ Filtro
+
+
+ Title of Tab for options to sort library content
+
+ Ordenar
+
+
+ Title of Tab for switching "views" when looking at a library
+
+ Vista
+
+
+
+ Tiempo de reproducción
+
+
+
+ Fecha de lanzamiento
+
+
+
+ Número de reproducciones
+
+
+
+ Clasificación parental
+
+
+
+ Fecha de reproducción
+
+
+
+ Fecha añadido
+
+
+
+ Calificación de la crítica
+
+
+
+ Calificación de IMDb
+
+
+ Name or Title field of media item
+
+ Nombre
+
+
+ Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
+
+ Este %1 no contiene elementos
+
+
+
+ No es posible cargar los datos del canal desde el servidor
+
+
+
+ Error al cargar la información del canal
+
+
+
+ Cargando información del canal
+
+
+
+ Se encontró un error al reproducir este elemento.
+ Dialog detail when error occurs during playback
+
+
+
+ Hubo un error extrayendo los datos de este objeto del servidor.
+ Dialog detail when unable to load Content from Server
+
+
+
+ Error Durante la Reproducción
+ Dialog title when error occurs during playback
+
+
+
+ Error recuperando contenido
+ Dialog title when unable to load Content from Server
+
+
+
+ Cerrar sesión
+
+
+
+ Cambiar servidor
+
+
+
+ Calificación de la crítica
+
+
+
+ Deshabilitado
+
+
+
+ Habilitado
+
+
+
+ Soportar reproducción directa de contenido MPEG 2 (p. ej. televisión en directo). Esto prevendrá la transcodificación de contenido MPEG 2, pero consumirá más ancho de banda
+ Settings Menu - Description for option
+
+
+
+ Soporte de MPEG 2
+ Settings Menu - Title for option
+
+
+
+ Reproducción
+ Title for Playback section in user setting screen.
+
+
+
+ Versión
+
+
+
+ Hubo un error al reproducir este contenido. El servidor no proporcionó información de transcodificación
+ Content of message box when trying to play an item which requires transcoding, and the server did not provide transcode url
+
+
+
+ Error obteniendo la información de reproducción
+ Dialog Title: Received error from server when trying to get information about the selected item for playback
+
+
+
+ ... o introduce la URL manualmente:
+ Instructions on initial app launch when the user is asked to manually enter a server URL
+
+
+
+ Escoge un servidor de Jellyfin de la red local
+ Instructions on initial app launch when the user is asked to pick a server from a list
+
+
+
+ Introduce la dirección IP o nombre del servidor
+ Title of KeyboardDialog when manually entering a server URL
+
+
+
+ El contenido solicitado no existe en el servidor
+ Content of message box when the requested content is not found on the server
+
+
+
+ Desconocido
+ Title for a cast member for which we have no information for
+
+
+
+ No encontrado
+ Title of message box when the requested content is not found on the server
+
+
+
+ Conectando al servidor
+ Message to display to user while client is attempting to connect to the server
+
+
+
+ Cerrar
+
+
+
+ Cancelar grabación de episodios
+
+
+
+ Cancelar grabación
+
+
+
+ Grabar episodios
+
+
+
+ Grabar
+
+
+
+ Ver canal
+
+
+
+ Guía de TV
+ Menu option for showing Live TV Guide / Schedule
+
+
+
+ Canales
+ Menu option for showing Live TV Channel List
+
+
+
+ Diferido
+ If TV Shows has previously been broadcasted
+
+
+
+ En directo
+ If TV Show is being broadcast live (not pre-recorded)
+
+
+
+ Termina el
+ (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
+
+
+
+ Terminó a las
+ (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
+
+
+
+ Empieza el
+ (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
+
+
+
+ Empieza a las
+ (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
+
+
+
+ Empezó el
+ (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
+
+
+
+ Empezó a las
+ (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
+
+
+
+ Sábado
+ Day of Week
+
+
+
+ Viernes
+ Day of Week
+
+
+
+ Jueves
+ Day of Week
+
+
+
+ Miércoles
+ Day of Week
+
+
+
+ Martes
+ Day of Week
+
+
+
+ Lunes
+ Day of Week
+
+
+
+ Domingo
+ Day of Week
+
+
+
+ Mañana
+ Next day
+
+
+
+ Ayer
+ Previous day
+
+
+
+ Hoy
+ Current day
+
+
+
+ Series de televisión
+
+
+
+ Películas
+
+
+
+ Presiona 'Aceptar' para cerrar
+
+
+
+ Reparto y equipo
+
+
+
+ Edad
+
+
+
+ Fallecimiento
+
+
+
+ Nacimiento
+
+
+ Title of Tab for options to filter library content
+
+ Filtro
+
+
+ Title of Tab for options to sort library content
+
+ Ordenar
+
+
+ Title of Tab for switching "views" when looking at a library
+
+ Vista
+
+
+
+ Tiempo de reproducción
+
+
+
+ Fecha de lanzamiento
+
+
+
+ Número de reproducciones
+
+
+
+ Clasificación parental
+
+
+
+ Fecha de reproducción
+
+
+
+ Fecha añadido
+
+
+
+ Calificación de la crítica
+
+
+
+ Calificación de IMDb
+
+
+ Name or Title field of media item
+
+ Nombre
+
+
+ Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
+
+ Este %1 no contiene elementos
+
+
+
+ No es posible cargar los datos del canal desde el servidor
+
+
+
+ Error al cargar la información del canal
+
+
+
+ Cargando información del canal
+
+
+
+ Se encontró un error al reproducir este elemento.
+ Dialog detail when error occurs during playback
+
+
+
+ Hubo un error extrayendo los datos de este objeto del servidor.
+ Dialog detail when unable to load Content from Server
+
+
+
+ Error durante la reproducción
+ Dialog title when error occurs during playback
+
+
+
+ Error obteniendo el contenido
+ Dialog title when unable to load Content from Server
+
+
+
+ Ahora
+
+
+
+ Borrar guardado
+
+
+
+ Guardar credenciales?
+
+
+
+ Cerrar sesión
+
+
+
+ Cambiar de servidor
+
+
+
+ Ir al episodio
+ Continue Watching Popup Menu - Navigate to the Episode Detail Page
+
+
+
+ Agregar a Favoritos
+ Button Text - When pressed, sets item as Favorite
+
+
+
+ Desactivado
+
+
+
+ Activado
+
+
+
+ Termina a las
+ (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
+
+
+
+ Hoy
+ Current day
+
+
+
+ Cerrar Sesión
+
+
+
+ Ir a la temporada
+ Continue Watching Popup Menu - Navigate to the Season Page
+
+
+
+ Ir a Series
+ Continue Watching Popup Menu - Navigate to the Series Detail Page
+
+
+
+ Marcar como Visto
+ Button Text - When pressed, marks item as Warched
+
+
+
+ Mostrar siempre los títulos debajo de las imágenes del póster. (Si está deshabilitado, el título se mostrará solo debajo del elemento resaltado)
+ Description for option in Setting Screen
+
+
+
+ Títulos de Elementos
+ UI -> Media Grid -> Item Title in user setting screen.
+
+
+
+ Opciones de la Cuadrícula de Medios
+
+
+
+ Cuadrícula de Medios
+ UI -> Media Grid section in user setting screen.
+
+
+
+ Interfaz de Usuario
+ Title for User Interface section in user setting screen.
+
+
+
+ Admite reproducción directa de contenido MPEG 2 (por ejemplo, TV en vivo). Esto evitará la transcodificación de contenido MPEG 2, pero utiliza mucho más ancho de banda
+ Settings Menu - Description for option
+
+
+
+ Soporte de MPEG 2
+ Settings Menu - Title for option
+
+
+
+ Reproducir
+ Title for Playback section in user setting screen.
+
+
+
+ Versión
+
+
+
+ Se encontró un error al reproducir este elemento. El servidor no proporcionó los datos de transcodificación requeridos.
+ Content of message box when trying to play an item which requires transcoding, and the server did not provide transcode url
+
+
+
+ Error obteniendo la Información de Reproducción
+ Dialog Title: Received error from server when trying to get information about the selected item for playback
+
+
+
+ ... o introduce la URL manualmente:
+ Instructions on initial app launch when the user is asked to manually enter a server URL
+
+
+
+ Escoge un servidor Jellyfin de la red local
+ Instructions on initial app launch when the user is asked to pick a server from a list
+
+
+
+ Introduce el nombre del servidor o la dirección IP
+ Title of KeyboardDialog when manually entering a server URL
+
+
+
+ El contenido solicitado no existe en el servidor
+ Content of message box when the requested content is not found on the server
+
+
+
+ Desconocido
+ Title for a cast member for which we have no information for
+
+
+
+ No encontrado
+ Title of message box when the requested content is not found on the server
+
+
+
+ Conectando al Servidor
+ Message to display to user while client is attempting to connect to the server
+
+
+
+ Cerrar
+
+
+
+ Cancelar Grabación de Episodios
+
+
+
+ Cancelar Grabación
+
+
+
+ Grabar Episodios
+
+
+
+ Grabar
+
+
+
+ Ver Canal
+
+
+
+ Guía de TV
+ Menu option for showing Live TV Guide / Schedule
+
+
+
+ Canales
+ Menu option for showing Live TV Channel List
+
+
+
+ Repetir
+ If TV Shows has previously been broadcasted
+
+
+
+ En Directo
+ If TV Show is being broadcast live (not pre-recorded)
+
+
+
+ Terminó el
+ (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
+
+
+
+ Empieza el
+ (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
+
+
+
+ Empieza a las
+ (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
+
+
+
+ Empezó el
+ (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
+
+
+
+ Empezó a las
+ (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
+
+
+
+ Sábado
+ Day of Week
+
+
+
+ Viernes
+ Day of Week
+
+
+
+ Jueves
+ Day of Week
+
+
+
+ Miércoles
+ Day of Week
+
+
+
+ Martes
+ Day of Week
+
+
+
+ Lunes
+ Day of Week
+
+
+
+ Domingo
+ Day of Week
+
+
+
+ Mañana
+ Next day
+
+
+
+ Ayer
+ Previous day
+
+
+
+ Programas de TV
+
+
+
+ Películas
+
+
+
+ Contenido AdicionalPresiona 'OK' para cerrar
-
-
- Partes adicionales
- Additional parts of a video
-
-
-
- Películas
-
-
-
- Domingo
- Day of Week
-
-
-
- Lunes
- Day of Week
-
-
-
- Martes
- Day of Week
-
-
-
- Miércoles
- Day of Week
-
-
-
- Comienza a las
- (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
-
-
-
- Terminó a las
- (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
-
-
-
- Termina a las
- (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
-
-
-
- Canales
- Menu option for showing Live TV Channel List
-
-
-
- Ver Canal
-
-
-
- Grabar
-
-
-
- Si no hay servidores disponibles, puedes agregar manualmente la URL:
- Instructions on initial app launch when the user is asked to manually enter a server URL
-
-
-
- Error obteniendo la Información de reproducción
- Dialog Title: Received error from server when trying to get information about the selected item for playback
-
-
-
- Versión
-
-
-
- Reproducción
- Title for Playback section in user setting screen.
-
-
-
- Interfaz de usuario
- Title for User Interface section in user setting screen.
-
-
-
- Opciones de la cuadrícula de medios.
-
-
-
- Soporte de Codec
- Settings Menu - Title for settings group related to codec support
-
-
-
- Habilitar o desactivar la reproducción directa para codecs opcionales
- Settings Menu - Title for settings group related to codec support
-
-
-
- MPEG-2
- Name of codec used in settings menu
-
-
-
- MPEG-4
- Name of codec used in settings menu
-
-
-
- AV1
- Name of a setting - should we try to direct play experimental av1 codec
-
-
-
- Títulos de elementos
- UI -> Media Grid -> Item Title in user setting screen.
-
-
-
- Comenzó a las
- (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
-
-
-
- Activado
-
-
-
- Desactivado
-
-
-
- espectáculos
-
-
-
- Conexión rápida
-
-
-
- (El diálogo se cerrará automáticamente)
-
-
-
- Vuelva a la parte superior
- UI -> Media Grid -> Item Title in user setting screen.
-
-
-
- Puede buscar títulos, personas, canales de TV en vivo y más
- Help text in search results
-
-
-
- Aquí está su código de conexión rápida:
-
-
-
- Hubo un error al autenticarse a través de Quick Connect.
-
-
-
- Redes
-
-
-
- Estudios
-
-
-
- Use el botón de reproducción para animar lentamente al primer elemento de la carpeta. (Si está deshabilitado, la carpeta se restablecerá al primer elemento inmediatamente).
- Description for option in Setting Screen
-
-
-
- Eliga un servidor Jellyfin disponible en la red local:
- Instructions on initial app launch when the user is asked to pick a server from a list
-
-
-
- %1 de %2
- Item position and count. %1 = current item. %2 = total number of items
-
-
-
- Opciones para el protector de pantalla de Jellyfin.
- Description for Screensaver user settings.
-
-
-
- Siguiente episodio
-
-
-
- Tamaño
- Video size
-
-
-
- Canción
-
-
-
- Reproducir Trailer
-
-
-
- Protector de pantalla
-
-
-
- Opciones que alteran el diseño de Jellyfin.
- Description for Design Elements user settings.
-
-
-
- Modo Cine
- Settings Menu - Title for option
-
-
-
- Borrar guardado
-
-
-
- Muerto
-
-
-
- Cambiar de servidor
-
-
-
- Desconectar
-
-
-
- ¿Guardar credenciales?
-
-
-
- Error al reproducir
- Dialog title when error occurs during playback
-
-
-
- Se encontró un error mientras se reproducía este medio
- Dialog detail when error occurs during playback
-
-
-
- Tiempo funcionando
-
-
- Title of Tab for switching "views" when looking at a library
-
- Visualización
-
-
-
- Características especiales
-
-
-
- Reproduciendo ahora
-
-
-
- Error al recuperar el contenido desde el servidor
- Dialog title when unable to load Content from Server
-
-
-
- Nacido
-
-
-
- Cargando información del canal
-
-
-
- Error al cargar información del canal
-
-
-
- Valoración de IMDb
-
-
-
- Fecha añadida
-
-
-
- Fecha de reproducción
-
-
-
- Valoración parental
-
-
-
- Contador de reproducciones
-
-
-
- Fecha de lanzamiento
-
-
- Title of Tab for options to sort library content
-
- Ordenar
-
-
- Title of Tab for options to filter library content
-
- Filtro
-
-
-
- Edad
-
-
-
- Actores y personal
-
-
-
- Más como este/a
-
-
-
- hoy
- Current day
-
-
-
- Sábado
- Day of Week
-
-
-
- Repetir
- If TV Shows has previously been broadcasted
-
-
-
- Películas (presentación)
-
-
-
- Películas (cuadrícula)
-
-
-
- Programas de TV
-
-
-
- ayer
- Previous day
-
-
-
- mañana
- Next day
-
-
-
- Jueves
- Day of Week
-
-
-
- Viernes
- Day of Week
-
-
-
- Empezado a las
- (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
-
-
-
- Empieza a las
- (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
-
-
-
- En vivo
- If TV Show is being broadcast live (not pre-recorded)
-
-
-
- Guía de TV
- Menu option for showing Live TV Guide / Schedule
-
-
-
- Grabar series
-
-
-
- Cancelar grabación
-
-
-
- Cancelar grabación de series
-
-
-
- Cerrar
-
-
-
- Conectando al servidor
- Message to display to user while client is attempting to connect to the server
-
-
-
- No se ha encontrado
- Title of message box when the requested content is not found on the server
-
-
-
- Desconocido
- Title for a cast member for which we have no information for
-
-
-
- Seleccione un servidor Jellyfin disponible en su red local
- Instructions on initial app launch when the user is asked to pick a server from a list
-
+
+
+
+ Contenido similar
+
+
+
+ Reparto y Equipo
+
+
+
+ Edad
+
+
+
+ Fallecimiento
+
+
+
+ Nacimiento
+
+
+ Title of Tab for options to filter library content
+
+ Filtro
+
+
+ Title of Tab for options to sort library content
+
+ Ordenar
+
+
+ Title of Tab for switching "views" when looking at a library
+
+ Vista
+
+
+
+ Duración
+
+
+
+ Fecha de Lanzamiento
+
+
+
+ Número de Reproducciones
+
+
+
+ Clasificación Parental
+
+
+
+ Reproducido el
+
+
+
+ Añadido el
+
+
+
+ Clasificación de los Críticos
+
+
+
+ Calificación de IMDb
+
+
+ Name or Title field of media item
+
+ Nombre
+
+
+ Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
+
+ Este %1 no contiene elementos
+
+
+
+ No se pueden cargar los Datos del Canal desde el servidor
+
+
+
+ Error al cargar los Datos del Canal
+
+
+
+ Cargando Datos del Canal
+
+
+
+ Se encontró un error al reproducir este elemento.
+ Dialog detail when error occurs during playback
+
+
+
+ Hubo un error al extraer los datos de este elemento del servidor.
+ Dialog detail when unable to load Content from Server
+
+
+
+ Error durante la Reproducción
+ Dialog title when error occurs during playback
+
+
+
+ Error al Recuperar Contenido
+ Dialog title when unable to load Content from Server
+
+
+
+ Transmitiendo Ahora
+
+
+
+ Eliminar Guardado
+
+
+
+ ¿Guardar Credenciales?
+
+
+
+ Cambiar Servidor
+
+
+
+ Guardar credenciales?
+
+
+
+ Eliminar Guardado
+
+
+
+ Desconectar
+
+
+
+ Cambiar Servidor
+
+
+
+ Error al cargar los Datos del Canal
+
+
+
+ Cargando Datos del Canal
+
+
+
+ Se encontró un error al reproducir este elemento.
+ Dialog detail when error occurs during playback
+
+
+
+ Hubo un error extrayendo los datos de este elemento desde el servidor.
+ Dialog detail when unable to load Content from Server
+
+
+
+ Error durante la Reproducción
+ Dialog title when error occurs during playback
+
+
+
+ Error al Recuperar Contenido
+ Dialog title when unable to load Content from Server
+
+
+
+ En directo ahora
+
+
+
+ ¿Guardar Credenciales?
+
+
+
+ Desconectarse
+
+
+
+ Cambiar Servidor
+
+
+ Name or Title field of media item
+
+ Nombre
+
+
+ Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
+
+ %1 no contiene ítems
+
+
+
+ No se pudo cargar la Información de Canal del servidor
+
+
+
+ Error al cargar Información de Canal
+
+
+
+ Cargando Información de Canal
+
+
+
+ Se a producido un error mientras se reproducía este ítem.
+ Dialog detail when error occurs during playback
+
+
+
+ Ha habido un error al intentar obtener este ítem del servidor.
+ Dialog detail when unable to load Content from Server
+
+
+
+ Error Durante la Reproducción
+ Dialog title when error occurs during playback
+
+
+
+ Error Obteniendo Contenido
+ Dialog title when unable to load Content from Server
+
+
+
+ Eliminar Guardados
+
+
+
+ ¿Guardar credenciales?
+
+
+
+ Cambiar de Servidor
+
+
+ Name or Title field of media item
+
+ Nombre
+
+
+
+ Error de Reproducción de Contenido de Canal
+
+
+
+ Terminar Sesión
+
+
+
+ Borrar Credenciales
+
+
+
+ Edad
+
+
+
+ Criticas Raiting
+
+
+
+ Nacido/a
+
+
+
+ hoy
+ Current day
+
+
+
+ Reproduciendo Contenido de Canal
+
+
+
+ Canales
+ Menu option for showing Live TV Channel List
+
+
+
+ Muerto/a
+
+
+
+ Ver Canales
+
+
+
+ si no hay servidores disponibles, puedes agregar manualmente la URL
+ Instructions on initial app launch when the user is asked to manually enter a server URL
+
+
+
+ Ha ocurrido un error tratando de recuperar la información desde el servidor.
+ Dialog detail when unable to load Content from Server
+
+
+ Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
+
+ Este %1 no contiene elementos
+
+
+
+ IMDb Raiting
+
+
+
+ Fecha Agregada
+
+
+
+ Fecha Reproducida
+
+
+
+ Películas
+
+
+
+ ayer
+ Previous day
+
+
+
+ mañana
+ Next day
+
+
+
+ Martes
+ Day of Week
+
+
+
+ Jueves
+ Day of Week
+
+
+
+ Viernes
+ Day of Week
+
+
+ Title of Tab for options to filter library content
+
+ Filtro
+
+
+
+ Domingo
+ Day of Week
+
+
+
+ Lunes
+ Day of Week
+
+
+
+ Miercoles
+ Day of Week
+
+
+
+ Sabado
+ Day of Week
+
+
+
+ Comienza a
+ (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
+
+
+
+ En Vivo
+ If TV Show is being broadcast live (not pre-recorded)
+
+
+
+ Repetir
+ If TV Shows has previously been broadcasted
+
+
+
+ Guia de Television
+ Menu option for showing Live TV Guide / Schedule
+
+
+
+ Grabar
+
+
+
+ Grabar Series
+
+
+
+ Cerrar
+
+
+
+ desconocido
+ Title for a cast member for which we have no information for
+
+
+
+ Conectando con el Servidor
+ Message to display to user while client is attempting to connect to the server
+
+
+
+ No se ha encontrado
+ Title of message box when the requested content is not found on the server
+
+
+
+ Guardar Credenciales?
+
+
+ Name or Title field of media item
+
+ Nombre
+
+
+
+ Ha ocurrido un error al reproducir este contenido.
+ Dialog detail when error occurs during playback
+
+
+
+ Error Recuperando Contenido
+ Dialog title when unable to load Content from Server
+
+
+
+ Padres Raiting
+
+
+
+ Cambiar de Servidor
+
+
+ Title of Tab for options to sort library content
+
+ Clasificar
+
+
+ Title of Tab for switching "views" when looking at a library
+
+ Vista
+
+
+
+ Tiempo de Ejecución
+
+
+
+ Error Durante la Reproducción
+ Dialog title when error occurs during playback
+
+
+
+ No se ha podido reproducir el Contenido del Canal de este servidor
+
+
+
+ Fecha de Premiere
+
+
+
+ Cuenta de Reproducción
+
+
+
+ Mas de este Estilo
+
+
+
+ Funciones Especiales
- Pulsa 'OK' para cerrar
-
-
-
- Partes adicionales
- Additional parts of a video
-
-
-
- Películas
-
-
-
- Domingo
- Day of Week
-
-
-
- Lunes
- Day of Week
-
-
-
- Martes
- Day of Week
-
-
-
- Miércoles
- Day of Week
-
-
-
- Empieza
- (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
-
-
-
- Terminado a las
- (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
-
-
-
- Termina a las
- (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
-
-
-
- Canales
- Menu option for showing Live TV Channel List
-
-
-
- Canal Ver
-
-
-
- Grabar
-
-
-
- Empezado
- (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
-
-
-
- Hubo un error al recuperar la información de este objeto desde el servidor
- Dialog detail when unable to load Content from Server
-
-
-
- Incapaz de cargar la información del canal desde el servidor
-
-
- Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
-
- Este/a %1 no contiene medios
-
-
- Name or Title field of media item
-
- Nombre
-
-
-
- Valoración de los críticos
-
-
-
- El contenido solicitado no existe en el servidor
- Content of message box when the requested content is not found on the server
-
-
-
- Introduce el nombre del servidor o la dirección IP
- Title of KeyboardDialog when manually entering a server URL
-
-
-
- Si arriba no hay ningún servidor listado, puedes introducir la URL del servidor manualmente:
- Instructions on initial app launch when the user is asked to manually enter a server URL
-
-
-
- Error obteniendo la información de reproducción
- Dialog Title: Received error from server when trying to get information about the selected item for playback
-
-
-
- ¿Guardar credenciales?
-
-
-
- Transmitiendo ahora
-
-
-
- Error al recuperar el contenido
- Dialog title when unable to load Content from Server
-
-
-
- Error al reproducir
- Dialog title when error occurs during playback
-
-
-
- Cambiar de servidor
-
-
-
- Ha ocurrido un error al tratar de recuperar la información de este contenido desde el servidor.
- Dialog detail when unable to load Content from Server
-
-
-
- Cerrar sesión
-
-
-
- Eliminar guardados
-
-
-
- Se ha encontrado un error durante la reproduccion.
- Dialog detail when error occurs during playback
-
-
-
- Fecha de reproducción
-
-
-
- Valoración parental
-
-
- Title of Tab for options to filter library content
-
- Filtrar
-
-
-
- Nacido
-
-
-
- Pulsa 'OK' para cerrar
-
-
-
- Programas de TV
-
-
-
- ayer
- Previous day
-
-
-
- Domingo
- Day of Week
-
-
-
- Miércoles
- Day of Week
-
-
-
- Sábado
- Day of Week
-
-
-
- Fallecio
-
-
-
- mañana
- Next day
-
-
-
- Lunes
- Day of Week
-
-
-
- Martes
- Day of Week
-
-
-
- Jueves
- Day of Week
-
-
-
- Viernes
- Day of Week
-
-
-
- Valoración de IMDb
-
-
-
- Edad
-
-
-
- hoy
- Current day
-
-
-
- No se ha podido cargar la informacion de los canales desde el servidor
-
-
- Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
-
- Este %1 no contiene medios
-
-
- Name or Title field of media item
-
- Nombre
-
-
-
- Valoración de los críticos
-
-
-
- Cargando información del canal
-
-
-
- Error cargando la information del canal
-
-
-
- Contador de reproducciones
-
-
-
- Fecha de lanzamiento
-
-
- Title of Tab for options to sort library content
-
- Ordenar
-
-
-
- Películas
-
-
-
- Partes adicionales
- Additional parts of a video
-
-
-
- Error obteniendo la información de reproducción
- Dialog Title: Received error from server when trying to get information about the selected item for playback
-
-
-
- Soporte de reproducción directa para contenido MPEG-2 (ej., televisión en vivo). Esto previene la transcodificación de contenido MPEG-2, pero a mayor uso de ancho de banda.
- Settings Menu - Description for option
-
-
-
- Soporte de reproducción directa para contenido MPEG-4. Esto podría requerir ser deshabilitado para poder reproducir los archivos de video con encodificación DIVX.
- Settings Menu - Description for option
-
-
-
- Habilitado
-
-
-
- Cuadrícula de multimedia
- UI -> Media Grid section in user setting screen.
-
-
-
- Tiempo funcionando
-
-
- Title of Tab for switching "views" when looking at a library
-
- Visualización
-
-
-
- Características especiales
-
-
-
- Falleció
-
-
-
- Empezado a las
- (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
-
-
-
- Empieza
- (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
-
-
-
- Terminado a las
- (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
-
-
-
- Canales
- Menu option for showing Live TV Channel List
-
-
-
- Guía de TV
- Menu option for showing Live TV Guide / Schedule
-
-
-
- Cancelar grabación
-
-
-
- Cerrar
-
-
-
- Conectando al servidor
- Message to display to user while client is attempting to connect to the server
-
-
-
- No se ha encontrado
- Title of message box when the requested content is not found on the server
-
-
-
- Desconocido
- Title for a cast member for which we have no information for
-
-
-
- Seleccione un servidor Jellyfin disponible en su red local:
- Instructions on initial app launch when the user is asked to pick a server from a list
-
-
-
- Fecha añadido
-
-
-
- Elenco y equipo
-
-
-
- Más como este/a
-
-
-
- Repetir
- If TV Shows has previously been broadcasted
-
-
-
- Se ha encontrado un error al reproducir este elemento. El servidor no proveyó la información necesaria para la transcodificación.
- Content of message box when trying to play an item which requires transcoding, and the server did not provide transcode url
-
-
-
- MPEG-2
- Name of codec used in settings menu
-
-
-
- Películas (presentación)
-
-
-
- Películas (cuadrícula)
-
-
-
- Empieza a las
- (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
-
-
-
- En vivo
- If TV Show is being broadcast live (not pre-recorded)
-
-
-
- Grabar serie
-
-
-
- Cancelar grabación de serie
-
-
-
- **EXPERIMENTAL** Soporte de reproducción directa para contenido AV1 si este dispositivo Roku es compatible.
- Description of a setting - should we try to direct play experimental av1 codec
-
-
-
- Cantidad de elementos
- UI -> Media Grid -> Item Count in user setting screen.
-
-
-
- Termina a las
- (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
-
-
-
- Ver Canal
-
-
-
- Grabar
-
-
-
- Versión
-
-
-
- Reproducción
- Title for Playback section in user setting screen.
-
-
-
- Interfaz de usuario
- Title for User Interface section in user setting screen.
-
-
-
- Opciones de la cuadrícula de multimedia.
-
-
-
- Soporte de Codec
- Settings Menu - Title for settings group related to codec support
-
-
-
- Habilitar o desactivar la reproducción directa para codecs opcionales
- Settings Menu - Title for settings group related to codec support
-
-
-
- MPEG-4
- Name of codec used in settings menu
-
-
-
- AV1
- Name of a setting - should we try to direct play experimental av1 codec
-
-
-
- Empezado
- (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
-
-
-
- El contenido solicitado no existe en el servidor
- Content of message box when the requested content is not found on the server
-
-
-
- Introduce el nombre del servidor o la dirección IP
- Title of KeyboardDialog when manually entering a server URL
-
-
-
- Si arriba no hay ningún servidor listado, puedes introducir la URL del servidor manualmente:
- Instructions on initial app launch when the user is asked to manually enter a server URL
-
-
-
- Deshabilitado
-
-
-
\ No newline at end of file
+ Press 'OK' to Close
+
+
+
+
+ Programas de Televisión
+
+
+
+ Termina a
+ (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
+
+
+
+ Cancelar la grabación
+
+
+
+ Cancelar la grabación de Series
+
+
+
+ Elige un servidor Jellyfin disponible de la red local
+ Instructions on initial app launch when the user is asked to pick a server from a list
+
+
+
+ Comenzó
+ (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
+
+
+
+ Comenzó a
+ (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
+
+
+
+ Comienza
+ (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
+
+
+
+ Terminó
+ (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
+
+
+
+ Agregar el nombre del servidor o direccion de IP
+ Title of KeyboardDialog when manually entering a server URL
+
+
+
+ Elige un servidor Jellyfin disponible de la red local:
+ Instructions on initial app launch when the user is asked to pick a server from a list
+
+
+
+ si no hay servidores disponibles, puedes agregar manualmente la URL:
+ Instructions on initial app launch when the user is asked to manually enter a server URL
+
+
+
+ Ha ocurrido un error tratando de recuperar la información desde el servidor.
+ Dialog detail when unable to load Content from Server
+
+
+
+ Reproduciendo Contenido de Canal
+
+
+ Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
+
+ Este %1 no contiene elementos
+
+
+
+ Cambiar Servidor
+
+
+
+ Borrar Credenciales
+
+
+
+ Puntuación de la crítica
+
+
+
+ Edad
+
+
+
+ hoy
+ Current day
+
+
+
+ Muerto/a
+
+
+
+ Puntuación de IMDb
+
+
+
+ Reparto y equipo
+
+
+
+ Sábado
+ Day of Week
+
+
+
+ Repetir
+ If TV Shows has previously been broadcasted
+
+
+
+ Cuadrícula de medios
+ UI -> Media Grid section in user setting screen.
+
+
+
+ Cerrar sesión
+
+
+
+ ¿Guardar credenciales?
+
+
+
+ Error durante la reproducción
+ Dialog title when error occurs during playback
+
+
+
+ Ha ocurrido un error al reproducir este contenido.
+ Dialog detail when error occurs during playback
+
+
+
+ Reproduciendo contenido del canal
+
+
+
+ Error de reproducción de contenido del canal
+
+
+ Name or Title field of media item
+
+ Nombre
+
+
+
+ Fecha en que se agregó
+
+
+
+ Fecha de reproducción
+
+
+
+ Control Parental
+
+
+
+ Fecha de estreno
+
+
+
+ Tiempo de duración
+
+
+ Title of Tab for switching "views" when looking at a library
+
+ Vista
+
+
+ Title of Tab for options to sort library content
+
+ Clasificar
+
+
+ Title of Tab for options to filter library content
+
+ Filtro
+
+
+
+ Funciones especiales
+
+
+
+ No se ha podido reproducir el contenido del canal de este servidor
+
+
+
+ Conteo de reproducción
+
+
+
+ En directo ahora
+
+
+
+ Error recuperando contenido
+ Dialog title when unable to load Content from Server
+
+
+
+ Ha ocurrido un error al tratar de recuperar la información de este contenido desde el servidor.
+ Dialog detail when unable to load Content from Server
+
+
+ Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
+
+ Este %1 no contiene elementos
+
+
+
+ Nacido/a
+
+
+
+ Mas de este estilo
+
+
+
+ Se ha encontrado un error al reproducir este elemento. El servidor no proveyó la información necesaria para la transcodificación.
+ Content of message box when trying to play an item which requires transcoding, and the server did not provide transcode url
+
+
+
+ Utilizar la búsqueda remota por voz
+ Help text in search voice text box
+
+
+
+ Películas (presentación)
+
+
+
+ Películas (cuadrícula)
+
+
+
+ Programas de televisión
+
+
+
+ ayer
+ Previous day
+
+
+
+ mañana
+ Next day
+
+
+
+ Jueves
+ Day of Week
+
+
+
+ Viernes
+ Day of Week
+
+
+
+ Comenzó a las
+ (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
+
+
+
+ Comienza a las
+ (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
+
+
+
+ En vivo
+ If TV Show is being broadcast live (not pre-recorded)
+
+
+
+ Guía de televisión
+ Menu option for showing Live TV Guide / Schedule
+
+
+
+ Grabar serie
+
+
+
+ Cancelar la grabación
+
+
+
+ Cancelar la grabación de la serie
+
+
+
+ Cerrar
+
+
+
+ Conectando con el servidor
+ Message to display to user while client is attempting to connect to the server
+
+
+
+ No se ha encontrado
+ Title of message box when the requested content is not found on the server
+
+
+
+ Desconocido
+ Title for a cast member for which we have no information for
+
+
+
+ El contenido solicitado no existe en el servidor
+ Content of message box when the requested content is not found on the server
+
+
+
+ Agregar el nombre del servidor o su dirección de IP
+ Title of KeyboardDialog when manually entering a server URL
+
+
+
+ Elige un servidor Jellyfin disponible en la red local:
+ Instructions on initial app launch when the user is asked to pick a server from a list
+
+
+
+ Soporte de reproducción directa para contenido MPEG-2 (ej., televisión en vivo). Esto previene la transcodificación de contenido MPEG-2, pero a mayor uso de ancho de banda.
+ Settings Menu - Description for option
+
+
+
+ Soporte de reproducción directa para contenido MPEG-4. Esto podría requerir ser deshabilitado para poder reproducir los archivos de video con encodificación DIVX.
+ Settings Menu - Description for option
+
+
+
+ **EXPERIMENTAL** Soporte de reproducción directa para contenido AV1 si este dispositivo Roku es compatible.
+ Description of a setting - should we try to direct play experimental av1 codec
+
+
+
+ Siempre mostrar los títulos por debajo de las imágenes de cartelera. (Si se deshabilita, el título se mostrará debajo del elemento resaltado solamente).
+ Description for option in Setting Screen
+
+
+
+ Conteo de elementos
+ UI -> Media Grid -> Item Count in user setting screen.
+
+
+
+ Mostrar el conteo de elementos en la biblioteca y en el índice del elemento seleccionado.
+ Description for option in Setting Screen
+
+
+
+ Agregar a favoritos
+ Button Text - When pressed, sets item as Favorite
+
+
+
+ Marcar como visto
+ Button Text - When pressed, marks item as Warched
+
+
+
+ Ir a serie
+ Continue Watching Popup Menu - Navigate to the Series Detail Page
+
+
+
+ Ir a la temporada
+ Continue Watching Popup Menu - Navigate to the Season Page
+
+
+
+ Ir al episodio
+ Continue Watching Popup Menu - Navigate to the Episode Detail Page
+
+
+
+ Buscar ahora
+ Help text in search Box
+
+
+
+ Presiona 'OK' para cerrar
+
+
+
+ Partes adicionales
+ Additional parts of a video
+
+
+
+ Películas
+
+
+
+ Domingo
+ Day of Week
+
+
+
+ Lunes
+ Day of Week
+
+
+
+ Martes
+ Day of Week
+
+
+
+ Miércoles
+ Day of Week
+
+
+
+ Comienza a las
+ (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
+
+
+
+ Terminó a las
+ (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
+
+
+
+ Termina a las
+ (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
+
+
+
+ Canales
+ Menu option for showing Live TV Channel List
+
+
+
+ Ver Canal
+
+
+
+ Grabar
+
+
+
+ Si no hay servidores disponibles, puedes agregar manualmente la URL:
+ Instructions on initial app launch when the user is asked to manually enter a server URL
+
+
+
+ Error obteniendo la Información de reproducción
+ Dialog Title: Received error from server when trying to get information about the selected item for playback
+
+
+
+ Versión
+
+
+
+ Reproducción
+ Title for Playback section in user setting screen.
+
+
+
+ Interfaz de usuario
+ Title for User Interface section in user setting screen.
+
+
+
+ Opciones de la cuadrícula de medios.
+
+
+
+ Soporte de Codec
+ Settings Menu - Title for settings group related to codec support
+
+
+
+ Habilitar o desactivar la reproducción directa para codecs opcionales
+ Settings Menu - Title for settings group related to codec support
+
+
+
+ MPEG-2
+ Name of codec used in settings menu
+
+
+
+ MPEG-4
+ Name of codec used in settings menu
+
+
+
+ AV1
+ Name of a setting - should we try to direct play experimental av1 codec
+
+
+
+ Títulos de elementos
+ UI -> Media Grid -> Item Title in user setting screen.
+
+
+
+ Comenzó a las
+ (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
+
+
+
+ Activado
+
+
+
+ Desactivado
+
+
+
+ espectáculos
+
+
+
+ Conexión rápida
+
+
+
+ (El diálogo se cerrará automáticamente)
+
+
+
+ Vuelva a la parte superior
+ UI -> Media Grid -> Item Title in user setting screen.
+
+
+
+ Puede buscar títulos, personas, canales de TV en vivo y más
+ Help text in search results
+
+
+
+ Aquí está su código de conexión rápida:
+
+
+
+ Hubo un error al autenticarse a través de Quick Connect.
+
+
+
+ Redes
+
+
+
+ Estudios
+
+
+
+ Use el botón de reproducción para animar lentamente al primer elemento de la carpeta. (Si está deshabilitado, la carpeta se restablecerá al primer elemento inmediatamente).
+ Description for option in Setting Screen
+
+
+
+ Eliga un servidor Jellyfin disponible en la red local:
+ Instructions on initial app launch when the user is asked to pick a server from a list
+
+
+
+ %1 de %2
+ Item position and count. %1 = current item. %2 = total number of items
+
+
+
+ Opciones para el protector de pantalla de Jellyfin.
+ Description for Screensaver user settings.
+
+
+
+ Siguiente episodio
+
+
+
+ Tamaño
+ Video size
+
+
+
+ Canción
+
+
+
+ Reproducir Trailer
+
+
+
+ Protector de pantalla
+
+
+
+ Opciones que alteran el diseño de Jellyfin.
+ Description for Design Elements user settings.
+
+
+
+ Modo Cine
+ Settings Menu - Title for option
+
+
+
+ Borrar guardado
+
+
+
+ Muerto
+
+
+
+ Cambiar de servidor
+
+
+
+ Desconectar
+
+
+
+ ¿Guardar credenciales?
+
+
+
+ Error al reproducir
+ Dialog title when error occurs during playback
+
+
+
+ Se encontró un error mientras se reproducía este medio
+ Dialog detail when error occurs during playback
+
+
+
+ Tiempo funcionando
+
+
+ Title of Tab for switching "views" when looking at a library
+
+ Visualización
+
+
+
+ Características especiales
+
+
+
+ Reproduciendo ahora
+
+
+
+ Error al recuperar el contenido desde el servidor
+ Dialog title when unable to load Content from Server
+
+
+
+ Nacido
+
+
+
+ Cargando información del canal
+
+
+
+ Error al cargar información del canal
+
+
+
+ Valoración de IMDb
+
+
+
+ Fecha añadida
+
+
+
+ Fecha de reproducción
+
+
+
+ Valoración parental
+
+
+
+ Contador de reproducciones
+
+
+
+ Fecha de lanzamiento
+
+
+ Title of Tab for options to sort library content
+
+ Ordenar
+
+
+ Title of Tab for options to filter library content
+
+ Filtro
+
+
+
+ Edad
+
+
+
+ Actores y personal
+
+
+
+ Más como este/a
+
+
+
+ hoy
+ Current day
+
+
+
+ Sábado
+ Day of Week
+
+
+
+ Repetir
+ If TV Shows has previously been broadcasted
+
+
+
+ Películas (presentación)
+
+
+
+ Películas (cuadrícula)
+
+
+
+ Programas de TV
+
+
+
+ ayer
+ Previous day
+
+
+
+ mañana
+ Next day
+
+
+
+ Jueves
+ Day of Week
+
+
+
+ Viernes
+ Day of Week
+
+
+
+ Empezado a las
+ (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
+
+
+
+ Empieza a las
+ (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
+
+
+
+ En vivo
+ If TV Show is being broadcast live (not pre-recorded)
+
+
+
+ Guía de TV
+ Menu option for showing Live TV Guide / Schedule
+
+
+
+ Grabar series
+
+
+
+ Cancelar grabación
+
+
+
+ Cancelar grabación de series
+
+
+
+ Cerrar
+
+
+
+ Conectando al servidor
+ Message to display to user while client is attempting to connect to the server
+
+
+
+ No se ha encontrado
+ Title of message box when the requested content is not found on the server
+
+
+
+ Desconocido
+ Title for a cast member for which we have no information for
+
+
+
+ Seleccione un servidor Jellyfin disponible en su red local
+ Instructions on initial app launch when the user is asked to pick a server from a list
+
+
+
+ Pulsa 'OK' para cerrar
+
+
+
+ Partes adicionales
+ Additional parts of a video
+
+
+
+ Películas
+
+
+
+ Domingo
+ Day of Week
+
+
+
+ Lunes
+ Day of Week
+
+
+
+ Martes
+ Day of Week
+
+
+
+ Miércoles
+ Day of Week
+
+
+
+ Empieza
+ (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
+
+
+
+ Terminado a las
+ (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
+
+
+
+ Termina a las
+ (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
+
+
+
+ Canales
+ Menu option for showing Live TV Channel List
+
+
+
+ Canal Ver
+
+
+
+ Grabar
+
+
+
+ Empezado
+ (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
+
+
+
+ Hubo un error al recuperar la información de este objeto desde el servidor
+ Dialog detail when unable to load Content from Server
+
+
+
+ Incapaz de cargar la información del canal desde el servidor
+
+
+ Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
+
+ Este/a %1 no contiene medios
+
+
+ Name or Title field of media item
+
+ Nombre
+
+
+
+ Valoración de los críticos
+
+
+
+ El contenido solicitado no existe en el servidor
+ Content of message box when the requested content is not found on the server
+
+
+
+ Introduce el nombre del servidor o la dirección IP
+ Title of KeyboardDialog when manually entering a server URL
+
+
+
+ Si arriba no hay ningún servidor listado, puedes introducir la URL del servidor manualmente:
+ Instructions on initial app launch when the user is asked to manually enter a server URL
+
+
+
+ Error obteniendo la información de reproducción
+ Dialog Title: Received error from server when trying to get information about the selected item for playback
+
+
+
+ ¿Guardar credenciales?
+
+
+
+ Transmitiendo ahora
+
+
+
+ Error al recuperar el contenido
+ Dialog title when unable to load Content from Server
+
+
+
+ Error al reproducir
+ Dialog title when error occurs during playback
+
+
+
+ Cambiar de servidor
+
+
+
+ Ha ocurrido un error al tratar de recuperar la información de este contenido desde el servidor.
+ Dialog detail when unable to load Content from Server
+
+
+
+ Cerrar sesión
+
+
+
+ Eliminar guardados
+
+
+
+ Se ha encontrado un error durante la reproduccion.
+ Dialog detail when error occurs during playback
+
+
+
+ Fecha de reproducción
+
+
+
+ Valoración parental
+
+
+ Title of Tab for options to filter library content
+
+ Filtrar
+
+
+
+ Nacido
+
+
+
+ Pulsa 'OK' para cerrar
+
+
+
+ Programas de TV
+
+
+
+ ayer
+ Previous day
+
+
+
+ Domingo
+ Day of Week
+
+
+
+ Miércoles
+ Day of Week
+
+
+
+ Sábado
+ Day of Week
+
+
+
+ Fallecio
+
+
+
+ mañana
+ Next day
+
+
+
+ Lunes
+ Day of Week
+
+
+
+ Martes
+ Day of Week
+
+
+
+ Jueves
+ Day of Week
+
+
+
+ Viernes
+ Day of Week
+
+
+
+ Valoración de IMDb
+
+
+
+ Edad
+
+
+
+ hoy
+ Current day
+
+
+
+ No se ha podido cargar la informacion de los canales desde el servidor
+
+
+ Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
+
+ Este %1 no contiene medios
+
+
+ Name or Title field of media item
+
+ Nombre
+
+
+
+ Valoración de los críticos
+
+
+
+ Cargando información del canal
+
+
+
+ Error cargando la information del canal
+
+
+
+ Contador de reproducciones
+
+
+
+ Fecha de lanzamiento
+
+
+ Title of Tab for options to sort library content
+
+ Ordenar
+
+
+
+ Películas
+
+
+
+ Partes adicionales
+ Additional parts of a video
+
+
+
+ Error obteniendo la información de reproducción
+ Dialog Title: Received error from server when trying to get information about the selected item for playback
+
+
+
+ Soporte de reproducción directa para contenido MPEG-2 (ej., televisión en vivo). Esto previene la transcodificación de contenido MPEG-2, pero a mayor uso de ancho de banda.
+ Settings Menu - Description for option
+
+
+
+ Soporte de reproducción directa para contenido MPEG-4. Esto podría requerir ser deshabilitado para poder reproducir los archivos de video con encodificación DIVX.
+ Settings Menu - Description for option
+
+
+
+ Habilitado
+
+
+
+ Cuadrícula de multimedia
+ UI -> Media Grid section in user setting screen.
+
+
+
+ Tiempo funcionando
+
+
+ Title of Tab for switching "views" when looking at a library
+
+ Visualización
+
+
+
+ Características especiales
+
+
+
+ Falleció
+
+
+
+ Empezado a las
+ (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
+
+
+
+ Empieza
+ (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
+
+
+
+ Terminado a las
+ (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
+
+
+
+ Canales
+ Menu option for showing Live TV Channel List
+
+
+
+ Guía de TV
+ Menu option for showing Live TV Guide / Schedule
+
+
+
+ Cancelar grabación
+
+
+
+ Cerrar
+
+
+
+ Conectando al servidor
+ Message to display to user while client is attempting to connect to the server
+
+
+
+ No se ha encontrado
+ Title of message box when the requested content is not found on the server
+
+
+
+ Desconocido
+ Title for a cast member for which we have no information for
+
+
+
+ Seleccione un servidor Jellyfin disponible en su red local:
+ Instructions on initial app launch when the user is asked to pick a server from a list
+
+
+
+ Fecha añadido
+
+
+
+ Elenco y equipo
+
+
+
+ Más como este/a
+
+
+
+ Repetir
+ If TV Shows has previously been broadcasted
+
+
+
+ Se ha encontrado un error al reproducir este elemento. El servidor no proveyó la información necesaria para la transcodificación.
+ Content of message box when trying to play an item which requires transcoding, and the server did not provide transcode url
+
+
+
+ MPEG-2
+ Name of codec used in settings menu
+
+
+
+ Películas (presentación)
+
+
+
+ Películas (cuadrícula)
+
+
+
+ Empieza a las
+ (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
+
+
+
+ En vivo
+ If TV Show is being broadcast live (not pre-recorded)
+
+
+
+ Grabar serie
+
+
+
+ Cancelar grabación de serie
+
+
+
+ **EXPERIMENTAL** Soporte de reproducción directa para contenido AV1 si este dispositivo Roku es compatible.
+ Description of a setting - should we try to direct play experimental av1 codec
+
+
+
+ Cantidad de elementos
+ UI -> Media Grid -> Item Count in user setting screen.
+
+
+
+ Termina a las
+ (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
+
+
+
+ Ver Canal
+
+
+
+ Grabar
+
+
+
+ Versión
+
+
+
+ Reproducción
+ Title for Playback section in user setting screen.
+
+
+
+ Interfaz de usuario
+ Title for User Interface section in user setting screen.
+
+
+
+ Opciones de la cuadrícula de multimedia.
+
+
+
+ Soporte de Codec
+ Settings Menu - Title for settings group related to codec support
+
+
+
+ Habilitar o desactivar la reproducción directa para codecs opcionales
+ Settings Menu - Title for settings group related to codec support
+
+
+
+ MPEG-4
+ Name of codec used in settings menu
+
+
+
+ AV1
+ Name of a setting - should we try to direct play experimental av1 codec
+
+
+
+ Empezado
+ (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
+
+
+
+ El contenido solicitado no existe en el servidor
+ Content of message box when the requested content is not found on the server
+
+
+
+ Introduce el nombre del servidor o la dirección IP
+ Title of KeyboardDialog when manually entering a server URL
+
+
+
+ Si arriba no hay ningún servidor listado, puedes introducir la URL del servidor manualmente:
+ Instructions on initial app launch when the user is asked to manually enter a server URL
+
+
+
+ Deshabilitado
+
+
+
+ Cambiar servidor
+
+
+
+ ¿Guardar credenciales?
+
+
+
+ Cerrar sesión
+
+
+
+ Nacido/a
+
+
+
+ Programas de televisión
+
+
+
+ Error durante la reproducción
+ Dialog title when error occurs during playback
+
+
+
+ No es posible cargar los datos del canal desde el servidor
+
+
+ Name or Title field of media item
+
+ Nombre
+
+
+
+ Partes adicionales
+ Additional parts of a video
+
+
+
+ Viernes
+ Day of Week
+
+
+
+ Cerrar
+
+
+
+ Transmitiendo Ahora
+
+
+
+ Error al recuperar el contenido
+ Dialog title when unable to load Content from Server
+
+
+
+ Ha habido un error al intentar obtener este ítem del servidor.
+ Dialog detail when unable to load Content from Server
+
+
+
+ Se ha encontrado un error durante la reproduccion de este ítem.
+ Dialog detail when error occurs during playback
+
+
+ Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
+
+ Este %1 no contiene ítems
+
+
+
+ Fecha de reproducción
+
+
+
+ Valoración parental
+
+
+ Title of Tab for options to filter library content
+
+ Filtrar
+
+
+
+ Fallecido/a
+
+
+
+ Presiona 'Aceptar' para cerrar
+
+
+
+ Características especiales
+
+
+
+ ayer
+ Previous day
+
+
+
+ mañana
+ Next day
+
+
+
+ Domingo
+ Day of Week
+
+
+
+ Lunes
+ Day of Week
+
+
+
+ Martes
+ Day of Week
+
+
+
+ Miércoles
+ Day of Week
+
+
+
+ Jueves
+ Day of Week
+
+
+
+ Sábado
+ Day of Week
+
+
+
+ Empezado a las
+ (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
+
+
+
+ Comenzará
+ (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
+
+
+
+ Terminado a las
+ (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
+
+
+
+ Directo
+ If TV Show is being broadcast live (not pre-recorded)
+
+
+
+ Canales
+ Menu option for showing Live TV Channel List
+
+
+
+ Guía de Televisión
+ Menu option for showing Live TV Guide / Schedule
+
+
+
+ Cancelar la Grabación
+
+
+
+ Conectando al Servidor
+ Message to display to user while client is attempting to connect to the server
+
+
+
+ No encontrado
+ Title of message box when the requested content is not found on the server
+
+
+
+ El contenido solicitado no existe en el servidor
+ Content of message box when the requested content is not found on the server
+
+
+
+ Seleccione un servidor Jellyfin disponible en su red local
+ Instructions on initial app launch when the user is asked to pick a server from a list
+
+
+
+ Duración
+
+
+ Title of Tab for switching "views" when looking at a library
+
+ Vista
+
+
+
+ Desconocido
+ Title for a cast member for which we have no information for
+
+
+
+ Valoración IMDb
+
+
+
+ Fecha añadido
+
+
+
+ Edad
+
+
+
+ Elenco y equipo
+
+
+
+ Más de este estilo
+
+
+
+ hoy
+ Current day
+
+
+
+ Repetir
+ If TV Shows has previously been broadcasted
+
+
+
+ Películas (en modo presentación)
+ Movie library view option
+
+
+
+ Películas (cuadrícula)
+ Movie library view option
+
+
+
+ Comienza a las
+ (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
+
+
+
+ Grabar Serie
+
+
+
+ Cancelar la Grabación de la Serie
+
+
+
+ Termina a las
+ (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
+
+
+
+ Ver Canal
+
+
+
+ Grabar
+
+
+
+ Empezó
+ (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
+
+
+
+ Puntuación de la crítica
+
+
+
+ Introduce el nombre del servidor o la dirección IP
+ Title of KeyboardDialog when manually entering a server URL
+
+
+
+ Eliminar Guardado
+
+
+
+ Cargando información del canal
+
+
+
+ Error al cargar la información del canal
+
+
+
+ Número de reproducciones
+
+
+
+ Fecha de estreno
+
+
+ Title of Tab for options to sort library content
+
+ Ordenar
+
+
+
+ Películas
+
+
+
diff --git a/locale/pt_BR/translations.ts b/locale/pt_BR/translations.ts
index 377fa5f7..376b658d 100644
--- a/locale/pt_BR/translations.ts
+++ b/locale/pt_BR/translations.ts
@@ -1,2695 +1,2720 @@
- UTF-8
-
- default
-
-
- padrão 192.168.1.100:8096 ou https://exemplo.com/jellyfin
-
-
-
- Cancelar
-
-
-
- Conectar ao Servidor
-
-
-
- Termina em %1
-
-
-
- Insira a Configuração
-
-
-
- Favorito
-
-
-
- Carregando…
-
-
-
- Falha na tentativa de login.
-
-
-
- OK
-
-
-
- Opções
-
-
-
- Reproduzir
-
-
-
- Por favor, inicie a sessão
-
-
-
- Busca
-
-
-
- Servidor não encontrado, ele está online?
-
-
-
- Aleatório
-
-
-
- Entrar
-
-
-
- Enviar
-
-
-
- Assistido
-
-
-
- Alterar Servidor
-
-
-
- Sair
-
-
-
- Adicionar Usuário
-
-
-
- Perfil
-
-
-
- Minha Mídia
-
-
-
- Continuar Assistindo
-
-
-
- A Seguir
-
-
-
- Mais recente em
-
-
-
- Início
-
-
-
- Insira nome de usuário
-
-
-
- Insira um senha
-
-
-
- Insira um valor…
-
-
-
- Ordenar Por
-
-
-
- Data de Adição
-
-
-
- Data de Lançamento
-
-
-
- Nome
-
-
-
- Ordem
-
-
-
- Decrescente
-
-
-
- Crescente
-
-
-
- Senha
-
-
-
- Usuário
-
-
-
- Gêneros
-
-
-
- Diretor
-
-
-
- Vídeo
-
-
-
- Áudio
-
-
-
- Servidor
-
-
-
-
-
-
- Sair
-
-
-
- Mudar servidor
-
-
-
- Não foi possível carregar dados do canal do servidor
-
-
-
- Erro ao carregar dados do canal
-
-
-
- Carregando dados do canal
-
-
-
- Sair
-
-
-
- Mudar servidor
-
-
-
- Não foi possível carregar Dados do Canal do servidor
-
-
-
- Erro ao carregar dados do canal
-
-
-
- Carregando dados do canal
-
-
-
- Um erro foi encontrado durante a reprodução deste item.
- Dialog detail when error occurs during playback
-
-
-
- Ocorreu um erro ao recuperar os dados deste item do servidor.
- Dialog detail when unable to load Content from Server
-
-
-
- Erro durante reprodução
- Dialog title when error occurs during playback
-
-
-
- Erro ao recuperar conteúdo
- Dialog title when unable to load Content from Server
-
-
-
- Sair
-
-
-
- Mudar servidor
-
-
-
- Não conseguiu carregar as informações no servidor
-
-
-
- Erro durante a reprodução
- Dialog title when error occurs during playback
-
-
-
- Erro ao carregar conteúdo
- Dialog title when unable to load Content from Server
-
-
- Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
-
- %1 não contém itens
-
-
-
- Erro ao carregar informações do canal
-
-
-
- Carregando informações do canal
-
-
-
- Ocorreu um erro ao buscar informações deste item no servidor.
- Dialog detail when unable to load Content from Server
-
-
-
- Ocorreu um erro durante a reprodução.
- Dialog detail when error occurs during playback
-
-
-
- Mudar de Servidor
-
-
-
- Sair
-
-
- Title of Tab for switching "views" when looking at a library
-
- Visualização
-
-
-
- Número de Reproduções
-
-
-
- Avaliação dos pais
-
-
-
- Data da Ultima Reprodução
-
-
-
- Data de Adição
-
-
-
- Avaliação da crítica
-
-
-
- Avaliação do IMDb
-
-
-
- Não foi possível carregar Dados do Canal deste servidor
-
-
-
- Erro ao Carregar Dados do Canal
-
-
-
- Carregando dados do Canal
-
-
-
- Foi encontrado um erro ao reproduzir este item.
- Dialog detail when error occurs during playback
-
-
-
- Ocorreu um erro ao carregar os dados deste item do servidor.
- Dialog detail when unable to load Content from Server
-
-
-
- Encerrar Sessão
-
-
- Title of Tab for options to filter library content
-
- Filtro
-
-
- Title of Tab for options to sort library content
-
- Ordenação
-
-
-
- Tempo de Execução
-
-
-
- Data de Lançamento
-
-
- Name or Title field of media item
-
- Nome
-
-
- Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
-
- Esse(a) %1 não contém itens
-
-
-
- Erro Durante Reprodução
- Dialog title when error occurs during playback
-
-
-
- Erro ao Carregar Conteúdo
- Dialog title when unable to load Content from Server
-
-
-
- Mudar Servidor
-
-
-
- Guia de TV
- Menu option for showing Live TV Guide / Schedule
-
-
-
- Canais
- Menu option for showing Live TV Channel List
-
-
-
- Repetir
- If TV Shows has previously been broadcasted
-
-
-
- Ao Vivo
- If TV Show is being broadcast live (not pre-recorded)
-
-
-
- Termina
- (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
-
-
-
- Termina às
- (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
-
-
-
- Começa
- (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
-
-
-
- Começa às
- (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
-
-
-
- Começou
- (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
-
-
-
- Começou às
- (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
-
-
-
- Sábado
- Day of Week
-
-
-
- Sexta feira
- Day of Week
-
-
-
- Quinta feira
- Day of Week
-
-
-
- Quarta feira
- Day of Week
-
-
-
- Terça feira
- Day of Week
-
-
-
- Segunda feira
- Day of Week
-
-
-
- Domingo
- Day of Week
-
-
-
- amanhã
- Next day
-
-
-
- ontem
- Previous day
-
-
-
- hoje
- Current day
-
-
- Title of Tab for options to filter library content
-
- Filtro
-
-
- Title of Tab for options to sort library content
-
- Ordenar
-
-
- Title of Tab for switching "views" when looking at a library
-
- Visualização
-
-
-
- Tempo de Execução
-
-
-
- Data de Lançamento
-
-
-
- Número de Execução
-
-
-
- Avaliação Parental
-
-
-
- Data da Execução
-
-
-
- Data da Adição
-
-
-
- Avaliação da crítica
-
-
-
- Classificação IMDb
-
-
- Name or Title field of media item
-
- Nome
-
-
- Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
-
- Este %1 não contém itens
-
-
-
- Incapaz de carregar os dados do canal do servidor
-
-
-
- Erro ao carregar dados do canal
-
-
-
- Carregando dados do canal
-
-
-
- Foi encontrado um erro ao reproduzir este item.
- Dialog detail when error occurs during playback
-
-
-
- Ocorreu um erro ao recuperar os dados para este item do servidor.
- Dialog detail when unable to load Content from Server
-
-
-
- Erro durante a reprodução
- Dialog title when error occurs during playback
-
-
-
- Erro ao recuperar conteúdo
- Dialog title when unable to load Content from Server
-
-
-
- Sair
-
-
-
- Mudar Servidor
-
-
-
- Conectando no servidor
- Message to display to user while client is attempting to connect to the server
-
-
-
- Guia de TV
- Menu option for showing Live TV Guide / Schedule
-
-
-
- Canais
- Menu option for showing Live TV Channel List
-
-
-
- Repetir
- If TV Shows has previously been broadcasted
-
-
-
- Ao Vivo
- If TV Show is being broadcast live (not pre-recorded)
-
-
-
- Termina
- (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
-
-
-
- Termina às
- (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
-
-
-
- Começa
- (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
-
-
-
- Começa às
- (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
-
-
-
- Começou
- (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
-
-
-
- Começou às
- (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
-
-
-
- Sábado
- Day of Week
-
-
-
- Sexta feira
- Day of Week
-
-
-
- Quinta feira
- Day of Week
-
-
-
- Quarta feira
- Day of Week
-
-
-
- Terça feira
- Day of Week
-
-
-
- Segunda feira
- Day of Week
-
-
-
- Domingo
- Day of Week
-
-
-
- amanhã
- Next day
-
-
-
- ontem
- Previous day
-
-
-
- hoje
- Current day
-
-
- Title of Tab for options to filter library content
-
- Filtro
-
-
- Title of Tab for options to sort library content
-
- Ordenar
-
-
- Title of Tab for switching "views" when looking at a library
-
- Visualização
-
-
-
- Tempo de Execução
-
-
-
- Data de Lançamento
-
-
-
- Número de Execução
-
-
-
- Avaliação Parental
-
-
-
- Data da Execução
-
-
-
- Data de Adição
-
-
-
- Avaliação da crítica
-
-
-
- Classificação IMDb
-
-
- Name or Title field of media item
-
- Nome
-
-
- Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
-
- Este %1
+UTF-8
+
+ default
+
+
+ padrão 192.168.1.100:8096 ou https://exemplo.com/jellyfin
+
+
+
+ Cancelar
+
+
+
+ Conectar ao Servidor
+
+
+
+ Termina em %1
+
+
+
+ Insira a Configuração
+
+
+
+ Favorito
+
+
+
+ Carregando…
+
+
+
+ Falha na tentativa de login.
+
+
+
+ OK
+
+
+
+ Opções
+
+
+
+ Reproduzir
+
+
+
+ Por favor, inicie a sessão
+
+
+
+ Busca
+
+
+
+ Servidor não encontrado, ele está online?
+
+
+
+ Aleatório
+
+
+
+ Entrar
+
+
+
+ Enviar
+
+
+
+ Assistido
+
+
+
+ Alterar Servidor
+
+
+
+ Sair
+
+
+
+ Adicionar Usuário
+
+
+
+ Perfil
+
+
+
+ Minha Mídia
+
+
+
+ Continuar Assistindo
+
+
+
+ A Seguir
+
+
+
+ Mais recente em
+
+
+
+ Início
+
+
+
+ Insira nome de usuário
+
+
+
+ Insira um senha
+
+
+
+ Insira um valor…
+
+
+
+ Ordenar Por
+
+
+
+ Data de Adição
+
+
+
+ Data de Lançamento
+
+
+
+ Nome
+
+
+
+ Ordem
+
+
+
+ Decrescente
+
+
+
+ Crescente
+
+
+
+ Senha
+
+
+
+ Usuário
+
+
+
+ Gêneros
+
+
+
+ Diretor
+
+
+
+ Vídeo
+
+
+
+ Áudio
+
+
+
+ Servidor
+
+
+
+
+
+
+ Sair
+
+
+
+ Mudar servidor
+
+
+
+ Não foi possível carregar dados do canal do servidor
+
+
+
+ Erro ao carregar dados do canal
+
+
+
+ Carregando dados do canal
+
+
+
+ Sair
+
+
+
+ Mudar servidor
+
+
+
+ Não foi possível carregar Dados do Canal do servidor
+
+
+
+ Erro ao carregar dados do canal
+
+
+
+ Carregando dados do canal
+
+
+
+ Um erro foi encontrado durante a reprodução deste item.
+ Dialog detail when error occurs during playback
+
+
+
+ Ocorreu um erro ao recuperar os dados deste item do servidor.
+ Dialog detail when unable to load Content from Server
+
+
+
+ Erro durante reprodução
+ Dialog title when error occurs during playback
+
+
+
+ Erro ao recuperar conteúdo
+ Dialog title when unable to load Content from Server
+
+
+
+ Sair
+
+
+
+ Mudar servidor
+
+
+
+ Não conseguiu carregar as informações no servidor
+
+
+
+ Erro durante a reprodução
+ Dialog title when error occurs during playback
+
+
+
+ Erro ao carregar conteúdo
+ Dialog title when unable to load Content from Server
+
+
+ Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
+
+ %1 não contém itens
+
+
+
+ Erro ao carregar informações do canal
+
+
+
+ Carregando informações do canal
+
+
+
+ Ocorreu um erro ao buscar informações deste item no servidor.
+ Dialog detail when unable to load Content from Server
+
+
+
+ Ocorreu um erro durante a reprodução.
+ Dialog detail when error occurs during playback
+
+
+
+ Mudar de Servidor
+
+
+
+ Sair
+
+
+ Title of Tab for switching "views" when looking at a library
+
+ Visualização
+
+
+
+ Número de Reproduções
+
+
+
+ Avaliação dos pais
+
+
+
+ Data da Ultima Reprodução
+
+
+
+ Data de Adição
+
+
+
+ Avaliação da crítica
+
+
+
+ Avaliação do IMDb
+
+
+
+ Não foi possível carregar Dados do Canal deste servidor
+
+
+
+ Erro ao Carregar Dados do Canal
+
+
+
+ Carregando dados do Canal
+
+
+
+ Foi encontrado um erro ao reproduzir este item.
+ Dialog detail when error occurs during playback
+
+
+
+ Ocorreu um erro ao carregar os dados deste item do servidor.
+ Dialog detail when unable to load Content from Server
+
+
+
+ Encerrar Sessão
+
+
+ Title of Tab for options to filter library content
+
+ Filtro
+
+
+ Title of Tab for options to sort library content
+
+ Ordenação
+
+
+
+ Tempo de Execução
+
+
+
+ Data de Lançamento
+
+
+ Name or Title field of media item
+
+ Nome
+
+
+ Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
+
+ Esse(a) %1 não contém itens
+
+
+
+ Erro Durante Reprodução
+ Dialog title when error occurs during playback
+
+
+
+ Erro ao Carregar Conteúdo
+ Dialog title when unable to load Content from Server
+
+
+
+ Mudar Servidor
+
+
+
+ Guia de TV
+ Menu option for showing Live TV Guide / Schedule
+
+
+
+ Canais
+ Menu option for showing Live TV Channel List
+
+
+
+ Repetir
+ If TV Shows has previously been broadcasted
+
+
+
+ Ao Vivo
+ If TV Show is being broadcast live (not pre-recorded)
+
+
+
+ Termina
+ (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
+
+
+
+ Termina às
+ (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
+
+
+
+ Começa
+ (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
+
+
+
+ Começa às
+ (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
+
+
+
+ Começou
+ (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
+
+
+
+ Começou às
+ (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
+
+
+
+ Sábado
+ Day of Week
+
+
+
+ Sexta feira
+ Day of Week
+
+
+
+ Quinta feira
+ Day of Week
+
+
+
+ Quarta feira
+ Day of Week
+
+
+
+ Terça feira
+ Day of Week
+
+
+
+ Segunda feira
+ Day of Week
+
+
+
+ Domingo
+ Day of Week
+
+
+
+ amanhã
+ Next day
+
+
+
+ ontem
+ Previous day
+
+
+
+ hoje
+ Current day
+
+
+ Title of Tab for options to filter library content
+
+ Filtro
+
+
+ Title of Tab for options to sort library content
+
+ Ordenar
+
+
+ Title of Tab for switching "views" when looking at a library
+
+ Visualização
+
+
+
+ Tempo de Execução
+
+
+
+ Data de Lançamento
+
+
+
+ Número de Execução
+
+
+
+ Avaliação Parental
+
+
+
+ Data da Execução
+
+
+
+ Data da Adição
+
+
+
+ Avaliação da crítica
+
+
+
+ Classificação IMDb
+
+
+ Name or Title field of media item
+
+ Nome
+
+
+ Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
+
+ Este %1 não contém itens
+
+
+
+ Incapaz de carregar os dados do canal do servidor
+
+
+
+ Erro ao carregar dados do canal
+
+
+
+ Carregando dados do canal
+
+
+
+ Foi encontrado um erro ao reproduzir este item.
+ Dialog detail when error occurs during playback
+
+
+
+ Ocorreu um erro ao recuperar os dados para este item do servidor.
+ Dialog detail when unable to load Content from Server
+
+
+
+ Erro durante a reprodução
+ Dialog title when error occurs during playback
+
+
+
+ Erro ao recuperar conteúdo
+ Dialog title when unable to load Content from Server
+
+
+
+ Sair
+
+
+
+ Mudar Servidor
+
+
+
+ Conectando no servidor
+ Message to display to user while client is attempting to connect to the server
+
+
+
+ Guia de TV
+ Menu option for showing Live TV Guide / Schedule
+
+
+
+ Canais
+ Menu option for showing Live TV Channel List
+
+
+
+ Repetir
+ If TV Shows has previously been broadcasted
+
+
+
+ Ao Vivo
+ If TV Show is being broadcast live (not pre-recorded)
+
+
+
+ Termina
+ (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
+
+
+
+ Termina às
+ (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
+
+
+
+ Começa
+ (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
+
+
+
+ Começa às
+ (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
+
+
+
+ Começou
+ (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
+
+
+
+ Começou às
+ (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
+
+
+
+ Sábado
+ Day of Week
+
+
+
+ Sexta feira
+ Day of Week
+
+
+
+ Quinta feira
+ Day of Week
+
+
+
+ Quarta feira
+ Day of Week
+
+
+
+ Terça feira
+ Day of Week
+
+
+
+ Segunda feira
+ Day of Week
+
+
+
+ Domingo
+ Day of Week
+
+
+
+ amanhã
+ Next day
+
+
+
+ ontem
+ Previous day
+
+
+
+ hoje
+ Current day
+
+
+ Title of Tab for options to filter library content
+
+ Filtro
+
+
+ Title of Tab for options to sort library content
+
+ Ordenar
+
+
+ Title of Tab for switching "views" when looking at a library
+
+ Visualização
+
+
+
+ Tempo de Execução
+
+
+
+ Data de Lançamento
+
+
+
+ Número de Execução
+
+
+
+ Avaliação Parental
+
+
+
+ Data da Execução
+
+
+
+ Data de Adição
+
+
+
+ Avaliação da crítica
+
+
+
+ Classificação IMDb
+
+
+ Name or Title field of media item
+
+ Nome
+
+
+ Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
+
+ Este %1
não contém itens
-
-
-
- Incapaz de carregar os dados do canal do servidor
-
-
-
- Erro ao carregar dados do canal
-
-
-
- Carregando dados do canal
-
-
-
- Foi encontrado um erro ao reproduzir este item.
- Dialog detail when error occurs during playback
-
-
-
- Ocorreu um erro ao recuperar os dados para este item do servidor.
- Dialog detail when unable to load Content from Server
-
-
-
- Erro durante a reprodução
- Dialog title when error occurs during playback
-
-
-
- Erro ao recuperar conteúdo
- Dialog title when unable to load Content from Server
-
-
-
- Sair
-
-
-
- Trocar Servidor
-
-
-
- O conteúdo requisitado não existe no servidor
- Content of message box when the requested content is not found on the server
-
-
-
- Não encontrado
- Title of message box when the requested content is not found on the server
-
-
-
- Conectando ao servidor
- Message to display to user while client is attempting to connect to the server
-
-
-
- Guia de TV
- Menu option for showing Live TV Guide / Schedule
-
-
-
- Canais
- Menu option for showing Live TV Channel List
-
-
-
- Repetir
- If TV Shows has previously been broadcasted
-
-
-
- Ao Vivo
- If TV Show is being broadcast live (not pre-recorded)
-
-
-
- Termina às
- (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
-
-
-
- Terminou às
- (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
-
-
-
- Começa
- (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
-
-
-
- Começa às
- (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
-
-
-
- Começou
- (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
-
-
-
- Começou às
- (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
-
-
-
- Sábado
- Day of Week
-
-
-
- Sexta-feira
- Day of Week
-
-
-
- Quinta-feira
- Day of Week
-
-
-
- Quarta-feira
- Day of Week
-
-
-
- Terça-feira
- Day of Week
-
-
-
- Segunda-feira
- Day of Week
-
-
-
- Domingo
- Day of Week
-
-
-
- amanhã
- Next day
-
-
-
- ontem
- Previous day
-
-
-
- hoje
- Current day
-
-
- Title of Tab for options to filter library content
-
- Filtro
-
-
- Title of Tab for options to sort library content
-
- Ordenar
-
-
- Title of Tab for switching "views" when looking at a library
-
- Visualização
-
-
-
- Tempo de Execução
-
-
-
- Data de Lançamento
-
-
-
- Número de Execução
-
-
-
- Avaliação Parental
-
-
-
- Data da Execução
-
-
-
- Data de Adição
-
-
-
- Avaliação da Crítica
-
-
-
- Classificação IMDb
-
-
- Name or Title field of media item
-
- Nome
-
-
- Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
-
- Este %1 não contém itens
-
-
-
- Incapaz de carregar os Dados do Canal do servidor
-
-
-
- Erro ao carregar Dados do Canal
-
-
-
- Carregando Dados do Canal
-
-
-
- Foi encontrado um erro ao reproduzir este item.
- Dialog detail when error occurs during playback
-
-
-
- Ocorreu um erro ao recuperar os dados para este item do servidor.
- Dialog detail when unable to load Content from Server
-
-
-
- Erro Durante a Reprodução
- Dialog title when error occurs during playback
-
-
-
- Erro ao Recuperar Conteúdo
- Dialog title when unable to load Content from Server
-
-
-
- Sair
-
-
-
- Trocar Servidor
-
-
-
- Começou às
- (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
-
-
-
- Sábado
- Day of Week
-
-
-
- Sexta-feira
- Day of Week
-
-
-
- Quinta-feira
- Day of Week
-
-
-
- Quarta-feira
- Day of Week
-
-
-
- Terça-feira
- Day of Week
-
-
-
- Segunda-feira
- Day of Week
-
-
-
- Domingo
- Day of Week
-
-
-
- amanhã
- Next day
-
-
-
- ontem
- Previous day
-
-
-
- hoje
- Current day
-
-
- Title of Tab for options to filter library content
-
- Filtrar
-
-
- Title of Tab for options to sort library content
-
- Ordenar
-
-
- Title of Tab for switching "views" when looking at a library
-
- Visualizar
-
-
-
- Selecionar um servidor Jellyfin da rede local
- Instructions on initial app launch when the user is asked to pick a server from a list
-
-
-
- Colocar o nome do servidor ou endereço ip
- Title of KeyboardDialog when manually entering a server URL
-
-
-
- O conteúdo requisitado não existe no servidor
- Content of message box when the requested content is not found on the server
-
-
-
- Não encontrado
- Title of message box when the requested content is not found on the server
-
-
-
- Conectando ao servidor
- Message to display to user while client is attempting to connect to the server
-
-
-
- Guia de TV
- Menu option for showing Live TV Guide / Schedule
-
-
-
- Canais
- Menu option for showing Live TV Channel List
-
-
-
- Repetir
- If TV Shows has previously been broadcasted
-
-
-
- Ao Vivo
- If TV Show is being broadcast live (not pre-recorded)
-
-
-
- Termina às
- (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
-
-
-
- Terminou às
- (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
-
-
-
- Começará
- (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
-
-
-
- Começa às
- (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
-
-
-
- Começou
- (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
-
-
-
- ...ou entre na URL do servidor manualmente:
- Instructions on initial app launch when the user is asked to manually enter a server URL
-
-
-
- Tempo de Execução
-
-
-
- Data de Lançamento
-
-
-
- Número de Execução
-
-
-
- Avaliação Parental
-
-
-
- Data da Execução
-
-
-
- Data de Adição
-
-
-
- Avaliação da Crítica
-
-
-
- Classificação IMDb
-
-
- Name or Title field of media item
-
- Nome
-
-
- Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
-
- Este %1 não contém itens
-
-
-
- Incapaz de carregar os Dados do Canal do servidor
-
-
-
- Erro ao carregar Dados do Canal
-
-
-
- Carregando Dados do Canal
-
-
-
- Foi encontrado um erro ao reproduzir este item.
- Dialog detail when error occurs during playback
-
-
-
- Ocorreu um erro ao recuperar os dados para este item do servidor.
- Dialog detail when unable to load Content from Server
-
-
-
- Erro Durante a Reprodução
- Dialog title when error occurs during playback
-
-
-
- Erro ao Recuperar Conteúdo
- Dialog title when unable to load Content from Server
-
-
-
- Sair
-
-
-
- Trocar servidor
-
-
-
- Sair
-
-
-
- Selecionar um servidor Jellyfin da rede local
- Instructions on initial app launch when the user is asked to pick a server from a list
-
-
-
- Colocar o nome do servidor ou endereço ip
- Title of KeyboardDialog when manually entering a server URL
-
-
-
- O conteúdo requisitado não existe no servidor
- Content of message box when the requested content is not found on the server
-
-
-
- Não encontrado
- Title of message box when the requested content is not found on the server
-
-
-
- Conectando ao servidor
- Message to display to user while client is attempting to connect to the server
-
-
-
- Guia de TV
- Menu option for showing Live TV Guide / Schedule
-
-
-
- Canais
- Menu option for showing Live TV Channel List
-
-
-
- Repetir
- If TV Shows has previously been broadcasted
-
-
-
- Ao Vivo
- If TV Show is being broadcast live (not pre-recorded)
-
-
-
- Termina às
- (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
-
-
-
- Terminou às
- (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
-
-
-
- Começará
- (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
-
-
-
- Começa às
- (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
-
-
-
- Começou
- (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
-
-
-
- Começou às
- (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
-
-
-
- Sábado
- Day of Week
-
-
-
- Sexta-feira
- Day of Week
-
-
-
- Quinta-feira
- Day of Week
-
-
-
- Quarta-feira
- Day of Week
-
-
-
- Terça-feira
- Day of Week
-
-
-
- Segunda-feira
- Day of Week
-
-
-
- Domingo
- Day of Week
-
-
-
- amanhã
- Next day
-
-
-
- ontem
- Previous day
-
-
-
- hoje
- Current day
-
-
- Title of Tab for options to filter library content
-
- Filtrar
-
-
- Title of Tab for options to sort library content
-
- Ordenar
-
-
- Title of Tab for switching "views" when looking at a library
-
- Visualizar
-
-
-
- Tempo de Execução
-
-
-
- Data de Lançamento
-
-
-
- Número de Execução
-
-
-
- Avaliação Parental
-
-
-
- Data da Execução
-
-
-
- Data de Adição
-
-
-
- Avaliação da Crítica
-
-
-
- Classificação IMDb
-
-
- Name or Title field of media item
-
- Nome
-
-
- Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
-
- Este %1 não contém itens
-
-
-
- Incapaz de carregar os Dados do Canal do servidor
-
-
-
- Erro ao carregar Dados do Canal
-
-
-
- Carregando Dados do Canal
-
-
-
- Foi encontrado um erro ao reproduzir este item.
- Dialog detail when error occurs during playback
-
-
-
- Ocorreu um erro ao recuperar os dados para este item do servidor.
- Dialog detail when unable to load Content from Server
-
-
-
- Erro Durante a Reprodução
- Dialog title when error occurs during playback
-
-
-
- Erro ao Recuperar Conteúdo
- Dialog title when unable to load Content from Server
-
-
-
- Mudar Servidor
-
-
-
- Tempo de Execução
-
-
-
- Data de Lançamento
-
-
-
- Número de Execução
-
-
-
- Avaliação Parental
-
-
-
- Data da Execução
-
-
-
- Data de Adição
-
-
-
- Avaliação da Crítica
-
-
-
- Mudar Servidor
-
-
-
- Selecionar um servidor Jellyfin da rede local
- Instructions on initial app launch when the user is asked to pick a server from a list
-
-
-
- Colocar o nome do servidor ou endereço ip
- Title of KeyboardDialog when manually entering a server URL
-
-
-
- O conteúdo requisitado não existe no servidor
- Content of message box when the requested content is not found on the server
-
-
-
- Não encontrado
- Title of message box when the requested content is not found on the server
-
-
-
- Conectando ao servidor
- Message to display to user while client is attempting to connect to the server
-
-
-
- Guia de TV
- Menu option for showing Live TV Guide / Schedule
-
-
-
- Canais
- Menu option for showing Live TV Channel List
-
-
-
- Repetir
- If TV Shows has previously been broadcasted
-
-
-
- Ao Vivo
- If TV Show is being broadcast live (not pre-recorded)
-
-
-
- Termina às
- (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
-
-
-
- Terminou às
- (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
-
-
-
- Começará
- (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
-
-
-
- Começa às
- (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
-
-
-
- Começou
- (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
-
-
-
- Começou às
- (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
-
-
-
- Sábado
- Day of Week
-
-
-
- Sexta-feira
- Day of Week
-
-
-
- Quinta-feira
- Day of Week
-
-
-
- Quarta-feira
- Day of Week
-
-
-
- Terça-feira
- Day of Week
-
-
-
- Segunda-feira
- Day of Week
-
-
-
- Domingo
- Day of Week
-
-
-
- amanhã
- Next day
-
-
-
- ontem
- Previous day
-
-
-
- hoje
- Current day
-
-
- Title of Tab for options to filter library content
-
- Filtrar
-
-
- Title of Tab for options to sort library content
-
- Ordenar
-
-
- Title of Tab for switching "views" when looking at a library
-
- Visualizar
-
-
-
- Classificação IMDb
-
-
- Name or Title field of media item
-
- Nome
-
-
- Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
-
- Este %1 não contém itens
-
-
-
- Incapaz de carregar os Dados do Canal do servidor
-
-
-
- Erro ao carregar Dados do Canal
-
-
-
- Carregando Dados do Canal
-
-
-
- Foi encontrado um erro ao reproduzir este item.
- Dialog detail when error occurs during playback
-
-
-
- Ocorreu um erro ao recuperar os dados para este item do servidor.
- Dialog detail when unable to load Content from Server
-
-
-
- Erro Durante a Reprodução
- Dialog title when error occurs during playback
-
-
-
- Erro ao Recuperar Conteúdo
- Dialog title when unable to load Content from Server
-
-
-
- Sair
-
-
-
- Avaliação da crítica
-
-
-
- Data de Adição
-
-
-
- Avaliação da crítica
-
-
-
- Classificação IMDb
-
-
-
- Incapaz de carregar os Dados do Canal do servidor
-
-
-
- Erro ao carregar Dados do Canal
-
-
-
- Carregando Dados do Canal
-
-
-
- Foi encontrado um erro ao reproduzir este item.
- Dialog detail when error occurs during playback
-
-
-
- Mudar servidor
-
-
-
- Sair
-
-
-
- Mudar Servidor
-
-
-
- Remover salvo
-
-
-
- Salvar credenciais?
-
-
-
- Sair
-
-
-
- Mudar servidor
-
-
-
- Ocorreu um erro ao recuperar os dados para este item do servidor.
- Dialog detail when unable to load Content from Server
-
-
-
- Erro Durante a Reprodução
- Dialog title when error occurs during playback
-
-
-
- Erro ao Recuperar Conteúdo
- Dialog title when unable to load Content from Server
-
-
-
- Ligado agora
-
-
-
- Remover salvo
-
-
-
- Salvar credenciais?
-
-
-
- Sair
-
-
-
- Mudar servidor
-
-
-
- Repetir
- If TV Shows has previously been broadcasted
-
-
-
- Ao Vivo
- If TV Show is being broadcast live (not pre-recorded)
-
-
-
- Termina às
- (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
-
-
-
- Terminou às
- (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
-
-
-
- Começará
- (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
-
-
-
- Começa às
- (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
-
-
-
- Começou
- (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
-
-
-
- Começou às
- (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
-
-
-
- Sábado
- Day of Week
-
-
-
- Sexta-feira
- Day of Week
-
-
-
- Quinta-feira
- Day of Week
-
-
-
- Quarta-feira
- Day of Week
-
-
-
- Terça-feira
- Day of Week
-
-
-
- Segunda-feira
- Day of Week
-
-
-
- Domingo
- Day of Week
-
-
-
- amanhã
- Next day
-
-
-
- ontem
- Previous day
-
-
-
- hoje
- Current day
-
-
-
- Shows de TV
-
-
-
- Filmes
-
+
+
+
+ Incapaz de carregar os dados do canal do servidor
+
+
+
+ Erro ao carregar dados do canal
+
+
+
+ Carregando dados do canal
+
+
+
+ Foi encontrado um erro ao reproduzir este item.
+ Dialog detail when error occurs during playback
+
+
+
+ Ocorreu um erro ao recuperar os dados para este item do servidor.
+ Dialog detail when unable to load Content from Server
+
+
+
+ Erro durante a reprodução
+ Dialog title when error occurs during playback
+
+
+
+ Erro ao recuperar conteúdo
+ Dialog title when unable to load Content from Server
+
+
+
+ Sair
+
+
+
+ Trocar Servidor
+
+
+
+ O conteúdo requisitado não existe no servidor
+ Content of message box when the requested content is not found on the server
+
+
+
+ Não encontrado
+ Title of message box when the requested content is not found on the server
+
+
+
+ Conectando ao servidor
+ Message to display to user while client is attempting to connect to the server
+
+
+
+ Guia de TV
+ Menu option for showing Live TV Guide / Schedule
+
+
+
+ Canais
+ Menu option for showing Live TV Channel List
+
+
+
+ Repetir
+ If TV Shows has previously been broadcasted
+
+
+
+ Ao Vivo
+ If TV Show is being broadcast live (not pre-recorded)
+
+
+
+ Termina às
+ (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
+
+
+
+ Terminou às
+ (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
+
+
+
+ Começa
+ (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
+
+
+
+ Começa às
+ (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
+
+
+
+ Começou
+ (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
+
+
+
+ Começou às
+ (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
+
+
+
+ Sábado
+ Day of Week
+
+
+
+ Sexta-feira
+ Day of Week
+
+
+
+ Quinta-feira
+ Day of Week
+
+
+
+ Quarta-feira
+ Day of Week
+
+
+
+ Terça-feira
+ Day of Week
+
+
+
+ Segunda-feira
+ Day of Week
+
+
+
+ Domingo
+ Day of Week
+
+
+
+ amanhã
+ Next day
+
+
+
+ ontem
+ Previous day
+
+
+
+ hoje
+ Current day
+
+
+ Title of Tab for options to filter library content
+
+ Filtro
+
+
+ Title of Tab for options to sort library content
+
+ Ordenar
+
+
+ Title of Tab for switching "views" when looking at a library
+
+ Visualização
+
+
+
+ Tempo de Execução
+
+
+
+ Data de Lançamento
+
+
+
+ Número de Execução
+
+
+
+ Avaliação Parental
+
+
+
+ Data da Execução
+
+
+
+ Data de Adição
+
+
+
+ Avaliação da Crítica
+
+
+
+ Classificação IMDb
+
+
+ Name or Title field of media item
+
+ Nome
+
+
+ Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
+
+ Este %1 não contém itens
+
+
+
+ Incapaz de carregar os Dados do Canal do servidor
+
+
+
+ Erro ao carregar Dados do Canal
+
+
+
+ Carregando Dados do Canal
+
+
+
+ Foi encontrado um erro ao reproduzir este item.
+ Dialog detail when error occurs during playback
+
+
+
+ Ocorreu um erro ao recuperar os dados para este item do servidor.
+ Dialog detail when unable to load Content from Server
+
+
+
+ Erro Durante a Reprodução
+ Dialog title when error occurs during playback
+
+
+
+ Erro ao Recuperar Conteúdo
+ Dialog title when unable to load Content from Server
+
+
+
+ Sair
+
+
+
+ Trocar Servidor
+
+
+
+ Começou às
+ (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
+
+
+
+ Sábado
+ Day of Week
+
+
+
+ Sexta-feira
+ Day of Week
+
+
+
+ Quinta-feira
+ Day of Week
+
+
+
+ Quarta-feira
+ Day of Week
+
+
+
+ Terça-feira
+ Day of Week
+
+
+
+ Segunda-feira
+ Day of Week
+
+
+
+ Domingo
+ Day of Week
+
+
+
+ amanhã
+ Next day
+
+
+
+ ontem
+ Previous day
+
+
+
+ hoje
+ Current day
+
+
+ Title of Tab for options to filter library content
+
+ Filtrar
+
+
+ Title of Tab for options to sort library content
+
+ Ordenar
+
+
+ Title of Tab for switching "views" when looking at a library
+
+ Visualizar
+
+
+
+ Selecionar um servidor Jellyfin da rede local
+ Instructions on initial app launch when the user is asked to pick a server from a list
+
+
+
+ Colocar o nome do servidor ou endereço ip
+ Title of KeyboardDialog when manually entering a server URL
+
+
+
+ O conteúdo requisitado não existe no servidor
+ Content of message box when the requested content is not found on the server
+
+
+
+ Não encontrado
+ Title of message box when the requested content is not found on the server
+
+
+
+ Conectando ao servidor
+ Message to display to user while client is attempting to connect to the server
+
+
+
+ Guia de TV
+ Menu option for showing Live TV Guide / Schedule
+
+
+
+ Canais
+ Menu option for showing Live TV Channel List
+
+
+
+ Repetir
+ If TV Shows has previously been broadcasted
+
+
+
+ Ao Vivo
+ If TV Show is being broadcast live (not pre-recorded)
+
+
+
+ Termina às
+ (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
+
+
+
+ Terminou às
+ (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
+
+
+
+ Começará
+ (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
+
+
+
+ Começa às
+ (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
+
+
+
+ Começou
+ (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
+
+
+
+ ...ou entre na URL do servidor manualmente:
+ Instructions on initial app launch when the user is asked to manually enter a server URL
+
+
+
+ Tempo de Execução
+
+
+
+ Data de Lançamento
+
+
+
+ Número de Execução
+
+
+
+ Avaliação Parental
+
+
+
+ Data da Execução
+
+
+
+ Data de Adição
+
+
+
+ Avaliação da Crítica
+
+
+
+ Classificação IMDb
+
+
+ Name or Title field of media item
+
+ Nome
+
+
+ Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
+
+ Este %1 não contém itens
+
+
+
+ Incapaz de carregar os Dados do Canal do servidor
+
+
+
+ Erro ao carregar Dados do Canal
+
+
+
+ Carregando Dados do Canal
+
+
+
+ Foi encontrado um erro ao reproduzir este item.
+ Dialog detail when error occurs during playback
+
+
+
+ Ocorreu um erro ao recuperar os dados para este item do servidor.
+ Dialog detail when unable to load Content from Server
+
+
+
+ Erro Durante a Reprodução
+ Dialog title when error occurs during playback
+
+
+
+ Erro ao Recuperar Conteúdo
+ Dialog title when unable to load Content from Server
+
+
+
+ Sair
+
+
+
+ Trocar servidor
+
+
+
+ Sair
+
+
+
+ Selecionar um servidor Jellyfin da rede local
+ Instructions on initial app launch when the user is asked to pick a server from a list
+
+
+
+ Colocar o nome do servidor ou endereço ip
+ Title of KeyboardDialog when manually entering a server URL
+
+
+
+ O conteúdo requisitado não existe no servidor
+ Content of message box when the requested content is not found on the server
+
+
+
+ Não encontrado
+ Title of message box when the requested content is not found on the server
+
+
+
+ Conectando ao servidor
+ Message to display to user while client is attempting to connect to the server
+
+
+
+ Guia de TV
+ Menu option for showing Live TV Guide / Schedule
+
+
+
+ Canais
+ Menu option for showing Live TV Channel List
+
+
+
+ Repetir
+ If TV Shows has previously been broadcasted
+
+
+
+ Ao Vivo
+ If TV Show is being broadcast live (not pre-recorded)
+
+
+
+ Termina às
+ (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
+
+
+
+ Terminou às
+ (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
+
+
+
+ Começará
+ (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
+
+
+
+ Começa às
+ (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
+
+
+
+ Começou
+ (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
+
+
+
+ Começou às
+ (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
+
+
+
+ Sábado
+ Day of Week
+
+
+
+ Sexta-feira
+ Day of Week
+
+
+
+ Quinta-feira
+ Day of Week
+
+
+
+ Quarta-feira
+ Day of Week
+
+
+
+ Terça-feira
+ Day of Week
+
+
+
+ Segunda-feira
+ Day of Week
+
+
+
+ Domingo
+ Day of Week
+
+
+
+ amanhã
+ Next day
+
+
+
+ ontem
+ Previous day
+
+
+
+ hoje
+ Current day
+
+
+ Title of Tab for options to filter library content
+
+ Filtrar
+
+
+ Title of Tab for options to sort library content
+
+ Ordenar
+
+
+ Title of Tab for switching "views" when looking at a library
+
+ Visualizar
+
+
+
+ Tempo de Execução
+
+
+
+ Data de Lançamento
+
+
+
+ Número de Execução
+
+
+
+ Avaliação Parental
+
+
+
+ Data da Execução
+
+
+
+ Data de Adição
+
+
+
+ Avaliação da Crítica
+
+
+
+ Classificação IMDb
+
+
+ Name or Title field of media item
+
+ Nome
+
+
+ Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
+
+ Este %1 não contém itens
+
+
+
+ Incapaz de carregar os Dados do Canal do servidor
+
+
+
+ Erro ao carregar Dados do Canal
+
+
+
+ Carregando Dados do Canal
+
+
+
+ Foi encontrado um erro ao reproduzir este item.
+ Dialog detail when error occurs during playback
+
+
+
+ Ocorreu um erro ao recuperar os dados para este item do servidor.
+ Dialog detail when unable to load Content from Server
+
+
+
+ Erro Durante a Reprodução
+ Dialog title when error occurs during playback
+
+
+
+ Erro ao Recuperar Conteúdo
+ Dialog title when unable to load Content from Server
+
+
+
+ Mudar Servidor
+
+
+
+ Tempo de Execução
+
+
+
+ Data de Lançamento
+
+
+
+ Número de Execução
+
+
+
+ Avaliação Parental
+
+
+
+ Data da Execução
+
+
+
+ Data de Adição
+
+
+
+ Avaliação da Crítica
+
+
+
+ Mudar Servidor
+
+
+
+ Selecionar um servidor Jellyfin da rede local
+ Instructions on initial app launch when the user is asked to pick a server from a list
+
+
+
+ Colocar o nome do servidor ou endereço ip
+ Title of KeyboardDialog when manually entering a server URL
+
+
+
+ O conteúdo requisitado não existe no servidor
+ Content of message box when the requested content is not found on the server
+
+
+
+ Não encontrado
+ Title of message box when the requested content is not found on the server
+
+
+
+ Conectando ao servidor
+ Message to display to user while client is attempting to connect to the server
+
+
+
+ Guia de TV
+ Menu option for showing Live TV Guide / Schedule
+
+
+
+ Canais
+ Menu option for showing Live TV Channel List
+
+
+
+ Repetir
+ If TV Shows has previously been broadcasted
+
+
+
+ Ao Vivo
+ If TV Show is being broadcast live (not pre-recorded)
+
+
+
+ Termina às
+ (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
+
+
+
+ Terminou às
+ (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
+
+
+
+ Começará
+ (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
+
+
+
+ Começa às
+ (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
+
+
+
+ Começou
+ (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
+
+
+
+ Começou às
+ (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
+
+
+
+ Sábado
+ Day of Week
+
+
+
+ Sexta-feira
+ Day of Week
+
+
+
+ Quinta-feira
+ Day of Week
+
+
+
+ Quarta-feira
+ Day of Week
+
+
+
+ Terça-feira
+ Day of Week
+
+
+
+ Segunda-feira
+ Day of Week
+
+
+
+ Domingo
+ Day of Week
+
+
+
+ amanhã
+ Next day
+
+
+
+ ontem
+ Previous day
+
+
+
+ hoje
+ Current day
+
+
+ Title of Tab for options to filter library content
+
+ Filtrar
+
+
+ Title of Tab for options to sort library content
+
+ Ordenar
+
+
+ Title of Tab for switching "views" when looking at a library
+
+ Visualizar
+
+
+
+ Classificação IMDb
+
+
+ Name or Title field of media item
+
+ Nome
+
+
+ Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
+
+ Este %1 não contém itens
+
+
+
+ Incapaz de carregar os Dados do Canal do servidor
+
+
+
+ Erro ao carregar Dados do Canal
+
+
+
+ Carregando Dados do Canal
+
+
+
+ Foi encontrado um erro ao reproduzir este item.
+ Dialog detail when error occurs during playback
+
+
+
+ Ocorreu um erro ao recuperar os dados para este item do servidor.
+ Dialog detail when unable to load Content from Server
+
+
+
+ Erro Durante a Reprodução
+ Dialog title when error occurs during playback
+
+
+
+ Erro ao Recuperar Conteúdo
+ Dialog title when unable to load Content from Server
+
+
+
+ Sair
+
+
+
+ Avaliação da crítica
+
+
+
+ Data de Adição
+
+
+
+ Avaliação da crítica
+
+
+
+ Classificação IMDb
+
+
+
+ Incapaz de carregar os Dados do Canal do servidor
+
+
+
+ Erro ao carregar Dados do Canal
+
+
+
+ Carregando Dados do Canal
+
+
+
+ Foi encontrado um erro ao reproduzir este item.
+ Dialog detail when error occurs during playback
+
+
+
+ Mudar servidor
+
+
+
+ Sair
+
+
+
+ Mudar Servidor
+
+
+
+ Remover salvo
+
+
+
+ Salvar credenciais?
+
+
+
+ Sair
+
+
+
+ Mudar servidor
+
+
+
+ Ocorreu um erro ao recuperar os dados para este item do servidor.
+ Dialog detail when unable to load Content from Server
+
+
+
+ Erro Durante a Reprodução
+ Dialog title when error occurs during playback
+
+
+
+ Erro ao Recuperar Conteúdo
+ Dialog title when unable to load Content from Server
+
+
+
+ Ligado agora
+
+
+
+ Remover salvo
+
+
+
+ Salvar credenciais?
+
+
+
+ Sair
+
+
+
+ Mudar servidor
+
+
+
+ Repetir
+ If TV Shows has previously been broadcasted
+
+
+
+ Ao Vivo
+ If TV Show is being broadcast live (not pre-recorded)
+
+
+
+ Termina às
+ (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
+
+
+
+ Terminou às
+ (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
+
+
+
+ Começará
+ (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
+
+
+
+ Começa às
+ (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
+
+
+
+ Começou
+ (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
+
+
+
+ Começou às
+ (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
+
+
+
+ Sábado
+ Day of Week
+
+
+
+ Sexta-feira
+ Day of Week
+
+
+
+ Quinta-feira
+ Day of Week
+
+
+
+ Quarta-feira
+ Day of Week
+
+
+
+ Terça-feira
+ Day of Week
+
+
+
+ Segunda-feira
+ Day of Week
+
+
+
+ Domingo
+ Day of Week
+
+
+
+ amanhã
+ Next day
+
+
+
+ ontem
+ Previous day
+
+
+
+ hoje
+ Current day
+
+
+
+ Shows de TV
+
+
+
+ Filmes
+
+
+
+ Pressione 'OK' para Fechar
+
+
+
+ Recursos Especiais
- Pressione 'OK' para Fechar
-
-
-
- Recursos Especiais
-
-
- Clique em 'OK' para fechar
-
-
-
-
- Mais Como Este
-
-
-
- Elenco e equipe
-
-
-
- Idade
-
-
-
- Morte
-
-
-
- Nascimento
-
-
- Title of Tab for options to filter library content
-
- Filtrar
-
-
- Title of Tab for options to sort library content
-
- Ordenar
-
-
- Title of Tab for switching "views" when looking at a library
-
- Visualizar
-
-
-
- Tempo de Execução
-
-
-
- Data de Lançamento
-
-
-
- Número de Execução
-
-
-
- Avaliação Parental
-
-
-
- Data da Execução
-
-
-
- Data de Adição
-
-
-
- Avaliação da crítica
-
-
-
- Classificação IMDb
-
-
- Name or Title field of media item
-
- Nome
-
-
- Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
-
- Este %1 não contém itens
-
-
-
- Incapaz de carregar os Dados do Canal do servidor
-
-
-
- Erro ao carregar Dados do Canal
-
-
-
- Carregando Dados do Canal
-
-
-
- Ocorreu um erro ao reproduzir este item.
- Dialog detail when error occurs during playback
-
-
-
- Reprodução
- Title for Playback section in user setting screen.
-
-
-
- Não foi possível carregar do servidor os dados do canal
-
-
-
- Cancelar Gravação da Série
-
-
-
- Morte
-
-
-
- Nascimento
-
-
-
- Houve um erro ao conectar usando o Quick Connect.
-
-
-
- (Tela vai fechar automaticamente)
-
-
-
- Aqui está o seu código do Quick Connect:
-
-
-
- Quick Connect
-
-
-
- %1 de %2
- Item position and count. %1 = current item. %2 = total number of items
-
-
-
- Ir para o episódio
- Continue Watching Popup Menu - Navigate to the Episode Detail Page
-
-
-
- Ir para a temporada
- Continue Watching Popup Menu - Navigate to the Season Page
-
-
-
- Ir para a série
- Continue Watching Popup Menu - Navigate to the Series Detail Page
-
-
-
- Marcar como Assistido
- Button Text - When pressed, marks item as Warched
-
-
-
- Salvar Favorito
- Button Text - When pressed, sets item as Favorite
-
-
-
- Exibir quantidade de itens na biblioteca, e o número do item selecionado.
- Description for option in Setting Screen
-
-
-
- Quantidade de Itens
- UI -> Media Grid -> Item Count in user setting screen.
-
-
-
- Sempre exibir os títulos abaixo das imagens dos posters. (Se desabilitado, o título apenas será exibido no item destacado)
- Description for option in Setting Screen
-
-
-
- Títulos dos Itens
- UI -> Media Grid -> Item Title in user setting screen.
-
-
-
- Opções de Grade de Mídia
-
-
-
- Grade de Mídia
- UI -> Media Grid section in user setting screen.
-
-
-
- Interface de Usuário
- Title for User Interface section in user setting screen.
-
-
-
- Desabilitado
-
-
-
- Habilitado
-
-
-
- Habilita a execução direta de conteúdo MPEG-2 (ex.: TV ao vivo). Essa opção não executará a transcodificação de conteúdo MPEG-2, mas usa uma quantidade maior de banda
- Settings Menu - Description for option
-
-
-
- Suporte ao MPEG-2
- Settings Menu - Title for option
-
-
-
- Versão
-
-
-
- Um erro foi encontrado ao exibir este item. O servidor não entregou os dados de transcodificação necessários.
- Content of message box when trying to play an item which requires transcoding, and the server did not provide transcode url
-
-
-
- Erro ao obter informação do playback
- Dialog Title: Received error from server when trying to get information about the selected item for playback
-
-
-
- ...ou digite a URL do servidor manualmente:
- Instructions on initial app launch when the user is asked to manually enter a server URL
-
-
-
- Escolha um servidor Jellyfin na rede local
- Instructions on initial app launch when the user is asked to pick a server from a list
-
-
-
- Digite o nome do servidor ou endereço IP
- Title of KeyboardDialog when manually entering a server URL
-
-
-
- O conteúdo solicitado não existe no servidor
- Content of message box when the requested content is not found on the server
-
-
-
- Desconhecido
- Title for a cast member for which we have no information for
-
-
-
- Não encontrado
- Title of message box when the requested content is not found on the server
-
-
-
- Conectando ao Servidor
- Message to display to user while client is attempting to connect to the server
-
-
-
- Fechar
-
-
-
- Cancelar Gravação
-
-
-
- Gravar Série
-
-
-
- Gravar
-
-
-
- Ver Canal
-
-
-
- Guia da TV
- Menu option for showing Live TV Guide / Schedule
-
-
-
- Canais
- Menu option for showing Live TV Channel List
-
-
-
- Repetir
- If TV Shows has previously been broadcasted
-
-
-
- Ao vivo
- If TV Show is being broadcast live (not pre-recorded)
-
-
-
- Termina as
- (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
-
-
-
- Terminou as
- (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
-
-
-
- Começará
- (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
-
-
-
- Começa às
- (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
-
-
-
- Começou
- (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
-
-
-
- Começou às
- (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
-
-
-
- Sábado
- Day of Week
-
-
-
- Sexta-feira
- Day of Week
-
-
-
- Quinta-feira
- Day of Week
-
-
-
- Quarta-feira
- Day of Week
-
-
-
- Terça-feira
- Day of Week
-
-
-
- Segunda-feira
- Day of Week
-
-
-
- Domingo
- Day of Week
-
-
-
- amanhã
- Next day
-
-
-
- ontem
- Previous day
-
-
-
- hoje
- Current day
-
-
-
- Séries
-
-
-
- Filmes
-
-
-
- Características especiais
-
-
- Press 'OK' to Close
-
-
-
-
- Mais Disso
-
-
-
- Elenco & Equipe
-
-
-
- Idade
-
-
- Title of Tab for options to filter library content
-
- Filtro
-
-
- Title of Tab for options to sort library content
-
- Ordenar
-
-
- Title of Tab for switching "views" when looking at a library
-
- Visualizar
-
-
-
- Tempo de Execução
-
-
-
- Data de Lançamento
-
-
-
- Número de Reproduções
-
-
-
- Classificação Etária
-
-
-
- Data de Reprodução
-
-
-
- Data de Adição
-
-
-
- Avaliação da Crítica
-
-
-
- Avaliação IMDb
-
-
- Name or Title field of media item
-
- Nome
-
-
- Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
-
- Este %1 não possui itens
-
-
-
- Erro ao carregar os dados do canal
-
-
-
- Carregando dados do canal
-
-
-
- Um erro foi encontrado enquanto executávamos este item.
- Dialog detail when error occurs during playback
-
-
-
- Houve um erro ao tentar obter os dados do servidor para este item.
- Dialog detail when unable to load Content from Server
-
-
-
- Erro durante playback
- Dialog title when error occurs during playback
-
-
-
- Erro ao obter conteúdo
- Dialog title when unable to load Content from Server
-
-
-
- Em Exibição
-
-
-
- Deletar Salvos
-
-
-
- Salvar dados de login?
-
-
-
- Sair
-
-
-
- Alterar Servidor
-
-
-
- Houve um erro ao coletar dados do servidor para este item
- Dialog detail when unable to load Content from Server
-
-
-
- Erro na reprodução
- Dialog title when error occurs during playback
-
-
-
- Erro ao buscar conteúdo
- Dialog title when unable to load Content from Server
-
-
-
- Deletar Salvo(a)
-
-
-
- Salvar Credenciais?
-
-
-
- Sair
-
-
-
- Alterar Servidor
-
-
-
- Data de Lançamento
-
-
-
- Número de Reproduções
-
-
-
- Classificação Etária
-
-
-
- Data de Reprodução
-
-
-
- Data de Adição
-
-
-
- Avaliação da Crítica
-
-
-
- Avaliação IMDb
-
-
- Name or Title field of media item
-
- Nome
-
-
- Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
-
- Este %1 não possui itens
-
-
-
- Não foi possível carregar do servidor os dados do canal
-
-
-
- Erro ao carregar os dados do canal
-
-
-
- Carregando dados do canal
-
-
-
- Um erro foi encontrado ao reproduzir este item.
- Dialog detail when error occurs during playback
-
-
-
- Houve um erro ao coletar dados do servidor para este item
- Dialog detail when unable to load Content from Server
-
-
-
- Erro na reprodução
- Dialog title when error occurs during playback
-
-
-
- Erro ao buscar conteúdo
- Dialog title when unable to load Content from Server
-
-
-
- Em Exibição
-
-
-
- Deletar Salvo(a)
-
-
-
- Salvar Credenciais?
-
-
-
- Sair
-
-
-
- Trocar Servidor
-
-
-
- Houve um erro ao coletar dados do servidor para este item.
- Dialog detail when unable to load Content from Server
-
-
-
- Erro durante a reprodução
- Dialog title when error occurs during playback
-
-
-
- Erro ao recuperar conteúdo
- Dialog title when unable to load Content from Server
-
-
-
- Ligado agora
-
-
-
- Excluir salvo
-
-
-
- Salvar credenciais?
-
-
-
- Sair
-
-
-
- Alterar servidor
-
-
-
- Mudar Servidor
-
-
-
- Sair
-
-
-
- Salvar Credenciais?
-
-
-
- Deletar Salvos
-
-
-
- Passando Agora
-
-
-
- Erro ao Carregar Conteúdo
- Dialog title when unable to load Content from Server
-
-
-
- Erro Durante Reprodução
- Dialog title when error occurs during playback
-
-
-
- Houve um erro ao coletar dados do servidor para este item.
- Dialog detail when unable to load Content from Server
-
-
-
- Carregando dados do canal
-
-
- Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
-
- Este %1 não possui itens
-
-
- Name or Title field of media item
-
- Nome
-
-
-
- Data de Reprodução
-
-
-
- Avaliação IMDb
-
-
-
- Data de Lançamento
-
-
-
- Um erro foi encontrado enquanto reproduzindo este item.
- Dialog detail when error occurs during playback
-
-
-
- Erro ao carregar os dados do canal
-
-
-
- Não foi possível carregar do servidor os dados do canal
-
-
-
- Avaliação de críticos
-
-
-
- Data de Adição
-
-
-
- Número de Reproduções
-
-
-
- Classificação Etária
-
-
-
- Sair
-
-
-
- Salvar Credenciais?
-
-
-
- Deletar Salvos
-
-
-
- Erro Durante a Reprodução
- Dialog title when error occurs during playback
-
-
-
- Mudar Servidor
-
-
-
- Erro ao Carregar Conteúdo
- Dialog title when unable to load Content from Server
-
-
-
- Carregando Dados do Canal
-
-
-
- Foi encontrado um erro na reprodução deste item.
- Dialog detail when error occurs during playback
-
-
-
- Em Exibição
-
-
-
- Houve um erro ao recuperar os dados deste item do servidor.
- Dialog detail when unable to load Content from Server
-
-
-
- Erro ao carregar os Dados do Canal
-
-
-
\ No newline at end of file
+ Clique em 'OK' para fechar
+
+
+
+
+ Mais Como Este
+
+
+
+ Elenco e equipe
+
+
+
+ Idade
+
+
+
+ Morte
+
+
+
+ Nascimento
+
+
+ Title of Tab for options to filter library content
+
+ Filtrar
+
+
+ Title of Tab for options to sort library content
+
+ Ordenar
+
+
+ Title of Tab for switching "views" when looking at a library
+
+ Visualizar
+
+
+
+ Tempo de Execução
+
+
+
+ Data de Lançamento
+
+
+
+ Número de Execução
+
+
+
+ Avaliação Parental
+
+
+
+ Data da Execução
+
+
+
+ Data de Adição
+
+
+
+ Avaliação da crítica
+
+
+
+ Classificação IMDb
+
+
+ Name or Title field of media item
+
+ Nome
+
+
+ Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
+
+ Este %1 não contém itens
+
+
+
+ Incapaz de carregar os Dados do Canal do servidor
+
+
+
+ Erro ao carregar Dados do Canal
+
+
+
+ Carregando Dados do Canal
+
+
+
+ Ocorreu um erro ao reproduzir este item.
+ Dialog detail when error occurs during playback
+
+
+
+ Reprodução
+ Title for Playback section in user setting screen.
+
+
+
+ Não foi possível carregar do servidor os dados do canal
+
+
+
+ Cancelar Gravação da Série
+
+
+
+ Morte
+
+
+
+ Nascimento
+
+
+
+ Houve um erro ao conectar usando o Quick Connect.
+
+
+
+ (Tela vai fechar automaticamente)
+
+
+
+ Aqui está o seu código do Quick Connect:
+
+
+
+ Quick Connect
+
+
+
+ %1 de %2
+ Item position and count. %1 = current item. %2 = total number of items
+
+
+
+ Ir para o episódio
+ Continue Watching Popup Menu - Navigate to the Episode Detail Page
+
+
+
+ Ir para a temporada
+ Continue Watching Popup Menu - Navigate to the Season Page
+
+
+
+ Ir para a série
+ Continue Watching Popup Menu - Navigate to the Series Detail Page
+
+
+
+ Marcar como Assistido
+ Button Text - When pressed, marks item as Warched
+
+
+
+ Salvar Favorito
+ Button Text - When pressed, sets item as Favorite
+
+
+
+ Exibir quantidade de itens na biblioteca, e o número do item selecionado.
+ Description for option in Setting Screen
+
+
+
+ Quantidade de Itens
+ UI -> Media Grid -> Item Count in user setting screen.
+
+
+
+ Sempre exibir os títulos abaixo das imagens dos posters. (Se desabilitado, o título apenas será exibido no item destacado)
+ Description for option in Setting Screen
+
+
+
+ Títulos dos Itens
+ UI -> Media Grid -> Item Title in user setting screen.
+
+
+
+ Opções de Grade de Mídia
+
+
+
+ Grade de Mídia
+ UI -> Media Grid section in user setting screen.
+
+
+
+ Interface de Usuário
+ Title for User Interface section in user setting screen.
+
+
+
+ Desabilitado
+
+
+
+ Habilitado
+
+
+
+ Habilita a execução direta de conteúdo MPEG-2 (ex.: TV ao vivo). Essa opção não executará a transcodificação de conteúdo MPEG-2, mas usa uma quantidade maior de banda
+ Settings Menu - Description for option
+
+
+
+ Suporte ao MPEG-2
+ Settings Menu - Title for option
+
+
+
+ Versão
+
+
+
+ Um erro foi encontrado ao exibir este item. O servidor não entregou os dados de transcodificação necessários.
+ Content of message box when trying to play an item which requires transcoding, and the server did not provide transcode url
+
+
+
+ Erro ao obter informação do playback
+ Dialog Title: Received error from server when trying to get information about the selected item for playback
+
+
+
+ ...ou digite a URL do servidor manualmente:
+ Instructions on initial app launch when the user is asked to manually enter a server URL
+
+
+
+ Escolha um servidor Jellyfin na rede local
+ Instructions on initial app launch when the user is asked to pick a server from a list
+
+
+
+ Digite o nome do servidor ou endereço IP
+ Title of KeyboardDialog when manually entering a server URL
+
+
+
+ O conteúdo solicitado não existe no servidor
+ Content of message box when the requested content is not found on the server
+
+
+
+ Desconhecido
+ Title for a cast member for which we have no information for
+
+
+
+ Não encontrado
+ Title of message box when the requested content is not found on the server
+
+
+
+ Conectando ao Servidor
+ Message to display to user while client is attempting to connect to the server
+
+
+
+ Fechar
+
+
+
+ Cancelar Gravação
+
+
+
+ Gravar Série
+
+
+
+ Gravar
+
+
+
+ Ver Canal
+
+
+
+ Guia da TV
+ Menu option for showing Live TV Guide / Schedule
+
+
+
+ Canais
+ Menu option for showing Live TV Channel List
+
+
+
+ Repetir
+ If TV Shows has previously been broadcasted
+
+
+
+ Ao vivo
+ If TV Show is being broadcast live (not pre-recorded)
+
+
+
+ Termina as
+ (Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00)
+
+
+
+ Terminou as
+ (Past Tense) For defining time when a program will ended (e.g. Ended at 08:00)
+
+
+
+ Começará
+ (Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00)
+
+
+
+ Começa às
+ (Future Tense) For defining time when a program will start today (e.g. Starts at 08:00)
+
+
+
+ Começou
+ (Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00)
+
+
+
+ Começou às
+ (Past Tense) For defining time when a program started today (e.g. Started at 08:00)
+
+
+
+ Sábado
+ Day of Week
+
+
+
+ Sexta-feira
+ Day of Week
+
+
+
+ Quinta-feira
+ Day of Week
+
+
+
+ Quarta-feira
+ Day of Week
+
+
+
+ Terça-feira
+ Day of Week
+
+
+
+ Segunda-feira
+ Day of Week
+
+
+
+ Domingo
+ Day of Week
+
+
+
+ amanhã
+ Next day
+
+
+
+ ontem
+ Previous day
+
+
+
+ hoje
+ Current day
+
+
+
+ Séries
+
+
+
+ Filmes
+
+
+
+ Características especiais
+
+
+ Press 'OK' to Close
+
+
+
+
+ Mais Disso
+
+
+
+ Elenco & Equipe
+
+
+
+ Idade
+
+
+ Title of Tab for options to filter library content
+
+ Filtro
+
+
+ Title of Tab for options to sort library content
+
+ Ordenar
+
+
+ Title of Tab for switching "views" when looking at a library
+
+ Visualizar
+
+
+
+ Tempo de Execução
+
+
+
+ Data de Lançamento
+
+
+
+ Número de Reproduções
+
+
+
+ Classificação Etária
+
+
+
+ Data de Reprodução
+
+
+
+ Data de Adição
+
+
+
+ Avaliação da Crítica
+
+
+
+ Avaliação IMDb
+
+
+ Name or Title field of media item
+
+ Nome
+
+
+ Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
+
+ Este %1 não possui itens
+
+
+
+ Erro ao carregar os dados do canal
+
+
+
+ Carregando dados do canal
+
+
+
+ Um erro foi encontrado enquanto executávamos este item.
+ Dialog detail when error occurs during playback
+
+
+
+ Houve um erro ao tentar obter os dados do servidor para este item.
+ Dialog detail when unable to load Content from Server
+
+
+
+ Erro durante playback
+ Dialog title when error occurs during playback
+
+
+
+ Erro ao obter conteúdo
+ Dialog title when unable to load Content from Server
+
+
+
+ Em Exibição
+
+
+
+ Deletar Salvos
+
+
+
+ Salvar dados de login?
+
+
+
+ Sair
+
+
+
+ Alterar Servidor
+
+
+
+ Houve um erro ao coletar dados do servidor para este item
+ Dialog detail when unable to load Content from Server
+
+
+
+ Erro na reprodução
+ Dialog title when error occurs during playback
+
+
+
+ Erro ao buscar conteúdo
+ Dialog title when unable to load Content from Server
+
+
+
+ Deletar Salvo(a)
+
+
+
+ Salvar Credenciais?
+
+
+
+ Sair
+
+
+
+ Alterar Servidor
+
+
+
+ Data de Lançamento
+
+
+
+ Número de Reproduções
+
+
+
+ Classificação Etária
+
+
+
+ Data de Reprodução
+
+
+
+ Data de Adição
+
+
+
+ Avaliação da Crítica
+
+
+
+ Avaliação IMDb
+
+
+ Name or Title field of media item
+
+ Nome
+
+
+ Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
+
+ Este %1 não possui itens
+
+
+
+ Não foi possível carregar do servidor os dados do canal
+
+
+
+ Erro ao carregar os dados do canal
+
+
+
+ Carregando dados do canal
+
+
+
+ Um erro foi encontrado ao reproduzir este item.
+ Dialog detail when error occurs during playback
+
+
+
+ Houve um erro ao coletar dados do servidor para este item
+ Dialog detail when unable to load Content from Server
+
+
+
+ Erro na reprodução
+ Dialog title when error occurs during playback
+
+
+
+ Erro ao buscar conteúdo
+ Dialog title when unable to load Content from Server
+
+
+
+ Em Exibição
+
+
+
+ Deletar Salvo(a)
+
+
+
+ Salvar Credenciais?
+
+
+
+ Sair
+
+
+
+ Trocar Servidor
+
+
+
+ Houve um erro ao coletar dados do servidor para este item.
+ Dialog detail when unable to load Content from Server
+
+
+
+ Erro durante a reprodução
+ Dialog title when error occurs during playback
+
+
+
+ Erro ao recuperar conteúdo
+ Dialog title when unable to load Content from Server
+
+
+
+ Ligado agora
+
+
+
+ Excluir salvo
+
+
+
+ Salvar credenciais?
+
+
+
+ Sair
+
+
+
+ Alterar servidor
+
+
+
+ Mudar Servidor
+
+
+
+ Sair
+
+
+
+ Salvar Credenciais?
+
+
+
+ Deletar Salvos
+
+
+
+ Passando Agora
+
+
+
+ Erro ao Carregar Conteúdo
+ Dialog title when unable to load Content from Server
+
+
+
+ Erro Durante Reprodução
+ Dialog title when error occurs during playback
+
+
+
+ Houve um erro ao coletar dados do servidor para este item.
+ Dialog detail when unable to load Content from Server
+
+
+
+ Carregando dados do canal
+
+
+ Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)
+
+ Este %1 não possui itens
+
+
+ Name or Title field of media item
+
+ Nome
+
+
+
+ Data de Reprodução
+
+
+
+ Avaliação IMDb
+
+
+
+ Data de Lançamento
+
+
+
+ Um erro foi encontrado enquanto reproduzindo este item.
+ Dialog detail when error occurs during playback
+
+
+
+ Erro ao carregar os dados do canal
+
+
+
+ Não foi possível carregar do servidor os dados do canal
+
+
+
+ Avaliação de críticos
+
+
+
+ Data de Adição
+
+
+
+ Número de Reproduções
+
+
+
+ Classificação Etária
+
+
+
+ Sair
+
+
+
+ Salvar Credenciais?
+
+
+
+ Deletar Salvos
+
+
+
+ Erro Durante a Reprodução
+ Dialog title when error occurs during playback
+
+
+
+ Mudar Servidor
+
+
+
+ Erro ao Carregar Conteúdo
+ Dialog title when unable to load Content from Server
+
+
+
+ Carregando Dados do Canal
+
+
+
+ Foi encontrado um erro na reprodução deste item.
+ Dialog detail when error occurs during playback
+
+
+
+ Em Exibição
+
+
+
+ Houve um erro ao recuperar os dados deste item do servidor.
+ Dialog detail when unable to load Content from Server
+
+
+
+ Erro ao carregar os Dados do Canal
+
+
+
+ Alterar Servidor
+
+
+
+ Sair
+
+
+
+ Salvar credenciais?
+
+
+
+ Excluir salvo
+
+
+
+ Ativo agora
+
+
+
+ Erro ao recuperar conteúdo
+ Dialog title when unable to load Content from Server
+
+
+
diff --git a/package-lock.json b/package-lock.json
index 903f6943..79a319d3 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,28 +1,34 @@
{
"name": "jellyfin-roku",
- "version": "1.6.4",
- "lockfileVersion": 2,
+ "version": "1.6.5",
+ "lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "jellyfin-roku",
- "version": "1.6.4",
+ "version": "1.6.5",
"hasInstallScript": true,
"license": "GPL-2.0",
"dependencies": {
- "api": "npm:jellyfin-api-bs-client@^1.0.5",
- "bgv": "npm:button-group-vert@^1.0.2",
- "brighterscript-formatter": "^1.6.8",
- "intKeyboard": "npm:integer-keyboard@^1.0.12",
- "sob": "npm:slide-out-button@^1.0.1"
+ "api": "npm:jellyfin-api-bs-client@1.0.6",
+ "bgv": "npm:button-group-vert@1.0.2",
+ "brighterscript-formatter": "1.6.26",
+ "intKeyboard": "npm:integer-keyboard@1.0.12",
+ "sob": "npm:slide-out-button@1.0.1"
},
"devDependencies": {
- "@rokucommunity/bslint": "0.8.2",
- "brighterscript": "0.64.0",
- "jshint": "^2.13.6",
- "markdownlint-cli2": "0.6.0",
- "ropm": "0.10.12",
- "spellchecker-cli": "6.1.1"
+ "@rokucommunity/bslint": "0.8.3",
+ "brighterscript": "0.64.2",
+ "bslib": "npm:@rokucommunity/bslib@0.1.1",
+ "jshint": "2.13.6",
+ "markdownlint-cli2": "0.7.0",
+ "rimraf": "5.0.0",
+ "roku-deploy": "3.10.1",
+ "roku-log-bsc-plugin": "0.8.1",
+ "rooibos-roku": "5.4.2",
+ "ropm": "0.10.13",
+ "spellchecker-cli": "6.1.1",
+ "undent": "0.1.0"
}
},
"node_modules/@nodelib/fs.scandir": {
@@ -57,15 +63,25 @@
"node": ">= 8"
}
},
+ "node_modules/@pkgjs/parseargs": {
+ "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"
+ }
+ },
"node_modules/@rokucommunity/bslib": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/@rokucommunity/bslib/-/bslib-0.1.1.tgz",
"integrity": "sha512-2ox6EUL+UTtccTbD4dbVjZK3QHa0PHCqpoKMF8lZz9ayzzEP3iVPF8KZR6hOi6bxsIcbGXVjqmtCVkpC4P9SrA=="
},
"node_modules/@rokucommunity/bslint": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/@rokucommunity/bslint/-/bslint-0.8.2.tgz",
- "integrity": "sha512-MbfnQ6x0nBmcOh8PxxEcue3wWeLPHQMNx8HHU4pq6p+1xb16XryEoHJiZTVyKBWXvjcLbP5oYyBAhXMEj5l8pw==",
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/@rokucommunity/bslint/-/bslint-0.8.3.tgz",
+ "integrity": "sha512-CgUemN0evVIQ1CriO2EXkcKlvtbSZn4iq5yKSzZIwjulHPeIJLfVaiX6mX1HE1tiWnJJHOQsc8OtBgBCFQCO2A==",
"dev": true,
"dependencies": {
"fs-extra": "^10.0.0",
@@ -80,72 +96,6 @@
"brighterscript": ">= 0.59.0 < 1"
}
},
- "node_modules/@rokucommunity/bslint/node_modules/cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "dev": true,
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "node_modules/@rokucommunity/bslint/node_modules/wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@rokucommunity/bslint/node_modules/y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
- "dev": true
- },
- "node_modules/@rokucommunity/bslint/node_modules/yargs": {
- "version": "15.4.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
- "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
- "dev": true,
- "dependencies": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@rokucommunity/bslint/node_modules/yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "dev": true,
- "dependencies": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/@types/debug": {
"version": "4.1.7",
"resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz",
@@ -156,9 +106,9 @@
}
},
"node_modules/@types/mdast": {
- "version": "3.0.10",
- "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz",
- "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==",
+ "version": "3.0.11",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.11.tgz",
+ "integrity": "sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==",
"dev": true,
"dependencies": {
"@types/unist": "*"
@@ -179,6 +129,12 @@
"@types/unist": "*"
}
},
+ "node_modules/@types/node": {
+ "version": "16.18.24",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.24.tgz",
+ "integrity": "sha512-zvSN2Esek1aeLdKDYuntKAYjti9Z2oT4I8bfkLLhIxHlv3dwZ5vvATxOc31820iYm4hQRCwjUgDpwSMFjfTUnw==",
+ "dev": true
+ },
"node_modules/@types/unist": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
@@ -258,35 +214,16 @@
}
},
"node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dependencies": {
- "color-convert": "^2.0.1"
+ "color-convert": "^1.9.0"
},
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "node": ">=4"
}
},
- "node_modules/ansi-styles/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/ansi-styles/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=="
- },
"node_modules/anymatch": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
@@ -301,9 +238,9 @@
},
"node_modules/api": {
"name": "jellyfin-api-bs-client",
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/jellyfin-api-bs-client/-/jellyfin-api-bs-client-1.0.5.tgz",
- "integrity": "sha512-W09wOl7Hm1Z4z82SQB44M3O706L98p3j0aOpVw59OBylUOshSdHPgQ/9Lth5t6xB9wrkhWoDCyK7XEYRL3wYwA=="
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/jellyfin-api-bs-client/-/jellyfin-api-bs-client-1.0.6.tgz",
+ "integrity": "sha512-lZXRUvH0Tz3itGgI2o4EArCaoaYCJf8fM+NrYzGnJlxBSnon6RAWt1XxookfyeSVXghQtZUHY+IXjM/byUnoFw=="
},
"node_modules/argparse": {
"version": "2.0.1",
@@ -348,9 +285,9 @@
}
},
"node_modules/asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
"dependencies": {
"safer-buffer": "~2.1.0"
}
@@ -358,7 +295,7 @@
"node_modules/assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
"engines": {
"node": ">=0.8"
}
@@ -366,7 +303,7 @@
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"node_modules/at-least-node": {
"version": "1.0.0",
@@ -380,15 +317,15 @@
"node_modules/aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
"engines": {
"node": "*"
}
},
"node_modules/aws4": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
- "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
+ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg=="
},
"node_modules/bail": {
"version": "2.0.2",
@@ -401,14 +338,14 @@
}
},
"node_modules/balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"node_modules/bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
"dependencies": {
"tweetnacl": "^0.14.3"
}
@@ -448,10 +385,9 @@
}
},
"node_modules/brighterscript": {
- "version": "0.64.0",
- "resolved": "https://registry.npmjs.org/brighterscript/-/brighterscript-0.64.0.tgz",
- "integrity": "sha512-uLxQlrUcsW1QS9I8xerevDYgE/Tozwa+O3PSUnPcdCFUytE8hIDTtyroQG+WApKaUeHpGI0HlEzr7pWyEqXRAA==",
- "dev": true,
+ "version": "0.64.2",
+ "resolved": "https://registry.npmjs.org/brighterscript/-/brighterscript-0.64.2.tgz",
+ "integrity": "sha512-FoPsHDa3y89qPMoDH7zGuPdFXNFlfWXdXFgWIGPymdVgywLLFaphlj7mdlX+ZdTeVcXybjVWKfyjrPRbNzJZxA==",
"dependencies": {
"@rokucommunity/bslib": "^0.1.1",
"@xml-tools/parser": "^1.0.7",
@@ -474,14 +410,14 @@
"p-settle": "^2.1.0",
"parse-ms": "^2.1.0",
"require-relative": "^0.8.7",
- "roku-deploy": "^3.10.0",
+ "roku-deploy": "^3.10.1",
"serialize-error": "^7.0.1",
"source-map": "^0.7.4",
"vscode-languageserver": "7.0.0",
"vscode-languageserver-protocol": "3.16.0",
"vscode-languageserver-textdocument": "^1.0.1",
"vscode-uri": "^2.1.1",
- "xml2js": "^0.4.19",
+ "xml2js": "^0.5.0",
"yargs": "^16.2.0"
},
"bin": {
@@ -489,11 +425,11 @@
}
},
"node_modules/brighterscript-formatter": {
- "version": "1.6.24",
- "resolved": "https://registry.npmjs.org/brighterscript-formatter/-/brighterscript-formatter-1.6.24.tgz",
- "integrity": "sha512-SWRMGI/aK3aeeleDlhppedkdIyWb11hCQsQwVCIS2oA3nbyMjINrBtYyPRU/XswAVN5fkQNHB/4JpQc184N3Lw==",
+ "version": "1.6.26",
+ "resolved": "https://registry.npmjs.org/brighterscript-formatter/-/brighterscript-formatter-1.6.26.tgz",
+ "integrity": "sha512-IT5BV+9HTr6Af23gB7hxH0Xyv8v0LIsLSsrKUFfmwHtJ1ILRI6kiyZDbZOlolYVPuX7y+0ed791CZGxfAIgm6w==",
"dependencies": {
- "brighterscript": "^0.62.0",
+ "brighterscript": "^0.64.2",
"glob-all": "^3.3.0",
"jsonc-parser": "^3.0.0",
"source-map": "^0.7.3",
@@ -504,164 +440,147 @@
"bsfmt": "dist/cli.js"
}
},
- "node_modules/brighterscript-formatter/node_modules/brighterscript": {
- "version": "0.62.0",
- "resolved": "https://registry.npmjs.org/brighterscript/-/brighterscript-0.62.0.tgz",
- "integrity": "sha512-aFDlceBnU5oQI+/pb+QMwkIGylT880KteRxDF1wS5F2TMK31rRn3Ifh1WcQrr5gEKnPebpCL0ZYvWNSeVKVqmg==",
+ "node_modules/brighterscript-formatter/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dependencies": {
- "@rokucommunity/bslib": "^0.1.1",
- "@xml-tools/parser": "^1.0.7",
- "array-flat-polyfill": "^1.0.1",
- "chalk": "^2.4.2",
- "chevrotain": "^7.0.1",
- "chokidar": "^3.5.1",
- "clear": "^0.1.0",
- "cross-platform-clear-console": "^2.3.0",
- "debounce-promise": "^3.1.0",
- "eventemitter3": "^4.0.0",
- "fast-glob": "^3.2.11",
- "file-url": "^3.0.0",
- "fs-extra": "^8.0.0",
- "jsonc-parser": "^2.3.0",
- "long": "^3.2.0",
- "luxon": "^2.5.2",
- "minimatch": "^3.0.4",
- "moment": "^2.23.0",
- "p-settle": "^2.1.0",
- "parse-ms": "^2.1.0",
- "require-relative": "^0.8.7",
- "roku-deploy": "^3.10.0",
- "serialize-error": "^7.0.1",
- "source-map": "^0.7.4",
- "vscode-languageserver": "7.0.0",
- "vscode-languageserver-protocol": "3.16.0",
- "vscode-languageserver-textdocument": "^1.0.1",
- "vscode-uri": "^2.1.1",
- "xml2js": "^0.4.19",
- "yargs": "^16.2.0"
- },
- "bin": {
- "bsc": "dist/cli.js"
- }
- },
- "node_modules/brighterscript-formatter/node_modules/brighterscript/node_modules/jsonc-parser": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz",
- "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg=="
- },
- "node_modules/brighterscript-formatter/node_modules/brighterscript/node_modules/yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "dependencies": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/brighterscript-formatter/node_modules/fs-extra": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
- "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- },
- "engines": {
- "node": ">=6 <7 || >=8"
- }
- },
- "node_modules/brighterscript-formatter/node_modules/glob-all": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.3.1.tgz",
- "integrity": "sha512-Y+ESjdI7ZgMwfzanHZYQ87C59jOO0i+Hd+QYtVt9PhLi6d8wlOpzQnfBxWUlaTuAoR3TkybLqqbIoWveU4Ji7Q==",
- "dependencies": {
- "glob": "^7.2.3",
- "yargs": "^15.3.1"
- },
- "bin": {
- "glob-all": "bin/glob-all"
- }
- },
- "node_modules/brighterscript-formatter/node_modules/glob-all/node_modules/cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "node_modules/brighterscript-formatter/node_modules/glob-all/node_modules/y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
- },
- "node_modules/brighterscript-formatter/node_modules/glob-all/node_modules/yargs": {
- "version": "15.4.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
- "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
- "dependencies": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.2"
+ "color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/brighterscript-formatter/node_modules/glob-all/node_modules/yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "node_modules/brighterscript-formatter/node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
"dependencies": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
},
"engines": {
- "node": ">=6"
+ "node": ">=12"
}
},
+ "node_modules/brighterscript-formatter/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/brighterscript-formatter/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=="
+ },
"node_modules/brighterscript-formatter/node_modules/jsonc-parser": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
"integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w=="
},
"node_modules/brighterscript-formatter/node_modules/wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
+ "node_modules/brighterscript-formatter/node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/brighterscript-formatter/node_modules/yargs": {
+ "version": "17.7.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz",
+ "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==",
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/brighterscript-formatter/node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/brighterscript/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/brighterscript/node_modules/cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "node_modules/brighterscript/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/brighterscript/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=="
+ },
"node_modules/brighterscript/node_modules/fs-extra": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
"integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
- "dev": true,
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^4.0.0",
@@ -671,11 +590,50 @@
"node": ">=6 <7 || >=8"
}
},
+ "node_modules/brighterscript/node_modules/jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/brighterscript/node_modules/universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/brighterscript/node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/brighterscript/node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/brighterscript/node_modules/yargs": {
"version": "16.2.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
"integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "dev": true,
"dependencies": {
"cliui": "^7.0.2",
"escalade": "^3.1.1",
@@ -689,6 +647,21 @@
"node": ">=10"
}
},
+ "node_modules/brighterscript/node_modules/yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/bslib": {
+ "name": "@rokucommunity/bslib",
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@rokucommunity/bslib/-/bslib-0.1.1.tgz",
+ "integrity": "sha512-2ox6EUL+UTtccTbD4dbVjZK3QHa0PHCqpoKMF8lZz9ayzzEP3iVPF8KZR6hOi6bxsIcbGXVjqmtCVkpC4P9SrA==",
+ "dev": true
+ },
"node_modules/camelcase": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
@@ -700,7 +673,7 @@
"node_modules/caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
},
"node_modules/ccount": {
"version": "2.0.1",
@@ -725,17 +698,6 @@
"node": ">=4"
}
},
- "node_modules/chalk/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/character-entities": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
@@ -811,13 +773,13 @@
}
},
"node_modules/cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+ "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
+ "wrap-ansi": "^6.2.0"
}
},
"node_modules/color-convert": {
@@ -895,7 +857,7 @@
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
},
"node_modules/console-browserify": {
"version": "1.1.0",
@@ -907,19 +869,33 @@
}
},
"node_modules/core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
},
"node_modules/cross-platform-clear-console": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/cross-platform-clear-console/-/cross-platform-clear-console-2.3.0.tgz",
"integrity": "sha512-To+sJ6plHHC6k5DfdvSVn6F1GRGJh/R6p76bCpLbyMyHEmbqFyuMAeGwDcz/nGDWH3HUcjFTTX9iUSCzCg9Eiw=="
},
+ "node_modules/cross-spawn": {
+ "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",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
"dependencies": {
"assert-plus": "^1.0.0"
},
@@ -951,9 +927,9 @@
}
},
"node_modules/dayjs": {
- "version": "1.11.2",
- "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.2.tgz",
- "integrity": "sha512-F4LXf1OeU9hrSYRPTTj/6FbO4HTjPKXvEIC1P2kcnFurViINCVk3ZV0xAS3XVx9MkMsXbbqlK6hjseaYbgKEHw=="
+ "version": "1.11.7",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz",
+ "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ=="
},
"node_modules/debounce-promise": {
"version": "3.1.2",
@@ -980,7 +956,7 @@
"node_modules/decamelize": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
"engines": {
"node": ">=0.10.0"
}
@@ -1029,6 +1005,41 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/del/node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/del/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,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/del/node_modules/slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
@@ -1041,7 +1052,7 @@
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"engines": {
"node": ">=0.4.0"
}
@@ -1195,16 +1206,17 @@
"node_modules/ecc-jsbn": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
"dependencies": {
"jsbn": "~0.1.0",
"safer-buffer": "^2.1.0"
}
},
"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=="
+ "version": "10.2.1",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.2.1.tgz",
+ "integrity": "sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==",
+ "dev": true
},
"node_modules/emoticon": {
"version": "4.0.1",
@@ -1217,16 +1229,10 @@
}
},
"node_modules/entities": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz",
- "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==",
- "dev": true,
- "engines": {
- "node": ">=0.12"
- },
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz",
+ "integrity": "sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ==",
+ "dev": true
},
"node_modules/error-ex": {
"version": "1.3.2",
@@ -1248,7 +1254,7 @@
"node_modules/escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
"engines": {
"node": ">=0.8.0"
}
@@ -1288,7 +1294,7 @@
"node_modules/extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
"engines": [
"node >=0.6.0"
]
@@ -1314,9 +1320,9 @@
}
},
"node_modules/fast-json-stable-stringify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
- "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
},
"node_modules/fast-safe-stringify": {
"version": "2.1.1",
@@ -1325,9 +1331,9 @@
"dev": true
},
"node_modules/fastq": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
- "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+ "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
"dependencies": {
"reusify": "^1.0.4"
}
@@ -1377,21 +1383,41 @@
}
},
"node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz",
+ "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==",
+ "dev": true,
"dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
+ "locate-path": "^7.1.0",
+ "path-exists": "^5.0.0"
},
"engines": {
- "node": ">=8"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/foreground-child": {
+ "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"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
"engines": {
"node": "*"
}
@@ -1432,44 +1458,10 @@
"node": ">=12"
}
},
- "node_modules/fs-extra/node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dev": true,
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/fs-extra/node_modules/universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
- "dev": true,
- "engines": {
- "node": ">= 10.0.0"
- }
- },
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
- },
- "node_modules/fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
},
"node_modules/gemoji": {
"version": "7.1.0",
@@ -1489,10 +1481,16 @@
"node": "6.* || 8.* || >= 10.*"
}
},
+ "node_modules/get-own-enumerable-property-symbols": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz",
+ "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==",
+ "dev": true
+ },
"node_modules/getpass": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
"dependencies": {
"assert-plus": "^1.0.0"
}
@@ -1517,84 +1515,17 @@
}
},
"node_modules/glob-all": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.2.1.tgz",
- "integrity": "sha512-x877rVkzB3ipid577QOp+eQCR6M5ZyiwrtaYgrX/z3EThaSPFtLDwBXFHc3sH1cG0R0vFYI5SRYeWMMSEyXkUw==",
- "dev": true,
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.3.1.tgz",
+ "integrity": "sha512-Y+ESjdI7ZgMwfzanHZYQ87C59jOO0i+Hd+QYtVt9PhLi6d8wlOpzQnfBxWUlaTuAoR3TkybLqqbIoWveU4Ji7Q==",
"dependencies": {
- "glob": "^7.1.2",
+ "glob": "^7.2.3",
"yargs": "^15.3.1"
},
"bin": {
"glob-all": "bin/glob-all"
}
},
- "node_modules/glob-all/node_modules/cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "dev": true,
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "node_modules/glob-all/node_modules/wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/glob-all/node_modules/y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
- "dev": true
- },
- "node_modules/glob-all/node_modules/yargs": {
- "version": "15.4.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
- "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
- "dev": true,
- "dependencies": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/glob-all/node_modules/yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "dev": true,
- "dependencies": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
@@ -1606,55 +1537,26 @@
"node": ">= 6"
}
},
- "node_modules/globby": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
- "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
- "dev": true,
- "dependencies": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/globby/node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/graceful-fs": {
- "version": "4.2.10",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
- "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
},
"node_modules/har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==",
"engines": {
"node": ">=4"
}
},
"node_modules/har-validator": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
- "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
"deprecated": "this library is no longer supported",
"dependencies": {
- "ajv": "^6.5.5",
+ "ajv": "^6.12.3",
"har-schema": "^2.0.0"
},
"engines": {
@@ -1682,40 +1584,10 @@
"readable-stream": "1.1"
}
},
- "node_modules/htmlparser2/node_modules/entities": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz",
- "integrity": "sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ==",
- "dev": true
- },
- "node_modules/htmlparser2/node_modules/isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
- "dev": true
- },
- "node_modules/htmlparser2/node_modules/readable-stream": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
- "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==",
- "dev": true,
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "node_modules/htmlparser2/node_modules/string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==",
- "dev": true
- },
"node_modules/http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
"dependencies": {
"assert-plus": "^1.0.0",
"jsprim": "^1.2.2",
@@ -1747,7 +1619,7 @@
"node_modules/immediate": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
- "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
+ "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="
},
"node_modules/indent-string": {
"version": "4.0.0",
@@ -1761,7 +1633,7 @@
"node_modules/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
@@ -1853,6 +1725,15 @@
"node": ">=0.12.0"
}
},
+ "node_modules/is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/is-path-cwd": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
@@ -1883,25 +1764,142 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/is-regexp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
+ "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
},
"node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
+ "dev": true
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
},
"node_modules/isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
+ },
+ "node_modules/jackspeak": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.0.3.tgz",
+ "integrity": "sha512-0Jud3OMUdMbrlr3PyUMKESq51LXVAB+a239Ywdvd+Kgxj3MaBRml/nVRxf8tQFyfthMjuRkxkv7Vg58pmIMfuQ==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^7.0.4"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/jackspeak/node_modules/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,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jackspeak/node_modules/cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "node_modules/jackspeak/node_modules/color-convert": {
+ "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"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jackspeak/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
+ },
+ "node_modules/jackspeak/node_modules/wrap-ansi": {
+ "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",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/js-yaml/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
},
"node_modules/jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
},
"node_modules/jshint": {
"version": "2.13.6",
@@ -1933,18 +1931,6 @@
"node": "*"
}
},
- "node_modules/jshint/node_modules/strip-json-comments": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz",
- "integrity": "sha512-AOPG8EBc5wAikaG1/7uFCNFJwnKOuQwFTpYBdTW6OvWHeZBQBrAA/amefHGrEiOnCPcLFZK6FUPtWVKpQVIRgg==",
- "dev": true,
- "bin": {
- "strip-json-comments": "cli.js"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
"node_modules/json-parse-better-errors": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
@@ -1964,7 +1950,7 @@
"node_modules/json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
},
"node_modules/jsonc": {
"version": "2.0.0",
@@ -1988,10 +1974,26 @@
"resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz",
"integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg=="
},
+ "node_modules/jsonc/node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dev": true,
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
"optionalDependencies": {
"graceful-fs": "^4.1.6"
}
@@ -2021,6 +2023,38 @@
"setimmediate": "^1.0.5"
}
},
+ "node_modules/jszip/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "node_modules/jszip/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/jszip/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "node_modules/jszip/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/junit-report-builder": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/junit-report-builder/-/junit-report-builder-3.0.1.tgz",
@@ -2036,15 +2070,6 @@
"node": ">=8"
}
},
- "node_modules/junit-report-builder/node_modules/xmlbuilder": {
- "version": "15.1.1",
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz",
- "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==",
- "dev": true,
- "engines": {
- "node": ">=8.0"
- }
- },
"node_modules/kleur": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
@@ -2078,14 +2103,18 @@
}
},
"node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
+ "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
+ "dev": true,
"dependencies": {
- "p-locate": "^4.1.0"
+ "p-locate": "^6.0.0"
},
"engines": {
- "node": ">=8"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/lodash": {
@@ -2109,7 +2138,7 @@
"node_modules/long": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz",
- "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=",
+ "integrity": "sha512-ZYvPPOMqUwPoDsbJaR10iQJYnMuZhRTvHYl62ErLIEX7RgFlziSBUUvrt3OVfc47QlHHpzPZYP17g3Fv7oeJkg==",
"engines": {
"node": ">=0.6"
}
@@ -2184,27 +2213,40 @@
"markdown-it": "bin/markdown-it.js"
}
},
+ "node_modules/markdown-it/node_modules/entities": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz",
+ "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
"node_modules/markdownlint": {
- "version": "0.27.0",
- "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.27.0.tgz",
- "integrity": "sha512-HtfVr/hzJJmE0C198F99JLaeada+646B5SaG2pVoEakLFI6iRGsvMqrnnrflq8hm1zQgwskEgqSnhDW11JBp0w==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.28.1.tgz",
+ "integrity": "sha512-8At2DbgGKT/RVBinkqIPqLETopPXyQFGWSiTCJSr9Y6wVVyY70cDJ9dw3FXePn4AkytIUclgrsgI6KVeqeHFoA==",
"dev": true,
"dependencies": {
- "markdown-it": "13.0.1"
+ "markdown-it": "13.0.1",
+ "markdownlint-micromark": "0.1.2"
},
"engines": {
"node": ">=14.18.0"
}
},
"node_modules/markdownlint-cli2": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/markdownlint-cli2/-/markdownlint-cli2-0.6.0.tgz",
- "integrity": "sha512-Bv20r6WGdcHMWi8QvAFZ3CBunf4i4aYmVdTfpAvXODI/1k3f09DZZ0i0LcX9ZMhlVxjoOzbVDz1NWyKc5hwTqg==",
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/markdownlint-cli2/-/markdownlint-cli2-0.7.0.tgz",
+ "integrity": "sha512-67r1t9ep+z0fa6g9TgL3tiPQeWo297ip165Et2u54UquJAkXWnq6e+dXFBjSPft/iLaGJfU0fUHXhXueqNUkGQ==",
"dev": true,
"dependencies": {
- "globby": "13.1.3",
- "markdownlint": "0.27.0",
- "markdownlint-cli2-formatter-default": "0.0.3",
+ "globby": "13.1.4",
+ "markdownlint": "0.28.1",
+ "markdownlint-cli2-formatter-default": "0.0.4",
"micromatch": "4.0.5",
"strip-json-comments": "5.0.0",
"yaml": "2.2.1"
@@ -2219,18 +2261,18 @@
}
},
"node_modules/markdownlint-cli2-formatter-default": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/markdownlint-cli2-formatter-default/-/markdownlint-cli2-formatter-default-0.0.3.tgz",
- "integrity": "sha512-QEAJitT5eqX1SNboOD+SO/LNBpu4P4je8JlR02ug2cLQAqmIhh8IJnSK7AcaHBHhNADqdGydnPpQOpsNcEEqCw==",
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/markdownlint-cli2-formatter-default/-/markdownlint-cli2-formatter-default-0.0.4.tgz",
+ "integrity": "sha512-xm2rM0E+sWgjpPn1EesPXx5hIyrN2ddUnUwnbCsD/ONxYtw3PX6LydvdH6dciWAoFDpwzbHM1TO7uHfcMd6IYg==",
"dev": true,
"peerDependencies": {
"markdownlint-cli2": ">=0.0.4"
}
},
"node_modules/markdownlint-cli2/node_modules/globby": {
- "version": "13.1.3",
- "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz",
- "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==",
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.4.tgz",
+ "integrity": "sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==",
"dev": true,
"dependencies": {
"dir-glob": "^3.0.1",
@@ -2258,6 +2300,15 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/markdownlint-micromark": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.2.tgz",
+ "integrity": "sha512-jRxlQg8KpOfM2IbCL9RXM8ZiYWz2rv6DlZAnGv8ASJQpUh6byTBnEsbuMZ6T2/uIgntyf7SKg/mEaEBo1164fQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.18.0"
+ }
+ },
"node_modules/mdast-util-from-markdown": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.0.tgz",
@@ -2506,14 +2557,15 @@
}
},
"node_modules/micromark-extension-frontmatter": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-1.0.0.tgz",
- "integrity": "sha512-EXjmRnupoX6yYuUJSQhrQ9ggK0iQtQlpi6xeJzVD5xscyAI+giqco5fdymayZhJMbIFecjnE2yz85S9NzIgQpg==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-1.0.1.tgz",
+ "integrity": "sha512-9OJhCXkrpj8qIXW5AAgRZGvS8Q4GTMdH5+Ljt98kV4XQVflRGeEhNRYp6O/zCvf8c8lZ+wc4uwmbly27pS/s4Q==",
"dev": true,
"dependencies": {
"fault": "^2.0.0",
"micromark-util-character": "^1.0.0",
- "micromark-util-symbol": "^1.0.0"
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0"
},
"funding": {
"type": "opencollective",
@@ -2907,19 +2959,19 @@
}
},
"node_modules/mime-db": {
- "version": "1.40.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
- "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==",
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mime-types": {
- "version": "2.1.24",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
- "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"dependencies": {
- "mime-db": "1.40.0"
+ "mime-db": "1.52.0"
},
"engines": {
"node": ">= 0.6"
@@ -2945,6 +2997,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/minipass": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
+ "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/mkdirp": {
"version": "0.5.6",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
@@ -3016,12 +3077,6 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/nlcst-emoji-modifier/node_modules/emoji-regex": {
- "version": "10.2.1",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.2.1.tgz",
- "integrity": "sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==",
- "dev": true
- },
"node_modules/nlcst-emoji-modifier/node_modules/gemoji": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/gemoji/-/gemoji-8.0.0.tgz",
@@ -3173,7 +3228,7 @@
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"dependencies": {
"wrappy": "1"
}
@@ -3190,36 +3245,33 @@
}
},
"node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
+ "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
+ "dev": true,
"dependencies": {
- "p-limit": "^2.2.0"
+ "p-limit": "^4.0.0"
},
"engines": {
- "node": ">=8"
- }
- },
- "node_modules/p-locate/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/p-locate/node_modules/p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "node_modules/p-locate/node_modules/p-limit": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
+ "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^1.0.0"
+ },
"engines": {
- "node": ">=6"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/p-map": {
@@ -3240,7 +3292,7 @@
"node_modules/p-reflect": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-reflect/-/p-reflect-1.0.0.tgz",
- "integrity": "sha1-9Poe4btUbY6z7AMhFI3+CnkTe7g=",
+ "integrity": "sha512-rlngKS+EX3nvI7xIzA0xKNVEAguWdIqAZVbn02z1m73ehXBdX66aTdD0bCvIu0cDwbU3TK9w3RYrppKpO3EnKQ==",
"engines": {
"node": ">=4"
}
@@ -3260,7 +3312,7 @@
"node_modules/p-try": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==",
"engines": {
"node": ">=4"
}
@@ -3307,21 +3359,56 @@
}
},
"node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
+ "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
+ "dev": true,
"engines": {
- "node": ">=8"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
}
},
"node_modules/path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
"engines": {
"node": ">=0.10.0"
}
},
+ "node_modules/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-scurry": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.7.0.tgz",
+ "integrity": "sha512-UkZUeDjczjYRE495+9thsgcVgsaCPkaw80slmfVFgllxY+IO8ubTsOpFVjDPROBqJdHfVPUFRHPBV/WciOVfWg==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^9.0.0",
+ "minipass": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/path-scurry/node_modules/lru-cache": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.0.tgz",
+ "integrity": "sha512-qFXQEwchrZcMVen2uIDceR8Tii6kCJak5rzDStfEM0qA3YLMswaxIEZO0DhIbJ3aqaJiDjt+3crlplOb0tDtKQ==",
+ "dev": true,
+ "engines": {
+ "node": "14 || >=16.14"
+ }
+ },
"node_modules/path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
@@ -3334,7 +3421,7 @@
"node_modules/performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
+ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
},
"node_modules/picomatch": {
"version": "2.3.1",
@@ -3362,76 +3449,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/pkg-dir/node_modules/find-up": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz",
- "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==",
- "dev": true,
- "dependencies": {
- "locate-path": "^7.1.0",
- "path-exists": "^5.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/pkg-dir/node_modules/locate-path": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
- "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
- "dev": true,
- "dependencies": {
- "p-locate": "^6.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/pkg-dir/node_modules/p-limit": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
- "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
- "dev": true,
- "dependencies": {
- "yocto-queue": "^1.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/pkg-dir/node_modules/p-locate": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
- "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
- "dev": true,
- "dependencies": {
- "p-limit": "^4.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/pkg-dir/node_modules/path-exists": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
- "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
- "dev": true,
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- }
- },
"node_modules/process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
@@ -3443,9 +3460,9 @@
"integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
},
"node_modules/punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
"engines": {
"node": ">=6"
}
@@ -3488,17 +3505,15 @@
}
},
"node_modules/readable-stream": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==",
+ "dev": true,
"dependencies": {
"core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
}
},
"node_modules/readdirp": {
@@ -3656,7 +3671,7 @@
"node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"engines": {
"node": ">=0.10.0"
}
@@ -3738,9 +3753,9 @@
}
},
"node_modules/retext-indefinite-article": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/retext-indefinite-article/-/retext-indefinite-article-4.2.0.tgz",
- "integrity": "sha512-qAAqK7tR+aX3kFIHlgO3zojLC9XmcIA96f68ooj8yhVN1iTDbrs0xHnGaBYc/9WCI2F4iyJUH8qZ2CBY2uTxAQ==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/retext-indefinite-article/-/retext-indefinite-article-4.3.0.tgz",
+ "integrity": "sha512-NdVOT0pR68ZhC/Eph/eg2z92zwC9H3DzXkEaiaIs0aDAnNBVzJT/DeRFYDTEMDWINnEVTApuGoCl9mqciUUsAw==",
"dev": true,
"dependencies": {
"@types/nlcst": "^1.0.0",
@@ -3984,24 +3999,74 @@
}
},
"node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.0.tgz",
+ "integrity": "sha512-Jf9llaP+RvaEVS5nPShYFhtXIrb3LRKP281ib3So0KkeZKo2wIKyq0Re7TOSwanasA423PSr6CCIL4bP6T040g==",
"dev": true,
"dependencies": {
- "glob": "^7.1.3"
+ "glob": "^10.0.0"
},
"bin": {
- "rimraf": "bin.js"
+ "rimraf": "dist/cjs/src/bin.js"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rimraf/node_modules/brace-expansion": {
+ "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"
+ }
+ },
+ "node_modules/rimraf/node_modules/glob": {
+ "version": "10.2.1",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.1.tgz",
+ "integrity": "sha512-ngom3wq2UhjdbmRE/krgkD8BQyi1KZ5l+D2dVm4+Yj+jJIBp74/ZGunL6gNGc/CYuQmvUBiavWEXIotRiv5R6A==",
+ "dev": true,
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "fs.realpath": "^1.0.0",
+ "jackspeak": "^2.0.3",
+ "minimatch": "^9.0.0",
+ "minipass": "^5.0.0",
+ "path-scurry": "^1.7.0"
+ },
+ "bin": {
+ "glob": "dist/cjs/src/bin.js"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rimraf/node_modules/minimatch": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz",
+ "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/roku-deploy": {
- "version": "3.10.0",
- "resolved": "https://registry.npmjs.org/roku-deploy/-/roku-deploy-3.10.0.tgz",
- "integrity": "sha512-qifRe8xmX0g1bBJoin6wC4IYiLoFGU4PU9CRGdsV25Sv35TPFuz1FLBMIBEieBg8pHoATUa+jyPfs7upHxq9Yw==",
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/roku-deploy/-/roku-deploy-3.10.1.tgz",
+ "integrity": "sha512-utPNny0a2m/N0AQT6zyVLXtrr81KR5QeJqPUbc59VBcqGM+WIi7rQ9hBLmp5dFqIo/7JVKQYFs+nFGebOA6F7w==",
"dependencies": {
"chalk": "^2.4.2",
"dateformat": "^3.0.3",
@@ -4016,7 +4081,7 @@
"parse-ms": "^2.1.0",
"request": "^2.88.0",
"temp-dir": "^2.0.0",
- "xml2js": "^0.4.23"
+ "xml2js": "^0.5.0"
},
"bin": {
"roku-deploy": "dist/cli.js"
@@ -4035,21 +4100,136 @@
"node": ">=6 <7 || >=8"
}
},
+ "node_modules/roku-deploy/node_modules/jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/roku-deploy/node_modules/universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/roku-log-bsc-plugin": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/roku-log-bsc-plugin/-/roku-log-bsc-plugin-0.8.1.tgz",
+ "integrity": "sha512-GL/fM4vx1BCLHny9yC1RR81v8LY6FDAWx4jGkivGz36/wZfRDnM9MqSSIgJ4z7p0Jns4AL2o80MNd9Ytaulo/A==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "^16.18.10",
+ "source-map": "^0.7.3",
+ "stringify-object": "^3.3.0",
+ "vscode-languageserver": "~6.1.1",
+ "vscode-languageserver-protocol": "~3.15.3"
+ }
+ },
+ "node_modules/roku-log-bsc-plugin/node_modules/vscode-jsonrpc": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-5.0.1.tgz",
+ "integrity": "sha512-JvONPptw3GAQGXlVV2utDcHx0BiY34FupW/kI6mZ5x06ER5DdPG/tXWMVHjTNULF5uKPOUUD0SaXg5QaubJL0A==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.0.0 || >=10.0.0"
+ }
+ },
+ "node_modules/roku-log-bsc-plugin/node_modules/vscode-languageserver": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-6.1.1.tgz",
+ "integrity": "sha512-DueEpkUAkD5XTR4MLYNr6bQIp/UFR0/IPApgXU3YfCBCB08u2sm9hRCs6DxYZELkk++STPjpcjksR2H8qI3cDQ==",
+ "dev": true,
+ "dependencies": {
+ "vscode-languageserver-protocol": "^3.15.3"
+ },
+ "bin": {
+ "installServerIntoExtension": "bin/installServerIntoExtension"
+ }
+ },
+ "node_modules/roku-log-bsc-plugin/node_modules/vscode-languageserver-protocol": {
+ "version": "3.15.3",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.15.3.tgz",
+ "integrity": "sha512-zrMuwHOAQRhjDSnflWdJG+O2ztMWss8GqUUB8dXLR/FPenwkiBNkMIJJYfSN6sgskvsF0rHAoBowNQfbyZnnvw==",
+ "dev": true,
+ "dependencies": {
+ "vscode-jsonrpc": "^5.0.1",
+ "vscode-languageserver-types": "3.15.1"
+ }
+ },
+ "node_modules/roku-log-bsc-plugin/node_modules/vscode-languageserver-types": {
+ "version": "3.15.1",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.15.1.tgz",
+ "integrity": "sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ==",
+ "dev": true
+ },
+ "node_modules/rooibos-roku": {
+ "version": "5.4.2",
+ "resolved": "https://registry.npmjs.org/rooibos-roku/-/rooibos-roku-5.4.2.tgz",
+ "integrity": "sha512-X6IKsd8w5yed4EtCTX4qKcnmD1ER2B+K07yLL3cKohow5dzT8yploXHPCpgcJqky1B5lYlA/OEaIkFCPEaT9Eg==",
+ "dev": true,
+ "dependencies": {
+ "source-map": "^0.7.3",
+ "undent": "^0.1.0",
+ "vscode-languageserver": "~6.1.1",
+ "vscode-languageserver-protocol": "~3.15.3"
+ }
+ },
+ "node_modules/rooibos-roku/node_modules/vscode-jsonrpc": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-5.0.1.tgz",
+ "integrity": "sha512-JvONPptw3GAQGXlVV2utDcHx0BiY34FupW/kI6mZ5x06ER5DdPG/tXWMVHjTNULF5uKPOUUD0SaXg5QaubJL0A==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.0.0 || >=10.0.0"
+ }
+ },
+ "node_modules/rooibos-roku/node_modules/vscode-languageserver": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-6.1.1.tgz",
+ "integrity": "sha512-DueEpkUAkD5XTR4MLYNr6bQIp/UFR0/IPApgXU3YfCBCB08u2sm9hRCs6DxYZELkk++STPjpcjksR2H8qI3cDQ==",
+ "dev": true,
+ "dependencies": {
+ "vscode-languageserver-protocol": "^3.15.3"
+ },
+ "bin": {
+ "installServerIntoExtension": "bin/installServerIntoExtension"
+ }
+ },
+ "node_modules/rooibos-roku/node_modules/vscode-languageserver-protocol": {
+ "version": "3.15.3",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.15.3.tgz",
+ "integrity": "sha512-zrMuwHOAQRhjDSnflWdJG+O2ztMWss8GqUUB8dXLR/FPenwkiBNkMIJJYfSN6sgskvsF0rHAoBowNQfbyZnnvw==",
+ "dev": true,
+ "dependencies": {
+ "vscode-jsonrpc": "^5.0.1",
+ "vscode-languageserver-types": "3.15.1"
+ }
+ },
+ "node_modules/rooibos-roku/node_modules/vscode-languageserver-types": {
+ "version": "3.15.1",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.15.1.tgz",
+ "integrity": "sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ==",
+ "dev": true
+ },
"node_modules/ropm": {
- "version": "0.10.12",
- "resolved": "https://registry.npmjs.org/ropm/-/ropm-0.10.12.tgz",
- "integrity": "sha512-twgvOmD1kEiOjCn47VaVOii9MD6vqtKvewZFh5EYenpx4nrtY+llMo3ZzMBpQzi5crbCFOdw18Lzx1PPRBjLvQ==",
+ "version": "0.10.13",
+ "resolved": "https://registry.npmjs.org/ropm/-/ropm-0.10.13.tgz",
+ "integrity": "sha512-WlYorFMbnZGaNbKEXb6RX64wLOE/RHttzDuuQBkf2J7HbgQHseLbVdHBVaAb+SiS7BLK5xzJOoTsFbV2YTXsvg==",
"dev": true,
"dependencies": {
"@xml-tools/ast": "^5.0.5",
"@xml-tools/parser": "1.0.10",
- "brighterscript": "^0.62.0",
+ "brighterscript": "^0.64.2",
"del": "6.0.0",
"fs-extra": "9.1.0",
"glob-all": "3.2.1",
"latinize": "0.5.0",
"npm-packlist": "2.1.4",
- "roku-deploy": "^3.10.0",
+ "roku-deploy": "^3.10.1",
"semver": "7.3.4",
"yargs": "16.2.0"
},
@@ -4069,59 +4249,19 @@
"chevrotain": "7.1.1"
}
},
- "node_modules/ropm/node_modules/brighterscript": {
- "version": "0.62.0",
- "resolved": "https://registry.npmjs.org/brighterscript/-/brighterscript-0.62.0.tgz",
- "integrity": "sha512-aFDlceBnU5oQI+/pb+QMwkIGylT880KteRxDF1wS5F2TMK31rRn3Ifh1WcQrr5gEKnPebpCL0ZYvWNSeVKVqmg==",
+ "node_modules/ropm/node_modules/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,
"dependencies": {
- "@rokucommunity/bslib": "^0.1.1",
- "@xml-tools/parser": "^1.0.7",
- "array-flat-polyfill": "^1.0.1",
- "chalk": "^2.4.2",
- "chevrotain": "^7.0.1",
- "chokidar": "^3.5.1",
- "clear": "^0.1.0",
- "cross-platform-clear-console": "^2.3.0",
- "debounce-promise": "^3.1.0",
- "eventemitter3": "^4.0.0",
- "fast-glob": "^3.2.11",
- "file-url": "^3.0.0",
- "fs-extra": "^8.0.0",
- "jsonc-parser": "^2.3.0",
- "long": "^3.2.0",
- "luxon": "^2.5.2",
- "minimatch": "^3.0.4",
- "moment": "^2.23.0",
- "p-settle": "^2.1.0",
- "parse-ms": "^2.1.0",
- "require-relative": "^0.8.7",
- "roku-deploy": "^3.10.0",
- "serialize-error": "^7.0.1",
- "source-map": "^0.7.4",
- "vscode-languageserver": "7.0.0",
- "vscode-languageserver-protocol": "3.16.0",
- "vscode-languageserver-textdocument": "^1.0.1",
- "vscode-uri": "^2.1.1",
- "xml2js": "^0.4.19",
- "yargs": "^16.2.0"
- },
- "bin": {
- "bsc": "dist/cli.js"
- }
- },
- "node_modules/ropm/node_modules/brighterscript/node_modules/fs-extra": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
- "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
+ "color-convert": "^2.0.1"
},
"engines": {
- "node": ">=6 <7 || >=8"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/ropm/node_modules/chevrotain": {
@@ -4133,6 +4273,37 @@
"regexp-to-ast": "0.5.0"
}
},
+ "node_modules/ropm/node_modules/color-convert": {
+ "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"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/ropm/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
+ },
+ "node_modules/ropm/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/ropm/node_modules/fs-extra": {
"version": "9.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
@@ -4148,25 +4319,113 @@
"node": ">=10"
}
},
- "node_modules/ropm/node_modules/fs-extra/node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "node_modules/ropm/node_modules/glob-all": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.2.1.tgz",
+ "integrity": "sha512-x877rVkzB3ipid577QOp+eQCR6M5ZyiwrtaYgrX/z3EThaSPFtLDwBXFHc3sH1cG0R0vFYI5SRYeWMMSEyXkUw==",
"dev": true,
"dependencies": {
- "universalify": "^2.0.0"
+ "glob": "^7.1.2",
+ "yargs": "^15.3.1"
},
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
+ "bin": {
+ "glob-all": "bin/glob-all"
}
},
- "node_modules/ropm/node_modules/fs-extra/node_modules/universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "node_modules/ropm/node_modules/glob-all/node_modules/yargs": {
+ "version": "15.4.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+ "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^6.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^4.1.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^4.2.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^18.1.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ropm/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ropm/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ropm/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ropm/node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true,
"engines": {
- "node": ">= 10.0.0"
+ "node": ">=6"
+ }
+ },
+ "node_modules/ropm/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ropm/node_modules/wrap-ansi": {
+ "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",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"node_modules/ropm/node_modules/yargs": {
@@ -4187,6 +4446,35 @@
"node": ">=10"
}
},
+ "node_modules/ropm/node_modules/yargs/node_modules/cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "node_modules/ropm/node_modules/yargs/node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/ropm/node_modules/yargs/node_modules/yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/run-parallel": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -4222,9 +4510,23 @@
}
},
"node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
},
"node_modules/safer-buffer": {
"version": "2.1.2",
@@ -4268,13 +4570,46 @@
"node_modules/set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
},
"node_modules/setimmediate": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
"integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="
},
+ "node_modules/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,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.1.tgz",
+ "integrity": "sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/slash": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
@@ -4342,15 +4677,6 @@
"spellchecker": "build/index.js"
}
},
- "node_modules/spellchecker-cli/node_modules/argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "dependencies": {
- "sprintf-js": "~1.0.2"
- }
- },
"node_modules/spellchecker-cli/node_modules/fs-extra": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz",
@@ -4362,17 +4688,51 @@
"universalify": "^0.1.0"
}
},
- "node_modules/spellchecker-cli/node_modules/js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "node_modules/spellchecker-cli/node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
"dev": true,
"dependencies": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
},
- "bin": {
- "js-yaml": "bin/js-yaml.js"
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/spellchecker-cli/node_modules/jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
+ "dev": true,
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/spellchecker-cli/node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/spellchecker-cli/node_modules/universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4.0.0"
}
},
"node_modules/sprintf-js": {
@@ -4382,9 +4742,9 @@
"dev": true
},
"node_modules/sshpk": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
- "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
+ "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
"dependencies": {
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
@@ -4406,12 +4766,10 @@
}
},
"node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==",
+ "dev": true
},
"node_modules/string-width": {
"version": "4.2.3",
@@ -4426,6 +4784,25 @@
"node": ">=8"
}
},
+ "node_modules/string-width/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=="
+ },
+ "node_modules/stringify-object": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
+ "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==",
+ "dev": true,
+ "dependencies": {
+ "get-own-enumerable-property-symbols": "^3.0.0",
+ "is-obj": "^1.0.1",
+ "is-regexp": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -4447,15 +4824,15 @@
}
},
"node_modules/strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz",
+ "integrity": "sha512-AOPG8EBc5wAikaG1/7uFCNFJwnKOuQwFTpYBdTW6OvWHeZBQBrAA/amefHGrEiOnCPcLFZK6FUPtWVKpQVIRgg==",
"dev": true,
- "engines": {
- "node": ">=8"
+ "bin": {
+ "strip-json-comments": "cli.js"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "engines": {
+ "node": ">=0.8.0"
}
},
"node_modules/supports-color": {
@@ -4553,7 +4930,7 @@
"node_modules/tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
"dependencies": {
"safe-buffer": "^5.0.1"
},
@@ -4564,7 +4941,7 @@
"node_modules/tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
+ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="
},
"node_modules/type-fest": {
"version": "0.13.1",
@@ -4592,6 +4969,12 @@
"integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
"dev": true
},
+ "node_modules/undent": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/undent/-/undent-0.1.0.tgz",
+ "integrity": "sha512-vohX7ywgBjRxDNw+f3wHclSXmO0z9HsEfmGObOuG7G0yi7kZ6OtCG8kAxtDSNklmua5KR6ev2drTFqMGqpYEbg==",
+ "dev": true
+ },
"node_modules/unherit": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/unherit/-/unherit-3.0.1.tgz",
@@ -4662,10 +5045,13 @@
}
},
"node_modules/unist-util-is": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.0.tgz",
- "integrity": "sha512-Glt17jWwZeyqrFqOK0pF1Ded5U3yzJnFr8CG1GMjCWTp9zDo2p+cmD6pWbZU8AgM5WU3IzRv6+rBwhzsGh6hBQ==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz",
+ "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==",
"dev": true,
+ "dependencies": {
+ "@types/unist": "^2.0.0"
+ },
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
@@ -4749,17 +5135,18 @@
"dev": true
},
"node_modules/universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "dev": true,
"engines": {
- "node": ">= 4.0.0"
+ "node": ">= 10.0.0"
}
},
"node_modules/uri-js": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
- "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"dependencies": {
"punycode": "^2.1.0"
}
@@ -4767,12 +5154,12 @@
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
},
"node_modules/uuid": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
- "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
"deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
"bin": {
"uuid": "bin/uuid"
@@ -4799,7 +5186,7 @@
"node_modules/verror": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
"engines": [
"node >=0.6.0"
],
@@ -4809,6 +5196,11 @@
"extsprintf": "^1.2.0"
}
},
+ "node_modules/verror/node_modules/core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
+ },
"node_modules/vfile": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/vfile/-/vfile-3.0.1.tgz",
@@ -4978,9 +5370,9 @@
}
},
"node_modules/vscode-languageserver-textdocument": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz",
- "integrity": "sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA=="
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz",
+ "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q=="
},
"node_modules/vscode-languageserver-types": {
"version": "3.16.0",
@@ -4992,10 +5384,25 @@
"resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz",
"integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A=="
},
+ "node_modules/which": {
+ "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"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/which-module": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
+ "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q=="
},
"node_modules/wordwrapjs": {
"version": "3.0.0",
@@ -5017,30 +5424,57 @@
"dev": true
},
"node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
},
"funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
+ "node_modules/wrap-ansi/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/wrap-ansi/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=="
+ },
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
},
"node_modules/xml2js": {
- "version": "0.4.23",
- "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz",
- "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==",
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz",
+ "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
"dependencies": {
"sax": ">=0.6.0",
"xmlbuilder": "~11.0.0"
@@ -5049,7 +5483,7 @@
"node": ">=4.0.0"
}
},
- "node_modules/xmlbuilder": {
+ "node_modules/xml2js/node_modules/xmlbuilder": {
"version": "11.0.1",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
"integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
@@ -5057,14 +5491,20 @@
"node": ">=4.0"
}
},
- "node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "node_modules/xmlbuilder": {
+ "version": "15.1.1",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz",
+ "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==",
+ "dev": true,
"engines": {
- "node": ">=10"
+ "node": ">=8.0"
}
},
+ "node_modules/y18n": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
+ },
"node_modules/yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
@@ -5081,36 +5521,100 @@
}
},
"node_modules/yargs": {
- "version": "17.3.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz",
- "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==",
+ "version": "15.4.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+ "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
"dependencies": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
+ "cliui": "^6.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^4.1.0",
+ "get-caller-file": "^2.0.1",
"require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.0.0"
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^4.2.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^18.1.2"
},
"engines": {
- "node": ">=12"
+ "node": ">=8"
}
},
"node_modules/yargs-parser": {
- "version": "20.2.7",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz",
- "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==",
+ "version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "dependencies": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ },
"engines": {
- "node": ">=10"
+ "node": ">=6"
}
},
- "node_modules/yargs/node_modules/yargs-parser": {
- "version": "21.0.0",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz",
- "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==",
+ "node_modules/yargs/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
"engines": {
- "node": ">=12"
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/yargs/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/yargs/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "engines": {
+ "node": ">=8"
}
},
"node_modules/yocto-queue": {
@@ -5135,3879 +5639,5 @@
"url": "https://github.com/sponsors/wooorm"
}
}
- },
- "dependencies": {
- "@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "requires": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- }
- },
- "@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
- },
- "@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "requires": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- }
- },
- "@rokucommunity/bslib": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@rokucommunity/bslib/-/bslib-0.1.1.tgz",
- "integrity": "sha512-2ox6EUL+UTtccTbD4dbVjZK3QHa0PHCqpoKMF8lZz9ayzzEP3iVPF8KZR6hOi6bxsIcbGXVjqmtCVkpC4P9SrA=="
- },
- "@rokucommunity/bslint": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/@rokucommunity/bslint/-/bslint-0.8.2.tgz",
- "integrity": "sha512-MbfnQ6x0nBmcOh8PxxEcue3wWeLPHQMNx8HHU4pq6p+1xb16XryEoHJiZTVyKBWXvjcLbP5oYyBAhXMEj5l8pw==",
- "dev": true,
- "requires": {
- "fs-extra": "^10.0.0",
- "jsonc-parser": "^2.3.0",
- "minimatch": "^3.0.4",
- "yargs": "^15.4.1"
- },
- "dependencies": {
- "cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
- "dev": true
- },
- "yargs": {
- "version": "15.4.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
- "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
- "dev": true,
- "requires": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.2"
- }
- },
- "yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "dev": true,
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- }
- }
- },
- "@types/debug": {
- "version": "4.1.7",
- "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz",
- "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==",
- "dev": true,
- "requires": {
- "@types/ms": "*"
- }
- },
- "@types/mdast": {
- "version": "3.0.10",
- "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz",
- "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==",
- "dev": true,
- "requires": {
- "@types/unist": "*"
- }
- },
- "@types/ms": {
- "version": "0.7.31",
- "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz",
- "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==",
- "dev": true
- },
- "@types/nlcst": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-1.0.0.tgz",
- "integrity": "sha512-3TGCfOcy8R8mMQ4CNSNOe3PG66HttvjcLzCoOpvXvDtfWOTi+uT/rxeOKm/qEwbM4SNe1O/PjdiBK2YcTjU4OQ==",
- "dev": true,
- "requires": {
- "@types/unist": "*"
- }
- },
- "@types/unist": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
- "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==",
- "dev": true
- },
- "@xml-tools/ast": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/@xml-tools/ast/-/ast-5.0.5.tgz",
- "integrity": "sha512-avvzTOvGplCx9JSKdsTe3vK+ACvsHy2HxVfkcfIqPzu+kF5CT4rw5aUVzs0tJF4cnDyMRVkSyVxR07X0Px8gPA==",
- "dev": true,
- "requires": {
- "@xml-tools/common": "^0.1.6",
- "@xml-tools/parser": "^1.0.11",
- "lodash": "4.17.21"
- }
- },
- "@xml-tools/common": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/@xml-tools/common/-/common-0.1.6.tgz",
- "integrity": "sha512-7aVZeEYccs1KI/Asd6KKnrB4dTAWXTkjRMjG40ApGEUp5NpfQIvWLEBvMv85Koj2lbSpagcAERwDy9qMsfWGdA==",
- "dev": true,
- "requires": {
- "lodash": "4.17.21"
- }
- },
- "@xml-tools/parser": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/@xml-tools/parser/-/parser-1.0.11.tgz",
- "integrity": "sha512-aKqQ077XnR+oQtHJlrAflaZaL7qZsulWc/i/ZEooar5JiWj1eLt0+Wg28cpa+XLney107wXqneC+oG1IZvxkTA==",
- "requires": {
- "chevrotain": "7.1.1"
- },
- "dependencies": {
- "chevrotain": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-7.1.1.tgz",
- "integrity": "sha512-wy3mC1x4ye+O+QkEinVJkPf5u2vsrDIYW9G7ZuwFl6v/Yu0LwUuT2POsb+NUWApebyxfkQq6+yDfRExbnI5rcw==",
- "requires": {
- "regexp-to-ast": "0.5.0"
- }
- }
- }
- },
- "aggregate-error": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
- "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
- "dev": true,
- "requires": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
- }
- },
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "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==",
- "requires": {
- "color-convert": "^2.0.1"
- },
- "dependencies": {
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "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=="
- }
- }
- },
- "anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "api": {
- "version": "npm:jellyfin-api-bs-client@1.0.5",
- "resolved": "https://registry.npmjs.org/jellyfin-api-bs-client/-/jellyfin-api-bs-client-1.0.5.tgz",
- "integrity": "sha512-W09wOl7Hm1Z4z82SQB44M3O706L98p3j0aOpVw59OBylUOshSdHPgQ/9Lth5t6xB9wrkhWoDCyK7XEYRL3wYwA=="
- },
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "array-back": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz",
- "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==",
- "dev": true
- },
- "array-flat-polyfill": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/array-flat-polyfill/-/array-flat-polyfill-1.0.1.tgz",
- "integrity": "sha512-hfJmKupmQN0lwi0xG6FQ5U8Rd97RnIERplymOv/qpq8AoNKPPAnxJadjFA23FNWm88wykh9HmpLJUUwUtNU/iw=="
- },
- "array-iterate": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz",
- "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==",
- "dev": true
- },
- "array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "dev": true
- },
- "asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
- "requires": {
- "safer-buffer": "~2.1.0"
- }
- },
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
- },
- "at-least-node": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
- "dev": true
- },
- "aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
- },
- "aws4": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
- "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
- },
- "bail": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
- "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
- "dev": true
- },
- "balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
- },
- "bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
- "requires": {
- "tweetnacl": "^0.14.3"
- }
- },
- "bgv": {
- "version": "npm:button-group-vert@1.0.2",
- "resolved": "https://registry.npmjs.org/button-group-vert/-/button-group-vert-1.0.2.tgz",
- "integrity": "sha512-pfrUYI/aFubtjhA8I08qNCtDluyIScksldR15icR7Pj24tNELYCYXE7M0jaU7xgdiFAhZJcYuB3aCXzyI1CoMw=="
- },
- "binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "brighterscript": {
- "version": "0.64.0",
- "resolved": "https://registry.npmjs.org/brighterscript/-/brighterscript-0.64.0.tgz",
- "integrity": "sha512-uLxQlrUcsW1QS9I8xerevDYgE/Tozwa+O3PSUnPcdCFUytE8hIDTtyroQG+WApKaUeHpGI0HlEzr7pWyEqXRAA==",
- "dev": true,
- "requires": {
- "@rokucommunity/bslib": "^0.1.1",
- "@xml-tools/parser": "^1.0.7",
- "array-flat-polyfill": "^1.0.1",
- "chalk": "^2.4.2",
- "chevrotain": "^7.0.1",
- "chokidar": "^3.5.1",
- "clear": "^0.1.0",
- "cross-platform-clear-console": "^2.3.0",
- "debounce-promise": "^3.1.0",
- "eventemitter3": "^4.0.0",
- "fast-glob": "^3.2.11",
- "file-url": "^3.0.0",
- "fs-extra": "^8.0.0",
- "jsonc-parser": "^2.3.0",
- "long": "^3.2.0",
- "luxon": "^2.5.2",
- "minimatch": "^3.0.4",
- "moment": "^2.23.0",
- "p-settle": "^2.1.0",
- "parse-ms": "^2.1.0",
- "require-relative": "^0.8.7",
- "roku-deploy": "^3.10.0",
- "serialize-error": "^7.0.1",
- "source-map": "^0.7.4",
- "vscode-languageserver": "7.0.0",
- "vscode-languageserver-protocol": "3.16.0",
- "vscode-languageserver-textdocument": "^1.0.1",
- "vscode-uri": "^2.1.1",
- "xml2js": "^0.4.19",
- "yargs": "^16.2.0"
- },
- "dependencies": {
- "fs-extra": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
- "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "dev": true,
- "requires": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- }
- }
- }
- },
- "brighterscript-formatter": {
- "version": "1.6.24",
- "resolved": "https://registry.npmjs.org/brighterscript-formatter/-/brighterscript-formatter-1.6.24.tgz",
- "integrity": "sha512-SWRMGI/aK3aeeleDlhppedkdIyWb11hCQsQwVCIS2oA3nbyMjINrBtYyPRU/XswAVN5fkQNHB/4JpQc184N3Lw==",
- "requires": {
- "brighterscript": "^0.62.0",
- "glob-all": "^3.3.0",
- "jsonc-parser": "^3.0.0",
- "source-map": "^0.7.3",
- "yargs": "^17.2.1"
- },
- "dependencies": {
- "brighterscript": {
- "version": "0.62.0",
- "resolved": "https://registry.npmjs.org/brighterscript/-/brighterscript-0.62.0.tgz",
- "integrity": "sha512-aFDlceBnU5oQI+/pb+QMwkIGylT880KteRxDF1wS5F2TMK31rRn3Ifh1WcQrr5gEKnPebpCL0ZYvWNSeVKVqmg==",
- "requires": {
- "@rokucommunity/bslib": "^0.1.1",
- "@xml-tools/parser": "^1.0.7",
- "array-flat-polyfill": "^1.0.1",
- "chalk": "^2.4.2",
- "chevrotain": "^7.0.1",
- "chokidar": "^3.5.1",
- "clear": "^0.1.0",
- "cross-platform-clear-console": "^2.3.0",
- "debounce-promise": "^3.1.0",
- "eventemitter3": "^4.0.0",
- "fast-glob": "^3.2.11",
- "file-url": "^3.0.0",
- "fs-extra": "^8.0.0",
- "jsonc-parser": "^2.3.0",
- "long": "^3.2.0",
- "luxon": "^2.5.2",
- "minimatch": "^3.0.4",
- "moment": "^2.23.0",
- "p-settle": "^2.1.0",
- "parse-ms": "^2.1.0",
- "require-relative": "^0.8.7",
- "roku-deploy": "^3.10.0",
- "serialize-error": "^7.0.1",
- "source-map": "^0.7.4",
- "vscode-languageserver": "7.0.0",
- "vscode-languageserver-protocol": "3.16.0",
- "vscode-languageserver-textdocument": "^1.0.1",
- "vscode-uri": "^2.1.1",
- "xml2js": "^0.4.19",
- "yargs": "^16.2.0"
- },
- "dependencies": {
- "jsonc-parser": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz",
- "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg=="
- },
- "yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "requires": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- }
- }
- }
- },
- "fs-extra": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
- "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
- "requires": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "glob-all": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.3.1.tgz",
- "integrity": "sha512-Y+ESjdI7ZgMwfzanHZYQ87C59jOO0i+Hd+QYtVt9PhLi6d8wlOpzQnfBxWUlaTuAoR3TkybLqqbIoWveU4Ji7Q==",
- "requires": {
- "glob": "^7.2.3",
- "yargs": "^15.3.1"
- },
- "dependencies": {
- "cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
- },
- "yargs": {
- "version": "15.4.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
- "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
- "requires": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.2"
- }
- },
- "yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- }
- }
- },
- "jsonc-parser": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
- "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w=="
- },
- "wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- }
- }
- },
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
- },
- "caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
- },
- "ccount": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
- "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
- "dev": true
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "requires": {
- "color-convert": "^1.9.0"
- }
- }
- }
- },
- "character-entities": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
- "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
- "dev": true
- },
- "chevrotain": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-7.1.2.tgz",
- "integrity": "sha512-9bQsXVQ7UAvzMs7iUBBJ9Yv//exOy7bIR3PByOEk4M64vIE/LsiOiX7VIkMF/vEMlrSStwsaE884Bp9CpjtC5g==",
- "requires": {
- "regexp-to-ast": "0.5.0"
- }
- },
- "chokidar": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
- "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
- "requires": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "fsevents": "~2.3.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- }
- },
- "clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "dev": true
- },
- "clear": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/clear/-/clear-0.1.0.tgz",
- "integrity": "sha512-qMjRnoL+JDPJHeLePZJuao6+8orzHMGP04A8CdwCNsKhRbOnKRjefxONR7bwILT3MHecxKBjHkKL/tkZ8r4Uzw=="
- },
- "cli": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz",
- "integrity": "sha512-41U72MB56TfUMGndAKK8vJ78eooOD4Z5NOL4xEfjc0c23s+6EYKXlXsmACBVclLP1yOfWCgEganVzddVrSNoTg==",
- "dev": true,
- "requires": {
- "exit": "0.1.2",
- "glob": "^7.1.1"
- }
- },
- "cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
- },
- "combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "command-line-args": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz",
- "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==",
- "dev": true,
- "requires": {
- "array-back": "^3.1.0",
- "find-replace": "^3.0.0",
- "lodash.camelcase": "^4.3.0",
- "typical": "^4.0.0"
- }
- },
- "command-line-usage": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.5.tgz",
- "integrity": "sha512-d8NrGylA5oCXSbGoKz05FkehDAzSmIm4K03S5VDh4d5lZAtTWfc3D1RuETtuQCn8129nYfJfDdF7P/lwcz1BlA==",
- "dev": true,
- "requires": {
- "array-back": "^2.0.0",
- "chalk": "^2.4.1",
- "table-layout": "^0.4.3",
- "typical": "^2.6.1"
- },
- "dependencies": {
- "array-back": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
- "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
- "dev": true,
- "requires": {
- "typical": "^2.6.1"
- }
- },
- "typical": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
- "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==",
- "dev": true
- }
- }
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
- },
- "console-browserify": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
- "integrity": "sha512-duS7VP5pvfsNLDvL1O4VOEbw37AI3A4ZUQYemvDlnpGrNu9tprR7BYWpDYwC0Xia0Zxz5ZupdiIrUp0GH1aXfg==",
- "dev": true,
- "requires": {
- "date-now": "^0.1.4"
- }
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
- },
- "cross-platform-clear-console": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/cross-platform-clear-console/-/cross-platform-clear-console-2.3.0.tgz",
- "integrity": "sha512-To+sJ6plHHC6k5DfdvSVn6F1GRGJh/R6p76bCpLbyMyHEmbqFyuMAeGwDcz/nGDWH3HUcjFTTX9iUSCzCg9Eiw=="
- },
- "dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "date-format": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz",
- "integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ==",
- "dev": true
- },
- "date-now": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
- "integrity": "sha512-AsElvov3LoNB7tf5k37H2jYSB+ZZPMT5sG2QjJCcdlV5chIv6htBUBUui2IKRjgtKAKtCBN7Zbwa+MtwLjSeNw==",
- "dev": true
- },
- "dateformat": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
- "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q=="
- },
- "dayjs": {
- "version": "1.11.2",
- "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.2.tgz",
- "integrity": "sha512-F4LXf1OeU9hrSYRPTTj/6FbO4HTjPKXvEIC1P2kcnFurViINCVk3ZV0xAS3XVx9MkMsXbbqlK6hjseaYbgKEHw=="
- },
- "debounce-promise": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/debounce-promise/-/debounce-promise-3.1.2.tgz",
- "integrity": "sha512-rZHcgBkbYavBeD9ej6sP56XfG53d51CD4dnaw989YX/nZ/ZJfgRx/9ePKmTNiUiyQvh4mtrMoS3OAWW+yoYtpg=="
- },
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
- },
- "decode-named-character-reference": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz",
- "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==",
- "dev": true,
- "requires": {
- "character-entities": "^2.0.0"
- }
- },
- "deep-extend": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
- "dev": true
- },
- "del": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz",
- "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==",
- "dev": true,
- "requires": {
- "globby": "^11.0.1",
- "graceful-fs": "^4.2.4",
- "is-glob": "^4.0.1",
- "is-path-cwd": "^2.2.0",
- "is-path-inside": "^3.0.2",
- "p-map": "^4.0.0",
- "rimraf": "^3.0.2",
- "slash": "^3.0.0"
- },
- "dependencies": {
- "slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true
- }
- }
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
- },
- "dequal": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
- "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
- "dev": true
- },
- "dictionary-en": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/dictionary-en/-/dictionary-en-3.2.0.tgz",
- "integrity": "sha512-oujbJhuplUTlDntmOoultEcNyk8ge7cFI6yXNn7eJvpbBJOhGNhWtK0XjOJsiwl4EfIeyvDKwGB95vJXv1d+lQ==",
- "dev": true
- },
- "dictionary-en-au": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/dictionary-en-au/-/dictionary-en-au-2.4.0.tgz",
- "integrity": "sha512-SEETr3rqt26/Umc43gemwaH/ez4gPv7I4alifu/QLi8uxiCm6a7cn3wKb22HNB5l6j/R7/Sfkq9NTKk/QRVUHw==",
- "dev": true
- },
- "dictionary-en-ca": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/dictionary-en-ca/-/dictionary-en-ca-2.4.0.tgz",
- "integrity": "sha512-uDoOe7/dz1XD3niVpOroSo3Pas7cdsAp+NSwfan30MGzzeXaD04lQuTRDqHpsXuP8fq3U7f9v8Iaiyk5q/kgzw==",
- "dev": true
- },
- "dictionary-en-gb": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/dictionary-en-gb/-/dictionary-en-gb-2.4.0.tgz",
- "integrity": "sha512-zwc7e6CM/+Em+v74a5/ia6663nwR9vvtEayaX5WkgvHD99al1qm/RbcdLludqX3mggYxXXFN1zN5hzyREW/DXg==",
- "dev": true
- },
- "dictionary-en-za": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/dictionary-en-za/-/dictionary-en-za-2.2.0.tgz",
- "integrity": "sha512-YFod3pshfaecqCe221rczW5lVWn4ZhfFH6E395DN1bEbL4dUndGm9Bn/zxMOU2w9imYKwptYalO23hetwUx+OA==",
- "dev": true
- },
- "dictionary-vi": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/dictionary-vi/-/dictionary-vi-2.2.0.tgz",
- "integrity": "sha512-WDCaSzHMtayCIEa2hPq0rL8ds603SKNzMzNXU0kbLM7kzXoaXaKeHgPXJHKjKMxxnozKLMsg+rES7hC6Lxe7iA==",
- "dev": true
- },
- "diff": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz",
- "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==",
- "dev": true
- },
- "dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "dev": true,
- "requires": {
- "path-type": "^4.0.0"
- }
- },
- "dom-serializer": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
- "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
- "dev": true,
- "requires": {
- "domelementtype": "^2.0.1",
- "entities": "^2.0.0"
- },
- "dependencies": {
- "domelementtype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
- "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
- "dev": true
- },
- "entities": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
- "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
- "dev": true
- }
- }
- },
- "domelementtype": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
- "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
- "dev": true
- },
- "domhandler": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz",
- "integrity": "sha512-q9bUwjfp7Eif8jWxxxPSykdRZAb6GkguBGSgvvCrhI9wB71W2K/Kvv4E61CF/mcCfnVJDeDWx/Vb/uAqbDj6UQ==",
- "dev": true,
- "requires": {
- "domelementtype": "1"
- }
- },
- "domutils": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
- "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==",
- "dev": true,
- "requires": {
- "dom-serializer": "0",
- "domelementtype": "1"
- }
- },
- "ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
- "requires": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "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=="
- },
- "emoticon": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-4.0.1.tgz",
- "integrity": "sha512-dqx7eA9YaqyvYtUhJwT4rC1HIp82j5ybS1/vQ42ur+jBe17dJMwZE4+gvL1XadSFfxaPFFGt3Xsw+Y8akThDlw==",
- "dev": true
- },
- "entities": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz",
- "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==",
- "dev": true
- },
- "error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dev": true,
- "requires": {
- "is-arrayish": "^0.2.1"
- }
- },
- "escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true
- },
- "eventemitter3": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
- "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
- },
- "exit": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
- "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
- "dev": true
- },
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
- },
- "extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
- },
- "fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
- },
- "fast-glob": {
- "version": "3.2.12",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
- "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
- "requires": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- }
- },
- "fast-json-stable-stringify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
- "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
- },
- "fast-safe-stringify": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
- "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
- "dev": true
- },
- "fastq": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
- "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
- "requires": {
- "reusify": "^1.0.4"
- }
- },
- "fault": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz",
- "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==",
- "dev": true,
- "requires": {
- "format": "^0.2.0"
- }
- },
- "file-url": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/file-url/-/file-url-3.0.0.tgz",
- "integrity": "sha512-g872QGsHexznxkIAdK8UiZRe7SkE6kvylShU4Nsj8NvfvZag7S0QuQ4IgvPDkk75HxgjIVDwycFTDAgIiO4nDA=="
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "find-replace": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz",
- "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==",
- "dev": true,
- "requires": {
- "array-back": "^3.0.1"
- }
- },
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
- },
- "form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- }
- },
- "format": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
- "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==",
- "dev": true
- },
- "fs-extra": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
- "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "dependencies": {
- "jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.6",
- "universalify": "^2.0.0"
- }
- },
- "universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
- "dev": true
- }
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
- },
- "fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "optional": true
- },
- "gemoji": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/gemoji/-/gemoji-7.1.0.tgz",
- "integrity": "sha512-wI0YWDIfQraQMDs0yXAVQiVBZeMm/rIYssf8LZlMDdssKF19YqJKOHkv4zvwtVQTBJ0LNmErv1S+DqlVUudz8g==",
- "dev": true
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
- },
- "getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "requires": {
- "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==",
- "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-all": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.2.1.tgz",
- "integrity": "sha512-x877rVkzB3ipid577QOp+eQCR6M5ZyiwrtaYgrX/z3EThaSPFtLDwBXFHc3sH1cG0R0vFYI5SRYeWMMSEyXkUw==",
- "dev": true,
- "requires": {
- "glob": "^7.1.2",
- "yargs": "^15.3.1"
- },
- "dependencies": {
- "cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
- "dev": true
- },
- "yargs": {
- "version": "15.4.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
- "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
- "dev": true,
- "requires": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.2"
- }
- },
- "yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "dev": true,
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- }
- }
- },
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "globby": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
- "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
- "dev": true,
- "requires": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
- },
- "dependencies": {
- "slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true
- }
- }
- },
- "graceful-fs": {
- "version": "4.2.10",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
- "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
- },
- "har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
- },
- "har-validator": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
- "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
- "requires": {
- "ajv": "^6.5.5",
- "har-schema": "^2.0.0"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="
- },
- "htmlparser2": {
- "version": "3.8.3",
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz",
- "integrity": "sha512-hBxEg3CYXe+rPIua8ETe7tmG3XDn9B0edOE/e9wH2nLczxzgdu0m0aNHY+5wFZiviLWLdANPJTssa92dMcXQ5Q==",
- "dev": true,
- "requires": {
- "domelementtype": "1",
- "domhandler": "2.3",
- "domutils": "1.5",
- "entities": "1.0",
- "readable-stream": "1.1"
- },
- "dependencies": {
- "entities": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz",
- "integrity": "sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ==",
- "dev": true
- },
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
- "dev": true
- },
- "readable-stream": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
- "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==",
- "dev": true
- }
- }
- },
- "http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- }
- },
- "ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
- "dev": true
- },
- "ignore-walk": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz",
- "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==",
- "dev": true,
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
- "immediate": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
- "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
- },
- "indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "intKeyboard": {
- "version": "npm:integer-keyboard@1.0.12",
- "resolved": "https://registry.npmjs.org/integer-keyboard/-/integer-keyboard-1.0.12.tgz",
- "integrity": "sha512-DSLyd/PvtEBfc4grICTxSLu94Yo/Vm6rNerRZRbbzRrP0HQ9pYaquoY2RD9x6gAmica43gsFimScNpuRYVe54w=="
- },
- "is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true
- },
- "is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "requires": {
- "binary-extensions": "^2.0.0"
- }
- },
- "is-buffer": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
- "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
- "dev": true
- },
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
- },
- "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=="
- },
- "is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
- },
- "is-path-cwd": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
- "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
- "dev": true
- },
- "is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
- "dev": true
- },
- "is-plain-obj": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
- "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
- "dev": true
- },
- "is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
- },
- "jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
- },
- "jshint": {
- "version": "2.13.6",
- "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.6.tgz",
- "integrity": "sha512-IVdB4G0NTTeQZrBoM8C5JFVLjV2KtZ9APgybDA1MK73xb09qFs0jCXyQLnCOp1cSZZZbvhq/6mfXHUTaDkffuQ==",
- "dev": true,
- "requires": {
- "cli": "~1.0.0",
- "console-browserify": "1.1.x",
- "exit": "0.1.x",
- "htmlparser2": "3.8.x",
- "lodash": "~4.17.21",
- "minimatch": "~3.0.2",
- "strip-json-comments": "1.0.x"
- },
- "dependencies": {
- "minimatch": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz",
- "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "strip-json-comments": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz",
- "integrity": "sha512-AOPG8EBc5wAikaG1/7uFCNFJwnKOuQwFTpYBdTW6OvWHeZBQBrAA/amefHGrEiOnCPcLFZK6FUPtWVKpQVIRgg==",
- "dev": true
- }
- }
- },
- "json-parse-better-errors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
- "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
- "dev": true
- },
- "json-schema": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
- "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
- },
- "jsonc": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/jsonc/-/jsonc-2.0.0.tgz",
- "integrity": "sha512-B281bLCT2TRMQa+AQUQY5AGcqSOXBOKaYGP4wDzoA/+QswUfN8sODektbPEs9Baq7LGKun5jQbNFpzwGuVYKhw==",
- "dev": true,
- "requires": {
- "fast-safe-stringify": "^2.0.6",
- "graceful-fs": "^4.1.15",
- "mkdirp": "^0.5.1",
- "parse-json": "^4.0.0",
- "strip-bom": "^4.0.0",
- "strip-json-comments": "^3.0.1"
- }
- },
- "jsonc-parser": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz",
- "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg=="
- },
- "jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- },
- "jsprim": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
- "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.4.0",
- "verror": "1.10.0"
- }
- },
- "jszip": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
- "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
- "requires": {
- "lie": "~3.3.0",
- "pako": "~1.0.2",
- "readable-stream": "~2.3.6",
- "setimmediate": "^1.0.5"
- }
- },
- "junit-report-builder": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/junit-report-builder/-/junit-report-builder-3.0.1.tgz",
- "integrity": "sha512-B8AZ2q24iGwPM3j/ZHc9nD0BY1rKhcnWCA1UvT8mhHfR8Vo/HTtg3ojMyo55BgctqQGZG7H8z0+g+mEUc32jgg==",
- "dev": true,
- "requires": {
- "date-format": "4.0.3",
- "lodash": "^4.17.21",
- "make-dir": "^3.1.0",
- "xmlbuilder": "^15.1.1"
- },
- "dependencies": {
- "xmlbuilder": {
- "version": "15.1.1",
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz",
- "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==",
- "dev": true
- }
- }
- },
- "kleur": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
- "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
- "dev": true
- },
- "latinize": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/latinize/-/latinize-0.5.0.tgz",
- "integrity": "sha512-SHzxgdcFP/64lUEfX3183QALY2KdSQxad3gmhCc/b03QN1mbx0AnJWvsQjqoJLbucY9pJuK+NMbnasUIocDmnQ==",
- "dev": true
- },
- "lie": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
- "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
- "requires": {
- "immediate": "~3.0.5"
- }
- },
- "linkify-it": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz",
- "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==",
- "dev": true,
- "requires": {
- "uc.micro": "^1.0.1"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
- },
- "lodash.camelcase": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
- "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
- "dev": true
- },
- "lodash.padend": {
- "version": "4.6.1",
- "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
- "integrity": "sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw==",
- "dev": true
- },
- "long": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz",
- "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s="
- },
- "longest-streak": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
- "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
- "dev": true
- },
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "luxon": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/luxon/-/luxon-2.5.2.tgz",
- "integrity": "sha512-Yg7/RDp4nedqmLgyH0LwgGRvMEKVzKbUdkBYyCosbHgJ+kaOUx0qzSiSatVc3DFygnirTPYnMM2P5dg2uH1WvA=="
- },
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dev": true,
- "requires": {
- "semver": "^6.0.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
- }
- },
- "markdown-it": {
- "version": "13.0.1",
- "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz",
- "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==",
- "dev": true,
- "requires": {
- "argparse": "^2.0.1",
- "entities": "~3.0.1",
- "linkify-it": "^4.0.1",
- "mdurl": "^1.0.1",
- "uc.micro": "^1.0.5"
- }
- },
- "markdownlint": {
- "version": "0.27.0",
- "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.27.0.tgz",
- "integrity": "sha512-HtfVr/hzJJmE0C198F99JLaeada+646B5SaG2pVoEakLFI6iRGsvMqrnnrflq8hm1zQgwskEgqSnhDW11JBp0w==",
- "dev": true,
- "requires": {
- "markdown-it": "13.0.1"
- }
- },
- "markdownlint-cli2": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/markdownlint-cli2/-/markdownlint-cli2-0.6.0.tgz",
- "integrity": "sha512-Bv20r6WGdcHMWi8QvAFZ3CBunf4i4aYmVdTfpAvXODI/1k3f09DZZ0i0LcX9ZMhlVxjoOzbVDz1NWyKc5hwTqg==",
- "dev": true,
- "requires": {
- "globby": "13.1.3",
- "markdownlint": "0.27.0",
- "markdownlint-cli2-formatter-default": "0.0.3",
- "micromatch": "4.0.5",
- "strip-json-comments": "5.0.0",
- "yaml": "2.2.1"
- },
- "dependencies": {
- "globby": {
- "version": "13.1.3",
- "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz",
- "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==",
- "dev": true,
- "requires": {
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.11",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^4.0.0"
- }
- },
- "strip-json-comments": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.0.tgz",
- "integrity": "sha512-V1LGY4UUo0jgwC+ELQ2BNWfPa17TIuwBLg+j1AA/9RPzKINl1lhxVEu2r+ZTTO8aetIsUzE5Qj6LMSBkoGYKKw==",
- "dev": true
- }
- }
- },
- "markdownlint-cli2-formatter-default": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/markdownlint-cli2-formatter-default/-/markdownlint-cli2-formatter-default-0.0.3.tgz",
- "integrity": "sha512-QEAJitT5eqX1SNboOD+SO/LNBpu4P4je8JlR02ug2cLQAqmIhh8IJnSK7AcaHBHhNADqdGydnPpQOpsNcEEqCw==",
- "dev": true,
- "requires": {}
- },
- "mdast-util-from-markdown": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.0.tgz",
- "integrity": "sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==",
- "dev": true,
- "requires": {
- "@types/mdast": "^3.0.0",
- "@types/unist": "^2.0.0",
- "decode-named-character-reference": "^1.0.0",
- "mdast-util-to-string": "^3.1.0",
- "micromark": "^3.0.0",
- "micromark-util-decode-numeric-character-reference": "^1.0.0",
- "micromark-util-decode-string": "^1.0.0",
- "micromark-util-normalize-identifier": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0",
- "unist-util-stringify-position": "^3.0.0",
- "uvu": "^0.5.0"
- }
- },
- "mdast-util-frontmatter": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-1.0.1.tgz",
- "integrity": "sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==",
- "dev": true,
- "requires": {
- "@types/mdast": "^3.0.0",
- "mdast-util-to-markdown": "^1.3.0",
- "micromark-extension-frontmatter": "^1.0.0"
- }
- },
- "mdast-util-phrasing": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz",
- "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==",
- "dev": true,
- "requires": {
- "@types/mdast": "^3.0.0",
- "unist-util-is": "^5.0.0"
- }
- },
- "mdast-util-to-markdown": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz",
- "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==",
- "dev": true,
- "requires": {
- "@types/mdast": "^3.0.0",
- "@types/unist": "^2.0.0",
- "longest-streak": "^3.0.0",
- "mdast-util-phrasing": "^3.0.0",
- "mdast-util-to-string": "^3.0.0",
- "micromark-util-decode-string": "^1.0.0",
- "unist-util-visit": "^4.0.0",
- "zwitch": "^2.0.0"
- },
- "dependencies": {
- "unist-util-visit": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
- "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^5.0.0",
- "unist-util-visit-parents": "^5.1.1"
- }
- },
- "unist-util-visit-parents": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz",
- "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^5.0.0"
- }
- }
- }
- },
- "mdast-util-to-nlcst": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/mdast-util-to-nlcst/-/mdast-util-to-nlcst-5.2.1.tgz",
- "integrity": "sha512-Xznpj85MsJnLQjBboajOovT2fAAvbbbmYutpFgzLi9pjZEOkgGzjq+t6fHcge8uzZ5uEkj5pigzw2QrnIVq/kw==",
- "dev": true,
- "requires": {
- "@types/mdast": "^3.0.0",
- "@types/nlcst": "^1.0.0",
- "@types/unist": "^2.0.0",
- "nlcst-to-string": "^3.0.0",
- "unist-util-position": "^4.0.0",
- "vfile": "^5.0.0",
- "vfile-location": "^4.0.0"
- },
- "dependencies": {
- "vfile": {
- "version": "5.3.7",
- "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz",
- "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "is-buffer": "^2.0.0",
- "unist-util-stringify-position": "^3.0.0",
- "vfile-message": "^3.0.0"
- }
- },
- "vfile-message": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz",
- "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "unist-util-stringify-position": "^3.0.0"
- }
- }
- }
- },
- "mdast-util-to-string": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.1.tgz",
- "integrity": "sha512-tGvhT94e+cVnQt8JWE9/b3cUQZWS732TJxXHktvP+BYo62PpYD53Ls/6cC60rW21dW+txxiM4zMdc6abASvZKA==",
- "dev": true,
- "requires": {
- "@types/mdast": "^3.0.0"
- }
- },
- "mdurl": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
- "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==",
- "dev": true
- },
- "merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
- },
- "micromark": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz",
- "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==",
- "dev": true,
- "requires": {
- "@types/debug": "^4.0.0",
- "debug": "^4.0.0",
- "decode-named-character-reference": "^1.0.0",
- "micromark-core-commonmark": "^1.0.1",
- "micromark-factory-space": "^1.0.0",
- "micromark-util-character": "^1.0.0",
- "micromark-util-chunked": "^1.0.0",
- "micromark-util-combine-extensions": "^1.0.0",
- "micromark-util-decode-numeric-character-reference": "^1.0.0",
- "micromark-util-encode": "^1.0.0",
- "micromark-util-normalize-identifier": "^1.0.0",
- "micromark-util-resolve-all": "^1.0.0",
- "micromark-util-sanitize-uri": "^1.0.0",
- "micromark-util-subtokenize": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.1",
- "uvu": "^0.5.0"
- }
- },
- "micromark-core-commonmark": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz",
- "integrity": "sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==",
- "dev": true,
- "requires": {
- "decode-named-character-reference": "^1.0.0",
- "micromark-factory-destination": "^1.0.0",
- "micromark-factory-label": "^1.0.0",
- "micromark-factory-space": "^1.0.0",
- "micromark-factory-title": "^1.0.0",
- "micromark-factory-whitespace": "^1.0.0",
- "micromark-util-character": "^1.0.0",
- "micromark-util-chunked": "^1.0.0",
- "micromark-util-classify-character": "^1.0.0",
- "micromark-util-html-tag-name": "^1.0.0",
- "micromark-util-normalize-identifier": "^1.0.0",
- "micromark-util-resolve-all": "^1.0.0",
- "micromark-util-subtokenize": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.1",
- "uvu": "^0.5.0"
- }
- },
- "micromark-extension-frontmatter": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-1.0.0.tgz",
- "integrity": "sha512-EXjmRnupoX6yYuUJSQhrQ9ggK0iQtQlpi6xeJzVD5xscyAI+giqco5fdymayZhJMbIFecjnE2yz85S9NzIgQpg==",
- "dev": true,
- "requires": {
- "fault": "^2.0.0",
- "micromark-util-character": "^1.0.0",
- "micromark-util-symbol": "^1.0.0"
- }
- },
- "micromark-factory-destination": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz",
- "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==",
- "dev": true,
- "requires": {
- "micromark-util-character": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0"
- }
- },
- "micromark-factory-label": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz",
- "integrity": "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==",
- "dev": true,
- "requires": {
- "micromark-util-character": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0",
- "uvu": "^0.5.0"
- }
- },
- "micromark-factory-space": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz",
- "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==",
- "dev": true,
- "requires": {
- "micromark-util-character": "^1.0.0",
- "micromark-util-types": "^1.0.0"
- }
- },
- "micromark-factory-title": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz",
- "integrity": "sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==",
- "dev": true,
- "requires": {
- "micromark-factory-space": "^1.0.0",
- "micromark-util-character": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0",
- "uvu": "^0.5.0"
- }
- },
- "micromark-factory-whitespace": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz",
- "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==",
- "dev": true,
- "requires": {
- "micromark-factory-space": "^1.0.0",
- "micromark-util-character": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0"
- }
- },
- "micromark-util-character": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz",
- "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==",
- "dev": true,
- "requires": {
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0"
- }
- },
- "micromark-util-chunked": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz",
- "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==",
- "dev": true,
- "requires": {
- "micromark-util-symbol": "^1.0.0"
- }
- },
- "micromark-util-classify-character": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz",
- "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==",
- "dev": true,
- "requires": {
- "micromark-util-character": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0"
- }
- },
- "micromark-util-combine-extensions": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz",
- "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==",
- "dev": true,
- "requires": {
- "micromark-util-chunked": "^1.0.0",
- "micromark-util-types": "^1.0.0"
- }
- },
- "micromark-util-decode-numeric-character-reference": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz",
- "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==",
- "dev": true,
- "requires": {
- "micromark-util-symbol": "^1.0.0"
- }
- },
- "micromark-util-decode-string": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz",
- "integrity": "sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==",
- "dev": true,
- "requires": {
- "decode-named-character-reference": "^1.0.0",
- "micromark-util-character": "^1.0.0",
- "micromark-util-decode-numeric-character-reference": "^1.0.0",
- "micromark-util-symbol": "^1.0.0"
- }
- },
- "micromark-util-encode": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz",
- "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==",
- "dev": true
- },
- "micromark-util-html-tag-name": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz",
- "integrity": "sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==",
- "dev": true
- },
- "micromark-util-normalize-identifier": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz",
- "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==",
- "dev": true,
- "requires": {
- "micromark-util-symbol": "^1.0.0"
- }
- },
- "micromark-util-resolve-all": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz",
- "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==",
- "dev": true,
- "requires": {
- "micromark-util-types": "^1.0.0"
- }
- },
- "micromark-util-sanitize-uri": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.1.0.tgz",
- "integrity": "sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==",
- "dev": true,
- "requires": {
- "micromark-util-character": "^1.0.0",
- "micromark-util-encode": "^1.0.0",
- "micromark-util-symbol": "^1.0.0"
- }
- },
- "micromark-util-subtokenize": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz",
- "integrity": "sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==",
- "dev": true,
- "requires": {
- "micromark-util-chunked": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0",
- "uvu": "^0.5.0"
- }
- },
- "micromark-util-symbol": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz",
- "integrity": "sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==",
- "dev": true
- },
- "micromark-util-types": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz",
- "integrity": "sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==",
- "dev": true
- },
- "micromatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
- "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
- "requires": {
- "braces": "^3.0.2",
- "picomatch": "^2.3.1"
- }
- },
- "mime-db": {
- "version": "1.40.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
- "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA=="
- },
- "mime-types": {
- "version": "2.1.24",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
- "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
- "requires": {
- "mime-db": "1.40.0"
- }
- },
- "minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
- "dev": true
- },
- "mkdirp": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
- "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.6"
- }
- },
- "moment": {
- "version": "2.29.4",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
- "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w=="
- },
- "mri": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
- "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
- "dev": true
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "nlcst-affix-emoticon-modifier": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/nlcst-affix-emoticon-modifier/-/nlcst-affix-emoticon-modifier-2.1.1.tgz",
- "integrity": "sha512-0kOpSNwB6pFMoe5tWFZ3KrvW6ftVqvnXW+jQw3EJnXkzXdAmdhbcoG9r+NMvJ0nc37BLYlEy5A+FGlB8IOfq5A==",
- "dev": true,
- "requires": {
- "@types/nlcst": "^1.0.0",
- "@types/unist": "^2.0.0",
- "nlcst-emoticon-modifier": "^2.0.0",
- "unist-util-modify-children": "^3.0.0"
- }
- },
- "nlcst-emoji-modifier": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/nlcst-emoji-modifier/-/nlcst-emoji-modifier-5.2.0.tgz",
- "integrity": "sha512-bxgOEDWN2hz6/JN0uiIww+28Ssktq9FRctHq3bxiBi/8G/mb72cQ99vhzrZMWZe8tKD3YYckVH1bEkzcxTJFxg==",
- "dev": true,
- "requires": {
- "@types/nlcst": "^1.0.0",
- "emoji-regex": "^10.0.0",
- "gemoji": "^8.0.0",
- "nlcst-emoticon-modifier": "^2.0.0",
- "nlcst-to-string": "^3.0.0",
- "unist-util-generated": "^2.0.0",
- "unist-util-position": "^4.0.0",
- "unist-util-visit": "^4.0.0"
- },
- "dependencies": {
- "emoji-regex": {
- "version": "10.2.1",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.2.1.tgz",
- "integrity": "sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==",
- "dev": true
- },
- "gemoji": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/gemoji/-/gemoji-8.0.0.tgz",
- "integrity": "sha512-MNjL3CO4OIq07S3GV1KZ6Wedz+iNmdPBuqylZtMAimdaw7Zsvp2xbjEuiST53YQXp6SBMFC4aMje6epYm85lMQ==",
- "dev": true
- },
- "unist-util-visit": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
- "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^5.0.0",
- "unist-util-visit-parents": "^5.1.1"
- }
- },
- "unist-util-visit-parents": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz",
- "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^5.0.0"
- }
- }
- }
- },
- "nlcst-emoticon-modifier": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/nlcst-emoticon-modifier/-/nlcst-emoticon-modifier-2.1.1.tgz",
- "integrity": "sha512-fDfvvmA6ziUQC+I3BYLNZ7lq0rIG3Uz6IsmhTAkdB8d9UyI5LPz1uvmk+W7fKkX1mVWGJw0PeOT9VtXISrPFbg==",
- "dev": true,
- "requires": {
- "@types/nlcst": "^1.0.0",
- "@types/unist": "^2.0.0",
- "emoticon": "^4.0.0",
- "nlcst-to-string": "^3.0.0",
- "unist-util-modify-children": "^3.0.0"
- }
- },
- "nlcst-is-literal": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/nlcst-is-literal/-/nlcst-is-literal-2.1.1.tgz",
- "integrity": "sha512-/PyEKNHN+SrcrmnZRwszzZYbvZSN2AVD506+rfMUzyFHB0PtUmqZOdUuXmQxQeZXv6o29pT5chLjQJdC9weOCQ==",
- "dev": true,
- "requires": {
- "@types/nlcst": "^1.0.0",
- "@types/unist": "^2.0.0",
- "nlcst-to-string": "^3.0.0"
- }
- },
- "nlcst-to-string": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-3.1.1.tgz",
- "integrity": "sha512-63mVyqaqt0cmn2VcI2aH6kxe1rLAmSROqHMA0i4qqg1tidkfExgpb0FGMikMCn86mw5dFtBtEANfmSSK7TjNHw==",
- "dev": true,
- "requires": {
- "@types/nlcst": "^1.0.0"
- }
- },
- "normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
- },
- "npm-bundled": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz",
- "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==",
- "dev": true,
- "requires": {
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "npm-normalize-package-bin": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz",
- "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==",
- "dev": true
- },
- "npm-packlist": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.1.4.tgz",
- "integrity": "sha512-Qzg2pvXC9U4I4fLnUrBmcIT4x0woLtUgxUi9eC+Zrcv1Xx5eamytGAfbDWQ67j7xOcQ2VW1I3su9smVTIdu7Hw==",
- "dev": true,
- "requires": {
- "glob": "^7.1.6",
- "ignore-walk": "^3.0.3",
- "npm-bundled": "^1.1.1",
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "nspell": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/nspell/-/nspell-2.1.5.tgz",
- "integrity": "sha512-PSStyugKMiD9mHmqI/CR5xXrSIGejUXPlo88FBRq5Og1kO5QwQ5Ilu8D8O5I/SHpoS+mibpw6uKA8rd3vXd2Sg==",
- "dev": true,
- "requires": {
- "is-buffer": "^2.0.0"
- }
- },
- "number-to-words": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/number-to-words/-/number-to-words-1.2.4.tgz",
- "integrity": "sha512-/fYevVkXRcyBiZDg6yzZbm0RuaD6i0qRfn8yr+6D0KgBMOndFPxuW10qCHpzs50nN8qKuv78k8MuotZhcVX6Pw==",
- "dev": true
- },
- "oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "requires": {
- "wrappy": "1"
- }
- },
- "p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "requires": {
- "p-try": "^1.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "requires": {
- "p-limit": "^2.2.0"
- },
- "dependencies": {
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
- }
- }
- },
- "p-map": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
- "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
- "dev": true,
- "requires": {
- "aggregate-error": "^3.0.0"
- }
- },
- "p-reflect": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-reflect/-/p-reflect-1.0.0.tgz",
- "integrity": "sha1-9Poe4btUbY6z7AMhFI3+CnkTe7g="
- },
- "p-settle": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-settle/-/p-settle-2.1.0.tgz",
- "integrity": "sha512-NHFIUYc+fQTFRrzzAugq0l1drwi57PB522smetcY8C/EoTYs6cU/fC6TJj0N3rq5NhhJJbhf0VGWziL3jZDnjA==",
- "requires": {
- "p-limit": "^1.2.0",
- "p-reflect": "^1.0.0"
- }
- },
- "p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M="
- },
- "pako": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
- "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
- },
- "parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==",
- "dev": true,
- "requires": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- }
- },
- "parse-latin": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-5.0.1.tgz",
- "integrity": "sha512-b/K8ExXaWC9t34kKeDV8kGXBkXZ1HCSAZRYE7HR14eA1GlXX5L8iWhs8USJNhQU9q5ci413jCKF0gOyovvyRBg==",
- "dev": true,
- "requires": {
- "nlcst-to-string": "^3.0.0",
- "unist-util-modify-children": "^3.0.0",
- "unist-util-visit-children": "^2.0.0"
- }
- },
- "parse-ms": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz",
- "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA=="
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
- },
- "path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true
- },
- "performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
- },
- "picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
- },
- "pkg-dir": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-6.0.1.tgz",
- "integrity": "sha512-C9R+PTCKGA32HG0n5I4JMYkdLL58ZpayVuncQHQrGeKa8o26A4o2x0u6BKekHG+Au0jv5ZW7Xfq1Cj6lm9Ag4w==",
- "dev": true,
- "requires": {
- "find-up": "^6.1.0"
- },
- "dependencies": {
- "find-up": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz",
- "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==",
- "dev": true,
- "requires": {
- "locate-path": "^7.1.0",
- "path-exists": "^5.0.0"
- }
- },
- "locate-path": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
- "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
- "dev": true,
- "requires": {
- "p-locate": "^6.0.0"
- }
- },
- "p-limit": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
- "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
- "dev": true,
- "requires": {
- "yocto-queue": "^1.0.0"
- }
- },
- "p-locate": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
- "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
- "dev": true,
- "requires": {
- "p-limit": "^4.0.0"
- }
- },
- "path-exists": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
- "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
- "dev": true
- }
- }
- },
- "process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
- },
- "psl": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
- "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
- },
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
- },
- "qs": {
- "version": "6.5.3",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
- "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="
- },
- "queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
- },
- "quotation": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/quotation/-/quotation-2.0.2.tgz",
- "integrity": "sha512-FeUlLe40ROXHVWLZkzmeR2PNYWdkvTXEXhW6FX8axRv1ODt8Gxed3APrE1Qb5i1n70ZzZGRmvs0jY3v/BRcJQQ==",
- "dev": true
- },
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "requires": {
- "picomatch": "^2.2.1"
- }
- },
- "reduce-flatten": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
- "integrity": "sha512-j5WfFJfc9CoXv/WbwVLHq74i/hdTUpy+iNC534LxczMRP67vJeK3V9JOdnL0N1cIRbn9mYhE2yVjvvKXDxvNXQ==",
- "dev": true
- },
- "regexp-to-ast": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/regexp-to-ast/-/regexp-to-ast-0.5.0.tgz",
- "integrity": "sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw=="
- },
- "remark": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/remark/-/remark-14.0.2.tgz",
- "integrity": "sha512-A3ARm2V4BgiRXaUo5K0dRvJ1lbogrbXnhkJRmD0yw092/Yl0kOCZt1k9ZeElEwkZsWGsMumz6qL5MfNJH9nOBA==",
- "dev": true,
- "requires": {
- "@types/mdast": "^3.0.0",
- "remark-parse": "^10.0.0",
- "remark-stringify": "^10.0.0",
- "unified": "^10.0.0"
- }
- },
- "remark-frontmatter": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-4.0.1.tgz",
- "integrity": "sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==",
- "dev": true,
- "requires": {
- "@types/mdast": "^3.0.0",
- "mdast-util-frontmatter": "^1.0.0",
- "micromark-extension-frontmatter": "^1.0.0",
- "unified": "^10.0.0"
- }
- },
- "remark-parse": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz",
- "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==",
- "dev": true,
- "requires": {
- "@types/mdast": "^3.0.0",
- "mdast-util-from-markdown": "^1.0.0",
- "unified": "^10.0.0"
- }
- },
- "remark-retext": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/remark-retext/-/remark-retext-5.0.1.tgz",
- "integrity": "sha512-h3kOjKNy7oJfohqXlKp+W4YDigHD3rw01x91qvQP/cUkK5nJrDl6yEYwTujQCAXSLZrsBxywlK3ntzIX6c29aA==",
- "dev": true,
- "requires": {
- "@types/mdast": "^3.0.0",
- "@types/unist": "^2.0.0",
- "mdast-util-to-nlcst": "^5.0.0",
- "unified": "^10.0.0"
- }
- },
- "remark-stringify": {
- "version": "10.0.2",
- "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.2.tgz",
- "integrity": "sha512-6wV3pvbPvHkbNnWB0wdDvVFHOe1hBRAx1Q/5g/EpH4RppAII6J8Gnwe7VbHuXaoKIF6LAg6ExTel/+kNqSQ7lw==",
- "dev": true,
- "requires": {
- "@types/mdast": "^3.0.0",
- "mdast-util-to-markdown": "^1.0.0",
- "unified": "^10.0.0"
- }
- },
- "repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
- "dev": true
- },
- "replace-ext": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
- "integrity": "sha512-vuNYXC7gG7IeVNBC1xUllqCcZKRbJoSPOBhnTEcAIiKCsbuef6zO3F0Rve3isPMMoNoQRWjQwbAgAjHUHniyEA==",
- "dev": true
- },
- "request": {
- "version": "2.88.2",
- "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
- "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
- "requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.3",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.5.0",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
- },
- "require-main-filename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
- },
- "require-relative": {
- "version": "0.8.7",
- "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz",
- "integrity": "sha512-AKGr4qvHiryxRb19m3PsLRGuKVAbJLUD7E6eOaHkfKhwc+vSgVOCY5xNvm9EkolBKTOf0GrQAZKLimOCz81Khg=="
- },
- "retext": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/retext/-/retext-8.1.0.tgz",
- "integrity": "sha512-N9/Kq7YTn6ZpzfiGW45WfEGJqFf1IM1q8OsRa1CGzIebCJBNCANDRmOrholiDRGKo/We7ofKR4SEvcGAWEMD3Q==",
- "dev": true,
- "requires": {
- "@types/nlcst": "^1.0.0",
- "retext-latin": "^3.0.0",
- "retext-stringify": "^3.0.0",
- "unified": "^10.0.0"
- }
- },
- "retext-emoji": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/retext-emoji/-/retext-emoji-8.1.0.tgz",
- "integrity": "sha512-cvT53Ttn6XXgNprhmI8p4qtwujxNwoHW8hHe2B0JLEMxrMzGTbxwKqnwGslLk/FDsH4dSYStmqnpE20auNSrNg==",
- "dev": true,
- "requires": {
- "@types/nlcst": "^1.0.0",
- "emoticon": "^4.0.0",
- "gemoji": "^7.0.0",
- "nlcst-affix-emoticon-modifier": "^2.0.0",
- "nlcst-emoji-modifier": "^5.0.0",
- "nlcst-emoticon-modifier": "^2.0.0",
- "nlcst-to-string": "^3.0.0",
- "unified": "^10.0.0",
- "unist-util-visit": "^4.0.0"
- },
- "dependencies": {
- "unist-util-visit": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
- "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^5.0.0",
- "unist-util-visit-parents": "^5.1.1"
- }
- },
- "unist-util-visit-parents": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz",
- "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^5.0.0"
- }
- }
- }
- },
- "retext-indefinite-article": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/retext-indefinite-article/-/retext-indefinite-article-4.2.0.tgz",
- "integrity": "sha512-qAAqK7tR+aX3kFIHlgO3zojLC9XmcIA96f68ooj8yhVN1iTDbrs0xHnGaBYc/9WCI2F4iyJUH8qZ2CBY2uTxAQ==",
- "dev": true,
- "requires": {
- "@types/nlcst": "^1.0.0",
- "format": "^0.2.0",
- "nlcst-to-string": "^3.0.0",
- "number-to-words": "^1.0.0",
- "unified": "^10.0.0",
- "unist-util-visit": "^4.0.0"
- },
- "dependencies": {
- "unist-util-visit": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
- "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^5.0.0",
- "unist-util-visit-parents": "^5.1.1"
- }
- },
- "unist-util-visit-parents": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz",
- "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^5.0.0"
- }
- }
- }
- },
- "retext-latin": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-3.1.0.tgz",
- "integrity": "sha512-5MrD1tuebzO8ppsja5eEu+ZbBeUNCjoEarn70tkXOS7Bdsdf6tNahsv2bY0Z8VooFF6cw7/6S+d3yI/TMlMVVQ==",
- "dev": true,
- "requires": {
- "@types/nlcst": "^1.0.0",
- "parse-latin": "^5.0.0",
- "unherit": "^3.0.0",
- "unified": "^10.0.0"
- }
- },
- "retext-repeated-words": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/retext-repeated-words/-/retext-repeated-words-4.2.0.tgz",
- "integrity": "sha512-Tle40/5Xy6KxI94s4XRqGXcj6aWUeCoQZUGQto8OjZP98t4tKVDRVG3QGodF633hVOEiN1vYqj0Zegqoe8XOaw==",
- "dev": true,
- "requires": {
- "@types/nlcst": "^1.0.0",
- "nlcst-to-string": "^3.0.0",
- "unified": "^10.0.0",
- "unist-util-position": "^4.0.0",
- "unist-util-visit": "^4.0.0"
- },
- "dependencies": {
- "unist-util-visit": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
- "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^5.0.0",
- "unist-util-visit-parents": "^5.1.1"
- }
- },
- "unist-util-visit-parents": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz",
- "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^5.0.0"
- }
- }
- }
- },
- "retext-spell": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/retext-spell/-/retext-spell-5.3.0.tgz",
- "integrity": "sha512-b4LLp5S7ScmE+qJ2gu7FKfJICcfIK/UYIn1L84gJNRjDJyVIXWgdqQ7kgoqduP1mH3fFiKz3YVyNS4hD3XTlWw==",
- "dev": true,
- "requires": {
- "@types/nlcst": "^1.0.0",
- "nlcst-is-literal": "^2.0.0",
- "nlcst-to-string": "^3.0.0",
- "nspell": "^2.0.0",
- "quotation": "^2.0.0",
- "unified": "^10.0.0",
- "unist-util-visit": "^4.0.0"
- },
- "dependencies": {
- "unist-util-visit": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
- "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^5.0.0",
- "unist-util-visit-parents": "^5.1.1"
- }
- },
- "unist-util-visit-parents": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz",
- "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^5.0.0"
- }
- }
- }
- },
- "retext-stringify": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-3.1.0.tgz",
- "integrity": "sha512-767TLOaoXFXyOnjx/EggXlb37ZD2u4P1n0GJqVdpipqACsQP+20W+BNpMYrlJkq7hxffnFk+jc6mAK9qrbuB8w==",
- "dev": true,
- "requires": {
- "@types/nlcst": "^1.0.0",
- "nlcst-to-string": "^3.0.0",
- "unified": "^10.0.0"
- }
- },
- "retext-syntax-mentions": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/retext-syntax-mentions/-/retext-syntax-mentions-3.1.0.tgz",
- "integrity": "sha512-xcHHHOm3coErzrxtXN3S75UJ1S+WUJXKes5Mpu8WyVmMMYVC5qjSoBlYLHx1+jztq+KmYYkG3rbM3it2J4y7jA==",
- "dev": true,
- "requires": {
- "@types/nlcst": "^1.0.0",
- "nlcst-to-string": "^3.0.0",
- "unified": "^10.0.0",
- "unist-util-position": "^4.0.0",
- "unist-util-visit": "^4.0.0"
- },
- "dependencies": {
- "unist-util-visit": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
- "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^5.0.0",
- "unist-util-visit-parents": "^5.1.1"
- }
- },
- "unist-util-visit-parents": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz",
- "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^5.0.0"
- }
- }
- }
- },
- "retext-syntax-urls": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/retext-syntax-urls/-/retext-syntax-urls-3.1.2.tgz",
- "integrity": "sha512-CFuqX1x7GPFQRMPTA88bjrD0l8jTN7Y5Zp8QVr9ToWyJRChIMqUlPq4HfOJbKdDfcwhTVZvh/jRyxLc/K6Tc4g==",
- "dev": true,
- "requires": {
- "@types/nlcst": "^1.0.0",
- "@types/unist": "^2.0.0",
- "ccount": "^2.0.0",
- "nlcst-to-string": "^3.0.0",
- "unified": "^10.0.0",
- "unist-util-modify-children": "^3.0.0",
- "unist-util-position": "^4.0.0"
- }
- },
- "reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
- },
- "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"
- }
- },
- "roku-deploy": {
- "version": "3.10.0",
- "resolved": "https://registry.npmjs.org/roku-deploy/-/roku-deploy-3.10.0.tgz",
- "integrity": "sha512-qifRe8xmX0g1bBJoin6wC4IYiLoFGU4PU9CRGdsV25Sv35TPFuz1FLBMIBEieBg8pHoATUa+jyPfs7upHxq9Yw==",
- "requires": {
- "chalk": "^2.4.2",
- "dateformat": "^3.0.3",
- "dayjs": "^1.11.0",
- "fast-glob": "^3.2.12",
- "fs-extra": "^7.0.1",
- "is-glob": "^4.0.3",
- "jsonc-parser": "^2.3.0",
- "jszip": "^3.6.0",
- "micromatch": "^4.0.4",
- "moment": "^2.29.1",
- "parse-ms": "^2.1.0",
- "request": "^2.88.0",
- "temp-dir": "^2.0.0",
- "xml2js": "^0.4.23"
- },
- "dependencies": {
- "fs-extra": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
- "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- }
- }
- },
- "ropm": {
- "version": "0.10.12",
- "resolved": "https://registry.npmjs.org/ropm/-/ropm-0.10.12.tgz",
- "integrity": "sha512-twgvOmD1kEiOjCn47VaVOii9MD6vqtKvewZFh5EYenpx4nrtY+llMo3ZzMBpQzi5crbCFOdw18Lzx1PPRBjLvQ==",
- "dev": true,
- "requires": {
- "@xml-tools/ast": "^5.0.5",
- "@xml-tools/parser": "1.0.10",
- "brighterscript": "^0.62.0",
- "del": "6.0.0",
- "fs-extra": "9.1.0",
- "glob-all": "3.2.1",
- "latinize": "0.5.0",
- "npm-packlist": "2.1.4",
- "roku-deploy": "^3.10.0",
- "semver": "7.3.4",
- "yargs": "16.2.0"
- },
- "dependencies": {
- "@xml-tools/parser": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/@xml-tools/parser/-/parser-1.0.10.tgz",
- "integrity": "sha512-9oRb68wEKT+MRB7e2GwTiKicRKVXKzquBDGgH6YcGafvnSYXorWi2oaTVtbv2109RlGiQSnoXaQFUXCnHwFS7Q==",
- "dev": true,
- "requires": {
- "chevrotain": "7.1.1"
- }
- },
- "brighterscript": {
- "version": "0.62.0",
- "resolved": "https://registry.npmjs.org/brighterscript/-/brighterscript-0.62.0.tgz",
- "integrity": "sha512-aFDlceBnU5oQI+/pb+QMwkIGylT880KteRxDF1wS5F2TMK31rRn3Ifh1WcQrr5gEKnPebpCL0ZYvWNSeVKVqmg==",
- "dev": true,
- "requires": {
- "@rokucommunity/bslib": "^0.1.1",
- "@xml-tools/parser": "^1.0.7",
- "array-flat-polyfill": "^1.0.1",
- "chalk": "^2.4.2",
- "chevrotain": "^7.0.1",
- "chokidar": "^3.5.1",
- "clear": "^0.1.0",
- "cross-platform-clear-console": "^2.3.0",
- "debounce-promise": "^3.1.0",
- "eventemitter3": "^4.0.0",
- "fast-glob": "^3.2.11",
- "file-url": "^3.0.0",
- "fs-extra": "^8.0.0",
- "jsonc-parser": "^2.3.0",
- "long": "^3.2.0",
- "luxon": "^2.5.2",
- "minimatch": "^3.0.4",
- "moment": "^2.23.0",
- "p-settle": "^2.1.0",
- "parse-ms": "^2.1.0",
- "require-relative": "^0.8.7",
- "roku-deploy": "^3.10.0",
- "serialize-error": "^7.0.1",
- "source-map": "^0.7.4",
- "vscode-languageserver": "7.0.0",
- "vscode-languageserver-protocol": "3.16.0",
- "vscode-languageserver-textdocument": "^1.0.1",
- "vscode-uri": "^2.1.1",
- "xml2js": "^0.4.19",
- "yargs": "^16.2.0"
- },
- "dependencies": {
- "fs-extra": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
- "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- }
- }
- },
- "chevrotain": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-7.1.1.tgz",
- "integrity": "sha512-wy3mC1x4ye+O+QkEinVJkPf5u2vsrDIYW9G7ZuwFl6v/Yu0LwUuT2POsb+NUWApebyxfkQq6+yDfRExbnI5rcw==",
- "dev": true,
- "requires": {
- "regexp-to-ast": "0.5.0"
- }
- },
- "fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "dev": true,
- "requires": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "dependencies": {
- "jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.6",
- "universalify": "^2.0.0"
- }
- },
- "universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
- "dev": true
- }
- }
- },
- "yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "dev": true,
- "requires": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- }
- }
- }
- },
- "run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "requires": {
- "queue-microtask": "^1.2.2"
- }
- },
- "sade": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
- "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
- "dev": true,
- "requires": {
- "mri": "^1.1.0"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
- },
- "sax": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
- "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
- },
- "semver": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
- "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- },
- "serialize-error": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz",
- "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==",
- "requires": {
- "type-fest": "^0.13.1"
- }
- },
- "set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
- },
- "setimmediate": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="
- },
- "slash": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
- "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
- "dev": true
- },
- "sob": {
- "version": "npm:slide-out-button@1.0.1",
- "resolved": "https://registry.npmjs.org/slide-out-button/-/slide-out-button-1.0.1.tgz",
- "integrity": "sha512-R2m/9IcxjE7G9BlL+AcHBUEh84ojdfImwk/CAaEX3WZT/oSIGYF2StHQ0TcWqatN2Tg9OTr4pNLVso66KH2Tgw=="
- },
- "source-map": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
- "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="
- },
- "spellchecker-cli": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/spellchecker-cli/-/spellchecker-cli-6.1.1.tgz",
- "integrity": "sha512-blA0aWuGoMn3TSHHiyB3u1E3bJI94r2Zz1FX0HhW5jOZXw3dMO1wXSvzlYnrdMIMPoKMZPxeqwFlBR3qsgZd/g==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "command-line-args": "^5.1.1",
- "command-line-usage": "^5.0.4",
- "dictionary-en": "^3",
- "dictionary-en-au": "^2.3.0",
- "dictionary-en-ca": "^2.3.0",
- "dictionary-en-gb": "^2.3.0",
- "dictionary-en-za": "^2.0.4",
- "dictionary-vi": "^2.1.3",
- "fs-extra": "^6.0.1",
- "globby": "^11.0.0",
- "js-yaml": "^3.14.1",
- "jsonc": "^2.0.0",
- "junit-report-builder": "^3.0.1",
- "lodash": "^4.17.21",
- "pkg-dir": "^6.0.1",
- "remark": "^14.0.0",
- "remark-frontmatter": "^4.0.0",
- "remark-retext": "^5.0.1",
- "retext": "^8.1.0",
- "retext-emoji": "^8.1.0",
- "retext-indefinite-article": "^4.1.0",
- "retext-repeated-words": "^4.2.0",
- "retext-spell": "^5.1.0",
- "retext-syntax-mentions": "^3.1.0",
- "retext-syntax-urls": "^3.1.2",
- "toml": "^3.0.0",
- "unist-util-visit": "^1.4.1",
- "vfile": "^3.0.1",
- "vfile-reporter": "^6.0.0"
- },
- "dependencies": {
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "requires": {
- "sprintf-js": "~1.0.2"
- }
- },
- "fs-extra": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz",
- "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- }
- }
- },
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
- "dev": true
- },
- "sshpk": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
- "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
- "requires": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
- "strip-bom": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
- "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
- "dev": true
- },
- "strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "table-layout": {
- "version": "0.4.5",
- "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.5.tgz",
- "integrity": "sha512-zTvf0mcggrGeTe/2jJ6ECkJHAQPIYEwDoqsiqBjI24mvRmQbInK5jq33fyypaCBxX08hMkfmdOqj6haT33EqWw==",
- "dev": true,
- "requires": {
- "array-back": "^2.0.0",
- "deep-extend": "~0.6.0",
- "lodash.padend": "^4.6.1",
- "typical": "^2.6.1",
- "wordwrapjs": "^3.0.0"
- },
- "dependencies": {
- "array-back": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
- "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
- "dev": true,
- "requires": {
- "typical": "^2.6.1"
- }
- },
- "typical": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
- "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==",
- "dev": true
- }
- }
- },
- "temp-dir": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz",
- "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg=="
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "toml": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz",
- "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==",
- "dev": true
- },
- "tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
- "requires": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- }
- },
- "trough": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz",
- "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==",
- "dev": true
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
- },
- "type-fest": {
- "version": "0.13.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
- "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg=="
- },
- "typical": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz",
- "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==",
- "dev": true
- },
- "uc.micro": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
- "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
- "dev": true
- },
- "unherit": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/unherit/-/unherit-3.0.1.tgz",
- "integrity": "sha512-akOOQ/Yln8a2sgcLj4U0Jmx0R5jpIg2IUyRrWOzmEbjBtGzBdHtSeFKgoEcoH4KYIG/Pb8GQ/BwtYm0GCq1Sqg==",
- "dev": true
- },
- "unified": {
- "version": "10.1.2",
- "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
- "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "bail": "^2.0.0",
- "extend": "^3.0.0",
- "is-buffer": "^2.0.0",
- "is-plain-obj": "^4.0.0",
- "trough": "^2.0.0",
- "vfile": "^5.0.0"
- },
- "dependencies": {
- "vfile": {
- "version": "5.3.7",
- "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz",
- "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "is-buffer": "^2.0.0",
- "unist-util-stringify-position": "^3.0.0",
- "vfile-message": "^3.0.0"
- }
- },
- "vfile-message": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz",
- "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "unist-util-stringify-position": "^3.0.0"
- }
- }
- }
- },
- "unist-util-generated": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.1.tgz",
- "integrity": "sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==",
- "dev": true
- },
- "unist-util-is": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.0.tgz",
- "integrity": "sha512-Glt17jWwZeyqrFqOK0pF1Ded5U3yzJnFr8CG1GMjCWTp9zDo2p+cmD6pWbZU8AgM5WU3IzRv6+rBwhzsGh6hBQ==",
- "dev": true
- },
- "unist-util-modify-children": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-3.1.1.tgz",
- "integrity": "sha512-yXi4Lm+TG5VG+qvokP6tpnk+r1EPwyYL04JWDxLvgvPV40jANh7nm3udk65OOWquvbMDe+PL9+LmkxDpTv/7BA==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "array-iterate": "^2.0.0"
- }
- },
- "unist-util-position": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz",
- "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0"
- }
- },
- "unist-util-stringify-position": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz",
- "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0"
- }
- },
- "unist-util-visit": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz",
- "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==",
- "dev": true,
- "requires": {
- "unist-util-visit-parents": "^2.0.0"
- }
- },
- "unist-util-visit-children": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-2.0.2.tgz",
- "integrity": "sha512-+LWpMFqyUwLGpsQxpumsQ9o9DG2VGLFrpz+rpVXYIEdPy57GSy5HioC0g3bg/8WP9oCLlapQtklOzQ8uLS496Q==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0"
- }
- },
- "unist-util-visit-parents": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz",
- "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==",
- "dev": true,
- "requires": {
- "unist-util-is": "^3.0.0"
- },
- "dependencies": {
- "unist-util-is": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz",
- "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==",
- "dev": true
- }
- }
- },
- "universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
- },
- "uri-js": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
- "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
- },
- "uuid": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
- "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ=="
- },
- "uvu": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz",
- "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==",
- "dev": true,
- "requires": {
- "dequal": "^2.0.0",
- "diff": "^5.0.0",
- "kleur": "^4.0.3",
- "sade": "^1.7.3"
- }
- },
- "verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
- "requires": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "vfile": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/vfile/-/vfile-3.0.1.tgz",
- "integrity": "sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^2.0.0",
- "replace-ext": "1.0.0",
- "unist-util-stringify-position": "^1.0.0",
- "vfile-message": "^1.0.0"
- },
- "dependencies": {
- "unist-util-stringify-position": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz",
- "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==",
- "dev": true
- }
- }
- },
- "vfile-location": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.1.0.tgz",
- "integrity": "sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "vfile": "^5.0.0"
- },
- "dependencies": {
- "vfile": {
- "version": "5.3.7",
- "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz",
- "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "is-buffer": "^2.0.0",
- "unist-util-stringify-position": "^3.0.0",
- "vfile-message": "^3.0.0"
- }
- },
- "vfile-message": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz",
- "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "unist-util-stringify-position": "^3.0.0"
- }
- }
- }
- },
- "vfile-message": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz",
- "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==",
- "dev": true,
- "requires": {
- "unist-util-stringify-position": "^1.1.1"
- },
- "dependencies": {
- "unist-util-stringify-position": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz",
- "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==",
- "dev": true
- }
- }
- },
- "vfile-reporter": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-6.0.2.tgz",
- "integrity": "sha512-GN2bH2gs4eLnw/4jPSgfBjo+XCuvnX9elHICJZjVD4+NM0nsUrMTvdjGY5Sc/XG69XVTgLwj7hknQVc6M9FukA==",
- "dev": true,
- "requires": {
- "repeat-string": "^1.5.0",
- "string-width": "^4.0.0",
- "supports-color": "^6.0.0",
- "unist-util-stringify-position": "^2.0.0",
- "vfile-sort": "^2.1.2",
- "vfile-statistics": "^1.1.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "unist-util-stringify-position": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz",
- "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.2"
- }
- }
- }
- },
- "vfile-sort": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-2.2.2.tgz",
- "integrity": "sha512-tAyUqD2R1l/7Rn7ixdGkhXLD3zsg+XLAeUDUhXearjfIcpL1Hcsj5hHpCoy/gvfK/Ws61+e972fm0F7up7hfYA==",
- "dev": true
- },
- "vfile-statistics": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-1.1.4.tgz",
- "integrity": "sha512-lXhElVO0Rq3frgPvFBwahmed3X03vjPF8OcjKMy8+F1xU/3Q3QU3tKEDp743SFtb74PdF0UWpxPvtOP0GCLheA==",
- "dev": true
- },
- "vscode-jsonrpc": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz",
- "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg=="
- },
- "vscode-languageserver": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz",
- "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==",
- "requires": {
- "vscode-languageserver-protocol": "3.16.0"
- }
- },
- "vscode-languageserver-protocol": {
- "version": "3.16.0",
- "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz",
- "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==",
- "requires": {
- "vscode-jsonrpc": "6.0.0",
- "vscode-languageserver-types": "3.16.0"
- }
- },
- "vscode-languageserver-textdocument": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz",
- "integrity": "sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA=="
- },
- "vscode-languageserver-types": {
- "version": "3.16.0",
- "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz",
- "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA=="
- },
- "vscode-uri": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz",
- "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A=="
- },
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
- },
- "wordwrapjs": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
- "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
- "dev": true,
- "requires": {
- "reduce-flatten": "^1.0.1",
- "typical": "^2.6.1"
- },
- "dependencies": {
- "typical": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
- "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==",
- "dev": true
- }
- }
- },
- "wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
- },
- "xml2js": {
- "version": "0.4.23",
- "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz",
- "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==",
- "requires": {
- "sax": ">=0.6.0",
- "xmlbuilder": "~11.0.0"
- }
- },
- "xmlbuilder": {
- "version": "11.0.1",
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
- "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="
- },
- "y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
- "yaml": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz",
- "integrity": "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==",
- "dev": true
- },
- "yargs": {
- "version": "17.3.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz",
- "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==",
- "requires": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.0.0"
- },
- "dependencies": {
- "yargs-parser": {
- "version": "21.0.0",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz",
- "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA=="
- }
- }
- },
- "yargs-parser": {
- "version": "20.2.7",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz",
- "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw=="
- },
- "yocto-queue": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
- "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==",
- "dev": true
- },
- "zwitch": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
- "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
- "dev": true
- }
}
}
diff --git a/package.json b/package.json
index ab03aa01..d06d85b9 100644
--- a/package.json
+++ b/package.json
@@ -2,29 +2,42 @@
"name": "jellyfin-roku",
"version": "1.6.6",
"description": "Roku app for Jellyfin media server",
- "main": "index.js",
+ "dependencies": {
+ "api": "npm:jellyfin-api-bs-client@1.0.6",
+ "bgv": "npm:button-group-vert@1.0.2",
+ "brighterscript-formatter": "1.6.26",
+ "intKeyboard": "npm:integer-keyboard@1.0.12",
+ "sob": "npm:slide-out-button@1.0.1"
+ },
"devDependencies": {
- "@rokucommunity/bslint": "0.8.2",
- "brighterscript": "0.64.0",
- "ropm": "0.10.12",
- "jshint": "^2.13.6",
- "markdownlint-cli2": "0.6.0",
- "spellchecker-cli": "6.1.1"
+ "@rokucommunity/bslint": "0.8.3",
+ "brighterscript": "0.64.2",
+ "bslib": "npm:@rokucommunity/bslib@0.1.1",
+ "jshint": "2.13.6",
+ "markdownlint-cli2": "0.7.0",
+ "rimraf": "5.0.0",
+ "roku-deploy": "3.10.1",
+ "roku-log-bsc-plugin": "0.8.1",
+ "rooibos-roku": "5.4.2",
+ "ropm": "0.10.13",
+ "spellchecker-cli": "6.1.1",
+ "undent": "0.1.0"
},
"scripts": {
- "postinstall": "npx ropm copy",
- "validate": "npx bsc --copy-to-staging=false --create-package=false",
- "test": "echo \"Error: no test specified\" && exit 1",
+ "build-tests": "npx rimraf build/ && npx bsc --project bsconfig-tests.json",
+ "build-tdd": "npx rimraf build/ && npx bsc --project bsconfig-tdd.json",
+ "check-formatting": "npx bsfmt --check",
+ "format": "npx bsfmt --write",
"lint": "bslint",
"lint-json": "jshint --extra-ext .json --verbose --exclude node_modules ./",
"lint-markdown": "markdownlint-cli2 \"**/*.md\" \"#node_modules\"",
"lint-spelling": "spellchecker -d dictionary.txt --files \"**/*.md\" \"**/.*/**/*.md\" \"!node_modules/**/*.md\"",
- "check-formatting": "npx bsfmt --check",
- "format": "npx bsfmt --write"
+ "postinstall": "npx ropm copy",
+ "validate": "npx bsc --copy-to-staging=false --create-package=false"
},
"repository": {
"type": "git",
- "url": "git+https://github.com/jellyfin/jellyfin-roku.git"
+ "url": "https://github.com/jellyfin/jellyfin-roku.git"
},
"keywords": [
"jellyfin",
@@ -35,12 +48,5 @@
"bugs": {
"url": "https://github.com/jellyfin/jellyfin-roku/issues"
},
- "homepage": "https://github.com/jellyfin/jellyfin-roku#readme",
- "dependencies": {
- "api": "npm:jellyfin-api-bs-client@^1.0.5",
- "bgv": "npm:button-group-vert@^1.0.2",
- "brighterscript-formatter": "^1.6.8",
- "sob": "npm:slide-out-button@^1.0.1",
- "intKeyboard": "npm:integer-keyboard@^1.0.12"
- }
+ "homepage": "https://github.com/jellyfin/jellyfin-roku#readme"
}
\ No newline at end of file
diff --git a/source/Main.brs b/source/Main.brs
index c4606d0a..01eae99f 100644
--- a/source/Main.brs
+++ b/source/Main.brs
@@ -1,26 +1,6 @@
sub Main (args as dynamic) as void
-
- appInfo = CreateObject("roAppInfo")
-
- if appInfo.IsDev() and args.RunTests = "true" and TF_Utils__IsFunction(TestRunner)
- ' POST to {ROKU ADDRESS}:8060/launch/dev?RunTests=true
- Runner = TestRunner()
-
- Runner.SetFunctions([
- TestSuite__Misc
- ])
-
- Runner.Logger.SetVerbosity(1)
- Runner.Logger.SetEcho(false)
- Runner.Logger.SetJUnit(false)
- Runner.SetFailFast(true)
-
- Runner.Run()
- end if
-
' The main function that runs when the application is launched.
m.screen = CreateObject("roSGScreen")
-
' Set global constants
setConstants()
' Write screen tracker for screensaver
@@ -77,6 +57,7 @@ sub Main (args as dynamic) as void
end if
' Only show the Whats New popup the first time a user runs a new client version.
+ appInfo = CreateObject("roAppInfo")
if appInfo.GetVersion() <> get_setting("LastRunVersion")
' Ensure the user hasn't disabled Whats New popups
if get_user_setting("load.allowwhatsnew") = "true"
@@ -158,7 +139,7 @@ sub Main (args as dynamic) as void
m.selectedItemType = selectedItem.type
- if selectedItem.type = "CollectionFolder"
+ if selectedItem.type = "CollectionFolder" or selectedItem.type = "BoxSet"
if selectedItem.collectionType = "movies"
group = CreateMovieLibraryView(selectedItem)
else if selectedItem.collectionType = "music"
@@ -621,149 +602,3 @@ sub Main (args as dynamic) as void
end while
end sub
-
-function LoginFlow(startOver = false as boolean)
- 'Collect Jellyfin server and user information
- start_login:
-
- if get_setting("server") = invalid then startOver = true
-
- invalidServer = true
- if not startOver
- ' Show Connecting to Server spinner
- dialog = createObject("roSGNode", "ProgressDialog")
- dialog.title = tr("Connecting to Server")
- m.scene.dialog = dialog
- invalidServer = ServerInfo().Error
- dialog.close = true
- end if
-
- m.serverSelection = "Saved"
- if startOver or invalidServer
- print "Get server details"
- SendPerformanceBeacon("AppDialogInitiate") ' Roku Performance monitoring - Dialog Starting
- m.serverSelection = CreateServerGroup()
- SendPerformanceBeacon("AppDialogComplete") ' Roku Performance monitoring - Dialog Closed
- if m.serverSelection = "backPressed"
- print "backPressed"
- m.global.sceneManager.callFunc("clearScenes")
- return false
- end if
- SaveServerList()
- end if
-
- if get_setting("active_user") = invalid
- SendPerformanceBeacon("AppDialogInitiate") ' Roku Performance monitoring - Dialog Starting
- publicUsers = GetPublicUsers()
- if publicUsers.count()
- publicUsersNodes = []
- for each item in publicUsers
- user = CreateObject("roSGNode", "PublicUserData")
- user.id = item.Id
- user.name = item.Name
- if item.PrimaryImageTag <> invalid
- user.ImageURL = UserImageURL(user.id, { "tag": item.PrimaryImageTag })
- end if
- publicUsersNodes.push(user)
- end for
- userSelected = CreateUserSelectGroup(publicUsersNodes)
- if userSelected = "backPressed"
- SendPerformanceBeacon("AppDialogComplete") ' Roku Performance monitoring - Dialog Closed
- return LoginFlow(true)
- else
- 'Try to login without password. If the token is valid, we're done
- get_token(userSelected, "")
- if get_setting("active_user") <> invalid
- m.user = AboutMe()
- LoadUserPreferences()
- LoadUserAbilities(m.user)
- SendPerformanceBeacon("AppDialogComplete") ' Roku Performance monitoring - Dialog Closed
- return true
- end if
- end if
- else
- userSelected = ""
- end if
- passwordEntry = CreateSigninGroup(userSelected)
- SendPerformanceBeacon("AppDialogComplete") ' Roku Performance monitoring - Dialog Closed
- if passwordEntry = "backPressed"
- m.global.sceneManager.callFunc("clearScenes")
- return LoginFlow(true)
- end if
- end if
-
- m.user = AboutMe()
- if m.user = invalid or m.user.id <> get_setting("active_user")
- print "Login failed, restart flow"
- unset_setting("active_user")
- goto start_login
- end if
-
- LoadUserPreferences()
- LoadUserAbilities(m.user)
- m.global.sceneManager.callFunc("clearScenes")
-
- 'Send Device Profile information to server
- body = getDeviceCapabilities()
- req = APIRequest("/Sessions/Capabilities/Full")
- req.SetRequest("POST")
- postJson(req, FormatJson(body))
- return true
-end function
-
-sub SaveServerList()
- 'Save off this server to our list of saved servers for easier navigation between servers
- server = get_setting("server")
- saved = get_setting("saved_servers")
- if server <> invalid
- server = LCase(server)'Saved server data is always lowercase
- end if
- entryCount = 0
- addNewEntry = true
- savedServers = { serverList: [] }
- if saved <> invalid
- savedServers = ParseJson(saved)
- entryCount = savedServers.serverList.Count()
- if savedServers.serverList <> invalid and entryCount > 0
- for each item in savedServers.serverList
- if item.baseUrl = server
- addNewEntry = false
- exit for
- end if
- end for
- end if
- end if
-
- if addNewEntry
- if entryCount = 0
- set_setting("saved_servers", FormatJson({ serverList: [{ name: m.serverSelection, baseUrl: server, iconUrl: "pkg:/images/logo-icon120.jpg", iconWidth: 120, iconHeight: 120 }] }))
- else
- savedServers.serverList.Push({ name: m.serverSelection, baseUrl: server, iconUrl: "pkg:/images/logo-icon120.jpg", iconWidth: 120, iconHeight: 120 })
- set_setting("saved_servers", FormatJson(savedServers))
- end if
- end if
-end sub
-
-sub DeleteFromServerList(urlToDelete)
- saved = get_setting("saved_servers")
- if urlToDelete <> invalid
- urlToDelete = LCase(urlToDelete)
- end if
- if saved <> invalid
- savedServers = ParseJson(saved)
- newServers = { serverList: [] }
- for each item in savedServers.serverList
- if item.baseUrl <> urlToDelete
- newServers.serverList.Push(item)
- end if
- end for
- set_setting("saved_servers", FormatJson(newServers))
- end if
-end sub
-
-' Roku Performance monitoring
-sub SendPerformanceBeacon(signalName as string)
- if m.global.app_loaded = false
- m.scene.signalBeacon(signalName)
- end if
-end sub
diff --git a/source/ShowScenes.brs b/source/ShowScenes.brs
index 6d777ef2..10383526 100644
--- a/source/ShowScenes.brs
+++ b/source/ShowScenes.brs
@@ -1,3 +1,149 @@
+function LoginFlow(startOver = false as boolean)
+ 'Collect Jellyfin server and user information
+ start_login:
+
+ if get_setting("server") = invalid then startOver = true
+
+ invalidServer = true
+ if not startOver
+ ' Show Connecting to Server spinner
+ dialog = createObject("roSGNode", "ProgressDialog")
+ dialog.title = tr("Connecting to Server")
+ m.scene.dialog = dialog
+ invalidServer = ServerInfo().Error
+ dialog.close = true
+ end if
+
+ m.serverSelection = "Saved"
+ if startOver or invalidServer
+ print "Get server details"
+ SendPerformanceBeacon("AppDialogInitiate") ' Roku Performance monitoring - Dialog Starting
+ m.serverSelection = CreateServerGroup()
+ SendPerformanceBeacon("AppDialogComplete") ' Roku Performance monitoring - Dialog Closed
+ if m.serverSelection = "backPressed"
+ print "backPressed"
+ m.global.sceneManager.callFunc("clearScenes")
+ return false
+ end if
+ SaveServerList()
+ end if
+
+ if get_setting("active_user") = invalid
+ SendPerformanceBeacon("AppDialogInitiate") ' Roku Performance monitoring - Dialog Starting
+ publicUsers = GetPublicUsers()
+ if publicUsers.count()
+ publicUsersNodes = []
+ for each item in publicUsers
+ user = CreateObject("roSGNode", "PublicUserData")
+ user.id = item.Id
+ user.name = item.Name
+ if item.PrimaryImageTag <> invalid
+ user.ImageURL = UserImageURL(user.id, { "tag": item.PrimaryImageTag })
+ end if
+ publicUsersNodes.push(user)
+ end for
+ userSelected = CreateUserSelectGroup(publicUsersNodes)
+ if userSelected = "backPressed"
+ SendPerformanceBeacon("AppDialogComplete") ' Roku Performance monitoring - Dialog Closed
+ return LoginFlow(true)
+ else
+ 'Try to login without password. If the token is valid, we're done
+ get_token(userSelected, "")
+ if get_setting("active_user") <> invalid
+ m.user = AboutMe()
+ LoadUserPreferences()
+ LoadUserAbilities(m.user)
+ SendPerformanceBeacon("AppDialogComplete") ' Roku Performance monitoring - Dialog Closed
+ return true
+ end if
+ end if
+ else
+ userSelected = ""
+ end if
+ passwordEntry = CreateSigninGroup(userSelected)
+ SendPerformanceBeacon("AppDialogComplete") ' Roku Performance monitoring - Dialog Closed
+ if passwordEntry = "backPressed"
+ m.global.sceneManager.callFunc("clearScenes")
+ return LoginFlow(true)
+ end if
+ end if
+
+ m.user = AboutMe()
+ if m.user = invalid or m.user.id <> get_setting("active_user")
+ print "Login failed, restart flow"
+ unset_setting("active_user")
+ goto start_login
+ end if
+
+ LoadUserPreferences()
+ LoadUserAbilities(m.user)
+ m.global.sceneManager.callFunc("clearScenes")
+
+ 'Send Device Profile information to server
+ body = getDeviceCapabilities()
+ req = APIRequest("/Sessions/Capabilities/Full")
+ req.SetRequest("POST")
+ postJson(req, FormatJson(body))
+ return true
+end function
+
+sub SaveServerList()
+ 'Save off this server to our list of saved servers for easier navigation between servers
+ server = get_setting("server")
+ saved = get_setting("saved_servers")
+ if server <> invalid
+ server = LCase(server)'Saved server data is always lowercase
+ end if
+ entryCount = 0
+ addNewEntry = true
+ savedServers = { serverList: [] }
+ if saved <> invalid
+ savedServers = ParseJson(saved)
+ entryCount = savedServers.serverList.Count()
+ if savedServers.serverList <> invalid and entryCount > 0
+ for each item in savedServers.serverList
+ if item.baseUrl = server
+ addNewEntry = false
+ exit for
+ end if
+ end for
+ end if
+ end if
+
+ if addNewEntry
+ if entryCount = 0
+ set_setting("saved_servers", FormatJson({ serverList: [{ name: m.serverSelection, baseUrl: server, iconUrl: "pkg:/images/logo-icon120.jpg", iconWidth: 120, iconHeight: 120 }] }))
+ else
+ savedServers.serverList.Push({ name: m.serverSelection, baseUrl: server, iconUrl: "pkg:/images/logo-icon120.jpg", iconWidth: 120, iconHeight: 120 })
+ set_setting("saved_servers", FormatJson(savedServers))
+ end if
+ end if
+end sub
+
+sub DeleteFromServerList(urlToDelete)
+ saved = get_setting("saved_servers")
+ if urlToDelete <> invalid
+ urlToDelete = LCase(urlToDelete)
+ end if
+ if saved <> invalid
+ savedServers = ParseJson(saved)
+ newServers = { serverList: [] }
+ for each item in savedServers.serverList
+ if item.baseUrl <> urlToDelete
+ newServers.serverList.Push(item)
+ end if
+ end for
+ set_setting("saved_servers", FormatJson(newServers))
+ end if
+end sub
+
+' Roku Performance monitoring
+sub SendPerformanceBeacon(signalName as string)
+ if m.global.app_loaded = false
+ m.scene.signalBeacon(signalName)
+ end if
+end sub
+
function CreateServerGroup()
screen = CreateObject("roSGNode", "SetServerScreen")
screen.optionsAvailable = true
@@ -330,36 +476,57 @@ function CreateHomeGroup()
return group
end function
-function CreateMovieDetailsGroup(movie)
+function CreateMovieDetailsGroup(movie as object) as dynamic
+ ' validate movie node
+ if not isValid(movie) or not isValid(movie.id) then return invalid
+
startLoadingSpinner()
+ ' get movie meta data
+ movieMetaData = ItemMetaData(movie.id)
+ ' validate movie meta data
+ if not isValid(movieMetaData)
+ stopLoadingSpinner()
+ return invalid
+ end if
+ ' start building MovieDetails view
group = CreateObject("roSGNode", "MovieDetails")
group.overhangTitle = movie.title
group.optionsAvailable = false
- m.global.sceneManager.callFunc("pushScene", group)
-
- movieMetaData = ItemMetaData(movie.id)
- group.itemContent = movieMetaData
group.trailerAvailable = false
-
+ ' push scene asap (to prevent extra button presses when retriving series/movie info)
+ m.global.sceneManager.callFunc("pushScene", group)
+ group.itemContent = movieMetaData
+ ' local trailers
trailerData = api_API().users.getlocaltrailers(get_setting("active_user"), movie.id)
if isValid(trailerData)
group.trailerAvailable = trailerData.Count() > 0
end if
-
+ ' watch for button presses
buttons = group.findNode("buttons")
for each b in buttons.getChildren(-1, 0)
b.observeField("buttonSelected", m.port)
end for
-
+ ' setup and load movie extras
extras = group.findNode("extrasGrid")
extras.observeField("selectedItem", m.port)
extras.callFunc("loadParts", movieMetaData.json)
+ ' done building MovieDetails view
stopLoadingSpinner()
return group
end function
-function CreateSeriesDetailsGroup(series)
+function CreateSeriesDetailsGroup(series as object) as dynamic
+ ' validate series node
+ if not isValid(series) or not isValid(series.id) then return invalid
+
startLoadingSpinner()
+ ' get series meta data
+ seriesMetaData = ItemMetaData(series.id)
+ ' validate series meta data
+ if not isValid(seriesMetaData)
+ stopLoadingSpinner()
+ return invalid
+ end if
' Get season data early in the function so we can check number of seasons.
seasonData = TVSeasons(series.id)
' Divert to season details if user setting goStraightToEpisodeListing is enabled and only one season exists.
@@ -367,38 +534,43 @@ function CreateSeriesDetailsGroup(series)
stopLoadingSpinner()
return CreateSeasonDetailsGroupByID(series.id, seasonData.Items[0].id)
end if
+ ' start building SeriesDetails view
group = CreateObject("roSGNode", "TVShowDetails")
group.optionsAvailable = false
+ ' push scene asap (to prevent extra button presses when retriving series/movie info)
m.global.sceneManager.callFunc("pushScene", group)
-
- group.itemContent = ItemMetaData(series.id)
- group.seasonData = seasonData ' Re-use variable from beginning of function
-
+ group.itemContent = seriesMetaData
+ group.seasonData = seasonData
+ ' watch for button presses
group.observeField("seasonSelected", m.port)
-
+ ' setup and load series extras
extras = group.findNode("extrasGrid")
extras.observeField("selectedItem", m.port)
- extras.callFunc("loadParts", group.itemcontent.json)
+ extras.callFunc("loadParts", seriesMetaData.json)
+ ' done building SeriesDetails view
stopLoadingSpinner()
return group
end function
' Shows details on selected artist. Bio, image, and list of available albums
-function CreateArtistView(musicartist)
- musicData = MusicAlbumList(musicartist.id)
- appearsOnData = AppearsOnList(musicartist.id)
+function CreateArtistView(artist as object) as dynamic
+ ' validate artist node
+ if not isValid(artist) or not isValid(artist.id) then return invalid
+
+ musicData = MusicAlbumList(artist.id)
+ appearsOnData = AppearsOnList(artist.id)
if (musicData = invalid or musicData.Items.Count() = 0) and (appearsOnData = invalid or appearsOnData.Items.Count() = 0)
' Just songs under artists...
group = CreateObject("roSGNode", "AlbumView")
- group.pageContent = ItemMetaData(musicartist.id)
+ group.pageContent = ItemMetaData(artist.id)
' Lookup songs based on artist id
- songList = GetSongsByArtist(musicartist.id)
+ songList = GetSongsByArtist(artist.id)
if not isValid(songList)
' Lookup songs based on folder parent / child relationship
- songList = MusicSongList(musicartist.id)
+ songList = MusicSongList(artist.id)
end if
if not isValid(songList)
@@ -412,10 +584,10 @@ function CreateArtistView(musicartist)
else
' User has albums under artists
group = CreateObject("roSGNode", "ArtistView")
- group.pageContent = ItemMetaData(musicartist.id)
+ group.pageContent = ItemMetaData(artist.id)
group.musicArtistAlbumData = musicData
group.musicArtistAppearsOnData = appearsOnData
- group.artistOverview = ArtistOverview(musicartist.name)
+ group.artistOverview = ArtistOverview(artist.name)
group.observeField("musicAlbumSelected", m.port)
group.observeField("playArtistSelected", m.port)
@@ -429,7 +601,10 @@ function CreateArtistView(musicartist)
end function
' Shows details on selected album. Description text, image, and list of available songs
-function CreateAlbumView(album)
+function CreateAlbumView(album as object) as dynamic
+ ' validate album node
+ if not isValid(album) or not isValid(album.id) then return invalid
+
group = CreateObject("roSGNode", "AlbumView")
m.global.sceneManager.callFunc("pushScene", group)
@@ -449,12 +624,15 @@ function CreateAlbumView(album)
end function
' Shows details on selected playlist. Description text, image, and list of available items
-function CreatePlaylistView(album)
+function CreatePlaylistView(playlist as object) as dynamic
+ ' validate playlist node
+ if not isValid(playlist) or not isValid(playlist.id) then return invalid
+
group = CreateObject("roSGNode", "PlaylistView")
m.global.sceneManager.callFunc("pushScene", group)
- group.pageContent = ItemMetaData(album.id)
- group.albumData = PlaylistItemList(album.id)
+ group.pageContent = ItemMetaData(playlist.id)
+ group.albumData = PlaylistItemList(playlist.id)
' Watch for user clicking on an item
group.observeField("playItem", m.port)
@@ -465,39 +643,66 @@ function CreatePlaylistView(album)
return group
end function
-function CreateSeasonDetailsGroup(series, season)
+function CreateSeasonDetailsGroup(series as object, season as object) as dynamic
+ ' validate series node
+ if not isValid(series) or not isValid(series.id) then return invalid
+ ' validate season node
+ if not isValid(season) or not isValid(season.id) then return invalid
+
startLoadingSpinner()
+ ' get season meta data
+ seasonMetaData = ItemMetaData(season.id)
+ ' validate season meta data
+ if not isValid(seasonMetaData)
+ stopLoadingSpinner()
+ return invalid
+ end if
+ ' start building SeasonDetails view
group = CreateObject("roSGNode", "TVEpisodes")
group.optionsAvailable = false
+ ' push scene asap (to prevent extra button presses when retriving series/movie info)
m.global.sceneManager.callFunc("pushScene", group)
-
- group.seasonData = ItemMetaData(season.id).json
+ group.seasonData = seasonMetaData.json
group.objects = TVEpisodes(series.id, season.id)
-
+ ' watch for button presses
group.observeField("episodeSelected", m.port)
group.observeField("quickPlayNode", m.port)
-
+ ' finished building SeasonDetails view
stopLoadingSpinner()
-
return group
end function
-function CreateSeasonDetailsGroupByID(seriesID, seasonID)
+function CreateSeasonDetailsGroupByID(seriesID as string, seasonID as string) as dynamic
+ ' validate parameters
+ if seriesID = "" or seasonID = "" then return invalid
+
startLoadingSpinner()
+ ' get season meta data
+ seasonMetaData = ItemMetaData(seasonID)
+ ' validate season meta data
+ if not isValid(seasonMetaData)
+ stopLoadingSpinner()
+ return invalid
+ end if
+ ' start building SeasonDetails view
group = CreateObject("roSGNode", "TVEpisodes")
group.optionsAvailable = false
+ ' push scene asap (to prevent extra button presses when retriving series/movie info)
m.global.sceneManager.callFunc("pushScene", group)
-
- group.seasonData = ItemMetaData(seasonID).json
+ group.seasonData = seasonMetaData.json
group.objects = TVEpisodes(seriesID, seasonID)
-
+ ' watch for button presses
group.observeField("episodeSelected", m.port)
group.observeField("quickPlayNode", m.port)
+ ' finished building SeasonDetails view
stopLoadingSpinner()
return group
end function
-function CreateItemGrid(libraryItem)
+function CreateItemGrid(libraryItem as object) as dynamic
+ ' validate libraryItem
+ if not isValid(libraryItem) then return invalid
+
group = CreateObject("roSGNode", "ItemGrid")
group.parentItem = libraryItem
group.optionsAvailable = true
@@ -505,7 +710,10 @@ function CreateItemGrid(libraryItem)
return group
end function
-function CreateMovieLibraryView(libraryItem)
+function CreateMovieLibraryView(libraryItem as object) as dynamic
+ ' validate libraryItem
+ if not isValid(libraryItem) then return invalid
+
group = CreateObject("roSGNode", "MovieLibraryView")
group.parentItem = libraryItem
group.optionsAvailable = true
@@ -513,7 +721,10 @@ function CreateMovieLibraryView(libraryItem)
return group
end function
-function CreateMusicLibraryView(libraryItem)
+function CreateMusicLibraryView(libraryItem as object) as dynamic
+ ' validate libraryItem
+ if not isValid(libraryItem) then return invalid
+
group = CreateObject("roSGNode", "MusicLibraryView")
group.parentItem = libraryItem
group.optionsAvailable = true
@@ -530,13 +741,10 @@ function CreateSearchPage()
return group
end function
-sub CreateSidePanel(buttons, options)
- group = CreateObject("roSGNode", "OptionsSlider")
- group.buttons = buttons
- group.options = options
-end sub
+function CreateVideoPlayerGroup(video_id as string, mediaSourceId = invalid as dynamic, audio_stream_idx = 1 as integer, forceTranscoding = false as boolean, showIntro = true as boolean, allowResumeDialog = true as boolean)
+ ' validate video_id
+ if not isValid(video_id) or video_id = "" then return invalid
-function CreateVideoPlayerGroup(video_id, mediaSourceId = invalid, audio_stream_idx = 1, forceTranscoding = false, showIntro = true, allowResumeDialog = true)
startMediaLoadingSpinner()
' Video is Playing
video = VideoPlayer(video_id, mediaSourceId, audio_stream_idx, defaultSubtitleTrackFromVid(video_id), forceTranscoding, showIntro, allowResumeDialog)
@@ -553,18 +761,29 @@ function CreateVideoPlayerGroup(video_id, mediaSourceId = invalid, audio_stream_
return video
end function
-function CreatePersonView(personData as object) as object
- startLoadingSpinner()
- person = CreateObject("roSGNode", "PersonDetails")
- m.global.SceneManager.callFunc("pushScene", person)
+function CreatePersonView(personData as object) as dynamic
+ ' validate personData node
+ if not isValid(personData) or not isValid(personData.id) then return invalid
- info = ItemMetaData(personData.id)
- person.itemContent = info
- stopLoadingSpinner()
+ startLoadingSpinner()
+ ' get person meta data
+ personMetaData = ItemMetaData(personData.id)
+ ' validate season meta data
+ if not isValid(personMetaData)
+ stopLoadingSpinner()
+ return invalid
+ end if
+ ' start building Person View
+ person = CreateObject("roSGNode", "PersonDetails")
+ ' push scene asap (to prevent extra button presses when retriving series/movie info)
+ m.global.SceneManager.callFunc("pushScene", person)
+ person.itemContent = personMetaData
person.setFocus(true)
+ ' watch for button presses
person.observeField("selectedItem", m.port)
person.findNode("favorite-button").observeField("buttonSelected", m.port)
-
+ ' finished building Person View
+ stopLoadingSpinner()
return person
end function
diff --git a/source/VideoPlayer.brs b/source/VideoPlayer.brs
index 5e5d1e0c..5b57e1a0 100644
--- a/source/VideoPlayer.brs
+++ b/source/VideoPlayer.brs
@@ -1,4 +1,4 @@
-function VideoPlayer(id, mediaSourceId = invalid, audio_stream_idx = 1, subtitle_idx = -1, forceTranscoding = false, showIntro = true, allowResumeDialog = true)
+function VideoPlayer(id as string, mediaSourceId = invalid as dynamic, audio_stream_idx = 1 as integer, subtitle_idx = -1 as integer, forceTranscoding = false as boolean, showIntro = true as boolean, allowResumeDialog = true as boolean) as dynamic
' Get video controls and UI
video = CreateObject("roSGNode", "JFVideo")
video.id = id
@@ -20,7 +20,7 @@ function VideoPlayer(id, mediaSourceId = invalid, audio_stream_idx = 1, subtitle
return video
end function
-sub AddVideoContent(video, mediaSourceId, audio_stream_idx = 1, subtitle_idx = -1, playbackPosition = -1, forceTranscoding = false, showIntro = true, allowResumeDialog = true)
+sub AddVideoContent(video as object, mediaSourceId as dynamic, audio_stream_idx = 1 as integer, subtitle_idx = -1 as integer, playbackPosition = -1 as integer, forceTranscoding = false as boolean, showIntro = true as boolean, allowResumeDialog = true as boolean)
video.content = createObject("RoSGNode", "ContentNode")
meta = ItemMetaData(video.id)
if meta = invalid
diff --git a/source/testFramework/UnitTestFramework.brs b/source/testFramework/UnitTestFramework.brs
deleted file mode 100644
index 8989edef..00000000
--- a/source/testFramework/UnitTestFramework.brs
+++ /dev/null
@@ -1,2867 +0,0 @@
-'*****************************************************************
-'* Roku Unit Testing Framework
-'* Automating test suites for Roku channels.
-'*
-'* Build Version: 2.1.1
-'* Build Date: 05/06/2019
-'*
-'* Public Documentation is avaliable on GitHub:
-'* https://github.com/rokudev/unit-testing-framework
-'*
-'*****************************************************************
-'*****************************************************************
-'* Copyright Roku 2011-2019
-'* All Rights Reserved
-'*****************************************************************
-
-' Functions in this file:
-
-' BaseTestSuite
-' BTS__AddTest
-' BTS__CreateTest
-' BTS__Fail
-' BTS__AssertFalse
-' BTS__AssertTrue
-' BTS__AssertEqual
-' BTS__AssertNotEqual
-' BTS__AssertInvalid
-' BTS__AssertNotInvalid
-' BTS__AssertAAHasKey
-' BTS__AssertAANotHasKey
-' BTS__AssertAAHasKeys
-' BTS__AssertAANotHasKeys
-' BTS__AssertArrayContains
-' BTS__AssertArrayNotContains
-' BTS__AssertArrayContainsSubset
-' BTS__AssertArrayNotContainsSubset
-' BTS__AssertArrayCount
-' BTS__AssertArrayNotCount
-' BTS__AssertEmpty
-' BTS__AssertNotEmpty
-
-' ----------------------------------------------------------------
-' Main function. Create BaseTestSuite object.
-
-' @return A BaseTestSuite object.
-' ----------------------------------------------------------------
-function BaseTestSuite()
- this = {}
- this.Name = "BaseTestSuite"
- this.SKIP_TEST_MESSAGE_PREFIX = "SKIP_TEST_MESSAGE_PREFIX__"
- ' Test Cases methods
- this.testCases = []
- this.IS_NEW_APPROACH = false
- this.addTest = BTS__AddTest
- this.createTest = BTS__CreateTest
- this.StorePerformanceData = BTS__StorePerformanceData
-
- ' Assertion methods which determine test failure or skipping
- this.skip = BTS__Skip
- this.fail = BTS__Fail
- this.assertFalse = BTS__AssertFalse
- this.assertTrue = BTS__AssertTrue
- this.assertEqual = BTS__AssertEqual
- this.assertNotEqual = BTS__AssertNotEqual
- this.assertInvalid = BTS__AssertInvalid
- this.assertNotInvalid = BTS__AssertNotInvalid
- this.assertAAHasKey = BTS__AssertAAHasKey
- this.assertAANotHasKey = BTS__AssertAANotHasKey
- this.assertAAHasKeys = BTS__AssertAAHasKeys
- this.assertAANotHasKeys = BTS__AssertAANotHasKeys
- this.assertArrayContains = BTS__AssertArrayContains
- this.assertArrayNotContains = BTS__AssertArrayNotContains
- this.assertArrayContainsSubset = BTS__AssertArrayContainsSubset
- this.assertArrayNotContainsSubset = BTS__AssertArrayNotContainsSubset
- this.assertArrayCount = BTS__AssertArrayCount
- this.assertArrayNotCount = BTS__AssertArrayNotCount
- this.assertEmpty = BTS__AssertEmpty
- this.assertNotEmpty = BTS__AssertNotEmpty
-
- ' Type Comparison Functionality
- this.eqValues = TF_Utils__EqValues
- this.eqAssocArrays = TF_Utils__EqAssocArray
- this.eqArrays = TF_Utils__EqArray
- this.baseComparator = TF_Utils__BaseComparator
-
- return this
-end function
-
-' ----------------------------------------------------------------
-' Add a test to a suite's test cases array.
-
-' @param name (string) A test name.
-' @param func (object) A pointer to test function.
-' @param setup (object) A pointer to setup function.
-' @param teardown (object) A pointer to teardown function.
-' @param arg (dynamic) A test function arguments.
-' @param hasArgs (boolean) True if test function has parameters.
-' @param skip (boolean) Skip test run.
-' ----------------------------------------------------------------
-sub BTS__AddTest(name as string, func as object, setup = invalid as object, teardown = invalid as object, arg = invalid as dynamic, hasArgs = false as boolean, skip = false as boolean)
- m.testCases.Push(m.createTest(name, func, setup, teardown, arg, hasArgs, skip))
-end sub
-
-' ----------------------------------------------------------------
-' Create a test object.
-
-' @param name (string) A test name.
-' @param func (object) A pointer to test function.
-' @param setup (object) A pointer to setup function.
-' @param teardown (object) A pointer to teardown function.
-' @param arg (dynamic) A test function arguments.
-' @param hasArgs (boolean) True if test function has parameters.
-' @param skip (boolean) Skip test run.
-'
-' @return TestCase object.
-' ----------------------------------------------------------------
-function BTS__CreateTest(name as string, func as object, setup = invalid as object, teardown = invalid as object, arg = invalid as dynamic, hasArgs = false as boolean, skip = false as boolean) as object
- return {
- Name: name
- Func: func
- SetUp: setup
- TearDown: teardown
-
- perfData: {}
-
- hasArguments: hasArgs
- arg: arg
-
- skip: skip
- }
-end function
-
-'----------------------------------------------------------------
-' Store performance data to current test instance.
-'
-' @param name (string) A property name.
-' @param value (Object) A value of data.
-'----------------------------------------------------------------
-sub BTS__StorePerformanceData(name as string, value as object)
- timestamp = StrI(CreateObject("roDateTime").AsSeconds())
- m.testInstance.perfData.Append({
- name: {
- "value": value
- "timestamp": timestamp
- }
- })
- ' print performance data to console
- ? "PERF_DATA: " + m.testInstance.Name + ": " + timestamp + ": " + name + "|" + TF_Utils__AsString(value)
-end sub
-
-' ----------------------------------------------------------------
-' Assertion methods which determine test failure or skipping
-' ----------------------------------------------------------------
-
-' ----------------------------------------------------------------
-' Should be used to skip test cases. To skip test you must return the result of this method invocation.
-
-' @param message (string) Optional skip message.
-' Default value: "".
-
-' @return A skip message, with a specific prefix added, in order to runner know that this test should be skipped.
-' ----------------------------------------------------------------
-function BTS__Skip(message = "" as string) as string
- ' add prefix so we know that this test is skipped, but not failed
- return m.SKIP_TEST_MESSAGE_PREFIX + message
-end function
-
-' ----------------------------------------------------------------
-' Fail immediately, with the given message
-
-' @param msg (string) An error message.
-' Default value: "Error".
-
-' @return An error message.
-' ----------------------------------------------------------------
-function BTS__Fail(msg = "Error" as string) as string
- return msg
-end function
-
-' ----------------------------------------------------------------
-' Fail the test if the expression is true.
-
-' @param expr (dynamic) An expression to evaluate.
-' @param msg (string) An error message.
-' Default value: "Expression evaluates to true"
-
-' @return An error message.
-' ----------------------------------------------------------------
-function BTS__AssertFalse(expr as dynamic, msg = "Expression evaluates to true" as string) as string
- if not TF_Utils__IsBoolean(expr) or expr
- return BTS__Fail(msg)
- end if
- return ""
-end function
-
-' ----------------------------------------------------------------
-' Fail the test unless the expression is true.
-
-' @param expr (dynamic) An expression to evaluate.
-' @param msg (string) An error message.
-' Default value: "Expression evaluates to false"
-
-' @return An error message.
-' ----------------------------------------------------------------
-function BTS__AssertTrue(expr as dynamic, msg = "Expression evaluates to false" as string) as string
- if not TF_Utils__IsBoolean(expr) or not expr then
- return msg
- end if
- return ""
-end function
-
-' ----------------------------------------------------------------
-' Fail if the two objects are unequal as determined by the '<>' operator.
-
-' @param first (dynamic) A first object to compare.
-' @param second (dynamic) A second object to compare.
-' @param msg (string) An error message.
-' Default value: ""
-
-' @return An error message.
-' ----------------------------------------------------------------
-function BTS__AssertEqual(first as dynamic, second as dynamic, msg = "" as string) as string
- if not TF_Utils__EqValues(first, second)
- if msg = ""
- first_as_string = TF_Utils__AsString(first)
- second_as_string = TF_Utils__AsString(second)
- msg = first_as_string + " != " + second_as_string
- end if
- return msg
- end if
- return ""
-end function
-
-' ----------------------------------------------------------------
-' Fail if the two objects are equal as determined by the '=' operator.
-
-' @param first (dynamic) A first object to compare.
-' @param second (dynamic) A second object to compare.
-' @param msg (string) An error message.
-' Default value: ""
-
-' @return An error message.
-' ----------------------------------------------------------------
-function BTS__AssertNotEqual(first as dynamic, second as dynamic, msg = "" as string) as string
- if TF_Utils__EqValues(first, second)
- if msg = ""
- first_as_string = TF_Utils__AsString(first)
- second_as_string = TF_Utils__AsString(second)
- msg = first_as_string + " == " + second_as_string
- end if
- return msg
- end if
- return ""
-end function
-
-' ----------------------------------------------------------------
-' Fail if the value is not invalid.
-
-' @param value (dynamic) A value to check.
-' @param msg (string) An error message.
-' Default value: ""
-
-' @return An error message.
-' ----------------------------------------------------------------
-function BTS__AssertInvalid(value as dynamic, msg = "" as string) as string
- if TF_Utils__IsValid(value)
- if msg = ""
- expr_as_string = TF_Utils__AsString(value)
- msg = expr_as_string + " <> Invalid"
- end if
- return msg
- end if
- return ""
-end function
-
-' ----------------------------------------------------------------
-' Fail if the value is invalid.
-
-' @param value (dynamic) A value to check.
-' @param msg (string) An error message.
-' Default value: ""
-
-' @return An error message.
-' ----------------------------------------------------------------
-function BTS__AssertNotInvalid(value as dynamic, msg = "" as string) as string
- if not TF_Utils__IsValid(value)
- if msg = ""
- if LCase(Type(value)) = "" then value = invalid
- expr_as_string = TF_Utils__AsString(value)
- msg = expr_as_string + " = Invalid"
- end if
- return msg
- end if
- return ""
-end function
-
-' ----------------------------------------------------------------
-' Fail if the array doesn't have the key.
-
-' @param array (dynamic) A target array.
-' @param key (string) A key name.
-' @param msg (string) An error message.
-' Default value: ""
-
-' @return An error message.
-' ----------------------------------------------------------------
-function BTS__AssertAAHasKey(array as dynamic, key as dynamic, msg = "" as string) as string
- if not TF_Utils__IsString(key)
- return "Key value has invalid type."
- end if
-
- if TF_Utils__IsAssociativeArray(array)
- if not array.DoesExist(key)
- if msg = ""
- msg = "Array doesn't have the '" + key + "' key."
- end if
- return msg
- end if
- else
- msg = "Input value is not an Associative Array."
- return msg
- end if
-
- return ""
-end function
-
-' ----------------------------------------------------------------
-' Fail if the array has the key.
-
-' @param array (dynamic) A target array.
-' @param key (string) A key name.
-' @param msg (string) An error message.
-' Default value: ""
-
-' @return An error message.
-' ----------------------------------------------------------------
-function BTS__AssertAANotHasKey(array as dynamic, key as dynamic, msg = "" as string) as string
- if not TF_Utils__IsString(key)
- return "Key value has invalid type."
- end if
-
- if TF_Utils__IsAssociativeArray(array)
- if array.DoesExist(key)
- if msg = ""
- msg = "Array has the '" + key + "' key."
- end if
- return msg
- end if
- else
- msg = "Input value is not an Associative Array."
- return msg
- end if
-
- return ""
-end function
-
-' ----------------------------------------------------------------
-' Fail if the array doesn't have the keys list.
-
-' @param array (dynamic) A target associative array.
-' @param keys (object) A key names array.
-' @param msg (string) An error message.
-' Default value: ""
-
-' @return An error message.
-' ----------------------------------------------------------------
-function BTS__AssertAAHasKeys(array as dynamic, keys as object, msg = "" as string) as string
- if not TF_Utils__IsAssociativeArray(array)
- return "Input value is not an Associative Array."
- end if
-
- if not TF_Utils__IsArray(keys) or keys.Count() = 0
- return "Keys value is not an Array or is empty."
- end if
-
- if TF_Utils__IsAssociativeArray(array) and TF_Utils__IsArray(keys)
- for each key in keys
- if not TF_Utils__IsString(key)
- return "Key value has invalid type."
- end if
-
- if not array.DoesExist(key)
- if msg = ""
- msg = "Array doesn't have the '" + key + "' key."
- end if
-
- return msg
- end if
- end for
- else
- msg = "Input value is not an Associative Array."
- return msg
- end if
-
- return ""
-end function
-
-' ----------------------------------------------------------------
-' Fail if the array has the keys list.
-
-' @param array (dynamic) A target associative array.
-' @param keys (object) A key names array.
-' @param msg (string) An error message.
-' Default value: ""
-
-' @return An error message.
-' ----------------------------------------------------------------
-function BTS__AssertAANotHasKeys(array as dynamic, keys as object, msg = "" as string) as string
- if not TF_Utils__IsAssociativeArray(array)
- return "Input value is not an Associative Array."
- end if
-
- if not TF_Utils__IsArray(keys) or keys.Count() = 0
- return "Keys value is not an Array or is empty."
- end if
-
- if TF_Utils__IsAssociativeArray(array) and TF_Utils__IsArray(keys)
- for each key in keys
- if not TF_Utils__IsString(key)
- return "Key value has invalid type."
- end if
-
- if array.DoesExist(key)
- if msg = ""
- msg = "Array has the '" + key + "' key."
- end if
- return msg
- end if
- end for
- else
- msg = "Input value is not an Associative Array."
- return msg
- end if
- return ""
-end function
-
-' ----------------------------------------------------------------
-' Fail if the array doesn't have the item.
-
-' @param array (dynamic) A target array.
-' @param value (dynamic) A value to check.
-' @param key (object) A key name for associative array.
-' @param msg (string) An error message.
-' Default value: ""
-
-' @return An error message.
-' ----------------------------------------------------------------
-function BTS__AssertArrayContains(array as dynamic, value as dynamic, key = invalid as dynamic, msg = "" as string) as string
- if key <> invalid and not TF_Utils__IsString(key)
- return "Key value has invalid type."
- end if
-
- if TF_Utils__IsAssociativeArray(array) or TF_Utils__IsArray(array)
- if not TF_Utils__ArrayContains(array, value, key)
- msg = "Array doesn't have the '" + TF_Utils__AsString(value) + "' value."
-
- return msg
- end if
- else
- msg = "Input value is not an Array."
-
- return msg
- end if
-
- return ""
-end function
-
-' ----------------------------------------------------------------
-' Fail if the array has the item.
-
-' @param array (dynamic) A target array.
-' @param value (dynamic) A value to check.
-' @param key (object) A key name for associative array.
-' @param msg (string) An error message.
-' Default value: ""
-
-' @return An error message.
-' ----------------------------------------------------------------
-function BTS__AssertArrayNotContains(array as dynamic, value as dynamic, key = invalid as dynamic, msg = "" as string) as string
- if key <> invalid and not TF_Utils__IsString(key)
- return "Key value has invalid type."
- end if
-
- if TF_Utils__IsAssociativeArray(array) or TF_Utils__IsArray(array)
- if TF_Utils__ArrayContains(array, value, key)
- msg = "Array has the '" + TF_Utils__AsString(value) + "' value."
-
- return msg
- end if
- else
- msg = "Input value is not an Array."
-
- return msg
- end if
-
- return ""
-end function
-
-' ----------------------------------------------------------------
-' Fail if the array doesn't have the item subset.
-
-' @param array (dynamic) A target array.
-' @param subset (dynamic) An items array to check.
-' @param msg (string) An error message.
-' Default value: ""
-
-' @return An error message.
-' ----------------------------------------------------------------
-function BTS__AssertArrayContainsSubset(array as dynamic, subset as dynamic, msg = "" as string) as string
- if (TF_Utils__IsAssociativeArray(array) and TF_Utils__IsAssociativeArray(subset)) or (TF_Utils__IsArray(array) and TF_Utils__IsArray(subset))
- isAA = TF_Utils__IsAssociativeArray(subset)
- for each item in subset
- key = invalid
- value = item
- if isAA
- key = item
- value = subset[key]
- end if
-
- if not TF_Utils__ArrayContains(array, value, key)
- msg = "Array doesn't have the '" + TF_Utils__AsString(value) + "' value."
-
- return msg
- end if
- end for
- else
- msg = "Input value is not an Array."
-
- return msg
- end if
-
- return ""
-end function
-
-' ----------------------------------------------------------------
-' Fail if the array have the item from subset.
-
-' @param array (dynamic) A target array.
-' @param subset (dynamic) A items array to check.
-' @param msg (string) An error message.
-' Default value: ""
-
-' @return An error message.
-' ----------------------------------------------------------------
-function BTS__AssertArrayNotContainsSubset(array as dynamic, subset as dynamic, msg = "" as string) as string
- if (TF_Utils__IsAssociativeArray(array) and TF_Utils__IsAssociativeArray(subset)) or (TF_Utils__IsArray(array) and TF_Utils__IsArray(subset))
- isAA = TF_Utils__IsAssociativeArray(subset)
- for each item in subset
- key = invalid
- value = item
- if isAA
- key = item
- value = subset[key]
- end if
-
- if TF_Utils__ArrayContains(array, value, key)
- msg = "Array has the '" + TF_Utils__AsString(value) + "' value."
-
- return msg
- end if
- end for
- else
- msg = "Input value is not an Array."
-
- return msg
- end if
-
- return ""
-end function
-
-' ----------------------------------------------------------------
-' Fail if the array items count <> expected count
-
-' @param array (dynamic) A target array.
-' @param count (integer) An expected array items count.
-' @param msg (string) An error message.
-' Default value: ""
-
-' @return An error message.
-' ----------------------------------------------------------------
-function BTS__AssertArrayCount(array as dynamic, count as dynamic, msg = "" as string) as string
- if not TF_Utils__IsInteger(count)
- return "Count value should be an integer."
- end if
-
- if TF_Utils__IsAssociativeArray(array) or TF_Utils__IsArray(array)
- if array.Count() <> count
- msg = "Array items count <> " + TF_Utils__AsString(count) + "."
-
- return msg
- end if
- else
- msg = "Input value is not an Array."
-
- return msg
- end if
-
- return ""
-end function
-
-' ----------------------------------------------------------------
-' Fail if the array items count = expected count.
-
-' @param array (dynamic) A target array.
-' @param count (integer) An expected array items count.
-' @param msg (string) An error message.
-' Default value: ""
-
-' @return An error message.
-' ----------------------------------------------------------------
-function BTS__AssertArrayNotCount(array as dynamic, count as dynamic, msg = "" as string) as string
- if not TF_Utils__IsInteger(count)
- return "Count value should be an integer."
- end if
-
- if TF_Utils__IsAssociativeArray(array) or TF_Utils__IsArray(array)
- if array.Count() = count
- msg = "Array items count = " + TF_Utils__AsString(count) + "."
-
- return msg
- end if
- else
- msg = "Input value is not an Array."
-
- return msg
- end if
-
- return ""
-end function
-
-' ----------------------------------------------------------------
-' Fail if the item is not empty array or string.
-
-' @param item (dynamic) An array or string to check.
-' @param msg (string) An error message.
-' Default value: ""
-
-' @return An error message.
-' ----------------------------------------------------------------
-function BTS__AssertEmpty(item as dynamic, msg = "" as string) as string
- if TF_Utils__IsAssociativeArray(item) or TF_Utils__IsArray(item)
- if item.Count() > 0
- msg = "Array is not empty."
-
- return msg
- end if
- else if TF_Utils__IsString(item)
- if Len(item) <> 0
- msg = "Input value is not empty."
-
- return msg
- end if
- else
- msg = "Input value is not an Array, AssociativeArray or String."
-
- return msg
- end if
-
- return ""
-end function
-
-' ----------------------------------------------------------------
-' Fail if the item is empty array or string.
-
-' @param item (dynamic) An array or string to check.
-' @param msg (string) An error message.
-' Default value: ""
-
-' @return An error message.
-' ----------------------------------------------------------------
-function BTS__AssertNotEmpty(item as dynamic, msg = "" as string) as string
- if TF_Utils__IsAssociativeArray(item) or TF_Utils__IsArray(item)
- if item.Count() = 0
- msg = "Array is empty."
-
- return msg
- end if
- else if TF_Utils__IsString(item)
- if Len(item) = 0
- msg = "Input value is empty."
-
- return msg
- end if
- else
- msg = "Input value is not an Array, AssociativeArray or String."
-
- return msg
- end if
-
- return ""
-end function
-
-'*****************************************************************
-'* Copyright Roku 2011-2019
-'* All Rights Reserved
-'*****************************************************************
-
-' Functions in this file:
-' ItemGenerator
-' IG_GetItem
-' IG_GetAssocArray
-' IG_GetArray
-' IG_GetSimpleType
-' IG_GetBoolean
-' IG_GetInteger
-' IG_GetFloat
-' IG_GetString
-
-' ----------------------------------------------------------------
-' Main function to generate object according to specified scheme.
-
-' @param scheme (object) A scheme with desired object structure. Can be
-' any simple type, array of types or associative array in form
-' { propertyName1 : "propertyType1"
-' propertyName2 : "propertyType2"
-' ...
-' propertyNameN : "propertyTypeN" }
-
-' @return An object according to specified scheme or invalid,
-' if scheme is not valid.
-' ----------------------------------------------------------------
-function ItemGenerator(scheme as object) as object
- this = {}
-
- this.getItem = IG_GetItem
- this.getAssocArray = IG_GetAssocArray
- this.getArray = IG_GetArray
- this.getSimpleType = IG_GetSimpleType
- this.getInteger = IG_GetInteger
- this.getFloat = IG_GetFloat
- this.getString = IG_GetString
- this.getBoolean = IG_GetBoolean
-
- if not TF_Utils__IsValid(scheme)
- return invalid
- end if
-
- return this.getItem(scheme)
-end function
-
-' TODO: Create IG_GetInvalidItem function with random type fields
-
-' ----------------------------------------------------------------
-' Generate object according to specified scheme.
-
-' @param scheme (object) A scheme with desired object structure.
-' Can be any simple type, array of types or associative array.
-
-' @return An object according to specified scheme or invalid,
-' if scheme is not one of simple type, array or
-' associative array.
-' ----------------------------------------------------------------
-function IG_GetItem(scheme as object) as object
- item = invalid
-
- if TF_Utils__IsAssociativeArray(scheme)
- item = IG_GetAssocArray(scheme)
- else if TF_Utils__IsArray(scheme)
- item = IG_GetArray(scheme)
- else if TF_Utils__IsString(scheme)
- item = IG_GetSimpleType(LCase(scheme))
- end if
-
- return item
-end function
-
-' ----------------------------------------------------------------
-' Generates associative array according to specified scheme.
-
-' @param scheme (object) An associative array with desired
-' object structure in form
-' { propertyName1 : "propertyType1"
-' propertyName2 : "propertyType2"
-' ...
-' propertyNameN : "propertyTypeN" }
-
-' @return An associative array according to specified scheme.
-' ----------------------------------------------------------------
-function IG_GetAssocArray(scheme as object) as object
- item = {}
-
- for each key in scheme
- if not item.DoesExist(key)
- item[key] = IG_GetItem(scheme[key])
- end if
- end for
-
- return item
-end function
-
-' ----------------------------------------------------------------
-' Generates array according to specified scheme.
-
-' @param scheme (object) An array with desired object types.
-
-' @return An array according to specified scheme.
-' ----------------------------------------------------------------
-function IG_GetArray(scheme as object) as object
- item = []
-
- for each key in scheme
- item.Push(IG_GetItem(key))
- end for
-
- return item
-end function
-
-' ----------------------------------------------------------------
-' Generates random value of specified type.
-
-' @param typeStr (string) A name of desired object type.
-
-' @return A simple type object or invalid if type is not supported.
-' ----------------------------------------------------------------
-function IG_GetSimpleType(typeStr as string) as object
- item = invalid
-
- if typeStr = "integer" or typeStr = "int" or typeStr = "roint"
- item = IG_GetInteger()
- else if typeStr = "float" or typeStr = "rofloat"
- item = IG_GetFloat()
- else if typeStr = "string" or typeStr = "rostring"
- item = IG_GetString(10)
- else if typeStr = "boolean" or typeStr = "roboolean"
- item = IG_GetBoolean()
- end if
-
- return item
-end function
-
-' ----------------------------------------------------------------
-' Generates random boolean value.
-
-' @return A random boolean value.
-' ----------------------------------------------------------------
-function IG_GetBoolean() as boolean
- return TF_Utils__AsBoolean(Rnd(2) \ Rnd(2))
-end function
-
-' ----------------------------------------------------------------
-' Generates random integer value from 1 to specified seed value.
-
-' @param seed (integer) A seed value for Rnd function.
-' Default value: 100.
-
-' @return A random integer value.
-' ----------------------------------------------------------------
-function IG_GetInteger(seed = 100 as integer) as integer
- return Rnd(seed)
-end function
-
-' ----------------------------------------------------------------
-' Generates random float value.
-
-' @return A random float value.
-' ----------------------------------------------------------------
-function IG_GetFloat() as float
- return Rnd(0)
-end function
-
-' ----------------------------------------------------------------
-' Generates random string with specified length.
-
-' @param seed (integer) A string length.
-
-' @return A random string value or empty string if seed is 0.
-' ----------------------------------------------------------------
-function IG_GetString(seed as integer) as string
- item = ""
- if seed > 0
- stringLength = Rnd(seed)
-
- for i = 0 to stringLength
- chType = Rnd(3)
-
- if chType = 1 ' Chr(48-57) - numbers
- chNumber = 47 + Rnd(10)
- else if chType = 2 ' Chr(65-90) - Uppercase Letters
- chNumber = 64 + Rnd(26)
- else ' Chr(97-122) - Lowercase Letters
- chNumber = 96 + Rnd(26)
- end if
-
- item = item + Chr(chNumber)
- end for
- end if
-
- return item
-end function
-'*****************************************************************
-'* Copyright Roku 2011-2019
-'* All Rights Reserved
-'*****************************************************************
-
-' Functions in this file:
-' Logger
-' Logger__SetVerbosity
-' Logger__SetEcho
-' Logger__SetServerURL
-' Logger__PrintStatistic
-' Logger__SendToServer
-' Logger__CreateTotalStatistic
-' Logger__CreateSuiteStatistic
-' Logger__CreateTestStatistic
-' Logger__AppendSuiteStatistic
-' Logger__AppendTestStatistic
-' Logger__PrintSuiteStatistic
-' Logger__PrintTestStatistic
-' Logger__PrintStart
-' Logger__PrintEnd
-' Logger__PrintSuiteSetUp
-' Logger__PrintSuiteStart
-' Logger__PrintSuiteEnd
-' Logger__PrintSuiteTearDown
-' Logger__PrintTestSetUp
-' Logger__PrintTestStart
-' Logger__PrintTestEnd
-' Logger__PrintTestTearDown
-
-' ----------------------------------------------------------------
-' Main function. Create Logger object.
-
-' @return A Logger object.
-' ----------------------------------------------------------------
-function Logger() as object
- this = {}
-
- this.verbosityLevel = {
- basic: 0
- normal: 1
- verboseFailed: 2
- verbose: 3
- }
-
- ' Internal properties
- this.verbosity = this.verbosityLevel.normal
- this.echoEnabled = false
- this.serverURL = ""
- this.jUnitEnabled = false
-
- ' Interface
- this.SetVerbosity = Logger__SetVerbosity
- this.SetEcho = Logger__SetEcho
- this.SetJUnit = Logger__SetJUnit
- this.SetServer = Logger__SetServer
- this.SetServerURL = Logger__SetServerURL ' Deprecated. Use Logger__SetServer instead.
- this.PrintStatistic = Logger__PrintStatistic
- this.SendToServer = Logger__SendToServer
-
- this.CreateTotalStatistic = Logger__CreateTotalStatistic
- this.CreateSuiteStatistic = Logger__CreateSuiteStatistic
- this.CreateTestStatistic = Logger__CreateTestStatistic
- this.AppendSuiteStatistic = Logger__AppendSuiteStatistic
- this.AppendTestStatistic = Logger__AppendTestStatistic
-
- ' Internal functions
- this.PrintSuiteStatistic = Logger__PrintSuiteStatistic
- this.PrintTestStatistic = Logger__PrintTestStatistic
- this.PrintStart = Logger__PrintStart
- this.PrintEnd = Logger__PrintEnd
- this.PrintSuiteSetUp = Logger__PrintSuiteSetUp
- this.PrintSuiteStart = Logger__PrintSuiteStart
- this.PrintSuiteEnd = Logger__PrintSuiteEnd
- this.PrintSuiteTearDown = Logger__PrintSuiteTearDown
- this.PrintTestSetUp = Logger__PrintTestSetUp
- this.PrintTestStart = Logger__PrintTestStart
- this.PrintTestEnd = Logger__PrintTestEnd
- this.PrintTestTearDown = Logger__PrintTestTearDown
- this.PrintJUnitFormat = Logger__PrintJUnitFormat
-
- return this
-end function
-
-' ----------------------------------------------------------------
-' Set logging verbosity parameter.
-
-' @param verbosity (integer) A verbosity level.
-' Posible values:
-' 0 - basic
-' 1 - normal
-' 2 - verbose failed tests
-' 3 - verbose
-' Default level: 1
-' ----------------------------------------------------------------
-sub Logger__SetVerbosity(verbosity = m.verbosityLevel.normal as integer)
- if verbosity >= m.verbosityLevel.basic and verbosity <= m.verbosityLevel.verbose
- m.verbosity = verbosity
- end if
-end sub
-
-' ----------------------------------------------------------------
-' Set logging echo parameter.
-
-' @param enable (boolean) A echo trigger.
-' Posible values: true or false
-' Default value: false
-' ----------------------------------------------------------------
-sub Logger__SetEcho(enable = false as boolean)
- m.echoEnabled = enable
-end sub
-
-' ----------------------------------------------------------------
-' Set logging JUnit output parameter.
-
-' @param enable (boolean) A JUnit output trigger.
-' Posible values: true or false
-' Default value: false
-' ----------------------------------------------------------------
-sub Logger__SetJUnit(enable = false as boolean)
- m.jUnitEnabled = enable
-end sub
-
-' ----------------------------------------------------------------
-' Set storage server parameters.
-
-' @param url (string) Storage server host.
-' Default value: ""
-' @param port (string) Storage server port.
-' Default value: ""
-' ----------------------------------------------------------------
-sub Logger__SetServer(host = "" as string, port = "" as string)
- if TF_Utils__IsNotEmptyString(host)
- if TF_Utils__IsNotEmptyString(port)
- m.serverURL = "http://" + host + ":" + port
- else
- m.serverURL = "http://" + host
- end if
- end if
-end sub
-
-' ----------------------------------------------------------------
-' Set storage server URL parameter.
-
-' @param url (string) A storage server URL.
-' Default value: ""
-' ----------------------------------------------------------------
-sub Logger__SetServerURL(url = "" as string)
- ? "This function is deprecated. Please use Logger__SetServer(host, port)"
-end sub
-
-'----------------------------------------------------------------
-' Send test results as a POST json payload.
-'
-' @param statObj (object) stats of the test run.
-' Default value: invalid
-' ----------------------------------------------------------------
-sub Logger__SendToServer(statObj as object)
- if TF_Utils__IsNotEmptyString(m.serverURL) and TF_Utils__IsValid(statObj)
- ? "***"
- ? "*** Sending statsObj to server: "; m.serverURL
-
- request = CreateObject("roUrlTransfer")
- request.SetUrl(m.serverURL)
- statString = FormatJson(statObj)
-
- ? "*** Response: "; request.postFromString(statString)
- ? "***"
- ? "******************************************************************"
- end if
-end sub
-
-' ----------------------------------------------------------------
-' Print statistic object with specified verbosity.
-
-' @param statObj (object) A statistic object to print.
-' ----------------------------------------------------------------
-sub Logger__PrintStatistic(statObj as object)
- if not m.echoEnabled
- m.PrintStart()
-
- if m.verbosity = m.verbosityLevel.normal or m.verbosity = m.verbosityLevel.verboseFailed
- for each testSuite in statObj.Suites
- for each testCase in testSuite.Tests
- if m.verbosity = m.verbosityLevel.verboseFailed and testCase.result = "Fail"
- m.printTestStatistic(testCase)
- else
- ? "*** "; testSuite.Name; ": "; testCase.Name; " - "; testCase.Result
- end if
- end for
- end for
- else if m.verbosity = m.verbosityLevel.verbose
- for each testSuite in statObj.Suites
- m.PrintSuiteStatistic(testSuite)
- end for
- end if
- end if
-
- ? "***"
- ? "*** Total = "; TF_Utils__AsString(statObj.Total); " ; Passed = "; statObj.Correct; " ; Failed = "; statObj.Fail; " ; Skipped = "; statObj.skipped; " ; Crashes = "; statObj.Crash;
- ? "*** Time spent: "; statObj.Time; "ms"
- ? "***"
-
- m.PrintEnd()
-
- m.SendToServer(statObj)
-
- if m.jUnitEnabled
- m.printJUnitFormat(statObj)
- end if
-end sub
-
-' ----------------------------------------------------------------
-' Create an empty statistic object for totals in output log.
-
-' @return An empty statistic object.
-' ----------------------------------------------------------------
-function Logger__CreateTotalStatistic() as object
- statTotalItem = {
- Suites: []
- Time: 0
- Total: 0
- Correct: 0
- Fail: 0
- Skipped: 0
- Crash: 0
- }
-
- if m.echoEnabled
- m.PrintStart()
- end if
-
- return statTotalItem
-end function
-
-' ----------------------------------------------------------------
-' Create an empty statistic object for test suite with specified name.
-
-' @param name (string) A test suite name for statistic object.
-
-' @return An empty statistic object for test suite.
-' ----------------------------------------------------------------
-function Logger__CreateSuiteStatistic(name as string) as object
- statSuiteItem = {
- Name: name
- Tests: []
- Time: 0
- Total: 0
- Correct: 0
- Fail: 0
- Skipped: 0
- Crash: 0
- }
-
- if m.echoEnabled
- if m.verbosity = m.verbosityLevel.verbose
- m.PrintSuiteStart(name)
- end if
- end if
-
- return statSuiteItem
-end function
-
-' ----------------------------------------------------------------
-' Create statistic object for test with specified name.
-
-' @param name (string) A test name.
-' @param result (string) A result of test running.
-' Posible values: "Success", "Fail".
-' Default value: "Success"
-' @param time (integer) A test running time.
-' Default value: 0
-' @param errorCode (integer) An error code for failed test.
-' Posible values:
-' 252 (&hFC) : ERR_NORMAL_END
-' 226 (&hE2) : ERR_VALUE_RETURN
-' 233 (&hE9) : ERR_USE_OF_UNINIT_VAR
-' 020 (&h14) : ERR_DIV_ZERO
-' 024 (&h18) : ERR_TM
-' 244 (&hF4) : ERR_RO2
-' 236 (&hEC) : ERR_RO4
-' 002 (&h02) : ERR_SYNTAX
-' 241 (&hF1) : ERR_WRONG_NUM_PARAM
-' Default value: 0
-' @param errorMessage (string) An error message for failed test.
-
-' @return A statistic object for test.
-' ----------------------------------------------------------------
-function Logger__CreateTestStatistic(name as string, result = "Success" as string, time = 0 as integer, errorCode = 0 as integer, errorMessage = "" as string, isInit = false as boolean) as object
- statTestItem = {
- Name: name
- Result: result
- Time: time
- PerfData: {}
- Error: {
- Code: errorCode
- Message: errorMessage
- }
- }
-
- if m.echoEnabled and not isInit
- if m.verbosity = m.verbosityLevel.verbose
- m.PrintTestStart(name)
- end if
- end if
-
- return statTestItem
-end function
-
-' ----------------------------------------------------------------
-' Append test statistic to test suite statistic.
-
-' @param statSuiteObj (object) A target test suite object.
-' @param statTestObj (object) A test statistic to append.
-' ----------------------------------------------------------------
-sub Logger__AppendTestStatistic(statSuiteObj as object, statTestObj as object)
- if TF_Utils__IsAssociativeArray(statSuiteObj) and TF_Utils__IsAssociativeArray(statTestObj)
- statSuiteObj.Tests.Push(statTestObj)
-
- if TF_Utils__IsInteger(statTestObj.time)
- statSuiteObj.Time = statSuiteObj.Time + statTestObj.Time
- end if
-
- statSuiteObj.Total = statSuiteObj.Total + 1
-
- if LCase(statTestObj.Result) = "success"
- statSuiteObj.Correct = statSuiteObj.Correct + 1
- else if LCase(statTestObj.result) = "fail"
- statSuiteObj.Fail = statSuiteObj.Fail + 1
- else if LCase(statTestObj.result) = "skipped"
- statSuiteObj.skipped++
- else
- statSuiteObj.crash = statSuiteObj.crash + 1
- end if
-
- if m.echoEnabled
- if m.verbosity = m.verbosityLevel.normal
- ? "*** "; statSuiteObj.Name; ": "; statTestObj.Name; " - "; statTestObj.Result
- else if m.verbosity = m.verbosityLevel.verbose
- m.PrintTestStatistic(statTestObj)
- end if
- end if
- end if
-end sub
-
-' ----------------------------------------------------------------
-' Append suite statistic to total statistic object.
-
-' @param statTotalObj (object) A target total statistic object.
-' @param statSuiteObj (object) A test suite statistic object to append.
-' ----------------------------------------------------------------
-sub Logger__AppendSuiteStatistic(statTotalObj as object, statSuiteObj as object)
- if TF_Utils__IsAssociativeArray(statTotalObj) and TF_Utils__IsAssociativeArray(statSuiteObj)
- statTotalObj.Suites.Push(statSuiteObj)
- statTotalObj.Time = statTotalObj.Time + statSuiteObj.Time
-
- if TF_Utils__IsInteger(statSuiteObj.Total)
- statTotalObj.Total = statTotalObj.Total + statSuiteObj.Total
- end if
-
- if TF_Utils__IsInteger(statSuiteObj.Correct)
- statTotalObj.Correct = statTotalObj.Correct + statSuiteObj.Correct
- end if
-
- if TF_Utils__IsInteger(statSuiteObj.Fail)
- statTotalObj.Fail = statTotalObj.Fail + statSuiteObj.Fail
- end if
-
- if TF_Utils__IsInteger(statSuiteObj.skipped)
- statTotalObj.skipped += statSuiteObj.skipped
- end if
-
- if TF_Utils__IsInteger(statSuiteObj.Crash)
- statTotalObj.Crash = statTotalObj.Crash + statSuiteObj.Crash
- end if
-
- if m.echoEnabled
- if m.verbosity = m.verbosityLevel.verbose
- m.PrintSuiteStatistic(statSuiteObj)
- end if
- end if
- end if
-end sub
-
-' ----------------------------------------------------------------
-' Print test suite statistic.
-
-' @param statSuiteObj (object) A target test suite object to print.
-' ----------------------------------------------------------------
-sub Logger__PrintSuiteStatistic(statSuiteObj as object)
- if not m.echoEnabled
- m.PrintSuiteStart(statSuiteObj.Name)
-
- for each testCase in statSuiteObj.Tests
- m.PrintTestStatistic(testCase)
- end for
- end if
-
- ? "==="
- ? "=== Total = "; TF_Utils__AsString(statSuiteObj.Total); " ; Passed = "; statSuiteObj.Correct; " ; Failed = "; statSuiteObj.Fail; " ; Skipped = "; statSuiteObj.skipped; " ; Crashes = "; statSuiteObj.Crash;
- ? " Time spent: "; statSuiteObj.Time; "ms"
- ? "==="
-
- m.PrintSuiteEnd(statSuiteObj.Name)
-end sub
-
-' ----------------------------------------------------------------
-' Print test statistic.
-
-' @param statTestObj (object) A target test object to print.
-' ----------------------------------------------------------------
-sub Logger__PrintTestStatistic(statTestObj as object)
- if not m.echoEnabled
- m.PrintTestStart(statTestObj.Name)
- end if
-
- ? "--- Result: "; statTestObj.Result
- ? "--- Time: "; statTestObj.Time
-
- if LCase(statTestObj.result) = "skipped"
- if Len(statTestObj.message) > 0
- ? "--- Message: "; statTestObj.message
- end if
- else if LCase(statTestObj.Result) <> "success"
- ? "--- Error Code: "; statTestObj.Error.Code
- ? "--- Error Message: "; statTestObj.Error.Message
- end if
-
- m.PrintTestEnd(statTestObj.Name)
-end sub
-
-' ----------------------------------------------------------------
-' Print testting start message.
-' ----------------------------------------------------------------
-sub Logger__PrintStart()
- ? ""
- ? "******************************************************************"
- ? "******************************************************************"
- ? "************* Start testing *************"
- ? "******************************************************************"
-end sub
-
-' ----------------------------------------------------------------
-' Print testing end message.
-' ----------------------------------------------------------------
-sub Logger__PrintEnd()
- ? "******************************************************************"
- ? "************* End testing *************"
- ? "******************************************************************"
- ? "******************************************************************"
- ? ""
-end sub
-
-' ----------------------------------------------------------------
-' Print test suite SetUp message.
-' ----------------------------------------------------------------
-sub Logger__PrintSuiteSetUp(sName as string)
- if m.verbosity = m.verbosityLevel.verbose
- ? "================================================================="
- ? "=== SetUp "; sName; " suite."
- ? "================================================================="
- end if
-end sub
-
-' ----------------------------------------------------------------
-' Print test suite start message.
-' ----------------------------------------------------------------
-sub Logger__PrintSuiteStart(sName as string)
- ? "================================================================="
- ? "=== Start "; sName; " suite:"
- ? "==="
-end sub
-
-' ----------------------------------------------------------------
-' Print test suite end message.
-' ----------------------------------------------------------------
-sub Logger__PrintSuiteEnd(sName as string)
- ? "==="
- ? "=== End "; sName; " suite."
- ? "================================================================="
-end sub
-
-' ----------------------------------------------------------------
-' Print test suite TearDown message.
-' ----------------------------------------------------------------
-sub Logger__PrintSuiteTearDown(sName as string)
- if m.verbosity = m.verbosityLevel.verbose
- ? "================================================================="
- ? "=== TearDown "; sName; " suite."
- ? "================================================================="
- end if
-end sub
-
-' ----------------------------------------------------------------
-' Print test setUp message.
-' ----------------------------------------------------------------
-sub Logger__PrintTestSetUp(tName as string)
- if m.verbosity = m.verbosityLevel.verbose
- ? "----------------------------------------------------------------"
- ? "--- SetUp "; tName; " test."
- ? "----------------------------------------------------------------"
- end if
-end sub
-
-' ----------------------------------------------------------------
-' Print test start message.
-' ----------------------------------------------------------------
-sub Logger__PrintTestStart(tName as string)
- ? "----------------------------------------------------------------"
- ? "--- Start "; tName; " test:"
- ? "---"
-end sub
-
-' ----------------------------------------------------------------
-' Print test end message.
-' ----------------------------------------------------------------
-sub Logger__PrintTestEnd(tName as string)
- ? "---"
- ? "--- End "; tName; " test."
- ? "----------------------------------------------------------------"
-end sub
-
-' ----------------------------------------------------------------
-' Print test TearDown message.
-' ----------------------------------------------------------------
-sub Logger__PrintTestTearDown(tName as string)
- if m.verbosity = m.verbosityLevel.verbose
- ? "----------------------------------------------------------------"
- ? "--- TearDown "; tName; " test."
- ? "----------------------------------------------------------------"
- end if
-end sub
-
-sub Logger__PrintJUnitFormat(statObj as object)
- ' TODO finish report
- xml = CreateObject("roXMLElement")
- xml.SetName("testsuites")
- for each testSuiteAA in statObj.suites
- testSuite = xml.AddElement("testsuite")
- ' name="FeatureManagerTest" time="13.923" tests="2" errors="0" skipped="0" failures="0"
- testSuite.AddAttribute("name", testSuiteAA.name)
- testSuite.AddAttribute("time", testSuiteAA.time.toStr())
- testSuite.AddAttribute("tests", testSuiteAA.Tests.count().toStr())
-
- skippedNum = 0
- failedNum = 0
- for each testAA in testSuiteAA.Tests
- test = testSuite.AddElement("testcase")
- test.AddAttribute("name", testAA.name)
- test.AddAttribute("time", testAA.time.toStr())
-
- if LCase(testAA.result) = "skipped" then
- test.AddElement("skipped")
- skippedNum++
- else if LCase(testAA.Result) <> "success"
- failure = test.AddElement("failure")
- failure.AddAttribute("message", testAA.error.message)
- failure.AddAttribute("type", testAA.error.code.tostr())
- failedNum++
- end if
- end for
- testSuite.AddAttribute("errors", failedNum.tostr())
- testSuite.AddAttribute("skipped", skippedNum.tostr())
- end for
- ? xml.GenXML(true)
-end sub
-'*****************************************************************
-'* Copyright Roku 2011-2019
-'* All Rights Reserved
-'*****************************************************************
-
-' Functions in this file:
-' TestRunner
-' TestRunner__Run
-' TestRunner__SetTestsDirectory
-' TestRunner__SetTestFilePrefix
-' TestRunner__SetTestSuitePrefix
-' TestRunner__SetTestSuiteName
-' TestRunner__SetTestCaseName
-' TestRunner__SetFailFast
-' TestRunner__GetTestSuitesList
-' TestRunner__GetTestSuiteNamesList
-' TestRunner__GetTestFilesList
-' TestRunner__GetTestNodesList
-' TestFramework__RunNodeTests
-
-' ----------------------------------------------------------------
-' Main function. Create TestRunner object.
-
-' @return A TestRunner object.
-' ----------------------------------------------------------------
-function TestRunner() as object
- this = {}
- GetGlobalAA().globalErrorsList = []
- this.isNodeMode = GetGlobalAA().top <> invalid
- this.Logger = Logger()
-
- ' Internal properties
- this.SKIP_TEST_MESSAGE_PREFIX = "SKIP_TEST_MESSAGE_PREFIX__"
- this.nodesTestDirectory = "pkg:/components/tests"
- if this.isNodeMode
- this.testsDirectory = this.nodesTestDirectory
- this.testFilePrefix = m.top.subtype()
- else
- this.testsDirectory = "pkg:/source/tests"
- this.testFilePrefix = "Test__"
- end if
- this.testSuitePrefix = "TestSuite__"
- this.testSuiteName = ""
- this.testCaseName = ""
- this.failFast = false
-
- ' Interface
- this.Run = TestRunner__Run
- this.SetTestsDirectory = TestRunner__SetTestsDirectory
- this.SetTestFilePrefix = TestRunner__SetTestFilePrefix
- this.SetTestSuitePrefix = TestRunner__SetTestSuitePrefix
- this.SetTestSuiteName = TestRunner__SetTestSuiteName ' Obsolete, will be removed in next versions
- this.SetTestCaseName = TestRunner__SetTestCaseName ' Obsolete, will be removed in next versions
- this.SetFailFast = TestRunner__SetFailFast
- this.SetFunctions = TestRunner__SetFunctions
- this.SetIncludeFilter = TestRunner__SetIncludeFilter
- this.SetExcludeFilter = TestRunner__SetExcludeFilter
-
- ' Internal functions
- this.GetTestFilesList = TestRunner__GetTestFilesList
- this.GetTestSuitesList = TestRunner__GetTestSuitesList
- this.GetTestNodesList = TestRunner__GetTestNodesList
- this.GetTestSuiteNamesList = TestRunner__GetTestSuiteNamesList
- this.GetIncludeFilter = TestRunner__GetIncludeFilter
- this.GetExcludeFilter = TestRunner__GetExcludeFilter
-
- return this
-end function
-
-' ----------------------------------------------------------------
-' Run main test loop.
-
-' @param statObj (object, optional) statistic object to be used in tests
-' @param testSuiteNamesList (array, optional) array of test suite function names to be used in tests
-
-' @return Statistic object if run in node mode, invalid otherwise
-' ----------------------------------------------------------------
-function TestRunner__Run(statObj = m.Logger.CreateTotalStatistic() as object, testSuiteNamesList = [] as object) as object
- alltestCount = 0
- totalStatObj = statObj
- testSuitesList = m.GetTestSuitesList(testSuiteNamesList)
-
- globalErrorsList = GetGlobalAA().globalErrorsList
- for each testSuite in testSuitesList
- testCases = testSuite.testCases
- testCount = testCases.Count()
- alltestCount = alltestCount + testCount
-
- IS_NEW_APPROACH = testSuite.IS_NEW_APPROACH
- ' create dedicated env for each test, so that they will have not global m and don't rely on m.that is set in another suite
- env = {}
-
- if TF_Utils__IsFunction(testSuite.SetUp)
- m.Logger.PrintSuiteSetUp(testSuite.Name)
- if IS_NEW_APPROACH then
- env.functionToCall = testSuite.SetUp
- env.functionToCall()
- else
- testSuite.SetUp()
- end if
- end if
-
- suiteStatObj = m.Logger.CreateSuiteStatistic(testSuite.Name)
- ' Initiate empty test statistics object to print results if no tests was run
- testStatObj = m.Logger.CreateTestStatistic("", "Success", 0, 0, "", true)
- for each testCase in testCases
- ' clear all existing errors
- globalErrorsList.clear()
-
- if m.testCaseName = "" or (m.testCaseName <> "" and LCase(testCase.Name) = LCase(m.testCaseName))
- skipTest = TF_Utils__AsBoolean(testCase.skip)
-
- if TF_Utils__IsFunction(testCase.SetUp) and not skipTest
- m.Logger.PrintTestSetUp(testCase.Name)
- if IS_NEW_APPROACH then
- env.functionToCall = testCase.SetUp
- env.functionToCall()
- else
- testCase.SetUp()
- end if
- end if
-
- testTimer = CreateObject("roTimespan")
- testStatObj = m.Logger.CreateTestStatistic(testCase.Name)
-
- if skipTest
- runResult = m.SKIP_TEST_MESSAGE_PREFIX + "Test was skipped according to specified filters"
- else
- testSuite.testInstance = testCase
- testSuite.testCase = testCase.Func
-
- runResult = ""
- if IS_NEW_APPROACH then
- env.functionToCall = testCase.Func
-
- if GetInterface(env.functionToCall, "ifFunction") <> invalid
- if testCase.hasArguments then
- env.functionToCall(testCase.arg)
- else
- env.functionToCall()
- end if
- else
- UTF_fail("Failed to execute test """ + testCase.Name + """ function pointer not found")
- end if
- else
- runResult = testSuite.testCase()
- end if
- end if
-
- if TF_Utils__IsFunction(testCase.TearDown) and not skipTest
- m.Logger.PrintTestTearDown(testCase.Name)
- if IS_NEW_APPROACH then
- env.functionToCall = testCase.TearDown
- env.functionToCall()
- else
- testCase.TearDown()
- end if
- end if
-
- if IS_NEW_APPROACH then
- if globalErrorsList.count() > 0
- for each error in globalErrorsList
- runResult += error + Chr(10) + string(10, "-") + Chr(10)
- end for
- end if
- end if
-
- if runResult <> ""
- if InStr(0, runResult, m.SKIP_TEST_MESSAGE_PREFIX) = 1
- testStatObj.result = "Skipped"
- testStatObj.message = runResult.Mid(Len(m.SKIP_TEST_MESSAGE_PREFIX)) ' remove prefix from the message
- else
- testStatObj.Result = "Fail"
- testStatObj.Error.Code = 1
- testStatObj.Error.Message = runResult
- end if
- else
- testStatObj.Result = "Success"
- end if
-
- testStatObj.Time = testTimer.TotalMilliseconds()
- m.Logger.AppendTestStatistic(suiteStatObj, testStatObj)
-
- if testStatObj.Result = "Fail" and m.failFast
- suiteStatObj.Result = "Fail"
- exit for
- end if
- end if
- end for
-
- m.Logger.AppendSuiteStatistic(totalStatObj, suiteStatObj)
-
- if TF_Utils__IsFunction(testSuite.TearDown)
- m.Logger.PrintSuiteTearDown(testSuite.Name)
- testSuite.TearDown()
- end if
-
- if suiteStatObj.Result = "Fail" and m.failFast
- exit for
- end if
- end for
-
- gthis = GetGlobalAA()
- msg = ""
- if gthis.notFoundFunctionPointerList <> invalid then
- msg = Chr(10) + string(40, "---") + Chr(10)
- if m.isNodeMode
- fileNamesString = ""
-
- for each testSuiteObject in testSuiteNamesList
- if GetInterface(testSuiteObject, "ifString") <> invalid then
- fileNamesString += testSuiteObject + ".brs, "
- else if GetInterface(testSuiteObject, "ifAssociativeArray") <> invalid then
- if testSuiteObject.filePath <> invalid then
- fileNamesString += testSuiteObject.filePath + ", "
- end if
- end if
- end for
-
- msg += Chr(10) + "Create this function below in one of these files"
- msg += Chr(10) + fileNamesString + Chr(10)
-
- msg += Chr(10) + "sub init()"
- end if
- msg += Chr(10) + "Runner.SetFunctions([" + Chr(10) + " testCase" + Chr(10) + "])"
- msg += Chr(10) + "For example we think this might resolve your issue"
- msg += Chr(10) + "Runner = TestRunner()"
- msg += Chr(10) + "Runner.SetFunctions(["
-
- tmpMap = {}
- for each functionName in gthis.notFoundFunctionPointerList
- if tmpMap[functionName] = invalid then
- tmpMap[functionName] = ""
- msg += Chr(10) + " " + functionName
- end if
- end for
-
- msg += Chr(10) + "])"
- if m.isNodeMode then
- msg += Chr(10) + "end sub"
- else
- msg += Chr(10) + "Runner.Run()"
- end if
- end if
-
- if m.isNodeMode
- if msg.Len() > 0 then
- if totalStatObj.notFoundFunctionsMessage = invalid then totalStatObj.notFoundFunctionsMessage = ""
- totalStatObj.notFoundFunctionsMessage += msg
- end if
- return totalStatObj
- else
- testNodes = m.getTestNodesList()
- for each testNodeName in testNodes
- testNode = CreateObject("roSGNode", testNodeName)
- if testNode <> invalid
- testSuiteNamesList = m.GetTestSuiteNamesList(testNodeName)
- if CreateObject("roSGScreen").CreateScene(testNodeName) <> invalid
- ? "WARNING: Test cases cannot be run in main scene."
- for each testSuiteName in testSuiteNamesList
- suiteStatObj = m.Logger.CreateSuiteStatistic(testSuiteName)
- suiteStatObj.fail = 1
- suiteStatObj.total = 1
- m.Logger.AppendSuiteStatistic(totalStatObj, suiteStatObj)
- end for
- else
- params = [m, totalStatObj, testSuiteNamesList, m.GetIncludeFilter(), m.GetExcludeFilter()]
- tmp = testNode.callFunc("TestFramework__RunNodeTests", params)
- if tmp <> invalid then
- totalStatObj = tmp
- end if
- end if
- end if
- end for
-
- m.Logger.PrintStatistic(totalStatObj)
- end if
-
- if msg.Len() > 0 or totalStatObj.notFoundFunctionsMessage <> invalid then
- title = ""
- title += Chr(10) + "NOTE: If some your tests haven't been executed this might be due to outdated list of functions"
- title += Chr(10) + "To resolve this issue please execute" + Chr(10) + Chr(10)
-
- title += msg
-
- if totalStatObj.notFoundFunctionsMessage <> invalid then
- title += totalStatObj.notFoundFunctionsMessage
- end if
- ? title
- end if
-end function
-
-' ----------------------------------------------------------------
-' Set testsDirectory property.
-' ----------------------------------------------------------------
-sub TestRunner__SetTestsDirectory(testsDirectory as string)
- m.testsDirectory = testsDirectory
-end sub
-
-' ----------------------------------------------------------------
-' Set testFilePrefix property.
-' ----------------------------------------------------------------
-sub TestRunner__SetTestFilePrefix(testFilePrefix as string)
- m.testFilePrefix = testFilePrefix
-end sub
-
-' ----------------------------------------------------------------
-' Set testSuitePrefix property.
-' ----------------------------------------------------------------
-sub TestRunner__SetTestSuitePrefix(testSuitePrefix as string)
- m.testSuitePrefix = testSuitePrefix
-end sub
-
-' ----------------------------------------------------------------
-' Set testSuiteName property.
-' ----------------------------------------------------------------
-sub TestRunner__SetTestSuiteName(testSuiteName as string)
- m.testSuiteName = testSuiteName
-end sub
-
-' ----------------------------------------------------------------
-' Set testCaseName property.
-' ----------------------------------------------------------------
-sub TestRunner__SetTestCaseName(testCaseName as string)
- m.testCaseName = testCaseName
-end sub
-
-' ----------------------------------------------------------------
-' Set failFast property.
-' ----------------------------------------------------------------
-sub TestRunner__SetFailFast(failFast = false as boolean)
- m.failFast = failFast
-end sub
-
-' ----------------------------------------------------------------
-' Builds an array of test suite objects.
-
-' @param testSuiteNamesList (string, optional) array of names of test suite functions. If not passed, scans all test files for test suites
-
-' @return An array of test suites.
-' ----------------------------------------------------------------
-function TestRunner__GetTestSuitesList(testSuiteNamesList = [] as object) as object
- result = []
-
- if testSuiteNamesList.count() > 0
- for each value in testSuiteNamesList
- if TF_Utils__IsString(value) then
- tmpTestSuiteFunction = TestFramework__getFunctionPointer(value)
- if tmpTestSuiteFunction <> invalid then
- testSuite = tmpTestSuiteFunction()
-
- if TF_Utils__IsAssociativeArray(testSuite)
- result.Push(testSuite)
- end if
- end if
- ' also we can get AA that will give source code and filePath
- ' Please be aware this is executed in render thread
- else if GetInterface(value, "ifAssociativeArray") <> invalid then
- ' try to use new approach
- testSuite = ScanFileForNewTests(value.code, value.filePath)
- if testSuite <> invalid then
- result.push(testSuite)
- end if
- else if GetInterface(value, "ifFunction") <> invalid then
- result.Push(value)
- end if
- end for
- else
- testSuiteRegex = CreateObject("roRegex", "^(function|sub)\s(" + m.testSuitePrefix + m.testSuiteName + "[0-9a-z\_]*)\s*\(", "i")
- testFilesList = m.GetTestFilesList()
-
- for each filePath in testFilesList
- code = TF_Utils__AsString(ReadAsciiFile(filePath))
-
- if code <> ""
- foundTestSuite = false
- for each line in code.Tokenize(Chr(10))
- line.Trim()
-
- if testSuiteRegex.IsMatch(line)
- testSuite = invalid
- functionName = testSuiteRegex.Match(line).Peek()
-
- tmpTestSuiteFunction = TestFramework__getFunctionPointer(functionName)
- if tmpTestSuiteFunction <> invalid then
- testSuite = tmpTestSuiteFunction()
-
- if TF_Utils__IsAssociativeArray(testSuite)
- result.Push(testSuite)
- foundTestSuite = true
- else
- ' TODO check if we need this
- ' using new mode
- ' testSuite = ScanFileForNewTests(code, filePath)
-
- ' exit for
- end if
- end if
- end if
- end for
- if not foundTestSuite then
- testSuite = ScanFileForNewTests(code, filePath)
- if testSuite <> invalid then
- result.push(testSuite)
- end if
- end if
- end if
- end for
- end if
-
- return result
-end function
-
-function ScanFileForNewTests(souceCode, filePath)
- foundAnyTest = false
- testSuite = BaseTestSuite()
-
- allowedAnnotationsRegex = CreateObject("roRegex", "^'\s*@(test|beforeall|beforeeach|afterall|aftereach|repeatedtest|parameterizedtest|methodsource|ignore)\s*|\n", "i")
- voidFunctionRegex = CreateObject("roRegex", "^(function|sub)\s([a-z0-9A-Z_]*)\(\)", "i")
- anyArgsFunctionRegex = CreateObject("roRegex", "^(function|sub)\s([a-z0-9A-Z_]*)\(", "i")
-
- processors = {
- testSuite: testSuite
- filePath: filePath
- currentLine: ""
- annotations: {}
-
- functionName: ""
-
- tests: []
-
- beforeEachFunc: invalid
- beforeAllFunc: invalid
-
- AfterEachFunc: invalid
- AfterAllFunc: invalid
-
- isParameterizedTest: false
- MethodForArguments: ""
- executedParametrizedAdding: false
-
- test: sub()
- skipTest = m.doSkipTest(m.functionName)
- funcPointer = m.getFunctionPointer(m.functionName)
- m.tests.push({ name: m.functionName, pointer: funcPointer, skip: skipTest })
- end sub
-
- repeatedtest: sub()
- allowedAnnotationsRegex = CreateObject("roRegex", "^'\s*@(repeatedtest)\((\d*)\)", "i")
- annotationLine = m.annotations["repeatedtest"].line
- if allowedAnnotationsRegex.IsMatch(annotationLine)
- groups = allowedAnnotationsRegex.Match(annotationLine)
- numberOfLoops = groups[2]
- if numberOfLoops <> invalid and TF_Utils__AsInteger(numberOfLoops) > 0 then
- numberOfLoops = TF_Utils__AsInteger(numberOfLoops)
- funcPointer = m.getFunctionPointer(m.functionName)
- for index = 1 to numberOfLoops
- skipTest = m.doSkipTest(m.functionName)
- text = " " + index.tostr() + " of " + numberOfLoops.tostr()
- m.tests.push({ name: m.functionName + text, pointer: funcPointer, skip: skipTest })
- end for
- end if
- else
- ? "WARNING: Wrong format of repeatedTest(numberOfRuns) "annotationLine
- end if
- end sub
-
- parameterizedTest: sub()
- m.processParameterizedTests()
- end sub
-
- methodSource: sub()
- m.processParameterizedTests()
- end sub
-
- processParameterizedTests: sub()
- ' add test if it was not added already
- if not m.executedParametrizedAdding
- if m.annotations.methodSource <> invalid and m.annotations.parameterizedTest <> invalid then
- methodAnottation = m.annotations.methodSource.line
-
- allowedAnnotationsRegex = CreateObject("roRegex", "^'\s*@(methodsource)\(" + Chr(34) + "([A-Za-z0-9_]*)" + Chr(34) + "\)", "i")
-
- if allowedAnnotationsRegex.IsMatch(methodAnottation)
- groups = allowedAnnotationsRegex.Match(methodAnottation)
- providerFunction = groups[2]
-
- providerFunctionPointer = m.getFunctionPointer(providerFunction)
-
- if providerFunctionPointer <> invalid then
- funcPointer = m.getFunctionPointer(m.functionName)
-
- args = providerFunctionPointer()
-
- index = 1
- for each arg in args
- skipTest = m.doSkipTest(m.functionName)
- text = " " + index.tostr() + " of " + args.count().tostr()
- m.tests.push({ name: m.functionName + text, pointer: funcPointer, arg: arg, hasArgs: true, skip: skipTest })
- index++
- end for
- else
- ? "WARNING: Cannot find function [" providerFunction "]"
- end if
- end if
- else
- ? "WARNING: Wrong format of @ParameterizedTest \n @MethodSource(providerFunctionName)"
- ? "m.executedParametrizedAdding = "m.executedParametrizedAdding
- ? "m.annotations.methodSource = "m.annotations.methodSource
- ? "m.annotations.parameterizedTest = "m.annotations.parameterizedTest
- ? ""
- end if
- end if
- end sub
-
- beforeEach: sub()
- m.beforeEachFunc = m.getFunctionPointer(m.functionName)
- end sub
-
- beforeAll: sub()
- m.beforeAllFunc = m.getFunctionPointer(m.functionName)
- end sub
-
- AfterEach: sub()
- m.AfterEachFunc = m.getFunctionPointer(m.functionName)
- end sub
-
- AfterAll: sub()
- m.AfterAllFunc = m.getFunctionPointer(m.functionName)
- end sub
-
- ignore: sub()
- funcPointer = m.getFunctionPointer(m.functionName)
- m.tests.push({ name: m.functionName, pointer: funcPointer, skip: true })
- end sub
-
- doSkipTest: function(name as string)
- includeFilter = []
- excludeFilter = []
-
- gthis = GetGlobalAA()
- if gthis.IncludeFilter <> invalid then includeFilter.append(gthis.IncludeFilter)
- if gthis.ExcludeFilter <> invalid then excludeFilter.append(gthis.ExcludeFilter)
-
- ' apply test filters
- skipTest = false
- ' skip test if it is found in exclude filter
- for each testName in excludeFilter
- if TF_Utils__IsNotEmptyString(testName) and LCase(testName.Trim()) = LCase(name.Trim())
- skipTest = true
- exit for
- end if
- end for
-
- ' skip test if it is not found in include filter
- if not skipTest and includeFilter.Count() > 0
- foundInIncludeFilter = false
-
- for each testName in includeFilter
- if TF_Utils__IsNotEmptyString(testName) and LCase(testName) = LCase(name)
- foundInIncludeFilter = true
- exit for
- end if
- end for
-
- skipTest = not foundInIncludeFilter
- end if
-
- return skipTest
- end function
-
- buildTests: sub()
- testSuite = m.testSuite
- testSuite.Name = m.filePath
- if m.beforeAllFunc <> invalid then testSuite.SetUp = m.beforeAllFunc
- if m.AfterAllFunc <> invalid then testSuite.TearDown = m.AfterAllFunc
- testSuite.IS_NEW_APPROACH = true
-
- for each test in m.tests
- ' Add tests to suite's tests collection
- arg = invalid
- hasArgs = false
- if test.hasArgs <> invalid then
- arg = test.arg
- hasArgs = true
- end if
-
- testSuite.addTest(test.name, test.pointer, m.beforeEachFunc, m.AfterEachFunc, arg, hasArgs, test.skip)
- end for
- end sub
-
- getFunctionPointer: TestFramework__getFunctionPointer
- }
-
- currentAnottations = []
- index = 0
-
- for each line in souceCode.Tokenize(Chr(10))
- line = line.Trim()
- if line <> "" ' skipping empty lines
- if allowedAnnotationsRegex.IsMatch(line)
- groups = allowedAnnotationsRegex.Match(line)
- anottationType = groups[1]
- if anottationType <> invalid and processors[anottationType] <> invalid then
- currentAnottations.push(anottationType)
- processors.annotations[anottationType] = { line: line, lineIndex: index }
- end if
- else
- if currentAnottations.count() > 0 then
- isParametrized = anyArgsFunctionRegex.IsMatch(line)
- properMap = { parameterizedtest: "", methodsource: "" }
- for each availableAnottation in currentAnottations
- isParametrized = isParametrized or properMap[availableAnottation] <> invalid
- end for
-
- if voidFunctionRegex.IsMatch(line) or isParametrized then
- groups = voidFunctionRegex.Match(line)
-
- if isParametrized then
- groups = anyArgsFunctionRegex.Match(line)
- end if
- if groups[2] <> invalid then
- processors.functionName = groups[2]
- processors.currentLine = line
-
- ' process all handlers
- if isParametrized then processors.executedParametrizedAdding = false
- for each availableAnottation in currentAnottations
- processors[availableAnottation]()
- if isParametrized then processors.executedParametrizedAdding = true
- end for
- currentAnottations = []
- processors.annotations = {}
- foundAnyTest = true
- end if
- else
- ' invalidating annotation
- ' TODO print message here that we skipped annotation
- ? "WARNING: annotation " currentAnottations " isparametrized=" isParametrized " skipped at line " index ":[" line "]"
- processors.annotations = {}
- currentAnottations = []
- end if
- end if
- end if
- end if
- index++
- end for
-
- processors.buildTests()
-
- if not foundAnyTest then
- testSuite = invalid
- end if
- return testSuite
-end function
-
-function TestFramework__getFunctionPointer(functionName as string) as dynamic
- result = invalid
-
- gthis = GetGlobalAA()
- if gthis.FunctionsList <> invalid then
- for each value in gthis.FunctionsList
- if Type(value) <> "" and LCase(Type(value)) <> "" and GetInterface(value, "ifFunction") <> invalid and LCase(value.tostr()) = "function: " + LCase(functionName) then
- result = value
- exit for
- end if
- end for
- end if
-
- if LCase(Type(result)) = "" then result = invalid
- if result = invalid then
- if gthis.notFoundFunctionPointerList = invalid then gthis.notFoundFunctionPointerList = []
- gthis.notFoundFunctionPointerList.push(functionName)
- end if
- return result
-end function
-
-sub TestRunner__SetFunctions(listOfFunctions as dynamic)
- gthis = GetGlobalAA()
-
- if gthis.FunctionsList = invalid then
- gthis.FunctionsList = []
- end if
- gthis.FunctionsList.append(listOfFunctions)
-end sub
-
-sub TestRunner__SetIncludeFilter(listOfFunctions as dynamic)
- gthis = GetGlobalAA()
-
- if gthis.IncludeFilter = invalid
- gthis.IncludeFilter = []
- end if
-
- if TF_Utils__IsArray(listOfFunctions)
- gthis.IncludeFilter.Append(listOfFunctions)
- else if TF_Utils__IsNotEmptyString(listOfFunctions)
- gthis.IncludeFilter.Append(listOfFunctions.Split(","))
- else
- ? "WARNING: Could not parse input parameters for Include Filter. Filter wont be applied."
- end if
-end sub
-
-function TestRunner__GetIncludeFilter()
- gthis = GetGlobalAA()
-
- if gthis.IncludeFilter = invalid
- gthis.IncludeFilter = []
- end if
-
- return gthis.IncludeFilter
-end function
-
-sub TestRunner__SetExcludeFilter(listOfFunctions as dynamic)
- gthis = GetGlobalAA()
-
- if gthis.ExcludeFilter = invalid
- gthis.ExcludeFilter = []
- end if
-
- if TF_Utils__IsArray(listOfFunctions)
- gthis.ExcludeFilter.Append(listOfFunctions)
- else if TF_Utils__IsNotEmptyString(listOfFunctions)
- gthis.ExcludeFilter.Append(listOfFunctions.Split(","))
- else
- ? "WARNING: Could not parse input parameters for Exclude Filter. Filter wont be applied."
- end if
-end sub
-
-function TestRunner__GetExcludeFilter()
- gthis = GetGlobalAA()
-
- if gthis.ExcludeFilter = invalid
- gthis.ExcludeFilter = []
- end if
-
- return gthis.ExcludeFilter
-end function
-
-' ----------------------------------------------------------------
-' Scans all test files for test suite function names for a given test node.
-
-' @param testNodeName (string) name of a test node, test suites for which are needed
-
-' @return An array of test suite names.
-' ----------------------------------------------------------------
-function TestRunner__GetTestSuiteNamesList(testNodeName as string) as object
- result = []
- testSuiteRegex = CreateObject("roRegex", "^(function|sub)\s(" + m.testSuitePrefix + m.testSuiteName + "[0-9a-z\_]*)\s*\(", "i")
- testFilesList = m.GetTestFilesList(m.nodesTestDirectory, testNodeName)
-
- for each filePath in testFilesList
- code = TF_Utils__AsString(ReadAsciiFile(filePath))
-
- if code <> ""
- foundTestSuite = false
- for each line in code.Tokenize(Chr(10))
- line.Trim()
-
- if testSuiteRegex.IsMatch(line)
- functionName = testSuiteRegex.Match(line).Peek()
- result.Push(functionName)
- foundTestSuite = true
- end if
- end for
-
- if not foundTestSuite then
- ' we cannot scan for new tests as we are not in proper scope
- ' so we need to pass some data so this can be executed in render thread
- result.push({ filePath: filePath, code: code })
- end if
- end if
- end for
-
- return result
-end function
-
-' ----------------------------------------------------------------
-' Scan testsDirectory and all subdirectories for test files.
-
-' @param testsDirectory (string, optional) A target directory with test files.
-' @param testFilePrefix (string, optional) prefix, used by test files
-
-' @return An array of test files.
-' ----------------------------------------------------------------
-function TestRunner__GetTestFilesList(testsDirectory = m.testsDirectory as string, testFilePrefix = m.testFilePrefix as string) as object
- result = []
- testsFileRegex = CreateObject("roRegex", "^(" + testFilePrefix + ")[0-9a-z\_]*\.brs$", "i")
-
- if testsDirectory <> ""
- fileSystem = CreateObject("roFileSystem")
-
- if m.isNodeMode
- ? string(2, Chr(10))
- ? string(10, "!!!")
- ? "Note if you crash here this means that we are in render thread and searching for tests"
- ? "Problem is that file naming is wrong"
- ? "check brs file name they should match pattern ""Test_ExactComponentName_anything.brs"""
- ? "In this case we were looking for "testFilePrefix
- ? string(10, "!!!") string(2, Chr(10))
- end if
- listing = fileSystem.GetDirectoryListing(testsDirectory)
-
- for each item in listing
- itemPath = testsDirectory + "/" + item
- itemStat = fileSystem.Stat(itemPath)
-
- if itemStat.type = "directory" then
- result.Append(m.getTestFilesList(itemPath, testFilePrefix))
- else if testsFileRegex.IsMatch(item) then
- result.Push(itemPath)
- end if
- end for
- end if
-
- return result
-end function
-
-' ----------------------------------------------------------------
-' Scan nodesTestDirectory and all subdirectories for test nodes.
-
-' @param nodesTestDirectory (string, optional) A target directory with test nodes.
-
-' @return An array of test node names.
-' ----------------------------------------------------------------
-function TestRunner__GetTestNodesList(testsDirectory = m.nodesTestDirectory as string) as object
- result = []
- testsFileRegex = CreateObject("roRegex", "^(" + m.testFilePrefix + ")[0-9a-z\_]*\.xml$", "i")
-
- if testsDirectory <> ""
- fileSystem = CreateObject("roFileSystem")
- listing = fileSystem.GetDirectoryListing(testsDirectory)
-
- for each item in listing
- itemPath = testsDirectory + "/" + item
- itemStat = fileSystem.Stat(itemPath)
-
- if itemStat.type = "directory" then
- result.Append(m.getTestNodesList(itemPath))
- else if testsFileRegex.IsMatch(item) then
- result.Push(item.replace(".xml", ""))
- end if
- end for
- end if
-
- return result
-end function
-
-' ----------------------------------------------------------------
-' Creates and runs test runner. Should be used ONLY within a node.
-
-' @param params (array) parameters, passed from main thread, used to setup new test runner
-
-' @return statistic object.
-' ----------------------------------------------------------------
-function TestFramework__RunNodeTests(params as object) as object
- this = params[0]
-
- statObj = params[1]
- testSuiteNamesList = params[2]
-
- Runner = TestRunner()
-
- Runner.SetTestSuitePrefix(this.testSuitePrefix)
- Runner.SetTestFilePrefix(this.testFilePrefix)
- Runner.SetTestSuiteName(this.testSuiteName)
- Runner.SetTestCaseName(this.testCaseName)
- Runner.SetFailFast(this.failFast)
-
- Runner.SetIncludeFilter(params[3])
- Runner.SetExcludeFilter(params[4])
-
- return Runner.Run(statObj, testSuiteNamesList)
-end function
-function UTF_skip(msg = "")
- return UTF_PushErrorMessage(BTS__Skip(msg))
-end function
-
-function UTF_fail(msg = "")
- return UTF_PushErrorMessage(BTS__Fail(msg))
-end function
-
-function UTF_assertFalse(expr, msg = "Expression evaluates to true")
- return UTF_PushErrorMessage(BTS__AssertFalse(expr, msg))
-end function
-
-function UTF_assertTrue(expr, msg = "Expression evaluates to false")
- return UTF_PushErrorMessage(BTS__AssertTrue(expr, msg))
-end function
-
-function UTF_assertEqual(first, second, msg = "")
- return UTF_PushErrorMessage(BTS__AssertEqual(first, second, msg))
-end function
-
-function UTF_assertNotEqual(first, second, msg = "")
- return UTF_PushErrorMessage(BTS__AssertNotEqual(first, second, msg))
-end function
-
-function UTF_assertInvalid(value, msg = "")
- return UTF_PushErrorMessage(BTS__AssertInvalid(value, msg))
-end function
-
-function UTF_assertNotInvalid(value, msg = "")
- return UTF_PushErrorMessage(BTS__AssertNotInvalid(value, msg))
-end function
-
-function UTF_assertAAHasKey(array, key, msg = "")
- return UTF_PushErrorMessage(BTS__AssertAAHasKey(array, key, msg))
-end function
-
-function UTF_assertAANotHasKey(array, key, msg = "")
- return UTF_PushErrorMessage(BTS__AssertAANotHasKey(array, key, msg))
-end function
-
-function UTF_assertAAHasKeys(array, keys, msg = "")
- return UTF_PushErrorMessage(BTS__AssertAAHasKeys(array, keys, msg))
-end function
-
-function UTF_assertAANotHasKeys(array, keys, msg = "")
- return UTF_PushErrorMessage(BTS__AssertAANotHasKeys(array, keys, msg))
-end function
-
-function UTF_assertArrayContains(array, value, key = invalid, msg = "")
- return UTF_PushErrorMessage(BTS__AssertArrayContains(array, value, key, msg))
-end function
-
-function UTF_assertArrayNotContains(array, value, key = invalid, msg = "")
- return UTF_PushErrorMessage(BTS__AssertArrayNotContains(array, value, key, msg))
-end function
-
-function UTF_assertArrayContainsSubset(array, subset, msg = "")
- return UTF_PushErrorMessage(BTS__AssertArrayContainsSubset(array, subset, msg))
-end function
-
-function UTF_assertArrayNotContainsSubset(array, subset, msg = "")
- return UTF_PushErrorMessage(BTS__AssertArrayNotContainsSubset(array, subset, msg))
-end function
-
-function UTF_assertArrayCount(array, count, msg = "")
- return UTF_PushErrorMessage(BTS__AssertArrayCount(array, count, msg))
-end function
-
-function UTF_assertArrayNotCount(array, count, msg = "")
- return UTF_PushErrorMessage(BTS__AssertArrayNotCount(array, count, msg))
-end function
-
-function UTF_assertEmpty(item, msg = "")
- return UTF_PushErrorMessage(BTS__AssertEmpty(item, msg))
-end function
-
-function UTF_assertNotEmpty(item, msg = "")
- return UTF_PushErrorMessage(BTS__AssertNotEmpty(item, msg))
-end function
-
-function UTF_PushErrorMessage(message as string) as boolean
- result = Len(message) <= 0
- if not result then
- m.globalErrorsList.push(message)
- end if
-
- return result
-end function'*****************************************************************
-'* Copyright Roku 2011-2019
-'* All Rights Reserved
-'*****************************************************************
-' Common framework utility functions
-' *****************************************************************
-
-' *************************************************
-' TF_Utils__IsXmlElement - check if value contains XMLElement interface
-' @param value As Dynamic
-' @return As Boolean - true if value contains XMLElement interface, else return false
-' *************************************************
-function TF_Utils__IsXmlElement(value as dynamic) as boolean
- return TF_Utils__IsValid(value) and GetInterface(value, "ifXMLElement") <> invalid
-end function
-
-' *************************************************
-' TF_Utils__IsFunction - check if value contains Function interface
-' @param value As Dynamic
-' @return As Boolean - true if value contains Function interface, else return false
-' *************************************************
-function TF_Utils__IsFunction(value as dynamic) as boolean
- return TF_Utils__IsValid(value) and GetInterface(value, "ifFunction") <> invalid
-end function
-
-' *************************************************
-' TF_Utils__IsBoolean - check if value contains Boolean interface
-' @param value As Dynamic
-' @return As Boolean - true if value contains Boolean interface, else return false
-' *************************************************
-function TF_Utils__IsBoolean(value as dynamic) as boolean
- return TF_Utils__IsValid(value) and GetInterface(value, "ifBoolean") <> invalid
-end function
-
-' *************************************************
-' TF_Utils__IsInteger - check if value type equals Integer
-' @param value As Dynamic
-' @return As Boolean - true if value type equals Integer, else return false
-' *************************************************
-function TF_Utils__IsInteger(value as dynamic) as boolean
- return TF_Utils__IsValid(value) and GetInterface(value, "ifInt") <> invalid and (Type(value) = "roInt" or Type(value) = "roInteger" or Type(value) = "Integer")
-end function
-
-' *************************************************
-' TF_Utils__IsFloat - check if value contains Float interface
-' @param value As Dynamic
-' @return As Boolean - true if value contains Float interface, else return false
-' *************************************************
-function TF_Utils__IsFloat(value as dynamic) as boolean
- return TF_Utils__IsValid(value) and GetInterface(value, "ifFloat") <> invalid
-end function
-
-' *************************************************
-' TF_Utils__IsDouble - check if value contains Double interface
-' @param value As Dynamic
-' @return As Boolean - true if value contains Double interface, else return false
-' *************************************************
-function TF_Utils__IsDouble(value as dynamic) as boolean
- return TF_Utils__IsValid(value) and GetInterface(value, "ifDouble") <> invalid
-end function
-
-' *************************************************
-' TF_Utils__IsLongInteger - check if value contains LongInteger interface
-' @param value As Dynamic
-' @return As Boolean - true if value contains LongInteger interface, else return false
-' *************************************************
-function TF_Utils__IsLongInteger(value as dynamic) as boolean
- return TF_Utils__IsValid(value) and GetInterface(value, "ifLongInt") <> invalid
-end function
-
-' *************************************************
-' TF_Utils__IsNumber - check if value contains LongInteger or Integer or Double or Float interface
-' @param value As Dynamic
-' @return As Boolean - true if value is number, else return false
-' *************************************************
-function TF_Utils__IsNumber(value as dynamic) as boolean
- return TF_Utils__IsLongInteger(value) or TF_Utils__IsDouble(value) or TF_Utils__IsInteger(value) or TF_Utils__IsFloat(value)
-end function
-
-' *************************************************
-' TF_Utils__IsList - check if value contains List interface
-' @param value As Dynamic
-' @return As Boolean - true if value contains List interface, else return false
-' *************************************************
-function TF_Utils__IsList(value as dynamic) as boolean
- return TF_Utils__IsValid(value) and GetInterface(value, "ifList") <> invalid
-end function
-
-' *************************************************
-' TF_Utils__IsArray - check if value contains Array interface
-' @param value As Dynamic
-' @return As Boolean - true if value contains Array interface, else return false
-' *************************************************
-function TF_Utils__IsArray(value as dynamic) as boolean
- return TF_Utils__IsValid(value) and GetInterface(value, "ifArray") <> invalid
-end function
-
-' *************************************************
-' TF_Utils__IsAssociativeArray - check if value contains AssociativeArray interface
-' @param value As Dynamic
-' @return As Boolean - true if value contains AssociativeArray interface, else return false
-' *************************************************
-function TF_Utils__IsAssociativeArray(value as dynamic) as boolean
- return TF_Utils__IsValid(value) and GetInterface(value, "ifAssociativeArray") <> invalid
-end function
-
-' *************************************************
-' TF_Utils__IsSGNode - check if value contains SGNodeChildren interface
-' @param value As Dynamic
-' @return As Boolean - true if value contains SGNodeChildren interface, else return false
-' *************************************************
-function TF_Utils__IsSGNode(value as dynamic) as boolean
- return TF_Utils__IsValid(value) and GetInterface(value, "ifSGNodeChildren") <> invalid
-end function
-
-' *************************************************
-' TF_Utils__IsString - check if value contains String interface
-' @param value As Dynamic
-' @return As Boolean - true if value contains String interface, else return false
-' *************************************************
-function TF_Utils__IsString(value as dynamic) as boolean
- return TF_Utils__IsValid(value) and GetInterface(value, "ifString") <> invalid
-end function
-
-' *************************************************
-' TF_Utils__IsNotEmptyString - check if value contains String interface and length more 0
-' @param value As Dynamic
-' @return As Boolean - true if value contains String interface and length more 0, else return false
-' *************************************************
-function TF_Utils__IsNotEmptyString(value as dynamic) as boolean
- return TF_Utils__IsString(value) and Len(value) > 0
-end function
-
-' *************************************************
-' TF_Utils__IsDateTime - check if value contains DateTime interface
-' @param value As Dynamic
-' @return As Boolean - true if value contains DateTime interface, else return false
-' *************************************************
-function TF_Utils__IsDateTime(value as dynamic) as boolean
- return TF_Utils__IsValid(value) and (GetInterface(value, "ifDateTime") <> invalid or Type(value) = "roDateTime")
-end function
-
-' *************************************************
-' TF_Utils__IsValid - check if value initialized and not equal invalid
-' @param value As Dynamic
-' @return As Boolean - true if value initialized and not equal invalid, else return false
-' *************************************************
-function TF_Utils__IsValid(value as dynamic) as boolean
- return Type(value) <> "" and value <> invalid
-end function
-
-' *************************************************
-' TF_Utils__ValidStr - return value if his contains String interface else return empty string
-' @param value As Object
-' @return As String - value if his contains String interface else return empty string
-' *************************************************
-function TF_Utils__ValidStr(obj as object) as string
- if obj <> invalid and GetInterface(obj, "ifString") <> invalid
- return obj
- else
- return ""
- end if
-end function
-
-' *************************************************
-' TF_Utils__AsString - convert input to String if this possible, else return empty string
-' @param input As Dynamic
-' @return As String - return converted string
-' *************************************************
-function TF_Utils__AsString(input as dynamic) as string
- if TF_Utils__IsValid(input) = false
- return ""
- else if TF_Utils__IsString(input)
- return input
- else if TF_Utils__IsInteger(input) or TF_Utils__IsLongInteger(input) or TF_Utils__IsBoolean(input)
- return input.ToStr()
- else if TF_Utils__IsFloat(input) or TF_Utils__IsDouble(input)
- return Str(input).Trim()
- else
- return ""
- end if
-end function
-
-' *************************************************
-' TF_Utils__AsInteger - convert input to Integer if this possible, else return 0
-' @param input As Dynamic
-' @return As Integer - return converted Integer
-' *************************************************
-function TF_Utils__AsInteger(input as dynamic) as integer
- if TF_Utils__IsValid(input) = false
- return 0
- else if TF_Utils__IsString(input)
- return input.ToInt()
- else if TF_Utils__IsInteger(input)
- return input
- else if TF_Utils__IsFloat(input) or TF_Utils__IsDouble(input) or TF_Utils__IsLongInteger(input)
- return Int(input)
- else
- return 0
- end if
-end function
-
-' *************************************************
-' TF_Utils__AsLongInteger - convert input to LongInteger if this possible, else return 0
-' @param input As Dynamic
-' @return As Integer - return converted LongInteger
-' *************************************************
-function TF_Utils__AsLongInteger(input as dynamic) as longinteger
- if TF_Utils__IsValid(input) = false
- return 0
- else if TF_Utils__IsString(input)
- return TF_Utils__AsInteger(input)
- else if TF_Utils__IsLongInteger(input) or TF_Utils__IsFloat(input) or TF_Utils__IsDouble(input) or TF_Utils__IsInteger(input)
- return input
- else
- return 0
- end if
-end function
-
-' *************************************************
-' TF_Utils__AsFloat - convert input to Float if this possible, else return 0.0
-' @param input As Dynamic
-' @return As Float - return converted Float
-' *************************************************
-function TF_Utils__AsFloat(input as dynamic) as float
- if TF_Utils__IsValid(input) = false
- return 0.0
- else if TF_Utils__IsString(input)
- return input.ToFloat()
- else if TF_Utils__IsInteger(input)
- return (input / 1)
- else if TF_Utils__IsFloat(input) or TF_Utils__IsDouble(input) or TF_Utils__IsLongInteger(input)
- return input
- else
- return 0.0
- end if
-end function
-
-' *************************************************
-' TF_Utils__AsDouble - convert input to Double if this possible, else return 0.0
-' @param input As Dynamic
-' @return As Float - return converted Double
-' *************************************************
-function TF_Utils__AsDouble(input as dynamic) as double
- if TF_Utils__IsValid(input) = false
- return 0.0
- else if TF_Utils__IsString(input)
- return TF_Utils__AsFloat(input)
- else if TF_Utils__IsInteger(input) or TF_Utils__IsLongInteger(input) or TF_Utils__IsFloat(input) or TF_Utils__IsDouble(input)
- return input
- else
- return 0.0
- end if
-end function
-
-' *************************************************
-' TF_Utils__AsBoolean - convert input to Boolean if this possible, else return False
-' @param input As Dynamic
-' @return As Boolean
-' *************************************************
-function TF_Utils__AsBoolean(input as dynamic) as boolean
- if TF_Utils__IsValid(input) = false
- return false
- else if TF_Utils__IsString(input)
- return LCase(input) = "true"
- else if TF_Utils__IsInteger(input) or TF_Utils__IsFloat(input)
- return input <> 0
- else if TF_Utils__IsBoolean(input)
- return input
- else
- return false
- end if
-end function
-
-' *************************************************
-' TF_Utils__AsArray - if type of value equals array return value, else return array with one element [value]
-' @param value As Object
-' @return As Object - roArray
-' *************************************************
-function TF_Utils__AsArray(value as object) as object
- if TF_Utils__IsValid(value)
- if not TF_Utils__IsArray(value)
- return [value]
- else
- return value
- end if
- end if
- return []
-end function
-
-' =====================
-' Strings
-' =====================
-
-' *************************************************
-' TF_Utils__IsNullOrEmpty - check if value is invalid or empty
-' @param value As Dynamic
-' @return As Boolean - true if value is null or empty string, else return false
-' *************************************************
-function TF_Utils__IsNullOrEmpty(value as dynamic) as boolean
- if TF_Utils__IsString(value)
- return Len(value) = 0
- else
- return not TF_Utils__IsValid(value)
- end if
-end function
-
-' =====================
-' Arrays
-' =====================
-
-' *************************************************
-' TF_Utils__FindElementIndexInArray - find an element index in array
-' @param array As Object
-' @param value As Object
-' @param compareAttribute As Dynamic
-' @param caseSensitive As Boolean
-' @return As Integer - element index if array contains a value, else return -1
-' *************************************************
-function TF_Utils__FindElementIndexInArray(array as object, value as object, compareAttribute = invalid as dynamic, caseSensitive = false as boolean) as integer
- if TF_Utils__IsArray(array)
- for i = 0 to TF_Utils__AsArray(array).Count() - 1
- compareValue = array[i]
-
- if compareAttribute <> invalid and TF_Utils__IsAssociativeArray(compareValue) and compareValue.DoesExist(compareAttribute)
- compareValue = compareValue.LookupCI(compareAttribute)
- end if
-
- if TF_Utils__IsString(compareValue) and TF_Utils__IsString(value) and not caseSensitive
- if LCase(compareValue) = LCase(value)
- return i
- end if
- else if TF_Utils__BaseComparator(compareValue, value)
- return i
- end if
-
- item = array[i]
- next
- end if
-
- return -1
-end function
-
-' *************************************************
-' TF_Utils__ArrayContains - check if array contains specified value
-' @param array As Object
-' @param value As Object
-' @param compareAttribute As Dynamic
-' @return As Boolean - true if array contains a value, else return false
-' *************************************************
-function TF_Utils__ArrayContains(array as object, value as object, compareAttribute = invalid as dynamic) as boolean
- return (TF_Utils__FindElementIndexInArray(array, value, compareAttribute) > -1)
-end function
-
-' ----------------------------------------------------------------
-' Type Comparison Functionality
-' ----------------------------------------------------------------
-
-' ----------------------------------------------------------------
-' Compare two arbitrary values to each other.
-
-' @param Value1 (dynamic) A first item to compare.
-' @param Value2 (dynamic) A second item to compare.
-' @param comparator (Function, optional) Function, to compare 2 values. Should take in 2 parameters and return either true or false.
-
-' @return True if values are equal or False in other case.
-' ----------------------------------------------------------------
-function TF_Utils__EqValues(Value1 as dynamic, Value2 as dynamic, comparator = invalid as object) as boolean
- if comparator = invalid
- return TF_Utils__BaseComparator(value1, value2)
- else
- return comparator(value1, value2)
- end if
-end function
-
-' ----------------------------------------------------------------
-' Base comparator for comparing two values.
-
-' @param Value1 (dynamic) A first item to compare.
-' @param Value2 (dynamic) A second item to compare.
-
-' @return True if values are equal or False in other case.
-function TF_Utils__BaseComparator(value1 as dynamic, value2 as dynamic) as boolean
- value1Type = Type(value1)
- value2Type = Type(value2)
-
- if (value1Type = "roList" or value1Type = "roArray") and (value2Type = "roList" or value2Type = "roArray")
- return TF_Utils__EqArray(value1, value2)
- else if value1Type = "roAssociativeArray" and value2Type = "roAssociativeArray"
- return TF_Utils__EqAssocArray(value1, value2)
- else if Type(box(value1), 3) = Type(box(value2), 3)
- return value1 = value2
- else
- return false
- end if
-end function
-
-' ----------------------------------------------------------------
-' Compare two roAssociativeArray objects for equality.
-
-' @param Value1 (object) A first associative array.
-' @param Value2 (object) A second associative array.
-
-' @return True if arrays are equal or False in other case.
-' ----------------------------------------------------------------
-function TF_Utils__EqAssocArray(Value1 as object, Value2 as object) as boolean
- l1 = Value1.Count()
- l2 = Value2.Count()
-
- if not l1 = l2
- return false
- else
- for each k in Value1
- if not Value2.DoesExist(k)
- return false
- else
- v1 = Value1[k]
- v2 = Value2[k]
- if not TF_Utils__EqValues(v1, v2)
- return false
- end if
- end if
- end for
- return true
- end if
-end function
-
-' ----------------------------------------------------------------
-' Compare two roArray objects for equality.
-
-' @param Value1 (object) A first array.
-' @param Value2 (object) A second array.
-
-' @return True if arrays are equal or False in other case.
-' ----------------------------------------------------------------
-function TF_Utils__EqArray(Value1 as object, Value2 as object) as boolean
- l1 = Value1.Count()
- l2 = Value2.Count()
-
- if not l1 = l2
- return false
- else
- for i = 0 to l1 - 1
- v1 = Value1[i]
- v2 = Value2[i]
- if not TF_Utils__EqValues(v1, v2) then
- return false
- end if
- end for
- return true
- end if
-end function
diff --git a/source/tests/Test__Misc.brs b/source/tests/Test__Misc.brs
deleted file mode 100644
index 922c0699..00000000
--- a/source/tests/Test__Misc.brs
+++ /dev/null
@@ -1,81 +0,0 @@
-function TestSuite__Misc() as object
-
- ' Inherite test suite from BaseTestSuite
- this = BaseTestSuite()
-
- ' Test suite name for log statistics
- this.Name = "MiscTestSuite"
-
- this.SetUp = MiscTestSuite__SetUp
- this.TearDown = MiscTestSuite__TearDown
-
- ' Add tests to suite's tests collection
- this.addTest("IsValid() true", TestCase__Misc_IsValid_True)
- this.addTest("IsValid() false", TestCase__Misc_IsValid_False)
- this.addTest("RoundNumber() Floor", TestCase__Misc_RoundNumber_Floor)
- this.addTest("RoundNumber() Ceiling", TestCase__Misc_RoundNumber_Ceiling)
-
- return this
-end function
-
-'----------------------------------------------------------------
-' This function called immediately before running tests of current suite.
-'----------------------------------------------------------------
-sub MiscTestSuite__SetUp()
-end sub
-
-'----------------------------------------------------------------
-' This function called immediately after running tests of current suite.
-'----------------------------------------------------------------
-sub MiscTestSuite__TearDown()
-end sub
-
-'----------------------------------------------------------------
-' Check if isValid() properly identifies valid items
-'
-' @return An empty string if test is success or error message if not.
-'----------------------------------------------------------------
-function TestCase__Misc_IsValid_True() as string
- returnResults = ""
- testData = [1, 2, [3, 4], { "key": invalid }, [1, 2, 3], CreateObject("roAppInfo")]
-
- for each testItem in testData
- returnResults = returnResults + m.AssertTrue(isValid(testItem))
- end for
-
- return m.AssertEmpty(returnResults)
-end function
-
-'----------------------------------------------------------------
-' Check if isValid() properly identifies invalid items
-'
-' @return An empty string if test is success or error message if not.
-'----------------------------------------------------------------
-function TestCase__Misc_IsValid_False() as string
- returnResults = ""
- testData = [invalid, CreateObject("nothing")]
-
- for each testItem in testData
- returnResults = m.AssertFalse(isValid(testItem))
- end for
-
- return m.AssertEmpty(returnResults)
-end function
-
-'----------------------------------------------------------------
-' Check if roundNumber() properly rounds down
-'
-' @return An empty string if test is success or error message if not.
-'----------------------------------------------------------------
-function TestCase__Misc_RoundNumber_Floor() as string
- return m.AssertEqual(roundNumber(9.4), 9)
-end function
-
-'----------------------------------------------------------------
-' Check if roundNumber() properly rounds up
-'
-' @return An empty string if test is success or error message if not.
-'----------------------------------------------------------------
-function TestCase__Misc_RoundNumber_Ceiling() as string
- return m.AssertEqual(roundNumber(9.6), 10)
-end function
diff --git a/source/utils/misc.brs b/source/utils/misc.brs
index d1ed6e7c..e914bc5f 100644
--- a/source/utils/misc.brs
+++ b/source/utils/misc.brs
@@ -207,13 +207,13 @@ sub setFieldTextValue(field, value)
end sub
' Returns whether or not passed value is valid
-function isValid(input) as boolean
+function isValid(input as dynamic) as boolean
return input <> invalid
end function
' Returns whether or not passed value is valid and not empty
' Accepts a string, or any countable type (arrays and lists)
-function isValidAndNotEmpty(input) as boolean
+function isValidAndNotEmpty(input as dynamic) as boolean
if not isValid(input) then return false
' Use roAssociativeArray instead of list so we get access to the doesExist() method
countableTypes = { "array": 1, "list": 1, "roarray": 1, "roassociativearray": 1, "rolist": 1 }
diff --git a/test-app/manifest b/test-app/manifest
new file mode 100644
index 00000000..7267200f
--- /dev/null
+++ b/test-app/manifest
@@ -0,0 +1,4 @@
+title=Rooibos Unit Testing
+major_version=0
+minor_version=1
+build_version=1
\ No newline at end of file
diff --git a/test-app/source/BaseTestSuite.spec.bs b/test-app/source/BaseTestSuite.spec.bs
new file mode 100644
index 00000000..c99194ee
--- /dev/null
+++ b/test-app/source/BaseTestSuite.spec.bs
@@ -0,0 +1,18 @@
+namespace tests
+
+ class BaseTestSuite extends rooibos.BaseTestSuite
+ private appController
+
+ protected override function setup()
+ 'Do something here all your files need like setup the logger, etc
+ end function
+
+ protected override function beforeEach()
+ 'do things here that all your tests need
+ end function
+
+ protected override function afterEach()
+ 'tidy things up
+ end function
+ end class
+end namespace
\ No newline at end of file
diff --git a/test-app/source/Main.bs b/test-app/source/Main.bs
new file mode 100644
index 00000000..8fe24ea2
--- /dev/null
+++ b/test-app/source/Main.bs
@@ -0,0 +1,4 @@
+function Main(args)
+ ? "here is my code"
+ ? "hello"
+end function
\ No newline at end of file
diff --git a/test-app/source/tests/utils/misc/isValid.spec.bs b/test-app/source/tests/utils/misc/isValid.spec.bs
new file mode 100644
index 00000000..14c394f9
--- /dev/null
+++ b/test-app/source/tests/utils/misc/isValid.spec.bs
@@ -0,0 +1,188 @@
+namespace tests
+ @suite("isValid functions")
+ class isValidTests extends tests.BaseTestSuite
+
+ protected override function setup()
+ super.setup()
+ m.myArray = CreateObject("roArray", 3, true)
+ m.myAssArray = { one: invalid, two: "invalid", three: 123.456 }
+ m.myEmptyArray = CreateObject("roArray", 0, false)
+ m.myEmptyList = CreateObject("roList")
+ m.myList = CreateObject("roList")
+ m.myList.AddTail("string")
+ end function
+
+ '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ @describe("isValid()")
+ '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ @it("works with booleans")
+ @params(true, true)
+ @params(false, true)
+ function _(value, expectedassertResult)
+ m.assertEqual(isValid(value), expectedassertResult)
+ end function
+
+ @it("works with integers")
+ @params(-1234567890, true)
+ @params(0, true)
+ @params(1234567890, true)
+ @params(1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890, true)
+ function _(value, expectedassertResult)
+ m.assertEqual(isValid(value), expectedassertResult)
+ end function
+
+ @it("works with floats")
+ @params(-12.3456789, true)
+ @params(12.3456789, true)
+ @params(1.23456E+30, true)
+ @params(12.3456789!, true)
+ @params(123456789012345678901234567890123456789012345678901234567890.123456789012345678901234567890123456789012345678901234567890, true)
+ function _(value, expectedassertResult)
+ m.assertEqual(isValid(value), expectedassertResult)
+ end function
+
+ @it("works with strings")
+ @params("", true)
+ @params(" ", true)
+ @params("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Augue neque gravida in fermentum et. Eget lorem dolor sed viverra ipsum nunc. At quis risus sed vulputate odio ut enim. Ultricies integer quis auctor elit sed. Egestas congue quisque egestas diam in. Aliquam sem fringilla ut morbi tincidunt. Malesuada bibendum arcu vitae elementum curabitur. Aliquet sagittis id consectetur purus ut faucibus pulvinar. Eget gravida cum sociis natoque. Sollicitudin aliquam ultrices sagittis orci. Ut etiam sit amet nisl purus. Luctus venenatis lectus magna fringilla urna porttitor rhoncus dolor purus. Vitae ultricies leo integer malesuada nunc. Vitae ultricies leo integer malesuada nunc vel risus commodo. Luctus accumsan tortor posuere ac ut. Urna cursus eget nunc scelerisque viverra mauris in. Accumsan sit amet nulla facilisi morbi tempus iaculis urna id. Mauris vitae ultricies leo integer malesuada nunc vel risus commodo. Morbi tincidunt augue interdum velit euismod in pellentesque.", true)
+ @params("~!@#$%^&*()_-+=`\|]}';:.,/?", true)
+ @params("true", true)
+ @params("false", true)
+ @params("invalid", true)
+ function _(value, expectedassertResult)
+ m.assertEqual(isValid(value), expectedassertResult)
+ end function
+
+ @it("works with arrays")
+ @params([0, 1, 2, 3, 4, 5], true)
+ @params(["invalid", "one", "two", "three", "four", "five"], true)
+ @params([invalid, invalid, invalid], true)
+ function _(value, expectedassertResult)
+ m.assertEqual(isValid(value), expectedassertResult)
+ end function
+
+ @it("works with associative arrays")
+ @params({ myInteger: 1, myString: "one", myInvalid: invalid, myEmptyString: "" }, true)
+ function _(value, expectedassertResult)
+ m.assertEqual(isValid(value), expectedassertResult)
+ end function
+
+ @it("works with an array of associative arrays")
+ @params(
+ [
+ {
+ Title: "The Notebook",
+ releaseDate: "2000"
+ },
+ {
+ Title: "Caddyshack",
+ releaseDate: "1976"
+ }
+ ], true)
+ function _(value, expectedassertResult)
+ m.assertEqual(isValid(value), expectedassertResult)
+ end function
+
+ @it("works when accessing arrays")
+ function _()
+ m.assertEqual(isValid(m.myAssArray.one), false)
+ m.assertEqual(isValid(m.myAssArray.two), true)
+ end function
+
+ @it("works when accessing an invalid array index")
+ function _()
+ m.assertEqual(isValid(m.myAssArray.zero), false)
+ end function
+
+ @it("works with invalid")
+ @params(invalid, false)
+ function _(value, expectedassertResult)
+ m.assertEqual(isValid(value), expectedassertResult)
+ end function
+
+ @it("works with nodes")
+ @params("#RBSNode", true)
+ @params("#RBSNode|Group", true)
+ @params("#RBSNode|Label", true)
+ @params("#RBSNode|ScrollingLabel", true)
+ @params("#RBSNode|Poster", true)
+ @params("#RBSNode|Rectangle", true)
+ @params("#RBSNode|Font", true)
+ @params("#RBSNode|Button", true)
+ @params("#RBSNode|Rectangle", true)
+ @params("#RBSNode|Overhang", true)
+ @params("#RBSNode|Audio", true)
+ @params("#RBSNode|Video", true)
+ function _(value, expectedassertResult)
+ m.assertEqual(isValid(value), expectedassertResult)
+ end function
+
+ @it("works with objects")
+ function _()
+ myList = CreateObject("roList")
+ myLongInteger = CreateObject("roLongInteger")
+ myDouble = CreateObject("roDouble")
+ myFloat = CreateObject("roFloat")
+ myInvalid = CreateObject("roInvalid")
+ m.assertEqual(isValid(myList), true)
+ m.assertEqual(isValid(myLongInteger), true)
+ m.assertEqual(isValid(myDouble), true)
+ m.assertEqual(isValid(myFloat), true)
+ m.assertEqual(isValid(myInvalid), false)
+ end function
+
+ @it("works with functions")
+ function _()
+ myfunc = function(a, b)
+ return a + b
+ end function
+ m.assertEqual(isValid(myfunc(0, 1)), true)
+ end function
+
+ '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ @describe("isValidAndNotEmpty()")
+ '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ @it("works with invalid")
+ @params(invalid, false)
+ function _(value, expectedassertResult)
+ m.assertEqual(isValidAndNotEmpty(value), expectedassertResult)
+ end function
+
+ @it("works with strings")
+ @params("", false)
+ @params(" ", false)
+ @params("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Augue neque gravida in fermentum et. Eget lorem dolor sed viverra ipsum nunc. At quis risus sed vulputate odio ut enim. Ultricies integer quis auctor elit sed. Egestas congue quisque egestas diam in. Aliquam sem fringilla ut morbi tincidunt. Malesuada bibendum arcu vitae elementum curabitur. Aliquet sagittis id consectetur purus ut faucibus pulvinar. Eget gravida cum sociis natoque. Sollicitudin aliquam ultrices sagittis orci. Ut etiam sit amet nisl purus. Luctus venenatis lectus magna fringilla urna porttitor rhoncus dolor purus. Vitae ultricies leo integer malesuada nunc. Vitae ultricies leo integer malesuada nunc vel risus commodo. Luctus accumsan tortor posuere ac ut. Urna cursus eget nunc scelerisque viverra mauris in. Accumsan sit amet nulla facilisi morbi tempus iaculis urna id. Mauris vitae ultricies leo integer malesuada nunc vel risus commodo. Morbi tincidunt augue interdum velit euismod in pellentesque.", true)
+ @params("~!@#$%^&*()_-+=`\|]}';:.,/?", true)
+ @params("true", true)
+ @params("false", true)
+ @params("invalid", true)
+ function _(value, expectedassertResult)
+ m.assertEqual(isValidAndNotEmpty(value), expectedassertResult)
+ end function
+
+ @it("works with arrays")
+ function _()
+ m.assertEqual(isValidAndNotEmpty(m.myEmptyArray), false)
+ m.assertEqual(isValidAndNotEmpty(m.myArray), false)
+ m.myArray.Push("string")
+ m.assertEqual(isValidAndNotEmpty(m.myArray), true)
+ m.myArray.Clear()
+ m.assertEqual(isValidAndNotEmpty(m.myArray), false)
+ end function
+
+ @it("works with associative arrays")
+ function _()
+ m.assertEqual(isValidAndNotEmpty(m.myEmptyArray), false)
+ m.assertEqual(isValidAndNotEmpty(m.myAssArray), true)
+ end function
+
+ @it("works with lists")
+ function _()
+ m.assertEqual(isValidAndNotEmpty(m.myEmptyList), false)
+ m.assertEqual(isValidAndNotEmpty(m.myList), true)
+ end function
+
+ end class
+end namespace
\ No newline at end of file