diff --git a/.github/ISSUE_TEMPLATE/deprecation_rfc.yml b/.github/ISSUE_TEMPLATE/deprecation_rfc.yml
new file mode 100644
index 00000000000..651c6d8deca
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/deprecation_rfc.yml
@@ -0,0 +1,46 @@
+name: Deprecation RFC ❗
+description: Use this to get approval to remove existing features.
+title: "Deprecation RFC: [Short description of the feature/change]"
+labels:
+ - Deprecation RFC
+
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Before you post, be sure to read our Contribution guidelines:
+ https://sofie-automation.github.io/sofie-core/docs/for-developers/contribution-guidelines
+
+ - type: textarea
+ attributes:
+ label: Suggested by
+ description: Tell us who / which organization you are representing, and how the Sofie team will be able to contact you.
+ placeholder: Example "This RFC is posted on behalf of the NRK."
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Use Case
+ description: "Please write some background information here, such as: What is your use case? What problem are you trying to solve?"
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Proposal
+ description: Please describe your proposal here
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Process
+ description: Please add the deadline one month from today, in bold. Leave the rest as is.
+ value: |
+ The Sofie Team will evaluate this Deprecation RFC following their approval workflow.
+
+ Stakeholders have until **YYYY-MM-DD** to comment or challenge the proposal
+
+ - [ ] Outcome: A unison approval from stakeholders has been reached.
+ - [ ] Outcome: No objections raised within the 1 month limit, so the proposal is implicitly approved.
diff --git a/.github/actions/setup-meteor/action.yaml b/.github/actions/setup-meteor/action.yaml
index cabb63ed3b4..c4e0f5c8971 100644
--- a/.github/actions/setup-meteor/action.yaml
+++ b/.github/actions/setup-meteor/action.yaml
@@ -3,5 +3,5 @@ description: "Setup Meteor"
runs:
using: "composite"
steps:
- - run: curl "https://install.meteor.com/?release=3.3.2" | sh
+ - run: curl "https://install.meteor.com/?release=3.4.1" | sh
shell: bash
diff --git a/.github/workflows/audit.yaml b/.github/workflows/audit.yaml
index e1135e3b9f1..49749bfdc3d 100644
--- a/.github/workflows/audit.yaml
+++ b/.github/workflows/audit.yaml
@@ -14,16 +14,16 @@ jobs:
continue-on-error: true
timeout-minutes: 15
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
with:
persist-credentials: false
- name: Use Node.js
- uses: actions/setup-node@v6
+ uses: actions/setup-node@v7
with:
node-version-file: ".node-version"
- uses: ./.github/actions/setup-meteor
- name: restore node_modules
- uses: actions/cache@v5
+ uses: actions/cache@v6
with:
path: |
meteor/node_modules
@@ -44,16 +44,16 @@ jobs:
continue-on-error: true
timeout-minutes: 15
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
with:
persist-credentials: false
- name: Use Node.js
- uses: actions/setup-node@v6
+ uses: actions/setup-node@v7
with:
node-version-file: ".node-version"
- uses: ./.github/actions/setup-meteor
- name: restore node_modules
- uses: actions/cache@v5
+ uses: actions/cache@v6
with:
path: |
meteor/node_modules
@@ -87,11 +87,11 @@ jobs:
- live-status-gateway
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
with:
persist-credentials: false
- name: Use Node.js
- uses: actions/setup-node@v6
+ uses: actions/setup-node@v7
with:
node-version-file: ".node-version"
- name: Prepare Environment
@@ -120,11 +120,11 @@ jobs:
timeout-minutes: 15
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
with:
persist-credentials: false
- name: Use Node.js
- uses: actions/setup-node@v6
+ uses: actions/setup-node@v7
with:
node-version-file: ".node-version"
- name: Prepare Environment
diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml
index 26c9b324dc4..bbebe7b4ec6 100644
--- a/.github/workflows/deploy-docs.yml
+++ b/.github/workflows/deploy-docs.yml
@@ -20,17 +20,17 @@ jobs:
name: Build Docusaurus
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
with:
persist-credentials: false
fetch-depth: 0
- name: Use Node.js
- uses: actions/setup-node@v6
+ uses: actions/setup-node@v7
with:
node-version-file: ".node-version"
- uses: ./.github/actions/setup-meteor
- name: restore node_modules
- uses: actions/cache@v5
+ uses: actions/cache@v6
with:
path: |
packages/node_modules
@@ -64,7 +64,7 @@ jobs:
CI: true
- name: Upload Build Artifact
- uses: actions/upload-pages-artifact@v4
+ uses: actions/upload-pages-artifact@v5
with:
path: packages/documentation/build
diff --git a/.github/workflows/node.yaml b/.github/workflows/node.yaml
index 76a8ffb3631..213de19cf7c 100644
--- a/.github/workflows/node.yaml
+++ b/.github/workflows/node.yaml
@@ -18,16 +18,16 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
with:
persist-credentials: false
- name: Use Node.js
- uses: actions/setup-node@v6
+ uses: actions/setup-node@v7
with:
node-version-file: ".node-version"
- uses: ./.github/actions/setup-meteor
- name: restore node_modules
- uses: actions/cache@v5
+ uses: actions/cache@v6
with:
path: |
node_modules
@@ -59,16 +59,16 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
with:
persist-credentials: false
- name: Use Node.js
- uses: actions/setup-node@v6
+ uses: actions/setup-node@v7
with:
node-version-file: ".node-version"
- uses: ./.github/actions/setup-meteor
- name: restore node_modules
- uses: actions/cache@v5
+ uses: actions/cache@v6
with:
path: |
node_modules
@@ -111,16 +111,16 @@ jobs:
packages: write
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
with:
persist-credentials: false
- name: Use Node.js
- uses: actions/setup-node@v6
+ uses: actions/setup-node@v7
with:
node-version-file: ".node-version"
- uses: ./.github/actions/setup-meteor
- name: restore node_modules
- uses: actions/cache@v5
+ uses: actions/cache@v6
with:
path: |
node_modules
@@ -281,16 +281,16 @@ jobs:
packages: write
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
with:
persist-credentials: false
- name: Use Node.js
- uses: actions/setup-node@v6
+ uses: actions/setup-node@v7
with:
node-version-file: ".node-version"
- name: restore node_modules
- uses: actions/cache@v5
+ uses: actions/cache@v6
with:
path: |
packages/node_modules
@@ -414,16 +414,16 @@ jobs:
timeout-minutes: 15
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
with:
persist-credentials: false
- name: Use Node.js
- uses: actions/setup-node@v6
+ uses: actions/setup-node@v7
with:
node-version-file: ".node-version"
- uses: ./.github/actions/setup-meteor
- name: restore node_modules
- uses: actions/cache@v5
+ uses: actions/cache@v6
with:
path: |
node_modules
@@ -494,15 +494,15 @@ jobs:
send-coverage: true
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
with:
persist-credentials: false
- name: Use Node.js ${{ matrix.node-version }}
- uses: actions/setup-node@v6
+ uses: actions/setup-node@v7
with:
node-version: ${{ matrix.node-version }}
- name: restore node_modules
- uses: actions/cache@v5
+ uses: actions/cache@v6
with:
path: |
packages/node_modules
@@ -539,11 +539,11 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
with:
persist-credentials: false
- name: Use Node.js
- uses: actions/setup-node@v6
+ uses: actions/setup-node@v7
with:
node-version-file: ".node-version"
- name: Prepare Environment
@@ -569,11 +569,11 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
with:
persist-credentials: false
- name: Use Node.js
- uses: actions/setup-node@v6
+ uses: actions/setup-node@v7
with:
node-version-file: ".node-version"
- name: Prepare Environment
@@ -605,16 +605,16 @@ jobs:
# This is just to ensure the docs build, another job performs the build & publish
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
with:
persist-credentials: false
- name: Use Node.js
- uses: actions/setup-node@v6
+ uses: actions/setup-node@v7
with:
node-version-file: ".node-version"
- uses: ./.github/actions/setup-meteor
- name: restore node_modules
- uses: actions/cache@v5
+ uses: actions/cache@v6
with:
path: |
packages/node_modules
@@ -652,16 +652,16 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
with:
persist-credentials: false
- name: Use Node.js
- uses: actions/setup-node@v6
+ uses: actions/setup-node@v7
with:
node-version-file: ".node-version"
- uses: ./.github/actions/setup-meteor
- name: restore node_modules
- uses: actions/cache@v5
+ uses: actions/cache@v6
with:
path: |
node_modules
diff --git a/.github/workflows/prune-tags.yml b/.github/workflows/prune-tags.yml
index 117c2c77007..0eeb177c712 100644
--- a/.github/workflows/prune-tags.yml
+++ b/.github/workflows/prune-tags.yml
@@ -26,7 +26,7 @@ jobs:
timeout-minutes: 15
steps:
- name: Checkout repo with all tags
- uses: actions/checkout@v6
+ uses: actions/checkout@v7
with:
fetch-depth: 0
diff --git a/.github/workflows/publish-libs.yml b/.github/workflows/publish-libs.yml
index 110c02e805f..a884f5b736d 100644
--- a/.github/workflows/publish-libs.yml
+++ b/.github/workflows/publish-libs.yml
@@ -53,11 +53,11 @@ jobs:
if: ${{ needs.check-publish.outputs.can-publish == '1' }}
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
with:
persist-credentials: false
- name: Use Node.js
- uses: actions/setup-node@v6
+ uses: actions/setup-node@v7
with:
node-version-file: ".node-version"
- uses: ./.github/actions/setup-meteor
@@ -103,11 +103,11 @@ jobs:
node-version: [22.x]
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
with:
persist-credentials: false
- name: Use Node.js ${{ matrix.node-version }}
- uses: actions/setup-node@v6
+ uses: actions/setup-node@v7
with:
node-version: ${{ matrix.node-version }}
- name: Prepare Environment
@@ -141,11 +141,11 @@ jobs:
if: ${{ needs.check-publish.outputs.can-publish == '1' }}
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
with:
persist-credentials: false
- name: Use Node.js
- uses: actions/setup-node@v6
+ uses: actions/setup-node@v7
with:
node-version-file: ".node-version"
- uses: ./.github/actions/setup-meteor
@@ -221,12 +221,12 @@ jobs:
id-token: write # scoped for as short as possible, as this gives write access to npm
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
with:
fetch-depth: 0
persist-credentials: false
- name: Use Node.js
- uses: actions/setup-node@v6
+ uses: actions/setup-node@v7
with:
node-version-file: ".node-version"
diff --git a/.github/workflows/sonar.yaml b/.github/workflows/sonar.yaml
index 1753c637904..950085f7a95 100644
--- a/.github/workflows/sonar.yaml
+++ b/.github/workflows/sonar.yaml
@@ -21,19 +21,19 @@ jobs:
timeout-minutes: 15
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
with:
# Disabling shallow clone is recommended for improving relevancy of reporting
fetch-depth: 0
persist-credentials: false
- name: Use Node.js
- uses: actions/setup-node@v6
+ uses: actions/setup-node@v7
with:
node-version-file: ".node-version"
- uses: ./.github/actions/setup-meteor
- name: restore node_modules
- uses: actions/cache@v5
+ uses: actions/cache@v6
with:
path: |
node_modules
@@ -54,6 +54,6 @@ jobs:
env:
CI: true
- name: SonarQube Scan
- uses: SonarSource/sonarqube-scan-action@v7
+ uses: SonarSource/sonarqube-scan-action@v8
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
diff --git a/.husky/pre-commit b/.husky/pre-commit
old mode 100644
new mode 100755
diff --git a/.yarnrc.yml b/.yarnrc.yml
index 3bdf82f7357..5e6c97789b7 100644
--- a/.yarnrc.yml
+++ b/.yarnrc.yml
@@ -8,12 +8,12 @@ nodeLinker: node-modules
enableScripts: false
# Enforce a minimal age for npm packages before they can be added/updated
-npmMinimalAgeGate: 7
+npmMinimalAgeGate: 7d
# Packages to ignore the minimal age gate. These are packages we vet ourselves.
npmPreapprovedPackages:
- "@sofie-automation/*"
- "@mos-connection/*"
- - "timeline-state-resolver"
- - "timeline-state-resolver-types"
- - "timeline-state-resolver-api"
\ No newline at end of file
+ - timeline-state-resolver
+ - timeline-state-resolver-types
+ - timeline-state-resolver-api
diff --git a/DEVELOPER.md b/DEVELOPER.md
index bae711b60d1..f64318bf92d 100644
--- a/DEVELOPER.md
+++ b/DEVELOPER.md
@@ -118,10 +118,10 @@ For support of various languages in the GUI, Sofie uses the _i18next_ framework.
```bash
cd meteor
-yarn i18n-extract-pot
+yarn i18n-extract-po
```
-Find the created `template.pot` file in `meteor/i18n` folder. Create a new PO file based on that template using a PO editor of your choice. Save it in the `meteor/i18n` folder using your [ISO 639-1 language code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) of choice as the filename.
+Find the created `.po` files in `meteor/i18n` folder. Edit the appropriate PO file using a PO editor of your choice.
Then, run the compilation script:
diff --git a/meteor/.gitignore b/meteor/.gitignore
index f9fbba253b2..5afcd4a74c6 100644
--- a/meteor/.gitignore
+++ b/meteor/.gitignore
@@ -19,3 +19,9 @@ client/ui/Shelf/Keyboard
!.yarn/sdks
!.yarn/versions
+
+# Meteor Modern-Tools build context directories
+_build
+*/build-assets
+*/build-chunks
+.rsdoctor
diff --git a/meteor/.meteor/packages b/meteor/.meteor/packages
index 5e49caae6e3..cbecb7860fa 100644
--- a/meteor/.meteor/packages
+++ b/meteor/.meteor/packages
@@ -8,15 +8,16 @@
# but you can also edit it by hand.
-meteor@2.1.1
-webapp@2.0.7
+meteor@2.3.0
+webapp@2.1.2
ddp@1.4.2
-mongo@2.1.4 # The database Meteor supports right now
+mongo@2.3.0 # The database Meteor supports right now
-ecmascript@0.16.13 # Enable ECMAScript2015+ syntax in app code
-typescript@5.6.6 # Enable TypeScript syntax in .ts and .tsx modules
+ecmascript@0.18.0 # Enable ECMAScript2015+ syntax in app code
+typescript@5.10.0 # Enable TypeScript syntax in .ts and .tsx modules
tracker@1.3.4 # Meteor's client-side reactive programming library
zodern:types
+rspack
diff --git a/meteor/.meteor/release b/meteor/.meteor/release
index 4876d6ff64c..49a715aec23 100644
--- a/meteor/.meteor/release
+++ b/meteor/.meteor/release
@@ -1 +1 @@
-METEOR@3.3.2
+METEOR@3.4.1
diff --git a/meteor/.meteor/versions b/meteor/.meteor/versions
index 5b4f25da332..d8186678778 100644
--- a/meteor/.meteor/versions
+++ b/meteor/.meteor/versions
@@ -1,21 +1,21 @@
allow-deny@2.1.0
-babel-compiler@7.12.2
+babel-compiler@7.14.0
babel-runtime@1.5.2
base64@1.0.13
binary-heap@1.0.12
-boilerplate-generator@2.0.2
-callback-hook@1.6.1
-check@1.4.4
+boilerplate-generator@2.1.0
+callback-hook@1.7.0
+check@1.5.0
core-runtime@1.0.0
ddp@1.4.2
-ddp-client@3.1.1
+ddp-client@3.2.0
ddp-common@1.4.4
-ddp-server@3.1.2
+ddp-server@3.2.0
diff-sequence@1.1.3
dynamic-import@0.7.4
-ecmascript@0.16.13
+ecmascript@0.18.0
ecmascript-runtime@0.8.3
-ecmascript-runtime-client@0.12.3
+ecmascript-runtime-client@0.13.0
ecmascript-runtime-server@0.11.1
ejson@1.1.5
facts-base@1.0.2
@@ -24,12 +24,12 @@ geojson-utils@1.0.12
id-map@1.2.0
inter-process-messaging@0.1.2
logging@1.3.6
-meteor@2.1.1
-minimongo@2.0.4
+meteor@2.3.0
+minimongo@2.1.0
modern-browsers@0.2.3
modules@0.20.3
modules-runtime@0.13.2
-mongo@2.1.4
+mongo@2.3.0
mongo-decimal@0.2.0
mongo-dev-server@1.1.1
mongo-id@1.0.9
@@ -37,13 +37,15 @@ npm-mongo@6.16.1
ordered-dict@1.2.0
promise@1.0.0
random@1.2.2
-react-fast-refresh@0.2.9
+react-fast-refresh@0.3.0
reload@1.3.2
retry@1.1.1
routepolicy@1.1.2
+rspack@1.1.0
socket-stream-client@0.6.1
+tools-core@1.1.0
tracker@1.3.4
-typescript@5.6.6
-webapp@2.0.7
+typescript@5.10.0
+webapp@2.1.2
webapp-hashing@1.1.2
zodern:types@1.0.13
diff --git a/meteor/.yarn/patches/@meteorjs-rspack-npm-2.0.1-d001eb481c.patch b/meteor/.yarn/patches/@meteorjs-rspack-npm-2.0.1-d001eb481c.patch
new file mode 100644
index 00000000000..6496907a30b
--- /dev/null
+++ b/meteor/.yarn/patches/@meteorjs-rspack-npm-2.0.1-d001eb481c.patch
@@ -0,0 +1,13 @@
+diff --git a/rspack.config.js b/rspack.config.js
+index 76ad29ad8a9b5bf31309a09c88e1c00c53193a2a..1df53de9ff941bca8291547443ad99860b131dff 100644
+--- a/rspack.config.js
++++ b/rspack.config.js
+@@ -135,7 +135,7 @@ function createSwcConfig({
+ ...(isJsxEnabled && { jsx: true }),
+ ...(isAngularEnabled && { decorators: true }),
+ },
+- target: 'es2015',
++ target: 'es2024', // We don't care about browsers, so can target current nodejs and avoid issues with transpiling
+ ...(isReactEnabled && {
+ transform: {
+ react: {
diff --git a/meteor/Dockerfile b/meteor/Dockerfile
index 3e89b0e3eba..4c7b2fd26cd 100644
--- a/meteor/Dockerfile
+++ b/meteor/Dockerfile
@@ -8,6 +8,7 @@ WORKDIR /opt/core/packages
RUN rm -R *-gateway documentation openapi
RUN corepack enable
RUN yarn install && yarn build
+RUN cd webui && yarn build
# Install production dependencies for the worker
# HACK:
@@ -15,7 +16,7 @@ RUN yarn install && yarn build
# BUILD IMAGE
FROM node:22
-RUN curl "https://install.meteor.com/?release=3.3.2" | sh
+RUN curl "https://install.meteor.com/?release=3.4.1" | sh
# Temporary change the NODE_ENV env variable, so that all libraries are installed:
ENV NODE_ENV_TMP $NODE_ENV
diff --git a/meteor/__mocks__/defaultCollectionObjects.ts b/meteor/__mocks__/defaultCollectionObjects.ts
index a9c1b5ba846..450e8751a7f 100644
--- a/meteor/__mocks__/defaultCollectionObjects.ts
+++ b/meteor/__mocks__/defaultCollectionObjects.ts
@@ -1,11 +1,12 @@
import { DBStudio } from '@sofie-automation/corelib/dist/dataModel/Studio'
import { clone } from '@sofie-automation/corelib/dist/lib'
import { unprotectString } from '@sofie-automation/corelib/dist/protectedString'
-import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import { DBRundown } from '@sofie-automation/corelib/dist/dataModel/Rundown'
import { DBSegment } from '@sofie-automation/corelib/dist/dataModel/Segment'
import { DBPart } from '@sofie-automation/corelib/dist/dataModel/Part'
import { IBlueprintPieceType, PieceLifespan } from '@sofie-automation/blueprints-integration'
+import { ShelfButtonSize } from '@sofie-automation/shared-lib/dist/core/model/StudioSettings'
import { Piece, EmptyPieceTimelineObjectsBlob } from '@sofie-automation/corelib/dist/dataModel/Piece'
import { AdLibPiece } from '@sofie-automation/corelib/dist/dataModel/AdLibPiece'
import { getRundownId } from '../server/api/ingest/lib'
@@ -116,6 +117,7 @@ export function defaultStudio(_id: StudioId): DBStudio {
allowPieceDirectPlay: false,
enableBuckets: false,
enableEvaluationForm: true,
+ shelfAdlibButtonSize: ShelfButtonSize.LARGE,
}),
_rundownVersionHash: '',
routeSetsWithOverrides: wrapDefaultObject({}),
diff --git a/meteor/__mocks__/helpers/database.ts b/meteor/__mocks__/helpers/database.ts
index b79d86d5976..fd84d253c7a 100644
--- a/meteor/__mocks__/helpers/database.ts
+++ b/meteor/__mocks__/helpers/database.ts
@@ -45,7 +45,7 @@ import { DBRundown } from '@sofie-automation/corelib/dist/dataModel/Rundown'
import { DBSegment } from '@sofie-automation/corelib/dist/dataModel/Segment'
import { DBPart } from '@sofie-automation/corelib/dist/dataModel/Part'
import { EmptyPieceTimelineObjectsBlob, Piece } from '@sofie-automation/corelib/dist/dataModel/Piece'
-import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import { RundownBaselineAdLibItem } from '@sofie-automation/corelib/dist/dataModel/RundownBaselineAdLibPiece'
import { AdLibPiece } from '@sofie-automation/corelib/dist/dataModel/AdLibPiece'
import { restartRandomId } from '../random'
@@ -127,6 +127,7 @@ export async function setupMockPeripheralDevice(
created: 1234,
status: {
statusCode: StatusCode.GOOD,
+ statusDetails: [],
},
lastSeen: 1234,
lastConnected: 1234,
diff --git a/meteor/eslint.config.mjs b/meteor/eslint.config.mjs
index 7f4a7a7e275..727aefc8e1f 100644
--- a/meteor/eslint.config.mjs
+++ b/meteor/eslint.config.mjs
@@ -14,7 +14,7 @@ const tmpRules = {
const extendedRules = await generateEslintConfig({
// tsconfigName: 'tsconfig.eslint.json',
- ignores: ['.meteor', 'public', 'scripts', 'server/_force_restart.js', '/packages/'],
+ ignores: ['.meteor', 'public', 'scripts', 'server/_force_restart.js', '/packages/', '_build'],
// disableNodeRules: true,
})
diff --git a/meteor/i18n/.gitignore b/meteor/i18n/.gitignore
new file mode 100644
index 00000000000..94a2dd146a2
--- /dev/null
+++ b/meteor/i18n/.gitignore
@@ -0,0 +1 @@
+*.json
\ No newline at end of file
diff --git a/meteor/i18n/template.pot b/meteor/i18n/en.po
similarity index 64%
rename from meteor/i18n/template.pot
rename to meteor/i18n/en.po
index ac4e0e454e4..f47dfd79c54 100644
--- a/meteor/i18n/template.pot
+++ b/meteor/i18n/en.po
@@ -5,3333 +5,4532 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-"POT-Creation-Date: 2023-02-09T08:18:53.604Z\n"
-"PO-Revision-Date: 2023-02-09T08:18:53.604Z\n"
+"POT-Creation-Date: 2026-04-14T14:17:21.116Z\n"
+"PO-Revision-Date: 2026-04-14T14:17:21.116Z\n"
+"Language: en\n"
-msgid "Account Page"
+msgid " The index of the Atem media/clip banks"
msgstr ""
-msgid "Name:"
+msgid "({{time}} ago)"
msgstr ""
-msgid "Email:"
+msgid "({{timecode}})"
msgstr ""
-msgid "Old Password"
+msgid ""
+"(Comma separated list. Empty - will store snapshots of all Rundown "
+"Playlists)"
msgstr ""
-msgid "New Password"
+msgid "(Default)"
msgstr ""
-msgid "Save Changes"
+msgid "(in: {{time}})"
msgstr ""
-msgid "Edit Account"
+msgid "(Optional) A name/identifier of the local network where the Atem is located"
msgstr ""
-msgid "Organization"
+msgid "(Optional) A name/identifier of the local network where the share is located"
msgstr ""
-msgid "User roles in organization"
+msgid ""
+"(Optional) A name/identifier of the local network where the share is "
+"located, leave empty if globally accessible"
msgstr ""
-msgid "Studio"
+msgid "(Optional) This could be the name of the compute"
msgstr ""
-msgid "Configurator"
+msgid ""
+"(Optional) This could be the name of the computer on which the local folder "
+"is on"
msgstr ""
-msgid "Developer"
+msgid "(Unknown playlist)"
msgstr ""
-msgid "Admin"
+msgid "(Unknown rundown)"
msgstr ""
-msgid "Remove Self"
+msgid ""
+"(what happened and when, what should have happened, what could have "
+"triggered the problems, etcetera...)"
msgstr ""
-msgid "Email Address"
+msgid "{{actionName}} failed! More information can be found in the system log."
msgstr ""
-msgid "Password"
+msgid "{{currentRundownName}} - {{rundownPlaylistName}}"
msgstr ""
-msgid "Sign in"
+msgid "{{currentRundownName}} - {{rundownPlaylistName}} (Looping)"
msgstr ""
-msgid "Create New Account"
+msgid "{{days}} days, {{hours}} h {{minutes}} min {{seconds}} s ago"
msgstr ""
-msgid "Lost password?"
+msgid "{{frames}} black frames detected in the clip"
msgstr ""
-msgid "Send reset email"
+msgid "{{frames}} black frames detected within the clip"
msgstr ""
-msgid "Go back"
+msgid "{{frames}} freeze frames detected in the clip"
msgstr ""
-msgid "Password must be atleast 5 characters long"
+msgid "{{frames}} freeze frames detected within the clip"
msgstr ""
-msgid "Enter your new password"
+msgid "{{hours}} h {{minutes}} min {{seconds}} s ago"
msgstr ""
-msgid "Set new password"
+msgid "{{indexCount}} indexes was removed."
msgstr ""
-msgid "Your Account"
+msgid "{{minutes}} min {{seconds}} s ago"
msgstr ""
-msgid "About Your Organization"
+msgid "{{nrcsName}} Connection"
msgstr ""
-msgid "We are mainly"
+msgid "{{prevStatements}} and {{finalStatement}}"
msgstr ""
-msgid "Areas"
+msgid "{{prevStatements}} or {{finalStatement}}"
msgstr ""
-msgid "Invite User"
+msgid ""
+"{{reason}} {{sourceLayer}} exists, but is not yet ready on the playout "
+"system"
msgstr ""
-msgid "New User's Email"
+msgid "{{rundownPlaylistName}} (Looping)"
msgstr ""
-msgid "New User's Name"
+msgid "{{seconds}} s ago"
msgstr ""
-msgid "Create New User & Send Enrollment Email"
+msgid "{{showStyleVariant}} – {{showStyleBase}}"
msgstr ""
-msgid "Users in organization"
+msgid "{{sourceLayer}} can't be found on the playout system"
msgstr ""
-msgid "Return to list"
+msgid "{{sourceLayer}} doesn't have both audio & video"
msgstr ""
-msgid "There is no rundown active in this studio."
+msgid "{{sourceLayer}} has {{audioStreams}} audio streams"
msgstr ""
-msgid "This studio doesn't exist."
+msgid "{{sourceLayer}} has the wrong format: {{format}}"
msgstr ""
-msgid "There are no active rundowns."
+msgid "{{sourceLayer}} has unsupported source: {{containerLabels}}"
msgstr ""
-msgid "Evaluation"
+msgid "{{sourceLayer}} is being ingested"
msgstr ""
-msgid "Please take a minute to fill in this form."
+msgid ""
+"{{sourceLayer}} is in a placeholder state for an unknown workflow-defined "
+"reason"
msgstr ""
-msgid ""
-"Be aware that while filling out the form keyboard and streamdeck commands "
-"will not be executed!"
+msgid "{{sourceLayer}} is in an unknown state: \"{{status}}\""
msgstr ""
-msgid "Did you have any problems with the broadcast?"
+msgid "{{sourceLayer}} is missing"
msgstr ""
-msgid ""
-"Please explain the problems you experienced (what happened and when, what "
-"should have happened, what could have triggered the problems, etcetera...)"
+msgid "{{sourceLayer}} is missing a file path"
msgstr ""
-msgid "Your name"
+msgid "{{sourceLayer}} is not yet ready on the playout system"
msgstr ""
-msgid "Save message"
+msgid "{{sourceLayer}} is transferring to the playout system"
msgstr ""
-msgid "Save message and Deactivate Rundown"
+msgid ""
+"{{sourceLayer}} is transferring to the playout system but cannot be played "
+"yet"
msgstr ""
-msgid "No problems"
+msgid "{{studioName}}: Active Rundown"
msgstr ""
-msgid "Something went wrong, but it didn't affect the output"
+msgid "{{studioName}}: Presenter screen"
msgstr ""
-msgid "Something went wrong, and it affected the output"
+msgid "{{studioName}}: Prompter"
msgstr ""
-msgid "Are you sure?"
+msgid "14 = 7 lines, 20 = 5 lines"
msgstr ""
-msgid ""
-"Trimming this clip has timed out. It's possible that the story is currently "
-"locked for writing in {{nrcsName}} and will eventually be updated. Make "
-"sure that the story is not being edited by other users."
+msgid "A device must be assigned to the config to edit the settings"
msgstr ""
-msgid "Trimming this clip has failed due to an error: {{error}}."
+msgid ""
+"A Full System Snapshot contains all system settings (studios, showstyles, "
+"blueprints, devices, etc.)"
msgstr ""
-msgid "Trimmed succesfully."
+msgid "a second"
msgstr ""
msgid ""
-"Trimming this clip is taking longer than expected. It's possible that the "
-"story is locked for writing in {{nrcsName}}."
+"A snapshot of the current Running Order has been created for "
+"troubleshooting."
msgstr ""
-msgid "Trim \"{{name}}\""
+msgid "A Studio Snapshot contains all system settings related to that studio"
msgstr ""
-msgid "OK"
+msgid "AB Channel Display"
msgstr ""
-msgid "Cancel"
+msgid "AB Playout devices"
msgstr ""
-msgid "Remove in-trimming"
+msgid "AB Resolver Channel Display"
msgstr ""
-msgid "In"
+msgid "Abort"
msgstr ""
-msgid "Remove all trimming"
+msgid "Aborting all Media Workflows"
msgstr ""
-msgid "Duration"
+msgid "Aborting Media Workflow"
msgstr ""
-msgid "Remove out-trimming"
+msgid "Accessor ID"
msgstr ""
-msgid "Out"
+msgid "Accessor Type"
msgstr ""
-msgid "Next"
+msgid "Accessors"
msgstr ""
-msgid "Test test"
+msgid "Action"
msgstr ""
-msgid "Until next take"
+msgid "Action {{actionName}} done!"
msgstr ""
-msgid "Until next segment"
+msgid "Action {{actionName}} failed: {{error}}"
msgstr ""
-msgid "Until end of segment"
+msgid "Action Buttons"
msgstr ""
-msgid "Until next rundown"
+msgid "Action Triggers"
msgstr ""
-msgid "Until end of showstyle"
+msgid "Activate \"On Air\""
msgstr ""
-msgid "Script is empty"
+msgid "Activate \"Rehearsal\""
msgstr ""
-msgid "Clip:"
+msgid "Activate (On-Air)"
msgstr ""
-msgid "Home"
+msgid "Activate (Rehearsal)"
msgstr ""
-msgid "Rundowns"
+msgid "Activate On Air"
msgstr ""
-msgid "Test Tools"
+msgid "Activate Rundown"
msgstr ""
-msgid "Status"
+msgid "Activating Hold"
msgstr ""
-msgid "Settings"
+msgid "Activating Rundown Playlist"
msgstr ""
-msgid "Account"
+msgid "Active"
msgstr ""
-msgid "Logout"
+msgid "Active Rundown"
msgstr ""
-msgid "My name is {{name}}"
+msgid "Active Rundown View"
msgstr ""
-msgid "Operating Mode"
+msgid "Ad-Lib"
msgstr ""
-msgid "Switching operating mode to {{mode}}"
+msgid "Ad-Lib Action"
msgstr ""
-msgid "Prompter"
+msgid "Add"
msgstr ""
-msgid "End of script"
+msgid "Add {{filtersTitle}}"
msgstr ""
-msgid "Could not get system status. Please consult system administrator."
+msgid "Add a playout device to the studio in order to configure the route sets"
msgstr ""
-msgid "There are no rundowns ingested into Sofie."
+msgid "Add a playout device to the studio in order to edit the layer mappings"
msgstr ""
-msgid "Click on a rundown to control your studio"
+msgid "Add Action Trigger"
msgstr ""
-msgid "Rundown"
+msgid "Add button"
msgstr ""
-msgid "Problems"
+msgid "Add filter"
msgstr ""
-msgid "Show Style"
+msgid "Add some source layers (e.g. Graphics) for your data to appear in rundowns"
msgstr ""
-msgid "On Air Start Time"
+msgid "AdLib"
msgstr ""
-msgid "Expected End Time"
+msgid "AdLib Actions are not supported in the current Rundown"
msgstr ""
-msgid "Last updated"
+msgid "AdLib could not be found!"
msgstr ""
-msgid "View Layout"
+msgid "AdLib filter"
msgstr ""
-msgid "Today"
+msgid "Adlib Rank"
msgstr ""
-msgid "Yesterday"
+msgid "Adlib rundowns are not supported for this ShowStyle!"
msgstr ""
-msgid "Tomorrow"
+msgid "Adlib Testing"
msgstr ""
-msgid "Last"
+msgid "AdLib Testing"
msgstr ""
-msgid "Getting Started"
+msgid "AdLibs can be only placed in a currently playing part!"
msgstr ""
-msgid ""
-"Start with giving this browser configuration permissions by adding this to "
-"the URL: "
+msgid "AdLibs on this layer can be queued"
msgstr ""
-msgid "Start Here!"
+msgid "All additional source layers must have active pieces"
msgstr ""
-msgid "Then, run the migrations script:"
+msgid "All connections working correctly"
msgstr ""
-msgid "Run Migrations to get set up"
+msgid "All devices working correctly"
msgstr ""
-msgid "Migrations"
+msgid "All is well, go get a"
msgstr ""
-msgid "Documentation is available at"
+msgid "All Screens in a MultiViewer"
msgstr ""
-msgid "Use {{nrcsName}} order"
+msgid "All steps"
msgstr ""
-msgid "Reset Sort Order"
+msgid "Allow direct playing pieces"
msgstr ""
-msgid "Enable configuration mode by adding ?configure=1 to the address bar."
+msgid "Allow disabling of Pieces"
msgstr ""
-msgid "You need to run migrations to set the system up for operation."
+msgid "Allow HOLD mode"
msgstr ""
-msgid "Drop Rundown here to move it out of its current Playlist"
+msgid "Allow infinites from AdLib testing to persist"
msgstr ""
-msgid "Sofie Automation"
+msgid "Allow Read access"
msgstr ""
-msgid "version"
+msgid "Allow Rundowns to be reset while on-air"
msgstr ""
-msgid "System Status"
+msgid "Allow Write access"
msgstr ""
-msgid "System has issues which need to be resolved"
+msgid "Also Require Source Layers"
msgstr ""
-msgid "Status Messages:"
+msgid "Amount of entries exceeds the limt of 10 000 items."
msgstr ""
-msgid "{{showStyleVariant}} – {{showStyleBase}}"
+msgid "An error while performing the take, playout may be impacted"
msgstr ""
-msgid "Drag to reorder or move out of playlist"
+msgid "An error while setting the next Part, playout may be impacted"
msgstr ""
-msgid "This rundown is currently active"
+msgid "An internal error occured!"
msgstr ""
-msgid "Not set"
+msgid "Another Rundown is Already Active!"
msgstr ""
-msgid "This rundown will loop indefinitely"
+msgid "Answers"
msgstr ""
-msgid "({{timecode}})"
+msgid ""
+"Any AB Playout devices here will only be active when this or another "
+"RouteSet that includes them is active"
msgstr ""
-msgid "Re-sync rundown data with {{nrcsName}}"
+msgid "APM Enabled"
msgstr ""
-msgid "Delete"
+msgid "APM Transaction Sample Rate"
msgstr ""
-msgid "Standalone Shelf"
+msgid "Append"
msgstr ""
-msgid "Rundown & Shelf"
+msgid "Append or Replace"
msgstr ""
-msgid "Default"
+msgid "Append rows"
msgstr ""
-msgid "Delete rundown?"
+msgid "Application credentials"
msgstr ""
-msgid "Are you sure you want to delete the \"{{name}}\" rundown?"
+msgid "Application Performance Monitoring"
msgstr ""
-msgid "Please note: This action is irreversible!"
+msgid "Apply"
msgstr ""
-msgid "Re-Sync rundown?"
+msgid "Apply blueprint upgrades"
msgstr ""
-msgid "Re-Sync"
+msgid "Apply Config"
msgstr ""
-msgid "Are you sure you want to re-sync the \"{{name}}\" rundown?"
+msgid "Are you sure you want to activate Rehearsal Mode?"
msgstr ""
-msgid "Start time is close"
+msgid ""
+"Are you sure you want to deactivate this Rundown\n"
+"(This will clear the outputs)"
msgstr ""
-msgid "Yes"
+msgid ""
+"Are you sure you want to deactivate this rundown?\n"
+"(This will clear the outputs.)"
msgstr ""
-msgid "No"
+msgid "Are you sure you want to delete output layer \"{{outputId}}\"?"
msgstr ""
-msgid ""
-"You are in rehearsal mode, the broadcast starts in less than 1 minute. Do "
-"you want to reset the rundown and go into On-Air mode?"
+msgid "Are you sure you want to delete source layer \"{{sourceLayerId}}\"?"
msgstr ""
-msgid "Hold"
+msgid "Are you sure you want to delete the \"{{name}}\" rundown?"
msgstr ""
-msgid "Could not find a Piece that can be disabled."
+msgid "Are you sure you want to delete the blueprint \"{{blueprintId}}\"?"
msgstr ""
-msgid "Failed to execute take"
+msgid "Are you sure you want to delete the shelf layout \"{{name}}\"?"
msgstr ""
-msgid ""
-"The rundown you are trying to execute a take on is inactive, would you like "
-"to activate this rundown?"
+msgid "Are you sure you want to delete the show style \"{{showStyleId}}\"?"
msgstr ""
-msgid "Activate (Rehearsal)"
+msgid "Are you sure you want to delete the studio \"{{studioId}}\"?"
msgstr ""
-msgid "Activate (On-Air)"
+msgid "Are you sure you want to delete this AdLib?"
msgstr ""
-msgid "Failed to activate"
+msgid "Are you sure you want to delete this Bucket?"
msgstr ""
-msgid ""
-"Something went wrong, please contact the system administrator if the "
-"problem persists."
+msgid "Are you sure you want to delete this device: \"{{deviceId}}\"?"
msgstr ""
-msgid "Another Rundown is Already Active!"
+msgid "Are you sure you want to empty (remove all adlibs inside) this Bucket?"
msgstr ""
msgid ""
-"The rundown \"{{rundownName}}\" will need to be deactivated in order to "
-"activate this one.\n"
-"\n"
-"Are you sure you want to activate this one anyway?"
+"Are you sure you want to force the migration? This will bypass the "
+"migration checks, so be sure to verify that the values in the settings are "
+"correct!"
msgstr ""
-msgid "Activate Anyway (Rehearsal)"
+msgid "Are you sure you want to import the contents of the file \"{{fileName}}\"?"
msgstr ""
-msgid "Activate Anyway (On-Air)"
+msgid "Are you sure you want to re-sync the \"{{name}}\" rundown?"
msgstr ""
-msgid "Do you want to activate this Rundown?"
+msgid ""
+"Are you sure you want to re-sync the Rundown?\n"
+"(If the currently playing Part has been changed, this can affect the output)"
msgstr ""
-msgid ""
-"The planned end time has passed, are you sure you want to activate this "
-"Rundown?"
+msgid "Are you sure you want to remove {{type}} \"{{deviceId}}\"?"
msgstr ""
-msgid "Are you sure you want to activate Rehearsal Mode?"
+msgid "Are you sure you want to remove all Variants in the table?"
msgstr ""
msgid ""
-"Are you sure you want to deactivate this Rundown?\n"
-"(This will clear the outputs)"
+"Are you sure you want to remove exclusivity group \"{{eGroupName}}\"?\n"
+"Route Sets assigned to this group will be reset to no group."
msgstr ""
-msgid "The rundown can not be reset while it is active"
+msgid "Are you sure you want to remove mapping for layer \"{{mappingId}}\"?"
msgstr ""
-msgid ""
-"A snapshot of the current Running Order has been created for "
-"troubleshooting."
+msgid "Are you sure you want to remove the AB Player \"{{playerId}}\"?"
msgstr ""
-msgid "Prepare Studio and Activate (Rehearsal)"
+msgid ""
+"Are you sure you want to remove the device \"{{deviceName}}\" and all of "
+"it's sub-devices?"
msgstr ""
-msgid "Deactivate"
+msgid "Are you sure you want to remove the Package Container \"{{containerId}}\"?"
msgstr ""
-msgid "Take"
+msgid ""
+"Are you sure you want to remove the Package Container Accessor "
+"\"{{accessorId}}\"?"
msgstr ""
-msgid "Reset Rundown"
+msgid ""
+"Are you sure you want to remove the Route from \"{{sourceLayerId}}\" to "
+"\"{{newLayerId}}\"?"
msgstr ""
-msgid "Reload {{nrcsName}} Data"
+msgid "Are you sure you want to remove the Route Set \"{{routeId}}\"?"
msgstr ""
-msgid "Store Snapshot"
+msgid "Are you sure you want to remove the Variant \"{{showStyleVariantId}}\"?"
msgstr ""
-msgid "No actions available"
+msgid ""
+"Are you sure you want to replace the blueprints with the file "
+"\"{{fileName}}\"?"
msgstr ""
-msgid "Add ?studio=1 to the URL to enter studio mode"
+msgid ""
+"Are you sure you want to reset all overrides for Packing Container "
+"\"{{id}}\"?"
msgstr ""
-msgid "Exit"
+msgid ""
+"Are you sure you want to reset all overrides for the mapping for layer "
+"\"{{mappingId}}\"?"
msgstr ""
-msgid "Error"
+msgid ""
+"Are you sure you want to reset all overrides for the output layer "
+"\"{{outputLayerId}}\"?"
msgstr ""
-msgid "This rundown is now active. Are you sure you want to exit this screen?"
+msgid "Are you sure you want to reset all overrides for the selected row?"
msgstr ""
-msgid "Invalid AdLib"
+msgid ""
+"Are you sure you want to reset all overrides for the source layer "
+"\"{{sourceLayerId}}\"?"
msgstr ""
-msgid "Cannot play this AdLib because it is marked as Invalid"
+msgid ""
+"Are you sure you want to reset the database version?\n"
+"Only do this if you plan on running the migration right after."
msgstr ""
-msgid "Floated Adlib"
+msgid "Are you sure you want to restart this device?"
msgstr ""
-msgid "Cannot play this AdLib because it is marked as Floated"
+msgid ""
+"Are you sure you want to restart this Sofie Automation Server Core: "
+"{{name}}?"
msgstr ""
-msgid "Not queueable"
+msgid ""
+"Are you sure you want to restore the system from the snapshot file "
+"\"{{fileName}}\"?"
msgstr ""
-msgid "Cannot play this adlib because source layer is not queueable"
+msgid "Are you sure you want to skip the fix up config step for {{name}}"
msgstr ""
msgid ""
-"There are no Playout Gateways connected and attached to this studio. Please "
-"contact the system administrator to start the Playout Gateway."
+"Are you sure you want to update the blueprints from the file "
+"\"{{fileName}}\"?"
msgstr ""
-msgid "Playout Gateway \"{{playoutDeviceName}}\" is now restarting."
+msgid ""
+"Are you sure you want to upload the shelf layout from the file "
+"\"{{fileName}}\"?"
msgstr ""
-msgid "Could not restart Playout Gateway \"{{playoutDeviceName}}\"."
+msgid ""
+"Are you sure, do you really want to REMOVE the Snapshot "
+"\"{{snapshotName}}\"?\r\n"
+"This cannot be undone!!"
msgstr ""
-msgid "Restart Playout"
+msgid "Are you sure?"
msgstr ""
-msgid "Do you want to restart the Playout Gateway?"
+msgid ""
+"Are you sure? This will cause the whole Sofie system to be unresponsive "
+"several seconds!"
msgstr ""
-msgid "Restart CasparCG Server"
+msgid "Around 10 minutes ago"
msgstr ""
-msgid "Do you want to restart CasparCG Server \"{{device}}\"?"
+msgid "Assign"
msgstr ""
-msgid "CasparCG on device \"{{deviceName}}\" restarting..."
+msgid "Assigned Show Styles"
msgstr ""
-msgid "Failed to restart CasparCG on device: \"{{deviceName}}\": {{errorMessage}}"
+msgid "Assigned Studios"
msgstr ""
-msgid "Cancel currently pressed hotkey"
+msgid "Attached Subdevices"
msgstr ""
-msgid "Change to fullscreen mode"
+msgid "Audio Mixing"
msgstr ""
-msgid "Show Hotkeys"
+msgid "Authorize App Access"
msgstr ""
-msgid "Take a Snapshot"
+msgid "Auto"
msgstr ""
-msgid "Restart {{device}}"
+msgid "AutoNext in QuickLoop behavior"
msgstr ""
-msgid "Rundown not found"
+msgid "Available Screens for Studio {{studioId}}"
msgstr ""
-msgid "Close"
+msgid "Bad"
msgstr ""
-msgid "Rundown for piece \"{{pieceLabel}}\" could not be found."
+msgid "Bank Index"
msgstr ""
-msgid "This rundown has been unpublished from Sofie."
+msgid "Base URL"
msgstr ""
-msgid "Error: The studio of this Rundown was not found."
+msgid "Base url to the resource (example: http://myserver/folder)"
msgstr ""
-msgid "This playlist is empty"
+msgid "Baseline needs reload, this studio may not work until reloaded"
msgstr ""
-msgid "Error: The ShowStyle of this Rundown was not found."
+msgid "Behavior"
msgstr ""
-msgid "Unknown error"
+msgid "Blueprint"
msgstr ""
-msgid ""
-"Rundown {{rundownName}} in Playlist {{playlistName}} is missing in the data "
-"from {{nrcsName}}. You can either leave it in Sofie and mark it as Unsynced "
-"or remove the rundown from Sofie. What do you want to do?"
+msgid "Blueprint config has changed"
msgstr ""
-msgid "(Unknown rundown)"
+msgid "Blueprint config preset"
msgstr ""
-msgid "(Unknown playlist)"
+msgid ""
+"Blueprint config preset has been changed. From \"{{ oldValue }}\", to \"{{ "
+"newValue }}\""
msgstr ""
-msgid "Leave Unsynced"
+msgid "Blueprint config preset is missing"
msgstr ""
-msgid "Remove"
+msgid "Blueprint config preset not set"
msgstr ""
-msgid "Remove rundown"
+msgid "Blueprint Configuration"
msgstr ""
-msgid ""
-"Do you really want to remove just the rundown \"{{rundownName}}\" in the "
-"playlist {{playlistName}} from Sofie? This cannot be undone!"
+msgid "Blueprint has a new version"
msgstr ""
-msgid "Loop Start"
+msgid "Blueprint has been changed. From \"{{ oldValue }}\", to \"{{ newValue }}\""
msgstr ""
-msgid "Loop End"
+msgid "Blueprint ID"
msgstr ""
-msgid "(in: {{time}})"
+msgid "Blueprint Name"
msgstr ""
-msgid "({{time}} ago)"
+msgid "Blueprint not found!"
msgstr ""
-msgid "Planned Start"
+msgid "Blueprint not set"
msgstr ""
-msgid "Planned Duration"
+msgid "Blueprint Type"
msgstr ""
-msgid "Planned End"
+msgid "Blueprint Version"
msgstr ""
-msgid "Time to planned end"
+msgid "Blueprints"
msgstr ""
-msgid "Time since planned end"
+msgid "Blueprints updated successfully."
msgstr ""
-msgid "Over/Under"
+msgid "Bottom"
msgstr ""
-msgid ""
-"The rundown \"{{rundownName}}\" is not published or activated in "
-"{{nrcsName}}! No data updates will currently come through."
+msgid "Box color"
msgstr ""
-msgid "Re-sync"
+msgid "BREAK"
msgstr ""
-msgid "Re-sync Rundown"
+msgid "Break In"
msgstr ""
-msgid ""
-"Are you sure you want to re-sync the Rundown?\n"
-"(If the currently playing Part has been changed, this can affect the output)"
+msgid "Bucket AdLib is not compatible with this Rundown!"
msgstr ""
-msgid "Restart"
+msgid "Bucket not found!"
msgstr ""
-msgid ""
-"Fixing this problem requires a restart to the host device. Are you sure you "
-"want to restart {{device}}?\n"
-"(This might affect output)"
+msgid "Button"
msgstr ""
-msgid "Device \"{{deviceName}}\" restarting..."
+msgid "Button height scale factor"
msgstr ""
-msgid "Failed to restart device: \"{{deviceName}}\": {{errorMessage}}"
+msgid "Button mapping"
msgstr ""
-msgid "There is an unknown problem with the part."
+msgid "Button width scale factor"
msgstr ""
-msgid "Show issue"
+msgid "By Parts"
msgstr ""
-msgid "There is an unspecified problem with the source."
+msgid "By Segments"
msgstr ""
-msgid "External message queue has unsent messages."
+msgid "Camera"
msgstr ""
-msgid ""
-"The system configuration has been changed since importing this rundown. It "
-"might not run correctly"
+msgid "Camera Screen"
msgstr ""
-msgid "Unable to check the system configuration for changes"
+msgid "Can Generate Adlib Testing Rundown"
msgstr ""
-msgid "The Studio configuration is missing some required fields:"
+msgid "Can not be used during a hold!"
msgstr ""
-msgid "The Show Style configuration \"{{name}}\" could not be validated"
+msgid "Cancel"
msgstr ""
-msgid "The ShowStyle \"{{name}}\" configuration is missing some required fields:"
+msgid "Cancel currently pressed hotkey"
msgstr ""
-msgid "Unable to validate the system configuration"
+msgid "Cannot activate HOLD before a part has been taken!"
msgstr ""
-msgid "Device {{deviceName}} is disconnected"
+msgid "Cannot activate HOLD between the current and next parts"
msgstr ""
-msgid "Critical Problems"
+msgid "Cannot activate HOLD once an adlib has been used"
msgstr ""
-msgid "Warnings"
+msgid "Cannot cancel HOLD once it has been taken"
msgstr ""
-msgid "Notifications"
+msgid "Cannot connect to the {{platformName}}: {{reason}}"
msgstr ""
-msgid "Rewind all Segments"
+msgid "Cannot perform take for {{duration}}ms"
msgstr ""
-msgid "Go to On Air Segment"
+msgid "Cannot play this AdLib because it is marked as Floated"
msgstr ""
-msgid "Switch Segment View Mode"
+msgid "Cannot play this AdLib because it is marked as Invalid"
msgstr ""
-msgid "Toggle Switchboard Panel"
+msgid "Cannot play this adlib because source layer is not queueable"
msgstr ""
-msgid "Toggle Support Panel"
+msgid "Cannot remove the rundown \"{{name}}\" while it is on-air."
msgstr ""
-msgid "Just now"
+msgid "Cannot take close to an AUTO"
msgstr ""
-msgid "Less than a minute ago"
+msgid "Cannot take during a transition"
msgstr ""
-msgid "Less than five minutes ago"
+msgid "Cannot take unplayable AdLib"
msgstr ""
-msgid "Around 10 minutes ago"
+msgid "CasparCG on device \"{{deviceName}}\" restarting..."
msgstr ""
-msgid "More than 10 minutes ago"
+msgid "Center"
msgstr ""
-msgid "More than 30 minutes ago"
+msgid "Change to fullscreen mode"
msgstr ""
-msgid "More than 2 hours ago"
+msgid "Channel Name"
msgstr ""
-msgid "More than 5 hours ago"
+msgid ""
+"Check layer types to select all layers of that type, or check individual "
+"layers for more specific filtering."
msgstr ""
-msgid "More than a day ago"
+msgid "Check the console for troubleshooting data from device \"{{deviceName}}\"!"
msgstr ""
-msgid "{{nrcsName}} Connection"
+msgid "Cleanup"
msgstr ""
-msgid "Last update"
+msgid "Cleanup old data"
msgstr ""
-msgid "Off-line devices"
+msgid "Cleanup old database indexes"
msgstr ""
-msgid "Devices with issues"
+msgid "Clear {{layerName}}"
msgstr ""
-msgid "All connections working correctly"
+msgid "Clear filter"
msgstr ""
-msgid "Play-out"
+msgid "Clear queued segment"
msgstr ""
-msgid "All devices working correctly"
+msgid "Clear QuickLoop"
msgstr ""
-msgid "Auto"
+msgid "Clear QuickLoop End"
msgstr ""
-msgid "Expected End"
+msgid "Clear QuickLoop Start"
msgstr ""
-msgid "Next Loop at"
+msgid "Clear Source Layer"
msgstr ""
-msgid "Diff"
+msgid "Clear value"
msgstr ""
-msgid "Started"
+msgid "Clearing SourceLayer"
msgstr ""
-msgid "Expected Start"
+msgid "Click anywhere for fullscreen"
msgstr ""
-msgid "{{currentRundownName}} - {{rundownPlaylistName}} (Looping)"
+msgid "Click on a rundown to control your studio"
msgstr ""
-msgid "{{currentRundownName}} - {{rundownPlaylistName}}"
+msgid "Click or press Enter for fullscreen"
msgstr ""
-msgid "{{rundownPlaylistName}} (Looping)"
+msgid "Click to show available Package Containers"
msgstr ""
-msgid "Floated AdLib"
+msgid "Click to show available Show Styles"
msgstr ""
-msgid "Switchboard"
+msgid "Client IP"
msgstr ""
-msgid "This is not in it's normal setting"
+msgid "Clip starts with {{frames}} black frames"
msgstr ""
-msgid "Off"
+msgid "Clip starts with {{frames}} freeze frames"
msgstr ""
-msgid "Switch to Timeline View"
+msgid "Clips"
msgstr ""
-msgid "Switch to Storyboard View"
+msgid "Close"
msgstr ""
-msgid "Switch to List View"
+msgid "Close Properties Panel"
msgstr ""
-msgid "On Air"
+msgid "Close Rundown"
msgstr ""
-msgid "On Air At"
+msgid "Comma-separated list of studio labels to filter by. Leave empty for all."
msgstr ""
-msgid "On Air In"
+msgid "Comma-separated speeds in px/frame"
msgstr ""
-msgid "Unsynced"
+msgid "Compatible Studios"
msgstr ""
-msgid "Critical problems"
+msgid "Completed with warnings"
msgstr ""
-msgid "segment"
+msgid "Config Fix Up must be run or ignored before the configuration can be edited"
msgstr ""
-msgid "Sources"
+msgid "Config for {{name}} fix failed"
msgstr ""
-msgid "Loops to top"
+msgid "Config for {{name}} fixed successfully"
msgstr ""
-msgid "Show End"
+msgid "Config for {{name}} upgraded failed"
msgstr ""
-msgid "BREAK"
+msgid "Config for {{name}} upgraded successfully"
msgstr ""
-msgid "Break In"
+msgid "Config has not been applied before"
msgstr ""
-msgid "part"
+msgid "Config ID: "
msgstr ""
-msgid "Set segment as Next"
+msgid "Config looks good"
msgstr ""
-msgid "Queue segment"
+msgid "Config preset"
msgstr ""
-msgid "Clear queued segment"
+msgid "Config preset is missing"
msgstr ""
-msgid "Set this part as Next"
+msgid "Config preset not set"
msgstr ""
-msgid "Set Next Here"
+msgid "Config requires fixing up before it can be validated"
msgstr ""
-msgid "Play from Here"
+msgid ""
+"Config value \"{{ name }}\" has changed. From \"{{ oldValue }}\", to \"{{ "
+"newValue }}\""
msgstr ""
-msgid "Zoom Out"
+msgid "Configurable Screens"
msgstr ""
-msgid "Show All"
+msgid ""
+"Configuration for this Gateway has moved to the Studio Peripheral Device "
+"settings"
msgstr ""
-msgid "Zoom In"
+msgid "Configure display options"
msgstr ""
-msgid "Parts Duration"
+msgid ""
+"Configure which pieces should display their assigned AB resolver channel "
+"(e.g., \"Server A\") on various screens. This helps operators identify "
+"which video server is playing each clip."
msgstr ""
-msgid "System Settings"
+msgid "Confirm"
msgstr ""
-msgid "Add config item"
+msgid "Connect some devices to the playout gateway"
msgstr ""
-msgid "Add"
+msgid "Connect to {{deviceName}}"
msgstr ""
-msgid "Item"
+msgid "Connected"
msgstr ""
-msgid "Value"
+msgid "Connected App Containers"
msgstr ""
-msgid "true"
+msgid "Connected Expectation Managers"
msgstr ""
-msgid "false"
+msgid "Connected to the {{platformName}}."
msgstr ""
-msgid "{{count}} rows"
+msgid "Connected Workers"
msgstr ""
-msgid "Failed to update config: {{errorMessage}}"
+msgid "Connecting to the {{platformName}}"
msgstr ""
-msgid "Export"
+msgid "Container Status"
msgstr ""
-msgid "Import"
+msgid "Control mode"
msgstr ""
-msgid "Reset this item?"
+msgid "Control modes"
msgstr ""
-msgid "Reset"
+msgid ""
+"Controls for exposed Route Sets will be displayed to the producer within "
+"the Rundown View in the Switchboard."
msgstr ""
-msgid "Are you sure you want to reset this config item \"{{configId}}\"?"
+msgid "Core"
msgstr ""
-msgid "Blueprint Configuration"
+msgid "Core + Worker processing time"
msgstr ""
-msgid "More settings specific to this studio can be found here"
+msgid "Core System settings"
msgstr ""
-msgid "Update Blueprints?"
+msgid ""
+"Could not create a snapshot for the evaluation, because the previous one "
+"was created just moments ago. If you want another snapshot, try again in a "
+"couple of seconds."
msgstr ""
-msgid "Update"
+msgid "Could not get system status. Please consult system administrator."
msgstr ""
-msgid ""
-"Are you sure you want to update the blueprints from the file "
-"\"{{fileName}}\"?"
+msgid "Could not restart core: {{err}}"
msgstr ""
-msgid "Blueprints updated successfully."
+msgid "Could not restart Playout Gateway \"{{playoutDeviceName}}\"."
msgstr ""
-msgid "Replace Blueprints?"
+msgid "Create Adlib Testing Rundown"
msgstr ""
-msgid "Replace"
+msgid "Create new Bucket"
msgstr ""
-msgid ""
-"Are you sure you want to replace the blueprints with the file "
-"\"{{fileName}}\"?"
+msgid "Created"
msgstr ""
-msgid "Failed to update blueprints: {{errorMessage}}"
+msgid "Creating a new Bucket"
msgstr ""
-msgid "Assigned Show Styles:"
+msgid "Creating Adlib Testing Rundown"
msgstr ""
-msgid "This Blueprint is not being used by any Show Style"
+msgid "Creating Snapshot for debugging"
msgstr ""
-msgid "Assigned Studios:"
+msgid "Critical problems"
msgstr ""
-msgid "This Blueprint is not compatible with any Studio"
+msgid "Critical Problems"
msgstr ""
-msgid "Unassign"
+msgid "Cron jobs"
msgstr ""
-msgid "Assign"
+msgid "Current Part"
msgstr ""
-msgid "Blueprint ID"
+msgid "Current part can contain next pieces"
msgstr ""
-msgid "Blueprint Name"
+msgid "Current Segment"
msgstr ""
-msgid "No name set"
+msgid "Custom Classes"
msgstr ""
-msgid "Blueprint Type"
+msgid "Custom Hotkey Labels"
msgstr ""
-msgid "Upload a new blueprint"
+msgid "Deactivate"
msgstr ""
-msgid "Last modified"
+msgid "Deactivate \"On Air\""
msgstr ""
-msgid "Blueprint Id"
+msgid "Deactivate Rundown"
msgstr ""
-msgid "Blueprint Version"
+msgid "Deactivate Studio"
msgstr ""
-msgid "Disable version check"
+msgid "Deactivating other Rundown Playlist, and activating this one"
msgstr ""
-msgid "Upload Blueprints"
+msgid "Deactivating Rundown Playlist"
msgstr ""
-msgid "Unknown table type"
+msgid "Debug"
msgstr ""
-msgid "Unknown type"
+msgid "Debug mode"
msgstr ""
-msgid "Defaults to '{{defaultVal}}' if left empty"
+msgid "Debug State"
msgstr ""
-msgid "OAuth credentials succesfully uploaded."
+msgid "Default"
msgstr ""
-msgid "Failed to upload OAuth credentials: {{errorMessage}}"
+msgid "Default (hide)"
msgstr ""
-msgid "OAuth credentials successfuly reset"
+msgid "Default Layout"
msgstr ""
-msgid "Failed to reset OAuth credentials: {{errorMessage}}"
+msgid "Default shelf height"
msgstr ""
-msgid "Reset App Credentials"
+msgid "Default State"
msgstr ""
-msgid "Reset User Credentials"
+msgid "Delete"
msgstr ""
-msgid "Application credentials"
+msgid "Delete Action Trigger"
msgstr ""
-msgid "Authorize App Access"
+msgid "Delete layout?"
msgstr ""
-msgid "Waiting for gateway to generate URL..."
+msgid "Delete mapping"
msgstr ""
-msgid "Only Match Global AdLibs"
+msgid "Delete output layer"
msgstr ""
-msgid "Name"
+msgid "Delete rundown?"
msgstr ""
-msgid "Display Style"
+msgid "Delete source layer"
msgstr ""
-msgid "Show thumbnails next to list items"
+msgid "Delete this AdLib"
msgstr ""
-msgid "Button width scale factor"
+msgid "Delete this Blueprint?"
msgstr ""
-msgid "Button height scale factor"
+msgid "Delete this Bucket"
msgstr ""
-msgid "Only Display AdLibs from Current Segment"
+msgid "Delete this item?"
msgstr ""
-msgid "Include Global AdLibs"
+msgid "Delete this output?"
msgstr ""
-msgid "Filter Disabled"
+msgid "Delete this Show Style?"
msgstr ""
-msgid "Include Clear Source Layer in Ad-Libs"
+msgid "Delete this Studio?"
msgstr ""
-msgid "Source Layers"
+msgid "Device"
msgstr ""
-msgid "Source Layer Types"
+msgid "Device \"{{deviceName}}\" restarting..."
msgstr ""
-msgid "Filter disabled"
+msgid "Device {{deviceName}} is disconnected"
msgstr ""
-msgid "Output Channels"
+msgid "Device ID"
msgstr ""
-msgid "Label contains"
+msgid "Device is already attached to another studio."
msgstr ""
-msgid "Tags must contain"
+msgid "Device is missing configuration schema"
msgstr ""
-msgid "Hide Panel from view"
+msgid "Device is of unknown type"
msgstr ""
-msgid "Show panel as a timeline"
+msgid "Device Name"
msgstr ""
-msgid "Enable search toolbar"
+msgid "Device not found"
msgstr ""
-msgid "Overflow horizontally"
+msgid "Device Triggers"
msgstr ""
-msgid "Display Take buttons"
+msgid "Device Type"
msgstr ""
-msgid "Queue all adlibs"
+msgid "Devices"
msgstr ""
-msgid "Toggle AdLibs on single mouse click"
+msgid "Devices with issues"
msgstr ""
-msgid "Disable the hover Inspector when hovering over the button"
+msgid "Did you have any problems with the broadcast?"
msgstr ""
-msgid "Current part can contain next pieces"
+msgid "Diff"
msgstr ""
-msgid "Indicate only one next piece per source layer"
+msgid "Director Screen"
msgstr ""
-msgid "Hide duplicated AdLibs"
+msgid "Director's Screen"
msgstr ""
-msgid ""
-"Picks the first instance of an adLib per rundown, identified by uniqueness "
-"Id"
+msgid "Disable"
msgstr ""
-msgid "URL"
+msgid "Disable Context Menu"
msgstr ""
-msgid "Display Rank"
+msgid "Disable follow take"
msgstr ""
-msgid "Role"
+msgid "Disable hints by adding this to the URL:"
msgstr ""
-msgid "Adlib Rank"
+msgid "Disable next Piece"
msgstr ""
-msgid "Place label below panel"
+msgid "Disable the hover Inspector when hovering over the button"
msgstr ""
-msgid "Disabled"
+msgid "Disable the next element"
msgstr ""
-msgid "Show segment name"
+msgid "Disable version check"
msgstr ""
-msgid "Show part title"
+msgid "Disabled"
msgstr ""
-msgid "Hide for dynamically inserted parts"
+msgid "Disabling next Piece"
msgstr ""
-msgid "Planned Start Text"
+msgid "Disconnected"
msgstr ""
-msgid "Text to show above show start time"
+msgid "Dismiss"
msgstr ""
-msgid "Hide Diff"
+msgid "Dismiss all notifications"
msgstr ""
-msgid "Hide Planned Start"
+msgid "Display AB channel assignments on:"
msgstr ""
-msgid "Planned End text"
+msgid "Display AdLibs in a column in List View"
msgstr ""
-msgid "Text to show above show end time"
+msgid "Display in a column in List View"
msgstr ""
-msgid "Hide Planned End Label"
+msgid "Display name of the Package Container"
msgstr ""
-msgid "Hide Diff Label"
+msgid "Display piece duration for source layers"
msgstr ""
-msgid "Hide Countdown"
+msgid "Display Rank"
msgstr ""
-msgid "Hide End Time"
+msgid "Display Style"
msgstr ""
-msgid "Hide Label"
+msgid "Display Take buttons"
msgstr ""
-msgid "Script Source Layers"
+msgid ""
+"Do you really want to remove just the rundown \"{{rundownName}}\" in the "
+"playlist {{playlistName}} from Sofie? \n"
+"\n"
+"This cannot be undone!"
msgstr ""
-msgid "Source layers containing script"
+msgid "Do you really want to restore the snapshot \"{{snapshotName}}\"?"
msgstr ""
-msgid "Type"
+msgid "Do you want to activate this Rundown?"
msgstr ""
-msgid "Require Piece on Source Layer"
+msgid ""
+"Do you want to append these to existing Action Triggers, or do you want to "
+"replace them?"
msgstr ""
-msgid "Text"
+msgid "Do you want to do this?"
msgstr ""
-msgid "Show Rundown Name"
+msgid "Do you want to execute {{actionName}}? This may the disrupt the output"
msgstr ""
-msgid "Segment"
+msgid "Do you want to restart CasparCG Server \"{{device}}\"?"
msgstr ""
-msgid "Part"
+msgid "Do you want to restart the Playout Gateway?"
msgstr ""
-msgid "Show Piece Icon Color"
+msgid "Documentation is available at"
msgstr ""
-msgid "Use color of primary piece as background of panel"
+msgid "Documents to be removed:"
msgstr ""
-msgid "Box color"
+msgid "Does NOT support HEAD requests"
msgstr ""
-msgid "Also Require Source Layers"
+msgid "Don't treat the end of the last rundown in a playlist as a break"
msgstr ""
-msgid "Specify additional layers where at least one layer must have an active piece"
+msgid "Done"
msgstr ""
-msgid "Require All Additional Source Layers"
+msgid "Download Action Triggers"
msgstr ""
-msgid "All additional source layers must have active pieces"
+msgid "Drag to reorder or move out of playlist"
msgstr ""
-msgid "X"
+msgid "Drop Rundown here to move it out of its current Playlist"
msgstr ""
-msgid "Y"
+msgid "Dropzone URL"
msgstr ""
-msgid "Width"
+msgid "Duplicate Action Trigger"
msgstr ""
-msgid "Height"
+msgid "Duration"
msgstr ""
-msgid "Scale"
+msgid "DURATION"
msgstr ""
-msgid "Custom Classes"
+msgid "e.g., Studio A,Studio B"
msgstr ""
-msgid "Device ID"
+msgid "Edit"
msgstr ""
-msgid "Device Type"
+msgid "Edit Action Trigger"
msgstr ""
-msgid "Remove this item?"
+msgid "Edit in Nora"
msgstr ""
-msgid "Are you sure you want to remove {{type}} \"{{deviceId}}\"?"
+msgid "Edit mapping"
msgstr ""
-msgid "Attached Subdevices"
+msgid "Edit Mode"
msgstr ""
-msgid "Expected End text"
+msgid "Edit output layer"
msgstr ""
-msgid "Text to show above countdown to end of show"
+msgid "Edit Part Properties"
msgstr ""
-msgid "Hide Expected End timing when a break is next"
+msgid "Edit Piece Properties"
msgstr ""
-msgid ""
-"While there are still breaks coming up in the show, hide the Expected End "
-"timers"
+msgid "Edit Segment Properties"
msgstr ""
-msgid "Show next break timing"
+msgid "Edit source layer"
msgstr ""
-msgid "Whether to show countdown to next break"
+msgid "Edit Support Panel"
msgstr ""
-msgid "Last rundown is not break"
+msgid "Empty"
msgstr ""
-msgid "Don't treat the end of the last rundown in a playlist as a break"
+msgid "Empty this Bucket"
msgstr ""
-msgid "Next Break text"
+msgid "Emptying Bucket"
msgstr ""
-msgid "Text to show above countdown to next break"
+msgid "Enable"
msgstr ""
-msgid "Expose as user selectable layout"
+msgid "Enable \"Play from Anywhere\""
msgstr ""
-msgid "Shelf Layout"
+msgid "Enable AdLib Testing, for testing AdLibs before taking the first Part"
msgstr ""
-msgid "Mini Shelf Layout"
+msgid "Enable automatic storage of Rundown Playlist snapshots periodically"
msgstr ""
-msgid "Rundown Header Layout"
+msgid "Enable Buckets"
msgstr ""
-msgid "Live line countdown requires Source Layer"
+msgid "Enable CasparCG restart job"
msgstr ""
-msgid ""
-"One of these source layers must have an active piece for the live line "
-"countdown to be show"
+msgid "Enable configuration mode by adding ?configure=1 to the address bar."
msgstr ""
-msgid "Hide Rundown Divider"
+msgid "Enable Evaluation Form"
msgstr ""
-msgid "Hide rundown divider between rundowns in a playlist"
+msgid "Enable hints by adding this to the URL:"
msgstr ""
-msgid "Show Breaks as Segments"
+msgid "Enable QuickLoop"
msgstr ""
-msgid "Segment countdown requires source layer"
+msgid "Enable search toolbar"
msgstr ""
-msgid ""
-"One of these source layers must have a piece for the countdown to segment "
-"on-air to be show"
+msgid "Enable User Editing"
msgstr ""
-msgid "Fixed duration in Segment header"
+msgid "Enabled"
msgstr ""
-msgid ""
-"The segment duration in the segment header always displays the planned "
-"duration instead of acting as a counter"
+msgid "Enabled on all Parts, applying QuickLoop Fallback Part Duration if needed"
msgstr ""
-msgid "Select visible Source Layers"
+msgid "Enabled, but skipping parts with undefined or 0 duration"
msgstr ""
-msgid "Select visible Output Groups"
+msgid ""
+"Enables internal monitoring of blocked main thread. Logs when there is an "
+"issue, but (unverified) might cause issues in itself."
msgstr ""
-msgid "Display piece duration for source layers"
+msgid "End of script"
msgstr ""
-msgid "Piece on selected source layers will have a duration label shown"
+msgid "End Words"
msgstr ""
-msgid "Expose layout as a standalone page"
+msgid "Error"
msgstr ""
-msgid "Open shelf by default"
+msgid "Error when checking for cleaning up"
msgstr ""
-msgid "Default shelf height"
+msgid "Error: The ShowStyle of this Rundown was not found."
msgstr ""
-msgid "Disable Context Menu"
+msgid "Error: The studio of this Rundown was not found."
msgstr ""
-msgid "Show Inspector"
+msgid "Est. End"
msgstr ""
-msgid "Hide default AdLib Start/Execute options"
+msgid "Evaluations"
msgstr ""
-msgid "Only custom trigger modes will be shown"
+msgid "Exclusivity group"
msgstr ""
-msgid "This action has an invalid combination of filters"
+msgid "Exclusivity Group ID"
msgstr ""
-msgid "Use Trigger Mode"
+msgid "Exclusivity Group Name"
msgstr ""
-msgid "Trigger Mode"
+msgid "Exclusivity Groups"
+msgstr ""
+
+msgid "Execute"
+msgstr ""
+
+msgid "Execute User Operation"
+msgstr ""
+
+msgid "Executed {{actionName}} on device \"{{deviceName}}\": {{response}}"
+msgstr ""
+
+msgid "Executed {{actionName}} on device \"{{deviceName}}\"..."
+msgstr ""
+
+msgid "Executes within the currently open Rundown, requires a Client-side trigger."
+msgstr ""
+
+msgid "Execution times"
+msgstr ""
+
+msgid "Exit"
+msgstr ""
+
+msgid "Expectation Manager"
+msgstr ""
+
+msgid "Expected End"
+msgstr ""
+
+msgid "Expected End text"
+msgstr ""
+
+msgid "Expected End Time"
+msgstr ""
+
+msgid "Expected Start"
+msgstr ""
+
+msgid "Export"
+msgstr ""
+
+msgid "Export visible"
+msgstr ""
+
+msgid "Expose as user selectable layout"
+msgstr ""
+
+msgid "Expose layout as a standalone page"
+msgstr ""
+
+msgid "External message queue has unsent messages."
+msgstr ""
+
+msgid "Failed to activate"
+msgstr ""
+
+msgid "Failed to add a new Show Style Variant: {{errorMessage}}"
+msgstr ""
+
+msgid "Failed to assign AB player for {{pieceNames}}"
+msgstr ""
+
+msgid "Failed to assign non-critical AB player for {{pieceNames}}"
+msgstr ""
+
+msgid "Failed to compare config changes"
+msgstr ""
+
+msgid "Failed to copy Show Style Variant: {{errorMessage}}"
+msgstr ""
+
+msgid "Failed to delete Show Style Variant: {{errorMessage}}"
+msgstr ""
+
+msgid ""
+"Failed to execute {{actionName}} on device: \"{{deviceName}}\": "
+"{{errorMessage}}"
+msgstr ""
+
+msgid "Failed to execute take"
+msgstr ""
+
+msgid "Failed to generate adlib rundown! {{message}}"
+msgstr ""
+
+msgid "Failed to import new Show Style Variants: {{errorMessage}}"
+msgstr ""
+
+msgid ""
+"Failed to import Show Style Variant {{name}}. Make sure it is not already "
+"imported."
+msgstr ""
+
+msgid "Failed to remove all Show Style Variants: {{errorMessage}}"
+msgstr ""
+
+msgid "Failed to reorderShow Style Variant: {{errorMessage}}"
+msgstr ""
+
+msgid "Failed to reset OAuth credentials: {{errorMessage}}"
+msgstr ""
+
+msgid "Failed to restart CasparCG on device: \"{{deviceName}}\": {{errorMessage}}"
+msgstr ""
+
+msgid "Failed to restart device: \"{{deviceName}}\": {{errorMessage}}"
+msgstr ""
+
+msgid "Failed to update blueprints: {{errorMessage}}"
+msgstr ""
+
+msgid "Failed to update config: {{errorMessage}}"
+msgstr ""
+
+msgid "Failed to upload OAuth credentials: {{errorMessage}}"
+msgstr ""
+
+msgid "Failed to upload shelf layout: {{errorMessage}}"
+msgstr ""
+
+msgid "Failed to validate config"
+msgstr ""
+
+msgid "Fatal"
+msgstr ""
+
+msgid "File path to the folder of the local folder"
+msgstr ""
+
+msgid "Filter by Output Layer"
+msgstr ""
+
+msgid "Filter by Source Layer"
+msgstr ""
+
+msgid "Filter disabled"
+msgstr ""
+
+msgid "Filter Disabled"
+msgstr ""
+
+msgid "Filter..."
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Find Trigger..."
+msgstr ""
+
+msgid "Fine scroll"
+msgstr ""
+
+msgid "Fix Up Config"
+msgstr ""
+
+msgid "Fixed duration in Segment header"
+msgstr ""
+
+msgid ""
+"Fixing this problem requires a restart to the host device. Are you sure you "
+"want to restart {{device}}?\n"
+"(This might affect output)"
+msgstr ""
+
+msgid "Floated Adlib"
+msgstr ""
+
+msgid "Floated AdLib"
+msgstr ""
+
+msgid "Folder path"
+msgstr ""
+
+msgid "Folder path to shared folder"
+msgstr ""
+
+msgid "Following"
+msgstr ""
+
+msgid "Font size"
+msgstr ""
+
+msgid "for {{name}} fix skipped successfully"
+msgstr ""
+
+msgid "Force"
+msgstr ""
+
+msgid "Force (deactivate others)"
+msgstr ""
+
+msgid "Force Migration"
+msgstr ""
+
+msgid "Force Migration (unsafe)"
+msgstr ""
+
+msgid "Force the Multi-gateway-mode"
+msgstr ""
+
+msgid "Forward"
+msgstr ""
+
+msgid "Forward: {{forward}}"
+msgstr ""
+
+msgid "Found no future pieces"
+msgstr ""
+
+msgid "Frame Rate"
+msgstr ""
+
+msgid "From"
+msgstr ""
+
+msgid "Full System Snapshot"
+msgstr ""
+
+msgid "fullscreen"
+msgstr ""
+
+msgid "Gateway"
+msgstr ""
+
+msgid "General"
+msgstr ""
+
+msgid "Generated URL"
+msgstr ""
+
+msgid "Generating restart token"
+msgstr ""
+
+msgid "Generic Properties"
+msgstr ""
+
+msgid "Generic Script"
+msgstr ""
+
+msgid "Getting Started"
+msgstr ""
+
+msgid "Global AdLib"
+msgstr ""
+
+msgid "Global AdLibs"
+msgstr ""
+
+msgid "Go to Live"
+msgstr ""
+
+msgid "Go to On Air line"
+msgstr ""
+
+msgid "Go to On Air Segment"
+msgstr ""
+
+msgid "Good"
+msgstr ""
+
+msgid "Graphics"
+msgstr ""
+
+msgid "GUI"
+msgstr ""
+
+msgid "he default state of this Route Set"
+msgstr ""
+
+msgid "Heading"
+msgstr ""
+
+msgid "Height"
+msgstr ""
+
+msgid "Help & Support"
+msgstr ""
+
+msgid "Hide"
+msgstr ""
+
+msgid "Hide Countdown"
+msgstr ""
+
+msgid "Hide default AdLib Start/Execute options"
+msgstr ""
+
+msgid "Hide Diff"
+msgstr ""
+
+msgid "Hide Diff Label"
+msgstr ""
+
+msgid "Hide duplicated AdLibs"
+msgstr ""
+
+msgid "Hide End Time"
+msgstr ""
+
+msgid "Hide Expected End timing when a break is next"
+msgstr ""
+
+msgid "Hide for dynamically inserted parts"
+msgstr ""
+
+msgid "Hide Label"
+msgstr ""
+
+msgid "Hide over/under timer"
+msgstr ""
+
+msgid "Hide Panel from view"
+msgstr ""
+
+msgid "Hide Planned End Label"
+msgstr ""
+
+msgid "Hide Planned Start"
+msgstr ""
+
+msgid "Hide Rundown Divider"
+msgstr ""
+
+msgid "Hide rundown divider between rundowns in a playlist"
+msgstr ""
+
+msgid "Hide scrollbar"
+msgstr ""
+
+msgid "Hold"
+msgstr ""
+
+msgid "Hostname or IP address of the Atem"
+msgstr ""
+
+msgid "Hotkey"
+msgstr ""
+
+msgid "How did the show go?"
+msgstr ""
+
+msgid ""
+"How many of the transactions to monitor. Set to -1 to log nothing (max "
+"performance), 0.5 to log 50% of the transactions, 1 to log all transactions"
+msgstr ""
+
+msgid ""
+"How much preparation time to add to global pieces on the timeline before "
+"they are played"
+msgstr ""
+
+msgid "HTML that will be shown in the Support Panel"
+msgstr ""
+
+msgid "Human-readable name of the layer"
+msgstr ""
+
+msgid "Icon"
+msgstr ""
+
+msgid "Icon color"
+msgstr ""
+
+msgid "Id"
+msgstr ""
+
+msgid "ID"
+msgstr ""
+
+msgid ""
+"ID of the device (corresponds to the device ID in the peripheralDevice "
+"settings)"
+msgstr ""
+
+msgid "ID of the timeline-layer to map to some output"
+msgstr ""
+
+msgid "Idempotency-Key is already used"
+msgstr ""
+
+msgid "Idempotency-Key is missing"
+msgstr ""
+
+msgid "If set, only one Route Set will be active per exclusivity group"
+msgstr ""
+
+msgid ""
+"If set, Package Manager assumes that the source doesn't support HEAD "
+"requests and will use GET instead. If false, HEAD requests will be sent to "
+"check availability."
+msgstr ""
+
+msgid "Ignore and apply"
+msgstr ""
+
+msgid "Ignore QuickLoop"
+msgstr ""
+
+msgid "Ignoring take as playing part has changed since TAKE was requested."
+msgstr ""
+
+msgid "Ignoring TAKES that are too quick after eachother ({{duration}} ms)"
+msgstr ""
+
+msgid "Import"
+msgstr ""
+
+msgid "Import error: {{errorMessage}}"
+msgstr ""
+
+msgid "Import file?"
+msgstr ""
+
+msgid "Importing an AdLib to the Bucket"
+msgstr ""
+
+msgid "In"
+msgstr ""
+
+msgid "IN"
+msgstr ""
+
+msgid "in {{days}} days, {{hours}} h {{minutes}} min {{seconds}} s"
+msgstr ""
+
+msgid "in {{hours}} h {{minutes}} min {{seconds}} s"
+msgstr ""
+
+msgid "in {{minutes}} min {{seconds}} s"
+msgstr ""
+
+msgid "in {{seconds}} s"
+msgstr ""
+
+msgid "In rehearsal"
+msgstr ""
+
+msgid "Include Clear Source Layer in Ad-Libs"
+msgstr ""
+
+msgid "Include Global AdLibs"
+msgstr ""
+
+msgid "Indicate only one next piece per source layer"
+msgstr ""
+
+msgid "Ingest Devices"
+msgstr ""
+
+msgid "Ingest devices are needed to create rundowns"
+msgstr ""
+
+msgid "Ingest from Snapshot"
+msgstr ""
+
+msgid "Ingest Rundown Status"
+msgstr ""
+
+msgid "Ingest Rundown Statuses"
+msgstr ""
+
+msgid "Input Devices"
+msgstr ""
+
+msgid "Input devices allow you to trigger Sofie actions remotely"
+msgstr ""
+
+msgid "Installation name"
+msgstr ""
+
+msgid "Internal Error generating RundownPlaylist"
+msgstr ""
+
+msgid "Internal ID"
+msgstr ""
+
+msgid "Invalid AdLib"
+msgstr ""
+
+msgid "Invalid blueprint: \"{{blueprintId}}\""
+msgstr ""
+
+msgid ""
+"Invalid config preset for blueprint: \"{{configPresetId}}\" "
+"({{blueprintId}})"
+msgstr ""
+
+msgid "Invert joystick"
+msgstr ""
+
+msgid "Is a Guest Input"
+msgstr ""
+
+msgid "Is a Live Remote Input"
+msgstr ""
+
+msgid "Is collapsed by default"
+msgstr ""
+
+msgid "Is flattened"
+msgstr ""
+
+msgid "Is hidden"
+msgstr ""
+
+msgid "Is Immutable"
+msgstr ""
+
+msgid "Is PGM Output"
+msgstr ""
+
+msgid "ISA URLs"
+msgstr ""
+
+msgid "Job Status"
+msgstr ""
+
+msgid "Just now"
+msgstr ""
+
+msgid "Key"
+msgstr ""
+
+msgid "Keyboard"
+msgstr ""
+
+msgid ""
+"Keyboard shortcuts and Stream Deck buttons will not work while filling out "
+"the form!"
+msgstr ""
+
+msgid "Kill (debug)"
+msgstr ""
+
+msgid "Label"
+msgstr ""
+
+msgid "Label contains"
+msgstr ""
+
+msgid "Last"
+msgstr ""
+
+msgid "Last {{layerName}}"
+msgstr ""
+
+msgid "Last modified"
+msgstr ""
+
+msgid "Last rundown is not break"
+msgstr ""
+
+msgid "Last seen"
+msgstr ""
+
+msgid "Last Seen"
+msgstr ""
+
+msgid "Last update"
+msgstr ""
+
+msgid "Last updated"
+msgstr ""
+
+msgid "Layer does not allow sticky pieces!"
+msgstr ""
+
+msgid "Layer ID"
+msgstr ""
+
+msgid "Layer Mappings"
+msgstr ""
+
+msgid "Layer Name"
+msgstr ""
+
+msgid "Leave Unsynced"
+msgstr ""
+
+msgid "Less than a minute ago"
+msgstr ""
+
+msgid "Less than five minutes ago"
+msgstr ""
+
+msgid "Lighting"
+msgstr ""
+
+msgid "Limit"
+msgstr ""
+
+msgid "Live line countdown requires Source Layer"
+msgstr ""
+
+msgid "Live Speak"
+msgstr ""
+
+msgid "Loading"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+msgid "Local"
+msgstr ""
+
+msgid "Local Time"
+msgstr ""
+
+msgid "Logging level"
+msgstr ""
+
+msgid "Logo"
+msgstr ""
+
+msgid "Lookahead Maximum Search Distance (Undefined = {{limit}})"
+msgstr ""
+
+msgid "Lookahead Mode"
+msgstr ""
+
+msgid "Lookahead Target Objects (Undefined = 1)"
+msgstr ""
+
+msgid "Loop End"
+msgstr ""
+
+msgid "Loop Start"
+msgstr ""
+
+msgid "Loops to Start"
+msgstr ""
+
+msgid "Lower Third"
+msgstr ""
+
+msgid "Manage Snapshots"
+msgstr ""
+
+msgid "Mapping cannot be reset as it has no default values"
+msgstr ""
+
+msgid "Mapping Type"
+msgstr ""
+
+msgid "Mappings"
+msgstr ""
+
+msgid "Margin (%)"
+msgstr ""
+
+msgid "Maximum register limit"
+msgstr ""
+
+msgid "Media"
+msgstr ""
+
+msgid "Media Preview URL"
+msgstr ""
+
+msgid "Media Status"
+msgstr ""
+
+msgid "Media Type"
+msgstr ""
+
+msgid "Memory troubleshooting"
+msgstr ""
+
+msgid "Menu"
+msgstr ""
+
+msgid "Message"
+msgstr ""
+
+msgid "Message Queue"
+msgstr ""
+
+msgid "Message shown to users in the Evaluations form"
+msgstr ""
+
+msgid "Messages"
+msgstr ""
+
+msgid "Method"
+msgstr ""
+
+msgid "Method ${method}"
+msgstr ""
+
+msgid "MIDI Pedal"
+msgstr ""
+
+msgid "Migrate database"
+msgstr ""
+
+msgid "Migrations"
+msgstr ""
+
+msgid "Mini Shelf Layout"
+msgstr ""
+
+msgid "Mini Shelf Layouts"
+msgstr ""
+
+msgid "Minimum register limit"
+msgstr ""
+
+msgid "Minimum Take Span"
+msgstr ""
+
+msgid "Minor Warning"
+msgstr ""
+
+msgid "Mirror horizontally"
+msgstr ""
+
+msgid "Mirror vertically"
+msgstr ""
+
+msgid "Mock Piece Content Status"
+msgstr ""
+
+msgid "Mode: {{triggerMode}}"
+msgstr ""
+
+msgid "Modify Shift register"
+msgstr ""
+
+msgid "Modifying Bucket"
+msgstr ""
+
+msgid "Modifying Bucket AdLib"
+msgstr ""
+
+msgid "Monitor blocked thread"
+msgstr ""
+
+msgid "More documentation available at:"
+msgstr ""
+
+msgid "More than 10 minutes ago"
+msgstr ""
+
+msgid "More than 2 hours ago"
+msgstr ""
+
+msgid "More than 30 minutes ago"
+msgstr ""
+
+msgid "More than 5 hours ago"
+msgstr ""
+
+msgid "More than a day ago"
+msgstr ""
+
+msgid "Mouse"
+msgstr ""
+
+msgid "Move Next"
+msgstr ""
+
+msgid "Move Next backwards"
+msgstr ""
+
+msgid "Move Next forwards"
+msgstr ""
+
+msgid "Move Next to the following segment"
+msgstr ""
+
+msgid "Move Next to the previous segment"
+msgstr ""
+
+msgid "Move Parts"
+msgstr ""
+
+msgid "Move Segments"
+msgstr ""
+
+msgid "Moving Next"
+msgstr ""
+
+msgid "Multi-gateway-mode delay time"
+msgstr ""
+
+msgid "Multilingual description, editing will overwrite"
+msgstr ""
+
+msgid "My name is {{name}}"
+msgstr ""
+
+msgid "Name"
+msgstr ""
+
+msgid "Network address"
+msgstr ""
+
+msgid "Network Id"
+msgstr ""
+
+msgid "New Bucket"
+msgstr ""
+
+msgid "New Filter"
+msgstr ""
+
+msgid "New Layer"
+msgstr ""
+
+msgid "New Layout"
+msgstr ""
+
+msgid "New Output"
+msgstr ""
+
+msgid "New Source"
+msgstr ""
+
+msgid "Next"
+msgstr ""
+
+msgid "Next Break text"
+msgstr ""
+
+msgid "Next Loop at"
+msgstr ""
+
+msgid "Next Part"
+msgstr ""
+
+msgid "Next scheduled show"
+msgstr ""
+
+msgid "Next Segment"
+msgstr ""
+
+msgid "Nintendo Joy-Con"
+msgstr ""
+
+msgid "No"
+msgstr ""
+
+msgid "No Action Triggers set up."
+msgstr ""
+
+msgid "No actions available"
+msgstr ""
+
+msgid ""
+"No Ad-Lib matches in the current state of Rundown: "
+"\"{{rundownPlaylistName}}\""
+msgstr ""
+
+msgid "No camera-related source layers found"
+msgstr ""
+
+msgid "No changes"
+msgstr ""
+
+msgid "No gateways are configured"
+msgstr ""
+
+msgid "No matching Action Trigger."
+msgstr ""
+
+msgid "No matching Rundowns available to be used for preview"
+msgstr ""
+
+msgid "No Media matches this filter"
+msgstr ""
+
+msgid "No Media required by this system"
+msgstr ""
+
+msgid "No Media required for this Rundown"
+msgstr ""
+
+msgid "No migrations to apply"
+msgstr ""
+
+msgid "No name set"
+msgstr ""
+
+msgid "No Next point found, please set a part as Next before doing a TAKE."
msgstr ""
-msgid "Force"
+msgid "No notifications"
msgstr ""
-msgid "Rehearsal"
+msgid "No output channels set"
msgstr ""
-msgid "Mode: {{triggerMode}}"
+msgid "No output layers available"
msgstr ""
-msgid "Undo"
+msgid "No PGM output"
msgstr ""
-msgid "Segments: {{delta}}"
+msgid "No problems"
msgstr ""
-msgid "Parts: {{delta}}"
+msgid "No schema has been provided for this mapping"
msgstr ""
-msgid "Open"
+msgid "No source layers available"
msgstr ""
-msgid "Toggle"
+msgid "No source layers set"
+msgstr ""
+
+msgid "No status loaded"
+msgstr ""
+
+msgid "None"
+msgstr ""
+
+msgid "Normal scrolling"
+msgstr ""
+
+msgid "Not Active"
+msgstr ""
+
+msgid "Not Connected"
+msgstr ""
+
+msgid "Not defined"
+msgstr ""
+
+msgid "Not Global"
+msgstr ""
+
+msgid "Not in rehearsal"
+msgstr ""
+
+msgid "Not queueable"
+msgstr ""
+
+msgid "Not set"
+msgstr ""
+
+msgid "Note: Core needs to be restarted to apply these settings"
+msgstr ""
+
+msgid "Notes"
+msgstr ""
+
+msgid "Nothing to cleanup!"
+msgstr ""
+
+msgid "Nothing was found on layer!"
+msgstr ""
+
+msgid "Now Active Rundown"
+msgstr ""
+
+msgid "NRCS Name"
+msgstr ""
+
+msgid "OAuth credentials successfully reset"
+msgstr ""
+
+msgid "OAuth credentials successfully uploaded."
+msgstr ""
+
+msgid "Off"
+msgstr ""
+
+msgid "Off-line devices"
+msgstr ""
+
+msgid "OK"
msgstr ""
msgid "On"
msgstr ""
-msgid "Forward: {{forward}}"
+msgid "On Air"
msgstr ""
-msgid "Activate Rundown"
+msgid "On Air At"
+msgstr ""
+
+msgid "On Air In"
+msgstr ""
+
+msgid "On Air Start Time"
+msgstr ""
+
+msgid "On release"
+msgstr ""
+
+msgid "OnAir"
+msgstr ""
+
+msgid ""
+"One of these source layers must have a piece for the countdown to segment "
+"on-air to be show"
+msgstr ""
+
+msgid ""
+"One of these source layers must have an active piece for the live line "
+"countdown to be show"
+msgstr ""
+
+msgid "Only custom trigger modes will be shown"
+msgstr ""
+
+msgid "Only Display AdLibs from Current Segment"
+msgstr ""
+
+msgid "Only Global"
+msgstr ""
+
+msgid "Only Match Global AdLibs"
+msgstr ""
+
+msgid ""
+"Only one rundown can be active at the same time. Currently active rundowns: "
+"{{names}}"
+msgstr ""
+
+msgid "Only Pieces present in rundown are sticky"
+msgstr ""
+
+msgid "Open"
+msgstr ""
+
+msgid "Open Camera Screen"
+msgstr ""
+
+msgid "Open Fullscreen"
+msgstr ""
+
+msgid "Open Presenter Screen"
+msgstr ""
+
+msgid "Open Prompter"
+msgstr ""
+
+msgid "Open shelf by default"
+msgstr ""
+
+msgid "Operating Mode"
+msgstr ""
+
+msgid "Operation"
+msgstr ""
+
+msgid "Optional description of the action"
+msgstr ""
+
+msgid ""
+"Optionally restrict AB channel display to specific output layers (e.g., "
+"only PGM). Leave empty to show for all output layers."
+msgstr ""
+
+msgid "Order 66?"
+msgstr ""
+
+msgid "Original Layer"
+msgstr ""
+
+msgid "Original Layer not found"
+msgstr ""
+
+msgid "Other"
+msgstr ""
+
+msgid "Out"
+msgstr ""
+
+msgid "OUT"
+msgstr ""
+
+msgid "Output channels"
+msgstr ""
+
+msgid "Output Channels"
+msgstr ""
+
+msgid "Output channels are required for your studio to work"
+msgstr ""
+
+msgid "Output Layer"
+msgstr ""
+
+msgid "Over"
+msgstr ""
+
+msgid "Over/Under"
+msgstr ""
+
+msgid "Overflow horizontally"
+msgstr ""
+
+msgid "Overlay Screen"
+msgstr ""
+
+msgid "Package Container ID"
+msgstr ""
+
+msgid "Package Containers"
+msgstr ""
+
+msgid "Package Containers to use for previews"
+msgstr ""
+
+msgid "Package Containers to use for thumbnails"
+msgstr ""
+
+msgid "Package Manager"
+msgstr ""
+
+msgid "Package Manager is offline"
+msgstr ""
+
+msgid "Package Manager status"
+msgstr ""
+
+msgid "Package Manager: Restart Package Container"
+msgstr ""
+
+msgid "Package Manager: Restart work"
+msgstr ""
+
+msgid "Package Status"
+msgstr ""
+
+msgid "Packages"
+msgstr ""
+
+msgid "Parameters"
+msgstr ""
+
+msgid "Parent Config ID"
+msgstr ""
+
+msgid "Parent device is missing"
+msgstr ""
+
+msgid "Parent Devices"
+msgstr ""
+
+msgid "part"
+msgstr ""
+
+msgid "Part"
+msgstr ""
+
+msgid "Part Count Down"
+msgstr ""
+
+msgid "Part Count Up"
+msgstr ""
+
+msgid "Part duration is 0."
+msgstr ""
+
+msgid "Parts Duration"
+msgstr ""
+
+msgid "Parts: {{delta}}"
+msgstr ""
+
+msgid "Password"
+msgstr ""
+
+msgid "Password for authentication"
+msgstr ""
+
+msgid "Peripheral Device is outdated"
+msgstr ""
+
+msgid "Peripheral Device not found!"
+msgstr ""
+
+msgid "Peripheral Devices"
+msgstr ""
+
+msgid "Pick"
+msgstr ""
+
+msgid "Pick last"
+msgstr ""
+
+msgid ""
+"Picks the first instance of an adLib per rundown, identified by uniqueness "
+"Id"
+msgstr ""
+
+msgid "Piece on selected source layers will have a duration label shown"
msgstr ""
-msgid "Ad-Lib"
+msgid "Piece to take is already live!"
msgstr ""
-msgid "Deactivate Rundown"
+msgid "Piece to take is not directly playable!"
msgstr ""
-msgid "Disable next Piece"
+msgid "Piece to take was not found!"
msgstr ""
-msgid "Move Next"
+msgid "Pieces on this layer are sticky"
msgstr ""
-msgid "Reload NRCS Data"
+msgid "Pieces on this layer can be cleared"
msgstr ""
-msgid "Resync with NRCS"
+msgid "Place label below panel"
msgstr ""
-msgid "Shelf"
+msgid "Plan. Dur"
msgstr ""
-msgid "Rewind Segments to start"
+msgid "Plan. End"
msgstr ""
-msgid "Go to On Air line"
+msgid "Plan. Start"
msgstr ""
-msgid "Show entire On Air Segment"
+msgid "Planned Duration"
msgstr ""
-msgid "Queue AdLib from Minishelf"
+msgid "Planned End"
msgstr ""
-msgid "Force (deactivate others)"
+msgid "Planned End text"
msgstr ""
-msgid "Move Segments"
+msgid "Planned Start"
msgstr ""
-msgid "By Segments"
+msgid "Planned Start Text"
msgstr ""
-msgid "Move Parts"
+msgid "Play-out"
msgstr ""
-msgid "By Parts"
+msgid "Playlist"
msgstr ""
-msgid "State"
+msgid "Playout Devices"
msgstr ""
-msgid "Forward"
+msgid "Playout devices are needed to control your studio hardware"
msgstr ""
-msgid "Action"
+msgid "Playout devices which uses this package container"
msgstr ""
-msgid "Ad-Lib Action"
+msgid "Playout Gateway \"{{playoutDeviceName}}\" is now restarting."
msgstr ""
-msgid "Clear Source Layer"
+msgid ""
+"Please check the database related to the warnings above. If neccessary, you "
+"can"
msgstr ""
-msgid "Sticky Piece"
+msgid "Please explain the problems you experienced"
msgstr ""
-msgid "Global AdLibs"
+msgid "Please note: This action is irreversible!"
msgstr ""
-msgid "Label"
+msgid "Pool name"
msgstr ""
-msgid "Limit"
+msgid "Pool PlayerId"
msgstr ""
-msgid "Output Layer"
+msgid "Prepare Studio and Activate (Rehearsal)"
msgstr ""
-msgid "Pick"
+msgid "Preparing for broadcast"
msgstr ""
-msgid "Pick last"
+msgid "Preparing, please wait..."
msgstr ""
-msgid "Source Layer"
+msgid "Presenter Layout"
msgstr ""
-msgid "Source Layer Type"
+msgid "Presenter screen"
msgstr ""
-msgid "Tag"
+msgid "Presenter Screen"
msgstr ""
-msgid "Not Global"
+msgid "Presenter View Layouts"
msgstr ""
-msgid "Only Global"
+msgid "Preserve position of segments when unsynced relative to other segments"
msgstr ""
-msgid "OnAir"
+msgid "Previous"
msgstr ""
-msgid "Now active rundown"
+msgid "Previous work status reasons"
msgstr ""
-msgid "View"
+msgid "Prioritizing Media Workflow"
msgstr ""
-msgid "Executes within the currently open Rundown, requires a Client-side trigger."
+msgid "Priority"
msgstr ""
-msgid "Unknown"
+msgid "Problems"
msgstr ""
-msgid "Restore Deleted Action"
+msgid "Profile name to be used by FileFlow when exporting the clips"
msgstr ""
-msgid "Select Action"
+msgid "Prompter"
msgstr ""
-msgid "Reset Action"
+msgid "Prompter Screen"
msgstr ""
-msgid "Duplicate Action Trigger"
+msgid "Properties"
msgstr ""
-msgid "Edit Action Trigger"
+msgid "Quantel FileFlow Profile name"
msgstr ""
-msgid "Delete Action Trigger"
+msgid "Quantel FileFlow URL"
msgstr ""
-msgid ""
-"No Ad-Lib matches in the current state of Rundown: "
-"\"{{rundownPlaylistName}}\""
+msgid "Quantel gateway URL"
msgstr ""
-msgid "No matching Rundowns available to be used for preview"
+msgid "Quantel transformer URL"
msgstr ""
-msgid "Multilingual description, editing will overwrite"
+msgid "Quantel Zone ID"
msgstr ""
-msgid "Optional description of the action"
+msgid "Queue AdLib from Minishelf"
msgstr ""
-msgid "Triggered Actions uploaded successfully."
+msgid "Queue all adlibs"
msgstr ""
-msgid "Triggered Actions failed to upload: {{errorMessage}}"
+msgid "Queue segment"
msgstr ""
-msgid "Append or Replace"
+msgid "Queue this AdLib"
msgstr ""
-msgid ""
-"Do you want to append these to existing Action Triggers, or do you want to "
-"replace them?"
+msgid "Queued Messages"
msgstr ""
-msgid "Append"
+msgid "Queueing next Segment"
msgstr ""
-msgid "Action Triggers"
+msgid "Quick Links"
msgstr ""
-msgid "Find Trigger..."
+msgid "QuickLoop Fallback Part Duration"
msgstr ""
-msgid "No matching Action Trigger."
+msgid "Range: Forward max"
msgstr ""
-msgid "No Action Triggers set up."
+msgid "Range: Neutral max"
msgstr ""
-msgid "System-wide"
+msgid "Range: Neutral min"
msgstr ""
-msgid "Upload stored Action Triggers"
+msgid "Range: Reverse min"
msgstr ""
-msgid "Download Action Triggers"
+msgid "Rate limit exceeded"
msgstr ""
-msgid "On release"
+msgid "Re-check"
msgstr ""
-msgid "Empty"
+msgid "Re-sync"
msgstr ""
-msgid "Hotkey"
+msgid "Re-Sync"
msgstr ""
-msgid "Device"
+msgid "Re-sync Rundown"
msgstr ""
-msgid "There was an error: {{error}}"
+msgid "Re-sync rundown data with {{nrcsName}}"
msgstr ""
-msgid "Package Manager status"
+msgid "Re-Sync rundown?"
msgstr ""
-msgid "Reload statuses"
+msgid "Re-Syncing Rundown"
msgstr ""
-msgid "Updated"
+msgid "Re-Syncing Rundown Playlist"
msgstr ""
-msgid "Package Manager"
+msgid "Read marker position"
msgstr ""
-msgid "Expectation Manager"
+msgid "Reads the ingest (NRCS) data, and pipes it through the blueprints"
msgstr ""
-msgid "Statistics"
+msgid "Ready"
msgstr ""
-msgid "Times"
+msgid "Reconnect now"
msgstr ""
-msgid "Connected Workers"
+msgid "Reconnecting to the {{platformName}}"
msgstr ""
-msgid "Work-in-progress"
+msgid "Refreshing debug states"
msgstr ""
-msgid "WorkForce"
+msgid "Register ID"
msgstr ""
-msgid "Kill (debug)"
+msgid "Rehearsal"
msgstr ""
-msgid "Connected Expectation Managers"
+msgid "Rehearsal mode is already active"
msgstr ""
-msgid "Connected App Containers"
+msgid "Rehearsal mode is not allowed"
msgstr ""
-msgid "No status loaded"
+msgid "Rehearsal State"
msgstr ""
-msgid "Peripheral Device is outdated"
+msgid "Reload {{nrcsName}} Data"
msgstr ""
-msgid ""
-"The config UI is now driven by manifests fed by the device. This device "
-"needs updating to provide the configManifest to be configurable"
+msgid "Reload Baseline"
msgstr ""
-msgid "Are you sure you want to restart this device?"
+msgid "Reload NRCS Data"
msgstr ""
-msgid "Restart this Device?"
+msgid "Reload statuses"
msgstr ""
-msgid "Check the console for troubleshooting data from device \"{{deviceName}}\"!"
+msgid "Reloading Rundown Playlist Data"
msgstr ""
-msgid ""
-"There was an error when troubleshooting the device: \"{{deviceName}}\": "
-"{{errorMessage}}"
+msgid "Rem. Dur"
msgstr ""
-msgid "Generic Properties"
+msgid "Remote"
msgstr ""
-msgid "Device Name"
+msgid "Remote Source"
msgstr ""
-msgid "Restart Device"
+msgid "Remote Speak"
msgstr ""
-msgid "Troubleshoot"
+msgid "Remove"
msgstr ""
-msgid "Reset Database Version"
+msgid "Remove all Show Style Variants?"
msgstr ""
-msgid ""
-"Are you sure you want to reset the database version?\n"
-"Only do this if you plan on running the migration right after."
+msgid "Remove all trimming"
msgstr ""
-msgid "Version for {{name}}: From {{fromVersion}} to {{toVersion}}"
+msgid "Remove in-trimming"
msgstr ""
-msgid "Re-check"
+msgid "Remove indexes"
msgstr ""
-msgid "Reset All Versions"
+msgid "Remove old data"
msgstr ""
-msgid "Migrate database"
+msgid "Remove old data from database"
msgstr ""
-msgid "All steps"
+msgid "Remove out-trimming"
msgstr ""
-msgid ""
-"The migration consists of several phases, you will get more options after "
-"you've this migration"
+msgid "Remove rundown"
msgstr ""
-msgid "The migration can be completed automatically."
+msgid "Remove Snapshot"
msgstr ""
-msgid "Run automatic migration procedure"
+msgid "Remove this AB PLayers from this Route Set?"
msgstr ""
-msgid ""
-"The migration procedure needs some help from you in order to complete, see "
-"below:"
+msgid "Remove this device?"
msgstr ""
-msgid "Double-check Values"
+msgid "Remove this Device?"
msgstr ""
-msgid "Are you sure the values you have entered are correct?"
+msgid "Remove this Exclusivity Group?"
msgstr ""
-msgid "Run Migration Procedure"
+msgid "Remove this item?"
msgstr ""
-msgid "Warnings During Migration"
+msgid "Remove this mapping?"
msgstr ""
-msgid ""
-"Please check the database related to the warnings above. If neccessary, you "
-"can"
+msgid "Remove this Package Container Accessor?"
msgstr ""
-msgid "Force Migration"
+msgid "Remove this Package Container?"
msgstr ""
-msgid ""
-"Are you sure you want to force the migration? This will bypass the "
-"migration checks, so be sure to verify that the values in the settings are "
-"correct!"
+msgid "Remove this Route from this Route Set?"
msgstr ""
-msgid "Force Migration (unsafe)"
+msgid "Remove this Route Set?"
msgstr ""
-msgid "The migration was completed successfully!"
+msgid "Remove this Show Style Variant?"
msgstr ""
-msgid "All is well, go get a"
+msgid "Removing Bucket"
msgstr ""
-msgid "New Layout"
+msgid "Removing Bucket AdLib"
msgstr ""
-msgid "Button"
+msgid "Removing Rundown"
msgstr ""
-msgid "New Filter"
+msgid "Removing Rundown Playlist"
msgstr ""
-msgid "Delete layout?"
+msgid "Rename this AdLib"
msgstr ""
-msgid "Are you sure you want to delete the shelf layout \"{{name}}\"?"
+msgid "Rename this Bucket"
msgstr ""
-msgid "Action Buttons"
+msgid "Reording Rundowns in Playlist"
msgstr ""
-msgid "Toggled Label"
+msgid "Replace"
msgstr ""
-msgid "Icon"
+msgid "Replace Blueprints?"
msgstr ""
-msgid "Icon color"
+msgid "Replace rows"
msgstr ""
-msgid "Use as default"
+msgid "Require All Additional Source Layers"
msgstr ""
-msgid "Filters"
+msgid "Require Piece on Source Layer"
msgstr ""
-msgid "There are no filters set up yet"
+msgid "Reset"
msgstr ""
-msgid "Default Layout"
+msgid "Reset Action"
msgstr ""
-msgid "Add {{filtersTitle}}"
+msgid "Reset All Versions"
msgstr ""
-msgid "Add filter"
+msgid "Reset and Activate \"On Air\""
msgstr ""
-msgid "Add button"
+msgid "Reset App Credentials"
msgstr ""
-msgid "Upload Layout?"
+msgid "Reset Database Version"
msgstr ""
-msgid "Upload"
+msgid "Reset mapping to default values"
msgstr ""
-msgid ""
-"Are you sure you want to upload the shelf layout from the file "
-"\"{{fileName}}\"?"
+msgid "Reset Package Container to default values"
msgstr ""
-msgid "Shelf layout uploaded successfully."
+msgid "Reset row to default values"
msgstr ""
-msgid "Failed to upload shelf layout: {{errorMessage}}"
+msgid "Reset Rundown"
msgstr ""
-msgid "Studios"
+msgid "Reset Sort Order"
msgstr ""
-msgid "Show Styles"
+msgid "Reset source layer to default values"
msgstr ""
-msgid "Blueprints"
+msgid "Reset this item?"
msgstr ""
-msgid "Devices"
+msgid "Reset this mapping?"
msgstr ""
-msgid "Tools"
+msgid "Reset this Package Container?"
msgstr ""
-msgid "Core System settings"
+msgid "Reset to default"
msgstr ""
-msgid "Upgrade Database"
+msgid "Reset User Credentials"
msgstr ""
-msgid "Manage Snapshots"
+msgid "Resetting and activating Rundown Playlist"
msgstr ""
-msgid "Delete this Studio?"
+msgid "Resetting Playlist to default order"
msgstr ""
-msgid "Are you sure you want to delete the studio \"{{studioId}}\"?"
+msgid "Resetting Rundown Playlist"
msgstr ""
-msgid "Attached Devices"
+msgid "Resource Id"
msgstr ""
-msgid "Layer Mappings"
+msgid "Restart"
msgstr ""
-msgid "Route Sets"
+msgid "Restart {{device}}"
msgstr ""
-msgid "Unnamed Studio"
+msgid "Restart All Jobs"
msgstr ""
-msgid "Delete this Show Style?"
+msgid "Restart CasparCG Server"
msgstr ""
-msgid "Are you sure you want to delete the show style \"{{showStyleId}}\"?"
+msgid "Restart Container"
msgstr ""
-msgid "Source/Output Layers"
+msgid "Restart Device"
msgstr ""
-msgid "Custom Hotkey Labels"
+msgid "Restart Playout"
msgstr ""
-msgid "Variants"
+msgid "Restart this Device?"
msgstr ""
-msgid "Unnamed Show Style"
+msgid "Restart this system?"
msgstr ""
-msgid "Delete this Blueprint?"
+msgid "Restarting Media Workflow"
msgstr ""
-msgid "Are you sure you want to delete the blueprint \"{{blueprintId}}\"?"
+msgid "Restarting Sofie Core"
msgstr ""
-msgid "Unnamed blueprint"
+msgid "Restore"
msgstr ""
-msgid "Version"
+msgid "Restore Deleted Action"
msgstr ""
-msgid "Remove this Device?"
+msgid "Restore from Snapshot File"
msgstr ""
-msgid ""
-"Are you sure you want to remove the device \"{{deviceName}}\" and all of "
-"it's sub-devices?"
+msgid "Restore from Stored Snapshots"
msgstr ""
-msgid "Connected"
+msgid "Restore from this Snapshot file?"
msgstr ""
-msgid "Disconnected"
+msgid "Restore Part from NRCS"
msgstr ""
-msgid "Good"
+msgid "Restore Segment from NRCS"
msgstr ""
-msgid "Minor Warning"
+msgid "Restore Snapshot"
msgstr ""
-msgid "Warning"
+msgid "Resync with NRCS"
msgstr ""
-msgid "Bad"
+msgid "Retry"
msgstr ""
-msgid "Fatal"
+msgid "Return to list"
msgstr ""
-msgid "Show Style Base Name"
+msgid "Reveal in Shelf"
msgstr ""
-msgid "Blueprint"
+msgid "Reverse speed map"
msgstr ""
-msgid "Blueprint not set"
+msgid "Reverse speed map (left trigger)"
msgstr ""
-msgid "Blueprint config preset"
+msgid "Rewind all Segments"
msgstr ""
-msgid "Blueprint config preset not set"
+msgid "Rewind segments to start"
msgstr ""
-msgid "Blueprint config preset is missing"
+msgid "Rewind Segments to start"
msgstr ""
-msgid "Compatible Studios:"
+msgid "Right hand offset"
msgstr ""
-msgid "This Show Style is not compatible with any Studio"
+msgid "Role"
msgstr ""
-msgid "Key"
+msgid "Route Set"
msgstr ""
-msgid "Host Key"
+msgid "Route Set ID"
msgstr ""
-msgid "Source Layer type"
+msgid "Route Set Name"
msgstr ""
-msgid "Key color"
+msgid "Route Sets"
msgstr ""
-msgid "AHK"
+msgid "Route Type"
msgstr ""
-msgid "New Output"
+msgid "Routed Mappings"
msgstr ""
-msgid "Output channels are required for your studio to work"
+msgid "Routes"
msgstr ""
-msgid "Output channels"
+msgid "Row cannot be reset as it has no default values"
msgstr ""
-msgid "No output channels set"
+msgid "Run automatic migration procedure"
msgstr ""
-msgid "No PGM output"
+msgid "Run Migrations to get set up"
msgstr ""
-msgid "Delete this output?"
+msgid "Rundown"
msgstr ""
-msgid "Are you sure you want to delete output layer \"{{outputId}}\"?"
+msgid ""
+"Rundown {{rundownName}} in Playlist {{playlistName}} is missing in the data "
+"from {{nrcsName}}. You can either leave it in Sofie and mark it as Unsynced "
+"or remove the rundown from Sofie. What do you want to do?"
msgstr ""
-msgid "Channel Name"
+msgid "Rundown & Shelf"
msgstr ""
-msgid "Internal ID"
+msgid "Rundown filter"
msgstr ""
-msgid "Is PGM Output"
+msgid "Rundown for piece \"{{pieceLabel}}\" could not be found."
msgstr ""
-msgid "Is collapsed by default"
+msgid "Rundown Global Piece Prepare Time"
msgstr ""
-msgid "Is flattened"
+msgid "Rundown Header Layout"
msgstr ""
-msgid "Camera"
+msgid "Rundown Header Layouts"
msgstr ""
-msgid "Graphics"
+msgid "Rundown is already doing a HOLD!"
msgstr ""
-msgid "Live Speak"
+msgid "Rundown must be active!"
msgstr ""
-msgid "Lower Third"
+msgid "Rundown must be playing or have a next!"
msgstr ""
-msgid "Studio Microphone"
+msgid "Rundown must be playing!"
msgstr ""
-msgid "Remote Source"
+msgid "Rundown Name"
msgstr ""
-msgid "Generic Script"
+msgid "Rundown not found"
msgstr ""
-msgid "Split Screen"
+msgid ""
+"Rundown Playlist is active, please deactivate before preparing it for "
+"broadcast"
msgstr ""
-msgid "Clips"
+msgid "Rundown Playlist is active, please deactivate it before regenerating it."
msgstr ""
-msgid "Unknown Layer"
+msgid "Rundown Playlist names to store"
msgstr ""
-msgid "Audio Mixing"
+msgid "Rundown Playlist not found!"
msgstr ""
-msgid "Transition"
+msgid "Rundown View Layouts"
msgstr ""
-msgid "Lights"
+msgid ""
+"RundownPlaylist is active but not in rehearsal, please deactivate it or set "
+"in in rehearsal to be able to reset it."
msgstr ""
-msgid "Local"
+msgid "Rundowns"
msgstr ""
-msgid "New Source"
+msgid "Save"
msgstr ""
-msgid "Add some source layers (e.g. Graphics) for your data to appear in rundowns"
+msgid "Save Changes"
msgstr ""
-msgid "No source layers set"
+msgid "Save to Bucket"
msgstr ""
-msgid "Delete this item?"
+msgid "Saving AdLib to Bucket"
msgstr ""
-msgid "Are you sure you want to delete source layer \"{{sourceLayerId}}\"?"
+msgid "Saving Evaluation"
msgstr ""
-msgid "Source Name"
+msgid "Scale"
msgstr ""
-msgid "Source Abbreviation"
+msgid "Script is empty"
msgstr ""
-msgid "Source Type"
+msgid "Script Source Layers"
msgstr ""
-msgid "Is a Live Remote Input"
+msgid "Search..."
msgstr ""
-msgid "Is a Guest Input"
+msgid "Seg. Budg."
msgstr ""
-msgid "Is hidden"
+msgid "segment"
msgstr ""
-msgid "Display in a column in List View"
+msgid "Segment"
msgstr ""
-msgid "Display AdLibs in a column in List View"
+msgid "Segment Count Down"
msgstr ""
-msgid "Pieces on this layer can be cleared"
+msgid "Segment Count Up"
msgstr ""
-msgid "Pieces on this layer are sticky"
+msgid "Segment countdown requires source layer"
msgstr ""
-msgid "Only Pieces present in rundown are sticky"
+msgid "Segment no longer exists in {{nrcs}}"
msgstr ""
-msgid "Allow disabling of Pieces"
+msgid "Segment was hidden in {{nrcs}}"
msgstr ""
-msgid "AdLibs on this layer can be queued"
+msgid "Segments: {{delta}}"
msgstr ""
-msgid "Exclusivity group"
+msgid ""
+"Select a presenter layout. Leave as default to use the first available "
+"layout."
msgstr ""
-msgid "Unnamed variant"
+msgid "Select Action"
msgstr ""
-msgid ""
-"Failed to import Show Style Variant {{name}}. Make sure it is not already "
-"imported."
+msgid "Select Compatible Show Styles"
msgstr ""
-msgid "Failed to import new Show Style Variants: {{errorMessage}}"
+msgid "Select image"
msgstr ""
-msgid "Failed to copy Show Style Variant: {{errorMessage}}"
+msgid ""
+"Select one or more control modes. Leave all unchecked for default (mouse + "
+"keyboard)."
msgstr ""
-msgid "Failed to add a new Show Style Variant: {{errorMessage}}"
+msgid ""
+"Select source layers to display. Leave all unchecked to show all "
+"camera-related layers."
msgstr ""
-msgid "Remove this Show Style Variant?"
+msgid "Select visible Output Groups"
msgstr ""
-msgid "Failed to delete Show Style Variant: {{errorMessage}}"
+msgid "Select visible Source Layers"
msgstr ""
-msgid "Are you sure you want to remove the Variant \"{{showStyleVariantId}}\"?"
+msgid "Select which playout devices are using this package container"
msgstr ""
-msgid "Failed to remove all Show Style Variants: {{errorMessage}}"
+msgid "Send message"
msgstr ""
-msgid "Remove all Show Style Variants?"
+msgid "Send message and Deactivate Rundown"
msgstr ""
-msgid "Are you sure you want to remove all Variants in the table?"
+msgid "Sent Messages"
msgstr ""
-msgid "Failed to reorderShow Style Variant: {{errorMessage}}"
+msgid "Server"
msgstr ""
-msgid "Show Style Variants"
+msgid "Server {{id}}"
msgstr ""
-msgid "Restore from this Snapshot file?"
+msgid "Server ID"
msgstr ""
msgid ""
-"Are you sure you want to restore the system from the snapshot file "
-"\"{{fileName}}\"?"
+"Server ID. For sources, this should generally be omitted (or set to 0) so "
+"clip-searches are zone-wide. If set, clip-searches are limited to that "
+"server."
msgstr ""
-msgid "Successfully restored snapshot"
+msgid "Set"
msgstr ""
-msgid "Snapshot restore failed: {{errorMessage}}"
+msgid "Set as QuickLoop End"
msgstr ""
-msgid "Full System Snapshot"
+msgid "Set as QuickLoop Start"
msgstr ""
-msgid ""
-"A Full System Snapshot contains all system settings (studios, showstyles, "
-"blueprints, devices, etc.)"
+msgid "Set In & Out points"
msgstr ""
-msgid "Take a Full System Snapshot"
+msgid "Set part as Next"
msgstr ""
-msgid "Studio Snapshot"
+msgid "Set segment as Next"
msgstr ""
-msgid "A Studio Snapshot contains all system settings related to that studio"
+msgid "Setting as QuickLoop End"
msgstr ""
-msgid "Take a Snapshot for studio \"{{studioName}}\" only"
+msgid "Setting as QuickLoop Start"
msgstr ""
-msgid "Restore from Snapshot File"
+msgid "Setting Next"
msgstr ""
-msgid "Upload Snapshot"
+msgid "Setting Next Segment"
msgstr ""
-msgid "Restore from Stored Snapshots"
+msgid "Settings"
msgstr ""
-msgid "Restore"
+msgid "Shelf"
msgstr ""
-msgid "Show \"Remove snapshots\"-buttons"
+msgid "Shelf Layout"
msgstr ""
-msgid "Studio Baseline needs update: "
+msgid "Shelf layout uploaded successfully."
msgstr ""
-msgid "Baseline needs reload, this studio may not work until reloaded"
+msgid "Shelf Layouts"
msgstr ""
-msgid "Reload Baseline"
+msgid "Shortcuts"
msgstr ""
-msgid "Remove this device?"
+msgid "Show \"Remove snapshots\"-buttons"
msgstr ""
-msgid "Are you sure you want to remove device \"{{deviceId}}\"?"
+msgid "Show All"
msgstr ""
-msgid "Devices are needed to control your studio hardware"
+msgid "Show Breaks as Segments"
msgstr ""
-msgid "No devices connected"
+msgid "Show config changes"
msgstr ""
-msgid "Playout gateway not connected"
+msgid "Show End"
msgstr ""
-msgid "None"
+msgid "Show entire On Air Segment"
msgstr ""
-msgid "Studio Name"
+msgid "Show Hotkeys"
msgstr ""
-msgid "Select Compatible Show Styles"
+msgid "Show Inspector"
msgstr ""
-msgid "Show style not set"
+msgid "Show issue"
msgstr ""
-msgid "Click to show available Show Styles"
+msgid "Show next break timing"
msgstr ""
-msgid "Frame Rate"
+msgid "Show panel as a timeline"
msgstr ""
-msgid "Enable \"Play from Anywhere\""
+msgid "Show part title"
msgstr ""
-msgid "Media Preview URL"
+msgid "Show Piece Icon Color"
msgstr ""
-msgid "Slack Webhook URLs"
+msgid "Show Rundown Name"
msgstr ""
-msgid "Supported Media Formats"
+msgid "Show segment name"
msgstr ""
-msgid "Supported Audio Formats"
+msgid "Show Style"
msgstr ""
-msgid "Force the Multi-gateway-mode"
+msgid "Show Style Base Name"
msgstr ""
-msgid "Multi-gateway-mode delay time"
+msgid "Show style not set"
msgstr ""
-msgid "Preserve contents of playing segment when unsynced"
+msgid "Show Style Variant"
msgstr ""
-msgid "Allow Rundowns to be reset while on-air"
+msgid "Show Style Variants"
msgstr ""
-msgid ""
-"Preserve position of segments when unsynced relative to other segments. "
-"Note: this has only been tested for the iNews gateway"
+msgid "Show Styles"
msgstr ""
-msgid "Add a playout device to the studio in order to edit the layer mappings"
+msgid "Show thumbnails next to list items"
msgstr ""
-msgid "This layer is now rerouted by an active Route Set: {{routeSets}}"
+msgid "ShowStyleBase not found!"
msgstr ""
-msgid "Remove this mapping?"
+msgid "Shuttle Keyboard (Contour ShuttleXpress / X-keys)"
msgstr ""
-msgid "Are you sure you want to remove mapping for layer \"{{mappingId}}\"?"
+msgid "Shuttle WebHID (Contour ShuttleXpress via browser)"
msgstr ""
-msgid "Layer ID"
+msgid "Skip Fix Up Step"
msgstr ""
-msgid "ID of the timeline-layer to map to some output"
+msgid "Slack Webhook URLs"
msgstr ""
-msgid "Layer Name"
+msgid "Smooth scrolling"
msgstr ""
-msgid "Human-readable name of the layer"
+msgid "Snapshot remove failed: {{errorMessage}}"
msgstr ""
-msgid "The type of device to use for the output"
+msgid "Snapshot restore failed: {{errorMessage}}"
msgstr ""
-msgid ""
-"ID of the device (corresponds to the device ID in the peripheralDevice "
-"settings)"
+msgid "Snapshot restored!"
msgstr ""
-msgid "Lookahead Mode"
+msgid "Sofie"
msgstr ""
-msgid "Lookahead Target Objects (Undefined = 1)"
+msgid "Sofie Automation"
msgstr ""
-msgid "Lookahead Maximum Search Distance (Undefined = {{limit}})"
+msgid "Sofie Automation Server"
msgstr ""
-msgid "Remove this Package Container?"
+msgid "Sofie Automation Server Core"
msgstr ""
-msgid "Are you sure you want to remove the Package Container \"{{containerId}}\"?"
+msgid "Sofie Automation Server Core will restart in {{time}}s..."
msgstr ""
-msgid "There are no Package Containers set up."
+msgid "Sofie Automation Server Core: {{name}}"
msgstr ""
-msgid "Package Container ID"
+msgid "Sofie logo to be displayed in the header. Requires a page refresh."
msgstr ""
-msgid "Display name/label of the Package Container"
+msgid "some invalid reason"
msgstr ""
-msgid "Playout devices which uses this package container"
+msgid "some message"
msgstr ""
-msgid "Select playout devices"
+msgid "some reason"
msgstr ""
-msgid "Select which playout devices are using this package container"
+msgid "something changed"
msgstr ""
-msgid "Accessors"
+msgid ""
+"Something went wrong when creating the snapshot. Please contact the system "
+"administrator if the problem persists."
msgstr ""
-msgid "Remove this Package Container Accessor?"
+msgid "Something went wrong, and it affected the output"
msgstr ""
-msgid ""
-"Are you sure you want to remove the Package Container Accessor "
-"\"{{accessorId}}\"?"
+msgid "Something went wrong, but it didn't affect the output"
msgstr ""
-msgid "There are no Accessors set up."
+msgid ""
+"Something went wrong, please contact the system administrator if the "
+"problem persists."
msgstr ""
-msgid "Accessor ID"
+msgid "Source Abbreviation"
msgstr ""
-msgid "Display name of the Package Container"
+msgid "Source Layer"
msgstr ""
-msgid "Accessor Type"
+msgid "Source layer cannot be reset as it has no default values"
msgstr ""
-msgid "Folder path"
+msgid "Source Layer Type"
msgstr ""
-msgid "File path to the folder of the local folder"
+msgid "Source Layer Types"
msgstr ""
-msgid "Resource Id"
+msgid "Source Layers"
msgstr ""
-msgid ""
-"(Optional) This could be the name of the computer on which the local folder "
-"is on"
+msgid "Source layers containing script"
msgstr ""
-msgid "Base URL"
+msgid "Source Name"
msgstr ""
-msgid "Base url to the resource (example: http://myserver/folder)"
+msgid "Source Type"
msgstr ""
-msgid "Network Id"
+msgid "Source/Output Layers"
msgstr ""
-msgid ""
-"(Optional) A name/identifier of the local network where the share is "
-"located, leave empty if globally accessible"
+msgid "Sources"
msgstr ""
-msgid "Folder path to shared folder"
+msgid "Space separated list of style class names to use when displaying the action"
msgstr ""
-msgid "UserName"
+msgid "Specify additional layers where at least one layer must have an active piece"
msgstr ""
-msgid "Username for athuentication"
+msgid "Speed control"
msgstr ""
-msgid "Password for authentication"
+msgid "Speed map"
msgstr ""
-msgid "(Optional) A name/identifier of the local network where the share is located"
+msgid "Speed map (forward, right trigger)"
msgstr ""
-msgid "Quantel gateway URL"
+msgid "Split Screen"
msgstr ""
-msgid "URL to the Quantel Gateway"
+msgid "Splits"
msgstr ""
-msgid "ISA URLs"
+msgid "Standalone Shelf"
msgstr ""
-msgid "URLs to the ISAs, in order of importance (comma separated)"
+msgid "Start Here!"
msgstr ""
-msgid "Zone ID"
+msgid "Start In"
msgstr ""
-msgid "Zone ID (default value: \"default\")"
+msgid "Start this AdLib"
msgstr ""
-msgid "Server ID"
+msgid "Start time is close"
msgstr ""
msgid ""
-"Server ID. For sources, this should generally be omitted (or set to 0) so "
-"clip-searches are zone-wide. If set, clip-searches are limited to that "
-"server."
+"Start with giving this browser configuration permissions by adding this to "
+"the URL: "
msgstr ""
-msgid "Quantel transformer URL"
+msgid "Started"
msgstr ""
-msgid "URL to the Quantel HTTP transformer"
+msgid "Starting AdLib"
msgstr ""
-msgid "Quantel FileFlow URL"
+msgid "Starting Bucket AdLib"
msgstr ""
-msgid "URL to the Quantel FileFlow Manager"
+msgid "Starting Global AdLib"
msgstr ""
-msgid "Quantel FileFlow Profile name"
+msgid "Starting Sticky Piece"
msgstr ""
-msgid "Profile name to be used by FileFlow when exporting the clips"
+msgid "State"
msgstr ""
-msgid "Allow Read access"
+msgid "State \"{{state}}\""
msgstr ""
-msgid "Allow Write access"
+msgid "Statistics"
msgstr ""
-msgid "Studio Settings"
+msgid "Status"
msgstr ""
-msgid "Package Containers to use for previews"
+msgid "Status Messages:"
msgstr ""
-msgid "Click to show available Package Containers"
+msgid "Sticky Piece"
msgstr ""
-msgid "Package Containers to use for thumbnails"
+msgid "Store Snapshot"
msgstr ""
-msgid "Package Containers"
+msgid "Studio"
msgstr ""
-msgid "Remove this Exclusivity Group?"
+msgid "Studio Baseline needs update: "
msgstr ""
-msgid ""
-"Are you sure you want to remove exclusivity group \"{{eGroupName}}\"?\n"
-"Route Sets assigned to this group will be reset to no group."
+msgid "Studio Labels"
msgstr ""
-msgid "Remove this Route from this Route Set?"
+msgid "Studio Name"
msgstr ""
-msgid ""
-"Are you sure you want to remove the Route from \"{{sourceLayerId}}\" to "
-"\"{{newLayerId}}\"?"
+msgid "Studio not found!"
msgstr ""
-msgid "Remove this Route Set?"
+msgid "Studio Screen Graphics"
msgstr ""
-msgid "Are you sure you want to remove the Route Set \"{{routeId}}\"?"
+msgid "Studio Settings"
msgstr ""
-msgid "Routes"
+msgid "Studio Snapshot"
msgstr ""
-msgid "There are no routes set up yet"
+msgid "Studios"
msgstr ""
-msgid "Original Layer"
+msgid "Style class names"
msgstr ""
-msgid "New Layer"
+msgid "Subtract"
msgstr ""
-msgid "Route Type"
+msgid "Successfully restored snapshot"
msgstr ""
-msgid "Source Layer not found"
+msgid "Successfully stored snapshot"
msgstr ""
-msgid "There are no exclusivity groups set up."
+msgid "Support Panel"
msgstr ""
-msgid "Exclusivity Group ID"
+msgid "Supported Audio Formats"
msgstr ""
-msgid "Exclusivity Group Name"
+msgid "Supported Media Formats"
msgstr ""
-msgid "Display name of the Exclusivity Group"
+msgid "Switch Route Set"
msgstr ""
-msgid "Active"
+msgid "Switch Segment View Mode"
msgstr ""
-msgid "Not Active"
+msgid "Switch to List View"
msgstr ""
-msgid "Not defined"
+msgid "Switch to Storyboard View"
msgstr ""
-msgid "There are no Route Sets set up."
+msgid "Switch to Timeline View"
msgstr ""
-msgid "Route Set ID"
+msgid "Switchboard"
msgstr ""
-msgid "Is this Route Set currently active"
+msgid "Switchboard Panel"
msgstr ""
-msgid "Default State"
+msgid "Switching operating mode to {{mode}}"
msgstr ""
-msgid "The default state of this Route Set"
+msgid "Switching routing"
msgstr ""
-msgid "Route Set Name"
+msgid "System"
msgstr ""
-msgid "Display name of the Route Set"
+msgid "System has issues which need to be resolved"
msgstr ""
-msgid "If set, only one Route Set will be active per exclusivity group"
+msgid "System must have exactly one studio"
msgstr ""
-msgid "Behavior"
+msgid "System Status"
msgstr ""
-msgid "The way this Route Set should behave towards the user"
+msgid "System-wide"
msgstr ""
-msgid "Add a playout device to the studio in order to configure the route sets"
+msgid "System-wide Notification Message"
msgstr ""
-msgid ""
-"Controls for exposed Route Sets will be displayed to the producer within "
-"the Rundown View in the Switchboard."
+msgid "Table is not allowed to have `properties` defined"
msgstr ""
-msgid "Exclusivity Groups"
+msgid "Table is only allowed the wildcard `patternProperties`"
msgstr ""
-msgid "Remove indexes"
+msgid "Tables are not supported here"
msgstr ""
-msgid "This will remove {{indexCount}} old indexes, do you want to continue?"
+msgid "Tag"
msgstr ""
-msgid "{{indexCount}} indexes was removed."
+msgid "Tags must contain"
msgstr ""
-msgid "Installation name"
+msgid "Take"
msgstr ""
-msgid "This name will be shown in the title bar of the window"
+msgid "Take a Full System Snapshot"
msgstr ""
-msgid "Logging level"
+msgid "Take a Snapshot"
msgstr ""
-msgid "This affects how much is logged to the console on the server"
+msgid "Take a Snapshot for studio \"{{studioName}}\" only"
msgstr ""
-msgid "System-wide Notification Message"
+msgid "Take and Download Memory Heap Snapshot"
msgstr ""
-msgid "Message"
+msgid "Take System Snapshot"
msgstr ""
-msgid "Enabled"
+msgid "Take System Snapshot failed: {{errorMessage}}"
msgstr ""
-msgid "Edit Support Panel"
+msgid "Taking Piece"
msgstr ""
-msgid "HTML that will be shown in the Support Panel"
+msgid "Technical reason: {{reason}}"
msgstr ""
-msgid "Application Performance Monitoring"
+msgid "test"
msgstr ""
-msgid "APM Enabled"
+msgid "Test ERROR message"
msgstr ""
-msgid "APM Transaction Sample Rate"
+msgid "Test Info message"
msgstr ""
-msgid ""
-"How many of the transactions to monitor. Set to -1 to log nothing (max "
-"performance), 0.5 to log 50% of the transactions, 1 to log all transactions"
+msgid "test partInstance"
msgstr ""
-msgid "Note: Core needs to be restarted to apply these settings"
+msgid "test pieceInstance"
msgstr ""
-msgid "Monitor blocked thread"
+msgid "test playlist"
msgstr ""
-msgid "Enable"
+msgid "test rundown"
msgstr ""
-msgid ""
-"Enables internal monitoring of blocked main thread. Logs when there is an "
-"issue, but (unverified) might cause issues in itself."
+msgid "Test test"
msgstr ""
-msgid "Cron jobs"
+msgid "Test Tools"
msgstr ""
-msgid "Enable CasparCG restart job"
+msgid "test2"
msgstr ""
-msgid "Cleanup"
+msgid "Text"
msgstr ""
-msgid "Cleanup old database indexes"
+msgid "Text to show above countdown to end of show"
msgstr ""
-msgid "Cleanup old data"
+msgid "Text to show above countdown to next break"
msgstr ""
-msgid "Disable CasparCG restart job"
+msgid "Text to show above show end time"
msgstr ""
-msgid "Enable automatic storage of Rundown Playlist snapshots periodically"
+msgid "Text to show above show start time"
msgstr ""
-msgid "Filter: If set, only store snapshots for certain rundowns"
+msgid ""
+"The config UI is now driven by manifests fed by the device. This device "
+"needs updating to provide the configManifest to be configurable"
msgstr ""
-msgid ""
-"(Comma separated list. Empty - will store snapshots of all Rundown "
-"Playlists)"
+msgid "The following parts no longer exist in {{nrcs}}: {{partNames}}"
msgstr ""
-msgid "Error when checking for cleaning up"
+msgid "The migration can be completed automatically."
msgstr ""
-msgid "Remove old data from database"
+msgid ""
+"The migration consists of several phases, you will get more options after "
+"you've this migration"
msgstr ""
-msgid "There are {{count}} documents that can be removed, do you want to continue?"
+msgid "The migration was completed successfully!"
msgstr ""
-msgid "Documents to be removed:"
+msgid "The old data was removed."
msgstr ""
-msgid "Retry"
+msgid ""
+"The planned end time has passed, are you sure you want to activate this "
+"Rundown?"
msgstr ""
-msgid "Remove old data"
+msgid "The progress of all steps"
msgstr ""
-msgid "The old data was removed."
+msgid "The progress of steps required for playout"
msgstr ""
-msgid "Failed to check status."
+msgid ""
+"The rundown \"{{rundownName}}\" is not published or activated in "
+"{{nrcsName}}! No data updates will currently come through."
msgstr ""
-msgid "Apply blueprint upgrades"
+msgid "The rundown can not be reset while it is active"
msgstr ""
-msgid "Upgrade config for {{name}}"
+msgid ""
+"The Rundown was attempted to be moved out of the Playlist when it was on "
+"Air. Move it back and try again later."
msgstr ""
-msgid "Config looks good"
+msgid ""
+"The rundown you are trying to execute a take on is inactive, would you like "
+"to activate this rundown?"
msgstr ""
-msgid "Apply"
+msgid ""
+"The rundown: \"{{rundownName}}\" will need to be deactivated in order to "
+"activate this one.\n"
+"\n"
+"Are you sure you want to activate this one anyway?"
msgstr ""
-msgid "Ignore and apply"
+msgid ""
+"The segment duration in the segment header always displays the planned "
+"duration instead of acting as a counter"
msgstr ""
-msgid "Config for {{name}} upgraded successfully"
+msgid "The selected part cannot be played"
msgstr ""
-msgid "Config for {{name}} upgraded failed"
+msgid "The selected part does not exist"
msgstr ""
-msgid "Failed to validate config"
+msgid ""
+"The system configuration has been changed since importing this rundown. It "
+"might not run correctly"
msgstr ""
-msgid "No changes"
+msgid "The type of device to use for the output"
msgstr ""
-msgid "Dismiss"
+msgid "The type of mapping to use"
msgstr ""
-msgid "Unable to upgrade"
+msgid "The way this Route Set should behave towards the user"
msgstr ""
-msgid "Upgrade required"
+msgid "Then, run the migrations script:"
msgstr ""
-msgid "Show config changes"
+msgid "There are no AB Playout devices set up yet"
msgstr ""
-msgid "Validate Config"
+msgid "There are no Accessors set up."
msgstr ""
-msgid "Last {{layerName}}"
+msgid "There are no active rundowns."
msgstr ""
-msgid "Clear {{layerName}}"
+msgid "There are no exclusivity groups set up."
msgstr ""
-msgid "Search..."
+msgid "There are no filters set up yet"
msgstr ""
msgid ""
-"Are you sure you want to deactivate this Rundown\n"
-"(This will clear the outputs)"
+"There are no Playout Gateways connected and attached to this studio. Please "
+"contact the system administrator to start the Playout Gateway."
msgstr ""
-msgid "Successfully stored snapshot"
+msgid "There are no Route Sets set up."
msgstr ""
-msgid "End Words"
+msgid "There are no routes set up yet"
msgstr ""
-msgid "Global AdLib"
+msgid "There are no rundowns ingested into Sofie."
msgstr ""
-msgid "AdLib does not provide any options"
+msgid "There are no sub-devices for this gateway"
msgstr ""
-msgid "Execute"
+msgid "There is an unknown problem with the part."
msgstr ""
-msgid "Save to Bucket"
+msgid "There is an unspecified problem with the source."
msgstr ""
-msgid "Reveal in Shelf"
+msgid "There is no rundown active in this studio."
msgstr ""
-msgid "Edit in Nora"
+msgid ""
+"There was an error when troubleshooting the device: \"{{deviceName}}\": "
+"{{errorMessage}}"
msgstr ""
-msgid "Current Part"
+msgid "There was an error: {{error}}"
msgstr ""
-msgid "Next Part"
+msgid "This action has an invalid combination of filters"
msgstr ""
-msgid "Part Count Down"
+msgid "This affects how much is logged to the console on the server"
msgstr ""
-msgid "Part Count Up"
+msgid "This blueprint has not provided a valid config schema"
msgstr ""
-msgid "Until end of rundown"
+msgid "This Blueprint is not being used by any Show Style"
msgstr ""
-msgid "New Bucket"
+msgid "This Blueprint is not compatible with any Studio"
msgstr ""
-msgid "Are you sure you want to delete this AdLib?"
+msgid "This clip ends with black frames after {{seconds}} seconds"
msgstr ""
-msgid "Are you sure you want to delete this Bucket?"
+msgid "This clip ends with freeze frames after {{seconds}} seconds"
msgstr ""
-msgid "Are you sure you want to empty (remove all adlibs inside) this Bucket?"
+msgid "This could leave the configuration in a broken state"
msgstr ""
-msgid "Current Segment"
+msgid "This enables or disables buckets in the UI - enabled is the default behavior"
msgstr ""
-msgid "Next Segment"
+msgid ""
+"This enables or disables the evaluationform in the UI - enabled is the "
+"default behavior"
msgstr ""
-msgid "Segment Count Down"
+msgid "This feature enables the use of the Properties Panel and the Edit Mode"
msgstr ""
-msgid "Segment Count Up"
+msgid "This has only been tested for the iNews gateway"
msgstr ""
-msgid "Start this AdLib"
+msgid "This is not in it's normal setting"
+msgstr ""
+
+msgid ""
+"This migration consists of {{stepCount}} steps ({{ignoredStepCount}} steps "
+"are ignored)."
msgstr ""
-msgid "Queue this AdLib"
+msgid "This must be assigned to a device to be able to edit the settings"
msgstr ""
-msgid "Inspect this AdLib"
+msgid "This name will be shown in the title bar of the window"
msgstr ""
-msgid "Rename this AdLib"
+msgid "This playlist is empty"
msgstr ""
-msgid "Delete this AdLib"
+msgid ""
+"This requires the blueprints to implement the "
+"`generateAdlibTestingIngestRundown` method"
msgstr ""
-msgid "Empty this Bucket"
+msgid "This rundown has been unpublished from Sofie."
msgstr ""
-msgid "Rename this Bucket"
+msgid "This rundown is currently active"
msgstr ""
-msgid "Delete this Bucket"
+msgid "This rundown is now active. Are you sure you want to exit this screen?"
msgstr ""
-msgid "Create new Bucket"
+msgid "This rundown will loop indefinitely"
msgstr ""
-msgid "AdLib"
+msgid "This Show Style is not compatible with any Studio"
msgstr ""
-msgid "Shortcuts"
+msgid "This step is required for playout"
msgstr ""
-msgid "Show Style Variant"
+msgid "This studio doesn't exist."
msgstr ""
-msgid "Local Time"
+msgid "This will remove {{indexCount}} old indexes, do you want to continue?"
msgstr ""
-msgid "System"
+msgid "Time from platform user event to Action received by Core"
msgstr ""
-msgid "Media"
+msgid "Time since planned end"
msgstr ""
-msgid "Packages"
+msgid "Time since rehearsal end"
msgstr ""
-msgid "Messages"
+msgid "Time to planned end"
msgstr ""
-msgid "User Log"
+msgid "Time to planned start"
msgstr ""
-msgid "Evaluations"
+msgid "Time to rehearsal end"
msgstr ""
-msgid "Debug State"
+msgid "Timeline"
msgstr ""
-msgid "Timestamp"
+msgid "Timeline Datastore"
msgstr ""
-msgid "User Name"
+msgid "Times"
msgstr ""
-msgid "Answers"
+msgid "Timestamp"
msgstr ""
-msgid "Message Queue"
+msgid "To inspect the memory heap snapshot, use Chrome DevTools"
msgstr ""
-msgid "Queued Messages"
+msgid "Today"
msgstr ""
-msgid "Sent Messages"
+msgid "Toggle"
msgstr ""
-msgid "File Copy"
+msgid "Toggle AdLibs on single mouse click"
msgstr ""
-msgid "File Delete"
+msgid "Toggle Shelf"
msgstr ""
-msgid "Check file size"
+msgid "Toggle Support Panel"
msgstr ""
-msgid "Scan File"
+msgid "Toggled Label"
msgstr ""
-msgid "Generate Thumbnail"
+msgid "Tomorrow"
msgstr ""
-msgid "Generate Preview"
+msgid "Tools"
msgstr ""
-msgid "Unknown action: {{action}}"
+msgid "Top"
msgstr ""
-msgid "Done"
+msgid "Transition"
msgstr ""
-msgid "Failed"
+msgid "Treat as Main content"
msgstr ""
-msgid "Working, Media Available"
+msgid "Trigger dead zone"
msgstr ""
-msgid "Working"
+msgid "Trigger Mode"
msgstr ""
-msgid "Pending"
+msgid "Triggered Actions failed to upload: {{errorMessage}}"
msgstr ""
-msgid "Blocked"
+msgid "Triggered Actions uploaded successfully."
msgstr ""
-msgid "Canceled"
+msgid "Trim \"{{name}}\""
msgstr ""
-msgid "Idle"
+msgid "Trimmed successfully."
msgstr ""
-msgid "Skipped"
+msgid "Trimming this clip has failed due to an error: {{error}}."
msgstr ""
-msgid "Step progress: {{progress}}"
+msgid ""
+"Trimming this clip has timed out. It's possible that the story is currently "
+"locked for writing in {{nrcsName}} and will eventually be updated. Make "
+"sure that the story is not being edited by other users."
msgstr ""
-msgid "Processing"
+msgid ""
+"Trimming this clip is taking longer than expected. It's possible that the "
+"story is locked for writing in {{nrcsName}}."
msgstr ""
-msgid "Unknown: {{status}}"
+msgid "Troubleshoot"
msgstr ""
-msgid "Collapse"
+msgid "TSR"
msgstr ""
-msgid "Details"
+msgid "Type"
msgstr ""
-msgid "Abort"
+msgid "Unable to check the system configuration for changes"
msgstr ""
-msgid "Prioritize"
+msgid "Unable to upgrade"
msgstr ""
-msgid "Media Transfer Status"
+msgid "Unassign"
msgstr ""
-msgid "Abort All"
+msgid "Unconfigured"
msgstr ""
-msgid "Restart All"
+msgid "Under"
msgstr ""
-msgid "Unknown Package \"{{packageId}}\""
+msgid "Undo"
msgstr ""
-msgid "Package Status"
+msgid "Undo Disable the next element"
msgstr ""
-msgid "Package container status"
+msgid "Undo Hold"
msgstr ""
-msgid "Id"
+msgid "Unknown"
msgstr ""
-msgid "Work status"
+msgid "Unknown action"
msgstr ""
-msgid "Restart All jobs"
+msgid "Unknown error"
msgstr ""
-msgid "Created"
+msgid "Unknown Layer"
msgstr ""
-msgid "Ready"
+msgid "Unknown Package \"{{packageId}}\""
msgstr ""
-msgid "The progress of steps required for playout"
+msgid "Unnamed blueprint"
msgstr ""
-msgid "The progress of all steps"
+msgid "Unnamed Show Style"
msgstr ""
-msgid "This step is required for playout"
+msgid "Unnamed Studio"
msgstr ""
-msgid "Work description"
+msgid "Unnamed variant"
msgstr ""
-msgid "Work status reason"
+msgid "Unsupported array type \"{{ type }}\""
msgstr ""
-msgid "Technical reason: {{reason}}"
+msgid "Unsupported field type \"{{ type }}\""
msgstr ""
-msgid "Previous work status reasons"
+msgid "Unsyncing Rundown"
msgstr ""
-msgid "Priority"
+msgid "Until"
msgstr ""
-msgid "Not Connected"
+msgid "Until end of rundown"
msgstr ""
-msgid "MOS Gateway"
+msgid "Until End of Rundown"
msgstr ""
-msgid "Play-out Gateway"
+msgid "Until end of segment"
msgstr ""
-msgid "Media Manager"
+msgid "Until End of Segment"
msgstr ""
-msgid "Unknown Device"
+msgid "Until end of showstyle"
msgstr ""
-msgid "Executed {{actionName}} on device \"{{deviceName}}\": {{response}}"
+msgid "Until End of Showstyle"
msgstr ""
-msgid "Executed {{actionName}} on device \"{{deviceName}}\"..."
+msgid "Until next rundown"
msgstr ""
-msgid ""
-"Failed to execute {{actionName}} on device: \"{{deviceName}}\": "
-"{{errorMessage}}"
+msgid "Until Next Rundown"
msgstr ""
-msgid "Do you want to execute {{actionName}}? This may the disrupt the output"
+msgid "Until next segment"
msgstr ""
-msgid "Last seen"
+msgid "Until Next Segment"
msgstr ""
-msgid "Connect some devices to the playout gateway"
+msgid "Until next take"
msgstr ""
-msgid "Are you sure you want to delete this device: \"{{deviceId}}\"?"
+msgid "Until Next Take"
msgstr ""
-msgid "Sofie Automation Server Core: {{name}}"
+msgid "Update"
msgstr ""
-msgid "Restart this system?"
+msgid "Update Blueprints?"
msgstr ""
-msgid ""
-"Are you sure you want to restart this Sofie Automation Server Core: "
-"{{name}}?"
+msgid "Updated"
msgstr ""
-msgid "Could not generate restart token!"
+msgid "Upgrade config for {{name}}"
msgstr ""
-msgid "Could not generate restart core: {{err}}"
+msgid "Upgrade Database"
msgstr ""
-msgid "Sofie Automation Server Core will restart in {{time}}s..."
+msgid "Upgrade required"
msgstr ""
-msgid "Execution times"
+msgid "Upgrade Status"
msgstr ""
-msgid "User ID"
+msgid "Upload"
msgstr ""
-msgid "Client IP"
+msgid "Upload a new blueprint"
msgstr ""
-msgid "Method"
+msgid "Upload a snapshot file"
msgstr ""
-msgid "Parameters"
+msgid ""
+"Upload a snapshot file (restores additional info not directly related to a "
+"Playlist / Rundown, such as Packages, PackageWorkStatuses etc"
msgstr ""
-msgid "Time from platform user event to Action received by Core"
+msgid "Upload Blueprints"
msgstr ""
-msgid "GUI"
+msgid "Upload Layout?"
msgstr ""
-msgid "Core + Worker processing time"
+msgid "Upload Snapshot"
msgstr ""
-msgid "Core"
+msgid "Upload Snapshot (for debugging)"
msgstr ""
-msgid "Worker"
+msgid "Upload stored Action Triggers"
msgstr ""
-msgid "Gateway"
+msgid "URL"
msgstr ""
-msgid "TSR"
+msgid "URL to the Quantel FileFlow Manager"
msgstr ""
-msgid "User Activity Log"
+msgid "URL to the Quantel Gateway"
msgstr ""
-msgid "in {{days}} days, {{hours}} h {{minutes}} min {{seconds}} s"
+msgid "URL to the Quantel HTTP transformer"
msgstr ""
-msgid "in {{hours}} h {{minutes}} min {{seconds}} s"
+msgid "URLs to the ISAs, in order of importance (comma separated)"
msgstr ""
-msgid "in {{minutes}} min {{seconds}} s"
+msgid "Use {{nrcsName}} order"
msgstr ""
-msgid "in {{seconds}} s"
+msgid "Use as default"
msgstr ""
-msgid "{{days}} days, {{hours}} h {{minutes}} min {{seconds}} s ago"
+msgid "Use color of primary piece as background of panel"
msgstr ""
-msgid "{{hours}} h {{minutes}} min {{seconds}} s ago"
+msgid "Use Trigger Mode"
msgstr ""
-msgid "{{minutes}} min {{seconds}} s ago"
+msgid "User Activity Log"
msgstr ""
-msgid "{{seconds}} s ago"
+msgid "User ID"
msgstr ""
-msgid "Next scheduled show"
+msgid "User Log"
msgstr ""
-msgid "Help & Support"
+msgid "User Name"
msgstr ""
-msgid "Disable hints by adding this to the URL:"
+msgid "Username for authentication"
msgstr ""
-msgid "Enable hints by adding this to the URL:"
+msgid "Validate and Apply Config"
msgstr ""
-msgid "More documentation available at:"
+msgid "Validation failed!"
msgstr ""
-msgid "Device Triggers"
+msgid "Value"
msgstr ""
-msgid "Timeline"
+msgid "Value between 0 and 1"
msgstr ""
-msgid "Timeline Datastore"
+msgid "Variants"
msgstr ""
-msgid "Mappings"
+msgid "version"
msgstr ""
-msgid "Routed Mappings"
+msgid "Version"
msgstr ""
-msgid "{{sourceLayer}} is missing a file path"
+msgid "Version for {{name}}: From {{fromVersion}} to {{toVersion}}"
msgstr ""
-msgid "{{sourceLayer}} is not yet ready on the playout system"
+msgid "View"
msgstr ""
-msgid "{{sourceLayer}} is being ingested"
+msgid "View Layout"
msgstr ""
-msgid "Source is missing"
+msgid "Waiting for action: {{actionName}}..."
msgstr ""
-msgid "Clip can't be played because it doesn't exist on the playout system"
+msgid "Waiting for gateway to generate URL..."
msgstr ""
-msgid "{{sourceLayer}} is transferring to the playout system"
+msgid "Warning"
msgstr ""
-msgid ""
-"{{sourceLayer}} is transferring to the playout system and cannot be "
-"played yet"
+msgid "Warnings"
msgstr ""
-msgid "{{sourceLayer}} is in an unknown state"
+msgid "Warnings During Migration"
msgstr ""
-msgid "{{sourceLayer}} doesn't have both audio & video"
+msgid "What type of bank"
msgstr ""
-msgid "{{sourceLayer}} has the wrong format: {{format}}"
+msgid "When"
msgstr ""
-msgid "{{sourceLayer}} has {{audioStreams}} audio streams"
+msgid "When disabled, any HOLD operations will be silently ignored"
msgstr ""
-msgid "Clip starts with {{frames}} black frames"
+msgid ""
+"When enabled, double clicking on certain pieces in the GUI will play them "
+"as adlibs"
msgstr ""
-msgid "This clip ends with black frames after {{seconds}} seconds"
+msgid ""
+"When enabled, this will override the piece content statuses to have no "
+"errors or warnings and display a mock preview. This should only be used for "
+"development!"
msgstr ""
-msgid "{{frames}} black frames detected within the clip"
+msgid "When set, resources are considered immutable, ie they will not change"
msgstr ""
-msgid "{{frames}} black frames detected in the clip"
+msgid "Whether to show countdown to next break"
msgstr ""
-msgid "Clip starts with {{frames}} freeze frames"
+msgid ""
+"While there are still breaks coming up in the show, hide the Expected End "
+"timers"
msgstr ""
-msgid "This clip ends with freeze frames after {{seconds}} seconds"
+msgid "Width"
msgstr ""
-msgid "{{frames}} freeze frames detected within the clip"
+msgid "Work description"
msgstr ""
-msgid "{{frames}} freeze frames detected in the clip"
+msgid "Work status"
msgstr ""
-msgid "Toggle Shelf"
+msgid "Work status reason"
msgstr ""
-msgid "Undo Hold"
+msgid "Work-in-progress"
msgstr ""
-msgid "Disable the next element"
+msgid "Worker"
msgstr ""
-msgid "Undo Disable the next element"
+msgid "WorkForce"
msgstr ""
-msgid "Move Next forwards"
+msgid "X"
msgstr ""
-msgid "Move Next to the following segment"
+msgid "Xbox Controller"
msgstr ""
-msgid "Move Next backwards"
+msgid "Y"
msgstr ""
-msgid "Move Next to the previous segment"
+msgid "Yes"
msgstr ""
-msgid "Rewind segments to start"
+msgid "Yes, Take and Download Memory Heap Snapshot"
msgstr ""
-msgid "Invalid blueprint: \"{{blueprintId}}\""
+msgid "Yesterday"
msgstr ""
msgid ""
-"Invalid config preset for blueprint: \"{{configPresetId}}\" "
-"({{blueprintId}})"
+"You are in rehearsal mode, the broadcast starts in less than 1 minute. Do "
+"you want to go into On-Air mode?"
msgstr ""
-msgid "Config has not been applied before"
+msgid "You need to run migrations to set the system up for operation."
msgstr ""
-msgid "Blueprint has been changed. From \"{{ oldValue }}\", to \"{{ newValue }}\""
+msgid "Your machine is offline and cannot connect to the {{platformName}}."
msgstr ""
-msgid ""
-"Blueprint config preset has been changed. From \"{{ oldValue }}\", to \"{{ "
-"newValue }}\""
+msgid "Your name"
msgstr ""
-msgid "Blueprint has a new version"
+msgid "Zone ID"
msgstr ""
-msgid "Blueprint config has changed"
+msgid "Zoom In"
msgstr ""
-msgid "Test Info message"
+msgid "Zoom Out"
msgstr ""
-msgid "Test ERROR message"
+msgctxt "one"
+msgid "{{count}} items"
msgstr ""
-msgid ""
-"Config value \"{{ name }}\" has changed. From \"{{ oldValue }}\", to \"{{ "
-"newValue }}\""
+msgctxt "one"
+msgid "There are {{count}} documents that can be removed, do you want to continue?"
msgstr ""
-msgctxt "°°°°°°plural"
-msgid "{{count}} rows°°°°°°"
+msgctxt "one"
+msgid "This layer is now rerouted by an active Route Set: {{routeSets}}"
msgstr ""
-msgctxt "°°°°°°plural"
-msgid "This layer is now rerouted by an active Route Set: {{routeSets}}°°°°°°"
+msgctxt "other"
+msgid "{{count}} items"
msgstr ""
-msgctxt "°°°°°°plural"
-msgid ""
-"There are {{count}} documents that can be removed, do you want to "
-"continue?°°°°°°"
+msgctxt "other"
+msgid "There are {{count}} documents that can be removed, do you want to continue?"
+msgstr ""
+
+msgctxt "other"
+msgid "This layer is now rerouted by an active Route Set: {{routeSets}}"
msgstr ""
diff --git a/meteor/i18n/nb.mo b/meteor/i18n/nb.mo
deleted file mode 100644
index 6f2e844d16a..00000000000
Binary files a/meteor/i18n/nb.mo and /dev/null differ
diff --git a/meteor/i18n/nb.po b/meteor/i18n/nb.po
index fc71d132ee3..635e55c84e3 100644
--- a/meteor/i18n/nb.po
+++ b/meteor/i18n/nb.po
@@ -1,2883 +1,3365 @@
msgid ""
msgstr ""
"Project-Id-Version: i18next-conv\n"
-"POT-Creation-Date: 2022-08-02T12:04:21.289Z\n"
-"PO-Revision-Date: 2022-08-02 14:14+0200\n"
-"Last-Translator: \n"
-"Language-Team: \n"
-"Language: nb\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
+"mime-version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 3.1.1\n"
-
-msgid "Account Page"
-msgstr "Brukerkontoside"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"POT-Creation-Date: 2026-04-14T14:17:21.170Z\n"
+"PO-Revision-Date: 2026-04-14T14:17:21.170Z\n"
+"Language: nb\n"
-msgid "Name:"
-msgstr "Navn:"
+msgid " The index of the Atem media/clip banks"
+msgstr ""
-msgid "Email:"
-msgstr "E-post:"
+msgid "({{time}} ago)"
+msgstr "(for {{time}} siden)"
-msgid "Old Password"
-msgstr "Gammelt passord"
+msgid "({{timecode}})"
+msgstr "({{timecode}})"
-msgid "New Password"
-msgstr "Nytt passord"
+msgid ""
+"(Comma separated list. Empty - will store snapshots of all Rundown "
+"Playlists)"
+msgstr ""
-msgid "Save Changes"
-msgstr "Lagre endringer"
+msgid "(Default)"
+msgstr ""
-msgid "Edit Account"
-msgstr "Endre brukerkonto"
+msgid "(in: {{time}})"
+msgstr "(om: {{time}})"
-msgid "Organization"
-msgstr "Organisasjon"
+msgid "(Optional) A name/identifier of the local network where the Atem is located"
+msgstr ""
-msgid "User roles in organization"
-msgstr "Brukerroller i organisasjon"
+msgid "(Optional) A name/identifier of the local network where the share is located"
+msgstr ""
+"(Valgfri) Et navn/en identifikator for det lokale nettverket hvor den delte "
+"mappen er lokalisert"
-msgid "Studio"
-msgstr "Studio"
+msgid ""
+"(Optional) A name/identifier of the local network where the share is "
+"located, leave empty if globally accessible"
+msgstr ""
+"(Valgfri) Et navn/en identifikator for det lokale nettverket hvor den delte "
+"mappen er lokalisert, la være tom dersom den er globalt tilgjengelig"
-msgid "Configurator"
-msgstr "Configurator"
+msgid "(Optional) This could be the name of the compute"
+msgstr ""
-msgid "Developer"
-msgstr "Developer"
+msgid ""
+"(Optional) This could be the name of the computer on which the local folder "
+"is on"
+msgstr "(Valgfri) Dette kan være navnet til datamaskinen som den lokale mappen er på"
-msgid "Admin"
-msgstr "Admin"
+msgid "(Unknown playlist)"
+msgstr "(Ukjent kjøreplanliste)"
-msgid "Remove Self"
-msgstr "Fjern denne brukeren"
+msgid "(Unknown rundown)"
+msgstr "(Ukjent kjøreplan)"
-msgid "Email Address"
-msgstr "E-postadresse"
+msgid ""
+"(what happened and when, what should have happened, what could have "
+"triggered the problems, etcetera...)"
+msgstr ""
-msgid "Password"
-msgstr "Passord"
+msgid "{{actionName}} failed! More information can be found in the system log."
+msgstr ""
-msgid "Sign in"
-msgstr "Logg inn"
+msgid "{{currentRundownName}} - {{rundownPlaylistName}}"
+msgstr "{{currentRundownName}} - {{rundownPlaylistName}}"
-msgid "Create New Account"
-msgstr "Opprett ny brukerkonto"
+msgid "{{currentRundownName}} - {{rundownPlaylistName}} (Looping)"
+msgstr "{{currentRundownName}} - {{rundownPlaylistName}} (Looper)"
-msgid "Lost password?"
-msgstr "Glemt passord?"
+msgid "{{days}} days, {{hours}} h {{minutes}} min {{seconds}} s ago"
+msgstr "for {{days}} dager, {{hours}} t {{minutes}} min {{seconds}} s siden"
-msgid "Send reset email"
-msgstr "Send e-post for å nullstille"
+msgid "{{frames}} black frames detected in the clip"
+msgstr ""
-msgid "Go back"
-msgstr "Tilbake"
+msgid "{{frames}} black frames detected within the clip"
+msgstr ""
-msgid "Password must be atleast 5 characters long"
-msgstr "Passord må være minst 5 tegn langt"
+msgid "{{frames}} freeze frames detected in the clip"
+msgstr ""
-msgid "Enter your new password"
-msgstr "Skriv inn ditt nye passord"
+msgid "{{frames}} freeze frames detected within the clip"
+msgstr ""
-msgid "Set new password"
-msgstr "Lagre nytt passord"
+msgid "{{hours}} h {{minutes}} min {{seconds}} s ago"
+msgstr "for {{hours}} t {{minutes}} min {{seconds}} s siden"
-msgid "Your Account"
-msgstr "Din brukerkonto"
+msgid "{{indexCount}} indexes was removed."
+msgstr "{{indexCount}} indexer ble fjernet."
-msgid "About Your Organization"
-msgstr "Om din oranisasjon"
+msgid "{{minutes}} min {{seconds}} s ago"
+msgstr "for {{minutes}} min {{seconds}} s siden"
-msgid "We are mainly"
-msgstr "Vi er hovedsaklig"
+msgid "{{nrcsName}} Connection"
+msgstr "{{nrcsName}}-tilkobling"
-msgid "Areas"
-msgstr "Områder"
+msgid "{{prevStatements}} and {{finalStatement}}"
+msgstr ""
-msgid "Invite User"
-msgstr "Inviter brukar"
+msgid "{{prevStatements}} or {{finalStatement}}"
+msgstr ""
-msgid "New User's Email"
-msgstr "Ny brukers e-post"
+msgid ""
+"{{reason}} {{sourceLayer}} exists, but is not yet ready on the playout "
+"system"
+msgstr ""
-msgid "New User's Name"
-msgstr "Ny brukers navn"
+msgid "{{rundownPlaylistName}} (Looping)"
+msgstr "{{currentRundownName}} - {{rundownPlaylistName}} (Looper)"
-msgid "Create New User & Send Enrollment Email"
-msgstr "Opprett ny bruker og send e-post for innmelding"
+msgid "{{seconds}} s ago"
+msgstr "for {{seconds}} s siden"
-msgid "Users in organization"
-msgstr "Brukere i organisasjonen"
+msgid "{{showStyleVariant}} – {{showStyleBase}}"
+msgstr "{{showStyleVariant}} – {{showStyleBase}}"
-msgid "Return to list"
-msgstr "Gå tilbake til listen"
+msgid "{{sourceLayer}} can't be found on the playout system"
+msgstr ""
-msgid "There is no rundown active in this studio."
-msgstr "Fant ingen aktive kjøreplaner for dette studioet."
+msgid "{{sourceLayer}} doesn't have both audio & video"
+msgstr "{{sourceLayer}} har ikke lyd og/eller bilde"
-msgid "This studio doesn't exist."
-msgstr "Dette studioet finnes ikke."
+msgid "{{sourceLayer}} has {{audioStreams}} audio streams"
+msgstr "{{sourceLayer}} har {{audioStreams}} lydstrømmer"
-msgid "There are no active rundowns."
-msgstr "Fant ingen aktive kjøreplaner."
+msgid "{{sourceLayer}} has the wrong format: {{format}}"
+msgstr "{{sourceLayer}}-formatet er ikke støttet: {{format}}"
-msgid "Evaluation"
-msgstr "Evaluering"
+msgid "{{sourceLayer}} has unsupported source: {{containerLabels}}"
+msgstr ""
-msgid "Please take a minute to fill in this form."
-msgstr "Vennligst fyll ut dette skjemaet."
+msgid "{{sourceLayer}} is being ingested"
+msgstr "{{sourceLayer}} blir prosessert"
msgid ""
-"Be aware that while filling out the form keyboard and streamdeck commands "
-"will not be executed!"
-msgstr "OBS! Du kan ikke utføre Sofie-kommandoer mens du skriver evaluering!"
+"{{sourceLayer}} is in a placeholder state for an unknown workflow-defined "
+"reason"
+msgstr ""
-msgid "Did you have any problems with the broadcast?"
-msgstr "Hadde du noen problemer med sendingen?"
+msgid "{{sourceLayer}} is in an unknown state: \"{{status}}\""
+msgstr ""
-msgid ""
-"Please explain the problems you experienced (what happened and when, what "
-"should have happened, what could have triggered the problems, etcetera...)"
+msgid "{{sourceLayer}} is missing"
msgstr ""
-"Vennligst forklar problemene du opplevde (hva skjedde og når skjedde det, "
-"hva skulle skjedd, hva kan ha utløst problemene, o.s.v.)"
-msgid "Your name"
-msgstr "Ditt navn"
+msgid "{{sourceLayer}} is missing a file path"
+msgstr "{{sourceLayer}} kan ikke spilles av fordi filnavnet mangler"
+
+msgid "{{sourceLayer}} is not yet ready on the playout system"
+msgstr "{{sourceLayer}} er ennå ikke klar til å spilles ut fra avviklingsserver"
-msgid "Save message"
-msgstr "Lagre melding"
+msgid "{{sourceLayer}} is transferring to the playout system"
+msgstr "{{sourceLayer}} overføres til avviklingsserver"
-msgid "Save message and Deactivate Rundown"
-msgstr "Send evalueringen og deaktiver kjøreplanen"
+msgid ""
+"{{sourceLayer}} is transferring to the playout system but cannot be played "
+"yet"
+msgstr ""
-msgid "No problems"
-msgstr "Ingen problemer"
+msgid "{{studioName}}: Active Rundown"
+msgstr ""
-msgid "Something went wrong, but it didn't affect the output"
-msgstr "Noe gikk galt, men det påvirket ikke sendingen"
+msgid "{{studioName}}: Presenter screen"
+msgstr ""
-msgid "Something went wrong, and it affected the output"
-msgstr "Noe gikk galt, og det påvirket sendingen"
+msgid "{{studioName}}: Prompter"
+msgstr ""
-msgid "Are you sure?"
-msgstr "Er du sikker?"
+msgid "14 = 7 lines, 20 = 5 lines"
+msgstr ""
-msgid ""
-"Trimming this clip has timed out. It's possible that the story is currently "
-"locked for writing in {{nrcsName}} and will eventually be updated. Make sure "
-"that the story is not being edited by other users."
+msgid "A device must be assigned to the config to edit the settings"
msgstr ""
-"Endring av inn-/utpunkt for dette klippet tar lang tid. Det er mulig manuset "
-"i er låst i {{nrcsName}} og at inn-/utpunkt endres om litt. Forsikre deg om "
-"at manuset ikke blir redigert av andre brukere."
-msgid "Trimming this clip has failed due to an error: {{error}}."
-msgstr "Endring av inn-/utpunkt for dette klippet feilet: {{error}}."
+msgid ""
+"A Full System Snapshot contains all system settings (studios, showstyles, "
+"blueprints, devices, etc.)"
+msgstr ""
+"Et systemsnapshot inneholder alle systeminnstillinger (studio, showstyles, "
+"blueprints, enheter o.s.v.)"
-msgid "Trimmed succesfully."
-msgstr "Endring av inn-/utpunkt var vellykket."
+msgid "a second"
+msgstr ""
msgid ""
-"Trimming this clip is taking longer than expected. It's possible that the "
-"story is locked for writing in {{nrcsName}}."
+"A snapshot of the current Running Order has been created for "
+"troubleshooting."
+msgstr "Et snapshot av den gjeldende kjøreplanen har blitt opprettet for feilsøking."
+
+msgid "A Studio Snapshot contains all system settings related to that studio"
+msgstr "Et studiosnapshot inneholder alle systeminnstillinger tilknyttet et studio"
+
+msgid "AB Channel Display"
msgstr ""
-"Endring av inn-/utpunkt for dette klippet tek meir tid enn forventa. Det er "
-"mogleg manuset er låst for redigering i {{nrcsName}}."
-msgid "Trim \"{{name}}\""
-msgstr "Trim \"{{name}}\""
+msgid "AB Playout devices"
+msgstr ""
-msgid "OK"
-msgstr "OK"
+msgid "AB Resolver Channel Display"
+msgstr ""
-msgid "Cancel"
+msgid "Abort"
msgstr "Avbryt"
-msgid "Remove in-trimming"
-msgstr "Nullstill innpunkt"
+msgid "Aborting all Media Workflows"
+msgstr ""
-msgid "In"
-msgstr "Inn"
+msgid "Aborting Media Workflow"
+msgstr ""
-msgid "Remove all trimming"
-msgstr "Nullstill inn- og utpunkt"
+msgid "Accessor ID"
+msgstr "Aksessor-id"
-msgid "Duration"
-msgstr "Varighet"
+msgid "Accessor Type"
+msgstr "Aksessortype"
-msgid "Remove out-trimming"
-msgstr "Nullstill utpunkt"
+msgid "Accessors"
+msgstr "Aksessorer"
-msgid "Out"
-msgstr "Ut"
+msgid "Action"
+msgstr "Handling"
-msgid "Next"
-msgstr "Neste"
+msgid "Action {{actionName}} done!"
+msgstr ""
-msgid "Test test"
-msgstr "Test test"
+msgid "Action {{actionName}} failed: {{error}}"
+msgstr ""
-msgid "Until next take"
-msgstr "Til neste Take"
+msgid "Action Buttons"
+msgstr "Handlingsknapper"
-msgid "Until next segment"
-msgstr "Til neste segment"
+msgid "Action Triggers"
+msgstr "Handlingsutløsere"
-msgid "Until end of segment"
-msgstr "Til slutten av segment"
+msgid "Activate \"On Air\""
+msgstr ""
-msgid "Until next rundown"
-msgstr "Til neste kjøreplan"
+msgid "Activate \"Rehearsal\""
+msgstr ""
-msgid "Until end of showstyle"
-msgstr "Til slutten av showstyle"
+msgid "Activate (On-Air)"
+msgstr "Aktiver (gå ON AIR)"
-msgid "Script is empty"
-msgstr "Manuset er tomt"
+msgid "Activate (Rehearsal)"
+msgstr "Aktiver (testmodus)"
-msgid "Clip:"
-msgstr "Klipp:"
+msgid "Activate On Air"
+msgstr ""
-msgid "Home"
-msgstr "Hjem"
+msgid "Activate Rundown"
+msgstr "Aktiver kjøreplan"
-msgid "Rundowns"
-msgstr "Kjøreplaner"
+msgid "Activating Hold"
+msgstr ""
-msgid "Test Tools"
-msgstr "Testverktøy"
+msgid "Activating Rundown Playlist"
+msgstr ""
-msgid "Status"
-msgstr "Status"
+msgid "Active"
+msgstr "Aktiv"
-msgid "Settings"
-msgstr "Innstillinger"
+msgid "Active Rundown"
+msgstr ""
-msgid "Account"
-msgstr "Konto"
+msgid "Active Rundown View"
+msgstr ""
-msgid "Logout"
-msgstr "Logg ut"
+msgid "Ad-Lib"
+msgstr "Adlib"
-msgid "My name is {{name}}"
-msgstr "Mitt navn er {{name}}"
+msgid "Ad-Lib Action"
+msgstr "Adlib-handling"
-msgid "Operating Mode"
-msgstr "Styringsmodus"
+msgid "Add"
+msgstr "Legg til"
-msgid "Switching operating mode to {{mode}}"
-msgstr "Bytt til {{mode}}"
+msgid "Add {{filtersTitle}}"
+msgstr "Legg til {{filtersTitle}}"
-msgid "Prompter"
-msgstr "Prompter"
+msgid "Add a playout device to the studio in order to configure the route sets"
+msgstr ""
+"For å kunne redigere omkoblingsgrupper, må du legge til en playout-enhet "
+"til studio"
-msgid "End of script"
-msgstr "Slutt på manus"
+msgid "Add a playout device to the studio in order to edit the layer mappings"
+msgstr ""
+"For å kunne redigere lagmappinger, må du legge til en playout-enhet til "
+"studio"
-msgid "Could not get system status. Please consult system administrator."
-msgstr "Kan ikke innhente status for systemet. Kontakt systemadministrator."
+msgid "Add Action Trigger"
+msgstr ""
-msgid "There are no rundowns ingested into Sofie."
-msgstr "Det er ikke sendt kjøreplaner til Sofie."
+msgid "Add button"
+msgstr "Legg til knapp"
-msgid "Click on a rundown to control your studio"
-msgstr "Klikk på en kjøreplan for å kontrollere studioet ditt"
+msgid "Add filter"
+msgstr "Legg til filter"
-msgid "Rundown"
-msgstr "Kjøreplan"
+msgid "Add some source layers (e.g. Graphics) for your data to appear in rundowns"
+msgstr "Legg til kildelag (for eksempel Grafikk) for å vise dine data i kjøreplaner"
-msgid "Problems"
-msgstr "Problemer"
+msgid "AdLib"
+msgstr "Adlib"
-msgid "Show Style"
-msgstr "Showstyle"
+msgid "AdLib Actions are not supported in the current Rundown"
+msgstr ""
-msgid "On Air Start Time"
-msgstr "Sendestart"
+msgid "AdLib could not be found!"
+msgstr ""
-msgid "Expected End Time"
-msgstr "Forventet sendeslutt"
+msgid "AdLib filter"
+msgstr ""
-msgid "Last updated"
-msgstr "Sist oppdatert"
+msgid "Adlib Rank"
+msgstr "Adlib-rang"
-msgid "View Layout"
-msgstr "Vis layout"
+msgid "Adlib rundowns are not supported for this ShowStyle!"
+msgstr ""
-msgid "Today"
-msgstr "I dag"
+msgid "Adlib Testing"
+msgstr ""
-msgid "Yesterday"
-msgstr "I går"
+msgid "AdLib Testing"
+msgstr ""
-msgid "Tomorrow"
-msgstr "I morgen"
+msgid "AdLibs can be only placed in a currently playing part!"
+msgstr ""
-msgid "Last"
-msgstr "Forrige"
+msgid "AdLibs on this layer can be queued"
+msgstr "Adliber på dette laget kan cues"
-msgid "Getting Started"
-msgstr "Kom i gang"
+msgid "All additional source layers must have active pieces"
+msgstr ""
-msgid ""
-"Start with giving this browser configuration permissions by adding this to "
-"the URL: "
-msgstr "Først må du gå i konfigurasjonsmodus ved å legge dette til url-en: "
+msgid "All connections working correctly"
+msgstr "Alle tilkoblinger er OK"
-msgid "Start Here!"
-msgstr "Start her!"
+msgid "All devices working correctly"
+msgstr "Alle enheter fungerer som de skal"
-msgid "Then, run the migrations script:"
-msgstr "Kjør så migreringsprosedyren:"
+msgid "All is well, go get a"
+msgstr "Alt er greit, gå og hent deg en"
-msgid "Run Migrations to get set up"
-msgstr "Kjør migreringsprosedyrer for å sette opp"
+msgid "All Screens in a MultiViewer"
+msgstr ""
-msgid "Migrations"
-msgstr "Migrering"
+msgid "All steps"
+msgstr "Alle trinn"
-msgid "Documentation is available at"
-msgstr "Dokumentasjon er tilgjengelig på"
+msgid "Allow direct playing pieces"
+msgstr ""
-msgid "Use {{nrcsName}} order"
-msgstr "Bruk rekkefølge fra {{nrcsName}}"
+msgid "Allow disabling of Pieces"
+msgstr "Tillat deaktivering av elementer"
-msgid "Reset Sort Order"
-msgstr "Tilbakestill rekkefølge"
+msgid "Allow HOLD mode"
+msgstr ""
-msgid "Enable configuration mode by adding ?configure=1 to the address bar."
+msgid "Allow infinites from AdLib testing to persist"
msgstr ""
-"Aktiver konfigurasjonsmodus ved å legge til ?configure=1 på slutten av "
-"nettadressen."
-msgid "You need to run migrations to set the system up for operation."
-msgstr "Du må kjøre migrering for å klargjøre systemet for bruk."
+msgid "Allow Read access"
+msgstr "Tillat lesing"
-msgid "Drop Rundown here to move it out of its current Playlist"
-msgstr "Slipp kjøreplanen her for å flytte den ut av spillelisten"
+msgid "Allow Rundowns to be reset while on-air"
+msgstr "Tillat tilbakestilling av kjøreplaner som er on-air"
-msgid "Sofie Automation"
-msgstr "Sofie"
+msgid "Allow Write access"
+msgstr "Tillat skriving/lagring"
-msgid "version"
-msgstr "versjon"
+msgid "Also Require Source Layers"
+msgstr ""
-msgid "System Status"
-msgstr "Systemstatus"
+msgid "Amount of entries exceeds the limt of 10 000 items."
+msgstr ""
-msgid "System has issues which need to be resolved"
-msgstr "Systemet har problemer som må fikses"
+msgid "An error while performing the take, playout may be impacted"
+msgstr ""
-msgid "Status Messages:"
-msgstr "Statusmeldinger:"
+msgid "An error while setting the next Part, playout may be impacted"
+msgstr ""
-msgid "{{showStyleVariant}} – {{showStyleBase}}"
-msgstr "{{showStyleVariant}} – {{showStyleBase}}"
+msgid "An internal error occured!"
+msgstr ""
-msgid "Drag to reorder or move out of playlist"
-msgstr "Dra for å endre rekkefølge eller flytte ut av spillelisten"
+msgid "Another Rundown is Already Active!"
+msgstr "En annen kjøreplan er allerede aktiv!"
-msgid "This rundown is currently active"
-msgstr "Denne kjøreplanen er allerede aktiv"
+msgid "Answers"
+msgstr "Svar"
-msgid "Not set"
-msgstr "Ikke angitt"
+msgid ""
+"Any AB Playout devices here will only be active when this or another "
+"RouteSet that includes them is active"
+msgstr ""
-msgid "This rundown will loop indefinitely"
-msgstr "Denne kjøreplanen vil gå i en uendelig loop"
+msgid "APM Enabled"
+msgstr "AMP aktivert"
-msgid "({{timecode}})"
-msgstr "({{timecode}})"
+msgid "APM Transaction Sample Rate"
+msgstr "Prøvefrekvens for AMP-transaksjoner"
-msgid "Re-sync rundown data with {{nrcsName}}"
-msgstr "Ikke synkronisert med MOS/{{nrcsName}}"
+msgid "Append"
+msgstr "Legg til"
-msgid "Delete"
-msgstr "Slett"
+msgid "Append or Replace"
+msgstr "Legg til eller erstatt"
-msgid "Standalone Shelf"
-msgstr "Frittstående skuff"
+msgid "Append rows"
+msgstr ""
-msgid "Rundown & Shelf"
-msgstr "Kjøreplan & skuff"
+msgid "Application credentials"
+msgstr "Brukernavn/passord (Application Credentials)"
-msgid "Default"
-msgstr "Standard"
+msgid "Application Performance Monitoring"
+msgstr "Overvåkning av applikasjonsytelse (AMP)"
-msgid "Delete rundown?"
-msgstr "Slette kjøreplanen?"
+msgid "Apply"
+msgstr ""
-msgid "Are you sure you want to delete the \"{{name}}\" rundown?"
-msgstr "Er du sikker på at du vil slette kjøreplanen \"{{name}}\"?"
+msgid "Apply blueprint upgrades"
+msgstr ""
-msgid "Please note: This action is irreversible!"
-msgstr "Merk: Denne handlingen kan ikke angres!"
+msgid "Apply Config"
+msgstr ""
-msgid "Re-Sync rundown?"
-msgstr "Synkroniser kjøreplanen med ENPS?"
+msgid "Are you sure you want to activate Rehearsal Mode?"
+msgstr "Er du sikker på at du vil gå i testmodus?"
-msgid "Re-Sync"
-msgstr "Synkroniser"
+msgid ""
+"Are you sure you want to deactivate this Rundown\n"
+"(This will clear the outputs)"
+msgstr ""
+"Er du sikker på at du vil deaktivere denne kjøreplanen?\n"
+"(Dette vil nullstille alle utganger.)"
-msgid "Are you sure you want to re-sync the \"{{name}}\" rundown?"
+msgid ""
+"Are you sure you want to deactivate this rundown?\n"
+"(This will clear the outputs.)"
msgstr ""
-"Er du sikker på at du vil synkronisere kjøreplanen \"{{rundownSlug}}\" med "
-"ENPS?"
-msgid "Start time is close"
-msgstr "Oppgitt sendestart er hvert øyeblikk"
+msgid "Are you sure you want to delete output layer \"{{outputId}}\"?"
+msgstr ""
-msgid "Yes"
-msgstr "Ja"
+msgid "Are you sure you want to delete source layer \"{{sourceLayerId}}\"?"
+msgstr "Er du sikker på at du vil slette kildelaget \"{{sourceLayerId}}\"?"
-msgid "No"
-msgstr "Nei"
+msgid "Are you sure you want to delete the \"{{name}}\" rundown?"
+msgstr "Er du sikker på at du vil slette kjøreplanen \"{{name}}\"?"
-msgid ""
-"You are in rehearsal mode, the broadcast starts in less than 1 minute. Do "
-"you want to reset the rundown and go into On-Air mode?"
-msgstr ""
-"Du er i testmodus og sendingen starter om mindre enn ett minutt. Vil du "
-"laste inn kjøreplanen på nytt og gjøre klar til sending?"
+msgid "Are you sure you want to delete the blueprint \"{{blueprintId}}\"?"
+msgstr "Er du sikker på at du vil slette blueprintet \"{{blueprintId}}\"?"
-msgid "Hold"
-msgstr "Hold"
+msgid "Are you sure you want to delete the shelf layout \"{{name}}\"?"
+msgstr "Er du sikker på at du vil slette layouten \"{{name}}\"?"
-msgid "Could not find a Piece that can be disabled."
-msgstr "Kunne ikke finne et element som kan skippes."
+msgid "Are you sure you want to delete the show style \"{{showStyleId}}\"?"
+msgstr "Er du sikker på at du vil slette showstylen \"{{showStyleId}}\"?"
-msgid "Failed to execute take"
-msgstr "Kunne ikke gjennomføre Take"
+msgid "Are you sure you want to delete the studio \"{{studioId}}\"?"
+msgstr "Er du sikker på at du vil slette studioet \"{{studioId}}\"?"
-msgid ""
-"The rundown you are trying to execute a take on is inactive, would you like "
-"to activate this rundown?"
-msgstr ""
-"Du prøve å gjøre en Take i en inaktiv kjøreplan. Vil du aktivere denne "
-"kjøreplanen?"
+msgid "Are you sure you want to delete this AdLib?"
+msgstr "Er du sikker på at du vil slette denne adliben?"
-msgid "Activate (Rehearsal)"
-msgstr "Aktiver (testmodus)"
+msgid "Are you sure you want to delete this Bucket?"
+msgstr "Er du sikker på at du vil slette denne bøtten?"
-msgid "Activate (On-Air)"
-msgstr "Aktiver (gå ON AIR)"
+msgid "Are you sure you want to delete this device: \"{{deviceId}}\"?"
+msgstr "Er du sikker på at du vil fjerne enheten \"{{deviceId}}\"?"
-msgid "Failed to activate"
-msgstr "Kunne ikke aktivere"
+msgid "Are you sure you want to empty (remove all adlibs inside) this Bucket?"
+msgstr "Er du sikker på at du vil tømme denne bøtten (fjerner alle adliber)?"
msgid ""
-"Something went wrong, please contact the system administrator if the problem "
-"persists."
-msgstr "Noe gikk galt, kontakt systemadministrator hvis problemet fortsetter."
+"Are you sure you want to force the migration? This will bypass the "
+"migration checks, so be sure to verify that the values in the settings are "
+"correct!"
+msgstr ""
+"Er du sikker på at du vil tvinge migreringen? Dette gjør at du hopper over "
+"migreringskontrollene, så vær sikker på at verdiene oppgitt i innstillinger "
+"er korrekte!"
-msgid "Another Rundown is Already Active!"
-msgstr "En annen kjøreplan er allerede aktiv!"
+msgid "Are you sure you want to import the contents of the file \"{{fileName}}\"?"
+msgstr ""
-msgid ""
-"The rundown \"{{rundownName}}\" will need to be deactivated in order to "
-"activate this one.\n"
-"\n"
-"Are you sure you want to activate this one anyway?"
+msgid "Are you sure you want to re-sync the \"{{name}}\" rundown?"
msgstr ""
-"Kjøreplanen \"{{rundownName}}\" må deaktiveres for å aktivere denne "
-"kjøreplanen.\n"
-"\n"
-"Er du sikker på at du ønsker å aktivere?"
+"Er du sikker på at du vil synkronisere kjøreplanen \"{{rundownSlug}}\" med "
+"ENPS?"
-msgid "Activate Anyway (Rehearsal)"
-msgstr "Aktiver uansett (testmodus)"
+msgid ""
+"Are you sure you want to re-sync the Rundown?\n"
+"(If the currently playing Part has been changed, this can affect the output)"
+msgstr ""
+"Er du sikker på at du vil synkronisere denne kjøreplanen?\n"
+"(Dette kan påvirke gjennomføring av en pågående sending)"
-msgid "Activate Anyway (On-Air)"
-msgstr "Aktiver uansett (gå ON AIR)"
+msgid "Are you sure you want to remove {{type}} \"{{deviceId}}\"?"
+msgstr "Er du sikker på at du vil fjerne enheten {{type}} \"{{deviceId}}\"?"
-msgid "Do you want to activate this Rundown?"
-msgstr "Vil du aktivere denne kjøreplanen?"
+msgid "Are you sure you want to remove all Variants in the table?"
+msgstr ""
msgid ""
-"The planned end time has passed, are you sure you want to activate this "
-"Rundown?"
+"Are you sure you want to remove exclusivity group \"{{eGroupName}}\"?\n"
+"Route Sets assigned to this group will be reset to no group."
msgstr ""
-"Det planlagte sluttidspunktet er passert, er du sikker på at du vil aktivere "
-"denne kjøreplan?"
+"Er du sikker på at du vil fjerne eksklusivitetsgruppen \"{{eGroupName}}\"?\n"
+"Omkoblinger satt til denne gruppen vil bli resatt til ingen gruppe."
-msgid "Are you sure you want to activate Rehearsal Mode?"
-msgstr "Er du sikker på at du vil gå i testmodus?"
+msgid "Are you sure you want to remove mapping for layer \"{{mappingId}}\"?"
+msgstr "Er du sikker på at du fil fjerne mappingen for laget \"{{mappingId}}\"?"
+
+msgid "Are you sure you want to remove the AB Player \"{{playerId}}\"?"
+msgstr ""
msgid ""
-"Are you sure you want to deactivate this Rundown?\n"
-"(This will clear the outputs)"
+"Are you sure you want to remove the device \"{{deviceName}}\" and all of "
+"it's sub-devices?"
msgstr ""
-"Er du sikker på at du vil deaktivere denne kjøreplanen?\n"
-"(Dette vil nullstille alle utganger.)"
+"Er du sikker på at du vil fjerne enheten \"{{deviceName}}\" og alle dens "
+"underenheter?"
-msgid "The rundown can not be reset while it is active"
-msgstr "En aktivert kjøreplan kan ikke tilbakestilles"
+msgid "Are you sure you want to remove the Package Container \"{{containerId}}\"?"
+msgstr "Er du sikker på at du vil fjerne pakkekontaineren \"{{containerId}}\"?"
msgid ""
-"A snapshot of the current Running Order has been created for troubleshooting."
+"Are you sure you want to remove the Package Container Accessor "
+"\"{{accessorId}}\"?"
msgstr ""
-"Et snapshot av den gjeldende kjøreplanen har blitt opprettet for feilsøking."
+"Er du sikker på at du vil fjerne pakkekontainer-aksessoren "
+"\"{{accessorId}}\"?"
-msgid "Prepare Studio and Activate (Rehearsal)"
-msgstr "Forbered studio og aktiver testmodus"
+msgid ""
+"Are you sure you want to remove the Route from \"{{sourceLayerId}}\" to "
+"\"{{newLayerId}}\"?"
+msgstr ""
+"Er du sikker på at du vil fjerne omkoblingen fra \"{{sourceLayerId}}\" til "
+"\"{{newLayerId}}\"?"
+
+msgid "Are you sure you want to remove the Route Set \"{{routeId}}\"?"
+msgstr "Er du sikker på at du vil fjerne omkoblingsgruppen \"{{routeId}}\"?"
+
+msgid "Are you sure you want to remove the Variant \"{{showStyleVariantId}}\"?"
+msgstr ""
+
+msgid ""
+"Are you sure you want to replace the blueprints with the file "
+"\"{{fileName}}\"?"
+msgstr "Er du sikker på at du vil erstatte blueprints fra filen \"{{fileName}}\"?"
+
+msgid ""
+"Are you sure you want to reset all overrides for Packing Container "
+"\"{{id}}\"?"
+msgstr ""
+
+msgid ""
+"Are you sure you want to reset all overrides for the mapping for layer "
+"\"{{mappingId}}\"?"
+msgstr ""
+
+msgid ""
+"Are you sure you want to reset all overrides for the output layer "
+"\"{{outputLayerId}}\"?"
+msgstr ""
+
+msgid "Are you sure you want to reset all overrides for the selected row?"
+msgstr ""
+
+msgid ""
+"Are you sure you want to reset all overrides for the source layer "
+"\"{{sourceLayerId}}\"?"
+msgstr ""
+
+msgid ""
+"Are you sure you want to reset the database version?\n"
+"Only do this if you plan on running the migration right after."
+msgstr ""
+"Er du sikker på at du vil nullstille databaseversjonen?\n"
+"Bare gjør dette dersom du har tenkt å kjøre en migrering umiddelbart."
+
+msgid "Are you sure you want to restart this device?"
+msgstr "Er du sikker på at du vil starte denne enheten på nytt?"
+
+msgid ""
+"Are you sure you want to restart this Sofie Automation Server Core: "
+"{{name}}?"
+msgstr "Er du sikker på at du vil starte Sofie Core: {{name}} på nytt?"
+
+msgid ""
+"Are you sure you want to restore the system from the snapshot file "
+"\"{{fileName}}\"?"
+msgstr ""
+"Er du sikker på at du vil gjenopprettet systemet fra snapshotfilen "
+"\"{{fileName}}\"?"
+
+msgid "Are you sure you want to skip the fix up config step for {{name}}"
+msgstr ""
+
+msgid ""
+"Are you sure you want to update the blueprints from the file "
+"\"{{fileName}}\"?"
+msgstr "Er du sikker på at du vil oppdatere blueprints fra filen \"{{fileName}}\"?"
+
+msgid ""
+"Are you sure you want to upload the shelf layout from the file "
+"\"{{fileName}}\"?"
+msgstr ""
+"Er du sikker på at du vil laste opp layout for skuff fra filen "
+"\"{{fileName}}\"?"
+
+msgid ""
+"Are you sure, do you really want to REMOVE the Snapshot "
+"\"{{snapshotName}}\"?\r\n"
+"This cannot be undone!!"
+msgstr ""
+
+msgid "Are you sure?"
+msgstr "Er du sikker?"
+
+msgid ""
+"Are you sure? This will cause the whole Sofie system to be unresponsive "
+"several seconds!"
+msgstr ""
+
+msgid "Around 10 minutes ago"
+msgstr "Cirka 10 minutter siden"
+
+msgid "Assign"
+msgstr "Tilordne"
+
+msgid "Assigned Show Styles"
+msgstr ""
+
+msgid "Assigned Studios"
+msgstr ""
+
+msgid "Attached Subdevices"
+msgstr "Tilkoblede underenheter"
+
+msgid "Audio Mixing"
+msgstr "Lydmiksing"
+
+msgid "Authorize App Access"
+msgstr ""
+
+msgid "Auto"
+msgstr "Auto"
+
+msgid "AutoNext in QuickLoop behavior"
+msgstr ""
+
+msgid "Available Screens for Studio {{studioId}}"
+msgstr ""
+
+msgid "Bad"
+msgstr "Feil"
+
+msgid "Bank Index"
+msgstr ""
+
+msgid "Base URL"
+msgstr "Base-url"
+
+msgid "Base url to the resource (example: http://myserver/folder)"
+msgstr "Base-url for ressursen (eksempel: http://minserver/mappe)"
+
+msgid "Baseline needs reload, this studio may not work until reloaded"
+msgstr ""
+"Baseline må lastes på nytt, dette studioet vil kanskje ikke fungere før "
+"baseline er lastet på nytt"
+
+msgid "Behavior"
+msgstr "Oppførsel"
+
+msgid "Blueprint"
+msgstr "Blueprint"
+
+msgid "Blueprint config has changed"
+msgstr ""
+
+msgid "Blueprint config preset"
+msgstr ""
+
+msgid ""
+"Blueprint config preset has been changed. From \"{{ oldValue }}\", to \"{{ "
+"newValue }}\""
+msgstr ""
+
+msgid "Blueprint config preset is missing"
+msgstr ""
+
+msgid "Blueprint config preset not set"
+msgstr ""
+
+msgid "Blueprint Configuration"
+msgstr "Blueprintkonfigurasjon"
+
+msgid "Blueprint has a new version"
+msgstr ""
+
+msgid "Blueprint has been changed. From \"{{ oldValue }}\", to \"{{ newValue }}\""
+msgstr ""
+
+msgid "Blueprint ID"
+msgstr "Blueprint-id"
+
+msgid "Blueprint Name"
+msgstr "Blueprintnavn"
+
+msgid "Blueprint not found!"
+msgstr ""
+
+msgid "Blueprint not set"
+msgstr "Blueprint ikke valgt"
+
+msgid "Blueprint Type"
+msgstr "Blueprinttype"
+
+msgid "Blueprint Version"
+msgstr "Blueprintversjon"
+
+msgid "Blueprints"
+msgstr "Blueprints"
+
+msgid "Blueprints updated successfully."
+msgstr "Blueprints ble oppdatert."
+
+msgid "Bottom"
+msgstr ""
+
+msgid "Box color"
+msgstr ""
+
+msgid "BREAK"
+msgstr "PAUSE"
+
+msgid "Break In"
+msgstr "Pause om"
+
+msgid "Bucket AdLib is not compatible with this Rundown!"
+msgstr ""
+
+msgid "Bucket not found!"
+msgstr ""
+
+msgid "Button"
+msgstr "Knapp"
+
+msgid "Button height scale factor"
+msgstr "Høydeskala for knapp"
+
+msgid "Button mapping"
+msgstr ""
+
+msgid "Button width scale factor"
+msgstr "Breddeskala for knapp"
+
+msgid "By Parts"
+msgstr ""
+
+msgid "By Segments"
+msgstr ""
+
+msgid "Camera"
+msgstr "Kamera"
+
+msgid "Camera Screen"
+msgstr ""
+
+msgid "Can Generate Adlib Testing Rundown"
+msgstr ""
+
+msgid "Can not be used during a hold!"
+msgstr ""
+
+msgid "Cancel"
+msgstr "Avbryt"
+
+msgid "Cancel currently pressed hotkey"
+msgstr "Avbryt den trykte tasten"
+
+msgid "Cannot activate HOLD before a part has been taken!"
+msgstr ""
+
+msgid "Cannot activate HOLD between the current and next parts"
+msgstr ""
+
+msgid "Cannot activate HOLD once an adlib has been used"
+msgstr ""
+
+msgid "Cannot cancel HOLD once it has been taken"
+msgstr ""
+
+msgid "Cannot connect to the {{platformName}}: {{reason}}"
+msgstr ""
+
+msgid "Cannot perform take for {{duration}}ms"
+msgstr ""
+
+msgid "Cannot play this AdLib because it is marked as Floated"
+msgstr "Kan ikke spille av adlib fordi den er markert som på vent (float)"
+
+msgid "Cannot play this AdLib because it is marked as Invalid"
+msgstr "Kan ikke spille av adlib fordi den er markert som ugyldig"
+
+msgid "Cannot play this adlib because source layer is not queueable"
+msgstr "Kan ikke spille av adlib fordi den ikke kan settes i kø på kildelaget"
+
+msgid "Cannot remove the rundown \"{{name}}\" while it is on-air."
+msgstr ""
+
+msgid "Cannot take close to an AUTO"
+msgstr ""
+
+msgid "Cannot take during a transition"
+msgstr ""
+
+msgid "Cannot take unplayable AdLib"
+msgstr ""
+
+msgid "CasparCG on device \"{{deviceName}}\" restarting..."
+msgstr "CasparCG på \"{{deviceName}}\" starter på nytt..."
+
+msgid "Center"
+msgstr ""
+
+msgid "Change to fullscreen mode"
+msgstr "Fullskjermmodus"
+
+msgid "Channel Name"
+msgstr "Kanalnavn"
+
+msgid ""
+"Check layer types to select all layers of that type, or check individual "
+"layers for more specific filtering."
+msgstr ""
+
+msgid "Check the console for troubleshooting data from device \"{{deviceName}}\"!"
+msgstr "Sjekk konsollen for feilsøkingsdata fra enheten \"{{deviceName}}\"!"
+
+msgid "Cleanup"
+msgstr "Opprydding"
+
+msgid "Cleanup old data"
+msgstr "Rydd opp i gamle data"
+
+msgid "Cleanup old database indexes"
+msgstr "Rydd opp i gamle databaseindexer"
+
+msgid "Clear {{layerName}}"
+msgstr "Tøm {{layerName}}"
+
+msgid "Clear filter"
+msgstr ""
+
+msgid "Clear queued segment"
+msgstr "Fjern cuet tittel"
+
+msgid "Clear QuickLoop"
+msgstr ""
+
+msgid "Clear QuickLoop End"
+msgstr ""
+
+msgid "Clear QuickLoop Start"
+msgstr ""
+
+msgid "Clear Source Layer"
+msgstr "Tøm kildelag"
+
+msgid "Clear value"
+msgstr ""
+
+msgid "Clearing SourceLayer"
+msgstr ""
+
+msgid "Click anywhere for fullscreen"
+msgstr ""
+
+msgid "Click on a rundown to control your studio"
+msgstr "Klikk på en kjøreplan for å kontrollere studioet ditt"
+
+msgid "Click or press Enter for fullscreen"
+msgstr ""
+
+msgid "Click to show available Package Containers"
+msgstr "Klikk for å vise tilgjengelige pakkekontainere"
+
+msgid "Click to show available Show Styles"
+msgstr "Klikk for å vise tilgjengelige showstyles"
+
+msgid "Client IP"
+msgstr "Klient-ip"
+
+msgid "Clip starts with {{frames}} black frames"
+msgstr ""
+
+msgid "Clip starts with {{frames}} freeze frames"
+msgstr ""
+
+msgid "Clips"
+msgstr "Klipp"
+
+msgid "Close"
+msgstr "Lukk"
+
+msgid "Close Properties Panel"
+msgstr ""
+
+msgid "Close Rundown"
+msgstr ""
+
+msgid "Comma-separated list of studio labels to filter by. Leave empty for all."
+msgstr ""
+
+msgid "Comma-separated speeds in px/frame"
+msgstr ""
+
+msgid "Compatible Studios"
+msgstr ""
+
+msgid "Completed with warnings"
+msgstr ""
+
+msgid "Config Fix Up must be run or ignored before the configuration can be edited"
+msgstr ""
+
+msgid "Config for {{name}} fix failed"
+msgstr ""
+
+msgid "Config for {{name}} fixed successfully"
+msgstr ""
+
+msgid "Config for {{name}} upgraded failed"
+msgstr ""
+
+msgid "Config for {{name}} upgraded successfully"
+msgstr ""
+
+msgid "Config has not been applied before"
+msgstr ""
+
+msgid "Config ID: "
+msgstr ""
+
+msgid "Config looks good"
+msgstr ""
+
+msgid "Config preset"
+msgstr ""
+
+msgid "Config preset is missing"
+msgstr ""
+
+msgid "Config preset not set"
+msgstr ""
+
+msgid "Config requires fixing up before it can be validated"
+msgstr ""
+
+msgid ""
+"Config value \"{{ name }}\" has changed. From \"{{ oldValue }}\", to \"{{ "
+"newValue }}\""
+msgstr ""
+
+msgid "Configurable Screens"
+msgstr ""
+
+msgid ""
+"Configuration for this Gateway has moved to the Studio Peripheral Device "
+"settings"
+msgstr ""
+
+msgid "Configure display options"
+msgstr ""
+
+msgid ""
+"Configure which pieces should display their assigned AB resolver channel "
+"(e.g., \"Server A\") on various screens. This helps operators identify "
+"which video server is playing each clip."
+msgstr ""
+
+msgid "Confirm"
+msgstr ""
+
+msgid "Connect some devices to the playout gateway"
+msgstr "Koble til en eller flere enheter til playout gatewayen"
+
+msgid "Connect to {{deviceName}}"
+msgstr ""
+
+msgid "Connected"
+msgstr "Tilkoblet"
+
+msgid "Connected App Containers"
+msgstr "Tilkoblede app-kontainere"
+
+msgid "Connected Expectation Managers"
+msgstr ""
+
+msgid "Connected to the {{platformName}}."
+msgstr ""
+
+msgid "Connected Workers"
+msgstr "Tilkoblede arbeidere"
+
+msgid "Connecting to the {{platformName}}"
+msgstr ""
+
+msgid "Container Status"
+msgstr ""
+
+msgid "Control mode"
+msgstr ""
+
+msgid "Control modes"
+msgstr ""
+
+msgid ""
+"Controls for exposed Route Sets will be displayed to the producer within "
+"the Rundown View in the Switchboard."
+msgstr ""
+"Kontroller for eksponerte omkoblingsgrupper vil vises til producer i "
+"kjøreplansvisningen i omkoblingspanelet."
+
+msgid "Core"
+msgstr ""
+
+msgid "Core + Worker processing time"
+msgstr ""
+
+msgid "Core System settings"
+msgstr "Systeminstillinger for Core"
+
+msgid ""
+"Could not create a snapshot for the evaluation, because the previous one "
+"was created just moments ago. If you want another snapshot, try again in a "
+"couple of seconds."
+msgstr ""
+
+msgid "Could not get system status. Please consult system administrator."
+msgstr "Kan ikke innhente status for systemet. Kontakt systemadministrator."
+
+msgid "Could not restart core: {{err}}"
+msgstr ""
+
+msgid "Could not restart Playout Gateway \"{{playoutDeviceName}}\"."
+msgstr "Playout-gateway \"{{playoutDeviceName}}\" kunne ikke startes på nytt."
+
+msgid "Create Adlib Testing Rundown"
+msgstr ""
+
+msgid "Create new Bucket"
+msgstr "Opprett ny bøtte"
+
+msgid "Created"
+msgstr "Opprettet"
+
+msgid "Creating a new Bucket"
+msgstr ""
+
+msgid "Creating Adlib Testing Rundown"
+msgstr ""
+
+msgid "Creating Snapshot for debugging"
+msgstr ""
+
+msgid "Critical problems"
+msgstr ""
+
+msgid "Critical Problems"
+msgstr ""
+
+msgid "Cron jobs"
+msgstr "Cron-jobber"
+
+msgid "Current Part"
+msgstr "Nåværende del"
+
+msgid "Current part can contain next pieces"
+msgstr ""
+
+msgid "Current Segment"
+msgstr "Nåværende tittel"
+
+msgid "Custom Classes"
+msgstr "Tilpassede klasser"
+
+msgid "Custom Hotkey Labels"
+msgstr "Egendefinerte etiketter for hurtigtaster"
msgid "Deactivate"
msgstr "Deaktiver"
-msgid "Take"
-msgstr "Take"
+msgid "Deactivate \"On Air\""
+msgstr ""
-msgid "Reset Rundown"
-msgstr "Tilbakestill kjøreplanen"
+msgid "Deactivate Rundown"
+msgstr "Deaktiver kjøreplan"
+
+msgid "Deactivate Studio"
+msgstr ""
+
+msgid "Deactivating other Rundown Playlist, and activating this one"
+msgstr ""
+
+msgid "Deactivating Rundown Playlist"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "Debug mode"
+msgstr ""
+
+msgid "Debug State"
+msgstr ""
+
+msgid "Default"
+msgstr "Standard"
+
+msgid "Default (hide)"
+msgstr ""
+
+msgid "Default Layout"
+msgstr "Standardlayout"
+
+msgid "Default shelf height"
+msgstr "Standard høyde for skuff"
+
+msgid "Default State"
+msgstr "Standardtilstand"
+
+msgid "Delete"
+msgstr "Slett"
+
+msgid "Delete Action Trigger"
+msgstr ""
+
+msgid "Delete layout?"
+msgstr "Slett layout?"
+
+msgid "Delete mapping"
+msgstr ""
+
+msgid "Delete output layer"
+msgstr ""
+
+msgid "Delete rundown?"
+msgstr "Slette kjøreplanen?"
+
+msgid "Delete source layer"
+msgstr ""
+
+msgid "Delete this AdLib"
+msgstr "Slett denne adliben"
+
+msgid "Delete this Blueprint?"
+msgstr "Slett dette blueprintet?"
+
+msgid "Delete this Bucket"
+msgstr "Slett denne bøtten"
-msgid "Reload {{nrcsName}} Data"
-msgstr "Last inn {{nrcsName}}-data på nytt"
+msgid "Delete this item?"
+msgstr "Slett dette elementet?"
-msgid "Store Snapshot"
-msgstr "Lagre snapshot"
+msgid "Delete this output?"
+msgstr "Slett denne utgangen?"
-msgid "No actions available"
-msgstr "Ingen kjøreplanvalg tilgjengelige i påsynsmodus"
+msgid "Delete this Show Style?"
+msgstr "Slett denne showstylen?"
-msgid "Add ?studio=1 to the URL to enter studio mode"
-msgstr "Legg til ?admin=1 på slutten av nettadressen for å starte studiomodus"
+msgid "Delete this Studio?"
+msgstr "Slett dette studioet?"
-msgid "Exit"
-msgstr "Lukk"
+msgid "Device"
+msgstr ""
-msgid "Error"
-msgstr "Feil"
+msgid "Device \"{{deviceName}}\" restarting..."
+msgstr "\"{{deviceName}}\" starter på nytt..."
-msgid "This rundown is now active. Are you sure you want to exit this screen?"
-msgstr "Denne kjøreplanen er aktiv. Er du sikker på at du vil avslutte?"
+msgid "Device {{deviceName}} is disconnected"
+msgstr "{{deviceName}} er koblet fra"
-msgid "Invalid AdLib"
-msgstr "Ugyldig adlib"
+msgid "Device ID"
+msgstr "Enhets-id"
-msgid "Cannot play this AdLib because it is marked as Invalid"
-msgstr "Kan ikke spille av adlib fordi den er markert som ugyldig"
+msgid "Device is already attached to another studio."
+msgstr ""
-#, fuzzy
-#| msgid "Floated AdLib"
-msgid "Floated Adlib"
-msgstr "Adlib satt på vent"
+msgid "Device is missing configuration schema"
+msgstr ""
-msgid "Cannot play this AdLib because it is marked as Floated"
-msgstr "Kan ikke spille av adlib fordi den er markert som på vent (float)"
+msgid "Device is of unknown type"
+msgstr ""
-msgid "Not queueable"
-msgstr "Kan ikke settes i kø"
+msgid "Device Name"
+msgstr "Enhetsnavn"
-msgid "Cannot play this adlib because source layer is not queueable"
-msgstr "Kan ikke spille av adlib fordi den ikke kan settes i kø på kildelaget"
+msgid "Device not found"
+msgstr ""
-msgid ""
-"There are no Playout Gateways connected and attached to this studio. Please "
-"contact the system administrator to start the Playout Gateway."
+msgid "Device Triggers"
msgstr ""
-"Dette studioet har ingen tilkoblede playout-gatewayer. Kontakt "
-"systemadministrator for å starte den."
-msgid "Playout Gateway \"{{playoutDeviceName}}\" is now restarting."
-msgstr "Playout-gateway \"{{playoutDeviceName}}\" starter på nytt..."
+msgid "Device Type"
+msgstr "Enhetstype"
-msgid "Could not restart Playout Gateway \"{{playoutDeviceName}}\"."
-msgstr "Playout-gateway \"{{playoutDeviceName}}\" kunne ikke startes på nytt."
+msgid "Devices"
+msgstr "Enheter"
-msgid "Restart Playout"
-msgstr "Start Playout-gateway på nytt"
+msgid "Devices with issues"
+msgstr "Enheter med problemer"
-#, fuzzy
-#| msgid "Do you want to restart Quantel Gateway?"
-msgid "Do you want to restart the Playout Gateway?"
-msgstr "Vil du starte Quantel Gateway på nytt?"
+msgid "Did you have any problems with the broadcast?"
+msgstr "Hadde du noen problemer med sendingen?"
-msgid "Restart CasparCG Server"
-msgstr "Restart CasparCG"
+msgid "Diff"
+msgstr "Forskjell"
-msgid "Do you want to restart CasparCG Server \"{{device}}\"?"
-msgstr "Er du sikker på at du vil restarte CasparCG Server \"{{device}}\"?"
+msgid "Director Screen"
+msgstr ""
-msgid "CasparCG on device \"{{deviceName}}\" restarting..."
-msgstr "CasparCG på \"{{deviceName}}\" starter på nytt..."
+msgid "Director's Screen"
+msgstr ""
-msgid ""
-"Failed to restart CasparCG on device: \"{{deviceName}}\": {{errorMessage}}"
-msgstr "Omstart av CasparCG på \"{{deviceName}}\" feilet: {{errorMessage}}"
+msgid "Disable"
+msgstr ""
-msgid "Cancel currently pressed hotkey"
-msgstr "Avbryt den trykte tasten"
+msgid "Disable Context Menu"
+msgstr "Skru av kontekstmeny"
-msgid "Change to fullscreen mode"
-msgstr "Fullskjermmodus"
+msgid "Disable follow take"
+msgstr ""
-msgid "Show Hotkeys"
-msgstr "Vise hurtigtaster"
+msgid "Disable hints by adding this to the URL:"
+msgstr "Deaktiver hint ved å legge dette til på url-en:"
-msgid "Take a Snapshot"
-msgstr "Lagre et snapshot"
+msgid "Disable next Piece"
+msgstr "Skip neste element"
-msgid "Restart {{device}}"
-msgstr "Start {{device}} på nytt"
+msgid "Disable the hover Inspector when hovering over the button"
+msgstr ""
-msgid "Rundown not found"
-msgstr "Kjøreplan ikke funnet"
+msgid "Disable the next element"
+msgstr "Skip neste super"
-msgid "Close"
-msgstr "Lukk"
+msgid "Disable version check"
+msgstr "Deaktiver versjonsjekk"
-msgid "Rundown for piece \"{{pieceLabel}}\" could not be found."
-msgstr "Finner ikke kjøreplan for \"{{pieceLabel}}\"."
+msgid "Disabled"
+msgstr "Deaktivert"
-msgid "This rundown has been unpublished from Sofie."
-msgstr "Denne kjøreplanen er ikke lenger tilgjengelig i Sofie."
+msgid "Disabling next Piece"
+msgstr ""
-msgid "Error: The studio of this Rundown was not found."
-msgstr "Feil: Kan ikke finne studioet for denne kjøreplanen."
+msgid "Disconnected"
+msgstr "Frakoblet"
-msgid "This playlist is empty"
-msgstr "Denne spillelisten er tom"
+msgid "Dismiss"
+msgstr ""
-msgid "Error: The ShowStyle of this Rundown was not found."
-msgstr "Feil: Kan ikke finne showstyle for denne kjøreplanen."
+msgid "Dismiss all notifications"
+msgstr ""
-msgid "Unknown error"
-msgstr "Ukjent feil"
+msgid "Display AB channel assignments on:"
+msgstr ""
-msgid ""
-"Rundown {{rundownName}} in Playlist {{playlistName}} is missing in the data "
-"from {{nrcsName}}. You can either leave it in Sofie and mark it as Unsynced "
-"or remove the rundown from Sofie. What do you want to do?"
+msgid "Display AdLibs in a column in List View"
msgstr ""
-"Kjøreplan {{rundownName}} i listen {{playlistName}} mangler i data fra "
-"{{nrcsName}}. Du kan enten markere den som usynkronisert og beholde den i "
-"Sofie, eller fjerne kjøreplanen fra Sofie. Hva vil du gjøre?"
-msgid "(Unknown rundown)"
-msgstr "(Ukjent kjøreplan)"
+msgid "Display in a column in List View"
+msgstr ""
-msgid "(Unknown playlist)"
-msgstr "(Ukjent kjøreplanliste)"
+msgid "Display name of the Package Container"
+msgstr "Pakkekontainerens navn som vises i oversikten"
-msgid "Leave Unsynced"
-msgstr "Behold ikke-synkronisert kjøreplan"
+msgid "Display piece duration for source layers"
+msgstr ""
-msgid "Remove"
-msgstr "Fjern"
+msgid "Display Rank"
+msgstr "Rangering for visning"
-msgid "Remove rundown"
-msgstr "Fjern kjøreplan"
+msgid "Display Style"
+msgstr "Visningsstil"
+
+msgid "Display Take buttons"
+msgstr "Vis Take-knapp"
msgid ""
"Do you really want to remove just the rundown \"{{rundownName}}\" in the "
-"playlist {{playlistName}} from Sofie? This cannot be undone!"
+"playlist {{playlistName}} from Sofie? \n"
+"\n"
+"This cannot be undone!"
msgstr ""
-"Er du sikker på at du vil slette kjøreplanen {{rundownName}} i lista "
-"{{playlistName}} fra Sofie? Dette kan ikke angres!"
-
-msgid "Loop Start"
-msgstr "Start for loop"
-msgid "Loop End"
-msgstr "Slutt for loop"
+msgid "Do you really want to restore the snapshot \"{{snapshotName}}\"?"
+msgstr ""
-msgid "(in: {{time}})"
-msgstr "(om: {{time}})"
+msgid "Do you want to activate this Rundown?"
+msgstr "Vil du aktivere denne kjøreplanen?"
-msgid "({{time}} ago)"
-msgstr "(for {{time}} siden)"
+msgid ""
+"Do you want to append these to existing Action Triggers, or do you want to "
+"replace them?"
+msgstr ""
+"Vil du legge disse til de nåværende handlingsutløserne, eller vil du "
+"erstatte dem?"
-msgid "Planned Start"
-msgstr "Planlagt start"
+msgid "Do you want to do this?"
+msgstr ""
-msgid "Planned Duration"
-msgstr "Planlagt varighet"
+msgid "Do you want to execute {{actionName}}? This may the disrupt the output"
+msgstr ""
-msgid "Planned End"
-msgstr "Planlagt slutt"
+msgid "Do you want to restart CasparCG Server \"{{device}}\"?"
+msgstr "Er du sikker på at du vil restarte CasparCG Server \"{{device}}\"?"
-msgid "Time to planned end"
-msgstr "Tid til planlagt slutt"
+msgid "Do you want to restart the Playout Gateway?"
+msgstr ""
-msgid "Time since planned end"
-msgstr "Tid siden planlagt slutt"
+msgid "Documentation is available at"
+msgstr "Dokumentasjon er tilgjengelig på"
-msgid "Over/Under"
-msgstr "Over/Under"
+msgid "Documents to be removed:"
+msgstr "Dokumenter som fjernes:"
-msgid ""
-"The rundown \"{{rundownName}}\" is not published or activated in "
-"{{nrcsName}}! No data updates will currently come through."
+msgid "Does NOT support HEAD requests"
msgstr ""
-"Kjøreplanen \"{{rundownName}}\" er ikke synkronisert med MOS/{{nrcsName}}! "
-"Kontroller at den er satt MOS Active i ENPS."
-msgid "Re-sync"
-msgstr "Synkroniser med MOS"
+msgid "Don't treat the end of the last rundown in a playlist as a break"
+msgstr "Ikke behandle slutten av den siste kjøreplanen i en spilleliste som en pause"
-msgid "Re-sync Rundown"
-msgstr "Synkroniser kjøreplanen med ENPS på nytt"
+msgid "Done"
+msgstr "Utført"
-msgid ""
-"Are you sure you want to re-sync the Rundown?\n"
-"(If the currently playing Part has been changed, this can affect the output)"
+msgid "Download Action Triggers"
+msgstr "Last ned handlingsutløsere"
+
+msgid "Drag to reorder or move out of playlist"
+msgstr "Dra for å endre rekkefølge eller flytte ut av spillelisten"
+
+msgid "Drop Rundown here to move it out of its current Playlist"
+msgstr "Slipp kjøreplanen her for å flytte den ut av spillelisten"
+
+msgid "Dropzone URL"
msgstr ""
-"Er du sikker på at du vil synkronisere denne kjøreplanen?\n"
-"(Dette kan påvirke gjennomføring av en pågående sending)"
-msgid "Restart"
-msgstr "Restart"
+msgid "Duplicate Action Trigger"
+msgstr ""
-msgid ""
-"Fixing this problem requires a restart to the host device. Are you sure you "
-"want to restart {{device}}?\n"
-"(This might affect output)"
+msgid "Duration"
+msgstr "Varighet"
+
+msgid "DURATION"
msgstr ""
-"Feilretting krever en omstart av {{device}}. Er du sikker på at du ønsker å "
-"starte enheten på nytt?(Dette kan påvirke gjennomføring av en pågående "
-"sending)"
-msgid "Device \"{{deviceName}}\" restarting..."
-msgstr "\"{{deviceName}}\" starter på nytt..."
+msgid "e.g., Studio A,Studio B"
+msgstr ""
-msgid "Failed to restart device: \"{{deviceName}}\": {{errorMessage}}"
-msgstr "Kunne ikke starte \"{{deviceName}}\" på nytt: {{errorMessage}}"
+msgid "Edit"
+msgstr ""
-msgid "There is an unknown problem with the part."
-msgstr "Det er et ukjent problem med denne delen."
+msgid "Edit Action Trigger"
+msgstr ""
-msgid "Show issue"
-msgstr "Vis problem"
+msgid "Edit in Nora"
+msgstr "Rediger i Nora"
-msgid "There is an unspecified problem with the source."
-msgstr "Det er et ikke-spesifisert problem med kilden."
+msgid "Edit mapping"
+msgstr ""
-msgid "External message queue has unsent messages."
-msgstr "Ekstern meldingskø har meldinger som ikke er sendt."
+msgid "Edit Mode"
+msgstr ""
-msgid ""
-"The system configuration has been changed since importing this rundown. It "
-"might not run correctly"
+msgid "Edit output layer"
+msgstr ""
+
+msgid "Edit Part Properties"
msgstr ""
-"Systemoppsettet har blitt endret etter at denne kjøreplanen ble importert. "
-"Kjøreplanen kan spilles av med feil"
-msgid "Unable to check the system configuration for changes"
-msgstr "Kan ikke kontrollere endringer i systemoppsettet"
+msgid "Edit Piece Properties"
+msgstr ""
-msgid "The Studio configuration is missing some required fields:"
-msgstr "Studiooppsettet mangler obligatoriske felter:"
+msgid "Edit Segment Properties"
+msgstr ""
-msgid "The Show Style configuration \"{{name}}\" could not be validated"
-msgstr "Showstyleoppsettet \"{{name}}\" kunne ikke valideres"
+msgid "Edit source layer"
+msgstr ""
-msgid ""
-"The ShowStyle \"{{name}}\" configuration is missing some required fields:"
-msgstr "Showstyleoppsettet \"{{name}}\" mangler obligatoriske felter:"
+msgid "Edit Support Panel"
+msgstr "Rediger supportpanel"
-msgid "Unable to validate the system configuration"
-msgstr "Systemoppsettet kunne ikke valideres"
+msgid "Empty"
+msgstr "Tom"
-msgid "Device {{deviceName}} is disconnected"
-msgstr "{{deviceName}} er koblet fra"
+msgid "Empty this Bucket"
+msgstr "Tøm denne bøtten"
-#, fuzzy
-#| msgid "Critical Errors"
-msgid "Critical Problems"
-msgstr "Kritiske feil"
+msgid "Emptying Bucket"
+msgstr ""
-msgid "Warnings"
-msgstr "Advarsler"
+msgid "Enable"
+msgstr "Aktiver"
-#, fuzzy
-#| msgid "Migrations"
-msgid "Notifications"
-msgstr "Migrering"
+msgid "Enable \"Play from Anywhere\""
+msgstr "Slå på \"Play from Anywhere\""
-#, fuzzy
-#| msgid "Rewind Segments to start"
-msgid "Rewind all Segments"
-msgstr "Sett alle segmenter tilbake til start"
+msgid "Enable AdLib Testing, for testing AdLibs before taking the first Part"
+msgstr ""
-#, fuzzy
-#| msgid "Show entire On Air Segment"
-msgid "Go to On Air Segment"
-msgstr "Vis hele tittelen som er OnAir"
+msgid "Enable automatic storage of Rundown Playlist snapshots periodically"
+msgstr ""
-#, fuzzy
-#| msgid "Switchboard"
-msgid "Toggle Switchboard Panel"
-msgstr "Sentralbord"
+msgid "Enable Buckets"
+msgstr ""
-#, fuzzy
-#| msgid "Edit Support Panel"
-msgid "Toggle Support Panel"
-msgstr "Rediger supportpanel"
+msgid "Enable CasparCG restart job"
+msgstr "Aktiver CasparCG restartjobber"
-msgid "Just now"
-msgstr "Nå"
+msgid "Enable configuration mode by adding ?configure=1 to the address bar."
+msgstr ""
+"Aktiver konfigurasjonsmodus ved å legge til ?configure=1 på slutten av "
+"nettadressen."
-msgid "Less than a minute ago"
-msgstr "Under ett minutt siden"
+msgid "Enable Evaluation Form"
+msgstr ""
-msgid "Less than five minutes ago"
-msgstr "Under fem minutter siden"
+msgid "Enable hints by adding this to the URL:"
+msgstr "Aktiver hint ved å legge dette til på url-en:"
-msgid "Around 10 minutes ago"
-msgstr "Cirka 10 minutter siden"
+msgid "Enable QuickLoop"
+msgstr ""
-msgid "More than 10 minutes ago"
-msgstr "Over 10 minutter siden"
+msgid "Enable search toolbar"
+msgstr "Aktiver søkeverktøy"
-msgid "More than 30 minutes ago"
-msgstr "Over 30 minutter siden"
+msgid "Enable User Editing"
+msgstr ""
-msgid "More than 2 hours ago"
-msgstr "Over 2 timer siden"
+msgid "Enabled"
+msgstr "Aktivert"
-msgid "More than 5 hours ago"
-msgstr "Over 5 timer siden"
+msgid "Enabled on all Parts, applying QuickLoop Fallback Part Duration if needed"
+msgstr ""
-msgid "More than a day ago"
-msgstr "Over en dag siden"
+msgid "Enabled, but skipping parts with undefined or 0 duration"
+msgstr ""
-msgid "{{nrcsName}} Connection"
-msgstr "{{nrcsName}}-tilkobling"
+msgid ""
+"Enables internal monitoring of blocked main thread. Logs when there is an "
+"issue, but (unverified) might cause issues in itself."
+msgstr ""
-msgid "Last update"
-msgstr "Nyeste oppdatering"
+msgid "End of script"
+msgstr "Slutt på manus"
-msgid "Off-line devices"
-msgstr "Frakoblede enheter"
+msgid "End Words"
+msgstr "Stikkord"
-msgid "Devices with issues"
-msgstr "Enheter med problemer"
+msgid "Error"
+msgstr "Feil"
-msgid "All connections working correctly"
-msgstr "Alle tilkoblinger er OK"
+msgid "Error when checking for cleaning up"
+msgstr ""
-msgid "Play-out"
-msgstr "Avspilling"
+msgid "Error: The ShowStyle of this Rundown was not found."
+msgstr "Feil: Kan ikke finne showstyle for denne kjøreplanen."
-msgid "All devices working correctly"
-msgstr "Alle enheter fungerer som de skal"
+msgid "Error: The studio of this Rundown was not found."
+msgstr "Feil: Kan ikke finne studioet for denne kjøreplanen."
-msgid "Auto"
-msgstr "Auto"
+msgid "Est. End"
+msgstr ""
-msgid "Expected End"
-msgstr "Forventet slutt"
+msgid "Evaluations"
+msgstr "Evalueringer"
-msgid "Next Loop at"
-msgstr "Neste loop starter"
+msgid "Exclusivity group"
+msgstr "Ekslusivitetsgruppe"
-msgid "Diff"
-msgstr "Forskjell"
+msgid "Exclusivity Group ID"
+msgstr "Eksklusivitetsgruppe-id"
-msgid "Started"
-msgstr "Startet"
+msgid "Exclusivity Group Name"
+msgstr "Eksklusivitetsgruppenavn"
-msgid "Expected Start"
-msgstr "Forventet slutt"
+msgid "Exclusivity Groups"
+msgstr "Eksklusivitetsgrupper"
-msgid "{{currentRundownName}} - {{rundownPlaylistName}} (Looping)"
-msgstr "{{currentRundownName}} - {{rundownPlaylistName}} (Looper)"
+msgid "Execute"
+msgstr "Utfør"
-msgid "{{currentRundownName}} - {{rundownPlaylistName}}"
-msgstr "{{currentRundownName}} - {{rundownPlaylistName}}"
+msgid "Execute User Operation"
+msgstr ""
-msgid "{{rundownPlaylistName}} (Looping)"
-msgstr "{{currentRundownName}} - {{rundownPlaylistName}} (Looper)"
+msgid "Executed {{actionName}} on device \"{{deviceName}}\": {{response}}"
+msgstr ""
-msgid "Floated AdLib"
-msgstr "Adlib satt på vent"
+msgid "Executed {{actionName}} on device \"{{deviceName}}\"..."
+msgstr ""
-msgid "Switchboard"
-msgstr "Sentralbord"
+msgid "Executes within the currently open Rundown, requires a Client-side trigger."
+msgstr ""
+"Utføers innenfor den valgte kjøreplanen, men trenger en utløser fra "
+"klienten."
-msgid "This is not in it's normal setting"
-msgstr "Endret fra standardoppsett"
+msgid "Execution times"
+msgstr "Kjøretider"
-msgid "Off"
-msgstr "Av"
+msgid "Exit"
+msgstr "Lukk"
-#, fuzzy
-#| msgid "Segment"
-msgid "segment"
-msgstr "Tittel"
+msgid "Expectation Manager"
+msgstr ""
-#, fuzzy
-#| msgid "Critical Errors"
-msgid "Critical problems"
-msgstr "Kritiske feil"
+msgid "Expected End"
+msgstr "Forventet slutt"
-msgid "On Air At"
-msgstr "On Air klokken"
+msgid "Expected End text"
+msgstr "Tekst for forventet slutt"
-msgid "On Air In"
-msgstr "On Air om"
+msgid "Expected End Time"
+msgstr "Forventet sendeslutt"
-msgid "Unsynced"
-msgstr "Ikke synkronisert med MOS"
+msgid "Expected Start"
+msgstr "Forventet slutt"
-#, fuzzy
-#| msgid "Sources Path"
-msgid "Sources"
-msgstr "Kildesti"
+msgid "Export"
+msgstr "Eksporter"
-msgid "Switch to Timeline mode"
+msgid "Export visible"
msgstr ""
-msgid "On Air"
-msgstr "On Air"
+msgid "Expose as user selectable layout"
+msgstr "Gjør tilgjengelig som brukervalgt layout"
-msgid "Loops to top"
-msgstr "Looper til toppen"
+msgid "Expose layout as a standalone page"
+msgstr "Gjør layout tilgjengelig som en selvstendig side"
-msgid "Show End"
-msgstr "Sendeslutt"
+msgid "External message queue has unsent messages."
+msgstr "Ekstern meldingskø har meldinger som ikke er sendt."
-msgid "BREAK"
-msgstr "PAUSE"
+msgid "Failed to activate"
+msgstr "Kunne ikke aktivere"
-msgid "Break In"
-msgstr "Pause om"
+msgid "Failed to add a new Show Style Variant: {{errorMessage}}"
+msgstr ""
-msgid "part"
-msgstr "punkt"
+msgid "Failed to assign AB player for {{pieceNames}}"
+msgstr ""
-msgid "Set segment as Next"
-msgstr "Sett tittel som Neste: Starter på neste Take"
+msgid "Failed to assign non-critical AB player for {{pieceNames}}"
+msgstr ""
-msgid "Queue segment"
-msgstr "Cue tittel: Starter når aktiv tittel er ferdig"
+msgid "Failed to compare config changes"
+msgstr ""
-msgid "Clear queued segment"
-msgstr "Fjern cuet tittel"
+msgid "Failed to copy Show Style Variant: {{errorMessage}}"
+msgstr ""
-msgid "Set this part as Next"
-msgstr "Sett dette punktet som neste: Starter på neste Take"
+msgid "Failed to delete Show Style Variant: {{errorMessage}}"
+msgstr ""
-msgid "Set Next Here"
-msgstr "Sett Neste her"
+msgid ""
+"Failed to execute {{actionName}} on device: \"{{deviceName}}\": "
+"{{errorMessage}}"
+msgstr ""
-msgid "Play from Here"
-msgstr "Spill av herfra"
+msgid "Failed to execute take"
+msgstr "Kunne ikke gjennomføre Take"
-msgid "Switch to Storyboard mode"
-msgstr "Bytt til storyboard-visning"
+msgid "Failed to generate adlib rundown! {{message}}"
+msgstr ""
-msgid "Zoom Out"
-msgstr "Zoom Ut"
+msgid "Failed to import new Show Style Variants: {{errorMessage}}"
+msgstr ""
-msgid "Show All"
-msgstr "Vis alle"
+msgid ""
+"Failed to import Show Style Variant {{name}}. Make sure it is not already "
+"imported."
+msgstr ""
-msgid "Zoom In"
-msgstr "Zoom inn"
+msgid "Failed to remove all Show Style Variants: {{errorMessage}}"
+msgstr ""
-msgid "Parts Duration"
-msgstr "Varighet for del"
+msgid "Failed to reorderShow Style Variant: {{errorMessage}}"
+msgstr ""
-msgid "Unknown"
-msgstr "Ukjent"
+msgid "Failed to reset OAuth credentials: {{errorMessage}}"
+msgstr "Nullstiling av OAuth credentials feilet: {{errorMessage}}"
-msgid "Good"
-msgstr "Bra"
+msgid "Failed to restart CasparCG on device: \"{{deviceName}}\": {{errorMessage}}"
+msgstr "Omstart av CasparCG på \"{{deviceName}}\" feilet: {{errorMessage}}"
-msgid "Minor Warning"
-msgstr "Mindre advarsel (avvik)"
+msgid "Failed to restart device: \"{{deviceName}}\": {{errorMessage}}"
+msgstr "Kunne ikke starte \"{{deviceName}}\" på nytt: {{errorMessage}}"
-msgid "Warning"
-msgstr "Advarsel"
+msgid "Failed to update blueprints: {{errorMessage}}"
+msgstr "Oppdatering av blueprints feilet: {{errorMessage}}"
-msgid "Bad"
-msgstr "Feil"
+msgid "Failed to update config: {{errorMessage}}"
+msgstr "Oppdatering av konfigurasjon feilet: {{errorMessage}}"
-msgid "Fatal"
-msgstr "Kritisk"
+msgid "Failed to upload OAuth credentials: {{errorMessage}}"
+msgstr "Opplasting av OAuth credentials feilet: {{errorMessage}}"
-msgid "Connected"
-msgstr "Tilkoblet"
+msgid "Failed to upload shelf layout: {{errorMessage}}"
+msgstr "Opplasting av layout feilet: {{errorMessage}}"
-msgid "Disconnected"
-msgstr "Frakoblet"
+msgid "Failed to validate config"
+msgstr ""
-msgid "MOS Gateway"
-msgstr "MOS-gateway"
+msgid "Fatal"
+msgstr "Kritisk"
-msgid "Spreadsheet Gateway"
-msgstr "Spreadsheet-gateway"
+msgid "File path to the folder of the local folder"
+msgstr "Sti til lokale mappe"
-msgid "Play-out Gateway"
-msgstr "Playout-gateway"
+msgid "Filter by Output Layer"
+msgstr ""
-msgid "Media Manager"
-msgstr "Media Manager"
+msgid "Filter by Source Layer"
+msgstr ""
-msgid "Unknown Device"
-msgstr "Ukjent enhet"
+msgid "Filter disabled"
+msgstr "Filter deaktivert"
-msgid "Delete this Studio?"
-msgstr "Slett dette studioet?"
+msgid "Filter Disabled"
+msgstr "Filter deaktivert"
-msgid "Are you sure you want to delete the studio \"{{studioId}}\"?"
-msgstr "Er du sikker på at du vil slette studioet \"{{studioId}}\"?"
+msgid "Filter..."
+msgstr ""
-msgid "Delete this Show Style?"
-msgstr "Slett denne showstylen?"
+msgid "Filters"
+msgstr "Filtre"
-msgid "Are you sure you want to delete the show style \"{{showStyleId}}\"?"
-msgstr "Er du sikker på at du vil slette showstylen \"{{showStyleId}}\"?"
+msgid "Find Trigger..."
+msgstr "Finn utløser..."
-msgid "Delete this Blueprint?"
-msgstr "Slett dette blueprintet?"
+msgid "Fine scroll"
+msgstr ""
-msgid "Are you sure you want to delete the blueprint \"{{blueprintId}}\"?"
-msgstr "Er du sikker på at du vil slette blueprintet \"{{blueprintId}}\"?"
+msgid "Fix Up Config"
+msgstr ""
-msgid "Remove this Device?"
-msgstr "Fjern denne enheten?"
+msgid "Fixed duration in Segment header"
+msgstr "Låst varighet i tittelheader"
msgid ""
-"Are you sure you want to remove the device \"{{deviceName}}\" and all of "
-"it's sub-devices?"
+"Fixing this problem requires a restart to the host device. Are you sure you "
+"want to restart {{device}}?\n"
+"(This might affect output)"
msgstr ""
-"Er du sikker på at du vil fjerne enheten \"{{deviceName}}\" og alle dens "
-"underenheter?"
+"Feilretting krever en omstart av {{device}}. Er du sikker på at du ønsker å "
+"starte enheten på nytt?(Dette kan påvirke gjennomføring av en pågående "
+"sending)"
-msgid "Studios"
-msgstr "Studio"
+msgid "Floated Adlib"
+msgstr ""
-msgid "Unnamed Studio"
-msgstr "Studio uten navn"
+msgid "Floated AdLib"
+msgstr "Adlib satt på vent"
-msgid "Show Styles"
-msgstr "Showstyle"
+msgid "Folder path"
+msgstr "Mappesti"
-msgid "Unnamed Show Style"
-msgstr "Showstyle uten navn"
+msgid "Folder path to shared folder"
+msgstr "Sti til delt mappe"
-msgid "Source Layers"
-msgstr "Kildelag"
+msgid "Following"
+msgstr ""
-msgid "Output Channels"
-msgstr "Utgangskanal"
+msgid "Font size"
+msgstr ""
-msgid "Blueprints"
-msgstr "Blueprints"
+msgid "for {{name}} fix skipped successfully"
+msgstr ""
-msgid "Unnamed blueprint"
-msgstr "Blueprint uten navn"
+msgid "Force"
+msgstr "Tving"
-msgid "Type"
-msgstr "Type"
+msgid "Force (deactivate others)"
+msgstr "Tving (deaktiver andre)"
-msgid "Version"
-msgstr "Versjon"
+msgid "Force Migration"
+msgstr "Tving migrering"
-msgid "Devices"
-msgstr "Enheter"
+msgid "Force Migration (unsafe)"
+msgstr "Tving migrering (utrygt)"
-msgid "Tools"
-msgstr "Verktøy"
+msgid "Force the Multi-gateway-mode"
+msgstr "Tving multigateway-modus"
-msgid "Core System settings"
-msgstr "Systeminstillinger for Core"
+msgid "Forward"
+msgstr ""
-msgid "Upgrade Database"
-msgstr "Oppgrader databasen"
+msgid "Forward: {{forward}}"
+msgstr ""
-msgid "Manage Snapshots"
-msgstr "Behandle snapshots"
+msgid "Found no future pieces"
+msgstr ""
-msgid "System Settings"
-msgstr "Systeminstillinger"
+msgid "Frame Rate"
+msgstr "Framerate"
-msgid "Update Blueprints?"
-msgstr "Oppdater blueprints?"
+msgid "From"
+msgstr ""
-msgid "Update"
-msgstr "Oppdater"
+msgid "Full System Snapshot"
+msgstr "Fullt systemsnapshot"
-msgid ""
-"Are you sure you want to update the blueprints from the file "
-"\"{{fileName}}\"?"
+msgid "fullscreen"
msgstr ""
-"Er du sikker på at du vil oppdatere blueprints fra filen \"{{fileName}}\"?"
-
-msgid "Blueprints updated successfully."
-msgstr "Blueprints ble oppdatert."
-msgid "Replace Blueprints?"
-msgstr "Erstatte blueprints?"
+msgid "Gateway"
+msgstr ""
-msgid "Replace"
-msgstr "Erstatt"
+msgid "General"
+msgstr ""
-msgid ""
-"Are you sure you want to replace the blueprints with the file "
-"\"{{fileName}}\"?"
+msgid "Generated URL"
msgstr ""
-"Er du sikker på at du vil erstatte blueprints fra filen \"{{fileName}}\"?"
-msgid "Failed to update blueprints: {{errorMessage}}"
-msgstr "Oppdatering av blueprints feilet: {{errorMessage}}"
+msgid "Generating restart token"
+msgstr ""
-msgid "Assigned Show Styles:"
-msgstr "Tilordnede showstyles:"
+msgid "Generic Properties"
+msgstr "Generelle egenskaper"
-msgid "This Blueprint is not being used by any Show Style"
-msgstr "Dette blueprintet er ikke i bruk av noen showstyles"
+msgid "Generic Script"
+msgstr "Generisk manus"
-msgid "Assigned Studios:"
-msgstr "Tilordnede studio:"
+msgid "Getting Started"
+msgstr "Kom i gang"
-msgid "This Blueprint is not compatible with any Studio"
-msgstr "Dette blueprintet er ikke kompatibel med noe studio"
+msgid "Global AdLib"
+msgstr "Globale adliber"
-msgid "Unassign"
-msgstr "Fjern tilordning"
+msgid "Global AdLibs"
+msgstr "Globale adliber"
-msgid "Assign"
-msgstr "Tilordne"
+msgid "Go to Live"
+msgstr ""
-msgid "Blueprint ID"
-msgstr "Blueprint-id"
+msgid "Go to On Air line"
+msgstr "Gå til OnAir-posisjon"
-msgid "Blueprint Name"
-msgstr "Blueprintnavn"
+msgid "Go to On Air Segment"
+msgstr ""
-msgid "No name set"
-msgstr "Navn ikke definert"
+msgid "Good"
+msgstr "Bra"
-msgid "Blueprint Type"
-msgstr "Blueprinttype"
+msgid "Graphics"
+msgstr "Grafikk"
-msgid "Upload a new blueprint"
-msgstr "Last opp et nytt blueprint"
+msgid "GUI"
+msgstr "Brukergrensesnitt"
-msgid "Last modified"
-msgstr "Sist endret"
+msgid "he default state of this Route Set"
+msgstr ""
-msgid "Blueprint Id"
-msgstr "Blueprint-id"
+msgid "Heading"
+msgstr ""
-msgid "Blueprint Version"
-msgstr "Blueprintversjon"
+msgid "Height"
+msgstr "Høyde"
-msgid "Disable version check"
-msgstr "Deaktiver versjonsjekk"
+msgid "Help & Support"
+msgstr "Hjelp og brukerstøtte"
-msgid "Upload Blueprints"
-msgstr "Last opp blueprints"
+msgid "Hide"
+msgstr ""
-msgid "OAuth credentials succesfully uploaded."
-msgstr "Opplasting av OAuth credentials var vellykket."
+msgid "Hide Countdown"
+msgstr "Skjul nedtelling"
-msgid "Failed to upload OAuth credentials: {{errorMessage}}"
-msgstr "Opplasting av OAuth credentials feilet: {{errorMessage}}"
+msgid "Hide default AdLib Start/Execute options"
+msgstr ""
-msgid "OAuth credentials successfuly reset"
-msgstr "OAuth credentials nullstilt"
+msgid "Hide Diff"
+msgstr "Skjul forskjell"
-msgid "Failed to reset OAuth credentials: {{errorMessage}}"
-msgstr "Nullstiling av OAuth credentials feilet: {{errorMessage}}"
+msgid "Hide Diff Label"
+msgstr "Skjul etikett for forskjell"
-msgid "Reset Authentication"
-msgstr "Nullstill autentisering"
+msgid "Hide duplicated AdLibs"
+msgstr "Skjul dupliserte adliber"
-msgid "Application credentials"
-msgstr "Brukernavn/passord (Application Credentials)"
+msgid "Hide End Time"
+msgstr "Skjul sendeslutt"
-msgid "Access token"
-msgstr "Tilgangskode (Access Token)"
+msgid "Hide Expected End timing when a break is next"
+msgstr "Gjem nedtelling til forventet slutt når neste punkt er en pause"
-msgid "Click on the link below and accept the permissions request."
-msgstr "Klikk på linken under og godta permissions-forespørselen"
+msgid "Hide for dynamically inserted parts"
+msgstr "Skjul for dynamisk innsatte deler"
-msgid "Waiting for gateway to generate URL..."
-msgstr "Venter på at gateway genererer URL..."
+msgid "Hide Label"
+msgstr "Skjul etikett"
-msgid "Only Match Global AdLibs"
-msgstr "Vis kun globale adliber"
+msgid "Hide over/under timer"
+msgstr ""
-msgid "Name"
-msgstr "Navn"
+msgid "Hide Panel from view"
+msgstr "Ikke vis dette panelet"
-msgid "Display Style"
-msgstr "Visningsstil"
+msgid "Hide Planned End Label"
+msgstr "Skjul etikett for planlagt slutt"
-msgid "Show thumbnails next to list items"
-msgstr "Vis miniatyrbilder ved siden av listeelementer"
+msgid "Hide Planned Start"
+msgstr "Skjul planlagt start"
-msgid "Button width scale factor"
-msgstr "Breddeskala for knapp"
+msgid "Hide Rundown Divider"
+msgstr "Skjul kjøreplanskille"
-msgid "Button height scale factor"
-msgstr "Høydeskala for knapp"
+msgid "Hide rundown divider between rundowns in a playlist"
+msgstr "Skjul skille mellom kjøreplaner i en spilleliste"
-msgid "Only Display AdLibs from Current Segment"
-msgstr "Vis kun adliber fra gjeldende tittel"
+msgid "Hide scrollbar"
+msgstr ""
-msgid "Include Global AdLibs"
-msgstr "Inkluder globale adliber"
+msgid "Hold"
+msgstr "Hold"
-msgid "Filter Disabled"
-msgstr "Filter deaktivert"
+msgid "Hostname or IP address of the Atem"
+msgstr ""
-msgid "Include Clear Source Layer in Ad-Libs"
-msgstr "Ta med \"Tøm kildelag\" i adliber"
+msgid "Hotkey"
+msgstr "Hurtigtast"
-msgid "Source Layer Types"
-msgstr "Kildelagstyper"
+msgid "How did the show go?"
+msgstr ""
-msgid "Filter disabled"
-msgstr "Filter deaktivert"
+msgid ""
+"How many of the transactions to monitor. Set to -1 to log nothing (max "
+"performance), 0.5 to log 50% of the transactions, 1 to log all transactions"
+msgstr ""
+"Antall transaksjoner som overvåkes. Sett verdien til -1 for å ikke logge "
+"noe (maks ytelse), til 0.5 for å logge halvparten av transaksjonene eller "
+"til 1 for å logge alle transaksjonene"
-msgid "Label contains"
-msgstr "Etikett inneholder"
+msgid ""
+"How much preparation time to add to global pieces on the timeline before "
+"they are played"
+msgstr ""
-msgid "Tags must contain"
-msgstr "Tagger må inneholde"
+msgid "HTML that will be shown in the Support Panel"
+msgstr "HTML-kode som vil bli vist i supportpanelet"
-msgid "Hide Panel from view"
-msgstr "Ikke vis dette panelet"
+msgid "Human-readable name of the layer"
+msgstr "Leservennlig lagnavn"
-msgid "Show panel as a timeline"
-msgstr "Vis panel som en tidslinje"
+msgid "Icon"
+msgstr "Ikon"
-msgid "Enable search toolbar"
-msgstr "Aktiver søkeverktøy"
+msgid "Icon color"
+msgstr "Ikonfarge"
-msgid "Overflow horizontally"
-msgstr "Horisontal overflyt"
+msgid "Id"
+msgstr "Id"
-msgid "Display Take buttons"
-msgstr "Vis Take-knapp"
+msgid "ID"
+msgstr ""
-msgid "Queue all adlibs"
-msgstr "Cue alle adliber"
+msgid ""
+"ID of the device (corresponds to the device ID in the peripheralDevice "
+"settings)"
+msgstr "Enhets-id (korresponderer med enhets-id under enhetsinnstillinger)"
-msgid "Toggle AdLibs on single mouse click"
-msgstr "Veksle mellom adliber med enkelt museklikk"
+msgid "ID of the timeline-layer to map to some output"
+msgstr "Lag-id for tidslinjelaget som skal mappes til en utgang"
-msgid "Current part can contain next pieces"
+msgid "Idempotency-Key is already used"
msgstr ""
-msgid "Indicate only one next piece per source layer"
+msgid "Idempotency-Key is missing"
msgstr ""
-msgid "Hide duplicated AdLibs"
-msgstr "Skjul dupliserte adliber"
+msgid "If set, only one Route Set will be active per exclusivity group"
+msgstr ""
+"Bare en omkoblingsgruppe være aktiv per eksklusivitetsgruppe når dette er "
+"krysset av for"
msgid ""
-"Picks the first instance of an adLib per rundown, identified by uniqueness Id"
+"If set, Package Manager assumes that the source doesn't support HEAD "
+"requests and will use GET instead. If false, HEAD requests will be sent to "
+"check availability."
msgstr ""
-"Velger den første forekomsten av en adlib i hver kjøreplan, identifisert av "
-"unik id"
-msgid "URL"
-msgstr "Adresse (url)"
-
-msgid "Display Rank"
-msgstr "Rangering for visning"
+msgid "Ignore and apply"
+msgstr ""
-msgid "Role"
-msgstr "Rolle"
+msgid "Ignore QuickLoop"
+msgstr ""
-msgid "Adlib Rank"
-msgstr "Adlib-rang"
+msgid "Ignoring take as playing part has changed since TAKE was requested."
+msgstr ""
-msgid "Place label below panel"
-msgstr "Plasser etikett under panel"
+msgid "Ignoring TAKES that are too quick after eachother ({{duration}} ms)"
+msgstr ""
-msgid "Disabled"
-msgstr "Deaktivert"
+msgid "Import"
+msgstr "Importer"
-msgid "Show segment name"
-msgstr "Vis tittelens navn"
+msgid "Import error: {{errorMessage}}"
+msgstr ""
-msgid "Show part title"
-msgstr "Vis delens tittel"
+msgid "Import file?"
+msgstr ""
-msgid "Hide for dynamically inserted parts"
-msgstr "Skjul for dynamisk innsatte deler"
+msgid "Importing an AdLib to the Bucket"
+msgstr ""
-msgid "Planned Start Text"
-msgstr "Tekst for planlagt start"
+msgid "In"
+msgstr "Inn"
-msgid "Text to show above show start time"
-msgstr "Tekst som vises over klokkeslett for sendestart"
+msgid "IN"
+msgstr ""
-msgid "Hide Diff"
-msgstr "Skjul forskjell"
+msgid "in {{days}} days, {{hours}} h {{minutes}} min {{seconds}} s"
+msgstr "om {{days}} dager, {{hours}} t {{minutes}} min {{seconds}} s"
-msgid "Hide Planned Start"
-msgstr "Skjul planlagt start"
+msgid "in {{hours}} h {{minutes}} min {{seconds}} s"
+msgstr "om {{hours}} t {{minutes}} min {{seconds}} s"
-msgid "Planned End text"
-msgstr "Tekst for planlagt slutt"
+msgid "in {{minutes}} min {{seconds}} s"
+msgstr "om {{minutes}} min {{seconds}} s"
-msgid "Text to show above show end time"
-msgstr "Tekst som vises over klokkeslett for sendeslutt"
+msgid "in {{seconds}} s"
+msgstr "om {{seconds}} s"
-msgid "Hide Planned End Label"
-msgstr "Skjul etikett for planlagt slutt"
+msgid "In rehearsal"
+msgstr ""
-msgid "Hide Diff Label"
-msgstr "Skjul etikett for forskjell"
+msgid "Include Clear Source Layer in Ad-Libs"
+msgstr "Ta med \"Tøm kildelag\" i adliber"
-msgid "Hide Countdown"
-msgstr "Skjul nedtelling"
+msgid "Include Global AdLibs"
+msgstr "Inkluder globale adliber"
-msgid "Hide End Time"
-msgstr "Skjul sendeslutt"
+msgid "Indicate only one next piece per source layer"
+msgstr ""
-msgid "Hide Label"
-msgstr "Skjul etikett"
+msgid "Ingest Devices"
+msgstr ""
-msgid "Script Source Layers"
+msgid "Ingest devices are needed to create rundowns"
msgstr ""
-msgid "Source layers containing script"
+msgid "Ingest from Snapshot"
msgstr ""
-msgid "Require Piece on Source Layer"
+msgid "Ingest Rundown Status"
msgstr ""
-msgid "Text"
-msgstr "Tekst"
+msgid "Ingest Rundown Statuses"
+msgstr ""
-msgid "Show Rundown Name"
-msgstr "Vis kjøreplannavn"
+msgid "Input Devices"
+msgstr ""
-msgid "Segment"
-msgstr "Tittel"
+msgid "Input devices allow you to trigger Sofie actions remotely"
+msgstr ""
-msgid "Part"
-msgstr "Del"
+msgid "Installation name"
+msgstr "Installasjonsnavn"
-msgid "Show Piece Icon Color"
+msgid "Internal Error generating RundownPlaylist"
msgstr ""
-msgid "Use color of primary piece as background of panel"
-msgstr ""
+msgid "Internal ID"
+msgstr "Intern-id"
-msgid "Box color"
-msgstr ""
+msgid "Invalid AdLib"
+msgstr "Ugyldig adlib"
-msgid "Also Require Source Layers"
+msgid "Invalid blueprint: \"{{blueprintId}}\""
msgstr ""
msgid ""
-"Specify additional layers where at least one layer must have an active piece"
-msgstr ""
-
-msgid "Require All Additional Source Layers"
+"Invalid config preset for blueprint: \"{{configPresetId}}\" "
+"({{blueprintId}})"
msgstr ""
-msgid "All additional source layers must have active pieces"
+msgid "Invert joystick"
msgstr ""
-msgid "X"
-msgstr "X"
-
-msgid "Y"
-msgstr "Y"
-
-msgid "Width"
-msgstr "Bredde"
+msgid "Is a Guest Input"
+msgstr "Er en gjesteinngang"
-msgid "Height"
-msgstr "Høyde"
+msgid "Is a Live Remote Input"
+msgstr "Er en RM"
-msgid "Scale"
-msgstr "Skala"
+msgid "Is collapsed by default"
+msgstr "Er minimert som standard"
-msgid "Custom Classes"
-msgstr "Tilpassede klasser"
+msgid "Is flattened"
+msgstr "Er slått sammen"
-msgid "Device ID"
-msgstr "Enhets-id"
+msgid "Is hidden"
+msgstr "Er skjult"
-msgid "Device Type"
-msgstr "Enhetstype"
+msgid "Is Immutable"
+msgstr ""
-msgid "Remove this item?"
-msgstr "Fjern dette elementet?"
+msgid "Is PGM Output"
+msgstr "Er programutgang"
-msgid "Are you sure you want to remove {{type}} \"{{deviceId}}\"?"
-msgstr "Er du sikker på at du vil fjerne enheten {{type}} \"{{deviceId}}\"?"
+msgid "ISA URLs"
+msgstr "ISA-adresse (url)"
-msgid "Attached Subdevices"
-msgstr "Tilkoblede underenheter"
+msgid "Job Status"
+msgstr ""
-msgid "Expected End text"
-msgstr "Tekst for forventet slutt"
+msgid "Just now"
+msgstr "Nå"
-msgid "Text to show above countdown to end of show"
-msgstr "Tekst som vises over nedtelling til forventet slutt"
+msgid "Key"
+msgstr "Key"
-msgid "Hide Expected End timing when a break is next"
-msgstr "Gjem nedtelling til forventet slutt når neste punkt er en pause"
+msgid "Keyboard"
+msgstr ""
msgid ""
-"While there are still breaks coming up in the show, hide the Expected End "
-"timers"
+"Keyboard shortcuts and Stream Deck buttons will not work while filling out "
+"the form!"
msgstr ""
-"Gjem nedtelling til forventet slutt mens det fremdeles er pauser igjen i "
-"sendingen"
-msgid "Show next break timing"
-msgstr "Vis tid for neste pause"
+msgid "Kill (debug)"
+msgstr "Kill (debug)"
-msgid "Whether to show countdown to next break"
-msgstr "Om nedtelling til neste pause skal vises"
+msgid "Label"
+msgstr "Etikett"
-msgid "Last rundown is not break"
-msgstr "Siste kjøreplan er ingen pause"
+msgid "Label contains"
+msgstr "Etikett inneholder"
-msgid "Don't treat the end of the last rundown in a playlist as a break"
-msgstr ""
-"Ikke behandle slutten av den siste kjøreplanen i en spilleliste som en pause"
+msgid "Last"
+msgstr "Forrige"
-msgid "Next Break text"
-msgstr "Tekst for neste pause"
+msgid "Last {{layerName}}"
+msgstr "Siste {{layerName}}"
-msgid "Text to show above countdown to next break"
-msgstr "Tekst som vises over nedtelling til neste pause"
+msgid "Last modified"
+msgstr "Sist endret"
-msgid "Expose as user selectable layout"
-msgstr "Gjør tilgjengelig som brukervalgt layout"
+msgid "Last rundown is not break"
+msgstr "Siste kjøreplan er ingen pause"
-msgid "Shelf Layout"
-msgstr "Layouter for skuffen"
+msgid "Last seen"
+msgstr "Sist sett"
-msgid "Mini Shelf Layout"
-msgstr "Layouter for miniskuff"
+msgid "Last Seen"
+msgstr ""
-msgid "Rundown Header Layout"
-msgstr "Layout for kjøreplanens topptekst"
+msgid "Last update"
+msgstr "Nyeste oppdatering"
-msgid "Live line countdown requires Source Layer"
-msgstr ""
+msgid "Last updated"
+msgstr "Sist oppdatert"
-msgid ""
-"One of these source layers must have an active piece for the live line "
-"countdown to be show"
+msgid "Layer does not allow sticky pieces!"
msgstr ""
-msgid "Hide Rundown Divider"
-msgstr "Skjul kjøreplanskille"
+msgid "Layer ID"
+msgstr "Lag-id"
-msgid "Hide rundown divider between rundowns in a playlist"
-msgstr "Skjul skille mellom kjøreplaner i en spilleliste"
+msgid "Layer Mappings"
+msgstr "Lagmappinger"
-msgid "Show Breaks as Segments"
-msgstr "Vis pauser som titler"
+msgid "Layer Name"
+msgstr "Lagnavn"
-msgid "Segment countdown requires source layer"
-msgstr "Nedtelling for tittel krever kildelag"
+msgid "Leave Unsynced"
+msgstr "Behold ikke-synkronisert kjøreplan"
+
+msgid "Less than a minute ago"
+msgstr "Under ett minutt siden"
+
+msgid "Less than five minutes ago"
+msgstr "Under fem minutter siden"
-msgid ""
-"One of these source layers must have a piece for the countdown to segment on-"
-"air to be show"
+msgid "Lighting"
msgstr ""
-"Et av disse kildelagene må ha et element for at nedtelling til tittelen er "
-"OnAir vises"
-msgid "Fixed duration in Segment header"
-msgstr "Låst varighet i tittelheader"
+msgid "Limit"
+msgstr "Grense"
-msgid ""
-"The segment duration in the segment header always displays the planned "
-"duration instead of acting as a counter"
+msgid "Live line countdown requires Source Layer"
msgstr ""
-"Tittelens varighet i tittelheaderen vil alltid vise den planlagte varigheten "
-"i stedet for å telle ned"
-
-msgid "Select visible Source Layers"
-msgstr "Velg synlige kildelag"
-msgid "Select visible Output Groups"
-msgstr "Velg synlig utgangsgruppe"
+msgid "Live Speak"
+msgstr "STK"
-msgid "Display piece duration for source layers"
+msgid "Loading"
msgstr ""
-msgid "Piece on selected source layers will have a duration label shown"
+msgid "Loading..."
msgstr ""
-msgid "Expose layout as a standalone page"
-msgstr "Gjør layout tilgjengelig som en selvstendig side"
-
-msgid "Open shelf by default"
-msgstr "Åpne skuff som standard"
+msgid "Local"
+msgstr "Lokal"
-msgid "Default shelf height"
-msgstr "Standard høyde for skuff"
+msgid "Local Time"
+msgstr "Lokal tid"
-msgid "Show Buckets"
-msgstr "Vis bøtter"
+msgid "Logging level"
+msgstr "Loggenivå"
-msgid "Show Inspector"
+msgid "Logo"
msgstr ""
-msgid "Disable Context Menu"
-msgstr "Skru av kontekstmeny"
-
-msgid "This action has an invalid combination of filters"
-msgstr "Denne handlingen har en ugyldig kombinasjon av filtre"
-
-msgid "Use Trigger Mode"
+msgid "Lookahead Maximum Search Distance (Undefined = {{limit}})"
msgstr ""
-msgid "Trigger Mode"
+msgid "Lookahead Mode"
+msgstr "Lookahead-modus"
+
+msgid "Lookahead Target Objects (Undefined = 1)"
msgstr ""
-msgid "Force"
-msgstr "Tving"
+msgid "Loop End"
+msgstr "Slutt for loop"
-msgid "Rehearsal"
-msgstr "Testmodus"
+msgid "Loop Start"
+msgstr "Start for loop"
-msgid "Mode: {{triggerMode}}"
+msgid "Loops to Start"
msgstr ""
-msgid "Undo"
-msgstr "Angre"
+msgid "Lower Third"
+msgstr "Super"
-msgid "Segments: {{delta}}"
-msgstr "Segmenter: {{delta}}"
+msgid "Manage Snapshots"
+msgstr "Behandle snapshots"
-msgid "Parts: {{delta}}"
-msgstr "Deler: {{delta}}"
+msgid "Mapping cannot be reset as it has no default values"
+msgstr ""
-msgid "Open"
-msgstr "Åpne"
+msgid "Mapping Type"
+msgstr ""
-msgid "Toggle"
-msgstr "Veklse"
+msgid "Mappings"
+msgstr "Lagmappinger"
-msgid "On"
-msgstr "På"
+msgid "Margin (%)"
+msgstr ""
-msgid "Forward: {{forward}}"
+msgid "Maximum register limit"
msgstr ""
-msgid "Activate Rundown"
-msgstr "Aktiver kjøreplan"
+msgid "Media"
+msgstr "Media"
-msgid "Ad-Lib"
-msgstr "Adlib"
+msgid "Media Preview URL"
+msgstr "Forhåndsvisnings-URL"
-msgid "Deactivate Rundown"
-msgstr "Deaktiver kjøreplan"
+msgid "Media Status"
+msgstr ""
-msgid "Disable next Piece"
-msgstr "Skip neste element"
+msgid "Media Type"
+msgstr ""
-msgid "Move Next"
-msgstr "Skip neste"
+msgid "Memory troubleshooting"
+msgstr ""
-msgid "Reload NRCS Data"
-msgstr "Last inn MOS-data på nytt"
+msgid "Menu"
+msgstr ""
-msgid "Resync with NRCS"
-msgstr "Synkroniser med ENPS"
+msgid "Message"
+msgstr "Melding"
-msgid "Shelf"
-msgstr "Skuff"
+msgid "Message Queue"
+msgstr "Meldingskø"
-msgid "Rewind Segments to start"
-msgstr "Sett alle segmenter tilbake til start"
+msgid "Message shown to users in the Evaluations form"
+msgstr ""
-msgid "Go to On Air line"
-msgstr "Gå til OnAir-posisjon"
+msgid "Messages"
+msgstr "Meldinger"
-msgid "Show entire On Air Segment"
-msgstr "Vis hele tittelen som er OnAir"
+msgid "Method"
+msgstr "Metode"
-msgid "Queue AdLib from Minishelf"
+msgid "Method ${method}"
msgstr ""
-msgid "Force (deactivate others)"
-msgstr "Tving (deaktiver andre)"
-
-msgid "Move Segments"
-msgstr "Skip segmenter"
-
-msgid "By Segments"
+msgid "MIDI Pedal"
msgstr ""
-msgid "Move Parts"
-msgstr "Skip del"
+msgid "Migrate database"
+msgstr "Migrer database"
-msgid "By Parts"
-msgstr ""
+msgid "Migrations"
+msgstr "Migrering"
-msgid "State"
-msgstr "Tilstand"
+msgid "Mini Shelf Layout"
+msgstr "Layouter for miniskuff"
-msgid "Forward"
+msgid "Mini Shelf Layouts"
msgstr ""
-msgid "Action"
-msgstr "Handling"
-
-msgid "Ad-Lib Action"
-msgstr "Adlib-handling"
+msgid "Minimum register limit"
+msgstr ""
-msgid "Clear Source Layer"
-msgstr "Tøm kildelag"
+msgid "Minimum Take Span"
+msgstr ""
-msgid "Sticky Piece"
-msgstr "Element er sticky"
+msgid "Minor Warning"
+msgstr "Mindre advarsel (avvik)"
-msgid "Global AdLibs"
-msgstr "Globale adliber"
+msgid "Mirror horizontally"
+msgstr ""
-msgid "Label"
-msgstr "Etikett"
+msgid "Mirror vertically"
+msgstr ""
-msgid "Limit"
-msgstr "Grense"
+msgid "Mock Piece Content Status"
+msgstr ""
-msgid "Output Layer"
-msgstr "Utgangslag"
+msgid "Mode: {{triggerMode}}"
+msgstr ""
-msgid "Pick"
-msgstr "Plukk"
+msgid "Modify Shift register"
+msgstr ""
-msgid "Pick last"
-msgstr "Plukk siste"
+msgid "Modifying Bucket"
+msgstr ""
-msgid "Source Layer"
-msgstr "Kildelag"
+msgid "Modifying Bucket AdLib"
+msgstr ""
-msgid "Source Layer Type"
-msgstr "Kildelagstyper"
+msgid "Monitor blocked thread"
+msgstr ""
-msgid "Tag"
-msgstr "Tag"
+msgid "More documentation available at:"
+msgstr "Mer dokumentasjon er tilgjengelig på:"
-msgid "Not Global"
-msgstr "Ikke globale"
+msgid "More than 10 minutes ago"
+msgstr "Over 10 minutter siden"
-msgid "Only Global"
-msgstr "Bare globale"
+msgid "More than 2 hours ago"
+msgstr "Over 2 timer siden"
-msgid "OnAir"
-msgstr "OnAir"
+msgid "More than 30 minutes ago"
+msgstr "Over 30 minutter siden"
-msgid "Now active rundown"
-msgstr "Aktiv kjøreplan akkurat nå"
+msgid "More than 5 hours ago"
+msgstr "Over 5 timer siden"
-msgid "View"
-msgstr "Visning"
+msgid "More than a day ago"
+msgstr "Over en dag siden"
-msgid ""
-"Executes within the currently open Rundown, requires a Client-side trigger."
+msgid "Mouse"
msgstr ""
-"Utføers innenfor den valgte kjøreplanen, men trenger en utløser fra klienten."
-msgid "Select Action"
-msgstr "Velg handling"
-
-msgid ""
-"No Ad-Lib matches in the current state of Rundown: "
-"\"{{rundownPlaylistName}}\""
-msgstr ""
-"Ingen treff på adliber i nåværende tilstand for kjøreplanen: "
-"\"{{rundownPlaylistName}}\""
+msgid "Move Next"
+msgstr "Skip neste"
-msgid "No matching Rundowns available to be used for preview"
-msgstr "Ingen passende kjøreplaner tilgjengelige for forhåndsvisning"
+msgid "Move Next backwards"
+msgstr "Unskip neste"
-msgid "Multilingual description, editing will overwrite"
-msgstr "Endring vil overskrive flerspråklig beskrivelse"
+msgid "Move Next forwards"
+msgstr "Skip neste"
-msgid "Optional description of the action"
-msgstr "Valgfri beskrivelse av handlingen"
+msgid "Move Next to the following segment"
+msgstr "Skip til neste segment"
-msgid "Triggered Actions uploaded successfully."
-msgstr "Opplasting av handlingsutløsere var vellykket."
+msgid "Move Next to the previous segment"
+msgstr "Unskip neste segment"
-msgid "Triggered Actions failed to upload: {{errorMessage}}"
-msgstr "Opplasting av handlingsutløsere feilet: {{errorMessage}}"
+msgid "Move Parts"
+msgstr "Skip del"
-msgid "Append or Replace"
-msgstr "Legg til eller erstatt"
+msgid "Move Segments"
+msgstr "Skip segmenter"
-msgid ""
-"Do you want to append these to existing Action Triggers, or do you want to "
-"replace them?"
+msgid "Moving Next"
msgstr ""
-"Vil du legge disse til de nåværende handlingsutløserne, eller vil du "
-"erstatte dem?"
-msgid "Append"
-msgstr "Legg til"
+msgid "Multi-gateway-mode delay time"
+msgstr "Delaytid for multigateway-modus"
-msgid "Action Triggers"
-msgstr "Handlingsutløsere"
+msgid "Multilingual description, editing will overwrite"
+msgstr "Endring vil overskrive flerspråklig beskrivelse"
-msgid "Find Trigger..."
-msgstr "Finn utløser..."
+msgid "My name is {{name}}"
+msgstr "Mitt navn er {{name}}"
-msgid "No matching Action Trigger."
-msgstr "Fikk ikke treff blant handlingsutløsere."
+msgid "Name"
+msgstr "Navn"
-msgid "No Action Triggers set up."
-msgstr "Ingen handlingsutløsere er satt opp."
+msgid "Network address"
+msgstr ""
-msgid "System-wide"
-msgstr "Systemvid"
+msgid "Network Id"
+msgstr "Nettverk-id"
-msgid "Upload stored Action Triggers"
-msgstr "Last opp lagrede handlingsutløsere"
+msgid "New Bucket"
+msgstr "Ny bøtte"
-msgid "Download Action Triggers"
-msgstr "Last ned handlingsutløsere"
+msgid "New Filter"
+msgstr "Nytt filter"
-msgid "On release"
-msgstr "På slipp (\"Key up\")"
+msgid "New Layer"
+msgstr "Nytt lag"
-msgid "Empty"
-msgstr "Tom"
+msgid "New Layout"
+msgstr "Ny layout"
-msgid "Hotkey"
-msgstr "Hurtigtast"
+msgid "New Output"
+msgstr "Ny utgang"
-msgid "Trigger Type"
-msgstr "Type utløser"
+msgid "New Source"
+msgstr "Ny kilde"
-msgid "Failed to update config: {{errorMessage}}"
-msgstr "Oppdatering av konfigurasjon feilet: {{errorMessage}}"
+msgid "Next"
+msgstr "Neste"
-msgid "Export"
-msgstr "Eksporter"
+msgid "Next Break text"
+msgstr "Tekst for neste pause"
-msgid "Import"
-msgstr "Importer"
+msgid "Next Loop at"
+msgstr "Neste loop starter"
-msgid "true"
-msgstr "true"
+msgid "Next Part"
+msgstr "Neste del"
-msgid "false"
-msgstr "false"
+msgid "Next scheduled show"
+msgstr "Neste planlagte sending"
-msgid "{{count}} rows"
-msgstr "{{count}} rader"
+msgid "Next Segment"
+msgstr "Neste tittel"
-msgid "Value"
-msgstr "Verdi"
+msgid "Nintendo Joy-Con"
+msgstr ""
-msgid "Create"
-msgstr "Opprett"
+msgid "No"
+msgstr "Nei"
-msgid "Add config item"
-msgstr "Legg til konfigurasjonselement"
+msgid "No Action Triggers set up."
+msgstr "Ingen handlingsutløsere er satt opp."
-msgid "Add"
-msgstr "Legg til"
+msgid "No actions available"
+msgstr "Ingen kjøreplanvalg tilgjengelige i påsynsmodus"
+
+msgid ""
+"No Ad-Lib matches in the current state of Rundown: "
+"\"{{rundownPlaylistName}}\""
+msgstr ""
+"Ingen treff på adliber i nåværende tilstand for kjøreplanen: "
+"\"{{rundownPlaylistName}}\""
-msgid "Item"
-msgstr "Element"
+msgid "No camera-related source layers found"
+msgstr ""
-msgid "Delete this item?"
-msgstr "Slett dette elementet?"
+msgid "No changes"
+msgstr ""
-msgid "Are you sure you want to delete this config item \"{{configId}}\"?"
+msgid "No gateways are configured"
msgstr ""
-"Er du sikker på at du vil slette konfigurasjonselementet \"{{configId}}\"?"
-msgid "Blueprint Configuration"
-msgstr "Blueprintkonfigurasjon"
+msgid "No matching Action Trigger."
+msgstr "Fikk ikke treff blant handlingsutløsere."
-msgid "More settings specific to this studio can be found here"
-msgstr "Mer spesifikke innstillinger for dette studioet kan du finne her"
+msgid "No matching Rundowns available to be used for preview"
+msgstr "Ingen passende kjøreplaner tilgjengelige for forhåndsvisning"
-msgid "There was an error: {{error}}"
-msgstr "Det skjedde en feil: {{error}}"
+msgid "No Media matches this filter"
+msgstr ""
-msgid "Package Manager status"
-msgstr "Status fo pakkebehandler"
+msgid "No Media required by this system"
+msgstr ""
-msgid "Reload statuses"
-msgstr "Last inn status på nytt"
+msgid "No Media required for this Rundown"
+msgstr ""
-msgid "Updated"
-msgstr "Oppdatert"
+msgid "No migrations to apply"
+msgstr ""
-msgid "Package Manager"
-msgstr "Pakkebehandler"
+msgid "No name set"
+msgstr "Navn ikke definert"
-msgid "Expectation Manager"
+msgid "No Next point found, please set a part as Next before doing a TAKE."
msgstr ""
-msgid "Statistics"
-msgstr "Statistikk"
+msgid "No notifications"
+msgstr ""
-msgid "Times"
-msgstr "Tider"
+msgid "No output channels set"
+msgstr "Ingen utgangskanal definert"
-msgid "Connected Workers"
-msgstr "Tilkoblede arbeidere"
+msgid "No output layers available"
+msgstr ""
-msgid "Work-in-progress"
-msgstr "Pågående jobber"
+msgid "No PGM output"
+msgstr "Ingen programutgang"
-msgid "WorkForce"
-msgstr "Arbeiderstyrke"
+msgid "No problems"
+msgstr "Ingen problemer"
-msgid "Kill (debug)"
-msgstr "Kill (debug)"
+msgid "No schema has been provided for this mapping"
+msgstr ""
-msgid "Connected Expectation Managers"
+msgid "No source layers available"
msgstr ""
-msgid "Connected App Containers"
-msgstr "Tilkoblede app-kontainere"
+msgid "No source layers set"
+msgstr "Ingen kildelag definert"
msgid "No status loaded"
msgstr "Ingen status lastet"
-msgid "Peripheral Device is outdated"
-msgstr "Tilkoblet enhet er utdatert"
+msgid "None"
+msgstr "Ingen"
-msgid ""
-"The config UI is now driven by manifests fed by the device. This device "
-"needs updating to provide the configManifest to be configurable"
+msgid "Normal scrolling"
msgstr ""
-"Brukergrensesnittet for konfigurasjon drives nå av manifester matet fra "
-"enhetene. Denne enheten må oppdateres for å gjøre configManifest "
-"konfigurerbart"
-msgid "Are you sure you want to restart this device?"
-msgstr "Er du sikker på at du vil starte denne enheten på nytt?"
+msgid "Not Active"
+msgstr "Inaktiv"
-msgid "Restart this Device?"
-msgstr "Start denne enheten på nytt?"
+msgid "Not Connected"
+msgstr "Ikke tilkoblet"
-msgid ""
-"Check the console for troubleshooting data from device \"{{deviceName}}\"!"
-msgstr "Sjekk konsollen for feilsøkingsdata fra enheten \"{{deviceName}}\"!"
+msgid "Not defined"
+msgstr "Ikke definert"
-msgid ""
-"There was an error when troubleshooting the device: \"{{deviceName}}\": "
-"{{errorMessage}}"
+msgid "Not Global"
+msgstr "Ikke globale"
+
+msgid "Not in rehearsal"
msgstr ""
-"Det skjedde en feil under feilsøking av enhenten \"{{deviceName}}\": "
-"{{errorMessage}}"
-msgid "Generic Properties"
-msgstr "Generelle egenskaper"
+msgid "Not queueable"
+msgstr "Kan ikke settes i kø"
-msgid "Device Name"
-msgstr "Enhetsnavn"
+msgid "Not set"
+msgstr "Ikke angitt"
-msgid "Restart Device"
-msgstr "Start enheten på nytt"
+msgid "Note: Core needs to be restarted to apply these settings"
+msgstr "Merknad: Core må startes på nytt for å ta i bruk disse innstillingene"
-msgid "Troubleshoot"
-msgstr "Feilsøk"
+msgid "Notes"
+msgstr ""
-msgid "Reset Database Version"
-msgstr "Nullstill databaseversjon"
+msgid "Nothing to cleanup!"
+msgstr ""
-msgid ""
-"Are you sure you want to reset the database version?\n"
-"Only do this if you plan on running the migration right after."
+msgid "Nothing was found on layer!"
msgstr ""
-"Er du sikker på at du vil nullstille databaseversjonen?\n"
-"Bare gjør dette dersom du har tenkt å kjøre en migrering umiddelbart."
-msgid "Version for {{name}}: From {{fromVersion}} to {{toVersion}}"
-msgstr "Versjon for {{name}}: Fra {{fromVersion}} til {{toVersion}}"
+msgid "Now Active Rundown"
+msgstr ""
-msgid "Re-check"
-msgstr "Sjekk på nytt"
+msgid "NRCS Name"
+msgstr ""
-msgid "Reset Version to"
-msgstr "Nullstill versjon til"
+msgid "OAuth credentials successfully reset"
+msgstr ""
-msgid "Reset All Versions"
-msgstr "Nullstill alle versjoner"
+msgid "OAuth credentials successfully uploaded."
+msgstr ""
-msgid "Migrate database"
-msgstr "Migrer database"
+msgid "Off"
+msgstr "Av"
-msgid "All steps"
-msgstr "Alle trinn"
+msgid "Off-line devices"
+msgstr "Frakoblede enheter"
-msgid ""
-"The migration consists of several phases, you will get more options after "
-"you've this migration"
-msgstr ""
-"Migreringen består av flere faser, du vil få flere valg etter at du har "
-"kjørt denne migreringen"
+msgid "OK"
+msgstr "OK"
-msgid "The migration can be completed automatically."
-msgstr "Migreringen kan gjennomføres automatisk."
+msgid "On"
+msgstr "På"
-msgid "Run automatic migration procedure"
-msgstr "Kjør automatisk migreringsprosedyre"
+msgid "On Air"
+msgstr "On Air"
-msgid ""
-"The migration procedure needs some help from you in order to complete, see "
-"below:"
-msgstr ""
-"Migreringsprosedyren trenger litt hjelp fra deg for å kunne fullføre. Se "
-"under:"
+msgid "On Air At"
+msgstr "On Air klokken"
-msgid "Double-check Values"
-msgstr "Dobbeltsjekk verdier"
+msgid "On Air In"
+msgstr "On Air om"
-msgid "Are you sure the values you have entered are correct?"
-msgstr "Er du sikker på at verdiene du har oppgitt er korrekte?"
+msgid "On Air Start Time"
+msgstr "Sendestart"
-msgid "Run Migration Procedure"
-msgstr "Kjør migreringsprosedyre"
+msgid "On release"
+msgstr "På slipp (\"Key up\")"
-msgid "Warnings During Migration"
-msgstr "Advarsler under migrering"
+msgid "OnAir"
+msgstr "OnAir"
msgid ""
-"Please check the database related to the warnings above. If neccessary, you "
-"can"
+"One of these source layers must have a piece for the countdown to segment "
+"on-air to be show"
msgstr ""
-"Vennligst sjekk databasen tilknyttet advarslene over. Hvis nødvendig kan du"
-
-msgid "Force Migration"
-msgstr "Tving migrering"
+"Et av disse kildelagene må ha et element for at nedtelling til tittelen er "
+"OnAir vises"
msgid ""
-"Are you sure you want to force the migration? This will bypass the migration "
-"checks, so be sure to verify that the values in the settings are correct!"
+"One of these source layers must have an active piece for the live line "
+"countdown to be show"
msgstr ""
-"Er du sikker på at du vil tvinge migreringen? Dette gjør at du hopper over "
-"migreringskontrollene, så vær sikker på at verdiene oppgitt i innstillinger "
-"er korrekte!"
-
-msgid "Force Migration (unsafe)"
-msgstr "Tving migrering (utrygt)"
-
-msgid "The migration was completed successfully!"
-msgstr "Migreringen var vellykket!"
-
-msgid "All is well, go get a"
-msgstr "Alt er greit, gå og hent deg en"
-msgid "New Layout"
-msgstr "Ny layout"
-
-msgid "Button"
-msgstr "Knapp"
-
-msgid "New Filter"
-msgstr "Nytt filter"
-
-msgid "Delete layout?"
-msgstr "Slett layout?"
+msgid "Only custom trigger modes will be shown"
+msgstr ""
-msgid "Are you sure you want to delete the shelf layout \"{{name}}\"?"
-msgstr "Er du sikker på at du vil slette layouten \"{{name}}\"?"
+msgid "Only Display AdLibs from Current Segment"
+msgstr "Vis kun adliber fra gjeldende tittel"
-msgid "Action Buttons"
-msgstr "Handlingsknapper"
+msgid "Only Global"
+msgstr "Bare globale"
-msgid "Toggled Label"
+msgid "Only Match Global AdLibs"
+msgstr "Vis kun globale adliber"
+
+msgid ""
+"Only one rundown can be active at the same time. Currently active rundowns: "
+"{{names}}"
msgstr ""
-msgid "Icon"
-msgstr "Ikon"
+msgid "Only Pieces present in rundown are sticky"
+msgstr "Kun elementer tilstede i kjøreplanen er sticky"
-msgid "Icon color"
-msgstr "Ikonfarge"
+msgid "Open"
+msgstr "Åpne"
-msgid "Filters"
-msgstr "Filtre"
+msgid "Open Camera Screen"
+msgstr ""
-msgid "There are no filters set up yet"
-msgstr "Det er ikke satt opp noen filtre ennå"
+msgid "Open Fullscreen"
+msgstr ""
-msgid "Default Layout"
-msgstr "Standardlayout"
+msgid "Open Presenter Screen"
+msgstr ""
-msgid "Add {{filtersTitle}}"
-msgstr "Legg til {{filtersTitle}}"
+msgid "Open Prompter"
+msgstr ""
-msgid "Add filter"
-msgstr "Legg til filter"
+msgid "Open shelf by default"
+msgstr "Åpne skuff som standard"
-msgid "Add button"
-msgstr "Legg til knapp"
+msgid "Operating Mode"
+msgstr "Styringsmodus"
-msgid "Upload Layout?"
-msgstr "Last opp layout?"
+msgid "Operation"
+msgstr ""
-msgid "Upload"
-msgstr "Last opp"
+msgid "Optional description of the action"
+msgstr "Valgfri beskrivelse av handlingen"
msgid ""
-"Are you sure you want to upload the shelf layout from the file "
-"\"{{fileName}}\"?"
+"Optionally restrict AB channel display to specific output layers (e.g., "
+"only PGM). Leave empty to show for all output layers."
msgstr ""
-"Er du sikker på at du vil laste opp layout for skuff fra filen "
-"\"{{fileName}}\"?"
-msgid "Shelf layout uploaded successfully."
-msgstr "Opplastingen av layout for skuff var vellykket."
+msgid "Order 66?"
+msgstr ""
-msgid "Failed to upload shelf layout: {{errorMessage}}"
-msgstr "Opplasting av layout feilet: {{errorMessage}}"
+msgid "Original Layer"
+msgstr "Opprinnelig lag"
-msgid "Show Style Base Name"
-msgstr "Showstylenavn"
+msgid "Original Layer not found"
+msgstr ""
-msgid "Blueprint"
-msgstr "Blueprint"
+msgid "Other"
+msgstr ""
-msgid "Blueprint not set"
-msgstr "Blueprint ikke valgt"
+msgid "Out"
+msgstr "Ut"
-msgid "Compatible Studios:"
-msgstr "Kompatible studio:"
+msgid "OUT"
+msgstr ""
-msgid "This Show Style is not compatible with any Studio"
-msgstr "Denne showstylen er ikke kompatibelt med noe studio"
+msgid "Output channels"
+msgstr "Utgangskanal"
-msgid "Camera"
-msgstr "Kamera"
+msgid "Output Channels"
+msgstr "Utgangskanal"
-msgid "Graphics"
-msgstr "Grafikk"
+msgid "Output channels are required for your studio to work"
+msgstr "Utgangskanaler er nødvendige for at studioet ditt skal fungere"
-msgid "Live Speak"
-msgstr "STK"
+msgid "Output Layer"
+msgstr "Utgangslag"
-msgid "Lower Third"
-msgstr "Super"
+msgid "Over"
+msgstr ""
-msgid "Studio Microphone"
-msgstr "Studiomikrofon"
+msgid "Over/Under"
+msgstr "Over/Under"
-msgid "Remote Source"
-msgstr "RM"
+msgid "Overflow horizontally"
+msgstr "Horisontal overflyt"
-msgid "Generic Script"
-msgstr "Generisk manus"
+msgid "Overlay Screen"
+msgstr ""
-msgid "Split Screen"
-msgstr "Splitt"
+msgid "Package Container ID"
+msgstr "Pakkekontainer-id"
-msgid "Clips"
-msgstr "Klipp"
+msgid "Package Containers"
+msgstr "Pakkekontainere"
-msgid "Metadata"
-msgstr "Metadata"
+msgid "Package Containers to use for previews"
+msgstr "Pakkekontainere som skal benyttes til forhåndsvisninger"
-msgid "Camera Movement"
-msgstr "Kamerabevegelse"
+msgid "Package Containers to use for thumbnails"
+msgstr "Pakkekontainere som skal benyttes til miniatyrbilder"
-msgid "Unknown Layer"
-msgstr "Ukjent lag"
+msgid "Package Manager"
+msgstr "Pakkebehandler"
-msgid "Audio Mixing"
-msgstr "Lydmiksing"
+msgid "Package Manager is offline"
+msgstr ""
-msgid "Transition"
-msgstr "Effekt"
+msgid "Package Manager status"
+msgstr "Status fo pakkebehandler"
-msgid "Lights"
-msgstr "Lys"
+msgid "Package Manager: Restart Package Container"
+msgstr ""
-msgid "Local"
-msgstr "Lokal"
+msgid "Package Manager: Restart work"
+msgstr ""
-msgid "New Source"
-msgstr "Ny kilde"
+msgid "Package Status"
+msgstr "Pakkestatus"
-msgid "Are you sure you want to delete source layer \"{{sourceLayerId}}\"?"
-msgstr "Er du sikker på at du vil slette kildelaget \"{{sourceLayerId}}\"?"
+msgid "Packages"
+msgstr "Pakker"
-msgid "Source Name"
-msgstr "Kildenavn"
+msgid "Parameters"
+msgstr "Parametre"
-msgid "Source Abbreviation"
-msgstr "Kildeforkortelse"
+msgid "Parent Config ID"
+msgstr ""
-msgid "Internal ID"
-msgstr "Intern-id"
+msgid "Parent device is missing"
+msgstr ""
-msgid "Source Type"
-msgstr "Kildetype"
+msgid "Parent Devices"
+msgstr ""
-msgid "Is a Live Remote Input"
-msgstr "Er en RM"
+msgid "part"
+msgstr "punkt"
-msgid "Is a Guest Input"
-msgstr "Er en gjesteinngang"
+msgid "Part"
+msgstr "Del"
-msgid "Is hidden"
-msgstr "Er skjult"
+msgid "Part Count Down"
+msgstr "Nedtelling for del"
+msgid "Part Count Up"
+msgstr "Opptelling for del"
-msgid "Pieces on this layer can be cleared"
-msgstr "Elementer på dette laget kan tømmes"
+msgid "Part duration is 0."
+msgstr ""
-msgid "Pieces on this layer are sticky"
-msgstr "Elementer i dette laget er sticky"
+msgid "Parts Duration"
+msgstr "Varighet for del"
-msgid "Only Pieces present in rundown are sticky"
-msgstr "Kun elementer tilstede i kjøreplanen er sticky"
+msgid "Parts: {{delta}}"
+msgstr "Deler: {{delta}}"
-msgid "Allow disabling of Pieces"
-msgstr "Tillat deaktivering av elementer"
+msgid "Password"
+msgstr "Passord"
-msgid "AdLibs on this layer can be queued"
-msgstr "Adliber på dette laget kan cues"
+msgid "Password for authentication"
+msgstr "Passord for autentisering"
-msgid "Exclusivity group"
-msgstr "Ekslusivitetsgruppe"
+msgid "Peripheral Device is outdated"
+msgstr "Tilkoblet enhet er utdatert"
-msgid ""
-"Add some source layers (e.g. Graphics) for your data to appear in rundowns"
+msgid "Peripheral Device not found!"
msgstr ""
-"Legg til kildelag (for eksempel Grafikk) for å vise dine data i kjøreplaner"
-msgid "No source layers set"
-msgstr "Ingen kildelag definert"
+msgid "Peripheral Devices"
+msgstr ""
-msgid "Delete this output?"
-msgstr "Slett denne utgangen?"
+msgid "Pick"
+msgstr "Plukk"
-msgid "Are you sure you want to delete source layer \"{{outputId}}\"?"
-msgstr "Er du sikker på at du vil slette kildelaget \"{{outputId}}\"?"
+msgid "Pick last"
+msgstr "Plukk siste"
-msgid "New Output"
-msgstr "Ny utgang"
+msgid ""
+"Picks the first instance of an adLib per rundown, identified by uniqueness "
+"Id"
+msgstr ""
+"Velger den første forekomsten av en adlib i hver kjøreplan, identifisert av "
+"unik id"
-msgid "Channel Name"
-msgstr "Kanalnavn"
+msgid "Piece on selected source layers will have a duration label shown"
+msgstr ""
-msgid "Is PGM Output"
-msgstr "Er programutgang"
+msgid "Piece to take is already live!"
+msgstr ""
-msgid "Is collapsed by default"
-msgstr "Er minimert som standard"
+msgid "Piece to take is not directly playable!"
+msgstr ""
-msgid "Is flattened"
-msgstr "Er slått sammen"
+msgid "Piece to take was not found!"
+msgstr ""
-msgid "Output channels are required for your studio to work"
-msgstr "Utgangskanaler er nødvendige for at studioet ditt skal fungere"
+msgid "Pieces on this layer are sticky"
+msgstr "Elementer i dette laget er sticky"
-msgid "Output channels"
-msgstr "Utgangskanal"
+msgid "Pieces on this layer can be cleared"
+msgstr "Elementer på dette laget kan tømmes"
-msgid "No output channels set"
-msgstr "Ingen utgangskanal definert"
+msgid "Place label below panel"
+msgstr "Plasser etikett under panel"
-msgid "No PGM output"
-msgstr "Ingen programutgang"
+msgid "Plan. Dur"
+msgstr ""
-msgid "Key"
-msgstr "Key"
+msgid "Plan. End"
+msgstr ""
-#, fuzzy
-#| msgid "Host"
-msgid "Host Key"
-msgstr "Vert"
+msgid "Plan. Start"
+msgstr ""
-#, fuzzy
-#| msgid "Source Layer Type"
-msgid "Source Layer type"
-msgstr "Kildelagstyper"
+msgid "Planned Duration"
+msgstr "Planlagt varighet"
-#, fuzzy
-#| msgid "Icon color"
-msgid "Key color"
-msgstr "Ikonfarge"
+msgid "Planned End"
+msgstr "Planlagt slutt"
-msgid "Custom Hotkey Labels"
-msgstr "Egendefinerte etiketter for hurtigtaster"
+msgid "Planned End text"
+msgstr "Tekst for planlagt slutt"
-msgid "AHK"
-msgstr ""
+msgid "Planned Start"
+msgstr "Planlagt start"
-msgid "Remove this Variant?"
-msgstr "Fjern denne varianten?"
+msgid "Planned Start Text"
+msgstr "Tekst for planlagt start"
+
+msgid "Play-out"
+msgstr "Avspilling"
-msgid "Are you sure you want to remove the variant \"{{showStyleVariantId}}\"?"
+msgid "Playlist"
msgstr ""
-"Er du sikker på at du vil fjerne denne showstylevarianten "
-"\"{{showStyleVariantId}}\"?"
-msgid "Unnamed variant"
-msgstr "Variant uten navn"
+msgid "Playout Devices"
+msgstr ""
-msgid "Variant Name"
-msgstr "Variantnavn"
+msgid "Playout devices are needed to control your studio hardware"
+msgstr ""
-msgid "Variants"
-msgstr "Varianter"
+msgid "Playout devices which uses this package container"
+msgstr "Playout-enheter som benytter denne pakkekontaineren"
-msgid "Restore from this Snapshot file?"
-msgstr "Gjenopprette fra denne snapshotfilen?"
+msgid "Playout Gateway \"{{playoutDeviceName}}\" is now restarting."
+msgstr "Playout-gateway \"{{playoutDeviceName}}\" starter på nytt..."
msgid ""
-"Are you sure you want to restore the system from the snapshot file "
-"\"{{fileName}}\"?"
-msgstr ""
-"Er du sikker på at du vil gjenopprettet systemet fra snapshotfilen "
-"\"{{fileName}}\"?"
+"Please check the database related to the warnings above. If neccessary, you "
+"can"
+msgstr "Vennligst sjekk databasen tilknyttet advarslene over. Hvis nødvendig kan du"
-msgid "Successfully restored snapshot"
-msgstr "Gjenoppretting fra snapshot var vellykket"
+msgid "Please explain the problems you experienced"
+msgstr ""
-msgid "Snapshot restore failed: {{errorMessage}}"
-msgstr "Gjenoppretting fra snapshot feilet: {{errorMessage}}"
+msgid "Please note: This action is irreversible!"
+msgstr "Merk: Denne handlingen kan ikke angres!"
-msgid "Full System Snapshot"
-msgstr "Fullt systemsnapshot"
+msgid "Pool name"
+msgstr ""
-msgid ""
-"A Full System Snapshot contains all system settings (studios, showstyles, "
-"blueprints, devices, etc.)"
+msgid "Pool PlayerId"
msgstr ""
-"Et systemsnapshot inneholder alle systeminnstillinger (studio, showstyles, "
-"blueprints, enheter o.s.v.)"
-msgid "Take a Full System Snapshot"
-msgstr "Lagre et fullt systemsnapshot"
+msgid "Prepare Studio and Activate (Rehearsal)"
+msgstr "Forbered studio og aktiver testmodus"
-msgid "Studio Snapshot"
-msgstr "Studiosnapshot"
+msgid "Preparing for broadcast"
+msgstr ""
-msgid "A Studio Snapshot contains all system settings related to that studio"
+msgid "Preparing, please wait..."
msgstr ""
-"Et studiosnapshot inneholder alle systeminnstillinger tilknyttet et studio"
-msgid "Take a Snapshot for studio \"{{studioName}}\" only"
-msgstr "Lagre et studiosnapshot utelukkende for \"{{studioName}}\""
+msgid "Presenter Layout"
+msgstr ""
-msgid "Restore from Snapshot File"
-msgstr "Gjenopprett fra snapshotfil"
+msgid "Presenter screen"
+msgstr ""
-msgid "Upload Snapshot"
-msgstr "Last opp snapshot"
+msgid "Presenter Screen"
+msgstr ""
-msgid "Restore from Stored Snapshots"
-msgstr "Gjenopprett fra lagrede snapshots"
+msgid "Presenter View Layouts"
+msgstr ""
-msgid "Restore"
-msgstr "Gjenopprett"
+msgid "Preserve position of segments when unsynced relative to other segments"
+msgstr ""
-msgid "Show \"Remove snapshots\"-buttons"
-msgstr "Vis \"Fjern snapshots\"-knappene"
+msgid "Previous"
+msgstr ""
-msgid "Remove this device?"
-msgstr "Fjern denne enheten?"
+msgid "Previous work status reasons"
+msgstr "Tidligere årsaker for jobbsatus"
-msgid "Are you sure you want to remove device \"{{deviceId}}\"?"
-msgstr "Er du sikker på at du vil fjerne enheten \"{{deviceId}}\"?"
+msgid "Prioritizing Media Workflow"
+msgstr ""
-msgid "Devices are needed to control your studio hardware"
-msgstr "Enheter er nødvendige for å kontrollere utstyret i studioet ditt"
+msgid "Priority"
+msgstr "Prioritet"
-msgid "Attached Devices"
-msgstr "Tilkoblede enheter"
+msgid "Problems"
+msgstr "Problemer"
-msgid "No devices connected"
-msgstr "Ingen enheter tilkoblet"
+msgid "Profile name to be used by FileFlow when exporting the clips"
+msgstr "Profilnavn som benyttes av FileFlow når klippene eksporteres"
-msgid "Playout gateway not connected"
-msgstr "Playout-gateway er ikke tilkoblet"
+msgid "Prompter"
+msgstr "Prompter"
-msgid "Remove this mapping?"
-msgstr "Fjern denne mappingen?"
+msgid "Prompter Screen"
+msgstr ""
-msgid "Are you sure you want to remove mapping for layer \"{{mappingId}}\"?"
+msgid "Properties"
msgstr ""
-"Er du sikker på at du fil fjerne mappingen for laget \"{{mappingId}}\"?"
-msgid "This layer is now rerouted by an active Route Set: {{routeSets}}"
-msgstr "Dette laget blir omkoblet av en aktiv omkoplingsgruppe: {{routeSets}}"
+msgid "Quantel FileFlow Profile name"
+msgstr "Quantel FileFlow profilnavn"
-msgid "Layer ID"
-msgstr "Lag-id"
+msgid "Quantel FileFlow URL"
+msgstr "Quantel FileFlow-adresse (url)"
-msgid "ID of the timeline-layer to map to some output"
-msgstr "Lag-id for tidslinjelaget som skal mappes til en utgang"
+msgid "Quantel gateway URL"
+msgstr "Quantel Gateway-adresse (url)"
-msgid "Layer Name"
-msgstr "Lagnavn"
+msgid "Quantel transformer URL"
+msgstr "Quantel Transformer-adresse (url)"
-msgid "Human-readable name of the layer"
-msgstr "Leservennlig lagnavn"
+msgid "Quantel Zone ID"
+msgstr ""
-msgid "The type of device to use for the output"
-msgstr "Enhetstype som skal brukes for utgangen"
+msgid "Queue AdLib from Minishelf"
+msgstr ""
-msgid ""
-"ID of the device (corresponds to the device ID in the peripheralDevice "
-"settings)"
-msgstr "Enhets-id (korresponderer med enhets-id under enhetsinnstillinger)"
+msgid "Queue all adlibs"
+msgstr "Cue alle adliber"
-msgid "Lookahead Mode"
-msgstr "Lookahead-modus"
+msgid "Queue segment"
+msgstr "Cue tittel: Starter når aktiv tittel er ferdig"
-msgid "Lookahead Target Objects (Default = 1)"
-msgstr "Lookahead målobjekter (standard = 1)"
+msgid "Queue this AdLib"
+msgstr "Cue denne adliben"
-msgid "Lookahead Maximum Search Distance (Default = {{limit}})"
-msgstr "Lookahead maksimum søkelengde (standard = {{limit}})"
+msgid "Queued Messages"
+msgstr "Meldinger i kø"
-msgid "Layer Mappings"
-msgstr "Lagmappinger"
+msgid "Queueing next Segment"
+msgstr ""
-msgid "Add a playout device to the studio in order to edit the layer mappings"
+msgid "Quick Links"
msgstr ""
-"For å kunne redigere lagmappinger, må du legge til en playout-enhet til "
-"studio"
-msgid "Remove this Exclusivity Group?"
-msgstr "Fjern fra denne eksklusivitetsgruppen?"
+msgid "QuickLoop Fallback Part Duration"
+msgstr ""
-msgid ""
-"Are you sure you want to remove exclusivity group \"{{eGroupName}}\"?\n"
-"Route Sets assigned to this group will be reset to no group."
+msgid "Range: Forward max"
msgstr ""
-"Er du sikker på at du vil fjerne eksklusivitetsgruppen \"{{eGroupName}}\"?\n"
-"Omkoblinger satt til denne gruppen vil bli resatt til ingen gruppe."
-msgid "Remove this Route from this Route Set?"
-msgstr "Fjern denne omkoblingen fra omkoblingsgruppen?"
+msgid "Range: Neutral max"
+msgstr ""
-msgid ""
-"Are you sure you want to remove the Route from \"{{sourceLayerId}}\" to "
-"\"{{newLayerId}}\"?"
+msgid "Range: Neutral min"
msgstr ""
-"Er du sikker på at du vil fjerne omkoblingen fra \"{{sourceLayerId}}\" til "
-"\"{{newLayerId}}\"?"
-msgid "Remove this Route Set?"
-msgstr "Fjern denne omkoblingsgruppen?"
+msgid "Range: Reverse min"
+msgstr ""
-msgid "Are you sure you want to remove the Route Set \"{{routeId}}\"?"
-msgstr "Er du sikker på at du vil fjerne omkoblingsgruppen \"{{routeId}}\"?"
+msgid "Rate limit exceeded"
+msgstr ""
-msgid "Routes"
-msgstr "Omkoblinger"
+msgid "Re-check"
+msgstr "Sjekk på nytt"
-msgid "There are no routes set up yet"
-msgstr "Det er ikke satt opp omkoblinger ennå"
+msgid "Re-sync"
+msgstr "Synkroniser med MOS"
-msgid "Original Layer"
-msgstr "Opprinnelig lag"
+msgid "Re-Sync"
+msgstr "Synkroniser"
-msgid "None"
-msgstr "Ingen"
+msgid "Re-sync Rundown"
+msgstr "Synkroniser kjøreplanen med ENPS på nytt"
-msgid "New Layer"
-msgstr "Nytt lag"
+msgid "Re-sync rundown data with {{nrcsName}}"
+msgstr "Ikke synkronisert med MOS/{{nrcsName}}"
-msgid "Route Type"
+msgid "Re-Sync rundown?"
+msgstr "Synkroniser kjøreplanen med ENPS?"
+
+msgid "Re-Syncing Rundown"
msgstr ""
-msgid "Source Layer not found"
-msgstr "Kildelag ikke funnet"
+msgid "Re-Syncing Rundown Playlist"
+msgstr ""
-msgid "There are no exclusivity groups set up."
-msgstr "Ingen eksklusivitetsgrupper er satt opp."
+msgid "Read marker position"
+msgstr ""
-msgid "Exclusivity Group ID"
-msgstr "Eksklusivitetsgruppe-id"
+msgid "Reads the ingest (NRCS) data, and pipes it through the blueprints"
+msgstr ""
-msgid "Exclusivity Group Name"
-msgstr "Eksklusivitetsgruppenavn"
+msgid "Ready"
+msgstr "Klar"
-msgid "Display name of the Exclusivity Group"
-msgstr "Eksklusivitetsgruppens navn som vises i oversikten"
+msgid "Reconnect now"
+msgstr ""
-msgid "Active"
-msgstr "Aktiv"
+msgid "Reconnecting to the {{platformName}}"
+msgstr ""
-msgid "Not Active"
-msgstr "Inaktiv"
+msgid "Refreshing debug states"
+msgstr ""
-msgid "Not defined"
-msgstr "Ikke definert"
+msgid "Register ID"
+msgstr ""
-msgid "There are no Route Sets set up."
-msgstr "Det er ikke satt opp omkoblinger ennå."
+msgid "Rehearsal"
+msgstr "Testmodus"
-msgid "Route Set ID"
-msgstr "Omkoblingsgruppe-id"
+msgid "Rehearsal mode is already active"
+msgstr ""
-msgid "Is this Route Set currently active"
-msgstr "Er denne omkoblingsgruppen aktiv nå"
+msgid "Rehearsal mode is not allowed"
+msgstr ""
-msgid "Default State"
-msgstr "Standardtilstand"
+msgid "Rehearsal State"
+msgstr ""
-msgid "The default state of this Route Set"
-msgstr "Standardtilstand for denne omkoblingsgruppen"
+msgid "Reload {{nrcsName}} Data"
+msgstr "Last inn {{nrcsName}}-data på nytt"
-msgid "Route Set Name"
-msgstr "Omkoblingsgruppens navn"
+msgid "Reload Baseline"
+msgstr "Last inn baseline på nytt"
-msgid "Display name of the Route Set"
-msgstr "Omkoblingsgruppens navn som vises i oversikten"
+msgid "Reload NRCS Data"
+msgstr "Last inn MOS-data på nytt"
-msgid "If set, only one Route Set will be active per exclusivity group"
+msgid "Reload statuses"
+msgstr "Last inn status på nytt"
+
+msgid "Reloading Rundown Playlist Data"
msgstr ""
-"Bare en omkoblingsgruppe være aktiv per eksklusivitetsgruppe når dette er "
-"krysset av for"
-msgid "Behavior"
-msgstr "Oppførsel"
+msgid "Rem. Dur"
+msgstr ""
-msgid "The way this Route Set should behave towards the user"
-msgstr "Måten denne omkoblingsgruppen skal oppføre seg på overfor brukeren"
+msgid "Remote"
+msgstr ""
-msgid "Route Sets"
-msgstr "Omkoblingsgrupper"
+msgid "Remote Source"
+msgstr "RM"
-msgid "Add a playout device to the studio in order to configure the route sets"
+msgid "Remote Speak"
msgstr ""
-"For å kunne redigere omkoblingsgrupper, må du legge til en playout-enhet til "
-"studio"
-msgid ""
-"Controls for exposed Route Sets will be displayed to the producer within the "
-"Rundown View in the Switchboard."
+msgid "Remove"
+msgstr "Fjern"
+
+msgid "Remove all Show Style Variants?"
msgstr ""
-"Kontroller for eksponerte omkoblingsgrupper vil vises til producer i "
-"kjøreplansvisningen i omkoblingspanelet."
-msgid "Exclusivity Groups"
-msgstr "Eksklusivitetsgrupper"
+msgid "Remove all trimming"
+msgstr "Nullstill inn- og utpunkt"
-msgid "Remove this Package Container?"
-msgstr "Fjern denne pakkekontaineren?"
+msgid "Remove in-trimming"
+msgstr "Nullstill innpunkt"
-msgid ""
-"Are you sure you want to remove the Package Container \"{{containerId}}\"?"
-msgstr "Er du sikker på at du vil fjerne pakkekontaineren \"{{containerId}}\"?"
+msgid "Remove indexes"
+msgstr "Fjern indexer"
-msgid "There are no Package Containers set up."
-msgstr "Det er ikke satt opp pakkekontainere ennå."
+msgid "Remove old data"
+msgstr "Fjern gamle data"
-msgid "Package Container ID"
-msgstr "Pakkekontainer-id"
+msgid "Remove old data from database"
+msgstr "Fjern gamle data fra databasen"
-msgid "Display name/label of the Package Container"
-msgstr "Vis navn/merkelapp for pakkekontaineren"
+msgid "Remove out-trimming"
+msgstr "Nullstill utpunkt"
-msgid "Playout devices which uses this package container"
-msgstr "Playout-enheter som benytter denne pakkekontaineren"
+msgid "Remove rundown"
+msgstr "Fjern kjøreplan"
+
+msgid "Remove Snapshot"
+msgstr ""
-msgid "Select playout devices"
-msgstr "Velg playout-enhet"
+msgid "Remove this AB PLayers from this Route Set?"
+msgstr ""
-msgid "Select which playout devices are using this package container"
-msgstr "Velg hvilke playout-enheter som skal benytte denne pakkekontaineren"
+msgid "Remove this device?"
+msgstr "Fjern denne enheten?"
+
+msgid "Remove this Device?"
+msgstr "Fjern denne enheten?"
+
+msgid "Remove this Exclusivity Group?"
+msgstr "Fjern fra denne eksklusivitetsgruppen?"
-msgid "Accessors"
-msgstr "Aksessorer"
+msgid "Remove this item?"
+msgstr "Fjern dette elementet?"
+
+msgid "Remove this mapping?"
+msgstr "Fjern denne mappingen?"
msgid "Remove this Package Container Accessor?"
msgstr "Fjern denne pakkekontainer-aksessoren?"
-msgid ""
-"Are you sure you want to remove the Package Container Accessor "
-"\"{{accessorId}}\"?"
-msgstr ""
-"Er du sikker på at du vil fjerne pakkekontainer-aksessoren "
-"\"{{accessorId}}\"?"
-
-msgid "There are no Accessors set up."
-msgstr "Ingen aksessorer er satt opp."
-
-msgid "Accessor ID"
-msgstr "Aksessor-id"
+msgid "Remove this Package Container?"
+msgstr "Fjern denne pakkekontaineren?"
-msgid "Display name of the Package Container"
-msgstr "Pakkekontainerens navn som vises i oversikten"
+msgid "Remove this Route from this Route Set?"
+msgstr "Fjern denne omkoblingen fra omkoblingsgruppen?"
-msgid "Accessor Type"
-msgstr "Aksessortype"
+msgid "Remove this Route Set?"
+msgstr "Fjern denne omkoblingsgruppen?"
-msgid "Folder path"
-msgstr "Mappesti"
+msgid "Remove this Show Style Variant?"
+msgstr ""
-msgid "File path to the folder of the local folder"
-msgstr "Sti til lokale mappe"
+msgid "Removing Bucket"
+msgstr ""
-msgid "Resource Id"
-msgstr "Ressurs-id"
+msgid "Removing Bucket AdLib"
+msgstr ""
-msgid ""
-"(Optional) This could be the name of the computer on which the local folder "
-"is on"
+msgid "Removing Rundown"
msgstr ""
-"(Valgfri) Dette kan være navnet til datamaskinen som den lokale mappen er på"
-msgid "Base URL"
-msgstr "Base-url"
+msgid "Removing Rundown Playlist"
+msgstr ""
-msgid "Base url to the resource (example: http://myserver/folder)"
-msgstr "Base-url for ressursen (eksempel: http://minserver/mappe)"
+msgid "Rename this AdLib"
+msgstr "Gi denne adliben nytt navn"
-msgid "Network Id"
-msgstr "Nettverk-id"
+msgid "Rename this Bucket"
+msgstr "Gi bøtten nytt navn"
-msgid ""
-"(Optional) A name/identifier of the local network where the share is "
-"located, leave empty if globally accessible"
+msgid "Reording Rundowns in Playlist"
msgstr ""
-"(Valgfri) Et navn/en identifikator for det lokale nettverket hvor den delte "
-"mappen er lokalisert, la være tom dersom den er globalt tilgjengelig"
-msgid "Folder path to shared folder"
-msgstr "Sti til delt mappe"
+msgid "Replace"
+msgstr "Erstatt"
-msgid "UserName"
-msgstr "Brukernavn"
+msgid "Replace Blueprints?"
+msgstr "Erstatte blueprints?"
-msgid "Username for athuentication"
-msgstr "Brukernavn for autentisering"
+msgid "Replace rows"
+msgstr ""
-msgid "Password for authentication"
-msgstr "Passord for autentisering"
+msgid "Require All Additional Source Layers"
+msgstr ""
-msgid ""
-"(Optional) A name/identifier of the local network where the share is located"
+msgid "Require Piece on Source Layer"
msgstr ""
-"(Valgfri) Et navn/en identifikator for det lokale nettverket hvor den delte "
-"mappen er lokalisert"
-msgid "Quantel gateway URL"
-msgstr "Quantel Gateway-adresse (url)"
+msgid "Reset"
+msgstr ""
-msgid "URL to the Quantel Gateway"
-msgstr "Start Quantel Gateway på nytt"
+msgid "Reset Action"
+msgstr ""
-msgid "ISA URLs"
-msgstr "ISA-adresse (url)"
+msgid "Reset All Versions"
+msgstr "Nullstill alle versjoner"
-msgid "URLs to the ISAs, in order of importance (comma separated)"
-msgstr "Adresser (url-er) for ISA-ene (kommaseparert i prioritert rekkefølge)"
+msgid "Reset and Activate \"On Air\""
+msgstr ""
-msgid "Zone ID"
-msgstr "Sone-id"
+msgid "Reset App Credentials"
+msgstr ""
-msgid "Zone ID (default value: \"default\")"
-msgstr "Sone-id (standardverdi: \"default\")"
+msgid "Reset Database Version"
+msgstr "Nullstill databaseversjon"
-msgid "Server ID"
-msgstr "Server-id"
+msgid "Reset mapping to default values"
+msgstr ""
-msgid "Server ID. For sources, this should generally be omitted (or set to 0) so clip-searches are zone-wide. If set, clip-searches are limited to that server."
+msgid "Reset Package Container to default values"
msgstr ""
-"Server-ID. For kilder skal denne droppes (eller bli satt til 0) siden klippsøk skjer i heile sonen. Hvis denne er satt skjer klippsøk bare på den serveren."
-msgid "Quantel transformer URL"
-msgstr "Quantel Transformer-adresse (url)"
+msgid "Reset row to default values"
+msgstr ""
-msgid "URL to the Quantel HTTP transformer"
-msgstr "Adresse til Quantel HTTP transformer"
+msgid "Reset Rundown"
+msgstr "Tilbakestill kjøreplanen"
-msgid "Quantel FileFlow URL"
-msgstr "Quantel FileFlow-adresse (url)"
+msgid "Reset Sort Order"
+msgstr "Tilbakestill rekkefølge"
-msgid "URL to the Quantel FileFlow Manager"
-msgstr "Adresse til Quantel FileFlow Manager"
+msgid "Reset source layer to default values"
+msgstr ""
-msgid "Quantel FileFlow Profile name"
-msgstr "Quantel FileFlow profilnavn"
+msgid "Reset this item?"
+msgstr ""
-msgid "Profile name to be used by FileFlow when exporting the clips"
-msgstr "Profilnavn som benyttes av FileFlow når klippene eksporteres"
+msgid "Reset this mapping?"
+msgstr ""
-msgid "Allow Read access"
-msgstr "Tillat lesing"
+msgid "Reset this Package Container?"
+msgstr ""
-msgid "Allow Write access"
-msgstr "Tillat skriving/lagring"
+msgid "Reset to default"
+msgstr ""
-msgid "Studio Settings"
-msgstr "Studioinnstillinger"
+msgid "Reset User Credentials"
+msgstr ""
-msgid "Package Containers to use for previews"
-msgstr "Pakkekontainere som skal benyttes til forhåndsvisninger"
+msgid "Resetting and activating Rundown Playlist"
+msgstr ""
-msgid "Click to show available Package Containers"
-msgstr "Klikk for å vise tilgjengelige pakkekontainere"
+msgid "Resetting Playlist to default order"
+msgstr ""
-msgid "Package Containers to use for thumbnails"
-msgstr "Pakkekontainere som skal benyttes til miniatyrbilder"
+msgid "Resetting Rundown Playlist"
+msgstr ""
-msgid "Package Containers"
-msgstr "Pakkekontainere"
+msgid "Resource Id"
+msgstr "Ressurs-id"
-msgid "Studio Baseline needs update: "
-msgstr "Studio baseline må oppdateres: "
+msgid "Restart"
+msgstr "Restart"
-msgid "Baseline needs reload, this studio may not work until reloaded"
-msgstr ""
-"Baseline må lastes på nytt, dette studioet vil kanskje ikke fungere før "
-"baseline er lastet på nytt"
+msgid "Restart {{device}}"
+msgstr "Start {{device}} på nytt"
-msgid "Reload Baseline"
-msgstr "Last inn baseline på nytt"
+msgid "Restart All Jobs"
+msgstr ""
-msgid "Studio Name"
-msgstr "Studionavn"
+msgid "Restart CasparCG Server"
+msgstr "Restart CasparCG"
-msgid "Select Compatible Show Styles"
-msgstr "Velg kompatibel showstyles"
+msgid "Restart Container"
+msgstr ""
-msgid "Show style not set"
-msgstr "Showstyle ikke satt"
+msgid "Restart Device"
+msgstr "Start enheten på nytt"
-msgid "Click to show available Show Styles"
-msgstr "Klikk for å vise tilgjengelige showstyles"
+msgid "Restart Playout"
+msgstr "Start Playout-gateway på nytt"
-msgid "Frame Rate"
-msgstr "Framerate"
+msgid "Restart this Device?"
+msgstr "Start denne enheten på nytt?"
-msgid "Enable \"Play from Anywhere\""
-msgstr "Slå på \"Play from Anywhere\""
+msgid "Restart this system?"
+msgstr "Starte dette Sofie-systemet på nytt?"
-msgid "Media Preview URL"
-msgstr "Forhåndsvisnings-URL"
+msgid "Restarting Media Workflow"
+msgstr ""
-msgid "Sofie Host URL"
-msgstr "Sofie vertadresse (url)"
+msgid "Restarting Sofie Core"
+msgstr ""
-msgid "Slack Webhook URLs"
-msgstr "Slack Webhook-adresser (url)"
+msgid "Restore"
+msgstr "Gjenopprett"
-msgid "Supported Media Formats"
-msgstr "Støttede medieformater"
+msgid "Restore Deleted Action"
+msgstr ""
-msgid "Supported Audio Formats"
-msgstr "Støttede lydformater"
+msgid "Restore from Snapshot File"
+msgstr "Gjenopprett fra snapshotfil"
-msgid "Force the Multi-gateway-mode"
-msgstr "Tving multigateway-modus"
+msgid "Restore from Stored Snapshots"
+msgstr "Gjenopprett fra lagrede snapshots"
-msgid "Multi-gateway-mode delay time"
-msgstr "Delaytid for multigateway-modus"
+msgid "Restore from this Snapshot file?"
+msgstr "Gjenopprette fra denne snapshotfilen?"
-msgid "Preserve contents of playing segment when unsynced"
+msgid "Restore Part from NRCS"
msgstr ""
-msgid "Allow Rundowns to be reset while on-air"
-msgstr "Tillat tilbakestilling av kjøreplaner som er on-air"
+msgid "Restore Segment from NRCS"
+msgstr ""
-msgid ""
-"Preserve position of segments when unsynced relative to other segments. "
-"Note: this has only been tested for the iNews gateway"
+msgid "Restore Snapshot"
msgstr ""
-msgid "Remove indexes"
-msgstr "Fjern indexer"
+msgid "Resync with NRCS"
+msgstr "Synkroniser med ENPS"
-msgid "This will remove {{indexCount}} old indexes, do you want to continue?"
-msgstr "Dette vil fjerne {{indexCount}} gamle indexer. Vil du fortsette?"
+msgid "Retry"
+msgstr "Prøv igjen"
-msgid "{{indexCount}} indexes was removed."
-msgstr "{{indexCount}} indexer ble fjernet."
+msgid "Return to list"
+msgstr "Gå tilbake til listen"
-msgid "Installation name"
-msgstr "Installasjonsnavn"
+msgid "Reveal in Shelf"
+msgstr "Vis i skuff"
-msgid "This name will be shown in the title bar of the window"
-msgstr "Dette navnet vil vises i tittellinjen for vinduet"
+msgid "Reverse speed map"
+msgstr ""
-msgid "Logging level"
-msgstr "Loggenivå"
+msgid "Reverse speed map (left trigger)"
+msgstr ""
-msgid "This affects how much is logged to the console on the server"
-msgstr "Dette påvirker hvor mye som blir logget til serverkonsollen"
+msgid "Rewind all Segments"
+msgstr ""
-msgid "System-wide Notification Message"
-msgstr "Lokal systemmelding"
+msgid "Rewind segments to start"
+msgstr "Sett segmentene tilbake til start"
-msgid "Message"
-msgstr "Melding"
+msgid "Rewind Segments to start"
+msgstr "Sett alle segmenter tilbake til start"
-msgid "Enabled"
-msgstr "Aktivert"
+msgid "Right hand offset"
+msgstr ""
-msgid "Edit Support Panel"
-msgstr "Rediger supportpanel"
+msgid "Role"
+msgstr "Rolle"
-msgid "HTML that will be shown in the Support Panel"
-msgstr "HTML-kode som vil bli vist i supportpanelet"
+msgid "Route Set"
+msgstr ""
-msgid "Application Performance Monitoring"
-msgstr "Overvåkning av applikasjonsytelse (AMP)"
+msgid "Route Set ID"
+msgstr "Omkoblingsgruppe-id"
-msgid "APM Enabled"
-msgstr "AMP aktivert"
+msgid "Route Set Name"
+msgstr "Omkoblingsgruppens navn"
-msgid "APM Transaction Sample Rate"
-msgstr "Prøvefrekvens for AMP-transaksjoner"
+msgid "Route Sets"
+msgstr "Omkoblingsgrupper"
+
+msgid "Route Type"
+msgstr ""
-msgid ""
-"How many of the transactions to monitor. Set to -1 to log nothing (max "
-"performance), 0.5 to log 50% of the transactions, 1 to log all transactions"
+msgid "Routed Mappings"
msgstr ""
-"Antall transaksjoner som overvåkes. Sett verdien til -1 for å ikke logge noe "
-"(maks ytelse), til 0.5 for å logge halvparten av transaksjonene eller til 1 "
-"for å logge alle transaksjonene"
-msgid "Note: Core needs to be restarted to apply these settings"
-msgstr "Merknad: Core må startes på nytt for å ta i bruk disse innstillingene"
+msgid "Routes"
+msgstr "Omkoblinger"
-msgid "Monitor blocked thread"
+msgid "Row cannot be reset as it has no default values"
msgstr ""
-msgid "Enable"
-msgstr "Aktiver"
+msgid "Run automatic migration procedure"
+msgstr "Kjør automatisk migreringsprosedyre"
+
+msgid "Run Migrations to get set up"
+msgstr "Kjør migreringsprosedyrer for å sette opp"
+
+msgid "Rundown"
+msgstr "Kjøreplan"
msgid ""
-"Enables internal monitoring of blocked main thread. Logs when there is an "
-"issue, but (unverified) might cause issues in itself."
+"Rundown {{rundownName}} in Playlist {{playlistName}} is missing in the data "
+"from {{nrcsName}}. You can either leave it in Sofie and mark it as Unsynced "
+"or remove the rundown from Sofie. What do you want to do?"
msgstr ""
+"Kjøreplan {{rundownName}} i listen {{playlistName}} mangler i data fra "
+"{{nrcsName}}. Du kan enten markere den som usynkronisert og beholde den i "
+"Sofie, eller fjerne kjøreplanen fra Sofie. Hva vil du gjøre?"
-msgid "Cron jobs"
-msgstr "Cron-jobber"
-
-msgid "Enable CasparCG restart job"
-msgstr "Aktiver CasparCG restartjobber"
+msgid "Rundown & Shelf"
+msgstr "Kjøreplan & skuff"
-msgid "Cleanup"
-msgstr "Opprydding"
+msgid "Rundown filter"
+msgstr ""
-msgid "Cleanup old database indexes"
-msgstr "Rydd opp i gamle databaseindexer"
+msgid "Rundown for piece \"{{pieceLabel}}\" could not be found."
+msgstr "Finner ikke kjøreplan for \"{{pieceLabel}}\"."
-msgid "Cleanup old data"
-msgstr "Rydd opp i gamle data"
+msgid "Rundown Global Piece Prepare Time"
+msgstr ""
-msgid "Disable CasparCG restart job"
-msgstr "Deaktiver CasparCG restartjobber"
+msgid "Rundown Header Layout"
+msgstr "Layout for kjøreplanens topptekst"
-msgid "Enable automatic storage of Rundown Playlist snapshots periodically"
+msgid "Rundown Header Layouts"
msgstr ""
-msgid "Filter: If set, only store snapshots for certain rundowns"
+msgid "Rundown is already doing a HOLD!"
msgstr ""
-msgid ""
-"(Comma separated list. Empty - will store snapshots of all Rundown Playlists)"
+msgid "Rundown must be active!"
msgstr ""
-msgid "Error when checking for cleaning up"
+msgid "Rundown must be playing or have a next!"
msgstr ""
-msgid "Remove old data from database"
-msgstr "Fjern gamle data fra databasen"
-
-msgid ""
-"There are {{count}} documents that can be removed, do you want to continue?"
-msgstr "Det er {{count}} dokumenter som kan fjernes. Vil du fortsette?"
+msgid "Rundown must be playing!"
+msgstr ""
-msgid "Documents to be removed:"
-msgstr "Dokumenter som fjernes:"
+msgid "Rundown Name"
+msgstr ""
-msgid "Retry"
-msgstr "Prøv igjen"
+msgid "Rundown not found"
+msgstr "Kjøreplan ikke funnet"
-msgid "Remove old data"
-msgstr "Fjern gamle data"
+msgid ""
+"Rundown Playlist is active, please deactivate before preparing it for "
+"broadcast"
+msgstr ""
-msgid "The old data was removed."
-msgstr "Gamle data ble fjernet."
+msgid "Rundown Playlist is active, please deactivate it before regenerating it."
+msgstr ""
-msgid "Last {{layerName}}"
-msgstr "Siste {{layerName}}"
+msgid "Rundown Playlist names to store"
+msgstr ""
-msgid "Clear {{layerName}}"
-msgstr "Tøm {{layerName}}"
+msgid "Rundown Playlist not found!"
+msgstr ""
-msgid "Search..."
-msgstr "Søk..."
+msgid "Rundown View Layouts"
+msgstr ""
msgid ""
-"Are you sure you want to deactivate this Rundown\n"
-"(This will clear the outputs)"
+"RundownPlaylist is active but not in rehearsal, please deactivate it or set "
+"in in rehearsal to be able to reset it."
msgstr ""
-"Er du sikker på at du vil deaktivere denne kjøreplanen?\n"
-"(Dette vil nullstille alle utganger.)"
-
-msgid "Successfully stored snapshot"
-msgstr "Gjenoppretting fra snapshot var vellykket"
-
-msgid "End Words"
-msgstr "Stikkord"
-msgid "Global AdLib"
-msgstr "Globale adliber"
+msgid "Rundowns"
+msgstr "Kjøreplaner"
-msgid "AdLib does not provide any options"
-msgstr "Adlib har ingen valg"
+msgid "Save"
+msgstr ""
-msgid "Execute"
-msgstr "Utfør"
+msgid "Save Changes"
+msgstr "Lagre endringer"
msgid "Save to Bucket"
msgstr "Lagre til bøtte"
-msgid "Reveal in Shelf"
-msgstr "Vis i skuff"
-
-msgid "Edit in Nora"
-msgstr "Rediger i Nora"
-
-msgid "Current Part"
-msgstr "Nåværende del"
-
-msgid "Next Part"
-msgstr "Neste del"
-
-msgid "Part Count Down"
-msgstr "Nedtelling for del"
+msgid "Saving AdLib to Bucket"
+msgstr ""
-msgid "Part Count Up"
-msgstr "Opptelling for del"
+msgid "Saving Evaluation"
+msgstr ""
-msgid "Until end of rundown"
-msgstr "Til slutten av kjøreplanen"
+msgid "Scale"
+msgstr "Skala"
-msgid "New Bucket"
-msgstr "Ny bøtte"
+msgid "Script is empty"
+msgstr "Manuset er tomt"
-msgid "Are you sure you want to delete this AdLib?"
-msgstr "Er du sikker på at du vil slette denne adliben?"
+msgid "Script Source Layers"
+msgstr ""
-msgid "Are you sure you want to delete this Bucket?"
-msgstr "Er du sikker på at du vil slette denne bøtten?"
+msgid "Search..."
+msgstr "Søk..."
-msgid "Are you sure you want to empty (remove all adlibs inside) this Bucket?"
-msgstr "Er du sikker på at du vil tømme denne bøtten (fjerner alle adliber)?"
+msgid "Seg. Budg."
+msgstr ""
-msgid "Current Segment"
-msgstr "Nåværende tittel"
+msgid "segment"
+msgstr ""
-msgid "Next Segment"
-msgstr "Neste tittel"
+msgid "Segment"
+msgstr "Tittel"
msgid "Segment Count Down"
msgstr "Nedtelling for tittel"
@@ -2885,1318 +3367,1259 @@ msgstr "Nedtelling for tittel"
msgid "Segment Count Up"
msgstr "Opptelling for tittel"
-msgid "Start this AdLib"
-msgstr "Slett denne adliben"
-
-msgid "Queue this AdLib"
-msgstr "Cue denne adliben"
-
-msgid "Inspect this AdLib"
-msgstr "Inspiser denne adliben"
-
-msgid "Rename this AdLib"
-msgstr "Gi denne adliben nytt navn"
-
-msgid "Delete this AdLib"
-msgstr "Slett denne adliben"
-
-msgid "Empty this Bucket"
-msgstr "Tøm denne bøtten"
-
-msgid "Rename this Bucket"
-msgstr "Gi bøtten nytt navn"
-
-msgid "Delete this Bucket"
-msgstr "Slett denne bøtten"
-
-msgid "Create new Bucket"
-msgstr "Opprett ny bøtte"
-
-msgid "AdLib"
-msgstr "Adlib"
+msgid "Segment countdown requires source layer"
+msgstr "Nedtelling for tittel krever kildelag"
-msgid "Shortcuts"
-msgstr "Hurtigtaster"
+msgid "Segment no longer exists in {{nrcs}}"
+msgstr "Segmenet eksisterer ikke lenger i {{nrcs}}"
-msgid "Show Style Variant"
-msgstr "Showstylevariant"
+msgid "Segment was hidden in {{nrcs}}"
+msgstr "Tittelen eksisterer ikke lenger i {{nrcs}}"
-msgid "Local Time"
-msgstr "Lokal tid"
+msgid "Segments: {{delta}}"
+msgstr "Segmenter: {{delta}}"
-msgid "System"
-msgstr "System"
+msgid ""
+"Select a presenter layout. Leave as default to use the first available "
+"layout."
+msgstr ""
-msgid "Media"
-msgstr "Media"
+msgid "Select Action"
+msgstr "Velg handling"
-msgid "Packages"
-msgstr "Pakker"
+msgid "Select Compatible Show Styles"
+msgstr "Velg kompatibel showstyles"
-msgid "Messages"
-msgstr "Meldinger"
+msgid "Select image"
+msgstr ""
-msgid "User Log"
-msgstr "Brukerlogg"
+msgid ""
+"Select one or more control modes. Leave all unchecked for default (mouse + "
+"keyboard)."
+msgstr ""
-msgid "Evaluations"
-msgstr "Evalueringer"
+msgid ""
+"Select source layers to display. Leave all unchecked to show all "
+"camera-related layers."
+msgstr ""
-msgid "Timestamp"
-msgstr "Tidsstempel"
+msgid "Select visible Output Groups"
+msgstr "Velg synlig utgangsgruppe"
-msgid "User Name"
-msgstr "Brukernavn"
+msgid "Select visible Source Layers"
+msgstr "Velg synlige kildelag"
-msgid "Answers"
-msgstr "Svar"
+msgid "Select which playout devices are using this package container"
+msgstr "Velg hvilke playout-enheter som skal benytte denne pakkekontaineren"
-msgid "Message Queue"
-msgstr "Meldingskø"
+msgid "Send message"
+msgstr ""
-msgid "Queued Messages"
-msgstr "Meldinger i kø"
+msgid "Send message and Deactivate Rundown"
+msgstr ""
msgid "Sent Messages"
msgstr "Sendte meldinger"
-msgid "File Copy"
-msgstr "Kopier fil"
-
-msgid "File Delete"
-msgstr "Slett fil"
-
-msgid "Check file size"
-msgstr "Sjekk filstørrelse"
-
-msgid "Scan File"
-msgstr "Scan fil"
-
-msgid "Generate Thumbnail"
-msgstr "Generer miniatyrbilder"
-
-msgid "Generate Preview"
-msgstr "Generer forhåndsvisning"
-
-msgid "Unknown action: {{action}}"
-msgstr "Ukjent handling: {{action}}"
+msgid "Server"
+msgstr ""
-msgid "Done"
-msgstr "Utført"
+msgid "Server {{id}}"
+msgstr ""
-msgid "Failed"
-msgstr "Mislykket"
+msgid "Server ID"
+msgstr "Server-id"
-msgid "Working, Media Available"
-msgstr "Jobber, media er tilgjengelig"
+msgid ""
+"Server ID. For sources, this should generally be omitted (or set to 0) so "
+"clip-searches are zone-wide. If set, clip-searches are limited to that "
+"server."
+msgstr ""
+"Server-ID. For kilder skal denne droppes (eller bli satt til 0) siden "
+"klippsøk skjer i heile sonen. Hvis denne er satt skjer klippsøk bare på den "
+"serveren."
-msgid "Working"
-msgstr "Jobber"
+msgid "Set"
+msgstr ""
-msgid "Pending"
-msgstr "Venter"
+msgid "Set as QuickLoop End"
+msgstr ""
-msgid "Blocked"
-msgstr "Blokkert"
+msgid "Set as QuickLoop Start"
+msgstr ""
-msgid "Canceled"
-msgstr "Avbrutt"
+msgid "Set In & Out points"
+msgstr ""
-msgid "Idle"
-msgstr "Inaktiv"
+msgid "Set part as Next"
+msgstr ""
-msgid "Skipped"
-msgstr "Hoppet over"
+msgid "Set segment as Next"
+msgstr "Sett tittel som Neste: Starter på neste Take"
-msgid "Step progress: {{progress}}"
-msgstr "Fremdrift: {{progress}}"
+msgid "Setting as QuickLoop End"
+msgstr ""
-msgid "Processing"
-msgstr "Prosesserer"
+msgid "Setting as QuickLoop Start"
+msgstr ""
-msgid "Unknown: {{status}}"
-msgstr "Ukjent: {{status}}"
+msgid "Setting Next"
+msgstr ""
-msgid "Collapse"
-msgstr "Minimer"
+msgid "Setting Next Segment"
+msgstr ""
-msgid "Details"
-msgstr "Detaljer"
+msgid "Settings"
+msgstr "Innstillinger"
-msgid "Abort"
-msgstr "Avbryt"
+msgid "Shelf"
+msgstr "Skuff"
-msgid "Prioritize"
-msgstr "Prioriter"
+msgid "Shelf Layout"
+msgstr "Layouter for skuffen"
-msgid "Media Transfer Status"
-msgstr "Status for medieoverføringer"
+msgid "Shelf layout uploaded successfully."
+msgstr "Opplastingen av layout for skuff var vellykket."
-msgid "Abort All"
-msgstr "Avbryt alle"
+msgid "Shelf Layouts"
+msgstr ""
-msgid "Restart All"
-msgstr "Start alle på nytt"
+msgid "Shortcuts"
+msgstr "Hurtigtaster"
-msgid "Unknown Package \"{{packageId}}\""
-msgstr "Ukjent pakke \"{{packageId}}\""
+msgid "Show \"Remove snapshots\"-buttons"
+msgstr "Vis \"Fjern snapshots\"-knappene"
-msgid "Package Status"
-msgstr "Pakkestatus"
+msgid "Show All"
+msgstr "Vis alle"
-msgid "Package container status"
-msgstr "Status for pakkekontainer"
+msgid "Show Breaks as Segments"
+msgstr "Vis pauser som titler"
-msgid "Id"
-msgstr "Id"
+msgid "Show config changes"
+msgstr ""
-msgid "Work status"
-msgstr "Jobbstatus"
+msgid "Show End"
+msgstr "Sendeslutt"
-msgid "Restart All jobs"
-msgstr "Start alle jobber på nytt"
+msgid "Show entire On Air Segment"
+msgstr "Vis hele tittelen som er OnAir"
-msgid "Created"
-msgstr "Opprettet"
+msgid "Show Hotkeys"
+msgstr "Vise hurtigtaster"
-msgid "Ready"
-msgstr "Klar"
+msgid "Show Inspector"
+msgstr ""
-msgid "The progress of steps required for playout"
-msgstr "Fremdrift for steg som er nødvendige for avspilling"
+msgid "Show issue"
+msgstr "Vis problem"
-msgid "The progress of all steps"
-msgstr "Fremdrift for alle steg"
+msgid "Show next break timing"
+msgstr "Vis tid for neste pause"
-msgid "This step is required for playout"
-msgstr "Dette steget er nødvendig for avspilling"
+msgid "Show panel as a timeline"
+msgstr "Vis panel som en tidslinje"
-msgid "Work description"
-msgstr "Jobbeskrivlese"
+msgid "Show part title"
+msgstr "Vis delens tittel"
-msgid "Work status reason"
-msgstr "Årsak for jobbstatus"
+msgid "Show Piece Icon Color"
+msgstr ""
-msgid "Technical reason: {{reason}}"
-msgstr "Teknisk årsak: {{reason}}"
+msgid "Show Rundown Name"
+msgstr "Vis kjøreplannavn"
-msgid "Previous work status reasons"
-msgstr "Tidligere årsaker for jobbsatus"
+msgid "Show segment name"
+msgstr "Vis tittelens navn"
-msgid "Priority"
-msgstr "Prioritet"
+msgid "Show Style"
+msgstr "Showstyle"
-msgid "Not Connected"
-msgstr "Ikke tilkoblet"
+msgid "Show Style Base Name"
+msgstr "Showstylenavn"
-msgid "Do you want to restart CasparCG Server?"
-msgstr "Er du sikker på at du vil restarte CasparCG?"
+msgid "Show style not set"
+msgstr "Showstyle ikke satt"
-msgid "Restart Quantel Gateway"
-msgstr "Start Quantel Gateway på nytt"
+msgid "Show Style Variant"
+msgstr "Showstylevariant"
-msgid "Do you want to restart Quantel Gateway?"
-msgstr "Vil du starte Quantel Gateway på nytt?"
+msgid "Show Style Variants"
+msgstr ""
-msgid "Quantel Gateway restarting..."
-msgstr "Quantel Gateway starter på nytt..."
+msgid "Show Styles"
+msgstr "Showstyle"
-msgid "Failed to restart Quantel Gateway: {{errorMessage}}"
-msgstr "Klarte ikke å restarte Quantel Gateway: {{errorMessage}}"
+msgid "Show thumbnails next to list items"
+msgstr "Vis miniatyrbilder ved siden av listeelementer"
-msgid "Format HyperDeck disks"
-msgstr "Formater HyperDeck-disker"
+msgid "ShowStyleBase not found!"
+msgstr ""
-msgid ""
-"Do you want to format the HyperDeck disks? This is a destructive action and "
-"cannot be undone."
+msgid "Shuttle Keyboard (Contour ShuttleXpress / X-keys)"
msgstr ""
-"Er du sikker på at du vil formatere HyperDeck-diskene? Dette kan ikke angres."
-msgid "Formatting HyperDeck disks on device \"{{deviceName}}\"..."
-msgstr "Formaterer HyperDeck-disker på \"{{deviceName}}\"..."
+msgid "Shuttle WebHID (Contour ShuttleXpress via browser)"
+msgstr ""
-msgid ""
-"Failed to format HyperDecks on device: \"{{deviceName}}\": {{errorMessage}}"
+msgid "Skip Fix Up Step"
msgstr ""
-"Formatering av HyperDeck-disker på \"{{deviceName}}\" feilet: "
-"{{errorMessage}}"
-msgid "Last seen"
-msgstr "Sist sett"
+msgid "Slack Webhook URLs"
+msgstr "Slack Webhook-adresser (url)"
-msgid "Connect some devices to the playout gateway"
-msgstr "Koble til en eller flere enheter til playout gatewayen"
+msgid "Smooth scrolling"
+msgstr ""
-msgid "Format disks"
-msgstr "Formater disker"
+msgid "Snapshot remove failed: {{errorMessage}}"
+msgstr ""
-msgid "Are you sure you want to delete this device: \"{{deviceId}}\"?"
-msgstr "Er du sikker på at du vil fjerne enheten \"{{deviceId}}\"?"
+msgid "Snapshot restore failed: {{errorMessage}}"
+msgstr "Gjenoppretting fra snapshot feilet: {{errorMessage}}"
-msgid "Sofie Automation Server Core: {{name}}"
-msgstr "Sofie:"
+msgid "Snapshot restored!"
+msgstr ""
-msgid "Restart this system?"
-msgstr "Starte dette Sofie-systemet på nytt?"
+msgid "Sofie"
+msgstr ""
-msgid ""
-"Are you sure you want to restart this Sofie Automation Server Core: {{name}}?"
-msgstr "Er du sikker på at du vil starte Sofie Core: {{name}} på nytt?"
+msgid "Sofie Automation"
+msgstr "Sofie"
-msgid "Could not generate restart token!"
-msgstr "Kunne ikke generere Restart Token!"
+msgid "Sofie Automation Server"
+msgstr ""
-msgid "Could not generate restart core: {{err}}"
-msgstr "Kunne ikke generere Restart Core: {{err}}"
+msgid "Sofie Automation Server Core"
+msgstr ""
msgid "Sofie Automation Server Core will restart in {{time}}s..."
msgstr "Sofie Core restartes om {{time}}s..."
-msgid "Execution times"
-msgstr "Kjøretider"
-
-msgid "User ID"
-msgstr "Bruker-id"
-
-msgid "Client IP"
-msgstr "Klient-ip"
-
-msgid "Method"
-msgstr "Metode"
-
-msgid "Parameters"
-msgstr "Parametre"
+msgid "Sofie Automation Server Core: {{name}}"
+msgstr "Sofie:"
-msgid "Time from platform user event to Action received by Core"
+msgid "Sofie logo to be displayed in the header. Requires a page refresh."
msgstr ""
-msgid "GUI"
-msgstr "Brukergrensesnitt"
-
-msgid "Core + Worker processing time"
+msgid "some invalid reason"
msgstr ""
-msgid "Core"
+msgid "some message"
msgstr ""
-msgid "Worker"
+msgid "some reason"
msgstr ""
-msgid "Gateway"
+msgid "something changed"
msgstr ""
-msgid "TSR"
+msgid ""
+"Something went wrong when creating the snapshot. Please contact the system "
+"administrator if the problem persists."
msgstr ""
-msgid "User Activity Log"
-msgstr "Aktivitetslogg"
+msgid "Something went wrong, and it affected the output"
+msgstr "Noe gikk galt, og det påvirket sendingen"
-msgid "in {{days}} days, {{hours}} h {{minutes}} min {{seconds}} s"
-msgstr "om {{days}} dager, {{hours}} t {{minutes}} min {{seconds}} s"
+msgid "Something went wrong, but it didn't affect the output"
+msgstr "Noe gikk galt, men det påvirket ikke sendingen"
-msgid "in {{hours}} h {{minutes}} min {{seconds}} s"
-msgstr "om {{hours}} t {{minutes}} min {{seconds}} s"
+msgid ""
+"Something went wrong, please contact the system administrator if the "
+"problem persists."
+msgstr "Noe gikk galt, kontakt systemadministrator hvis problemet fortsetter."
-msgid "in {{minutes}} min {{seconds}} s"
-msgstr "om {{minutes}} min {{seconds}} s"
+msgid "Source Abbreviation"
+msgstr "Kildeforkortelse"
-msgid "in {{seconds}} s"
-msgstr "om {{seconds}} s"
+msgid "Source Layer"
+msgstr "Kildelag"
-msgid "{{days}} days, {{hours}} h {{minutes}} min {{seconds}} s ago"
-msgstr "for {{days}} dager, {{hours}} t {{minutes}} min {{seconds}} s siden"
+msgid "Source layer cannot be reset as it has no default values"
+msgstr ""
-msgid "{{hours}} h {{minutes}} min {{seconds}} s ago"
-msgstr "for {{hours}} t {{minutes}} min {{seconds}} s siden"
+msgid "Source Layer Type"
+msgstr "Kildelagstyper"
-msgid "{{minutes}} min {{seconds}} s ago"
-msgstr "for {{minutes}} min {{seconds}} s siden"
+msgid "Source Layer Types"
+msgstr "Kildelagstyper"
-msgid "{{seconds}} s ago"
-msgstr "for {{seconds}} s siden"
+msgid "Source Layers"
+msgstr "Kildelag"
-msgid "Next scheduled show"
-msgstr "Neste planlagte sending"
+msgid "Source layers containing script"
+msgstr ""
-msgid "Help & Support"
-msgstr "Hjelp og brukerstøtte"
+msgid "Source Name"
+msgstr "Kildenavn"
-msgid "Disable hints by adding this to the URL:"
-msgstr "Deaktiver hint ved å legge dette til på url-en:"
+msgid "Source Type"
+msgstr "Kildetype"
-msgid "Enable hints by adding this to the URL:"
-msgstr "Aktiver hint ved å legge dette til på url-en:"
+msgid "Source/Output Layers"
+msgstr ""
-msgid "More documentation available at:"
-msgstr "Mer dokumentasjon er tilgjengelig på:"
+msgid "Sources"
+msgstr ""
-msgid "Timeline"
-msgstr "Tidslinje"
+msgid "Space separated list of style class names to use when displaying the action"
+msgstr ""
-msgid "Mappings"
-msgstr "Lagmappinger"
+msgid "Specify additional layers where at least one layer must have an active piece"
+msgstr ""
-msgid "User Log Player"
-msgstr "Brukerloggspiller"
+msgid "Speed control"
+msgstr ""
-msgid "Routed Mappings"
+msgid "Speed map"
msgstr ""
-msgid "Play from here"
-msgstr "Spill av herfra"
+msgid "Speed map (forward, right trigger)"
+msgstr ""
-msgid "Exectute Single"
-msgstr "Utfør enslig handling"
+msgid "Split Screen"
+msgstr "Splitt"
-msgid "Next Action"
-msgstr "Neste handling"
+msgid "Splits"
+msgstr ""
-msgid "Run in"
-msgstr "Kjør i"
+msgid "Standalone Shelf"
+msgstr "Frittstående skuff"
-msgid "Stop"
-msgstr "Stopp"
+msgid "Start Here!"
+msgstr "Start her!"
-msgid ""
-"Clip \"{{fileName}}\" can't be played because it doesn't exist on the "
-"playout system"
+msgid "Start In"
msgstr ""
-"Klippet \"{{fileName}}\" kan ikke spilles av fordi det ikke finnes på "
-"utspillingssystemet"
-msgid "{{sourceLayer}} is not yet ready on the playout system"
-msgstr ""
-"{{sourceLayer}} er ennå ikke klar til å spilles ut fra avviklingsserver"
+msgid "Start this AdLib"
+msgstr "Slett denne adliben"
-msgid "{{sourceLayer}} is transferring to the playout system"
-msgstr "{{sourceLayer}} overføres til avviklingsserver"
+msgid "Start time is close"
+msgstr "Oppgitt sendestart er hvert øyeblikk"
msgid ""
-"{{sourceLayer}} is transferring to the playout system and cannot be "
-"played yet"
-msgstr ""
-"{{sourceLayer}} overføres til avviklingsserver og kan ikke spilles av ennå"
+"Start with giving this browser configuration permissions by adding this to "
+"the URL: "
+msgstr "Først må du gå i konfigurasjonsmodus ved å legge dette til url-en: "
-msgid "{{sourceLayer}} doesn't have both audio & video"
-msgstr "{{sourceLayer}} har ikke lyd og/eller bilde"
+msgid "Started"
+msgstr "Startet"
-msgid "{{sourceLayer}} has the wrong format: {{format}}"
-msgstr "{{sourceLayer}}-formatet er ikke støttet: {{format}}"
+msgid "Starting AdLib"
+msgstr ""
-msgid "{{sourceLayer}} has {{audioStreams}} audio streams"
-msgstr "{{sourceLayer}} har {{audioStreams}} lydstrømmer"
+msgid "Starting Bucket AdLib"
+msgstr ""
-msgid "Clip starts with {{frames}} {{type}} frames"
-msgstr "Klippet starter med {{frames}} {{type}} ruter"
+msgid "Starting Global AdLib"
+msgstr ""
-msgid "This clip ends with {{type}} frames after {{count}} seconds"
-msgstr "Klippet slutter med {{frames}} {{type}} frame"
+msgid "Starting Sticky Piece"
+msgstr ""
-msgid "{{frames}} {{type}} frames detected within the clip"
-msgstr "{{frames}} {{type}} frame oppdaget inne i klippet"
+msgid "State"
+msgstr "Tilstand"
-msgid "{{frames}} {{type}} frames detected in the clip"
-msgstr "{{frames}} {{type}} frame oppdaget inne i klippet"
+msgid "State \"{{state}}\""
+msgstr ""
-msgid "black"
-msgstr "svart(e)"
+msgid "Statistics"
+msgstr "Statistikk"
-msgid "freeze"
-msgstr "fryst(e)"
+msgid "Status"
+msgstr "Status"
-msgid "{{sourceLayer}} is missing a file path"
-msgstr "{{sourceLayer}} kan ikke spilles av fordi filnavnet mangler"
+msgid "Status Messages:"
+msgstr "Statusmeldinger:"
-msgid "Clip doesn't have audio & video"
-msgstr "Klippet har ikke lyd og/eller bilde"
+msgid "Sticky Piece"
+msgstr "Element er sticky"
-msgid "Clip starts with {{frames}} {{type}} frame"
-msgstr "Klippet starter med {{frames}} {{type}} frame"
+msgid "Store Snapshot"
+msgstr "Lagre snapshot"
-msgid "This clip ends with {{type}} frames after {{count}} second"
-msgstr "Klippet slutter med {{frames}} {{type}} frame"
+msgid "Studio"
+msgstr "Studio"
-msgid "{{frames}} {{type}} frame detected within the clip"
-msgstr "{{frames}} {{type}} frame oppdaget inne i klippet"
+msgid "Studio Baseline needs update: "
+msgstr "Studio baseline må oppdateres: "
-msgid "{{frames}} {{type}} frame detected in clip"
-msgstr "{{frames}} {{type}} frame oppdaget i klippet"
+msgid "Studio Labels"
+msgstr ""
-msgid "{{sourceLayer}} is being ingested"
-msgstr "{{sourceLayer}} blir prosessert"
+msgid "Studio Name"
+msgstr "Studionavn"
-msgid "Source is missing"
-msgstr "Kilde mangler"
+msgid "Studio not found!"
+msgstr ""
-msgid "Segment no longer exists in {{nrcs}}"
-msgstr "Segmenet eksisterer ikke lenger i {{nrcs}}"
+msgid "Studio Screen Graphics"
+msgstr ""
-msgid "Segment was hidden in {{nrcs}}"
-msgstr "Tittelen eksisterer ikke lenger i {{nrcs}}"
+msgid "Studio Settings"
+msgstr "Studioinnstillinger"
-msgid "The following parts no longer exist in {{nrcs}}: {{partNames}}"
-msgstr "De følgende delene eksisterer ikke lenger i {{nrcs}}: {{partNames}}"
+msgid "Studio Snapshot"
+msgstr "Studiosnapshot"
-msgid "Toggle Shelf"
-msgstr "Skuff"
+msgid "Studios"
+msgstr "Studio"
-msgid "Undo Hold"
-msgstr "Angre hold"
+msgid "Style class names"
+msgstr ""
-msgid "Disable the next element"
-msgstr "Skip neste super"
+msgid "Subtract"
+msgstr ""
-msgid "Undo Disable the next element"
-msgstr "Unskip neste super"
+msgid "Successfully restored snapshot"
+msgstr "Gjenoppretting fra snapshot var vellykket"
-msgid "Move Next forwards"
-msgstr "Skip neste"
+msgid "Successfully stored snapshot"
+msgstr "Gjenoppretting fra snapshot var vellykket"
-msgid "Move Next to the following segment"
-msgstr "Skip til neste segment"
+msgid "Support Panel"
+msgstr ""
-msgid "Move Next backwards"
-msgstr "Unskip neste"
+msgid "Supported Audio Formats"
+msgstr "Støttede lydformater"
-msgid "Move Next to the previous segment"
-msgstr "Unskip neste segment"
+msgid "Supported Media Formats"
+msgstr "Støttede medieformater"
-msgid "Rewind segments to start"
-msgstr "Sett segmentene tilbake til start"
+msgid "Switch Route Set"
+msgstr ""
-msgctxt "°°°°°°plural"
-msgid "{{count}} rows°°°°°°"
-msgstr "{{count}} rader°°°°°°"
+msgid "Switch Segment View Mode"
+msgstr ""
-msgctxt "°°°°°°plural"
-msgid "This layer is now rerouted by an active Route Set: {{routeSets}}°°°°°°"
+msgid "Switch to List View"
msgstr ""
-"Dette laget blir omkoblet av flere aktive omkoblingsgrupper: {{routeSets}}°°°"
-"°°°"
-msgctxt "°°°°°°plural"
-msgid ""
-"There are {{count}} documents that can be removed, do you want to continue?°°"
-"°°°°"
+msgid "Switch to Storyboard View"
msgstr ""
-"Det er {{count}} dokumenter i {{collections}} som kan fjernes. Vil du "
-"fortsette?°°°°°°"
-#, fuzzy
-#| msgctxt "°°°°°°plural"
-#| msgid "Clip starts with {{frames}} {{type}} frame°°°°°°"
-msgctxt "°°°°°°plural"
-msgid "Clip starts with {{frames}} {{type}} frames°°°°°°"
-msgstr "Klippet starter med {{frames}} {{type}} frame°°°°°°"
+msgid "Switch to Timeline View"
+msgstr ""
-#, fuzzy
-#| msgctxt "°°°°°°plural"
-#| msgid "This clip ends with {{type}} frames after {{count}} second°°°°°°"
-msgctxt "°°°°°°plural"
-msgid "This clip ends with {{type}} frames after {{count}} seconds°°°°°°"
-msgstr "Klippet slutter med {{frames}} {{type}} frame°°°°°°"
+msgid "Switchboard"
+msgstr "Sentralbord"
-#, fuzzy
-#| msgctxt "°°°°°°plural"
-#| msgid "{{frames}} {{type}} frame detected within the clip°°°°°°"
-msgctxt "°°°°°°plural"
-msgid "{{frames}} {{type}} frames detected within the clip°°°°°°"
-msgstr "{{frames}} {{type}} frames oppdaget inne i klippet°°°°°°"
+msgid "Switchboard Panel"
+msgstr ""
-#, fuzzy
-#| msgctxt "°°°°°°plural"
-#| msgid "{{frames}} {{type}} frame detected within the clip°°°°°°"
-msgctxt "°°°°°°plural"
-msgid "{{frames}} {{type}} frames detected in the clip°°°°°°"
-msgstr "{{frames}} {{type}} frames oppdaget inne i klippet°°°°°°"
+msgid "Switching operating mode to {{mode}}"
+msgstr "Bytt til {{mode}}"
-msgctxt "°°°°°°plural"
-msgid "Clip starts with {{frames}} {{type}} frame°°°°°°"
-msgstr "Klippet starter med {{frames}} {{type}} frame°°°°°°"
+msgid "Switching routing"
+msgstr ""
-msgctxt "°°°°°°plural"
-msgid "This clip ends with {{type}} frames after {{count}} second°°°°°°"
-msgstr "Klippet slutter med {{frames}} {{type}} frame°°°°°°"
+msgid "System"
+msgstr "System"
-msgctxt "°°°°°°plural"
-msgid "{{frames}} {{type}} frame detected within the clip°°°°°°"
-msgstr "{{frames}} {{type}} frames oppdaget inne i klippet°°°°°°"
+msgid "System has issues which need to be resolved"
+msgstr "Systemet har problemer som må fikses"
-msgctxt "°°°°°°plural"
-msgid "{{frames}} {{type}} frame detected in clip°°°°°°"
-msgstr "{{frames}} {{type}} frames oppdaget i klippet°°°°°°"
+msgid "System must have exactly one studio"
+msgstr ""
-#~ msgid "Welcome to the Sofie Automation system"
-#~ msgstr "Velkommen til Sofie"
+msgid "System Status"
+msgstr "Systemstatus"
-#~ msgid "Sofie Automation version"
-#~ msgstr "Sofie-versjon"
+msgid "System-wide"
+msgstr "Systemvid"
-#~ msgid "Sofie status"
-#~ msgstr "Sofie-status"
+msgid "System-wide Notification Message"
+msgstr "Lokal systemmelding"
-#~ msgid "Using local Sofie order"
-#~ msgstr "Rekkefølge satt i Sofie"
+msgid "Table is not allowed to have `properties` defined"
+msgstr ""
-#~ msgid "Change order in playlist to override"
-#~ msgstr "Gjør endringer for å overstyre"
+msgid "Table is only allowed the wildcard `patternProperties`"
+msgstr ""
-#~ msgid "Register Shortcuts for this Panel"
-#~ msgstr "Legg til snarveier for dette panelet"
+msgid "Tables are not supported here"
+msgstr ""
-#~ msgid "Cannot play this AdLib becasue it is marked as Invalid"
-#~ msgstr "Kan ikke spille av adlib fordi den er markert som ugyldig"
+msgid "Tag"
+msgstr "Tag"
-#~ msgid "Cannot play this AdLib becasue it is marked as Floated"
-#~ msgstr "Kan ikke spille av adlib fordi det er markert som på vent (float)"
+msgid "Tags must contain"
+msgstr "Tagger må inneholde"
-#~ msgid ""
-#~ "The Rundown was attempted to be moved out of the Playlist when it was on "
-#~ "Air. Move it back and try again later."
-#~ msgstr ""
-#~ "Kjøreplanen ble forsøkt flyttet ut av spillelisten mens den var OnAir. "
-#~ "Flytt den tilbake og prøv igjen senere."
+msgid "Take"
+msgstr "Take"
-#~ msgid "Next Break"
-#~ msgstr "Neste pause"
+msgid "Take a Full System Snapshot"
+msgstr "Lagre et fullt systemsnapshot"
-#~ msgid "Using {{nrcsName}} order"
-#~ msgstr "Rekkefølge fra {{nrcsName}}"
+msgid "Take a Snapshot"
+msgstr "Lagre et snapshot"
-#~ msgid "Log Error"
-#~ msgstr "Loggfør feil"
+msgid "Take a Snapshot for studio \"{{studioName}}\" only"
+msgstr "Lagre et studiosnapshot utelukkende for \"{{studioName}}\""
-#~ msgid "Shortcut List"
-#~ msgstr "Liste over huritgtaster"
+msgid "Take and Download Memory Heap Snapshot"
+msgstr ""
-#~ msgid "Clear Shortcut"
-#~ msgstr "Fjern hurtigtast"
+msgid "Take System Snapshot"
+msgstr ""
-#~ msgid "Assign Hotkeys to Global AdLibs"
-#~ msgstr "Tildel hurtigtaster til globale adliber"
+msgid "Take System Snapshot failed: {{errorMessage}}"
+msgstr ""
-#~ msgid "Activate Sticky Piece Shortcut"
-#~ msgstr "Aktiver hurtigtast for sticky element"
+msgid "Taking Piece"
+msgstr ""
-#~ msgid "Escape from filter search"
-#~ msgstr "Gå ut av filtersøk"
+msgid "Technical reason: {{reason}}"
+msgstr "Teknisk årsak: {{reason}}"
-#~ msgid "Info"
-#~ msgstr "Info"
+msgid "test"
+msgstr ""
-#~ msgid "File name"
-#~ msgstr "Filnavn"
+msgid "Test ERROR message"
+msgstr ""
-#~ msgid "Last Updated"
-#~ msgstr "Sist oppdatert"
+msgid "Test Info message"
+msgstr ""
-#~ msgid "Invalid"
-#~ msgstr "Ugyldig"
+msgid "test partInstance"
+msgstr ""
-#~ msgid "New Tab"
-#~ msgstr "Ny fane"
+msgid "test pieceInstance"
+msgstr ""
-#~ msgid "New Panel"
-#~ msgstr "Nytt panel"
+msgid "test playlist"
+msgstr ""
-#~ msgid "Expose as a layout for the shelf"
-#~ msgstr "Eksponer som en layout for skuffen"
+msgid "test rundown"
+msgstr ""
-#~ msgid "Tabs"
-#~ msgstr "Faner"
+msgid "Test test"
+msgstr "Test test"
-#~ msgid "Panels"
-#~ msgstr "Paneler"
+msgid "Test Tools"
+msgstr "Testverktøy"
-#~ msgid "Add tab"
-#~ msgstr "Legg til fane"
+msgid "test2"
+msgstr ""
-#~ msgid "Add panel"
-#~ msgstr "Legg til panel"
+msgid "Text"
+msgstr "Tekst"
-#~ msgid "Shelf Layouts"
-#~ msgstr "Layouter for skuffen"
+msgid "Text to show above countdown to end of show"
+msgstr "Tekst som vises over nedtelling til forventet slutt"
-#~ msgid "Show style"
-#~ msgstr "Showstyle"
+msgid "Text to show above countdown to next break"
+msgstr "Tekst som vises over nedtelling til neste pause"
-#~ msgid "Clip is being ingested"
-#~ msgstr "Klippet blir prosessert"
+msgid "Text to show above show end time"
+msgstr "Tekst som vises over klokkeslett for sendeslutt"
-#~ msgid "Clip can't be played because the filename is missing"
-#~ msgstr "Klippet kan ikke spilles av fordi filnavnet mangler"
+msgid "Text to show above show start time"
+msgstr "Tekst som vises over klokkeslett for sendestart"
-#~ msgid "Clip format ({{format}}) is not in one of the accepted formats"
-#~ msgstr "Klippformatet ({{format}}) er ikke støttet"
+msgid ""
+"The config UI is now driven by manifests fed by the device. This device "
+"needs updating to provide the configManifest to be configurable"
+msgstr ""
+"Brukergrensesnittet for konfigurasjon drives nå av manifester matet fra "
+"enhetene. Denne enheten må oppdateres for å gjøre configManifest "
+"konfigurerbart"
-#~ msgid "Activate"
-#~ msgstr "Aktiver"
+msgid "The following parts no longer exist in {{nrcs}}: {{partNames}}"
+msgstr "De følgende delene eksisterer ikke lenger i {{nrcs}}: {{partNames}}"
-#, fuzzy
-#~| msgid "Mark the rundown as unsynced"
-#~ msgid "Leave it in Sofie (mark the rundown as unsynced)"
-#~ msgstr "Marker kjøreplan som usynkronisert"
+msgid "The migration can be completed automatically."
+msgstr "Migreringen kan gjennomføres automatisk."
-#, fuzzy
-#~| msgid "Remove just the rundown"
-#~ msgid "Remove just the rundown from Sofie"
-#~ msgstr "Fjern bare kjøreplan"
+msgid ""
+"The migration consists of several phases, you will get more options after "
+"you've this migration"
+msgstr ""
+"Migreringen består av flere faser, du vil få flere valg etter at du har "
+"kjørt denne migreringen"
-#~ msgid "CasparCG Channel"
-#~ msgstr "CasparCG-kanal"
+msgid "The migration was completed successfully!"
+msgstr "Migreringen var vellykket!"
-#~ msgid "The CasparCG channel to use (1 is the first)"
-#~ msgstr "CasparCG-kanalen som skal brukes (1 er den første)"
+msgid "The old data was removed."
+msgstr "Gamle data ble fjernet."
-#~ msgid "CasparCG Layer"
-#~ msgstr "CasparCG-lag"
+msgid ""
+"The planned end time has passed, are you sure you want to activate this "
+"Rundown?"
+msgstr ""
+"Det planlagte sluttidspunktet er passert, er du sikker på at du vil "
+"aktivere denne kjøreplan?"
-#~ msgid "The layer in a channel to use"
-#~ msgstr "Kanallaget som skal brukes"
+msgid "The progress of all steps"
+msgstr "Fremdrift for alle steg"
-#~ msgid "Preview when not on air"
-#~ msgstr "Vis preview når ikke OnAir"
+msgid "The progress of steps required for playout"
+msgstr "Fremdrift for steg som er nødvendige for avspilling"
-#~ msgid "Mapping type"
-#~ msgstr "Mappingtype"
+msgid ""
+"The rundown \"{{rundownName}}\" is not published or activated in "
+"{{nrcsName}}! No data updates will currently come through."
+msgstr ""
+"Kjøreplanen \"{{rundownName}}\" er ikke synkronisert med MOS/{{nrcsName}}! "
+"Kontroller at den er satt MOS Active i ENPS."
-#~ msgid "Index"
-#~ msgstr "Index"
+msgid "The rundown can not be reset while it is active"
+msgstr "En aktivert kjøreplan kan ikke tilbakestilles"
-#~ msgid "Identifier"
-#~ msgstr "Identifikator"
+msgid ""
+"The Rundown was attempted to be moved out of the Playlist when it was on "
+"Air. Move it back and try again later."
+msgstr ""
-#~ msgid "Sisyfos Channel"
-#~ msgstr "Sisyfos-kanal"
+msgid ""
+"The rundown you are trying to execute a take on is inactive, would you like "
+"to activate this rundown?"
+msgstr ""
+"Du prøve å gjøre en Take i en inaktiv kjøreplan. Vil du aktivere denne "
+"kjøreplanen?"
-#~ msgid "Quantel Port ID"
-#~ msgstr "Quantel port-id"
+msgid ""
+"The rundown: \"{{rundownName}}\" will need to be deactivated in order to "
+"activate this one.\n"
+"\n"
+"Are you sure you want to activate this one anyway?"
+msgstr ""
-#~ msgid "The name you'd like the port to have"
-#~ msgstr "Navnet du vil gi porten"
+msgid ""
+"The segment duration in the segment header always displays the planned "
+"duration instead of acting as a counter"
+msgstr ""
+"Tittelens varighet i tittelheaderen vil alltid vise den planlagte "
+"varigheten i stedet for å telle ned"
-#~ msgid "Quantel Channel ID"
-#~ msgstr "Quantel kanal-id"
+msgid "The selected part cannot be played"
+msgstr ""
-#~ msgid "The channel to use for output (0 is the first one)"
-#~ msgstr "Kanalen som skal brukes som utgang (0 er den første)"
+msgid "The selected part does not exist"
+msgstr ""
-#~ msgid "Mode"
-#~ msgstr "Modus"
+msgid ""
+"The system configuration has been changed since importing this rundown. It "
+"might not run correctly"
+msgstr ""
+"Systemoppsettet har blitt endret etter at denne kjøreplanen ble importert. "
+"Kjøreplanen kan spilles av med feil"
-#~ msgid "Preset"
-#~ msgstr "Preset"
+msgid "The type of device to use for the output"
+msgstr "Enhetstype som skal brukes for utgangen"
-#~ msgid "Preset Transition Speed"
-#~ msgstr "Preset transtition-hastighet"
+msgid "The type of mapping to use"
+msgstr ""
-#~ msgid "Zoom Speed"
-#~ msgstr "Zoom-hastighet"
+msgid "The way this Route Set should behave towards the user"
+msgstr "Måten denne omkoblingsgruppen skal oppføre seg på overfor brukeren"
-#~ msgid "Unknown Mapping"
-#~ msgstr "Ukjent lag"
+msgid "Then, run the migrations script:"
+msgstr "Kjør så migreringsprosedyren:"
-#~ msgid "Channel: {{channel}}"
-#~ msgstr "Kanal: {{channel}}"
+msgid "There are no AB Playout devices set up yet"
+msgstr ""
-#~ msgid "Port: {{port}}, Channel: {{channel}}"
-#~ msgstr "Port: {{port}}, Kanal: {{channel}}"
+msgid "There are no Accessors set up."
+msgstr "Ingen aksessorer er satt opp."
-#~ msgid "Unknown device type: {{device}}"
-#~ msgstr "Ukjent enhetstype: {{device}}"
+msgid "There are no active rundowns."
+msgstr "Fant ingen aktive kjøreplaner."
-#~ msgid "Delete this RundownPlaylist?"
-#~ msgstr "Slett denne kjøreplanlisten?"
+msgid "There are no exclusivity groups set up."
+msgstr "Ingen eksklusivitetsgrupper er satt opp."
-#~ msgid "Are you sure you want to delete the \"{{name}}\" RundownPlaylist?"
-#~ msgstr "Er du sikker på at du vil slette kjøreplanlisten \"{{name}}\"?"
+msgid "There are no filters set up yet"
+msgstr "Det er ikke satt opp noen filtre ennå"
-#~ msgid "Re-Sync this rundownPlaylist?"
-#~ msgstr "Synkroniser kjøreplanlisten med ENPS på nytt?"
+msgid ""
+"There are no Playout Gateways connected and attached to this studio. Please "
+"contact the system administrator to start the Playout Gateway."
+msgstr ""
+"Dette studioet har ingen tilkoblede playout-gatewayer. Kontakt "
+"systemadministrator for å starte den."
-#~ msgid ""
-#~ "Are you sure you want to re-sync all rundowns in playlist \"{{name}}\"?"
-#~ msgstr ""
-#~ "Er du sikker på at du vil synkronisere alle kjøreplanene i "
-#~ "kjøreplanlisten \"{{name}}\" på nytt?"
+msgid "There are no Route Sets set up."
+msgstr "Det er ikke satt opp omkoblinger ennå."
-#~ msgid "Timeline views"
-#~ msgstr "Tidslinjevisninger"
+msgid "There are no routes set up yet"
+msgstr "Det er ikke satt opp omkoblinger ennå"
-#~ msgid "Multiple ({{count}})"
-#~ msgstr "Flere ({{count}})"
+msgid "There are no rundowns ingested into Sofie."
+msgstr "Det er ikke sendt kjøreplaner til Sofie."
-#~ msgid "Re-sync all rundowns in playlist"
-#~ msgstr "Synkroniser alle kjøreplanene i listen på nytt"
+msgid "There are no sub-devices for this gateway"
+msgstr ""
-#~ msgid ""
-#~ "Do you really want to remove the rundownPlaylist \"{{rundownName}}\"? "
-#~ "This cannot be undone!"
-#~ msgstr ""
-#~ "Er du sikker på at du bare vil slette kjøreplanen {{rundownName}} i "
-#~ "listen {{playlistName}} fra Sofie? Dette kan ikke angres!"
+msgid "There is an unknown problem with the part."
+msgstr "Det er et ukjent problem med denne delen."
-#~ msgid "Cue as Next"
-#~ msgstr "Sett som neste"
+msgid "There is an unspecified problem with the source."
+msgstr "Det er et ikke-spesifisert problem med kilden."
-#~ msgid "Edit"
-#~ msgstr "Endre"
+msgid "There is no rundown active in this studio."
+msgstr "Fant ingen aktive kjøreplaner for dette studioet."
-#~ msgctxt "°°°°°°plural"
-#~ msgid "Multiple ({{count}})°°°°°°"
-#~ msgstr "Flere ({{count}})°°°°°°"
+msgid ""
+"There was an error when troubleshooting the device: \"{{deviceName}}\": "
+"{{errorMessage}}"
+msgstr ""
+"Det skjedde en feil under feilsøking av enhenten \"{{deviceName}}\": "
+"{{errorMessage}}"
-#~ msgid "Add rundowns by connecting a gateway."
-#~ msgstr "Legg til kjøreplaner ved å koble til en gateway."
+msgid "There was an error: {{error}}"
+msgstr "Det skjedde en feil: {{error}}"
-#~ msgid "Check system status messages."
-#~ msgstr "Kontroller systemstatusmeldinger."
+msgid "This action has an invalid combination of filters"
+msgstr "Denne handlingen har en ugyldig kombinasjon av filtre"
-#~ msgid "Air Status"
-#~ msgstr "Sendingsstatus"
+msgid "This affects how much is logged to the console on the server"
+msgstr "Dette påvirker hvor mye som blir logget til serverkonsollen"
-#~ msgid "Sofie Automation Server"
-#~ msgstr "Sofie"
+msgid "This blueprint has not provided a valid config schema"
+msgstr ""
-#~ msgid "Connecting to the {{platformName}}"
-#~ msgstr "Kobler til {{platformName}}"
+msgid "This Blueprint is not being used by any Show Style"
+msgstr "Dette blueprintet er ikke i bruk av noen showstyles"
-#~ msgid "Cannot connect to the {{platformName}}: {{reason}}"
-#~ msgstr "Kan ikke koble til Sofie-serveren: {{reason}}"
+msgid "This Blueprint is not compatible with any Studio"
+msgstr "Dette blueprintet er ikke kompatibel med noe studio"
-#~ msgid "Reconnecting to the {{platformName}}"
-#~ msgstr "Kobler til {{platformName}} på nytt"
+msgid "This clip ends with black frames after {{seconds}} seconds"
+msgstr ""
-#~ msgid "Your machine is offline and cannot connect to the {{platformName}}."
-#~ msgstr "Din maskin er frakoblet og kan ikke koble til {{platformName}}."
+msgid "This clip ends with freeze frames after {{seconds}} seconds"
+msgstr ""
-#~ msgid "Connected to the {{platformName}}."
-#~ msgstr "Tilkoblet til {{platformName}}."
+msgid "This could leave the configuration in a broken state"
+msgstr ""
-#~ msgid "Reconnect now"
-#~ msgstr "Koble til på nytt"
+msgid "This enables or disables buckets in the UI - enabled is the default behavior"
+msgstr ""
-#, fuzzy
-#~ msgid "Switching route"
-#~ msgstr "Omkoblinger"
+msgid ""
+"This enables or disables the evaluationform in the UI - enabled is the "
+"default behavior"
+msgstr ""
-#, fuzzy
-#~ msgid "Are you sure you want to enable this route: \"{{routeName}}\"?"
-#~ msgstr ""
-#~ "Er du sikker på at du vil aktivere denne omkoblingen: \"{{routeName}}\"?"
+msgid "This feature enables the use of the Properties Panel and the Edit Mode"
+msgstr ""
-#, fuzzy
-#~ msgid "Are you sure you want to disable this route: \"{{routeName}}\"?"
-#~ msgstr ""
-#~ "Er du sikker på at du vil deaktivere denne omkoblingen: \"{{routeName}}\"?"
+msgid "This has only been tested for the iNews gateway"
+msgstr ""
-#~ msgid "Source Layer ID"
-#~ msgstr "Opprinnelig lag-id"
+msgid "This is not in it's normal setting"
+msgstr "Endret fra standardoppsett"
-#~ msgid "Test Tools – Recordings"
-#~ msgstr "Testverktøy - Opptak"
+msgid ""
+"This migration consists of {{stepCount}} steps ({{ignoredStepCount}} steps "
+"are ignored)."
+msgstr ""
-#~ msgid "Path Prefix"
-#~ msgstr "Stiprefiks"
+msgid "This must be assigned to a device to be able to edit the settings"
+msgstr ""
-#~ msgid "URL Prefix"
-#~ msgstr "Adresseprefiks (url)"
+msgid "This name will be shown in the title bar of the window"
+msgstr "Dette navnet vil vises i tittellinjen for vinduet"
-#~ msgid "Decklink Input Index"
-#~ msgstr "Decklink-inngang"
+msgid "This playlist is empty"
+msgstr "Denne spillelisten er tom"
-#~ msgid "Decklink Input Format"
-#~ msgstr "Format for Decklink-inngang"
+msgid ""
+"This requires the blueprints to implement the "
+"`generateAdlibTestingIngestRundown` method"
+msgstr ""
-#~ msgid "Recordings"
-#~ msgstr "Opptak"
+msgid "This rundown has been unpublished from Sofie."
+msgstr "Denne kjøreplanen er ikke lenger tilgjengelig i Sofie."
-#~ msgid "A required setting is not configured"
-#~ msgstr "En obligatorisk innstilling er ikke konfigurert"
+msgid "This rundown is currently active"
+msgstr "Denne kjøreplanen er allerede aktiv"
-#~ msgid "Are you sure you want to delete recording \"{{name}}\"?"
-#~ msgstr "Er du sikker på at du vil slette opptaket \"{{name}}\"?"
+msgid "This rundown is now active. Are you sure you want to exit this screen?"
+msgstr "Denne kjøreplanen er aktiv. Er du sikker på at du vil avslutte?"
-#~ msgid "Stopped"
-#~ msgstr "Stoppet"
+msgid "This rundown will loop indefinitely"
+msgstr "Denne kjøreplanen vil gå i en uendelig loop"
-#~ msgid "Your browser does not support video playback"
-#~ msgstr "Nettleseren støtter ikke videoavspilling"
+msgid "This Show Style is not compatible with any Studio"
+msgstr "Denne showstylen er ikke kompatibelt med noe studio"
-#~ msgid "Recording still in progress"
-#~ msgstr "Opptak pågår fremdeles"
+msgid "This step is required for playout"
+msgstr "Dette steget er nødvendig for avspilling"
-#~ msgid "MOS Connection"
-#~ msgstr "MOS-tilkobling"
+msgid "This studio doesn't exist."
+msgstr "Dette studioet finnes ikke."
-#~ msgid "Infinite"
-#~ msgstr "Manuell"
+msgid "This will remove {{indexCount}} old indexes, do you want to continue?"
+msgstr "Dette vil fjerne {{indexCount}} gamle indexer. Vil du fortsette?"
-#~ msgid "File Name"
-#~ msgstr "Filnavn"
+msgid "Time from platform user event to Action received by Core"
+msgstr ""
-#~ msgid "System Messages"
-#~ msgstr "Systemmeldinger"
+msgid "Time since planned end"
+msgstr "Tid siden planlagt slutt"
-#~ msgid ""
-#~ "Are you sure you want to delete this runtime argument \"{{property}}: "
-#~ "{{value}}\"?"
-#~ msgstr ""
-#~ "Er du sikker på at du vil slette runtimeargumentet \"{{property}}: "
-#~ "{{value}}\"?"
+msgid "Time since rehearsal end"
+msgstr ""
-#~ msgid "Property"
-#~ msgstr "Egenskap"
+msgid "Time to planned end"
+msgstr "Tid til planlagt slutt"
-#~ msgid "Runtime Arguments for Blueprints"
-#~ msgstr "Runtimeargumenter for blueprints"
+msgid "Time to planned start"
+msgstr ""
-#~ msgid "Source is not set"
-#~ msgstr "Kilde er ikke definert"
+msgid "Time to rehearsal end"
+msgstr ""
-#~ msgid "{{displayName}}: {{messages}}"
-#~ msgstr "{{displayName}}: {{messages}}"
+msgid "Timeline"
+msgstr "Tidslinje"
-#~ msgid "Params"
-#~ msgstr "Parametre"
+msgid "Timeline Datastore"
+msgstr ""
-#~ msgid "Make ready commands"
-#~ msgstr "Klargjøringskommandoer"
+msgid "Times"
+msgstr "Tider"
-#~ msgid "Remove this command?"
-#~ msgstr "Fjern denne kommandoen?"
+msgid "Timestamp"
+msgstr "Tidsstempel"
-#~ msgid "Are you sure you want to remove this command?"
-#~ msgstr "Er du sikker på at du vil fjerne denne kommandoen?"
+msgid "To inspect the memory heap snapshot, use Chrome DevTools"
+msgstr ""
-#~ msgid "Queue"
-#~ msgstr "Kø"
+msgid "Today"
+msgstr "I dag"
-#~ msgid "Hosts"
-#~ msgstr "Verter"
+msgid "Toggle"
+msgstr "Veklse"
-#~ msgid "iNews Queues"
-#~ msgstr "iNews-køer"
+msgid "Toggle AdLibs on single mouse click"
+msgstr "Veksle mellom adliber med enkelt museklikk"
-#~ msgid "User"
-#~ msgstr "Bruker"
+msgid "Toggle Shelf"
+msgstr "Skuff"
-#~ msgid "Debug logging"
-#~ msgstr "Logging for feilsøking"
+msgid "Toggle Support Panel"
+msgstr ""
-#~ msgid "Storage ID"
-#~ msgstr "Lager-id"
+msgid "Toggled Label"
+msgstr ""
-#~ msgid "Base Path"
-#~ msgstr "Rotsti"
+msgid "Tomorrow"
+msgstr "I morgen"
-#~ msgid "Media Path"
-#~ msgstr "Mediesti"
+msgid "Tools"
+msgstr "Verktøy"
-#~ msgid "Mapped Networked Drive"
-#~ msgstr "Stasjonsbokstav"
+msgid "Top"
+msgstr ""
-#~ msgid "Username"
-#~ msgstr "Brukernavn"
+msgid "Transition"
+msgstr "Effekt"
-#~ msgid "Don't Scan Entire Storage"
-#~ msgstr "Ikke scan hele lagringsområdet"
+msgid "Treat as Main content"
+msgstr ""
-#~ msgid "Base path is a network share"
-#~ msgstr "Rotsti er til en nettverksressurs"
+msgid "Trigger dead zone"
+msgstr ""
-#~ msgid "Media Flow ID"
-#~ msgstr "Medieflyt-id"
+msgid "Trigger Mode"
+msgstr ""
-#~ msgid "Media Flow Type"
-#~ msgstr "Medieflyttype"
+msgid "Triggered Actions failed to upload: {{errorMessage}}"
+msgstr "Opplasting av handlingsutløsere feilet: {{errorMessage}}"
-#~ msgid "Source Storage"
-#~ msgstr "Kildens lagringsområde"
+msgid "Triggered Actions uploaded successfully."
+msgstr "Opplasting av handlingsutløsere var vellykket."
-#~ msgid "Target Storage"
-#~ msgstr "Målets lagringsområde"
+msgid "Trim \"{{name}}\""
+msgstr "Trim \"{{name}}\""
-#~ msgid "Delete this Monitor?"
-#~ msgstr "Slett denne monitoren?"
+msgid "Trimmed successfully."
+msgstr ""
-#~ msgid "Are you sure you want to delete the monitor \"{{monitorId}}\"?"
-#~ msgstr "Er du sikker på at du vil slette monitoren \"{{monitorId}}\"?"
+msgid "Trimming this clip has failed due to an error: {{error}}."
+msgstr "Endring av inn-/utpunkt for dette klippet feilet: {{error}}."
-#~ msgid "ID already exists"
-#~ msgstr "Denne id-en finnes allerede"
+msgid ""
+"Trimming this clip has timed out. It's possible that the story is currently "
+"locked for writing in {{nrcsName}} and will eventually be updated. Make "
+"sure that the story is not being edited by other users."
+msgstr ""
+"Endring av inn-/utpunkt for dette klippet tar lang tid. Det er mulig "
+"manuset i er låst i {{nrcsName}} og at inn-/utpunkt endres om litt. "
+"Forsikre deg om at manuset ikke blir redigert av andre brukere."
-#~ msgid "The ID {{monitorId}} already exists!"
-#~ msgstr "Monitor-id-en {{monitorId}} finnes allerede!"
+msgid ""
+"Trimming this clip is taking longer than expected. It's possible that the "
+"story is locked for writing in {{nrcsName}}."
+msgstr ""
+"Endring av inn-/utpunkt for dette klippet tek meir tid enn forventa. Det er "
+"mogleg manuset er låst for redigering i {{nrcsName}}."
-#~ msgid "Monitor ID"
-#~ msgstr "Monitor-id"
+msgid "Troubleshoot"
+msgstr "Feilsøk"
-#~ msgid "Monitor Type"
-#~ msgstr "Monitortype"
+msgid "TSR"
+msgstr ""
-#~ msgid "Media Scanner Host"
-#~ msgstr "Vert for mediascanner"
+msgid "Type"
+msgstr "Type"
-#~ msgid "Media Scanner Port"
-#~ msgstr "Port for mediascanner"
+msgid "Unable to check the system configuration for changes"
+msgstr "Kan ikke kontrollere endringer i systemoppsettet"
-#~ msgid "Quantel ISA URL"
-#~ msgstr "Quantel ISA-adresse (url)"
+msgid "Unable to upgrade"
+msgstr ""
-#~ msgid "Quantel Server ID"
-#~ msgstr "Quantel server-id"
+msgid "Unassign"
+msgstr "Fjern tilordning"
-#~ msgid "No. of Available Workers"
-#~ msgstr "Antall tilgjengelige Workers"
+msgid "Unconfigured"
+msgstr ""
-#~ msgid "File Linger Time"
-#~ msgstr "Maks ventetid for fil"
+msgid "Under"
+msgstr ""
-#~ msgid "Workflow Linger Time"
-#~ msgstr "Maks ventetid for arbeidsflyt"
+msgid "Undo"
+msgstr "Angre"
-#~ msgid "Cron-Job Interval Time"
-#~ msgstr "Tidsintervall for Cron-Jobs"
+msgid "Undo Disable the next element"
+msgstr "Unskip neste super"
-#~ msgid "Activate Debug Logging"
-#~ msgstr "Aktiver logging for feilsøking"
+msgid "Undo Hold"
+msgstr "Angre hold"
-#~ msgid "Remove this storage?"
-#~ msgstr "Fjern dette lagringsområdet?"
+msgid "Unknown"
+msgstr "Ukjent"
-#~ msgid "Remove this flow?"
-#~ msgstr "Fjern denne flyten?"
+msgid "Unknown action"
+msgstr ""
-#~ msgid "Are you sure you want to remove flow \"{{flowId}}\"?"
-#~ msgstr "Er du sikker på at du vil fjerne flyten \"{{flowId}}\"?"
+msgid "Unknown error"
+msgstr "Ukjent feil"
-#~ msgid "Attached Storages"
-#~ msgstr "Tilkoblede lagringsområder"
+msgid "Unknown Layer"
+msgstr "Ukjent lag"
-#~ msgid "Media Flows"
-#~ msgstr "Medieflyter"
+msgid "Unknown Package \"{{packageId}}\""
+msgstr "Ukjent pakke \"{{packageId}}\""
-#~ msgid "Monitors"
-#~ msgstr "Monitorer"
+msgid "Unnamed blueprint"
+msgstr "Blueprint uten navn"
-#~ msgid "Primary ID (Newsroom System MOS ID)"
-#~ msgstr "Primær id (News Room System MOS ID)"
+msgid "Unnamed Show Style"
+msgstr "Showstyle uten navn"
-#~ msgid "Primary Host (IP or Hostname)"
-#~ msgstr "Primær vert (ip-adresse eller vertsnavn)"
+msgid "Unnamed Studio"
+msgstr "Studio uten navn"
-#~ msgid "Primary: dont use MOS query-port"
-#~ msgstr "Primær: Ikke bruk MOS Query-port"
+msgid "Unnamed variant"
+msgstr "Variant uten navn"
-#~ msgid "Secondary ID (Newsroom System MOS ID)"
-#~ msgstr "Sekundær id (News Room System MOS ID)"
+msgid "Unsupported array type \"{{ type }}\""
+msgstr ""
-#~ msgid "Secondary Host (IP Address or Hostname)"
-#~ msgstr "Sekundær vert (ip-adresse eller vertsnavn)"
+msgid "Unsupported field type \"{{ type }}\""
+msgstr ""
-#~ msgid "Secondary: dont use MOS query-port"
-#~ msgstr "Sekundær: Ikke bruk MOS Query-port"
+msgid "Unsyncing Rundown"
+msgstr ""
-#~ msgid "MOS ID of Gateway (Sofie MOS ID)"
-#~ msgstr "MOS-id for gateway (Sofie MOS ID)"
+msgid "Until"
+msgstr ""
-#~ msgid "Device id"
-#~ msgstr "Enhets-id"
+msgid "Until end of rundown"
+msgstr "Til slutten av kjøreplanen"
-#~ msgid "Thread Usage"
-#~ msgstr "Tråder i bruk"
+msgid "Until End of Rundown"
+msgstr ""
-#~ msgid "Port"
-#~ msgstr "Port"
+msgid "Until end of segment"
+msgstr "Til slutten av segment"
-#~ msgid "CasparCG Launcher Host"
-#~ msgstr "Vert for CasparCG Launcher"
+msgid "Until End of Segment"
+msgstr ""
-#~ msgid "CasparCG Launcher Port"
-#~ msgstr "Port for CasparCG Launcher"
+msgid "Until end of showstyle"
+msgstr "Til slutten av showstyle"
-#~ msgid "Minimum recording time"
-#~ msgstr "Minimum opptakstid"
+msgid "Until End of Showstyle"
+msgstr ""
-#~ msgid "Enable SSL"
-#~ msgstr "Aktiver SSL"
+msgid "Until next rundown"
+msgstr "Til neste kjøreplan"
-#~ msgid "HTTPMethod"
-#~ msgstr "HTTPMethod"
+msgid "Until Next Rundown"
+msgstr ""
-#~ msgid "expectedHttpResponse"
-#~ msgstr "expectedHttpResponse"
+msgid "Until next segment"
+msgstr "Til neste segment"
-#~ msgid "Keyword"
-#~ msgstr "Nøkkelord"
+msgid "Until Next Segment"
+msgstr ""
-#~ msgid "Interval"
-#~ msgstr "Intervall"
+msgid "Until next take"
+msgstr "Til neste Take"
-#~ msgid "(Optional) REST port"
-#~ msgstr "(Valgfri) REST-port"
+msgid "Until Next Take"
+msgstr ""
-#~ msgid "(Optional) Websocket port"
-#~ msgstr "(Valgfri) Websocket-port"
+msgid "Update"
+msgstr "Oppdater"
-#~ msgid "Show ID"
-#~ msgstr "Show-id"
+msgid "Update Blueprints?"
+msgstr "Oppdater blueprints?"
-#~ msgid "Profile"
-#~ msgstr "Profil"
+msgid "Updated"
+msgstr "Oppdatert"
-#~ msgid "(Optional) Playlist id"
-#~ msgstr "(Valgfri) Spilleliste-id"
+msgid "Upgrade config for {{name}}"
+msgstr ""
-#~ msgid "Preload all elements"
-#~ msgstr "Last inn alle elementer på forhånd"
+msgid "Upgrade Database"
+msgstr "Oppgrader databasen"
-#~ msgid "Automatically load internal elements when added"
-#~ msgstr "Last interne elementer automatisk når de blir lagt til"
+msgid "Upgrade required"
+msgstr ""
-#~ msgid "Only preload elements in active Rundown"
-#~ msgstr "Kun forhåndslast elementer i aktiv kjøreplan"
+msgid "Upgrade Status"
+msgstr ""
-#~ msgid "Activate Multi-Threading"
-#~ msgstr "Bruk flere tråder"
+msgid "Upload"
+msgstr "Last opp"
-#~ msgid "Activate Multi-Threaded Timeline Resolving"
-#~ msgstr "Bruk flere tråder for Timeline Resolving"
+msgid "Upload a new blueprint"
+msgstr "Last opp et nytt blueprint"
-#~ msgid "(Restart to apply)"
-#~ msgstr "(Start på nytt for å ta i bruk endringer)"
+msgid "Upload a snapshot file"
+msgstr ""
-#, fuzzy
-#~ msgid "Report command timings on all commangs"
-#~ msgstr "Rapporter kommandotider for alle commangs"
+msgid ""
+"Upload a snapshot file (restores additional info not directly related to a "
+"Playlist / Rundown, such as Packages, PackageWorkStatuses etc"
+msgstr ""
-#~ msgid "Drive folder name"
-#~ msgstr "Mappenavn på Drive"
+msgid "Upload Blueprints"
+msgstr "Last opp blueprints"
-#~ msgid "Provide the name of the folder to download rundowns from"
-#~ msgstr "Oppgi navnet på mappen kjøreplaner skal lastes ned fra"
+msgid "Upload Layout?"
+msgstr "Last opp layout?"
-#, fuzzy
-#~ msgid ""
-#~ "Go to the url below and click on the \"Enable the Drive API\" button. "
-#~ "Then click on \"Download Client configuration\", save the credentials."
-#~ "json file and upload it here."
-#~ msgstr ""
-#~ "Gå til linken under og klikk på \"Enable the Drive API\"-knappen. Klikk "
-#~ "deretter på \"Download Client configuration\", lagre credentials.json-"
-#~ "filen og last den opp her."
+msgid "Upload Snapshot"
+msgstr "Last opp snapshot"
-#~ msgid "Row"
-#~ msgstr "Rad"
+msgid "Upload Snapshot (for debugging)"
+msgstr ""
-#~ msgid "Cannot connect to the"
-#~ msgstr "Kan ikke koble til"
+msgid "Upload stored Action Triggers"
+msgstr "Last opp lagrede handlingsutløsere"
-#~ msgid "Sofie Automation Server:"
-#~ msgstr "Sofie:"
+msgid "URL"
+msgstr "Adresse (url)"
-#~ msgid "rows"
-#~ msgstr "rader"
+msgid "URL to the Quantel FileFlow Manager"
+msgstr "Adresse til Quantel FileFlow Manager"
-#~ msgid "Delete this Item?"
-#~ msgstr "Slett dette elementet?"
+msgid "URL to the Quantel Gateway"
+msgstr "Start Quantel Gateway på nytt"
-#~ msgid "Set Database Version"
-#~ msgstr "Sett databaseversjon"
+msgid "URL to the Quantel HTTP transformer"
+msgstr "Adresse til Quantel HTTP transformer"
-#~ msgid "Are you sure you want to set the database version to"
-#~ msgstr "Er du sikker på at du vil sette databaseversjon til"
+msgid "URLs to the ISAs, in order of importance (comma separated)"
+msgstr "Adresser (url-er) for ISA-ene (kommaseparert i prioritert rekkefølge)"
-#~ msgid "Restart this device?"
-#~ msgstr "Start denne enheten på nytt?"
+msgid "Use {{nrcsName}} order"
+msgstr "Bruk rekkefølge fra {{nrcsName}}"
-#~ msgid "Is unlimited"
-#~ msgstr "Er ubegrenset"
+msgid "Use as default"
+msgstr ""
-#~ msgid "Is on clean PGM"
-#~ msgstr "Ligger på cleanfeed"
+msgid "Use color of primary piece as background of panel"
+msgstr ""
-#~ msgid "Reload Rundown"
-#~ msgstr "Last inn kjøreplanen på nytt"
+msgid "Use Trigger Mode"
+msgstr ""
-#~ msgid "ID"
-#~ msgstr "ID"
+msgid "User Activity Log"
+msgstr "Aktivitetslogg"
-#~ msgid "status"
-#~ msgstr "status"
+msgid "User ID"
+msgstr "Bruker-id"
-#~ msgid ""
-#~ "System was unable to deactivate existing rundowns. Please contact the "
-#~ "system administrator."
-#~ msgstr ""
-#~ "System klarte ikke å deaktivere eksisterende kjøreplaner. Kontakt "
-#~ "systemadministrator."
+msgid "User Log"
+msgstr "Brukerlogg"
-#, fuzzy
-#~ msgid "Media-Scanner host"
-#~ msgstr "Media Scanner-vert"
+msgid "User Name"
+msgstr "Brukernavn"
-#, fuzzy
-#~ msgid "Media-Scanner port"
-#~ msgstr "Media Scanner-port"
+msgid "Username for authentication"
+msgstr ""
-#~ msgid "Nyman's Playground"
-#~ msgstr "Tester"
+msgid "Validate and Apply Config"
+msgstr ""
-#~ msgid "channel"
-#~ msgstr "kanal"
+msgid "Validation failed!"
+msgstr ""
-#~ msgid "layer"
-#~ msgstr "lag"
+msgid "Value"
+msgstr "Verdi"
-#~ msgctxt "item"
-#~ msgid "new_config"
-#~ msgstr "new_config"
+msgid "Value between 0 and 1"
+msgstr ""
-#~ msgid "No studios are compatible with this blueprint"
-#~ msgstr "Ingen studio er kompatible med denne showstylen"
+msgid "Variants"
+msgstr "Varianter"
-#~ msgid "No studios are compatible with this Show Style"
-#~ msgstr "Ingen studio er kompatible med denne showstylen"
+msgid "version"
+msgstr "versjon"
-#~ msgid "Refresh"
-#~ msgstr "Oppdater"
+msgid "Version"
+msgstr "Versjon"
-#~ msgid "Are you sure you want to remove device \"{{devideId}}\"?"
-#~ msgstr "Er du sikker på at du vil fjerne enheten \"{{devideId}}\"?"
+msgid "Version for {{name}}: From {{fromVersion}} to {{toVersion}}"
+msgstr "Versjon for {{name}}: Fra {{fromVersion}} til {{toVersion}}"
-#~ msgid ""
-#~ "Only a single Rundown can be active in a studio at the same time. Please "
-#~ "deactivate the other Rundown and try again."
-#~ msgstr ""
-#~ "Bare én kjøreplan kan være aktiv i et studio. Deaktiver den andre "
-#~ "kjøreplanen, og prøv på nytt."
+msgid "View"
+msgstr "Visning"
-#~ msgid "Are you sure you want to reset this Rundown?"
-#~ msgstr "Er du sikker på at du vil tilbakestille denne kjøreplan?"
+msgid "View Layout"
+msgstr "Vis layout"
-#~ msgid "Line Templates"
-#~ msgstr "Line Templates"
+msgid "Waiting for action: {{actionName}}..."
+msgstr ""
-#~ msgid "Restore Backup"
-#~ msgstr "Restore Backup"
+msgid "Waiting for gateway to generate URL..."
+msgstr "Venter på at gateway genererer URL..."
-#~ msgid "Blueprint logic ID"
-#~ msgstr "Blueprint logic ID"
+msgid "Warning"
+msgstr "Advarsel"
-#~ msgid "Is Helper"
-#~ msgstr "Is Helper"
+msgid "Warnings"
+msgstr "Advarsler"
-#~ msgid "Select this"
-#~ msgstr "Select this"
+msgid "Warnings During Migration"
+msgstr "Advarsler under migrering"
-#~ msgid "System version"
-#~ msgstr "System version"
+msgid "What type of bank"
+msgstr ""
-#~ msgid "Take debug snapshot"
-#~ msgstr "Take debug snapshot"
+msgid "When"
+msgstr ""
-#~ msgid ""
-#~ "A Debug Snapshot contains info about the system and the active running "
-#~ "order(s)"
-#~ msgstr ""
-#~ "A Debug Snapshot contains info about the system and the active running "
-#~ "order(s)"
+msgid "When disabled, any HOLD operations will be silently ignored"
+msgstr ""
-#~ msgid "Baseline logic ID"
-#~ msgstr "Baseline logic ID"
+msgid ""
+"When enabled, double clicking on certain pieces in the GUI will play them "
+"as adlibs"
+msgstr ""
-#~ msgid "Post Process logic ID"
-#~ msgstr "Post Process logic ID"
+msgid ""
+"When enabled, this will override the piece content statuses to have no "
+"errors or warnings and display a mock preview. This should only be used for "
+"development!"
+msgstr ""
-#~ msgid "External Message logic ID"
-#~ msgstr "External Message logic ID"
+msgid "When set, resources are considered immutable, ie they will not change"
+msgstr ""
-#~ msgid "Download Full Backup"
-#~ msgstr "Download Full Backup"
+msgid "Whether to show countdown to next break"
+msgstr "Om nedtelling til neste pause skal vises"
-#~ msgid "Download Current State"
-#~ msgstr "Download Current State"
+msgid ""
+"While there are still breaks coming up in the show, hide the Expected End "
+"timers"
+msgstr ""
+"Gjem nedtelling til forventet slutt mens det fremdeles er pauser igjen i "
+"sendingen"
-#~ msgid "Blueprints' logic"
-#~ msgstr "Blueprints' logic"
+msgid "Width"
+msgstr "Bredde"
-#~ msgid "Are you sure you want to delete blueprint logic \"{{itemId}}\"?"
-#~ msgstr "Are you sure you want to delete blueprint logic \"{{itemId}}\"?"
+msgid "Work description"
+msgstr "Jobbeskrivlese"
-#~ msgid "Helper"
-#~ msgstr "Helper"
+msgid "Work status"
+msgstr "Jobbstatus"
-#~ msgid "Are you sure you want to delete output channel \"{{channelId}}\"?"
-#~ msgstr "Are you sure you want to delete output channel \"{{channelId}}\"?"
+msgid "Work status reason"
+msgstr "Årsak for jobbstatus"
-#~ msgid "Snapshot"
-#~ msgstr "Snapshot"
+msgid "Work-in-progress"
+msgstr "Pågående jobber"
-#~ msgid "Download Debug-Snapshot (all studios)"
-#~ msgstr "Download Debug-Snapshot (all studios)"
+msgid "Worker"
+msgstr ""
-#~ msgid "Download System Snapshot for the studio"
-#~ msgstr "Download System Snapshot for the studio"
+msgid "WorkForce"
+msgstr "Arbeiderstyrke"
-#~ msgid "Download Debug-Snapshot for the studio"
-#~ msgstr "Download Debug-Snapshot for the studio"
+msgid "X"
+msgstr "X"
-#~ msgid "Telemetry"
-#~ msgstr "Telemetry"
+msgid "Xbox Controller"
+msgstr ""
-#~ msgid "MOS Device"
-#~ msgstr "MOS Device"
+msgid "Y"
+msgstr "Y"
-#~ msgid "Sub-Device"
-#~ msgstr "Sub-Device"
+msgid "Yes"
+msgstr "Ja"
-#~ msgid "Kill this device process?"
-#~ msgstr "Kill this device process?"
+msgid "Yes, Take and Download Memory Heap Snapshot"
+msgstr ""
-#~ msgid "Kill"
-#~ msgstr "Kill"
+msgid "Yesterday"
+msgstr "I går"
-#~ msgid "Are you sure you want to kill the process of this device?"
-#~ msgstr "Are you sure you want to kill the process of this device?"
+msgid ""
+"You are in rehearsal mode, the broadcast starts in less than 1 minute. Do "
+"you want to go into On-Air mode?"
+msgstr ""
-#~| msgid "Restore this backup?"
-#~ msgid "Restore from this Backup?"
-#~ msgstr "Restore from this Backup?"
+msgid "You need to run migrations to set the system up for operation."
+msgstr "Du må kjøre migrering for å klargjøre systemet for bruk."
-#~ msgid "Url"
-#~ msgstr "Url"
+msgid "Your machine is offline and cannot connect to the {{platformName}}."
+msgstr ""
-#~ msgid "Generic properties"
-#~ msgstr "Generic Properties"
+msgid "Your name"
+msgstr "Ditt navn"
-#~ msgid "ON AIR"
-#~ msgstr "ON AIR"
+msgid "Zone ID"
+msgstr "Sone-id"
-#~ msgid "Click Anywhere to go Fullscreen..."
-#~ msgstr "Klikk hvor som helst for gå til fullskjerm..."
+msgid "Zoom In"
+msgstr "Zoom inn"
-#~ msgid "Please enter your name"
-#~ msgstr "Vennligst legg til ditt navn"
+msgid "Zoom Out"
+msgstr "Zoom Ut"
-#~ msgid "Template ID"
-#~ msgstr "Template ID"
+msgctxt "one"
+msgid "{{count}} items"
+msgstr ""
-#~ msgid "Templates"
-#~ msgstr "Templates"
+msgctxt "one"
+msgid "There are {{count}} documents that can be removed, do you want to continue?"
+msgstr ""
-#, fuzzy
-#~| msgid "Devices"
-#~ msgid "Mos-devices"
-#~ msgstr "Devices"
+msgctxt "one"
+msgid "This layer is now rerouted by an active Route Set: {{routeSets}}"
+msgstr ""
-#~ msgid "Connecting to Sofie Automation Server..."
-#~ msgstr "Kobler til Sofie-serveren..."
+msgctxt "other"
+msgid "{{count}} items"
+msgstr ""
-#~ msgid "Connected to Sofie Automation Server."
-#~ msgstr "Koblet til Sofie-serveren."
+msgctxt "other"
+msgid "There are {{count}} documents that can be removed, do you want to continue?"
+msgstr ""
-#~ msgid "MOS Devices"
-#~ msgstr "MOS Devices"
+msgctxt "other"
+msgid "This layer is now rerouted by an active Route Set: {{routeSets}}"
+msgstr ""
diff --git a/meteor/i18n/nn.mo b/meteor/i18n/nn.mo
deleted file mode 100644
index d3f1de2ac90..00000000000
Binary files a/meteor/i18n/nn.mo and /dev/null differ
diff --git a/meteor/i18n/nn.po b/meteor/i18n/nn.po
index cc2d2cc3f3f..cf147f35b6e 100644
--- a/meteor/i18n/nn.po
+++ b/meteor/i18n/nn.po
@@ -1,2888 +1,3366 @@
msgid ""
msgstr ""
"Project-Id-Version: i18next-conv\n"
-"POT-Creation-Date: 2022-08-02T12:04:21.289Z\n"
-"PO-Revision-Date: 2022-08-02 14:14+0200\n"
-"Last-Translator: \n"
-"Language-Team: \n"
-"Language: nn\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
+"mime-version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 3.1.1\n"
-
-msgid "Account Page"
-msgstr "Brukarkontoside"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"POT-Creation-Date: 2026-04-14T14:17:21.139Z\n"
+"PO-Revision-Date: 2026-04-14T14:17:21.139Z\n"
+"Language: nn\n"
-msgid "Name:"
-msgstr "Namn:"
+msgid " The index of the Atem media/clip banks"
+msgstr ""
-msgid "Email:"
-msgstr "E-post:"
+msgid "({{time}} ago)"
+msgstr "(for {{time}} sidan)"
-msgid "Old Password"
-msgstr "Gammalt passord"
+msgid "({{timecode}})"
+msgstr "({{timecode}})"
-msgid "New Password"
-msgstr "Nytt passord"
+msgid ""
+"(Comma separated list. Empty - will store snapshots of all Rundown "
+"Playlists)"
+msgstr ""
-msgid "Save Changes"
-msgstr "Lagre endringer"
+msgid "(Default)"
+msgstr ""
-msgid "Edit Account"
-msgstr "Endre brukarkonto"
+msgid "(in: {{time}})"
+msgstr "(om: {{time}})"
-msgid "Organization"
-msgstr "Organisasjon"
+msgid "(Optional) A name/identifier of the local network where the Atem is located"
+msgstr ""
-msgid "User roles in organization"
-msgstr "Brukarroller i organisasjon"
+msgid "(Optional) A name/identifier of the local network where the share is located"
+msgstr ""
+"(Valfri) Eit namn/ein identifikator for det lokale nettverket der den delte "
+"mappa er lokalisert"
-msgid "Studio"
-msgstr "Studio"
+msgid ""
+"(Optional) A name/identifier of the local network where the share is "
+"located, leave empty if globally accessible"
+msgstr ""
+"(Valfri) Eit namn/ein identifikator for det lokale nettverket der den delte "
+"mappa er lokalisert, la vere tom om den er globalt tilgjengeleg"
-msgid "Configurator"
-msgstr "Configurator"
+msgid "(Optional) This could be the name of the compute"
+msgstr ""
-msgid "Developer"
-msgstr "Developer"
+msgid ""
+"(Optional) This could be the name of the computer on which the local folder "
+"is on"
+msgstr "(Valfri) Dette kan vere namnet til datamaskinen som den lokale mappa er på"
-msgid "Admin"
-msgstr "Admin"
+msgid "(Unknown playlist)"
+msgstr "(Ukjend køyreplanliste)"
-msgid "Remove Self"
-msgstr "Fjern denne brukarkontoen"
+msgid "(Unknown rundown)"
+msgstr "(Ukjend køyreplan)"
-msgid "Email Address"
-msgstr "E-postadresse"
+msgid ""
+"(what happened and when, what should have happened, what could have "
+"triggered the problems, etcetera...)"
+msgstr ""
-msgid "Password"
-msgstr "Passord"
+msgid "{{actionName}} failed! More information can be found in the system log."
+msgstr ""
-msgid "Sign in"
-msgstr "Logg inn"
+msgid "{{currentRundownName}} - {{rundownPlaylistName}}"
+msgstr "{{currentRundownName}} - {{rundownPlaylistName}}"
-msgid "Create New Account"
-msgstr "Opprett ny brukarkonto"
+msgid "{{currentRundownName}} - {{rundownPlaylistName}} (Looping)"
+msgstr "{{currentRundownName}} - {{rundownPlaylistName}} (Looper)"
-msgid "Lost password?"
-msgstr "Gløymd passord?"
+msgid "{{days}} days, {{hours}} h {{minutes}} min {{seconds}} s ago"
+msgstr "for {{days}} dagar, {{hours}} t {{minutes}} min {{seconds}} s sidan"
-msgid "Send reset email"
-msgstr "Send e-post for å nullstille"
+msgid "{{frames}} black frames detected in the clip"
+msgstr ""
-msgid "Go back"
-msgstr "Tilbake"
+msgid "{{frames}} black frames detected within the clip"
+msgstr ""
-msgid "Password must be atleast 5 characters long"
-msgstr "Passord må vere minst 5 tegn langt"
+msgid "{{frames}} freeze frames detected in the clip"
+msgstr ""
-msgid "Enter your new password"
-msgstr "Skriv inn ditt nye passord"
+msgid "{{frames}} freeze frames detected within the clip"
+msgstr ""
-msgid "Set new password"
-msgstr "Lagre nytt passord"
+msgid "{{hours}} h {{minutes}} min {{seconds}} s ago"
+msgstr "for {{hours}} t {{minutes}} min {{seconds}} s sidan"
-msgid "Your Account"
-msgstr "Din brukarkonto"
+msgid "{{indexCount}} indexes was removed."
+msgstr "{{indexCount}} indexer vart fjerna."
-msgid "About Your Organization"
-msgstr "Om din oranisasjon"
+msgid "{{minutes}} min {{seconds}} s ago"
+msgstr "for {{minutes}} min {{seconds}} s sidan"
-msgid "We are mainly"
-msgstr "Vi er hovudsakleg"
+msgid "{{nrcsName}} Connection"
+msgstr "{{nrcsName}}-tilkopling"
-msgid "Areas"
-msgstr "Område"
+msgid "{{prevStatements}} and {{finalStatement}}"
+msgstr ""
-msgid "Invite User"
-msgstr "Inviter brukar"
+msgid "{{prevStatements}} or {{finalStatement}}"
+msgstr ""
-msgid "New User's Email"
-msgstr "Ny brukar sin e-post"
+msgid ""
+"{{reason}} {{sourceLayer}} exists, but is not yet ready on the playout "
+"system"
+msgstr ""
-msgid "New User's Name"
-msgstr "Ny brukar sitt namn"
+msgid "{{rundownPlaylistName}} (Looping)"
+msgstr "{{rundownPlaylistName}} (Looper)"
-msgid "Create New User & Send Enrollment Email"
-msgstr "Opprett ny brukar og send e-post for innmelding"
+msgid "{{seconds}} s ago"
+msgstr "for {{seconds}} s sidan"
-msgid "Users in organization"
-msgstr "Brukarar i organisasjonen"
+msgid "{{showStyleVariant}} – {{showStyleBase}}"
+msgstr "{{showStyleVariant}} – {{showStyleBase}}"
-msgid "Return to list"
-msgstr "Gå tilbake til lista"
+msgid "{{sourceLayer}} can't be found on the playout system"
+msgstr ""
-msgid "There is no rundown active in this studio."
-msgstr "Fann ingen aktive køyreplanar for dette studioet."
+msgid "{{sourceLayer}} doesn't have both audio & video"
+msgstr "{{sourceLayer}} har ikkje lyd og/eller bilete"
-msgid "This studio doesn't exist."
-msgstr "Dette studioet eksisterer ikkje."
+msgid "{{sourceLayer}} has {{audioStreams}} audio streams"
+msgstr "{{sourceLayer}} har {{audioStreams}} lydstraumar"
-msgid "There are no active rundowns."
-msgstr "Fann ingen aktive køyreplanar."
+msgid "{{sourceLayer}} has the wrong format: {{format}}"
+msgstr "{{sourceLayer}}-formatet er ikkje støtta: {{format}}"
-msgid "Evaluation"
-msgstr "Evaluering"
+msgid "{{sourceLayer}} has unsupported source: {{containerLabels}}"
+msgstr ""
-msgid "Please take a minute to fill in this form."
-msgstr "Ver venleg og fyll ut dette skjemaet."
+msgid "{{sourceLayer}} is being ingested"
+msgstr "{{sourceLayer}} vert prosessert"
msgid ""
-"Be aware that while filling out the form keyboard and streamdeck commands "
-"will not be executed!"
-msgstr "OBS! Du kan ikkje utføra Sofie-kommandoar medan du skriv evalueringa!"
+"{{sourceLayer}} is in a placeholder state for an unknown workflow-defined "
+"reason"
+msgstr ""
-msgid "Did you have any problems with the broadcast?"
-msgstr "Hadde du nokre problem under sendinga?"
+msgid "{{sourceLayer}} is in an unknown state: \"{{status}}\""
+msgstr ""
-msgid ""
-"Please explain the problems you experienced (what happened and when, what "
-"should have happened, what could have triggered the problems, etcetera...)"
+msgid "{{sourceLayer}} is missing"
msgstr ""
-"Ver venleg og forklar kva problem du hadde (kva hende og når hende det, kva "
-"skulle skjedd, kva kan ha utløyst problema o.s.b.)"
-msgid "Your name"
-msgstr "Namnet ditt"
+msgid "{{sourceLayer}} is missing a file path"
+msgstr "{{sourceLayer}} kan ikkje spelast av fordi filnamnet manglar"
+
+msgid "{{sourceLayer}} is not yet ready on the playout system"
+msgstr "{{sourceLayer}} er enno ikkje klar til å spelast ut fra avviklingsserver"
-msgid "Save message"
-msgstr "Lagre melding"
+msgid "{{sourceLayer}} is transferring to the playout system"
+msgstr "{{sourceLayer}} overførast til avviklingsserver"
-msgid "Save message and Deactivate Rundown"
-msgstr "Send evalueringa og deaktiver køyreplanen"
+msgid ""
+"{{sourceLayer}} is transferring to the playout system but cannot be played "
+"yet"
+msgstr ""
-msgid "No problems"
-msgstr "Ingen problem"
+msgid "{{studioName}}: Active Rundown"
+msgstr ""
-msgid "Something went wrong, but it didn't affect the output"
-msgstr "Noko gjekk gale, men det virka ikkje inn på sendinga"
+msgid "{{studioName}}: Presenter screen"
+msgstr ""
-msgid "Something went wrong, and it affected the output"
-msgstr "Noko gjekk gale, og det virka inn på sendinga"
+msgid "{{studioName}}: Prompter"
+msgstr ""
-msgid "Are you sure?"
-msgstr "Er du sikker?"
+msgid "14 = 7 lines, 20 = 5 lines"
+msgstr ""
-msgid ""
-"Trimming this clip has timed out. It's possible that the story is currently "
-"locked for writing in {{nrcsName}} and will eventually be updated. Make sure "
-"that the story is not being edited by other users."
+msgid "A device must be assigned to the config to edit the settings"
msgstr ""
-"Endring av inn-/utpunkt for dette klippet tek lang tid. Det er mogleg "
-"manuset i er låst i {{nrcsName}} og at inn-/utpunkt endrast om litt. "
-"Forsikre deg om at manuset ikkje vert redigert av andre brukarar."
-msgid "Trimming this clip has failed due to an error: {{error}}."
-msgstr "Endring av inn-/utpunkt for dette klippet feila: {{error}}."
+msgid ""
+"A Full System Snapshot contains all system settings (studios, showstyles, "
+"blueprints, devices, etc.)"
+msgstr ""
+"Eit fullt systemsnapshot inneheld alle systeminnstillingar (studio, "
+"showstyles, blueprints, einingar o.s.b.)"
-msgid "Trimmed succesfully."
-msgstr "Endring av inn-/utpunkt var vellukka."
+msgid "a second"
+msgstr ""
msgid ""
-"Trimming this clip is taking longer than expected. It's possible that the "
-"story is locked for writing in {{nrcsName}}."
+"A snapshot of the current Running Order has been created for "
+"troubleshooting."
+msgstr "Eit snapshot av den gjeldande køyreplanen har verte oppretta."
+
+msgid "A Studio Snapshot contains all system settings related to that studio"
+msgstr "Eit studiosnapshot inneheld alle systeminnstillingar knytt til eit studio"
+
+msgid "AB Channel Display"
msgstr ""
-"Endring av inn-/utpunkt for dette klippet tek meir tid enn forventa. Det er "
-"mogleg manuset er låst for redigering i {{nrcsName}}."
-msgid "Trim \"{{name}}\""
-msgstr "Trim \"{{name}}\""
+msgid "AB Playout devices"
+msgstr ""
-msgid "OK"
-msgstr "OK"
+msgid "AB Resolver Channel Display"
+msgstr ""
-msgid "Cancel"
+msgid "Abort"
msgstr "Avbryt"
-msgid "Remove in-trimming"
-msgstr "Nullstill innpunkt"
+msgid "Aborting all Media Workflows"
+msgstr ""
-msgid "In"
-msgstr "Inn"
+msgid "Aborting Media Workflow"
+msgstr ""
-msgid "Remove all trimming"
-msgstr "Nullstill inn- og utpunkt"
+msgid "Accessor ID"
+msgstr "Aksessor-id"
-msgid "Duration"
-msgstr "Lengde"
+msgid "Accessor Type"
+msgstr "Aksessortype"
-msgid "Remove out-trimming"
-msgstr "Nullstill utpunkt"
+msgid "Accessors"
+msgstr "Aksessorer"
-msgid "Out"
-msgstr "Ut"
+msgid "Action"
+msgstr "Handling"
-msgid "Next"
-msgstr "Neste"
+msgid "Action {{actionName}} done!"
+msgstr ""
-msgid "Test test"
-msgstr "Test test"
+msgid "Action {{actionName}} failed: {{error}}"
+msgstr ""
-msgid "Until next take"
-msgstr "Til neste Take"
+msgid "Action Buttons"
+msgstr "Handlingsknappar"
-msgid "Until next segment"
-msgstr "Til neste segment"
+msgid "Action Triggers"
+msgstr "Handlingsutløysarar"
-msgid "Until end of segment"
-msgstr "Til slutten av segment"
+msgid "Activate \"On Air\""
+msgstr ""
-msgid "Until next rundown"
-msgstr "Til neste køyreplan"
+msgid "Activate \"Rehearsal\""
+msgstr ""
-msgid "Until end of showstyle"
-msgstr "Til slutten av showstyle"
+msgid "Activate (On-Air)"
+msgstr "Aktiver (gå ON AIR)"
-msgid "Script is empty"
-msgstr "Manuset er tomt"
+msgid "Activate (Rehearsal)"
+msgstr "Aktiver (testmodus)"
-msgid "Clip:"
-msgstr "Klipp:"
+msgid "Activate On Air"
+msgstr ""
-msgid "Home"
-msgstr "Heim"
+msgid "Activate Rundown"
+msgstr "Aktiver køyreplan"
-msgid "Rundowns"
-msgstr "Køyreplanar"
+msgid "Activating Hold"
+msgstr ""
-msgid "Test Tools"
-msgstr "Testverktøy"
+msgid "Activating Rundown Playlist"
+msgstr ""
-msgid "Status"
-msgstr "Status"
+msgid "Active"
+msgstr "Aktiv"
-msgid "Settings"
-msgstr "Innstillingar"
+msgid "Active Rundown"
+msgstr ""
-msgid "Account"
-msgstr "Konto"
+msgid "Active Rundown View"
+msgstr ""
-msgid "Logout"
-msgstr "Logg ut"
+msgid "Ad-Lib"
+msgstr "Adlib"
-msgid "My name is {{name}}"
-msgstr "Mitt namn er {{name}}"
+msgid "Ad-Lib Action"
+msgstr "Adlib-handling"
-msgid "Operating Mode"
-msgstr "Styringsmodus"
+msgid "Add"
+msgstr "Legg til"
-msgid "Switching operating mode to {{mode}}"
-msgstr "Endrer styringsmodus til {{mode}}"
+msgid "Add {{filtersTitle}}"
+msgstr "Legg til {{filtersTitle}}"
-msgid "Prompter"
-msgstr "Prompter"
+msgid "Add a playout device to the studio in order to configure the route sets"
+msgstr ""
+"For å kunne redigere omkoplingsgrupper, må du leggje til ein playout-eining "
+"til studio"
-msgid "End of script"
-msgstr "Slutt på manus"
+msgid "Add a playout device to the studio in order to edit the layer mappings"
+msgstr ""
+"For å kunne redigere lagmappingar, må du leggje til ein playout-eining til "
+"studio"
-msgid "Could not get system status. Please consult system administrator."
-msgstr "Kan ikkje innhente status for systemet. Kontakt systemadministrator."
+msgid "Add Action Trigger"
+msgstr ""
-msgid "There are no rundowns ingested into Sofie."
-msgstr "Det er ikkje send køyreplanar til Sofie."
+msgid "Add button"
+msgstr "Legg til knapp"
-msgid "Click on a rundown to control your studio"
-msgstr "Klikk på ein køyreplan for å kontrollere studioet ditt"
+msgid "Add filter"
+msgstr "Legg til filter"
-msgid "Rundown"
-msgstr "Køyreplan"
+msgid "Add some source layers (e.g. Graphics) for your data to appear in rundowns"
+msgstr "Legg til kjeldelag (til dømes Grafikk) for å vise dine data i køyreplanar"
-msgid "Problems"
-msgstr "Problem"
+msgid "AdLib"
+msgstr "Adlib"
-msgid "Show Style"
-msgstr "Showstyle"
+msgid "AdLib Actions are not supported in the current Rundown"
+msgstr ""
-msgid "On Air Start Time"
-msgstr "Sendestart"
+msgid "AdLib could not be found!"
+msgstr ""
-msgid "Expected End Time"
-msgstr "Venta sendeslutt"
+msgid "AdLib filter"
+msgstr ""
-msgid "Last updated"
-msgstr "Sist oppdatert"
+msgid "Adlib Rank"
+msgstr "Adlib-rang"
-msgid "View Layout"
-msgstr "Vis layout"
+msgid "Adlib rundowns are not supported for this ShowStyle!"
+msgstr ""
-msgid "Today"
-msgstr "I dag"
+msgid "Adlib Testing"
+msgstr ""
-msgid "Yesterday"
-msgstr "I går"
+msgid "AdLib Testing"
+msgstr ""
-msgid "Tomorrow"
-msgstr "I morgon"
+msgid "AdLibs can be only placed in a currently playing part!"
+msgstr ""
-msgid "Last"
-msgstr "Førre"
+msgid "AdLibs on this layer can be queued"
+msgstr "Adliber på dette laget kan cues"
-msgid "Getting Started"
-msgstr "Kom i gong"
+msgid "All additional source layers must have active pieces"
+msgstr ""
-msgid ""
-"Start with giving this browser configuration permissions by adding this to "
-"the URL: "
-msgstr "Først må du gå i konfigurasjonsmodus ved å leggje dette til i url-en: "
+msgid "All connections working correctly"
+msgstr "Alle tilkoplingar er OK"
-msgid "Start Here!"
-msgstr "Start her!"
+msgid "All devices working correctly"
+msgstr "Alle eininger fungerer som dei skal"
-msgid "Then, run the migrations script:"
-msgstr "Køyr deretter migreringsprosedyra:"
+msgid "All is well, go get a"
+msgstr "Alt er greitt, gå og finn deg ein"
-msgid "Run Migrations to get set up"
-msgstr "Køyr migreringsprosedyrar for å setje opp"
+msgid "All Screens in a MultiViewer"
+msgstr ""
-msgid "Migrations"
-msgstr "Migrering"
+msgid "All steps"
+msgstr "Alle steg"
-msgid "Documentation is available at"
-msgstr "Dokumentasjon er tilgjengelig på"
+msgid "Allow direct playing pieces"
+msgstr ""
-msgid "Use {{nrcsName}} order"
-msgstr "Nytt rekkefølgje frå {{nrcsName}}"
+msgid "Allow disabling of Pieces"
+msgstr "Tillat deaktivering av element"
-msgid "Reset Sort Order"
-msgstr "Tilbakestill rekkefølgje"
+msgid "Allow HOLD mode"
+msgstr ""
-msgid "Enable configuration mode by adding ?configure=1 to the address bar."
+msgid "Allow infinites from AdLib testing to persist"
msgstr ""
-"Aktiver konfigurasjonsmodus ved å legge til ?configure=1 på slutten av "
-"nettadressa."
-msgid "You need to run migrations to set the system up for operation."
-msgstr "Du må køyre migrering for å klargjere systemet for bruk."
+msgid "Allow Read access"
+msgstr "Tillat lesing"
-#, fuzzy
-#| msgid "Drop rundown here to move it out of its current playlist"
-msgid "Drop Rundown here to move it out of its current Playlist"
-msgstr "Slepp køyreplanen her for å flytta den ut av nåværande speleliste"
+msgid "Allow Rundowns to be reset while on-air"
+msgstr ""
-msgid "Sofie Automation"
-msgstr "Sofie"
+msgid "Allow Write access"
+msgstr "Tillat skriving/lagring"
-msgid "version"
-msgstr "versjon"
+msgid "Also Require Source Layers"
+msgstr ""
-msgid "System Status"
-msgstr "Systemstatus"
+msgid "Amount of entries exceeds the limt of 10 000 items."
+msgstr ""
-msgid "System has issues which need to be resolved"
-msgstr "Systemet har problemer som må løysast"
+msgid "An error while performing the take, playout may be impacted"
+msgstr ""
-msgid "Status Messages:"
-msgstr "Statusmeldingar:"
+msgid "An error while setting the next Part, playout may be impacted"
+msgstr ""
-msgid "{{showStyleVariant}} – {{showStyleBase}}"
-msgstr "{{showStyleVariant}} – {{showStyleBase}}"
+msgid "An internal error occured!"
+msgstr ""
-msgid "Drag to reorder or move out of playlist"
-msgstr "Dra for å endre rekkefølgje eller flytta ut av speleliste"
+msgid "Another Rundown is Already Active!"
+msgstr "Ein annan køyreplan er allereie aktiv!"
-msgid "This rundown is currently active"
-msgstr "Denne køyreplanen er allereie aktiv"
+msgid "Answers"
+msgstr "Svar"
-msgid "Not set"
-msgstr "Ikkje angjeve"
+msgid ""
+"Any AB Playout devices here will only be active when this or another "
+"RouteSet that includes them is active"
+msgstr ""
-msgid "This rundown will loop indefinitely"
-msgstr "Denne køyreplanen vil gå i ein uendeleg loop"
+msgid "APM Enabled"
+msgstr "AMP aktivert"
-msgid "({{timecode}})"
-msgstr "({{timecode}})"
+msgid "APM Transaction Sample Rate"
+msgstr "Prøvefrekvens for AMP-transaksjonar"
-msgid "Re-sync rundown data with {{nrcsName}}"
-msgstr "Ikkje synkronisert med MOS/{{nrcsName}}"
+msgid "Append"
+msgstr "Legg til"
-msgid "Delete"
-msgstr "Slett"
+msgid "Append or Replace"
+msgstr "Legg til eller erstatt"
-msgid "Standalone Shelf"
-msgstr "Frittståande skuff"
+msgid "Append rows"
+msgstr ""
-msgid "Rundown & Shelf"
-msgstr "Køyreplan & skuff"
+msgid "Application credentials"
+msgstr "Brukarnamn/passord (Application Credentials)"
-msgid "Default"
-msgstr "Standard"
+msgid "Application Performance Monitoring"
+msgstr "Overvaking av yting for applikasjonar (AMP)"
-msgid "Delete rundown?"
-msgstr "Slette køyreplanen?"
+msgid "Apply"
+msgstr ""
-msgid "Are you sure you want to delete the \"{{name}}\" rundown?"
-msgstr "Er du viss på at du vil slette køyreplanen \"{{name}}\"?"
+msgid "Apply blueprint upgrades"
+msgstr ""
-msgid "Please note: This action is irreversible!"
-msgstr "Merk: Denne handlinga kan du ikkje angre!"
+msgid "Apply Config"
+msgstr ""
-msgid "Re-Sync rundown?"
-msgstr "Synkroniser køyreplanen med ENPS på ny?"
+msgid "Are you sure you want to activate Rehearsal Mode?"
+msgstr "Er du sikker på at du vil gå i testmodus?"
-msgid "Re-Sync"
-msgstr "Synkroniser"
+msgid ""
+"Are you sure you want to deactivate this Rundown\n"
+"(This will clear the outputs)"
+msgstr ""
+"Er du sikker på at du vil deaktivere denne køyreplanen?\n"
+"(Dette vil nullstille alle utgangar.)"
-msgid "Are you sure you want to re-sync the \"{{name}}\" rundown?"
+msgid ""
+"Are you sure you want to deactivate this rundown?\n"
+"(This will clear the outputs.)"
msgstr ""
-"Er du viss på at du vil synkronisere køyreplanen \"{{name}}\" med ENPS?"
-msgid "Start time is close"
-msgstr "Oppgitt sendestart er kvart augeblink"
+msgid "Are you sure you want to delete output layer \"{{outputId}}\"?"
+msgstr ""
-msgid "Yes"
-msgstr "Ja"
+msgid "Are you sure you want to delete source layer \"{{sourceLayerId}}\"?"
+msgstr "Er du sikker på at du vil slette kjeldelaget \"{{sourceLayerId}}\"?"
-msgid "No"
-msgstr "Nei"
+msgid "Are you sure you want to delete the \"{{name}}\" rundown?"
+msgstr "Er du viss på at du vil slette køyreplanen \"{{name}}\"?"
-msgid ""
-"You are in rehearsal mode, the broadcast starts in less than 1 minute. Do "
-"you want to reset the rundown and go into On-Air mode?"
-msgstr ""
-"Du er i testmodus og sendinga startar om mindre enn eitt minutt. Vil du "
-"laste inn køyreplanen på nytt og gjere klar til sending?"
+msgid "Are you sure you want to delete the blueprint \"{{blueprintId}}\"?"
+msgstr "Er du sikker på at du vil slette blueprintet \"{{blueprintId}}\"?"
-msgid "Hold"
-msgstr "Hold"
+msgid "Are you sure you want to delete the shelf layout \"{{name}}\"?"
+msgstr "Er du sikker på at du vil slette layouten \"{{name}}\"?"
-msgid "Could not find a Piece that can be disabled."
-msgstr "Kunne ikkje finne eit element som kan skippes."
+msgid "Are you sure you want to delete the show style \"{{showStyleId}}\"?"
+msgstr "Er du sikker på at du vil slette showstylen \"{{showStyleId}}\"?"
-msgid "Failed to execute take"
-msgstr "Kunne ikkje gjennomføre Take"
+msgid "Are you sure you want to delete the studio \"{{studioId}}\"?"
+msgstr "Er du sikker på at du vil slette studioet \"{{studioId}}\"?"
-msgid ""
-"The rundown you are trying to execute a take on is inactive, would you like "
-"to activate this rundown?"
-msgstr ""
-"Du prøve å gjere ein Take i ein inaktiv køyreplan. Vil du aktivere denne "
-"køyreplanen?"
+msgid "Are you sure you want to delete this AdLib?"
+msgstr "Er du sikker på at du vil slette denne adliben?"
-msgid "Activate (Rehearsal)"
-msgstr "Aktiver (testmodus)"
+msgid "Are you sure you want to delete this Bucket?"
+msgstr "Er du sikker på at du vil slette denne bøtta?"
-msgid "Activate (On-Air)"
-msgstr "Aktiver (gå ON AIR)"
+msgid "Are you sure you want to delete this device: \"{{deviceId}}\"?"
+msgstr "Er du sikker på at du vil fjerne eininga \"{{deviceId}}\"?"
-msgid "Failed to activate"
-msgstr "Kunne ikkje aktivere"
+msgid "Are you sure you want to empty (remove all adlibs inside) this Bucket?"
+msgstr "Er du sikker på at du vil tømme denne bøtta (fjerner alle adliber)?"
msgid ""
-"Something went wrong, please contact the system administrator if the problem "
-"persists."
-msgstr "Noko gikk gale, kontakt systemadministrator om problemet held fram."
+"Are you sure you want to force the migration? This will bypass the "
+"migration checks, so be sure to verify that the values in the settings are "
+"correct!"
+msgstr ""
+"Er du sikker på at du vil tvinge migreringa? Dette gjer at du hoppar over "
+"migreringskontrollane, så ver sikker på at verdiane oppgitt i innstillingar "
+"er korrekte!"
-msgid "Another Rundown is Already Active!"
-msgstr "Ein annan køyreplan er allereie aktiv!"
+msgid "Are you sure you want to import the contents of the file \"{{fileName}}\"?"
+msgstr ""
+
+msgid "Are you sure you want to re-sync the \"{{name}}\" rundown?"
+msgstr "Er du viss på at du vil synkronisere køyreplanen \"{{name}}\" med ENPS?"
msgid ""
-"The rundown \"{{rundownName}}\" will need to be deactivated in order to "
-"activate this one.\n"
-"\n"
-"Are you sure you want to activate this one anyway?"
+"Are you sure you want to re-sync the Rundown?\n"
+"(If the currently playing Part has been changed, this can affect the output)"
msgstr ""
-"Køyreplanen \"{{rundownName}}\" må deaktiveres for å aktivere denne "
-"køyreplanen.\n"
-"\n"
-"Er du sikker på at du ønsker å aktivere?"
-
-msgid "Activate Anyway (Rehearsal)"
-msgstr "Aktiver uansett (testmodus)"
+"Er du sikker på at du vil gjenopprette synkronisering mot ENPS for denne "
+"køyreplanen?\n"
+"(Dette kan virke inn på pågåande sending)"
-msgid "Activate Anyway (On-Air)"
-msgstr "Aktiver uansett (gå ON AIR)"
+msgid "Are you sure you want to remove {{type}} \"{{deviceId}}\"?"
+msgstr "Er du sikker på at du vil fjerne eininga {{type}} \"{{deviceId}}\"?"
-msgid "Do you want to activate this Rundown?"
-msgstr "Vil du aktivere denne køyreplanen?"
+msgid "Are you sure you want to remove all Variants in the table?"
+msgstr ""
msgid ""
-"The planned end time has passed, are you sure you want to activate this "
-"Rundown?"
+"Are you sure you want to remove exclusivity group \"{{eGroupName}}\"?\n"
+"Route Sets assigned to this group will be reset to no group."
msgstr ""
-"Det planlagte sluttidspunktet er passert, er du sikker på at du vil aktivere "
-"denne køyreplanen?"
+"Er du sikker på at du vil fjerne eksklusivitetsgruppa \"{{eGroupName}}\"?\n"
+"Omkoplingar satt til denne gruppa vil bli resatt til inga gruppe."
-msgid "Are you sure you want to activate Rehearsal Mode?"
-msgstr "Er du sikker på at du vil gå i testmodus?"
+msgid "Are you sure you want to remove mapping for layer \"{{mappingId}}\"?"
+msgstr "Er du sikker på at du fil fjerne mappinga for laget \"{{mappingId}}\"?"
+
+msgid "Are you sure you want to remove the AB Player \"{{playerId}}\"?"
+msgstr ""
msgid ""
-"Are you sure you want to deactivate this Rundown?\n"
-"(This will clear the outputs)"
+"Are you sure you want to remove the device \"{{deviceName}}\" and all of "
+"it's sub-devices?"
msgstr ""
-"Er du sikker på at du vil deaktivere denne køyreplanen?\n"
-"(Dette vil nullstille alle utgangar.)"
+"Er du sikker på at du vil fjerne eninga \"{{deviceName}}\" og alle "
+"undereiningane?"
-msgid "The rundown can not be reset while it is active"
-msgstr "Ein aktivert køyreplan kan ikkje tilbakestillast"
+msgid "Are you sure you want to remove the Package Container \"{{containerId}}\"?"
+msgstr "Er du sikker på at du vil fjerne pakkecontaineren \"{{containerId}}\"?"
msgid ""
-"A snapshot of the current Running Order has been created for troubleshooting."
-msgstr "Eit snapshot av den gjeldande køyreplanen har verte oppretta."
+"Are you sure you want to remove the Package Container Accessor "
+"\"{{accessorId}}\"?"
+msgstr ""
+"Er du sikker på at du vil fjerne pakkekontainer-aksessoren "
+"\"{{accessorId}}\"?"
-msgid "Prepare Studio and Activate (Rehearsal)"
-msgstr "Førebu studio og aktiver testmodus"
+msgid ""
+"Are you sure you want to remove the Route from \"{{sourceLayerId}}\" to "
+"\"{{newLayerId}}\"?"
+msgstr ""
+"Er du sikker på at du vil fjerne omkoplinga frå \"{{sourceLayerId}}\" til "
+"\"{{newLayerId}}\"?"
+
+msgid "Are you sure you want to remove the Route Set \"{{routeId}}\"?"
+msgstr "Er du sikker på at du vil fjerne omkoplingsgruppa \"{{routeId}}\"?"
+
+msgid "Are you sure you want to remove the Variant \"{{showStyleVariantId}}\"?"
+msgstr ""
+
+msgid ""
+"Are you sure you want to replace the blueprints with the file "
+"\"{{fileName}}\"?"
+msgstr "Er du sikker på at du vil erstatte blueprints frå fila \"{{fileName}}\"?"
+
+msgid ""
+"Are you sure you want to reset all overrides for Packing Container "
+"\"{{id}}\"?"
+msgstr ""
+
+msgid ""
+"Are you sure you want to reset all overrides for the mapping for layer "
+"\"{{mappingId}}\"?"
+msgstr ""
+
+msgid ""
+"Are you sure you want to reset all overrides for the output layer "
+"\"{{outputLayerId}}\"?"
+msgstr ""
+
+msgid "Are you sure you want to reset all overrides for the selected row?"
+msgstr ""
+
+msgid ""
+"Are you sure you want to reset all overrides for the source layer "
+"\"{{sourceLayerId}}\"?"
+msgstr ""
+
+msgid ""
+"Are you sure you want to reset the database version?\n"
+"Only do this if you plan on running the migration right after."
+msgstr ""
+"Er du sikker på at du vil nullstille databaseversjonen?\n"
+"Berre gjer dette om du har tenkt å køyre ei migrering med ein gong."
+
+msgid "Are you sure you want to restart this device?"
+msgstr "Er du sikker på at du vil starte denne eininga på nytt?"
+
+msgid ""
+"Are you sure you want to restart this Sofie Automation Server Core: "
+"{{name}}?"
+msgstr "Er du sikker på at du vil starte Sofie Core: {{name}} om att?"
+
+msgid ""
+"Are you sure you want to restore the system from the snapshot file "
+"\"{{fileName}}\"?"
+msgstr ""
+"Er du sikker på at du vil tilbakestille systemet frå denne snapshotfila "
+"\"{{fileName}}\"?"
+
+msgid "Are you sure you want to skip the fix up config step for {{name}}"
+msgstr ""
+
+msgid ""
+"Are you sure you want to update the blueprints from the file "
+"\"{{fileName}}\"?"
+msgstr "Er du sikker på at du vil oppdatere blueprints frå fila \"{{fileName}}\"?"
+
+msgid ""
+"Are you sure you want to upload the shelf layout from the file "
+"\"{{fileName}}\"?"
+msgstr ""
+"Er du sikker på at du vil laste opp layout for skuff frå fila "
+"\"{{fileName}}\"?"
+
+msgid ""
+"Are you sure, do you really want to REMOVE the Snapshot "
+"\"{{snapshotName}}\"?\r\n"
+"This cannot be undone!!"
+msgstr ""
+
+msgid "Are you sure?"
+msgstr "Er du sikker?"
+
+msgid ""
+"Are you sure? This will cause the whole Sofie system to be unresponsive "
+"several seconds!"
+msgstr ""
+
+msgid "Around 10 minutes ago"
+msgstr "Cirka 10 minutt sidan"
+
+msgid "Assign"
+msgstr "Tilordne"
+
+msgid "Assigned Show Styles"
+msgstr ""
+
+msgid "Assigned Studios"
+msgstr ""
+
+msgid "Attached Subdevices"
+msgstr "Tilkopla undereiningar"
+
+msgid "Audio Mixing"
+msgstr "Lydmiksing"
+
+msgid "Authorize App Access"
+msgstr ""
+
+msgid "Auto"
+msgstr "Auto"
+
+msgid "AutoNext in QuickLoop behavior"
+msgstr ""
+
+msgid "Available Screens for Studio {{studioId}}"
+msgstr ""
+
+msgid "Bad"
+msgstr "Feil"
+
+msgid "Bank Index"
+msgstr ""
+
+msgid "Base URL"
+msgstr "Base-url"
+
+msgid "Base url to the resource (example: http://myserver/folder)"
+msgstr "Base-url for ressursen (døme: http://minserver/mappe)"
+
+msgid "Baseline needs reload, this studio may not work until reloaded"
+msgstr ""
+"Baseline må lastast om att, dette studioet vil kanskje ikkje fungere før "
+"baseline er lasta om att"
+
+msgid "Behavior"
+msgstr "Oppførsel"
+
+msgid "Blueprint"
+msgstr "Blueprint"
+
+msgid "Blueprint config has changed"
+msgstr ""
+
+msgid "Blueprint config preset"
+msgstr ""
+
+msgid ""
+"Blueprint config preset has been changed. From \"{{ oldValue }}\", to \"{{ "
+"newValue }}\""
+msgstr ""
+
+msgid "Blueprint config preset is missing"
+msgstr ""
+
+msgid "Blueprint config preset not set"
+msgstr ""
+
+msgid "Blueprint Configuration"
+msgstr "Blueprintkonfigurasjon"
+
+msgid "Blueprint has a new version"
+msgstr ""
+
+msgid "Blueprint has been changed. From \"{{ oldValue }}\", to \"{{ newValue }}\""
+msgstr ""
+
+msgid "Blueprint ID"
+msgstr "Blueprint-id"
+
+msgid "Blueprint Name"
+msgstr "Blueprintnamn"
+
+msgid "Blueprint not found!"
+msgstr ""
+
+msgid "Blueprint not set"
+msgstr "Blueprint ikkje valt"
+
+msgid "Blueprint Type"
+msgstr "Blueprinttype"
+
+msgid "Blueprint Version"
+msgstr "Blueprintversjon"
+
+msgid "Blueprints"
+msgstr "Blueprint"
+
+msgid "Blueprints updated successfully."
+msgstr "Blueprints blei oppdatert."
+
+msgid "Bottom"
+msgstr ""
+
+msgid "Box color"
+msgstr ""
+
+msgid "BREAK"
+msgstr "PAUSE"
+
+msgid "Break In"
+msgstr "Pause om"
+
+msgid "Bucket AdLib is not compatible with this Rundown!"
+msgstr ""
+
+msgid "Bucket not found!"
+msgstr ""
+
+msgid "Button"
+msgstr "Knapp"
+
+msgid "Button height scale factor"
+msgstr "Høgdeskala for knapp"
+
+msgid "Button mapping"
+msgstr ""
+
+msgid "Button width scale factor"
+msgstr "Breiddeskala for knapp"
+
+msgid "By Parts"
+msgstr ""
+
+msgid "By Segments"
+msgstr ""
+
+msgid "Camera"
+msgstr "Kamera"
+
+msgid "Camera Screen"
+msgstr ""
+
+msgid "Can Generate Adlib Testing Rundown"
+msgstr ""
+
+msgid "Can not be used during a hold!"
+msgstr ""
+
+msgid "Cancel"
+msgstr "Avbryt"
+
+msgid "Cancel currently pressed hotkey"
+msgstr "Avbryt den trykte tasten"
+
+msgid "Cannot activate HOLD before a part has been taken!"
+msgstr ""
+
+msgid "Cannot activate HOLD between the current and next parts"
+msgstr ""
+
+msgid "Cannot activate HOLD once an adlib has been used"
+msgstr ""
+
+msgid "Cannot cancel HOLD once it has been taken"
+msgstr ""
+
+msgid "Cannot connect to the {{platformName}}: {{reason}}"
+msgstr ""
+
+msgid "Cannot perform take for {{duration}}ms"
+msgstr ""
+
+msgid "Cannot play this AdLib because it is marked as Floated"
+msgstr "Kan ikkje spele av adlib fordi den er markert som på vent (float)"
+
+msgid "Cannot play this AdLib because it is marked as Invalid"
+msgstr "Kan ikkje spele av adlib fordi den er markert som ugyldig"
+
+msgid "Cannot play this adlib because source layer is not queueable"
+msgstr "Kan ikkje spele av adlib fordi den ikkje kan setjast i kø på kjeldelaget"
+
+msgid "Cannot remove the rundown \"{{name}}\" while it is on-air."
+msgstr ""
+
+msgid "Cannot take close to an AUTO"
+msgstr ""
+
+msgid "Cannot take during a transition"
+msgstr ""
+
+msgid "Cannot take unplayable AdLib"
+msgstr ""
+
+msgid "CasparCG on device \"{{deviceName}}\" restarting..."
+msgstr "CasparCG på \"{{deviceName}}\" startar på nytt..."
+
+msgid "Center"
+msgstr ""
+
+msgid "Change to fullscreen mode"
+msgstr "Fullskjermmodus"
+
+msgid "Channel Name"
+msgstr "Kanalnavn"
+
+msgid ""
+"Check layer types to select all layers of that type, or check individual "
+"layers for more specific filtering."
+msgstr ""
+
+msgid "Check the console for troubleshooting data from device \"{{deviceName}}\"!"
+msgstr "Sjekk konsollen for feilsøkingsdata frå eninga \"{{deviceName}}\"!"
+
+msgid "Cleanup"
+msgstr "Opprydding"
+
+msgid "Cleanup old data"
+msgstr "Rydd opp i gamle data"
+
+msgid "Cleanup old database indexes"
+msgstr "Rydd opp i gamle databaseindexer"
+
+msgid "Clear {{layerName}}"
+msgstr "Tøm {{layerName}}"
+
+msgid "Clear filter"
+msgstr ""
+
+msgid "Clear queued segment"
+msgstr "Fjern cuet tittel"
+
+msgid "Clear QuickLoop"
+msgstr ""
+
+msgid "Clear QuickLoop End"
+msgstr ""
+
+msgid "Clear QuickLoop Start"
+msgstr ""
+
+msgid "Clear Source Layer"
+msgstr "Tøm kjeldelag"
+
+msgid "Clear value"
+msgstr ""
+
+msgid "Clearing SourceLayer"
+msgstr ""
+
+msgid "Click anywhere for fullscreen"
+msgstr ""
+
+msgid "Click on a rundown to control your studio"
+msgstr "Klikk på ein køyreplan for å kontrollere studioet ditt"
+
+msgid "Click or press Enter for fullscreen"
+msgstr ""
+
+msgid "Click to show available Package Containers"
+msgstr "Klikk for å vise tilgjengelege pakkekntainere"
+
+msgid "Click to show available Show Styles"
+msgstr "Klikk for å vise tilgjengelege showstyles"
+
+msgid "Client IP"
+msgstr "Klient-ip"
+
+msgid "Clip starts with {{frames}} black frames"
+msgstr ""
+
+msgid "Clip starts with {{frames}} freeze frames"
+msgstr ""
+
+msgid "Clips"
+msgstr "Klipp"
+
+msgid "Close"
+msgstr "Lukk"
+
+msgid "Close Properties Panel"
+msgstr ""
+
+msgid "Close Rundown"
+msgstr ""
+
+msgid "Comma-separated list of studio labels to filter by. Leave empty for all."
+msgstr ""
+
+msgid "Comma-separated speeds in px/frame"
+msgstr ""
+
+msgid "Compatible Studios"
+msgstr ""
+
+msgid "Completed with warnings"
+msgstr ""
+
+msgid "Config Fix Up must be run or ignored before the configuration can be edited"
+msgstr ""
+
+msgid "Config for {{name}} fix failed"
+msgstr ""
+
+msgid "Config for {{name}} fixed successfully"
+msgstr ""
+
+msgid "Config for {{name}} upgraded failed"
+msgstr ""
+
+msgid "Config for {{name}} upgraded successfully"
+msgstr ""
+
+msgid "Config has not been applied before"
+msgstr ""
+
+msgid "Config ID: "
+msgstr ""
+
+msgid "Config looks good"
+msgstr ""
+
+msgid "Config preset"
+msgstr ""
+
+msgid "Config preset is missing"
+msgstr ""
+
+msgid "Config preset not set"
+msgstr ""
+
+msgid "Config requires fixing up before it can be validated"
+msgstr ""
+
+msgid ""
+"Config value \"{{ name }}\" has changed. From \"{{ oldValue }}\", to \"{{ "
+"newValue }}\""
+msgstr ""
+
+msgid "Configurable Screens"
+msgstr ""
+
+msgid ""
+"Configuration for this Gateway has moved to the Studio Peripheral Device "
+"settings"
+msgstr ""
+
+msgid "Configure display options"
+msgstr ""
+
+msgid ""
+"Configure which pieces should display their assigned AB resolver channel "
+"(e.g., \"Server A\") on various screens. This helps operators identify "
+"which video server is playing each clip."
+msgstr ""
+
+msgid "Confirm"
+msgstr ""
+
+msgid "Connect some devices to the playout gateway"
+msgstr "Kople til ein eller fleire einingar til playout-gatewayen"
+
+msgid "Connect to {{deviceName}}"
+msgstr ""
+
+msgid "Connected"
+msgstr "Tilkopla"
+
+msgid "Connected App Containers"
+msgstr "Tilkopla app-kontainere"
+
+msgid "Connected Expectation Managers"
+msgstr ""
+
+msgid "Connected to the {{platformName}}."
+msgstr ""
+
+msgid "Connected Workers"
+msgstr "Tilkopla arbeidarar"
+
+msgid "Connecting to the {{platformName}}"
+msgstr ""
+
+msgid "Container Status"
+msgstr ""
+
+msgid "Control mode"
+msgstr ""
+
+msgid "Control modes"
+msgstr ""
+
+msgid ""
+"Controls for exposed Route Sets will be displayed to the producer within "
+"the Rundown View in the Switchboard."
+msgstr ""
+"Kontroller for eksponerte omkoplingsgrupper vil verte synt for producer i "
+"køyreplansvisninga i omkoplingspanelet."
+
+msgid "Core"
+msgstr ""
+
+msgid "Core + Worker processing time"
+msgstr ""
+
+msgid "Core System settings"
+msgstr "Systeminnstillingar for Core"
+
+msgid ""
+"Could not create a snapshot for the evaluation, because the previous one "
+"was created just moments ago. If you want another snapshot, try again in a "
+"couple of seconds."
+msgstr ""
+
+msgid "Could not get system status. Please consult system administrator."
+msgstr "Kan ikkje innhente status for systemet. Kontakt systemadministrator."
+
+msgid "Could not restart core: {{err}}"
+msgstr ""
+
+msgid "Could not restart Playout Gateway \"{{playoutDeviceName}}\"."
+msgstr "Playout-gateway \"{{playoutDeviceName}}\" kunne ikkje startas om att."
+
+msgid "Create Adlib Testing Rundown"
+msgstr ""
+
+msgid "Create new Bucket"
+msgstr "Opprett ny bøtte"
+
+msgid "Created"
+msgstr "Oppretta"
+
+msgid "Creating a new Bucket"
+msgstr ""
+
+msgid "Creating Adlib Testing Rundown"
+msgstr ""
+
+msgid "Creating Snapshot for debugging"
+msgstr ""
+
+msgid "Critical problems"
+msgstr ""
+
+msgid "Critical Problems"
+msgstr ""
+
+msgid "Cron jobs"
+msgstr "Cron-jobbar"
+
+msgid "Current Part"
+msgstr "Noverande del"
+
+msgid "Current part can contain next pieces"
+msgstr ""
+
+msgid "Current Segment"
+msgstr "Noverande tittel"
+
+msgid "Custom Classes"
+msgstr "Tilpassa klasser"
+
+msgid "Custom Hotkey Labels"
+msgstr "Eigendefinerte etikettar for hurtigtastar"
+
+msgid "Deactivate"
+msgstr "Deaktiver"
+
+msgid "Deactivate \"On Air\""
+msgstr ""
+
+msgid "Deactivate Rundown"
+msgstr "Deaktiver køyreplan"
+
+msgid "Deactivate Studio"
+msgstr ""
+
+msgid "Deactivating other Rundown Playlist, and activating this one"
+msgstr ""
+
+msgid "Deactivating Rundown Playlist"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "Debug mode"
+msgstr ""
+
+msgid "Debug State"
+msgstr ""
+
+msgid "Default"
+msgstr "Standard"
+
+msgid "Default (hide)"
+msgstr ""
+
+msgid "Default Layout"
+msgstr "Standardlayout"
+
+msgid "Default shelf height"
+msgstr "Standard høyde for skuff"
+
+msgid "Default State"
+msgstr "Standardtilstand"
+
+msgid "Delete"
+msgstr "Slett"
+
+msgid "Delete Action Trigger"
+msgstr ""
+
+msgid "Delete layout?"
+msgstr "Slett layout?"
+
+msgid "Delete mapping"
+msgstr ""
+
+msgid "Delete output layer"
+msgstr ""
+
+msgid "Delete rundown?"
+msgstr "Slette køyreplanen?"
+
+msgid "Delete source layer"
+msgstr ""
+
+msgid "Delete this AdLib"
+msgstr "Slett denne adliben"
+
+msgid "Delete this Blueprint?"
+msgstr "Slett dette blueprintet?"
+
+msgid "Delete this Bucket"
+msgstr "Slett denne bøtta"
+
+msgid "Delete this item?"
+msgstr "Slett dette elementet?"
+
+msgid "Delete this output?"
+msgstr "Slett denne utgangen?"
+
+msgid "Delete this Show Style?"
+msgstr "Slett denne showstylen?"
+
+msgid "Delete this Studio?"
+msgstr "Slett dette studioet?"
-msgid "Deactivate"
-msgstr "Deaktiver"
+msgid "Device"
+msgstr ""
-msgid "Take"
-msgstr "Take"
+msgid "Device \"{{deviceName}}\" restarting..."
+msgstr "\"{{deviceName}}\" starter på ny..."
-msgid "Reset Rundown"
-msgstr "Tilbakestill køyreplanen"
+msgid "Device {{deviceName}} is disconnected"
+msgstr "{{deviceName}} er fråkopla"
-msgid "Reload {{nrcsName}} Data"
-msgstr "Last inn {{nrcsName}}-data på nytt"
+msgid "Device ID"
+msgstr "Eining-id"
-msgid "Store Snapshot"
-msgstr "Lagre snapshot"
+msgid "Device is already attached to another studio."
+msgstr ""
-msgid "No actions available"
-msgstr "Ingen køyreplanval tilgjengelege i påsynmodus"
+msgid "Device is missing configuration schema"
+msgstr ""
-msgid "Add ?studio=1 to the URL to enter studio mode"
-msgstr "Leggje til ?admin=1 på slutten av nettadressa for å starte studiomodus"
+msgid "Device is of unknown type"
+msgstr ""
-msgid "Exit"
-msgstr "Lukk"
+msgid "Device Name"
+msgstr "Einingsnamn"
-msgid "Error"
-msgstr "Feil"
+msgid "Device not found"
+msgstr ""
-msgid "This rundown is now active. Are you sure you want to exit this screen?"
-msgstr "Denne køyreplanen er aktiv. Er du sikker på at du vil avslutte?"
+msgid "Device Triggers"
+msgstr ""
-msgid "Invalid AdLib"
-msgstr "Ugyldig adlib"
+msgid "Device Type"
+msgstr "Type eining"
-msgid "Cannot play this AdLib because it is marked as Invalid"
-msgstr "Kan ikkje spele av adlib fordi den er markert som ugyldig"
+msgid "Devices"
+msgstr "Einingar"
-#, fuzzy
-#| msgid "Floated AdLib"
-msgid "Floated Adlib"
-msgstr "Adlib satt på vent"
+msgid "Devices with issues"
+msgstr "Einingar med problem"
-msgid "Cannot play this AdLib because it is marked as Floated"
-msgstr "Kan ikkje spele av adlib fordi den er markert som på vent (float)"
+msgid "Did you have any problems with the broadcast?"
+msgstr "Hadde du nokre problem under sendinga?"
-msgid "Not queueable"
-msgstr "Kan ikkje setjast i kø"
+msgid "Diff"
+msgstr "Skilnad"
-msgid "Cannot play this adlib because source layer is not queueable"
-msgstr "Kan ikkje spele av adlib fordi den ikkje kan setjast i kø på kjeldelaget"
+msgid "Director Screen"
+msgstr ""
-msgid ""
-"There are no Playout Gateways connected and attached to this studio. Please "
-"contact the system administrator to start the Playout Gateway."
+msgid "Director's Screen"
msgstr ""
-"Dette studioet har ingen tilkopla playout-gatewayar. Kontakt "
-"systemadministrator for å starte den."
-msgid "Playout Gateway \"{{playoutDeviceName}}\" is now restarting."
-msgstr "Playout-gateway \"{{playoutDeviceName}}\" startar om att."
+msgid "Disable"
+msgstr ""
-msgid "Could not restart Playout Gateway \"{{playoutDeviceName}}\"."
-msgstr "Playout-gateway \"{{playoutDeviceName}}\" kunne ikkje startas om att."
+msgid "Disable Context Menu"
+msgstr "Skruv av kontekstmeny"
-msgid "Restart Playout"
-msgstr "Start Playout-gateway på ny"
+msgid "Disable follow take"
+msgstr ""
-#, fuzzy
-#| msgid "Do you want to restart Quantel Gateway?"
-msgid "Do you want to restart the Playout Gateway?"
-msgstr "Er du sikker på at du vil starte Quantel-gateway om att?"
+msgid "Disable hints by adding this to the URL:"
+msgstr "Deaktiver hint ved å legge dette til på url-en:"
-msgid "Restart CasparCG Server"
-msgstr "Start CasparCG på nytt"
+msgid "Disable next Piece"
+msgstr "Skip neste element"
-msgid "Do you want to restart CasparCG Server \"{{device}}\"?"
+msgid "Disable the hover Inspector when hovering over the button"
msgstr ""
-"Er du sikker på at du vil starta CasparCG Server \"{{device}}\" på nytt?"
-msgid "CasparCG on device \"{{deviceName}}\" restarting..."
-msgstr "CasparCG på \"{{deviceName}}\" startar på nytt..."
+msgid "Disable the next element"
+msgstr "Skip neste super"
-msgid ""
-"Failed to restart CasparCG on device: \"{{deviceName}}\": {{errorMessage}}"
-msgstr "Omstart av CasparCG på \"{{deviceName}}\" feila: {{errorMessage}}"
+msgid "Disable version check"
+msgstr "Deaktiver versjonsjekk"
-msgid "Cancel currently pressed hotkey"
-msgstr "Avbryt den trykte tasten"
+msgid "Disabled"
+msgstr "Deaktivert"
-msgid "Change to fullscreen mode"
-msgstr "Fullskjermmodus"
+msgid "Disabling next Piece"
+msgstr ""
-msgid "Show Hotkeys"
-msgstr "Vis hurtigtastar"
+msgid "Disconnected"
+msgstr "Fråkopla"
-msgid "Take a Snapshot"
-msgstr "Lagre eit snapshot"
+msgid "Dismiss"
+msgstr ""
-msgid "Restart {{device}}"
-msgstr "Start {{device}} på ny"
+msgid "Dismiss all notifications"
+msgstr ""
-msgid "Rundown not found"
-msgstr "Køyreplan ikkje funnen"
+msgid "Display AB channel assignments on:"
+msgstr ""
-msgid "Close"
-msgstr "Lukk"
+msgid "Display AdLibs in a column in List View"
+msgstr ""
-msgid "Rundown for piece \"{{pieceLabel}}\" could not be found."
-msgstr "Kan ikkje finne øyreplan for \"{{pieceLabel}}\"."
+msgid "Display in a column in List View"
+msgstr ""
-msgid "This rundown has been unpublished from Sofie."
-msgstr "Denne køyreplanen er ikkje lenger tilgjengeleg i Sofie."
+msgid "Display name of the Package Container"
+msgstr "Pakkekontaineren sitt namn som visast i oversikten"
-msgid "Error: The studio of this Rundown was not found."
-msgstr "Feil: Kan ikkje finne studioet for denne køyreplanen."
+msgid "Display piece duration for source layers"
+msgstr ""
-msgid "This playlist is empty"
-msgstr "Denne spelelista er tom"
+msgid "Display Rank"
+msgstr "Rangering for visning"
-msgid "Error: The ShowStyle of this Rundown was not found."
-msgstr "Feil: Kan ikkje finne showstyle for denne køyreplanen."
+msgid "Display Style"
+msgstr "Stil for vising"
-msgid "Unknown error"
-msgstr "Ukjend feil"
+msgid "Display Take buttons"
+msgstr "Vis Take-knapp"
msgid ""
-"Rundown {{rundownName}} in Playlist {{playlistName}} is missing in the data "
-"from {{nrcsName}}. You can either leave it in Sofie and mark it as Unsynced "
-"or remove the rundown from Sofie. What do you want to do?"
+"Do you really want to remove just the rundown \"{{rundownName}}\" in the "
+"playlist {{playlistName}} from Sofie? \n"
+"\n"
+"This cannot be undone!"
msgstr ""
-"Køyreplanen {{rundownName}} i lista {{playlistName}} manglar i data frå "
-"{{nrcsName}}. Du kan anten markere den som ikkje synkronisert og behalde den "
-"i Sofie, eller du kan fjerne køyreplanen ifrå Sofie. Kva vil du gjere?"
-
-msgid "(Unknown rundown)"
-msgstr "(Ukjend køyreplan)"
-msgid "(Unknown playlist)"
-msgstr "(Ukjend køyreplanliste)"
+msgid "Do you really want to restore the snapshot \"{{snapshotName}}\"?"
+msgstr ""
-msgid "Leave Unsynced"
-msgstr "Behald ikkje-synkronisert køyreplan"
+msgid "Do you want to activate this Rundown?"
+msgstr "Vil du aktivere denne køyreplanen?"
-msgid "Remove"
-msgstr "Fjern"
+msgid ""
+"Do you want to append these to existing Action Triggers, or do you want to "
+"replace them?"
+msgstr ""
+"Vil du legge desse til dei noverande handlingsutløysarane, eller vil du "
+"erstatta dei?"
-msgid "Remove rundown"
-msgstr "Fjern køyreplan"
+msgid "Do you want to do this?"
+msgstr ""
-msgid ""
-"Do you really want to remove just the rundown \"{{rundownName}}\" in the "
-"playlist {{playlistName}} from Sofie? This cannot be undone!"
+msgid "Do you want to execute {{actionName}}? This may the disrupt the output"
msgstr ""
-"Er du sikker på at du vil slette køyreplanen {{rundownName}} i lista "
-"{{playlistName}} frå Sofie? Denne handlinga kan du ikkje angre!"
-msgid "Loop Start"
-msgstr "Start for loop"
+msgid "Do you want to restart CasparCG Server \"{{device}}\"?"
+msgstr "Er du sikker på at du vil starta CasparCG Server \"{{device}}\" på nytt?"
-msgid "Loop End"
-msgstr "Slutt for loop"
+msgid "Do you want to restart the Playout Gateway?"
+msgstr ""
-msgid "(in: {{time}})"
-msgstr "(om: {{time}})"
+msgid "Documentation is available at"
+msgstr "Dokumentasjon er tilgjengelig på"
-msgid "({{time}} ago)"
-msgstr "(for {{time}} sidan)"
+msgid "Documents to be removed:"
+msgstr "Dokument som vert fjerna:"
-msgid "Planned Start"
-msgstr "Planlagt start"
+msgid "Does NOT support HEAD requests"
+msgstr ""
-msgid "Planned Duration"
-msgstr "Planlagt varigheit"
+msgid "Don't treat the end of the last rundown in a playlist as a break"
+msgstr "Ikkje behandle slutten av den siste køyreplanen i ei speleliste som ei pause"
-msgid "Planned End"
-msgstr "Planlagt slutt"
+msgid "Done"
+msgstr "Utført"
-msgid "Time to planned end"
-msgstr "Tid til planlagt slutt"
+msgid "Download Action Triggers"
+msgstr "Last ned handlingsutløysarar"
-msgid "Time since planned end"
-msgstr "Tid sidan planlagt slutt"
+msgid "Drag to reorder or move out of playlist"
+msgstr "Dra for å endre rekkefølgje eller flytta ut av speleliste"
-msgid "Over/Under"
-msgstr "Over/Under"
+msgid "Drop Rundown here to move it out of its current Playlist"
+msgstr ""
-msgid ""
-"The rundown \"{{rundownName}}\" is not published or activated in "
-"{{nrcsName}}! No data updates will currently come through."
+msgid "Dropzone URL"
msgstr ""
-"Køyreplanen \"{{rundownName}}\" er ikkje synkronisert med MOS/{{nrcsName}}! "
-"Kontroller at den er satt til MOS Active i ENPS."
-msgid "Re-sync"
-msgstr "Synkroniser med MOS"
+msgid "Duplicate Action Trigger"
+msgstr ""
-msgid "Re-sync Rundown"
-msgstr "Synkroniser køyreplanen med ENPS på nytt"
+msgid "Duration"
+msgstr "Lengde"
-msgid ""
-"Are you sure you want to re-sync the Rundown?\n"
-"(If the currently playing Part has been changed, this can affect the output)"
+msgid "DURATION"
msgstr ""
-"Er du sikker på at du vil gjenopprette synkronisering mot ENPS for denne "
-"køyreplanen?\n"
-"(Dette kan virke inn på pågåande sending)"
-
-msgid "Restart"
-msgstr "Restart"
-msgid ""
-"Fixing this problem requires a restart to the host device. Are you sure you "
-"want to restart {{device}}?\n"
-"(This might affect output)"
+msgid "e.g., Studio A,Studio B"
msgstr ""
-"Feilretting krever ein omstart av {{device}}. Er du sikker på at du ønsker å "
-"starta einingen på nytt?(Dette kan ha innverknad på gjennomføringa av ein "
-"igangverande sending)"
-msgid "Device \"{{deviceName}}\" restarting..."
-msgstr "\"{{deviceName}}\" starter på ny..."
+msgid "Edit"
+msgstr ""
-msgid "Failed to restart device: \"{{deviceName}}\": {{errorMessage}}"
-msgstr "Kunne ikkje starta \"{{deviceName}}\" om att: {{errorMessage}}"
+msgid "Edit Action Trigger"
+msgstr ""
-msgid "There is an unknown problem with the part."
-msgstr "Det er eit ukjend problem med denne delen."
+msgid "Edit in Nora"
+msgstr "Rediger i Nora"
-msgid "Show issue"
-msgstr "Vis problem"
+msgid "Edit mapping"
+msgstr ""
-msgid "There is an unspecified problem with the source."
-msgstr "Det er eit ikkje-spesifisert problem med kjelden."
+msgid "Edit Mode"
+msgstr ""
-msgid "External message queue has unsent messages."
-msgstr "Ekstern meldingskø har meldingar som ikkje er sendt."
+msgid "Edit output layer"
+msgstr ""
-msgid ""
-"The system configuration has been changed since importing this rundown. It "
-"might not run correctly"
+msgid "Edit Part Properties"
msgstr ""
-"Systemoppsettet har verte endra etter at denne køyreplanen vart importert. "
-"Køyreplanen kan verte spelt av med feil"
-msgid "Unable to check the system configuration for changes"
-msgstr "Kan ikkje kontrollere endringar i systemoppsettet"
+msgid "Edit Piece Properties"
+msgstr ""
-msgid "The Studio configuration is missing some required fields:"
-msgstr "Studiooppsettet manglar obligatoriske felt:"
+msgid "Edit Segment Properties"
+msgstr ""
-msgid "The Show Style configuration \"{{name}}\" could not be validated"
-msgstr "Showstyleoppsettet \"{{name}}\" kunne ikkje validerast"
+msgid "Edit source layer"
+msgstr ""
-msgid ""
-"The ShowStyle \"{{name}}\" configuration is missing some required fields:"
-msgstr "Showstyleoppsettet \"{{name}}\" manglar obligatoriske felt:"
+msgid "Edit Support Panel"
+msgstr "Rediger supportpanel"
-msgid "Unable to validate the system configuration"
-msgstr "Systemoppsettet kunne ikkje validerast"
+msgid "Empty"
+msgstr "Tom"
-msgid "Device {{deviceName}} is disconnected"
-msgstr "{{deviceName}} er fråkopla"
+msgid "Empty this Bucket"
+msgstr "Tøm denne bøtta"
-#, fuzzy
-#| msgid "Critical Errors"
-msgid "Critical Problems"
-msgstr "Kritiske feil"
+msgid "Emptying Bucket"
+msgstr ""
-msgid "Warnings"
-msgstr "Åtvaringar"
+msgid "Enable"
+msgstr "Aktivert"
-#, fuzzy
-#| msgid "Migrations"
-msgid "Notifications"
-msgstr "Migrering"
+msgid "Enable \"Play from Anywhere\""
+msgstr "Slå på \"Play from Anywhere\""
-#, fuzzy
-#| msgid "Rewind Segments to start"
-msgid "Rewind all Segments"
-msgstr "Sett alle segment attende til start"
+msgid "Enable AdLib Testing, for testing AdLibs before taking the first Part"
+msgstr ""
-#, fuzzy
-#| msgid "Show entire On Air Segment"
-msgid "Go to On Air Segment"
-msgstr "Vis heile tittelen som er OnAir"
+msgid "Enable automatic storage of Rundown Playlist snapshots periodically"
+msgstr ""
-#, fuzzy
-#| msgid "Switchboard"
-msgid "Toggle Switchboard Panel"
-msgstr "Omkoplingssentral"
+msgid "Enable Buckets"
+msgstr ""
-#, fuzzy
-#| msgid "Edit Support Panel"
-msgid "Toggle Support Panel"
-msgstr "Rediger supportpanel"
+msgid "Enable CasparCG restart job"
+msgstr "Aktiver CasparCG restartjobbar"
-msgid "Just now"
-msgstr "No"
+msgid "Enable configuration mode by adding ?configure=1 to the address bar."
+msgstr ""
+"Aktiver konfigurasjonsmodus ved å legge til ?configure=1 på slutten av "
+"nettadressa."
-msgid "Less than a minute ago"
-msgstr "Under eitt minutt sidan"
+msgid "Enable Evaluation Form"
+msgstr ""
-msgid "Less than five minutes ago"
-msgstr "Under fem minutt sidan"
+msgid "Enable hints by adding this to the URL:"
+msgstr "Aktiver hint ved å legge dette til på url-en:"
-msgid "Around 10 minutes ago"
-msgstr "Cirka 10 minutt sidan"
+msgid "Enable QuickLoop"
+msgstr ""
-msgid "More than 10 minutes ago"
-msgstr "Over 10 minutt sidan"
+msgid "Enable search toolbar"
+msgstr "Aktiver søkeverktøy"
-msgid "More than 30 minutes ago"
-msgstr "Over 30 minutt sidan"
+msgid "Enable User Editing"
+msgstr ""
-msgid "More than 2 hours ago"
-msgstr "Over 2 timer sidan"
+msgid "Enabled"
+msgstr "Aktivert"
-msgid "More than 5 hours ago"
-msgstr "Over 5 timar sidan"
+msgid "Enabled on all Parts, applying QuickLoop Fallback Part Duration if needed"
+msgstr ""
-msgid "More than a day ago"
-msgstr "Over ein dag sidan"
+msgid "Enabled, but skipping parts with undefined or 0 duration"
+msgstr ""
-msgid "{{nrcsName}} Connection"
-msgstr "{{nrcsName}}-tilkopling"
+msgid ""
+"Enables internal monitoring of blocked main thread. Logs when there is an "
+"issue, but (unverified) might cause issues in itself."
+msgstr ""
-msgid "Last update"
-msgstr "Nyeste oppdatering"
+msgid "End of script"
+msgstr "Slutt på manus"
-msgid "Off-line devices"
-msgstr "Fråkoplete einingar"
+msgid "End Words"
+msgstr "Stikkord"
-msgid "Devices with issues"
-msgstr "Einingar med problem"
+msgid "Error"
+msgstr "Feil"
-msgid "All connections working correctly"
-msgstr "Alle tilkoplingar er OK"
+msgid "Error when checking for cleaning up"
+msgstr ""
-msgid "Play-out"
-msgstr "Avspelning"
+msgid "Error: The ShowStyle of this Rundown was not found."
+msgstr "Feil: Kan ikkje finne showstyle for denne køyreplanen."
-msgid "All devices working correctly"
-msgstr "Alle eininger fungerer som dei skal"
+msgid "Error: The studio of this Rundown was not found."
+msgstr "Feil: Kan ikkje finne studioet for denne køyreplanen."
-msgid "Auto"
-msgstr "Auto"
+msgid "Est. End"
+msgstr ""
-msgid "Expected End"
-msgstr "Venta slutt"
+msgid "Evaluations"
+msgstr "Evalueringar"
-msgid "Next Loop at"
-msgstr "Neste loop starter"
+msgid "Exclusivity group"
+msgstr "Ekslusivitetgruppe"
-msgid "Diff"
-msgstr "Skilnad"
+msgid "Exclusivity Group ID"
+msgstr "Eksklusivitetgruppe-id"
-msgid "Started"
-msgstr "Starta"
+msgid "Exclusivity Group Name"
+msgstr "Eksklusivitetgruppenamn"
-msgid "Expected Start"
-msgstr "Venta slutt"
+msgid "Exclusivity Groups"
+msgstr "Ekslusivitetgrupper"
-msgid "{{currentRundownName}} - {{rundownPlaylistName}} (Looping)"
-msgstr "{{currentRundownName}} - {{rundownPlaylistName}} (Looper)"
+msgid "Execute"
+msgstr "Utfør"
-msgid "{{currentRundownName}} - {{rundownPlaylistName}}"
-msgstr "{{currentRundownName}} - {{rundownPlaylistName}}"
+msgid "Execute User Operation"
+msgstr ""
-msgid "{{rundownPlaylistName}} (Looping)"
-msgstr "{{rundownPlaylistName}} (Looper)"
+msgid "Executed {{actionName}} on device \"{{deviceName}}\": {{response}}"
+msgstr ""
-msgid "Floated AdLib"
-msgstr "Adlib satt på vent"
+msgid "Executed {{actionName}} on device \"{{deviceName}}\"..."
+msgstr ""
-msgid "Switchboard"
-msgstr "Omkoplingssentral"
+msgid "Executes within the currently open Rundown, requires a Client-side trigger."
+msgstr ""
+"Blir utførte innanfor den valde køyreplanen, men treng ein utløysar frå "
+"klienten."
-msgid "This is not in it's normal setting"
-msgstr "Denne innstillinga er vorte endra frå standardverdien"
+msgid "Execution times"
+msgstr "Køyretider"
-msgid "Off"
-msgstr "Av"
+msgid "Exit"
+msgstr "Lukk"
-#, fuzzy
-#| msgid "Segment"
-msgid "segment"
-msgstr "Tittel"
+msgid "Expectation Manager"
+msgstr ""
-#, fuzzy
-#| msgid "Critical Errors"
-msgid "Critical problems"
-msgstr "Kritiske feil"
+msgid "Expected End"
+msgstr "Venta slutt"
-msgid "On Air At"
-msgstr "On Air klokka"
+msgid "Expected End text"
+msgstr "Tekst for venta slutt"
-msgid "On Air In"
-msgstr "On Air om"
+msgid "Expected End Time"
+msgstr "Venta sendeslutt"
-msgid "Unsynced"
-msgstr "Ikkje synkronisert med MOS"
+msgid "Expected Start"
+msgstr "Venta slutt"
-msgid "Sources"
-msgstr "Kjelder"
+msgid "Export"
+msgstr "Eksporter"
-msgid "Switch to Timeline mode"
+msgid "Export visible"
msgstr ""
-msgid "On Air"
-msgstr "On Air"
-
-msgid "Loops to top"
-msgstr "Looper til toppen"
+msgid "Expose as user selectable layout"
+msgstr "Gjer tilgjengeleg som brukarvalgt layout"
-msgid "Show End"
-msgstr "Sendeslutt"
+msgid "Expose layout as a standalone page"
+msgstr "Gjer layout tilgjengeleg som ei sjølvstendig side"
-msgid "BREAK"
-msgstr "PAUSE"
+msgid "External message queue has unsent messages."
+msgstr "Ekstern meldingskø har meldingar som ikkje er sendt."
-msgid "Break In"
-msgstr "Pause om"
+msgid "Failed to activate"
+msgstr "Kunne ikkje aktivere"
-msgid "part"
-msgstr "punkt"
+msgid "Failed to add a new Show Style Variant: {{errorMessage}}"
+msgstr ""
-msgid "Set segment as Next"
-msgstr "Set tittel som neste: Startar på neste Take"
+msgid "Failed to assign AB player for {{pieceNames}}"
+msgstr ""
-msgid "Queue segment"
-msgstr "Cue tittel: Startar når aktiv tittel er ferdig"
+msgid "Failed to assign non-critical AB player for {{pieceNames}}"
+msgstr ""
-msgid "Clear queued segment"
-msgstr "Fjern cuet tittel"
+msgid "Failed to compare config changes"
+msgstr ""
-msgid "Set this part as Next"
-msgstr "Set dette punktet som neste: Startar på neste Take"
+msgid "Failed to copy Show Style Variant: {{errorMessage}}"
+msgstr ""
-msgid "Set Next Here"
-msgstr "Sett Neste her"
+msgid "Failed to delete Show Style Variant: {{errorMessage}}"
+msgstr ""
-msgid "Play from Here"
-msgstr "Spel av frå her"
+msgid ""
+"Failed to execute {{actionName}} on device: \"{{deviceName}}\": "
+"{{errorMessage}}"
+msgstr ""
-#, fuzzy
-#| msgid "Switchboard"
-msgid "Switch to Storyboard mode"
-msgstr "Byt til Storyboard-visning"
+msgid "Failed to execute take"
+msgstr "Kunne ikkje gjennomføre Take"
-msgid "Zoom Out"
-msgstr "Zoom ut"
+msgid "Failed to generate adlib rundown! {{message}}"
+msgstr ""
-msgid "Show All"
-msgstr "Vis Alle"
+msgid "Failed to import new Show Style Variants: {{errorMessage}}"
+msgstr ""
-msgid "Zoom In"
-msgstr "Zoom In"
+msgid ""
+"Failed to import Show Style Variant {{name}}. Make sure it is not already "
+"imported."
+msgstr ""
-msgid "Parts Duration"
-msgstr "Varigheit for del"
+msgid "Failed to remove all Show Style Variants: {{errorMessage}}"
+msgstr ""
-msgid "Unknown"
-msgstr "Ukjend"
+msgid "Failed to reorderShow Style Variant: {{errorMessage}}"
+msgstr ""
-msgid "Good"
-msgstr "Bra"
+msgid "Failed to reset OAuth credentials: {{errorMessage}}"
+msgstr "Nullstilling av OAuth credentials feila: {{errorMessage}}"
-msgid "Minor Warning"
-msgstr "Mindre åtvaring (avvik)"
+msgid "Failed to restart CasparCG on device: \"{{deviceName}}\": {{errorMessage}}"
+msgstr "Omstart av CasparCG på \"{{deviceName}}\" feila: {{errorMessage}}"
-msgid "Warning"
-msgstr "Åtvaring"
+msgid "Failed to restart device: \"{{deviceName}}\": {{errorMessage}}"
+msgstr "Kunne ikkje starta \"{{deviceName}}\" om att: {{errorMessage}}"
-msgid "Bad"
-msgstr "Feil"
+msgid "Failed to update blueprints: {{errorMessage}}"
+msgstr "Oppdatering av blueprints feila: {{errorMessage}}"
-msgid "Fatal"
-msgstr "Kritisk"
+msgid "Failed to update config: {{errorMessage}}"
+msgstr "Oppdatering av konfigurasjon feila: {{errorMessage}}"
-msgid "Connected"
-msgstr "Tilkopla"
+msgid "Failed to upload OAuth credentials: {{errorMessage}}"
+msgstr "Opplasting av OAuth credentials feila: {{errorMessage}}"
-msgid "Disconnected"
-msgstr "Fråkopla"
+msgid "Failed to upload shelf layout: {{errorMessage}}"
+msgstr "Opplasting av layout feila: {{errorMessage}}"
-msgid "MOS Gateway"
-msgstr "MOS-gateway"
+msgid "Failed to validate config"
+msgstr ""
-msgid "Spreadsheet Gateway"
-msgstr "Spreadsheet-gateway"
+msgid "Fatal"
+msgstr "Kritisk"
-msgid "Play-out Gateway"
-msgstr "Playout-gateway"
+msgid "File path to the folder of the local folder"
+msgstr "Sti til lokal mappe"
-msgid "Media Manager"
-msgstr "Media Manager"
+msgid "Filter by Output Layer"
+msgstr ""
-msgid "Unknown Device"
-msgstr "Ukjend eining"
+msgid "Filter by Source Layer"
+msgstr ""
-msgid "Delete this Studio?"
-msgstr "Slett dette studioet?"
+msgid "Filter disabled"
+msgstr "Filter deaktivert"
-msgid "Are you sure you want to delete the studio \"{{studioId}}\"?"
-msgstr "Er du sikker på at du vil slette studioet \"{{studioId}}\"?"
+msgid "Filter Disabled"
+msgstr "Filter deaktivert"
-msgid "Delete this Show Style?"
-msgstr "Slett denne showstylen?"
+msgid "Filter..."
+msgstr ""
-msgid "Are you sure you want to delete the show style \"{{showStyleId}}\"?"
-msgstr "Er du sikker på at du vil slette showstylen \"{{showStyleId}}\"?"
+msgid "Filters"
+msgstr "Filtre"
-msgid "Delete this Blueprint?"
-msgstr "Slett dette blueprintet?"
+msgid "Find Trigger..."
+msgstr "Finn utløysar..."
-msgid "Are you sure you want to delete the blueprint \"{{blueprintId}}\"?"
-msgstr "Er du sikker på at du vil slette blueprintet \"{{blueprintId}}\"?"
+msgid "Fine scroll"
+msgstr ""
-msgid "Remove this Device?"
-msgstr "Fjern denne eininga?"
+msgid "Fix Up Config"
+msgstr ""
+
+msgid "Fixed duration in Segment header"
+msgstr "Låst lengde i tittelheader"
msgid ""
-"Are you sure you want to remove the device \"{{deviceName}}\" and all of "
-"it's sub-devices?"
+"Fixing this problem requires a restart to the host device. Are you sure you "
+"want to restart {{device}}?\n"
+"(This might affect output)"
msgstr ""
-"Er du sikker på at du vil fjerne eninga \"{{deviceName}}\" og alle "
-"undereiningane?"
+"Feilretting krever ein omstart av {{device}}. Er du sikker på at du ønsker "
+"å starta einingen på nytt?(Dette kan ha innverknad på gjennomføringa av ein "
+"igangverande sending)"
-msgid "Studios"
-msgstr "Studio"
+msgid "Floated Adlib"
+msgstr ""
-msgid "Unnamed Studio"
-msgstr "Studio utan namn"
+msgid "Floated AdLib"
+msgstr "Adlib satt på vent"
-msgid "Show Styles"
-msgstr "Showstyle"
+msgid "Folder path"
+msgstr "Mappesti"
-msgid "Unnamed Show Style"
-msgstr "Showstyle utan namn"
+msgid "Folder path to shared folder"
+msgstr "Sti til delt mappe"
-msgid "Source Layers"
-msgstr "Kjeldelag"
+msgid "Following"
+msgstr ""
-msgid "Output Channels"
-msgstr "Utgangskanalar"
+msgid "Font size"
+msgstr ""
-msgid "Blueprints"
-msgstr "Blueprint"
+msgid "for {{name}} fix skipped successfully"
+msgstr ""
-msgid "Unnamed blueprint"
-msgstr "Blueprint utan namn"
+msgid "Force"
+msgstr "Tving"
-msgid "Type"
-msgstr "Type"
+msgid "Force (deactivate others)"
+msgstr "Tving (deaktiver andre)"
-msgid "Version"
-msgstr "Versjon"
+msgid "Force Migration"
+msgstr "Tving migrering"
-msgid "Devices"
-msgstr "Einingar"
+msgid "Force Migration (unsafe)"
+msgstr "Tving migrering (utrygt)"
-msgid "Tools"
-msgstr "Verktøy"
+msgid "Force the Multi-gateway-mode"
+msgstr "Tving multigateway-modus"
-msgid "Core System settings"
-msgstr "Systeminnstillingar for Core"
+msgid "Forward"
+msgstr ""
-msgid "Upgrade Database"
-msgstr "Oppgrader databasen"
+msgid "Forward: {{forward}}"
+msgstr ""
-msgid "Manage Snapshots"
-msgstr "Behandle snapshots"
+msgid "Found no future pieces"
+msgstr ""
-msgid "System Settings"
-msgstr "Systeminstillinger"
+msgid "Frame Rate"
+msgstr "Framerate"
-msgid "Update Blueprints?"
-msgstr "Oppdater blueprints?"
+msgid "From"
+msgstr ""
-msgid "Update"
-msgstr "Oppdater"
+msgid "Full System Snapshot"
+msgstr "Fullt systemsnapshot"
-msgid ""
-"Are you sure you want to update the blueprints from the file "
-"\"{{fileName}}\"?"
+msgid "fullscreen"
msgstr ""
-"Er du sikker på at du vil oppdatere blueprints frå fila \"{{fileName}}\"?"
-msgid "Blueprints updated successfully."
-msgstr "Blueprints blei oppdatert."
-
-msgid "Replace Blueprints?"
-msgstr "Erstatte blueprints?"
+msgid "Gateway"
+msgstr ""
-msgid "Replace"
-msgstr "Erstatt"
+msgid "General"
+msgstr ""
-msgid ""
-"Are you sure you want to replace the blueprints with the file "
-"\"{{fileName}}\"?"
+msgid "Generated URL"
msgstr ""
-"Er du sikker på at du vil erstatte blueprints frå fila \"{{fileName}}\"?"
-msgid "Failed to update blueprints: {{errorMessage}}"
-msgstr "Oppdatering av blueprints feila: {{errorMessage}}"
+msgid "Generating restart token"
+msgstr ""
-msgid "Assigned Show Styles:"
-msgstr "Tilordna showstyles:"
+msgid "Generic Properties"
+msgstr "Generelle eigenskapar"
-msgid "This Blueprint is not being used by any Show Style"
-msgstr "Dette blueprintet er ikkje i bruk av nokon showstyles"
+msgid "Generic Script"
+msgstr "Generisk manus"
-msgid "Assigned Studios:"
-msgstr "Tilordna studio:"
+msgid "Getting Started"
+msgstr "Kom i gong"
-msgid "This Blueprint is not compatible with any Studio"
-msgstr "Dette blueprintet er ikkje kompatibel med noko studio"
+msgid "Global AdLib"
+msgstr "Globale adliber"
-msgid "Unassign"
-msgstr "Fjern tilordning"
+msgid "Global AdLibs"
+msgstr "Globale adliber"
-msgid "Assign"
-msgstr "Tilordne"
+msgid "Go to Live"
+msgstr ""
-msgid "Blueprint ID"
-msgstr "Blueprint-id"
+msgid "Go to On Air line"
+msgstr "Gå til OnAir-posisjon"
-msgid "Blueprint Name"
-msgstr "Blueprintnamn"
+msgid "Go to On Air Segment"
+msgstr ""
-msgid "No name set"
-msgstr "Namn ikkje definert"
+msgid "Good"
+msgstr "Bra"
-msgid "Blueprint Type"
-msgstr "Blueprinttype"
+msgid "Graphics"
+msgstr "Grafikk"
-msgid "Upload a new blueprint"
-msgstr "Last opp eit nytt blueprint"
+msgid "GUI"
+msgstr "Brukergrensesnitt"
-msgid "Last modified"
-msgstr "Sist endra"
+msgid "he default state of this Route Set"
+msgstr ""
-msgid "Blueprint Id"
-msgstr "Blueprint-id"
+msgid "Heading"
+msgstr ""
-msgid "Blueprint Version"
-msgstr "Blueprintversjon"
+msgid "Height"
+msgstr "Høgde"
-msgid "Disable version check"
-msgstr "Deaktiver versjonsjekk"
+msgid "Help & Support"
+msgstr "Hjelp og brukarstøtte"
-msgid "Upload Blueprints"
-msgstr "Last opp blueprints"
+msgid "Hide"
+msgstr ""
-msgid "OAuth credentials succesfully uploaded."
-msgstr "Opplasting av OAuth credentials var vellukka."
+msgid "Hide Countdown"
+msgstr "Skjul nedteljing"
-msgid "Failed to upload OAuth credentials: {{errorMessage}}"
-msgstr "Opplasting av OAuth credentials feila: {{errorMessage}}"
+msgid "Hide default AdLib Start/Execute options"
+msgstr ""
-msgid "OAuth credentials successfuly reset"
-msgstr "OAuth credentials nullstilt."
+msgid "Hide Diff"
+msgstr "Skjul skilnad"
-msgid "Failed to reset OAuth credentials: {{errorMessage}}"
-msgstr "Nullstilling av OAuth credentials feila: {{errorMessage}}"
+msgid "Hide Diff Label"
+msgstr "Skjul etikett for skilnad"
-msgid "Reset Authentication"
-msgstr "Passord for autentisering"
+msgid "Hide duplicated AdLibs"
+msgstr "Skjul dupliserte adliber"
-msgid "Application credentials"
-msgstr "Brukarnamn/passord (Application Credentials)"
+msgid "Hide End Time"
+msgstr "Skjul sendeslutt"
-msgid "Access token"
-msgstr "Tilgongskode (Access Token)"
+msgid "Hide Expected End timing when a break is next"
+msgstr "Gøym nedteljing til venta slutt når neste punkt er ei pause"
-msgid "Click on the link below and accept the permissions request."
-msgstr "Klikk på lenka under og godta permissions-førespurnaden"
+msgid "Hide for dynamically inserted parts"
+msgstr "Skjul for dynamisk innsatte delar"
-msgid "Waiting for gateway to generate URL..."
-msgstr "Ventar på at gateway genererar URL..."
+msgid "Hide Label"
+msgstr "Skjul etikett"
-msgid "Only Match Global AdLibs"
-msgstr "Vis kun globale adliber"
+msgid "Hide over/under timer"
+msgstr ""
-msgid "Name"
-msgstr "Namn"
+msgid "Hide Panel from view"
+msgstr "Ikkje vis dette panelet"
-msgid "Display Style"
-msgstr "Stil for vising"
+msgid "Hide Planned End Label"
+msgstr "Skjul etikett for planlagt slutt"
-msgid "Show thumbnails next to list items"
-msgstr "Vis miniatyrbilete ved sida av listeelement"
+msgid "Hide Planned Start"
+msgstr "Skjul planlagt start"
-msgid "Button width scale factor"
-msgstr "Breiddeskala for knapp"
+msgid "Hide Rundown Divider"
+msgstr "Skjul køyreplanskilje"
-msgid "Button height scale factor"
-msgstr "Høgdeskala for knapp"
+msgid "Hide rundown divider between rundowns in a playlist"
+msgstr "Skjul skilje mellom køyreplanar i ei speleliste"
-msgid "Only Display AdLibs from Current Segment"
-msgstr "Vis berre adliber frå gjeldande tittel"
+msgid "Hide scrollbar"
+msgstr ""
-msgid "Include Global AdLibs"
-msgstr "Inkluder globale adliber"
+msgid "Hold"
+msgstr "Hold"
-msgid "Filter Disabled"
-msgstr "Filter deaktivert"
+msgid "Hostname or IP address of the Atem"
+msgstr ""
-msgid "Include Clear Source Layer in Ad-Libs"
-msgstr "Ta med \"Tøm kjeldelag\" i adliber"
+msgid "Hotkey"
+msgstr "Hurtigtast"
-msgid "Source Layer Types"
-msgstr "Kjeldelagstypar"
+msgid "How did the show go?"
+msgstr ""
-msgid "Filter disabled"
-msgstr "Filter deaktivert"
+msgid ""
+"How many of the transactions to monitor. Set to -1 to log nothing (max "
+"performance), 0.5 to log 50% of the transactions, 1 to log all transactions"
+msgstr ""
+"Tal på transaksjonar som overvakast. Set verdien til -1 for å ikkje logge "
+"noko (maks yting), til 0.5 for å logge halvparten av transaksjonane eller "
+"til 1 for å logge alle transaksjonane"
-msgid "Label contains"
-msgstr "Etikett inneheld"
+msgid ""
+"How much preparation time to add to global pieces on the timeline before "
+"they are played"
+msgstr ""
-msgid "Tags must contain"
-msgstr "Tagger må innehalde"
+msgid "HTML that will be shown in the Support Panel"
+msgstr "HTML-kode som vert vist i supportpanelet"
-msgid "Hide Panel from view"
-msgstr "Ikkje vis dette panelet"
+msgid "Human-readable name of the layer"
+msgstr "Lesarvenleg lagnamn"
-msgid "Show panel as a timeline"
-msgstr "Vis panel som ei tidslinje"
+msgid "Icon"
+msgstr "Ikon"
-msgid "Enable search toolbar"
-msgstr "Aktiver søkeverktøy"
+msgid "Icon color"
+msgstr "Ikonfarge"
-msgid "Overflow horizontally"
-msgstr "Horisontal overflyt"
+msgid "Id"
+msgstr "Id"
-msgid "Display Take buttons"
-msgstr "Vis Take-knapp"
+msgid "ID"
+msgstr ""
-msgid "Queue all adlibs"
-msgstr "Cue alle adliber"
+msgid ""
+"ID of the device (corresponds to the device ID in the peripheralDevice "
+"settings)"
+msgstr "Eining-id (korresponderer med enhets-id under enhetsinnstillinger)"
-msgid "Toggle AdLibs on single mouse click"
-msgstr "Veksle mellom adliber med enkelt museklikk"
+msgid "ID of the timeline-layer to map to some output"
+msgstr "Lag-id for tidslinjelaget som skal mappast til ein utgang"
-msgid "Current part can contain next pieces"
+msgid "Idempotency-Key is already used"
msgstr ""
-msgid "Indicate only one next piece per source layer"
+msgid "Idempotency-Key is missing"
msgstr ""
-msgid "Hide duplicated AdLibs"
-msgstr "Skjul dupliserte adliber"
+msgid "If set, only one Route Set will be active per exclusivity group"
+msgstr ""
+"Berre ei omkoplingsgruppe vere aktiv per eksklusivitetsgruppe når dette er "
+"kryssa av for"
msgid ""
-"Picks the first instance of an adLib per rundown, identified by uniqueness Id"
+"If set, Package Manager assumes that the source doesn't support HEAD "
+"requests and will use GET instead. If false, HEAD requests will be sent to "
+"check availability."
msgstr ""
-"Velger den første førekomsten av ein adlib i kvar køyreplan, identifisert av "
-"unik id"
-
-msgid "URL"
-msgstr "Adresse (url)"
-msgid "Display Rank"
-msgstr "Rangering for visning"
+msgid "Ignore and apply"
+msgstr ""
-msgid "Role"
-msgstr "Rolle"
+msgid "Ignore QuickLoop"
+msgstr ""
-msgid "Adlib Rank"
-msgstr "Adlib-rang"
+msgid "Ignoring take as playing part has changed since TAKE was requested."
+msgstr ""
-msgid "Place label below panel"
-msgstr "Plasser etikett under panel"
+msgid "Ignoring TAKES that are too quick after eachother ({{duration}} ms)"
+msgstr ""
-msgid "Disabled"
-msgstr "Deaktivert"
+msgid "Import"
+msgstr "Import"
-msgid "Show segment name"
-msgstr "Vis tittelen sitt namn"
+msgid "Import error: {{errorMessage}}"
+msgstr ""
-msgid "Show part title"
-msgstr "Vis delen sin tittel"
+msgid "Import file?"
+msgstr ""
-msgid "Hide for dynamically inserted parts"
-msgstr "Skjul for dynamisk innsatte delar"
+msgid "Importing an AdLib to the Bucket"
+msgstr ""
-msgid "Planned Start Text"
-msgstr "Tekst for planlagt start"
+msgid "In"
+msgstr "Inn"
-msgid "Text to show above show start time"
-msgstr "Tekst som blir vist over klokkeslett for sendestart"
+msgid "IN"
+msgstr ""
-msgid "Hide Diff"
-msgstr "Skjul skilnad"
+msgid "in {{days}} days, {{hours}} h {{minutes}} min {{seconds}} s"
+msgstr "om {{days}} dagar, {{hours}} h {{minutes}} min {{seconds}} s"
-msgid "Hide Planned Start"
-msgstr "Skjul planlagt start"
+msgid "in {{hours}} h {{minutes}} min {{seconds}} s"
+msgstr "om {{hours}} t {{minutes}} min {{seconds}} s"
-msgid "Planned End text"
-msgstr "Tekst for planlagt slutt"
+msgid "in {{minutes}} min {{seconds}} s"
+msgstr "om {{minutes}} min {{seconds}} s"
-msgid "Text to show above show end time"
-msgstr "Tekst som blir vist over klokkeslett for sendeslutt"
+msgid "in {{seconds}} s"
+msgstr "om {{seconds}} s"
-msgid "Hide Planned End Label"
-msgstr "Skjul etikett for planlagt slutt"
+msgid "In rehearsal"
+msgstr ""
-msgid "Hide Diff Label"
-msgstr "Skjul etikett for skilnad"
+msgid "Include Clear Source Layer in Ad-Libs"
+msgstr "Ta med \"Tøm kjeldelag\" i adliber"
-msgid "Hide Countdown"
-msgstr "Skjul nedteljing"
+msgid "Include Global AdLibs"
+msgstr "Inkluder globale adliber"
-msgid "Hide End Time"
-msgstr "Skjul sendeslutt"
+msgid "Indicate only one next piece per source layer"
+msgstr ""
-msgid "Hide Label"
-msgstr "Skjul etikett"
+msgid "Ingest Devices"
+msgstr ""
-msgid "Script Source Layers"
+msgid "Ingest devices are needed to create rundowns"
msgstr ""
-msgid "Source layers containing script"
+msgid "Ingest from Snapshot"
msgstr ""
-msgid "Require Piece on Source Layer"
+msgid "Ingest Rundown Status"
msgstr ""
-msgid "Text"
-msgstr "Tekst"
+msgid "Ingest Rundown Statuses"
+msgstr ""
-msgid "Show Rundown Name"
-msgstr "Vis køyreplannamn"
+msgid "Input Devices"
+msgstr ""
-msgid "Segment"
-msgstr "Tittel"
+msgid "Input devices allow you to trigger Sofie actions remotely"
+msgstr ""
-msgid "Part"
-msgstr "Del"
+msgid "Installation name"
+msgstr "Installasjonsnamn"
-msgid "Show Piece Icon Color"
+msgid "Internal Error generating RundownPlaylist"
msgstr ""
-msgid "Use color of primary piece as background of panel"
-msgstr ""
+msgid "Internal ID"
+msgstr "Intern-id"
-msgid "Box color"
-msgstr ""
+msgid "Invalid AdLib"
+msgstr "Ugyldig adlib"
-msgid "Also Require Source Layers"
+msgid "Invalid blueprint: \"{{blueprintId}}\""
msgstr ""
msgid ""
-"Specify additional layers where at least one layer must have an active piece"
+"Invalid config preset for blueprint: \"{{configPresetId}}\" "
+"({{blueprintId}})"
msgstr ""
-msgid "Require All Additional Source Layers"
+msgid "Invert joystick"
msgstr ""
-msgid "All additional source layers must have active pieces"
-msgstr ""
+msgid "Is a Guest Input"
+msgstr "Er ein gjesteinngang"
-msgid "X"
-msgstr "X"
+msgid "Is a Live Remote Input"
+msgstr "Er ein RM"
-msgid "Y"
-msgstr "Y"
+msgid "Is collapsed by default"
+msgstr "Er minimert som standard"
-msgid "Width"
-msgstr "Breidde"
+msgid "Is flattened"
+msgstr "Er slått saman"
-msgid "Height"
-msgstr "Høgde"
+msgid "Is hidden"
+msgstr "Er skjult"
-msgid "Scale"
-msgstr "Skala"
+msgid "Is Immutable"
+msgstr ""
-msgid "Custom Classes"
-msgstr "Tilpassa klasser"
+msgid "Is PGM Output"
+msgstr "Er programutgang"
-msgid "Device ID"
-msgstr "Eining-id"
+msgid "ISA URLs"
+msgstr "ISA-adresse (url)"
-msgid "Device Type"
-msgstr "Type eining"
+msgid "Job Status"
+msgstr ""
-msgid "Remove this item?"
-msgstr "Fjern dette elementet?"
+msgid "Just now"
+msgstr "No"
-msgid "Are you sure you want to remove {{type}} \"{{deviceId}}\"?"
-msgstr "Er du sikker på at du vil fjerne eininga {{type}} \"{{deviceId}}\"?"
+msgid "Key"
+msgstr "Key"
-msgid "Attached Subdevices"
-msgstr "Tilkopla undereiningar"
+msgid "Keyboard"
+msgstr ""
-msgid "Expected End text"
-msgstr "Tekst for venta slutt"
+msgid ""
+"Keyboard shortcuts and Stream Deck buttons will not work while filling out "
+"the form!"
+msgstr ""
-msgid "Text to show above countdown to end of show"
-msgstr "Tekst som blir vist over nedteljing til venta slutt"
+msgid "Kill (debug)"
+msgstr "Kill (debug)"
-msgid "Hide Expected End timing when a break is next"
-msgstr "Gøym nedteljing til venta slutt når neste punkt er ei pause"
+msgid "Label"
+msgstr "Etikett"
-msgid ""
-"While there are still breaks coming up in the show, hide the Expected End "
-"timers"
-msgstr ""
-"Gøym nedteljing til venta slutt medan det framleis er pauser att i sendinga"
+msgid "Label contains"
+msgstr "Etikett inneheld"
-msgid "Show next break timing"
-msgstr "Vis tid for neste pause"
+msgid "Last"
+msgstr "Førre"
-msgid "Whether to show countdown to next break"
-msgstr "Om nedteljing til neste pause skal visast"
+msgid "Last {{layerName}}"
+msgstr "Siste {{layerName}}"
+
+msgid "Last modified"
+msgstr "Sist endra"
msgid "Last rundown is not break"
msgstr "Siste køyreplan er inga pause"
-msgid "Don't treat the end of the last rundown in a playlist as a break"
+msgid "Last seen"
+msgstr "Sist sett"
+
+msgid "Last Seen"
msgstr ""
-"Ikkje behandle slutten av den siste køyreplanen i ei speleliste som ei pause"
-msgid "Next Break text"
-msgstr "Tekst for neste pause"
+msgid "Last update"
+msgstr "Nyeste oppdatering"
-msgid "Text to show above countdown to next break"
-msgstr "Tekst som blir vist over nedteljing til neste pause"
+msgid "Last updated"
+msgstr "Sist oppdatert"
-msgid "Expose as user selectable layout"
-msgstr "Gjer tilgjengeleg som brukarvalgt layout"
+msgid "Layer does not allow sticky pieces!"
+msgstr ""
-msgid "Shelf Layout"
-msgstr "Layouter for skuffen"
+msgid "Layer ID"
+msgstr "Lag-id"
-msgid "Mini Shelf Layout"
-msgstr "Layouter for miniskuff"
+msgid "Layer Mappings"
+msgstr "Lagmapping"
-msgid "Rundown Header Layout"
-msgstr "Layout for køyreplanen sin topptekst"
+msgid "Layer Name"
+msgstr "Lagnamn"
-msgid "Live line countdown requires Source Layer"
-msgstr ""
+msgid "Leave Unsynced"
+msgstr "Behald ikkje-synkronisert køyreplan"
-msgid ""
-"One of these source layers must have an active piece for the live line "
-"countdown to be show"
-msgstr ""
+msgid "Less than a minute ago"
+msgstr "Under eitt minutt sidan"
-msgid "Hide Rundown Divider"
-msgstr "Skjul køyreplanskilje"
+msgid "Less than five minutes ago"
+msgstr "Under fem minutt sidan"
-msgid "Hide rundown divider between rundowns in a playlist"
-msgstr "Skjul skilje mellom køyreplanar i ei speleliste"
+msgid "Lighting"
+msgstr ""
-msgid "Show Breaks as Segments"
-msgstr "Vis pauser som titlar"
+msgid "Limit"
+msgstr "Grense"
-msgid "Segment countdown requires source layer"
-msgstr "Nedteljing for tittel krev kjeldelag"
+msgid "Live line countdown requires Source Layer"
+msgstr ""
+
+msgid "Live Speak"
+msgstr "STK"
-msgid ""
-"One of these source layers must have a piece for the countdown to segment on-"
-"air to be show"
+msgid "Loading"
msgstr ""
-"Eit av desse kjeldelaga må ha eit element for at nedteljinga til tittelen er "
-"OnAir visas"
-
-msgid "Fixed duration in Segment header"
-msgstr "Låst lengde i tittelheader"
-msgid ""
-"The segment duration in the segment header always displays the planned "
-"duration instead of acting as a counter"
+msgid "Loading..."
msgstr ""
-"Tittelen si lengde i tittelheaderen vil alltid vise den planlagde lengda i "
-"staden for å telje ned"
-msgid "Select visible Source Layers"
-msgstr "Vel synlege kjeldelag"
+msgid "Local"
+msgstr "Lokal"
-msgid "Select visible Output Groups"
-msgstr "Vel synleg gruppe for utgang"
+msgid "Local Time"
+msgstr "Lokal tid"
-msgid "Display piece duration for source layers"
+msgid "Logging level"
+msgstr "Loggenivå"
+
+msgid "Logo"
msgstr ""
-msgid "Piece on selected source layers will have a duration label shown"
+msgid "Lookahead Maximum Search Distance (Undefined = {{limit}})"
msgstr ""
-msgid "Expose layout as a standalone page"
-msgstr "Gjer layout tilgjengeleg som ei sjølvstendig side"
+msgid "Lookahead Mode"
+msgstr "Lookahead-modus"
-msgid "Open shelf by default"
-msgstr "Åpne skuff som standard"
+msgid "Lookahead Target Objects (Undefined = 1)"
+msgstr ""
-msgid "Default shelf height"
-msgstr "Standard høyde for skuff"
+msgid "Loop End"
+msgstr "Slutt for loop"
-msgid "Show Buckets"
-msgstr "Vis bøtter"
+msgid "Loop Start"
+msgstr "Start for loop"
-msgid "Show Inspector"
+msgid "Loops to Start"
msgstr ""
-msgid "Disable Context Menu"
-msgstr "Skruv av kontekstmeny"
-
-msgid "This action has an invalid combination of filters"
-msgstr "Denne handlinga har ein ugydlig kombinasjon av filtre"
+msgid "Lower Third"
+msgstr "Super"
-msgid "Use Trigger Mode"
-msgstr "Type utløysar"
+msgid "Manage Snapshots"
+msgstr "Behandle snapshots"
-msgid "Trigger Mode"
+msgid "Mapping cannot be reset as it has no default values"
msgstr ""
-msgid "Force"
-msgstr "Tving"
+msgid "Mapping Type"
+msgstr ""
-msgid "Rehearsal"
-msgstr "Testmodus"
+msgid "Mappings"
+msgstr "Lagmapping"
-msgid "Mode: {{triggerMode}}"
+msgid "Margin (%)"
msgstr ""
-msgid "Undo"
-msgstr "Angre"
-
-msgid "Segments: {{delta}}"
-msgstr "Segment: {{delta}}"
+msgid "Maximum register limit"
+msgstr ""
-msgid "Parts: {{delta}}"
-msgstr "Delar: {{delta}}"
+msgid "Media"
+msgstr "Media"
-msgid "Open"
-msgstr "Opne"
+msgid "Media Preview URL"
+msgstr "Førehandsvisningsadresse (url)"
-msgid "Toggle"
-msgstr "Veklse"
+msgid "Media Status"
+msgstr ""
-msgid "On"
-msgstr "På"
+msgid "Media Type"
+msgstr ""
-msgid "Forward: {{forward}}"
+msgid "Memory troubleshooting"
msgstr ""
-msgid "Activate Rundown"
-msgstr "Aktiver køyreplan"
+msgid "Menu"
+msgstr ""
-msgid "Ad-Lib"
-msgstr "Adlib"
+msgid "Message"
+msgstr "Melding"
-msgid "Deactivate Rundown"
-msgstr "Deaktiver køyreplan"
+msgid "Message Queue"
+msgstr "Kø for meldingar"
-msgid "Disable next Piece"
-msgstr "Skip neste element"
+msgid "Message shown to users in the Evaluations form"
+msgstr ""
-msgid "Move Next"
-msgstr "Skip neste"
+msgid "Messages"
+msgstr "Meldingar"
-msgid "Reload NRCS Data"
-msgstr "Last inn MOS-data på nytt"
+msgid "Method"
+msgstr "Metode"
-msgid "Resync with NRCS"
-msgstr "Synkroniser med ENPS"
+msgid "Method ${method}"
+msgstr ""
-msgid "Shelf"
-msgstr "Skuff"
+msgid "MIDI Pedal"
+msgstr ""
-msgid "Rewind Segments to start"
-msgstr "Sett alle segment attende til start"
+msgid "Migrate database"
+msgstr "Migrer database"
-msgid "Go to On Air line"
-msgstr "Gå til OnAir-posisjon"
+msgid "Migrations"
+msgstr "Migrering"
-msgid "Show entire On Air Segment"
-msgstr "Vis heile tittelen som er OnAir"
+msgid "Mini Shelf Layout"
+msgstr "Layouter for miniskuff"
-msgid "Queue AdLib from Minishelf"
+msgid "Mini Shelf Layouts"
msgstr ""
-msgid "Force (deactivate others)"
-msgstr "Tving (deaktiver andre)"
-
-msgid "Move Segments"
-msgstr "Skip segment"
+msgid "Minimum register limit"
+msgstr ""
-msgid "By Segments"
+msgid "Minimum Take Span"
msgstr ""
-msgid "Move Parts"
-msgstr "Skip del"
+msgid "Minor Warning"
+msgstr "Mindre åtvaring (avvik)"
-msgid "By Parts"
+msgid "Mirror horizontally"
msgstr ""
-msgid "State"
-msgstr "Tilstand"
-
-msgid "Forward"
+msgid "Mirror vertically"
msgstr ""
-msgid "Action"
-msgstr "Handling"
+msgid "Mock Piece Content Status"
+msgstr ""
-msgid "Ad-Lib Action"
-msgstr "Adlib-handling"
+msgid "Mode: {{triggerMode}}"
+msgstr ""
-msgid "Clear Source Layer"
-msgstr "Tøm kjeldelag"
+msgid "Modify Shift register"
+msgstr ""
-msgid "Sticky Piece"
-msgstr "Element er sticky"
+msgid "Modifying Bucket"
+msgstr ""
-msgid "Global AdLibs"
-msgstr "Globale adliber"
+msgid "Modifying Bucket AdLib"
+msgstr ""
-msgid "Label"
-msgstr "Etikett"
+msgid "Monitor blocked thread"
+msgstr ""
-msgid "Limit"
-msgstr "Grense"
+msgid "More documentation available at:"
+msgstr "Meir dokumentasjon er tilgjengeleg på:"
-msgid "Output Layer"
-msgstr "Utgangslag"
+msgid "More than 10 minutes ago"
+msgstr "Over 10 minutt sidan"
-msgid "Pick"
-msgstr "Plukk"
+msgid "More than 2 hours ago"
+msgstr "Over 2 timer sidan"
-msgid "Pick last"
-msgstr "Plukk siste"
+msgid "More than 30 minutes ago"
+msgstr "Over 30 minutt sidan"
-msgid "Source Layer"
-msgstr "Kjeldelag"
+msgid "More than 5 hours ago"
+msgstr "Over 5 timar sidan"
-msgid "Source Layer Type"
-msgstr "Kjeldelagstypar"
+msgid "More than a day ago"
+msgstr "Over ein dag sidan"
-msgid "Tag"
-msgstr "Tag"
+msgid "Mouse"
+msgstr ""
-msgid "Not Global"
-msgstr "Ikkje globale"
+msgid "Move Next"
+msgstr "Skip neste"
-msgid "Only Global"
-msgstr "Berre globale"
+msgid "Move Next backwards"
+msgstr "Unskip neste"
-msgid "OnAir"
-msgstr "OnAir"
+msgid "Move Next forwards"
+msgstr "Skip neste"
-msgid "Now active rundown"
-msgstr "Aktiv køyreplan nett no"
+msgid "Move Next to the following segment"
+msgstr "Skip til neste segment"
-msgid "View"
-msgstr "Visning"
+msgid "Move Next to the previous segment"
+msgstr "Unskip neste segment"
-msgid ""
-"Executes within the currently open Rundown, requires a Client-side trigger."
-msgstr ""
-"Blir utførte innanfor den valde køyreplanen, men treng ein utløysar frå "
-"klienten."
+msgid "Move Parts"
+msgstr "Skip del"
-msgid "Select Action"
-msgstr "Vel handling"
+msgid "Move Segments"
+msgstr "Skip segment"
-msgid ""
-"No Ad-Lib matches in the current state of Rundown: "
-"\"{{rundownPlaylistName}}\""
+msgid "Moving Next"
msgstr ""
-"Ingen treff på adliber i noverande tilstand for køyeplanen: "
-"\"{{rundownPlaylistName}}\""
-msgid "No matching Rundowns available to be used for preview"
-msgstr "Ingen passande køyreplanar tilgjengelege for førehandvisning"
+msgid "Multi-gateway-mode delay time"
+msgstr "Delaytid for multigateway-modus"
msgid "Multilingual description, editing will overwrite"
msgstr "Endring vil overskrive fleirspråkleg skildring"
-msgid "Optional description of the action"
-msgstr "Valfri skildring av handlinga"
-
-msgid "Triggered Actions uploaded successfully."
-msgstr "Opplasting av handlingsutløysarar var vellukka."
-
-msgid "Triggered Actions failed to upload: {{errorMessage}}"
-msgstr "Opplasting av handlingsutløysarar feila: {{errorMessage}}"
+msgid "My name is {{name}}"
+msgstr "Mitt namn er {{name}}"
-msgid "Append or Replace"
-msgstr "Legg til eller erstatt"
+msgid "Name"
+msgstr "Namn"
-msgid ""
-"Do you want to append these to existing Action Triggers, or do you want to "
-"replace them?"
+msgid "Network address"
msgstr ""
-"Vil du legge desse til dei noverande handlingsutløysarane, eller vil du "
-"erstatta dei?"
-
-msgid "Append"
-msgstr "Legg til"
-msgid "Action Triggers"
-msgstr "Handlingsutløysarar"
-
-msgid "Find Trigger..."
-msgstr "Finn utløysar..."
-
-msgid "No matching Action Trigger."
-msgstr "Fekk ikkje treff blant handlingsutløysar."
-
-msgid "No Action Triggers set up."
-msgstr "Ingen handlingsutløysarar er satt opp."
-
-msgid "System-wide"
-msgstr "Systemvid"
+msgid "Network Id"
+msgstr "Nettverk-id"
-msgid "Upload stored Action Triggers"
-msgstr "Last opp lagra handlingsutløysarar"
+msgid "New Bucket"
+msgstr "Ny bøtte"
-msgid "Download Action Triggers"
-msgstr "Last ned handlingsutløysarar"
+msgid "New Filter"
+msgstr "Nytt filter"
-msgid "On release"
-msgstr "På slipp (\"Key up\")"
+msgid "New Layer"
+msgstr "Nytt lag"
-msgid "Empty"
-msgstr "Tom"
+msgid "New Layout"
+msgstr "Ny layout"
-msgid "Hotkey"
-msgstr "Hurtigtast"
+msgid "New Output"
+msgstr "Ny utgang"
-msgid "Trigger Type"
-msgstr "Type utløysar"
+msgid "New Source"
+msgstr "Ny kjelde"
-msgid "Failed to update config: {{errorMessage}}"
-msgstr "Oppdatering av konfigurasjon feila: {{errorMessage}}"
+msgid "Next"
+msgstr "Neste"
-msgid "Export"
-msgstr "Eksporter"
+msgid "Next Break text"
+msgstr "Tekst for neste pause"
-msgid "Import"
-msgstr "Import"
+msgid "Next Loop at"
+msgstr "Neste loop starter"
-msgid "true"
-msgstr "true"
+msgid "Next Part"
+msgstr "Neste del"
-msgid "false"
-msgstr "false"
+msgid "Next scheduled show"
+msgstr "Neste planlagde sending"
-msgid "{{count}} rows"
-msgstr "{{count}} rader"
+msgid "Next Segment"
+msgstr "Neste tittel"
-msgid "Value"
-msgstr "Verdi"
+msgid "Nintendo Joy-Con"
+msgstr ""
-msgid "Create"
-msgstr "Opprett"
+msgid "No"
+msgstr "Nei"
-msgid "Add config item"
-msgstr "Legg til konfigurasjonselement"
+msgid "No Action Triggers set up."
+msgstr "Ingen handlingsutløysarar er satt opp."
-msgid "Add"
-msgstr "Legg til"
+msgid "No actions available"
+msgstr "Ingen køyreplanval tilgjengelege i påsynmodus"
-msgid "Item"
-msgstr "Element"
+msgid ""
+"No Ad-Lib matches in the current state of Rundown: "
+"\"{{rundownPlaylistName}}\""
+msgstr ""
+"Ingen treff på adliber i noverande tilstand for køyeplanen: "
+"\"{{rundownPlaylistName}}\""
-msgid "Delete this item?"
-msgstr "Slett dette elementet?"
+msgid "No camera-related source layers found"
+msgstr ""
-msgid "Are you sure you want to delete this config item \"{{configId}}\"?"
+msgid "No changes"
msgstr ""
-"Er du sikker på at du vil slette dette konfigurasjonselementet "
-"\"{{configId}}\"?"
-msgid "Blueprint Configuration"
-msgstr "Blueprintkonfigurasjon"
+msgid "No gateways are configured"
+msgstr ""
-msgid "More settings specific to this studio can be found here"
-msgstr "Meir spesifikke innstillingar for dette studioet finn du her"
+msgid "No matching Action Trigger."
+msgstr "Fekk ikkje treff blant handlingsutløysar."
-msgid "There was an error: {{error}}"
-msgstr "Det skjedde ein feil: {{error}}"
+msgid "No matching Rundowns available to be used for preview"
+msgstr "Ingen passande køyreplanar tilgjengelege for førehandvisning"
-msgid "Package Manager status"
-msgstr "Status for pakkebehandlar"
+msgid "No Media matches this filter"
+msgstr ""
-msgid "Reload statuses"
-msgstr "Last inn status om att"
+msgid "No Media required by this system"
+msgstr ""
-msgid "Updated"
-msgstr "Oppdatert"
+msgid "No Media required for this Rundown"
+msgstr ""
-msgid "Package Manager"
-msgstr "Pakkebehandlar"
+msgid "No migrations to apply"
+msgstr ""
-msgid "Expectation Manager"
+msgid "No name set"
+msgstr "Namn ikkje definert"
+
+msgid "No Next point found, please set a part as Next before doing a TAKE."
msgstr ""
-msgid "Statistics"
-msgstr "Statistikk"
+msgid "No notifications"
+msgstr ""
-msgid "Times"
-msgstr "Tider"
+msgid "No output channels set"
+msgstr "Ingen utgangskanal definert"
-msgid "Connected Workers"
-msgstr "Tilkopla arbeidarar"
+msgid "No output layers available"
+msgstr ""
-msgid "Work-in-progress"
-msgstr "Pågåande jobbar"
+msgid "No PGM output"
+msgstr "Ingen programutgang"
-msgid "WorkForce"
-msgstr "Arbeidarstyrke"
+msgid "No problems"
+msgstr "Ingen problem"
-msgid "Kill (debug)"
-msgstr "Kill (debug)"
+msgid "No schema has been provided for this mapping"
+msgstr ""
-msgid "Connected Expectation Managers"
+msgid "No source layers available"
msgstr ""
-msgid "Connected App Containers"
-msgstr "Tilkopla app-kontainere"
+msgid "No source layers set"
+msgstr "Ingen kjeldelag definert"
msgid "No status loaded"
msgstr "Ingen status lasta"
-msgid "Peripheral Device is outdated"
-msgstr "Tilkopla eining er utdatert"
+msgid "None"
+msgstr "Ingen"
-msgid ""
-"The config UI is now driven by manifests fed by the device. This device "
-"needs updating to provide the configManifest to be configurable"
+msgid "Normal scrolling"
msgstr ""
-"Brukergrensesnitt for konfigurasjon drivast no av manifest mata frå "
-"einingane. Denne einga må oppdaterast for å gjere configManifest "
-"konfigurerbart"
-msgid "Are you sure you want to restart this device?"
-msgstr "Er du sikker på at du vil starte denne eininga på nytt?"
+msgid "Not Active"
+msgstr "Inaktiv"
-msgid "Restart this Device?"
-msgstr "Start denne eininga på nytt?"
+msgid "Not Connected"
+msgstr "Ikkje tilkopla"
-msgid ""
-"Check the console for troubleshooting data from device \"{{deviceName}}\"!"
-msgstr "Sjekk konsollen for feilsøkingsdata frå eninga \"{{deviceName}}\"!"
+msgid "Not defined"
+msgstr "Ikkje definert"
-msgid ""
-"There was an error when troubleshooting the device: \"{{deviceName}}\": "
-"{{errorMessage}}"
+msgid "Not Global"
+msgstr "Ikkje globale"
+
+msgid "Not in rehearsal"
msgstr ""
-"Det hende ein feil under feilsøking av eininga \"{{deviceName}}\": "
-"{{errorMessage}}"
-msgid "Generic Properties"
-msgstr "Generelle eigenskapar"
+msgid "Not queueable"
+msgstr "Kan ikkje setjast i kø"
-msgid "Device Name"
-msgstr "Einingsnamn"
+msgid "Not set"
+msgstr "Ikkje angjeve"
-msgid "Restart Device"
-msgstr "Start eining på nytt"
+msgid "Note: Core needs to be restarted to apply these settings"
+msgstr "Merknad: Core må startast om att for å ta i bruk desse innstillingane"
-msgid "Troubleshoot"
-msgstr "Feilsøk"
+msgid "Notes"
+msgstr ""
-msgid "Reset Database Version"
-msgstr "Nullstill databaseversjon"
+msgid "Nothing to cleanup!"
+msgstr ""
-msgid ""
-"Are you sure you want to reset the database version?\n"
-"Only do this if you plan on running the migration right after."
+msgid "Nothing was found on layer!"
msgstr ""
-"Er du sikker på at du vil nullstille databaseversjonen?\n"
-"Berre gjer dette om du har tenkt å køyre ei migrering med ein gong."
-msgid "Version for {{name}}: From {{fromVersion}} to {{toVersion}}"
-msgstr "Versjon for {{name}}: Frå {{fromVersion}} til {{toVersion}}"
+msgid "Now Active Rundown"
+msgstr ""
-msgid "Re-check"
-msgstr "Sjekk om att"
+msgid "NRCS Name"
+msgstr ""
-msgid "Reset Version to"
-msgstr "Nullstill versjon til"
+msgid "OAuth credentials successfully reset"
+msgstr ""
-msgid "Reset All Versions"
-msgstr "Nullstill alle versjonar"
+msgid "OAuth credentials successfully uploaded."
+msgstr ""
-msgid "Migrate database"
-msgstr "Migrer database"
+msgid "Off"
+msgstr "Av"
-msgid "All steps"
-msgstr "Alle steg"
+msgid "Off-line devices"
+msgstr "Fråkoplete einingar"
-msgid ""
-"The migration consists of several phases, you will get more options after "
-"you've this migration"
-msgstr ""
-"Migreringa har fleire fasar, du vil få fleire val etter at du har køyrd "
-"denne migreringa"
+msgid "OK"
+msgstr "OK"
-msgid "The migration can be completed automatically."
-msgstr "Migreringa kan gjerast ferdig automatisk."
+msgid "On"
+msgstr "På"
-msgid "Run automatic migration procedure"
-msgstr "Køyr automatisk migreringsprosedyre"
+msgid "On Air"
+msgstr "On Air"
-msgid ""
-"The migration procedure needs some help from you in order to complete, see "
-"below:"
-msgstr ""
-"Migreringsprosedyra treng litt hjelp frå deg for å gjere seg ferdig. Sjå "
-"under:"
+msgid "On Air At"
+msgstr "On Air klokka"
-msgid "Double-check Values"
-msgstr "Dobbeltsjekk verdiar"
+msgid "On Air In"
+msgstr "On Air om"
-msgid "Are you sure the values you have entered are correct?"
-msgstr "Er du sikker på at verdiane du har oppgitt er korrekte?"
+msgid "On Air Start Time"
+msgstr "Sendestart"
-msgid "Run Migration Procedure"
-msgstr "Køyr migreringsprosedyre"
+msgid "On release"
+msgstr "På slipp (\"Key up\")"
-msgid "Warnings During Migration"
-msgstr "Åtvaringar under migrering"
+msgid "OnAir"
+msgstr "OnAir"
msgid ""
-"Please check the database related to the warnings above. If neccessary, you "
-"can"
+"One of these source layers must have a piece for the countdown to segment "
+"on-air to be show"
msgstr ""
-"Ver vennleg og sjekk databasen tilknytta åtvaringane over. Om det er "
-"naudsynt kan du"
-
-msgid "Force Migration"
-msgstr "Tving migrering"
+"Eit av desse kjeldelaga må ha eit element for at nedteljinga til tittelen "
+"er OnAir visas"
msgid ""
-"Are you sure you want to force the migration? This will bypass the migration "
-"checks, so be sure to verify that the values in the settings are correct!"
+"One of these source layers must have an active piece for the live line "
+"countdown to be show"
msgstr ""
-"Er du sikker på at du vil tvinge migreringa? Dette gjer at du hoppar over "
-"migreringskontrollane, så ver sikker på at verdiane oppgitt i innstillingar "
-"er korrekte!"
-
-msgid "Force Migration (unsafe)"
-msgstr "Tving migrering (utrygt)"
-
-msgid "The migration was completed successfully!"
-msgstr "Migreringa var vellukka!"
-
-msgid "All is well, go get a"
-msgstr "Alt er greitt, gå og finn deg ein"
-
-msgid "New Layout"
-msgstr "Ny layout"
-
-msgid "Button"
-msgstr "Knapp"
-msgid "New Filter"
-msgstr "Nytt filter"
+msgid "Only custom trigger modes will be shown"
+msgstr ""
-msgid "Delete layout?"
-msgstr "Slett layout?"
+msgid "Only Display AdLibs from Current Segment"
+msgstr "Vis berre adliber frå gjeldande tittel"
-msgid "Are you sure you want to delete the shelf layout \"{{name}}\"?"
-msgstr "Er du sikker på at du vil slette layouten \"{{name}}\"?"
+msgid "Only Global"
+msgstr "Berre globale"
-msgid "Action Buttons"
-msgstr "Handlingsknappar"
+msgid "Only Match Global AdLibs"
+msgstr "Vis kun globale adliber"
-msgid "Toggled Label"
+msgid ""
+"Only one rundown can be active at the same time. Currently active rundowns: "
+"{{names}}"
msgstr ""
-msgid "Icon"
-msgstr "Ikon"
+msgid "Only Pieces present in rundown are sticky"
+msgstr "Kun element til stades i køyreplanen er sticky"
-msgid "Icon color"
-msgstr "Ikonfarge"
+msgid "Open"
+msgstr "Opne"
-msgid "Filters"
-msgstr "Filtre"
+msgid "Open Camera Screen"
+msgstr ""
-msgid "There are no filters set up yet"
-msgstr "Det er ikkje satt opp noko filter enno"
+msgid "Open Fullscreen"
+msgstr ""
-msgid "Default Layout"
-msgstr "Standardlayout"
+msgid "Open Presenter Screen"
+msgstr ""
-msgid "Add {{filtersTitle}}"
-msgstr "Legg til {{filtersTitle}}"
+msgid "Open Prompter"
+msgstr ""
-msgid "Add filter"
-msgstr "Legg til filter"
+msgid "Open shelf by default"
+msgstr "Åpne skuff som standard"
-msgid "Add button"
-msgstr "Legg til knapp"
+msgid "Operating Mode"
+msgstr "Styringsmodus"
-msgid "Upload Layout?"
-msgstr "Last opp layout?"
+msgid "Operation"
+msgstr ""
-msgid "Upload"
-msgstr "Last opp"
+msgid "Optional description of the action"
+msgstr "Valfri skildring av handlinga"
msgid ""
-"Are you sure you want to upload the shelf layout from the file "
-"\"{{fileName}}\"?"
+"Optionally restrict AB channel display to specific output layers (e.g., "
+"only PGM). Leave empty to show for all output layers."
msgstr ""
-"Er du sikker på at du vil laste opp layout for skuff frå fila "
-"\"{{fileName}}\"?"
-msgid "Shelf layout uploaded successfully."
-msgstr "Opplasting av layout for skuff var vellukka."
+msgid "Order 66?"
+msgstr ""
-msgid "Failed to upload shelf layout: {{errorMessage}}"
-msgstr "Opplasting av layout feila: {{errorMessage}}"
+msgid "Original Layer"
+msgstr "Opprinneleg lag"
-msgid "Show Style Base Name"
-msgstr "Showstylenamn"
+msgid "Original Layer not found"
+msgstr ""
-msgid "Blueprint"
-msgstr "Blueprint"
+msgid "Other"
+msgstr ""
-msgid "Blueprint not set"
-msgstr "Blueprint ikkje valt"
+msgid "Out"
+msgstr "Ut"
-msgid "Compatible Studios:"
-msgstr "Kompatible studio:"
+msgid "OUT"
+msgstr ""
-msgid "This Show Style is not compatible with any Studio"
-msgstr "Denne showstylen er ikkje kompatibelt med noko studio"
+msgid "Output channels"
+msgstr "Utgangskanalar"
-msgid "Camera"
-msgstr "Kamera"
+msgid "Output Channels"
+msgstr "Utgangskanalar"
-msgid "Graphics"
-msgstr "Grafikk"
+msgid "Output channels are required for your studio to work"
+msgstr "Utgangskanalar er naudsynte for at studioet ditt skal fungere"
-msgid "Live Speak"
-msgstr "STK"
+msgid "Output Layer"
+msgstr "Utgangslag"
-msgid "Lower Third"
-msgstr "Super"
+msgid "Over"
+msgstr ""
-msgid "Studio Microphone"
-msgstr "Studiomikrofon"
+msgid "Over/Under"
+msgstr "Over/Under"
-msgid "Remote Source"
-msgstr "RM"
+msgid "Overflow horizontally"
+msgstr "Horisontal overflyt"
-msgid "Generic Script"
-msgstr "Generisk manus"
+msgid "Overlay Screen"
+msgstr ""
-msgid "Split Screen"
-msgstr "Splitt"
+msgid "Package Container ID"
+msgstr "Pakkekontainer-id"
-msgid "Clips"
-msgstr "Klipp"
+msgid "Package Containers"
+msgstr "Pakkekontainere"
-msgid "Metadata"
-msgstr "Metadata"
+msgid "Package Containers to use for previews"
+msgstr "Pakkekontainere som skal nyttast til førehandsvisingar"
-msgid "Camera Movement"
-msgstr "Kamerarørsle"
+msgid "Package Containers to use for thumbnails"
+msgstr "Pakkekontainere som skal nyttast til miniatyrbilete"
-msgid "Unknown Layer"
-msgstr "Ukjend lag"
+msgid "Package Manager"
+msgstr "Pakkebehandlar"
-msgid "Audio Mixing"
-msgstr "Lydmiksing"
+msgid "Package Manager is offline"
+msgstr ""
-msgid "Transition"
-msgstr "Effekt"
+msgid "Package Manager status"
+msgstr "Status for pakkebehandlar"
-msgid "Lights"
-msgstr "Lys"
+msgid "Package Manager: Restart Package Container"
+msgstr ""
-msgid "Local"
-msgstr "Lokal"
+msgid "Package Manager: Restart work"
+msgstr ""
-msgid "New Source"
-msgstr "Ny kjelde"
+msgid "Package Status"
+msgstr "Pakkestatus"
-msgid "Are you sure you want to delete source layer \"{{sourceLayerId}}\"?"
-msgstr "Er du sikker på at du vil slette kjeldelaget \"{{sourceLayerId}}\"?"
+msgid "Packages"
+msgstr "Pakker"
-msgid "Source Name"
-msgstr "Kjeldenamn"
+msgid "Parameters"
+msgstr "Parametrar"
-msgid "Source Abbreviation"
-msgstr "Kjeldeforkorting"
+msgid "Parent Config ID"
+msgstr ""
-msgid "Internal ID"
-msgstr "Intern-id"
+msgid "Parent device is missing"
+msgstr ""
-msgid "Source Type"
-msgstr "Kjeldetype"
+msgid "Parent Devices"
+msgstr ""
-msgid "Is a Live Remote Input"
-msgstr "Er ein RM"
+msgid "part"
+msgstr "punkt"
-msgid "Is a Guest Input"
-msgstr "Er ein gjesteinngang"
+msgid "Part"
+msgstr "Del"
-msgid "Is hidden"
-msgstr "Er skjult"
+msgid "Part Count Down"
+msgstr "Nedteljing for del"
-msgid "Pieces on this layer can be cleared"
-msgstr "Element på dette laget kan tømmas"
+msgid "Part Count Up"
+msgstr "Opptelling for del"
-msgid "Pieces on this layer are sticky"
-msgstr "Element på dette laget er sticky"
+msgid "Part duration is 0."
+msgstr ""
-msgid "Only Pieces present in rundown are sticky"
-msgstr "Kun element til stades i køyreplanen er sticky"
+msgid "Parts Duration"
+msgstr "Varigheit for del"
-msgid "Allow disabling of Pieces"
-msgstr "Tillat deaktivering av element"
+msgid "Parts: {{delta}}"
+msgstr "Delar: {{delta}}"
-msgid "AdLibs on this layer can be queued"
-msgstr "Adliber på dette laget kan cues"
+msgid "Password"
+msgstr "Passord"
-msgid "Exclusivity group"
-msgstr "Ekslusivitetgruppe"
+msgid "Password for authentication"
+msgstr "Passord for autentisering"
-msgid ""
-"Add some source layers (e.g. Graphics) for your data to appear in rundowns"
+msgid "Peripheral Device is outdated"
+msgstr "Tilkopla eining er utdatert"
+
+msgid "Peripheral Device not found!"
msgstr ""
-"Legg til kjeldelag (til dømes Grafikk) for å vise dine data i køyreplanar"
-msgid "No source layers set"
-msgstr "Ingen kjeldelag definert"
+msgid "Peripheral Devices"
+msgstr ""
-msgid "Delete this output?"
-msgstr "Slett denne utgangen?"
+msgid "Pick"
+msgstr "Plukk"
-msgid "Are you sure you want to delete source layer \"{{outputId}}\"?"
-msgstr "Er du sikker på at du vil slette kjeldelaget \"{{outputId}}\"?"
+msgid "Pick last"
+msgstr "Plukk siste"
-msgid "New Output"
-msgstr "Ny utgang"
+msgid ""
+"Picks the first instance of an adLib per rundown, identified by uniqueness "
+"Id"
+msgstr ""
+"Velger den første førekomsten av ein adlib i kvar køyreplan, identifisert "
+"av unik id"
-msgid "Channel Name"
-msgstr "Kanalnavn"
+msgid "Piece on selected source layers will have a duration label shown"
+msgstr ""
-msgid "Is PGM Output"
-msgstr "Er programutgang"
+msgid "Piece to take is already live!"
+msgstr ""
-msgid "Is collapsed by default"
-msgstr "Er minimert som standard"
+msgid "Piece to take is not directly playable!"
+msgstr ""
-msgid "Is flattened"
-msgstr "Er slått saman"
+msgid "Piece to take was not found!"
+msgstr ""
-msgid "Output channels are required for your studio to work"
-msgstr "Utgangskanalar er naudsynte for at studioet ditt skal fungere"
+msgid "Pieces on this layer are sticky"
+msgstr "Element på dette laget er sticky"
-msgid "Output channels"
-msgstr "Utgangskanalar"
+msgid "Pieces on this layer can be cleared"
+msgstr "Element på dette laget kan tømmas"
-msgid "No output channels set"
-msgstr "Ingen utgangskanal definert"
+msgid "Place label below panel"
+msgstr "Plasser etikett under panel"
-msgid "No PGM output"
-msgstr "Ingen programutgang"
+msgid "Plan. Dur"
+msgstr ""
-msgid "Key"
-msgstr "Key"
+msgid "Plan. End"
+msgstr ""
-#, fuzzy
-#| msgid "Host"
-msgid "Host Key"
-msgstr "Vert"
+msgid "Plan. Start"
+msgstr ""
-#, fuzzy
-#| msgid "Source Layer Type"
-msgid "Source Layer type"
-msgstr "Kjeldelagstypar"
+msgid "Planned Duration"
+msgstr "Planlagt varigheit"
-#, fuzzy
-#| msgid "Icon color"
-msgid "Key color"
-msgstr "Ikonfarge"
+msgid "Planned End"
+msgstr "Planlagt slutt"
-msgid "Custom Hotkey Labels"
-msgstr "Eigendefinerte etikettar for hurtigtastar"
+msgid "Planned End text"
+msgstr "Tekst for planlagt slutt"
-msgid "AHK"
-msgstr ""
+msgid "Planned Start"
+msgstr "Planlagt start"
+
+msgid "Planned Start Text"
+msgstr "Tekst for planlagt start"
-msgid "Remove this Variant?"
-msgstr "Fjern denne varianten?"
+msgid "Play-out"
+msgstr "Avspelning"
-msgid "Are you sure you want to remove the variant \"{{showStyleVariantId}}\"?"
+msgid "Playlist"
msgstr ""
-"Er du sikker på at du vil fjerne denne showstylevarianten "
-"\"{{showStyleVariantId}}\"?"
-msgid "Unnamed variant"
-msgstr "Variant utan namn"
+msgid "Playout Devices"
+msgstr ""
-msgid "Variant Name"
-msgstr "Variantnamn"
+msgid "Playout devices are needed to control your studio hardware"
+msgstr ""
-msgid "Variants"
-msgstr "Variantar"
+msgid "Playout devices which uses this package container"
+msgstr "Playout-einingar som nyttar denne pakkekontaineren"
-msgid "Restore from this Snapshot file?"
-msgstr "Tilbakestill frå denne snapshotfila?"
+msgid "Playout Gateway \"{{playoutDeviceName}}\" is now restarting."
+msgstr "Playout-gateway \"{{playoutDeviceName}}\" startar om att."
msgid ""
-"Are you sure you want to restore the system from the snapshot file "
-"\"{{fileName}}\"?"
+"Please check the database related to the warnings above. If neccessary, you "
+"can"
+msgstr ""
+"Ver vennleg og sjekk databasen tilknytta åtvaringane over. Om det er "
+"naudsynt kan du"
+
+msgid "Please explain the problems you experienced"
msgstr ""
-"Er du sikker på at du vil tilbakestille systemet frå denne snapshotfila "
-"\"{{fileName}}\"?"
-msgid "Successfully restored snapshot"
-msgstr "Tilbakestilling frå snapshot var vellukka"
+msgid "Please note: This action is irreversible!"
+msgstr "Merk: Denne handlinga kan du ikkje angre!"
-msgid "Snapshot restore failed: {{errorMessage}}"
-msgstr "Tilbakestilling frå snapshot feila: {{errorMessage}}"
+msgid "Pool name"
+msgstr ""
-msgid "Full System Snapshot"
-msgstr "Fullt systemsnapshot"
+msgid "Pool PlayerId"
+msgstr ""
-msgid ""
-"A Full System Snapshot contains all system settings (studios, showstyles, "
-"blueprints, devices, etc.)"
+msgid "Prepare Studio and Activate (Rehearsal)"
+msgstr "Førebu studio og aktiver testmodus"
+
+msgid "Preparing for broadcast"
msgstr ""
-"Eit fullt systemsnapshot inneheld alle systeminnstillingar (studio, "
-"showstyles, blueprints, einingar o.s.b.)"
-msgid "Take a Full System Snapshot"
-msgstr "Lagre eit fullt systemsnapshot"
+msgid "Preparing, please wait..."
+msgstr ""
-msgid "Studio Snapshot"
-msgstr "Studiosnapshot"
+msgid "Presenter Layout"
+msgstr ""
-msgid "A Studio Snapshot contains all system settings related to that studio"
+msgid "Presenter screen"
msgstr ""
-"Eit studiosnapshot inneheld alle systeminnstillingar knytt til eit studio"
-msgid "Take a Snapshot for studio \"{{studioName}}\" only"
-msgstr "Lagre eit studiosnapshot utelukkande for \"{{studioName}}\""
+msgid "Presenter Screen"
+msgstr ""
-msgid "Restore from Snapshot File"
-msgstr "Tilbakestill frå snapshotfil"
+msgid "Presenter View Layouts"
+msgstr ""
-msgid "Upload Snapshot"
-msgstr "Last opp snapshot"
+msgid "Preserve position of segments when unsynced relative to other segments"
+msgstr ""
-msgid "Restore from Stored Snapshots"
-msgstr "Tilbakestill frå lagra snapshots"
+msgid "Previous"
+msgstr ""
-msgid "Restore"
-msgstr "Tilbakestill"
+msgid "Previous work status reasons"
+msgstr "Tidlegare årsakar for jobbsatus"
-msgid "Show \"Remove snapshots\"-buttons"
-msgstr "Vis \"Fjern snapshots\"-knappar"
+msgid "Prioritizing Media Workflow"
+msgstr ""
-msgid "Remove this device?"
-msgstr "Fjern denne eininga?"
+msgid "Priority"
+msgstr "Prioritet"
-msgid "Are you sure you want to remove device \"{{deviceId}}\"?"
-msgstr "Er du sikker på at du vil fjerne eininga \"{{deviceId}}\"?"
+msgid "Problems"
+msgstr "Problem"
-msgid "Devices are needed to control your studio hardware"
-msgstr "Einingar er naudsynte for å kontrollere utstyr i studioet ditt"
+msgid "Profile name to be used by FileFlow when exporting the clips"
+msgstr "Profilnamn som blir nytta av FileFlow når klippa vert eksportert"
-msgid "Attached Devices"
-msgstr "Tilkopla eingingar"
+msgid "Prompter"
+msgstr "Prompter"
-msgid "No devices connected"
-msgstr "Ingen einingar tilkopla"
+msgid "Prompter Screen"
+msgstr ""
-msgid "Playout gateway not connected"
-msgstr "Playout-gateway ikkje tilkopla"
+msgid "Properties"
+msgstr ""
-msgid "Remove this mapping?"
-msgstr "Fjern denne mappinga?"
+msgid "Quantel FileFlow Profile name"
+msgstr "Quantel FileFlow profilnavn"
-msgid "Are you sure you want to remove mapping for layer \"{{mappingId}}\"?"
-msgstr "Er du sikker på at du fil fjerne mappinga for laget \"{{mappingId}}\"?"
+msgid "Quantel FileFlow URL"
+msgstr "Quantel GatewayFileFlow-adresse (url)"
-msgid "This layer is now rerouted by an active Route Set: {{routeSets}}"
-msgstr "Dette laget vert omkopla av ei aktiv omkoplingsgruppe: {{routeSets}}"
+msgid "Quantel gateway URL"
+msgstr "Quantel Gateway-adresse (url)"
-msgid "Layer ID"
-msgstr "Lag-id"
+msgid "Quantel transformer URL"
+msgstr "Quantel Transformer-adresse (url)"
-msgid "ID of the timeline-layer to map to some output"
-msgstr "Lag-id for tidslinjelaget som skal mappast til ein utgang"
+msgid "Quantel Zone ID"
+msgstr ""
-msgid "Layer Name"
-msgstr "Lagnamn"
+msgid "Queue AdLib from Minishelf"
+msgstr ""
-msgid "Human-readable name of the layer"
-msgstr "Lesarvenleg lagnamn"
+msgid "Queue all adlibs"
+msgstr "Cue alle adliber"
-msgid "The type of device to use for the output"
-msgstr "Einingtype som skal nyttast for utgangen"
+msgid "Queue segment"
+msgstr "Cue tittel: Startar når aktiv tittel er ferdig"
-msgid ""
-"ID of the device (corresponds to the device ID in the peripheralDevice "
-"settings)"
-msgstr "Eining-id (korresponderer med enhets-id under enhetsinnstillinger)"
+msgid "Queue this AdLib"
+msgstr "Cue denne adliben"
-msgid "Lookahead Mode"
-msgstr "Lookahead-modus"
+msgid "Queued Messages"
+msgstr "Meldingar i kø"
-msgid "Lookahead Target Objects (Default = 1)"
-msgstr "Lookahead målobjekter (standard = 1)"
+msgid "Queueing next Segment"
+msgstr ""
-msgid "Lookahead Maximum Search Distance (Default = {{limit}})"
-msgstr "Lookahead maksimum søkelengde (standard = {{limit}})"
+msgid "Quick Links"
+msgstr ""
-msgid "Layer Mappings"
-msgstr "Lagmapping"
+msgid "QuickLoop Fallback Part Duration"
+msgstr ""
-msgid "Add a playout device to the studio in order to edit the layer mappings"
+msgid "Range: Forward max"
msgstr ""
-"For å kunne redigere lagmappingar, må du leggje til ein playout-eining til "
-"studio"
-msgid "Remove this Exclusivity Group?"
-msgstr "Fjern frå denne eksklusivitetgruppa?"
+msgid "Range: Neutral max"
+msgstr ""
-msgid ""
-"Are you sure you want to remove exclusivity group \"{{eGroupName}}\"?\n"
-"Route Sets assigned to this group will be reset to no group."
+msgid "Range: Neutral min"
msgstr ""
-"Er du sikker på at du vil fjerne eksklusivitetsgruppa \"{{eGroupName}}\"?\n"
-"Omkoplingar satt til denne gruppa vil bli resatt til inga gruppe."
-msgid "Remove this Route from this Route Set?"
-msgstr "Fjern denne omkoplinga frå denne omkoplingsgruppa?"
+msgid "Range: Reverse min"
+msgstr ""
-msgid ""
-"Are you sure you want to remove the Route from \"{{sourceLayerId}}\" to "
-"\"{{newLayerId}}\"?"
+msgid "Rate limit exceeded"
msgstr ""
-"Er du sikker på at du vil fjerne omkoplinga frå \"{{sourceLayerId}}\" til "
-"\"{{newLayerId}}\"?"
-msgid "Remove this Route Set?"
-msgstr "Fjern denne omkoplingsgruppa?"
+msgid "Re-check"
+msgstr "Sjekk om att"
-msgid "Are you sure you want to remove the Route Set \"{{routeId}}\"?"
-msgstr "Er du sikker på at du vil fjerne omkoplingsgruppa \"{{routeId}}\"?"
+msgid "Re-sync"
+msgstr "Synkroniser med MOS"
-msgid "Routes"
-msgstr "Omkoplingar"
+msgid "Re-Sync"
+msgstr "Synkroniser"
-msgid "There are no routes set up yet"
-msgstr "Det er ikkje satt opp omkoplingar enno"
+msgid "Re-sync Rundown"
+msgstr "Synkroniser køyreplanen med ENPS på nytt"
-msgid "Original Layer"
-msgstr "Opprinneleg lag"
+msgid "Re-sync rundown data with {{nrcsName}}"
+msgstr "Ikkje synkronisert med MOS/{{nrcsName}}"
-msgid "None"
-msgstr "Ingen"
+msgid "Re-Sync rundown?"
+msgstr "Synkroniser køyreplanen med ENPS på ny?"
-msgid "New Layer"
-msgstr "Nytt lag"
+msgid "Re-Syncing Rundown"
+msgstr ""
-msgid "Route Type"
+msgid "Re-Syncing Rundown Playlist"
msgstr ""
-msgid "Source Layer not found"
-msgstr "Kjeldelag ikkje funnen"
+msgid "Read marker position"
+msgstr ""
-msgid "There are no exclusivity groups set up."
-msgstr "Ingen eksklusivitetsgrupper er satt opp."
+msgid "Reads the ingest (NRCS) data, and pipes it through the blueprints"
+msgstr ""
-msgid "Exclusivity Group ID"
-msgstr "Eksklusivitetgruppe-id"
+msgid "Ready"
+msgstr "Klar"
-msgid "Exclusivity Group Name"
-msgstr "Eksklusivitetgruppenamn"
+msgid "Reconnect now"
+msgstr ""
-msgid "Display name of the Exclusivity Group"
-msgstr "Eksklusivitetsgruppa sitt namn som visast i oversikten"
+msgid "Reconnecting to the {{platformName}}"
+msgstr ""
-msgid "Active"
-msgstr "Aktiv"
+msgid "Refreshing debug states"
+msgstr ""
-msgid "Not Active"
-msgstr "Inaktiv"
+msgid "Register ID"
+msgstr ""
-msgid "Not defined"
-msgstr "Ikkje definert"
+msgid "Rehearsal"
+msgstr "Testmodus"
-msgid "There are no Route Sets set up."
-msgstr "Det er ikkje satt opp omkoplingar enno."
+msgid "Rehearsal mode is already active"
+msgstr ""
-msgid "Route Set ID"
-msgstr "Omkoplingsgruppe-id"
+msgid "Rehearsal mode is not allowed"
+msgstr ""
-msgid "Is this Route Set currently active"
-msgstr "Er denne omkoplingsgruppa aktiv no"
+msgid "Rehearsal State"
+msgstr ""
-msgid "Default State"
-msgstr "Standardtilstand"
+msgid "Reload {{nrcsName}} Data"
+msgstr "Last inn {{nrcsName}}-data på nytt"
-msgid "The default state of this Route Set"
-msgstr "Standardtilstand for denne omkoplingsgruppa"
+msgid "Reload Baseline"
+msgstr "Last inn baseline om att"
-msgid "Route Set Name"
-msgstr "Omkoplingsgruppa sitt namn"
+msgid "Reload NRCS Data"
+msgstr "Last inn MOS-data på nytt"
-msgid "Display name of the Route Set"
-msgstr "Omkoplingsgruppa sitt namn som visast i oversikten"
+msgid "Reload statuses"
+msgstr "Last inn status om att"
-msgid "If set, only one Route Set will be active per exclusivity group"
+msgid "Reloading Rundown Playlist Data"
msgstr ""
-"Berre ei omkoplingsgruppe vere aktiv per eksklusivitetsgruppe når dette er "
-"kryssa av for"
-msgid "Behavior"
-msgstr "Oppførsel"
+msgid "Rem. Dur"
+msgstr ""
-msgid "The way this Route Set should behave towards the user"
-msgstr "Måten denne omkoplingsgruppa skal oppføre seg overfor brukaren"
+msgid "Remote"
+msgstr ""
-msgid "Route Sets"
-msgstr "Omkoplingsgrupper"
+msgid "Remote Source"
+msgstr "RM"
-msgid "Add a playout device to the studio in order to configure the route sets"
+msgid "Remote Speak"
msgstr ""
-"For å kunne redigere omkoplingsgrupper, må du leggje til ein playout-eining "
-"til studio"
-msgid ""
-"Controls for exposed Route Sets will be displayed to the producer within the "
-"Rundown View in the Switchboard."
+msgid "Remove"
+msgstr "Fjern"
+
+msgid "Remove all Show Style Variants?"
msgstr ""
-"Kontroller for eksponerte omkoplingsgrupper vil verte synt for producer i "
-"køyreplansvisninga i omkoplingspanelet."
-msgid "Exclusivity Groups"
-msgstr "Ekslusivitetgrupper"
+msgid "Remove all trimming"
+msgstr "Nullstill inn- og utpunkt"
-msgid "Remove this Package Container?"
-msgstr "Fjern denne pakkecontaineren?"
+msgid "Remove in-trimming"
+msgstr "Nullstill innpunkt"
-msgid ""
-"Are you sure you want to remove the Package Container \"{{containerId}}\"?"
-msgstr "Er du sikker på at du vil fjerne pakkecontaineren \"{{containerId}}\"?"
+msgid "Remove indexes"
+msgstr "Fjern indexer"
-msgid "There are no Package Containers set up."
-msgstr "Det er ikkje satt opp pakkekontainere enno."
+msgid "Remove old data"
+msgstr "Fjern gamle data"
-msgid "Package Container ID"
-msgstr "Pakkekontainer-id"
+msgid "Remove old data from database"
+msgstr "Fjern gamle data frå databasen"
-msgid "Display name/label of the Package Container"
-msgstr "Vis namn/merkelapp for pakkekontaineren"
+msgid "Remove out-trimming"
+msgstr "Nullstill utpunkt"
-msgid "Playout devices which uses this package container"
-msgstr "Playout-einingar som nyttar denne pakkekontaineren"
+msgid "Remove rundown"
+msgstr "Fjern køyreplan"
-msgid "Select playout devices"
-msgstr "Vel playout-eining"
+msgid "Remove Snapshot"
+msgstr ""
-msgid "Select which playout devices are using this package container"
+msgid "Remove this AB PLayers from this Route Set?"
msgstr ""
-"Vel kva for nokre playout-einingar som skal nytte denne pakkekontaineren"
-msgid "Accessors"
-msgstr "Aksessorer"
+msgid "Remove this device?"
+msgstr "Fjern denne eininga?"
+
+msgid "Remove this Device?"
+msgstr "Fjern denne eininga?"
+
+msgid "Remove this Exclusivity Group?"
+msgstr "Fjern frå denne eksklusivitetgruppa?"
+
+msgid "Remove this item?"
+msgstr "Fjern dette elementet?"
+
+msgid "Remove this mapping?"
+msgstr "Fjern denne mappinga?"
msgid "Remove this Package Container Accessor?"
msgstr "Fjern denne pakkekontainer-aksessoren?"
-msgid ""
-"Are you sure you want to remove the Package Container Accessor "
-"\"{{accessorId}}\"?"
-msgstr ""
-"Er du sikker på at du vil fjerne pakkekontainer-aksessoren "
-"\"{{accessorId}}\"?"
-
-msgid "There are no Accessors set up."
-msgstr "Ingen aksessorer er satt opp."
-
-msgid "Accessor ID"
-msgstr "Aksessor-id"
+msgid "Remove this Package Container?"
+msgstr "Fjern denne pakkecontaineren?"
-msgid "Display name of the Package Container"
-msgstr "Pakkekontaineren sitt namn som visast i oversikten"
+msgid "Remove this Route from this Route Set?"
+msgstr "Fjern denne omkoplinga frå denne omkoplingsgruppa?"
-msgid "Accessor Type"
-msgstr "Aksessortype"
+msgid "Remove this Route Set?"
+msgstr "Fjern denne omkoplingsgruppa?"
-msgid "Folder path"
-msgstr "Mappesti"
+msgid "Remove this Show Style Variant?"
+msgstr ""
-msgid "File path to the folder of the local folder"
-msgstr "Sti til lokal mappe"
+msgid "Removing Bucket"
+msgstr ""
-msgid "Resource Id"
-msgstr "Ressurs-id"
+msgid "Removing Bucket AdLib"
+msgstr ""
-msgid ""
-"(Optional) This could be the name of the computer on which the local folder "
-"is on"
+msgid "Removing Rundown"
msgstr ""
-"(Valfri) Dette kan vere namnet til datamaskinen som den lokale mappa er på"
-msgid "Base URL"
-msgstr "Base-url"
+msgid "Removing Rundown Playlist"
+msgstr ""
-msgid "Base url to the resource (example: http://myserver/folder)"
-msgstr "Base-url for ressursen (døme: http://minserver/mappe)"
+msgid "Rename this AdLib"
+msgstr "Gi denne adliben nytt namn"
-msgid "Network Id"
-msgstr "Nettverk-id"
+msgid "Rename this Bucket"
+msgstr "Gi bøtta nytt namn"
-msgid ""
-"(Optional) A name/identifier of the local network where the share is "
-"located, leave empty if globally accessible"
+msgid "Reording Rundowns in Playlist"
msgstr ""
-"(Valfri) Eit namn/ein identifikator for det lokale nettverket der den delte "
-"mappa er lokalisert, la vere tom om den er globalt tilgjengeleg"
-msgid "Folder path to shared folder"
-msgstr "Sti til delt mappe"
+msgid "Replace"
+msgstr "Erstatt"
-msgid "UserName"
-msgstr "Brukernamn"
+msgid "Replace Blueprints?"
+msgstr "Erstatte blueprints?"
-msgid "Username for athuentication"
-msgstr "Brukarnamn for autentisering"
+msgid "Replace rows"
+msgstr ""
-msgid "Password for authentication"
-msgstr "Passord for autentisering"
+msgid "Require All Additional Source Layers"
+msgstr ""
-msgid ""
-"(Optional) A name/identifier of the local network where the share is located"
+msgid "Require Piece on Source Layer"
msgstr ""
-"(Valfri) Eit namn/ein identifikator for det lokale nettverket der den delte "
-"mappa er lokalisert"
-msgid "Quantel gateway URL"
-msgstr "Quantel Gateway-adresse (url)"
+msgid "Reset"
+msgstr ""
-msgid "URL to the Quantel Gateway"
-msgstr "Start Quantel-gateway om att"
+msgid "Reset Action"
+msgstr ""
-msgid "ISA URLs"
-msgstr "ISA-adresse (url)"
+msgid "Reset All Versions"
+msgstr "Nullstill alle versjonar"
-msgid "URLs to the ISAs, in order of importance (comma separated)"
-msgstr "Adresser (url-er) for ISA-ene (kommaseparert i prioritert rekkefølgje)"
+msgid "Reset and Activate \"On Air\""
+msgstr ""
-msgid "Zone ID"
-msgstr "Sone-id"
+msgid "Reset App Credentials"
+msgstr ""
-msgid "Zone ID (default value: \"default\")"
-msgstr "Sone-id (standardverdi: \"default\")"
+msgid "Reset Database Version"
+msgstr "Nullstill databaseversjon"
-msgid "Server ID"
-msgstr "Server-id"
+msgid "Reset mapping to default values"
+msgstr ""
-msgid "Server ID. For sources, this should generally be omitted (or set to 0) so clip-searches are zone-wide. If set, clip-searches are limited to that server."
+msgid "Reset Package Container to default values"
msgstr ""
-"Server-id (Må droppast for kjelder, sidan klippsøk skjer i heile sona.)"
-msgid "Quantel transformer URL"
-msgstr "Quantel Transformer-adresse (url)"
+msgid "Reset row to default values"
+msgstr ""
-msgid "URL to the Quantel HTTP transformer"
-msgstr "Adresse til Quantel HTTP transformer"
+msgid "Reset Rundown"
+msgstr "Tilbakestill køyreplanen"
-msgid "Quantel FileFlow URL"
-msgstr "Quantel GatewayFileFlow-adresse (url)"
+msgid "Reset Sort Order"
+msgstr "Tilbakestill rekkefølgje"
-msgid "URL to the Quantel FileFlow Manager"
-msgstr "Adresse til Quantel FileFlow Manager"
+msgid "Reset source layer to default values"
+msgstr ""
-msgid "Quantel FileFlow Profile name"
-msgstr "Quantel FileFlow profilnavn"
+msgid "Reset this item?"
+msgstr ""
-msgid "Profile name to be used by FileFlow when exporting the clips"
-msgstr "Profilnamn som blir nytta av FileFlow når klippa vert eksportert"
+msgid "Reset this mapping?"
+msgstr ""
-msgid "Allow Read access"
-msgstr "Tillat lesing"
+msgid "Reset this Package Container?"
+msgstr ""
-msgid "Allow Write access"
-msgstr "Tillat skriving/lagring"
+msgid "Reset to default"
+msgstr ""
-msgid "Studio Settings"
-msgstr "Studioinnstillingar"
+msgid "Reset User Credentials"
+msgstr ""
-msgid "Package Containers to use for previews"
-msgstr "Pakkekontainere som skal nyttast til førehandsvisingar"
+msgid "Resetting and activating Rundown Playlist"
+msgstr ""
-msgid "Click to show available Package Containers"
-msgstr "Klikk for å vise tilgjengelege pakkekntainere"
+msgid "Resetting Playlist to default order"
+msgstr ""
-msgid "Package Containers to use for thumbnails"
-msgstr "Pakkekontainere som skal nyttast til miniatyrbilete"
+msgid "Resetting Rundown Playlist"
+msgstr ""
-msgid "Package Containers"
-msgstr "Pakkekontainere"
+msgid "Resource Id"
+msgstr "Ressurs-id"
-msgid "Studio Baseline needs update: "
-msgstr "Studio baseline treng oppdatering: "
+msgid "Restart"
+msgstr "Restart"
-msgid "Baseline needs reload, this studio may not work until reloaded"
-msgstr ""
-"Baseline må lastast om att, dette studioet vil kanskje ikkje fungere før "
-"baseline er lasta om att"
+msgid "Restart {{device}}"
+msgstr "Start {{device}} på ny"
-msgid "Reload Baseline"
-msgstr "Last inn baseline om att"
+msgid "Restart All Jobs"
+msgstr ""
-msgid "Studio Name"
-msgstr "Studionamn"
+msgid "Restart CasparCG Server"
+msgstr "Start CasparCG på nytt"
-msgid "Select Compatible Show Styles"
-msgstr "Vel kompatible showstyles"
+msgid "Restart Container"
+msgstr ""
-msgid "Show style not set"
-msgstr "Showstyle ikkje satt"
+msgid "Restart Device"
+msgstr "Start eining på nytt"
-msgid "Click to show available Show Styles"
-msgstr "Klikk for å vise tilgjengelege showstyles"
+msgid "Restart Playout"
+msgstr "Start Playout-gateway på ny"
-msgid "Frame Rate"
-msgstr "Framerate"
+msgid "Restart this Device?"
+msgstr "Start denne eininga på nytt?"
-msgid "Enable \"Play from Anywhere\""
-msgstr "Slå på \"Play from Anywhere\""
+msgid "Restart this system?"
+msgstr "Start dette Sofie-systemet om att?"
-msgid "Media Preview URL"
-msgstr "Førehandsvisningsadresse (url)"
+msgid "Restarting Media Workflow"
+msgstr ""
-msgid "Sofie Host URL"
-msgstr "Sofie vertadresse (url)"
+msgid "Restarting Sofie Core"
+msgstr ""
-msgid "Slack Webhook URLs"
-msgstr "Slack Webhook-adresser (url)"
+msgid "Restore"
+msgstr "Tilbakestill"
-msgid "Supported Media Formats"
-msgstr "Støtta medieformat"
+msgid "Restore Deleted Action"
+msgstr ""
-msgid "Supported Audio Formats"
-msgstr "Støtta lydformat"
+msgid "Restore from Snapshot File"
+msgstr "Tilbakestill frå snapshotfil"
-msgid "Force the Multi-gateway-mode"
-msgstr "Tving multigateway-modus"
+msgid "Restore from Stored Snapshots"
+msgstr "Tilbakestill frå lagra snapshots"
-msgid "Multi-gateway-mode delay time"
-msgstr "Delaytid for multigateway-modus"
+msgid "Restore from this Snapshot file?"
+msgstr "Tilbakestill frå denne snapshotfila?"
-msgid "Preserve contents of playing segment when unsynced"
+msgid "Restore Part from NRCS"
msgstr ""
-#, fuzzy
-#| msgid "The rundown can not be reset while it is active"
-msgid "Allow Rundowns to be reset while on-air"
-msgstr "Ein aktivert køyreplan kan ikkje tilbakestillast"
-
-msgid ""
-"Preserve position of segments when unsynced relative to other segments. "
-"Note: this has only been tested for the iNews gateway"
+msgid "Restore Segment from NRCS"
msgstr ""
-msgid "Remove indexes"
-msgstr "Fjern indexer"
+msgid "Restore Snapshot"
+msgstr ""
-msgid "This will remove {{indexCount}} old indexes, do you want to continue?"
-msgstr "Dette vil fjerne {{indexCount}} gamle indexer. Vil du fortsette?"
+msgid "Resync with NRCS"
+msgstr "Synkroniser med ENPS"
-msgid "{{indexCount}} indexes was removed."
-msgstr "{{indexCount}} indexer vart fjerna."
+msgid "Retry"
+msgstr "Prøv igjen"
-msgid "Installation name"
-msgstr "Installasjonsnamn"
+msgid "Return to list"
+msgstr "Gå tilbake til lista"
-msgid "This name will be shown in the title bar of the window"
-msgstr "Dette namnet vert vist i tittellinja for vindauget"
+msgid "Reveal in Shelf"
+msgstr "Vis i skuff"
-msgid "Logging level"
-msgstr "Loggenivå"
+msgid "Reverse speed map"
+msgstr ""
-msgid "This affects how much is logged to the console on the server"
-msgstr "Dette påverkar kor mykje som blir logga til serverkonsollen"
+msgid "Reverse speed map (left trigger)"
+msgstr ""
-msgid "System-wide Notification Message"
-msgstr "Lokal systemmelding"
+msgid "Rewind all Segments"
+msgstr ""
-msgid "Message"
-msgstr "Melding"
+msgid "Rewind segments to start"
+msgstr "Sett segmenta tilbake til start"
-msgid "Enabled"
-msgstr "Aktivert"
+msgid "Rewind Segments to start"
+msgstr "Sett alle segment attende til start"
-msgid "Edit Support Panel"
-msgstr "Rediger supportpanel"
+msgid "Right hand offset"
+msgstr ""
-msgid "HTML that will be shown in the Support Panel"
-msgstr "HTML-kode som vert vist i supportpanelet"
+msgid "Role"
+msgstr "Rolle"
-msgid "Application Performance Monitoring"
-msgstr "Overvaking av yting for applikasjonar (AMP)"
+msgid "Route Set"
+msgstr ""
-msgid "APM Enabled"
-msgstr "AMP aktivert"
+msgid "Route Set ID"
+msgstr "Omkoplingsgruppe-id"
-msgid "APM Transaction Sample Rate"
-msgstr "Prøvefrekvens for AMP-transaksjonar"
+msgid "Route Set Name"
+msgstr "Omkoplingsgruppa sitt namn"
-msgid ""
-"How many of the transactions to monitor. Set to -1 to log nothing (max "
-"performance), 0.5 to log 50% of the transactions, 1 to log all transactions"
-msgstr ""
-"Tal på transaksjonar som overvakast. Set verdien til -1 for å ikkje logge "
-"noko (maks yting), til 0.5 for å logge halvparten av transaksjonane eller "
-"til 1 for å logge alle transaksjonane"
+msgid "Route Sets"
+msgstr "Omkoplingsgrupper"
-msgid "Note: Core needs to be restarted to apply these settings"
-msgstr "Merknad: Core må startast om att for å ta i bruk desse innstillingane"
+msgid "Route Type"
+msgstr ""
-msgid "Monitor blocked thread"
+msgid "Routed Mappings"
msgstr ""
-msgid "Enable"
-msgstr "Aktivert"
+msgid "Routes"
+msgstr "Omkoplingar"
-msgid ""
-"Enables internal monitoring of blocked main thread. Logs when there is an "
-"issue, but (unverified) might cause issues in itself."
+msgid "Row cannot be reset as it has no default values"
msgstr ""
-msgid "Cron jobs"
-msgstr "Cron-jobbar"
+msgid "Run automatic migration procedure"
+msgstr "Køyr automatisk migreringsprosedyre"
-msgid "Enable CasparCG restart job"
-msgstr "Aktiver CasparCG restartjobbar"
+msgid "Run Migrations to get set up"
+msgstr "Køyr migreringsprosedyrar for å setje opp"
-msgid "Cleanup"
-msgstr "Opprydding"
+msgid "Rundown"
+msgstr "Køyreplan"
-msgid "Cleanup old database indexes"
-msgstr "Rydd opp i gamle databaseindexer"
+msgid ""
+"Rundown {{rundownName}} in Playlist {{playlistName}} is missing in the data "
+"from {{nrcsName}}. You can either leave it in Sofie and mark it as Unsynced "
+"or remove the rundown from Sofie. What do you want to do?"
+msgstr ""
+"Køyreplanen {{rundownName}} i lista {{playlistName}} manglar i data frå "
+"{{nrcsName}}. Du kan anten markere den som ikkje synkronisert og behalde "
+"den i Sofie, eller du kan fjerne køyreplanen ifrå Sofie. Kva vil du gjere?"
-msgid "Cleanup old data"
-msgstr "Rydd opp i gamle data"
+msgid "Rundown & Shelf"
+msgstr "Køyreplan & skuff"
-msgid "Disable CasparCG restart job"
-msgstr "Deaktiver CasparCG restartjobbar"
+msgid "Rundown filter"
+msgstr ""
-msgid "Enable automatic storage of Rundown Playlist snapshots periodically"
+msgid "Rundown for piece \"{{pieceLabel}}\" could not be found."
+msgstr "Kan ikkje finne øyreplan for \"{{pieceLabel}}\"."
+
+msgid "Rundown Global Piece Prepare Time"
msgstr ""
-msgid "Filter: If set, only store snapshots for certain rundowns"
+msgid "Rundown Header Layout"
+msgstr "Layout for køyreplanen sin topptekst"
+
+msgid "Rundown Header Layouts"
msgstr ""
-msgid ""
-"(Comma separated list. Empty - will store snapshots of all Rundown Playlists)"
+msgid "Rundown is already doing a HOLD!"
msgstr ""
-msgid "Error when checking for cleaning up"
+msgid "Rundown must be active!"
msgstr ""
-msgid "Remove old data from database"
-msgstr "Fjern gamle data frå databasen"
+msgid "Rundown must be playing or have a next!"
+msgstr ""
-msgid ""
-"There are {{count}} documents that can be removed, do you want to continue?"
-msgstr "Det er {{count}} dokument som kan fjernast. Vil du fortsette?"
+msgid "Rundown must be playing!"
+msgstr ""
-msgid "Documents to be removed:"
-msgstr "Dokument som vert fjerna:"
+msgid "Rundown Name"
+msgstr ""
-msgid "Retry"
-msgstr "Prøv igjen"
+msgid "Rundown not found"
+msgstr "Køyreplan ikkje funnen"
-msgid "Remove old data"
-msgstr "Fjern gamle data"
+msgid ""
+"Rundown Playlist is active, please deactivate before preparing it for "
+"broadcast"
+msgstr ""
-msgid "The old data was removed."
-msgstr "Gamle data vart fjerna."
+msgid "Rundown Playlist is active, please deactivate it before regenerating it."
+msgstr ""
-msgid "Last {{layerName}}"
-msgstr "Siste {{layerName}}"
+msgid "Rundown Playlist names to store"
+msgstr ""
-msgid "Clear {{layerName}}"
-msgstr "Tøm {{layerName}}"
+msgid "Rundown Playlist not found!"
+msgstr ""
-msgid "Search..."
-msgstr "Søk..."
+msgid "Rundown View Layouts"
+msgstr ""
msgid ""
-"Are you sure you want to deactivate this Rundown\n"
-"(This will clear the outputs)"
+"RundownPlaylist is active but not in rehearsal, please deactivate it or set "
+"in in rehearsal to be able to reset it."
msgstr ""
-"Er du sikker på at du vil deaktivere denne køyreplanen?\n"
-"(Dette vil nullstille alle utgangar.)"
-
-msgid "Successfully stored snapshot"
-msgstr "Tilbakestilling frå snapshot var vellukka"
-
-msgid "End Words"
-msgstr "Stikkord"
-msgid "Global AdLib"
-msgstr "Globale adliber"
+msgid "Rundowns"
+msgstr "Køyreplanar"
-msgid "AdLib does not provide any options"
-msgstr "Adlib har ingen val"
+msgid "Save"
+msgstr ""
-msgid "Execute"
-msgstr "Utfør"
+msgid "Save Changes"
+msgstr "Lagre endringer"
msgid "Save to Bucket"
msgstr "Lagre til bøtte"
-msgid "Reveal in Shelf"
-msgstr "Vis i skuff"
-
-msgid "Edit in Nora"
-msgstr "Rediger i Nora"
-
-msgid "Current Part"
-msgstr "Noverande del"
-
-msgid "Next Part"
-msgstr "Neste del"
-
-msgid "Part Count Down"
-msgstr "Nedteljing for del"
+msgid "Saving AdLib to Bucket"
+msgstr ""
-msgid "Part Count Up"
-msgstr "Opptelling for del"
+msgid "Saving Evaluation"
+msgstr ""
-msgid "Until end of rundown"
-msgstr "Til slutten av køyreplanen"
+msgid "Scale"
+msgstr "Skala"
-msgid "New Bucket"
-msgstr "Ny bøtte"
+msgid "Script is empty"
+msgstr "Manuset er tomt"
-msgid "Are you sure you want to delete this AdLib?"
-msgstr "Er du sikker på at du vil slette denne adliben?"
+msgid "Script Source Layers"
+msgstr ""
-msgid "Are you sure you want to delete this Bucket?"
-msgstr "Er du sikker på at du vil slette denne bøtta?"
+msgid "Search..."
+msgstr "Søk..."
-msgid "Are you sure you want to empty (remove all adlibs inside) this Bucket?"
-msgstr "Er du sikker på at du vil tømme denne bøtta (fjerner alle adliber)?"
+msgid "Seg. Budg."
+msgstr ""
-msgid "Current Segment"
-msgstr "Noverande tittel"
+msgid "segment"
+msgstr ""
-msgid "Next Segment"
-msgstr "Neste tittel"
+msgid "Segment"
+msgstr "Tittel"
msgid "Segment Count Down"
msgstr "Nedteljing for tittel"
@@ -2890,1296 +3368,1254 @@ msgstr "Nedteljing for tittel"
msgid "Segment Count Up"
msgstr "Oppteljing for tittel"
-msgid "Start this AdLib"
-msgstr "Start denne adliben"
-
-msgid "Queue this AdLib"
-msgstr "Cue denne adliben"
-
-msgid "Inspect this AdLib"
-msgstr "Inspiser denne adliben"
-
-msgid "Rename this AdLib"
-msgstr "Gi denne adliben nytt namn"
-
-msgid "Delete this AdLib"
-msgstr "Slett denne adliben"
-
-msgid "Empty this Bucket"
-msgstr "Tøm denne bøtta"
-
-msgid "Rename this Bucket"
-msgstr "Gi bøtta nytt namn"
-
-msgid "Delete this Bucket"
-msgstr "Slett denne bøtta"
-
-msgid "Create new Bucket"
-msgstr "Opprett ny bøtte"
-
-msgid "AdLib"
-msgstr "Adlib"
+msgid "Segment countdown requires source layer"
+msgstr "Nedteljing for tittel krev kjeldelag"
-msgid "Shortcuts"
-msgstr "Hurtigtastar"
+msgid "Segment no longer exists in {{nrcs}}"
+msgstr "Segmentet eksisterer ikkje lenger i {{nrcs}}"
-msgid "Show Style Variant"
-msgstr "Showstylevariant"
+msgid "Segment was hidden in {{nrcs}}"
+msgstr "Tittelen eksisterer ikkje lenger i {{nrcs}}"
-msgid "Local Time"
-msgstr "Lokal tid"
+msgid "Segments: {{delta}}"
+msgstr "Segment: {{delta}}"
-msgid "System"
-msgstr "System"
+msgid ""
+"Select a presenter layout. Leave as default to use the first available "
+"layout."
+msgstr ""
-msgid "Media"
-msgstr "Media"
+msgid "Select Action"
+msgstr "Vel handling"
-msgid "Packages"
-msgstr "Pakker"
+msgid "Select Compatible Show Styles"
+msgstr "Vel kompatible showstyles"
-msgid "Messages"
-msgstr "Meldingar"
+msgid "Select image"
+msgstr ""
-msgid "User Log"
-msgstr "Brukarlogg"
+msgid ""
+"Select one or more control modes. Leave all unchecked for default (mouse + "
+"keyboard)."
+msgstr ""
-msgid "Evaluations"
-msgstr "Evalueringar"
+msgid ""
+"Select source layers to display. Leave all unchecked to show all "
+"camera-related layers."
+msgstr ""
-msgid "Timestamp"
-msgstr "Tidsstempel"
+msgid "Select visible Output Groups"
+msgstr "Vel synleg gruppe for utgang"
-msgid "User Name"
-msgstr "Brukernamn"
+msgid "Select visible Source Layers"
+msgstr "Vel synlege kjeldelag"
-msgid "Answers"
-msgstr "Svar"
+msgid "Select which playout devices are using this package container"
+msgstr "Vel kva for nokre playout-einingar som skal nytte denne pakkekontaineren"
-msgid "Message Queue"
-msgstr "Kø for meldingar"
+msgid "Send message"
+msgstr ""
-msgid "Queued Messages"
-msgstr "Meldingar i kø"
+msgid "Send message and Deactivate Rundown"
+msgstr ""
msgid "Sent Messages"
msgstr "Sendte meldingar"
-msgid "File Copy"
-msgstr "Kopier fil"
-
-msgid "File Delete"
-msgstr "Slett fil"
-
-msgid "Check file size"
-msgstr "Sjekk filstorleik"
-
-msgid "Scan File"
-msgstr "Scan fil"
-
-msgid "Generate Thumbnail"
-msgstr "Generer miniatyrbilete"
-
-msgid "Generate Preview"
-msgstr "Generer førehandsvisning"
-
-msgid "Unknown action: {{action}}"
-msgstr "Ukjent handling"
+msgid "Server"
+msgstr ""
-msgid "Done"
-msgstr "Utført"
+msgid "Server {{id}}"
+msgstr ""
-msgid "Failed"
-msgstr "Mislukka"
+msgid "Server ID"
+msgstr "Server-id"
-msgid "Working, Media Available"
-msgstr "Arbeider, media er tilgjengeleg"
+msgid ""
+"Server ID. For sources, this should generally be omitted (or set to 0) so "
+"clip-searches are zone-wide. If set, clip-searches are limited to that "
+"server."
+msgstr "Server-id (Må droppast for kjelder, sidan klippsøk skjer i heile sona.)"
-msgid "Working"
-msgstr "Arbeider"
+msgid "Set"
+msgstr ""
-msgid "Pending"
-msgstr "Venter"
+msgid "Set as QuickLoop End"
+msgstr ""
-msgid "Blocked"
-msgstr "Blokkert"
+msgid "Set as QuickLoop Start"
+msgstr ""
-msgid "Canceled"
-msgstr "Avbrote"
+msgid "Set In & Out points"
+msgstr ""
-msgid "Idle"
-msgstr "Inaktiv"
+msgid "Set part as Next"
+msgstr ""
-msgid "Skipped"
-msgstr "Hoppa over"
+msgid "Set segment as Next"
+msgstr "Set tittel som neste: Startar på neste Take"
-msgid "Step progress: {{progress}}"
-msgstr "Framdrift: {{progress}}"
+msgid "Setting as QuickLoop End"
+msgstr ""
-msgid "Processing"
-msgstr "Prosesserer"
+msgid "Setting as QuickLoop Start"
+msgstr ""
-msgid "Unknown: {{status}}"
-msgstr "Ukjend: {{status}}"
+msgid "Setting Next"
+msgstr ""
-msgid "Collapse"
-msgstr "Minimer"
+msgid "Setting Next Segment"
+msgstr ""
-msgid "Details"
-msgstr "Detaljar"
+msgid "Settings"
+msgstr "Innstillingar"
-msgid "Abort"
-msgstr "Avbryt"
+msgid "Shelf"
+msgstr "Skuff"
-msgid "Prioritize"
-msgstr "Prioriter"
+msgid "Shelf Layout"
+msgstr "Layouter for skuffen"
-msgid "Media Transfer Status"
-msgstr "Status for medieoverføringar"
+msgid "Shelf layout uploaded successfully."
+msgstr "Opplasting av layout for skuff var vellukka."
-msgid "Abort All"
-msgstr "Avbryt alle"
+msgid "Shelf Layouts"
+msgstr ""
-msgid "Restart All"
-msgstr "Start alle på ny"
+msgid "Shortcuts"
+msgstr "Hurtigtastar"
-msgid "Unknown Package \"{{packageId}}\""
-msgstr "Ukjend pakke \"{{packageId}}\""
+msgid "Show \"Remove snapshots\"-buttons"
+msgstr "Vis \"Fjern snapshots\"-knappar"
-msgid "Package Status"
-msgstr "Pakkestatus"
+msgid "Show All"
+msgstr "Vis Alle"
-msgid "Package container status"
-msgstr "Status for pakkekontainer"
+msgid "Show Breaks as Segments"
+msgstr "Vis pauser som titlar"
-msgid "Id"
-msgstr "Id"
+msgid "Show config changes"
+msgstr ""
-msgid "Work status"
-msgstr "Jobbstatus"
+msgid "Show End"
+msgstr "Sendeslutt"
-msgid "Restart All jobs"
-msgstr "Start alle jobbar om att"
+msgid "Show entire On Air Segment"
+msgstr "Vis heile tittelen som er OnAir"
-msgid "Created"
-msgstr "Oppretta"
+msgid "Show Hotkeys"
+msgstr "Vis hurtigtastar"
-msgid "Ready"
-msgstr "Klar"
+msgid "Show Inspector"
+msgstr ""
-msgid "The progress of steps required for playout"
-msgstr "Framdrift for steg som er naudsynte for avspeling"
+msgid "Show issue"
+msgstr "Vis problem"
-msgid "The progress of all steps"
-msgstr "Framdrift for alle steg"
+msgid "Show next break timing"
+msgstr "Vis tid for neste pause"
-msgid "This step is required for playout"
-msgstr "Dette steget er naudsynt for avspeling"
+msgid "Show panel as a timeline"
+msgstr "Vis panel som ei tidslinje"
-msgid "Work description"
-msgstr "Jobbskildring"
+msgid "Show part title"
+msgstr "Vis delen sin tittel"
-msgid "Work status reason"
-msgstr "Årsak for jobbstatus"
+msgid "Show Piece Icon Color"
+msgstr ""
-msgid "Technical reason: {{reason}}"
-msgstr "Teknisk årsak: {{reason}}"
+msgid "Show Rundown Name"
+msgstr "Vis køyreplannamn"
-msgid "Previous work status reasons"
-msgstr "Tidlegare årsakar for jobbsatus"
+msgid "Show segment name"
+msgstr "Vis tittelen sitt namn"
-msgid "Priority"
-msgstr "Prioritet"
+msgid "Show Style"
+msgstr "Showstyle"
-msgid "Not Connected"
-msgstr "Ikkje tilkopla"
+msgid "Show Style Base Name"
+msgstr "Showstylenamn"
-msgid "Do you want to restart CasparCG Server?"
-msgstr "Er du sikker på at du vil starte CasparCG om att?"
+msgid "Show style not set"
+msgstr "Showstyle ikkje satt"
-msgid "Restart Quantel Gateway"
-msgstr "Start Quantel-gateway om att"
+msgid "Show Style Variant"
+msgstr "Showstylevariant"
-msgid "Do you want to restart Quantel Gateway?"
-msgstr "Er du sikker på at du vil starte Quantel-gateway om att?"
+msgid "Show Style Variants"
+msgstr ""
-msgid "Quantel Gateway restarting..."
-msgstr "Quantel-gateway startar om att..."
+msgid "Show Styles"
+msgstr "Showstyle"
-msgid "Failed to restart Quantel Gateway: {{errorMessage}}"
-msgstr "Kunne ikkje starta Quantel-gateway om att: {{errorMessage}}"
+msgid "Show thumbnails next to list items"
+msgstr "Vis miniatyrbilete ved sida av listeelement"
-msgid "Format HyperDeck disks"
-msgstr "Formater Hyperdeck-diskar"
+msgid "ShowStyleBase not found!"
+msgstr ""
-msgid ""
-"Do you want to format the HyperDeck disks? This is a destructive action and "
-"cannot be undone."
-msgstr "Ynskjer du å formatere Hyperdeck-diskar? Dette kan ikkje gjerast om."
+msgid "Shuttle Keyboard (Contour ShuttleXpress / X-keys)"
+msgstr ""
-msgid "Formatting HyperDeck disks on device \"{{deviceName}}\"..."
-msgstr "Formaterer Hyperdeck-diskar på eining \"{{deviceName}}\"..."
+msgid "Shuttle WebHID (Contour ShuttleXpress via browser)"
+msgstr ""
-msgid ""
-"Failed to format HyperDecks on device: \"{{deviceName}}\": {{errorMessage}}"
+msgid "Skip Fix Up Step"
msgstr ""
-"Kunne ikkje formatere Hyperdecks på eining: \"{{deviceName}}\": "
-"{{errorMessage}}"
-msgid "Last seen"
-msgstr "Sist sett"
+msgid "Slack Webhook URLs"
+msgstr "Slack Webhook-adresser (url)"
-msgid "Connect some devices to the playout gateway"
-msgstr "Kople til ein eller fleire einingar til playout-gatewayen"
+msgid "Smooth scrolling"
+msgstr ""
-msgid "Format disks"
-msgstr "Formater diskar"
+msgid "Snapshot remove failed: {{errorMessage}}"
+msgstr ""
-msgid "Are you sure you want to delete this device: \"{{deviceId}}\"?"
-msgstr "Er du sikker på at du vil fjerne eininga \"{{deviceId}}\"?"
+msgid "Snapshot restore failed: {{errorMessage}}"
+msgstr "Tilbakestilling frå snapshot feila: {{errorMessage}}"
-msgid "Sofie Automation Server Core: {{name}}"
-msgstr "Sofie:"
+msgid "Snapshot restored!"
+msgstr ""
-msgid "Restart this system?"
-msgstr "Start dette Sofie-systemet om att?"
+msgid "Sofie"
+msgstr ""
-msgid ""
-"Are you sure you want to restart this Sofie Automation Server Core: {{name}}?"
-msgstr "Er du sikker på at du vil starte Sofie Core: {{name}} om att?"
+msgid "Sofie Automation"
+msgstr "Sofie"
-msgid "Could not generate restart token!"
-msgstr "Kunne ikkje generere Restart Token!"
+msgid "Sofie Automation Server"
+msgstr ""
-msgid "Could not generate restart core: {{err}}"
-msgstr "Kunne ikkje generere Restart Core: {{err}}"
+msgid "Sofie Automation Server Core"
+msgstr ""
msgid "Sofie Automation Server Core will restart in {{time}}s..."
msgstr "Sofie Core starter om att om {{time}}s..."
-msgid "Execution times"
-msgstr "Køyretider"
-
-msgid "User ID"
-msgstr "Brukar-id"
-
-msgid "Client IP"
-msgstr "Klient-ip"
-
-msgid "Method"
-msgstr "Metode"
-
-msgid "Parameters"
-msgstr "Parametrar"
+msgid "Sofie Automation Server Core: {{name}}"
+msgstr "Sofie:"
-msgid "Time from platform user event to Action received by Core"
+msgid "Sofie logo to be displayed in the header. Requires a page refresh."
msgstr ""
-msgid "GUI"
-msgstr "Brukergrensesnitt"
-
-msgid "Core + Worker processing time"
+msgid "some invalid reason"
msgstr ""
-msgid "Core"
+msgid "some message"
msgstr ""
-msgid "Worker"
+msgid "some reason"
msgstr ""
-msgid "Gateway"
+msgid "something changed"
msgstr ""
-msgid "TSR"
+msgid ""
+"Something went wrong when creating the snapshot. Please contact the system "
+"administrator if the problem persists."
msgstr ""
-msgid "User Activity Log"
-msgstr "Aktivitetslogg"
+msgid "Something went wrong, and it affected the output"
+msgstr "Noko gjekk gale, og det virka inn på sendinga"
-msgid "in {{days}} days, {{hours}} h {{minutes}} min {{seconds}} s"
-msgstr "om {{days}} dagar, {{hours}} h {{minutes}} min {{seconds}} s"
+msgid "Something went wrong, but it didn't affect the output"
+msgstr "Noko gjekk gale, men det virka ikkje inn på sendinga"
-msgid "in {{hours}} h {{minutes}} min {{seconds}} s"
-msgstr "om {{hours}} t {{minutes}} min {{seconds}} s"
+msgid ""
+"Something went wrong, please contact the system administrator if the "
+"problem persists."
+msgstr "Noko gikk gale, kontakt systemadministrator om problemet held fram."
-msgid "in {{minutes}} min {{seconds}} s"
-msgstr "om {{minutes}} min {{seconds}} s"
+msgid "Source Abbreviation"
+msgstr "Kjeldeforkorting"
-msgid "in {{seconds}} s"
-msgstr "om {{seconds}} s"
+msgid "Source Layer"
+msgstr "Kjeldelag"
-msgid "{{days}} days, {{hours}} h {{minutes}} min {{seconds}} s ago"
-msgstr "for {{days}} dagar, {{hours}} t {{minutes}} min {{seconds}} s sidan"
+msgid "Source layer cannot be reset as it has no default values"
+msgstr ""
-msgid "{{hours}} h {{minutes}} min {{seconds}} s ago"
-msgstr "for {{hours}} t {{minutes}} min {{seconds}} s sidan"
+msgid "Source Layer Type"
+msgstr "Kjeldelagstypar"
-msgid "{{minutes}} min {{seconds}} s ago"
-msgstr "for {{minutes}} min {{seconds}} s sidan"
+msgid "Source Layer Types"
+msgstr "Kjeldelagstypar"
-msgid "{{seconds}} s ago"
-msgstr "for {{seconds}} s sidan"
+msgid "Source Layers"
+msgstr "Kjeldelag"
-msgid "Next scheduled show"
-msgstr "Neste planlagde sending"
+msgid "Source layers containing script"
+msgstr ""
-msgid "Help & Support"
-msgstr "Hjelp og brukarstøtte"
+msgid "Source Name"
+msgstr "Kjeldenamn"
-msgid "Disable hints by adding this to the URL:"
-msgstr "Deaktiver hint ved å legge dette til på url-en:"
+msgid "Source Type"
+msgstr "Kjeldetype"
-msgid "Enable hints by adding this to the URL:"
-msgstr "Aktiver hint ved å legge dette til på url-en:"
+msgid "Source/Output Layers"
+msgstr ""
-msgid "More documentation available at:"
-msgstr "Meir dokumentasjon er tilgjengeleg på:"
+msgid "Sources"
+msgstr "Kjelder"
-msgid "Timeline"
-msgstr "Tidslinje"
+msgid "Space separated list of style class names to use when displaying the action"
+msgstr ""
-msgid "Mappings"
-msgstr "Lagmapping"
+msgid "Specify additional layers where at least one layer must have an active piece"
+msgstr ""
+
+msgid "Speed control"
+msgstr ""
-msgid "User Log Player"
-msgstr "Brukarloggspelar"
+msgid "Speed map"
+msgstr ""
-msgid "Routed Mappings"
+msgid "Speed map (forward, right trigger)"
+msgstr ""
+
+msgid "Split Screen"
+msgstr "Splitt"
+
+msgid "Splits"
msgstr ""
-msgid "Play from here"
-msgstr "Spel av frå her"
+msgid "Standalone Shelf"
+msgstr "Frittståande skuff"
-msgid "Exectute Single"
-msgstr "Utfør einsleg handling"
+msgid "Start Here!"
+msgstr "Start her!"
-msgid "Next Action"
-msgstr "Neste handling"
+msgid "Start In"
+msgstr ""
-msgid "Run in"
-msgstr "Køyr i"
+msgid "Start this AdLib"
+msgstr "Start denne adliben"
-msgid "Stop"
-msgstr "Stopp"
+msgid "Start time is close"
+msgstr "Oppgitt sendestart er kvart augeblink"
msgid ""
-"Clip \"{{fileName}}\" can't be played because it doesn't exist on the "
-"playout system"
-msgstr ""
-"Klippet \"{{fileName}}\" kan ikkje spelast av fordi det ikkje finnast på "
-"utspelingssystemet"
+"Start with giving this browser configuration permissions by adding this to "
+"the URL: "
+msgstr "Først må du gå i konfigurasjonsmodus ved å leggje dette til i url-en: "
-msgid "{{sourceLayer}} is not yet ready on the playout system"
+msgid "Started"
+msgstr "Starta"
+
+msgid "Starting AdLib"
msgstr ""
-"{{sourceLayer}} er enno ikkje klar til å spelast ut fra avviklingsserver"
-msgid "{{sourceLayer}} is transferring to the playout system"
-msgstr "{{sourceLayer}} overførast til avviklingsserver"
+msgid "Starting Bucket AdLib"
+msgstr ""
-msgid ""
-"{{sourceLayer}} is transferring to the playout system and cannot be "
-"played yet"
+msgid "Starting Global AdLib"
msgstr ""
-"{{sourceLayer}} overførast til avviklingsserver og kan ikkje spelast av enno"
-msgid "{{sourceLayer}} doesn't have both audio & video"
-msgstr "{{sourceLayer}} har ikkje lyd og/eller bilete"
+msgid "Starting Sticky Piece"
+msgstr ""
-msgid "{{sourceLayer}} has the wrong format: {{format}}"
-msgstr "{{sourceLayer}}-formatet er ikkje støtta: {{format}}"
+msgid "State"
+msgstr "Tilstand"
-msgid "{{sourceLayer}} has {{audioStreams}} audio streams"
-msgstr "{{sourceLayer}} har {{audioStreams}} lydstraumar"
+msgid "State \"{{state}}\""
+msgstr ""
-msgid "Clip starts with {{frames}} {{type}} frames"
-msgstr "Klippet startar med {{frames}} {{type}} ruter"
+msgid "Statistics"
+msgstr "Statistikk"
-msgid "This clip ends with {{type}} frames after {{count}} seconds"
-msgstr "Klippet sluttar med {{type}} ruter etter {{count}} sekund"
+msgid "Status"
+msgstr "Status"
-msgid "{{frames}} {{type}} frames detected within the clip"
-msgstr "{{frames}} {{type}} rute oppdaga inne i klippet"
+msgid "Status Messages:"
+msgstr "Statusmeldingar:"
-msgid "{{frames}} {{type}} frames detected in the clip"
-msgstr "{{frames}} {{type}} rute oppdaga inne i klippet"
+msgid "Sticky Piece"
+msgstr "Element er sticky"
-msgid "black"
-msgstr "svart(e)"
+msgid "Store Snapshot"
+msgstr "Lagre snapshot"
-msgid "freeze"
-msgstr "fryst(e)"
+msgid "Studio"
+msgstr "Studio"
-msgid "{{sourceLayer}} is missing a file path"
-msgstr "{{sourceLayer}} kan ikkje spelast av fordi filnamnet manglar"
+msgid "Studio Baseline needs update: "
+msgstr "Studio baseline treng oppdatering: "
-msgid "Clip doesn't have audio & video"
-msgstr "Klippet har ikkje lyd og/eller bilete"
+msgid "Studio Labels"
+msgstr ""
-msgid "Clip starts with {{frames}} {{type}} frame"
-msgstr "Klippet startar med {{frames}} {{type}} frame"
+msgid "Studio Name"
+msgstr "Studionamn"
-msgid "This clip ends with {{type}} frames after {{count}} second"
-msgstr "Klippet sluttar med {{frames}} {{type}} frame"
+msgid "Studio not found!"
+msgstr ""
-msgid "{{frames}} {{type}} frame detected within the clip"
-msgstr "{{frames}} {{type}} frame oppdaga inne i klippet"
+msgid "Studio Screen Graphics"
+msgstr ""
-msgid "{{frames}} {{type}} frame detected in clip"
-msgstr "{{frames}} {{type}} frame oppdaga i klippet"
+msgid "Studio Settings"
+msgstr "Studioinnstillingar"
-msgid "{{sourceLayer}} is being ingested"
-msgstr "{{sourceLayer}} vert prosessert"
+msgid "Studio Snapshot"
+msgstr "Studiosnapshot"
-msgid "Source is missing"
-msgstr "Kjelde manglar"
+msgid "Studios"
+msgstr "Studio"
-msgid "Segment no longer exists in {{nrcs}}"
-msgstr "Segmentet eksisterer ikkje lenger i {{nrcs}}"
+msgid "Style class names"
+msgstr ""
-msgid "Segment was hidden in {{nrcs}}"
-msgstr "Tittelen eksisterer ikkje lenger i {{nrcs}}"
+msgid "Subtract"
+msgstr ""
-msgid "The following parts no longer exist in {{nrcs}}: {{partNames}}"
-msgstr "Dei følgande delane eksisterer ikkje lenger i {{nrcs}}: {{partNames}}"
+msgid "Successfully restored snapshot"
+msgstr "Tilbakestilling frå snapshot var vellukka"
-msgid "Toggle Shelf"
-msgstr "Skuff"
+msgid "Successfully stored snapshot"
+msgstr "Tilbakestilling frå snapshot var vellukka"
-msgid "Undo Hold"
-msgstr "Angre hold"
+msgid "Support Panel"
+msgstr ""
-msgid "Disable the next element"
-msgstr "Skip neste super"
+msgid "Supported Audio Formats"
+msgstr "Støtta lydformat"
-msgid "Undo Disable the next element"
-msgstr "Unskip neste super"
+msgid "Supported Media Formats"
+msgstr "Støtta medieformat"
-msgid "Move Next forwards"
-msgstr "Skip neste"
+msgid "Switch Route Set"
+msgstr ""
-msgid "Move Next to the following segment"
-msgstr "Skip til neste segment"
+msgid "Switch Segment View Mode"
+msgstr ""
-msgid "Move Next backwards"
-msgstr "Unskip neste"
+msgid "Switch to List View"
+msgstr ""
-msgid "Move Next to the previous segment"
-msgstr "Unskip neste segment"
+msgid "Switch to Storyboard View"
+msgstr ""
-msgid "Rewind segments to start"
-msgstr "Sett segmenta tilbake til start"
+msgid "Switch to Timeline View"
+msgstr ""
-msgctxt "°°°°°°plural"
-msgid "{{count}} rows°°°°°°"
-msgstr "{{count}} rader°°°°°°"
+msgid "Switchboard"
+msgstr "Omkoplingssentral"
-msgctxt "°°°°°°plural"
-msgid "This layer is now rerouted by an active Route Set: {{routeSets}}°°°°°°"
+msgid "Switchboard Panel"
msgstr ""
-"Dette laget vert omkopla av fleire aktive omkoplingsgrupper: {{routeSets}}°°°"
-"°°°"
-msgctxt "°°°°°°plural"
-msgid ""
-"There are {{count}} documents that can be removed, do you want to continue?°°"
-"°°°°"
+msgid "Switching operating mode to {{mode}}"
+msgstr "Endrer styringsmodus til {{mode}}"
+
+msgid "Switching routing"
msgstr ""
-"Det er {{count}} dokument i {{collections}} som kan fjernast. Vil du "
-"fortsette?°°°°°°"
-#, fuzzy
-#| msgctxt "°°°°°°plural"
-#| msgid "Clip starts with {{frames}} {{type}} frame°°°°°°"
-msgctxt "°°°°°°plural"
-msgid "Clip starts with {{frames}} {{type}} frames°°°°°°"
-msgstr "Klipp startar med {{frames}} {{type}} frame°°°°°°"
+msgid "System"
+msgstr "System"
-#, fuzzy
-#| msgctxt "°°°°°°plural"
-#| msgid "This clip ends with {{type}} frames after {{count}} second°°°°°°"
-msgctxt "°°°°°°plural"
-msgid "This clip ends with {{type}} frames after {{count}} seconds°°°°°°"
-msgstr "Klipp sluttar {{frames}} {{type}} frame°°°°°°"
+msgid "System has issues which need to be resolved"
+msgstr "Systemet har problemer som må løysast"
-#, fuzzy
-#| msgctxt "°°°°°°plural"
-#| msgid "{{frames}} {{type}} frame detected within the clip°°°°°°"
-msgctxt "°°°°°°plural"
-msgid "{{frames}} {{type}} frames detected within the clip°°°°°°"
-msgstr "{{frames}} {{type}} rute oppdaga inne i klippet°°°°°°"
+msgid "System must have exactly one studio"
+msgstr ""
-#, fuzzy
-#| msgctxt "°°°°°°plural"
-#| msgid "{{frames}} {{type}} frame detected within the clip°°°°°°"
-msgctxt "°°°°°°plural"
-msgid "{{frames}} {{type}} frames detected in the clip°°°°°°"
-msgstr "{{frames}} {{type}} rute oppdaga inne i klippet°°°°°°"
+msgid "System Status"
+msgstr "Systemstatus"
-msgctxt "°°°°°°plural"
-msgid "Clip starts with {{frames}} {{type}} frame°°°°°°"
-msgstr "Klipp startar med {{frames}} {{type}} frame°°°°°°"
+msgid "System-wide"
+msgstr "Systemvid"
-msgctxt "°°°°°°plural"
-msgid "This clip ends with {{type}} frames after {{count}} second°°°°°°"
-msgstr "Klipp sluttar {{frames}} {{type}} frame°°°°°°"
+msgid "System-wide Notification Message"
+msgstr "Lokal systemmelding"
-msgctxt "°°°°°°plural"
-msgid "{{frames}} {{type}} frame detected within the clip°°°°°°"
-msgstr "{{frames}} {{type}} frame oppdaga inne i klippet°°°°°°"
+msgid "Table is not allowed to have `properties` defined"
+msgstr ""
-msgctxt "°°°°°°plural"
-msgid "{{frames}} {{type}} frame detected in clip°°°°°°"
-msgstr "{{frames}} {{type}} frame oppdaga i klippet°°°°°°"
+msgid "Table is only allowed the wildcard `patternProperties`"
+msgstr ""
-#~ msgid "Welcome to the Sofie Automation system"
-#~ msgstr "Velkomen til Sofie"
+msgid "Tables are not supported here"
+msgstr ""
-#~ msgid "Sofie Automation version"
-#~ msgstr "Sofie-versjon"
+msgid "Tag"
+msgstr "Tag"
-#~ msgid "Sofie status"
-#~ msgstr "Sofie-status"
+msgid "Tags must contain"
+msgstr "Tagger må innehalde"
-#~ msgid "Using local Sofie order"
-#~ msgstr "Rekkefølgje satt i Sofie"
+msgid "Take"
+msgstr "Take"
-#~ msgid "Change order in playlist to override"
-#~ msgstr "Gjør ei endring for å overstyre"
+msgid "Take a Full System Snapshot"
+msgstr "Lagre eit fullt systemsnapshot"
-#~ msgid "Register Shortcuts for this Panel"
-#~ msgstr "Legg til snarvegar for dette panelet"
+msgid "Take a Snapshot"
+msgstr "Lagre eit snapshot"
-#~ msgid "Cannot play this AdLib becasue it is marked as Invalid"
-#~ msgstr "Kan ikkje spele av adlib fordi den er markert som ugyldig"
+msgid "Take a Snapshot for studio \"{{studioName}}\" only"
+msgstr "Lagre eit studiosnapshot utelukkande for \"{{studioName}}\""
-#~ msgid "Cannot play this AdLib becasue it is marked as Floated"
-#~ msgstr "Kan ikkje spele av adlib fordi det er markert som på vent (float)"
+msgid "Take and Download Memory Heap Snapshot"
+msgstr ""
-#~ msgid ""
-#~ "The Rundown was attempted to be moved out of the Playlist when it was on "
-#~ "Air. Move it back and try again later."
-#~ msgstr ""
-#~ "Køyreplanen vart forsøkt flytta ut av spillelista mens den var OnAir. "
-#~ "Flytt den attende og prøv igjen seinare."
+msgid "Take System Snapshot"
+msgstr ""
-#~ msgid "Next Break"
-#~ msgstr "Neste pause"
+msgid "Take System Snapshot failed: {{errorMessage}}"
+msgstr ""
-#~ msgid "Using {{nrcsName}} order"
-#~ msgstr "Nytter rekkefølgje frå {{nrcsName}}"
+msgid "Taking Piece"
+msgstr ""
-#~ msgid "Log Error"
-#~ msgstr "Loggfør feil"
+msgid "Technical reason: {{reason}}"
+msgstr "Teknisk årsak: {{reason}}"
-#~ msgid "Shortcut List"
-#~ msgstr "Liste over hurtigtastar"
+msgid "test"
+msgstr ""
-#~ msgid "Clear Shortcut"
-#~ msgstr "Fjern hurtigtast"
+msgid "Test ERROR message"
+msgstr ""
-#~ msgid "Assign Hotkeys to Global AdLibs"
-#~ msgstr "Tildel hurtigtastar til globale adliber"
+msgid "Test Info message"
+msgstr ""
-#~ msgid "Activate Sticky Piece Shortcut"
-#~ msgstr "Aktiver hurtigtast for sticky element"
+msgid "test partInstance"
+msgstr ""
-#~ msgid "Escape from filter search"
-#~ msgstr "Gå ut av filtersøk"
+msgid "test pieceInstance"
+msgstr ""
-#~ msgid "Info"
-#~ msgstr "Info"
+msgid "test playlist"
+msgstr ""
-#~ msgid "File name"
-#~ msgstr "Filnamn"
+msgid "test rundown"
+msgstr ""
-#~ msgid "Last Updated"
-#~ msgstr "Sist oppdatert"
+msgid "Test test"
+msgstr "Test test"
-#~ msgid "Invalid"
-#~ msgstr "Ugyldig"
+msgid "Test Tools"
+msgstr "Testverktøy"
-#~ msgid "New Tab"
-#~ msgstr "Ny fane"
+msgid "test2"
+msgstr ""
-#~ msgid "New Panel"
-#~ msgstr "Nytt panel"
+msgid "Text"
+msgstr "Tekst"
-#~ msgid "Expose as a layout for the shelf"
-#~ msgstr "Eksponer som ein layout for skuffen"
+msgid "Text to show above countdown to end of show"
+msgstr "Tekst som blir vist over nedteljing til venta slutt"
-#~ msgid "Tabs"
-#~ msgstr "Faner"
+msgid "Text to show above countdown to next break"
+msgstr "Tekst som blir vist over nedteljing til neste pause"
-#~ msgid "Panels"
-#~ msgstr "Paneler"
+msgid "Text to show above show end time"
+msgstr "Tekst som blir vist over klokkeslett for sendeslutt"
-#~ msgid "Add tab"
-#~ msgstr "Legg til fane"
+msgid "Text to show above show start time"
+msgstr "Tekst som blir vist over klokkeslett for sendestart"
-#~ msgid "Add panel"
-#~ msgstr "Legg til panel"
+msgid ""
+"The config UI is now driven by manifests fed by the device. This device "
+"needs updating to provide the configManifest to be configurable"
+msgstr ""
+"Brukergrensesnitt for konfigurasjon drivast no av manifest mata frå "
+"einingane. Denne einga må oppdaterast for å gjere configManifest "
+"konfigurerbart"
-#~ msgid "Shelf Layouts"
-#~ msgstr "Layouter for skuffen"
+msgid "The following parts no longer exist in {{nrcs}}: {{partNames}}"
+msgstr "Dei følgande delane eksisterer ikkje lenger i {{nrcs}}: {{partNames}}"
-#~ msgid "Show style"
-#~ msgstr "Showstyle"
+msgid "The migration can be completed automatically."
+msgstr "Migreringa kan gjerast ferdig automatisk."
-#~ msgid "Clip can't be played because the filename is missing"
-#~ msgstr "Klippet kan ikkje spelast av fordi filnamnet mangler"
+msgid ""
+"The migration consists of several phases, you will get more options after "
+"you've this migration"
+msgstr ""
+"Migreringa har fleire fasar, du vil få fleire val etter at du har køyrd "
+"denne migreringa"
-#~ msgid "Clip format ({{format}}) is not in one of the accepted formats"
-#~ msgstr "Klippformatet ({{format}}) er ikkje støtta"
+msgid "The migration was completed successfully!"
+msgstr "Migreringa var vellukka!"
-#~ msgid "Activate"
-#~ msgstr "Aktiver"
+msgid "The old data was removed."
+msgstr "Gamle data vart fjerna."
-#, fuzzy
-#~| msgid "Mark the rundown as unsynced"
-#~ msgid "Leave it in Sofie (mark the rundown as unsynced)"
-#~ msgstr "Marker køyreplan som ikkje-synkronisert"
+msgid ""
+"The planned end time has passed, are you sure you want to activate this "
+"Rundown?"
+msgstr ""
+"Det planlagte sluttidspunktet er passert, er du sikker på at du vil "
+"aktivere denne køyreplanen?"
-#, fuzzy
-#~| msgid "Remove just the rundown"
-#~ msgid "Remove just the rundown from Sofie"
-#~ msgstr "Fjern berre køyreplan"
+msgid "The progress of all steps"
+msgstr "Framdrift for alle steg"
-#~ msgid "CasparCG Channel"
-#~ msgstr "CasparCG-kanal"
+msgid "The progress of steps required for playout"
+msgstr "Framdrift for steg som er naudsynte for avspeling"
-#~ msgid "The CasparCG channel to use (1 is the first)"
-#~ msgstr "CasparCG-kanalen som skal nyttast (1 er den første)"
+msgid ""
+"The rundown \"{{rundownName}}\" is not published or activated in "
+"{{nrcsName}}! No data updates will currently come through."
+msgstr ""
+"Køyreplanen \"{{rundownName}}\" er ikkje synkronisert med MOS/{{nrcsName}}! "
+"Kontroller at den er satt til MOS Active i ENPS."
-#~ msgid "CasparCG Layer"
-#~ msgstr "CasparCG-lag"
+msgid "The rundown can not be reset while it is active"
+msgstr "Ein aktivert køyreplan kan ikkje tilbakestillast"
-#~ msgid "The layer in a channel to use"
-#~ msgstr "Kanallaget som skal nyttast"
+msgid ""
+"The Rundown was attempted to be moved out of the Playlist when it was on "
+"Air. Move it back and try again later."
+msgstr ""
-#~ msgid "Preview when not on air"
-#~ msgstr "Vis preview når ikkje OnAir"
+msgid ""
+"The rundown you are trying to execute a take on is inactive, would you like "
+"to activate this rundown?"
+msgstr ""
+"Du prøve å gjere ein Take i ein inaktiv køyreplan. Vil du aktivere denne "
+"køyreplanen?"
-#~ msgid "Mapping type"
-#~ msgstr "Mappingtype"
+msgid ""
+"The rundown: \"{{rundownName}}\" will need to be deactivated in order to "
+"activate this one.\n"
+"\n"
+"Are you sure you want to activate this one anyway?"
+msgstr ""
-#~ msgid "Index"
-#~ msgstr "Index"
+msgid ""
+"The segment duration in the segment header always displays the planned "
+"duration instead of acting as a counter"
+msgstr ""
+"Tittelen si lengde i tittelheaderen vil alltid vise den planlagde lengda i "
+"staden for å telje ned"
-#~ msgid "Identifier"
-#~ msgstr "Identifikator"
+msgid "The selected part cannot be played"
+msgstr ""
-#~ msgid "Sisyfos Channel"
-#~ msgstr "Sisyfos-kanal"
+msgid "The selected part does not exist"
+msgstr ""
-#~ msgid "Quantel Port ID"
-#~ msgstr "Quantel port-id"
+msgid ""
+"The system configuration has been changed since importing this rundown. It "
+"might not run correctly"
+msgstr ""
+"Systemoppsettet har verte endra etter at denne køyreplanen vart importert. "
+"Køyreplanen kan verte spelt av med feil"
-#~ msgid "The name you'd like the port to have"
-#~ msgstr "Namnet du vil gje porten"
+msgid "The type of device to use for the output"
+msgstr "Einingtype som skal nyttast for utgangen"
-#~ msgid "Quantel Channel ID"
-#~ msgstr "Quantel kanal-id"
+msgid "The type of mapping to use"
+msgstr ""
-#~ msgid "The channel to use for output (0 is the first one)"
-#~ msgstr "Kanalen som skal nyttast som utgang (0 er den første)"
+msgid "The way this Route Set should behave towards the user"
+msgstr "Måten denne omkoplingsgruppa skal oppføre seg overfor brukaren"
-#~ msgid "Mode"
-#~ msgstr "Modus"
+msgid "Then, run the migrations script:"
+msgstr "Køyr deretter migreringsprosedyra:"
-#~ msgid "Preset"
-#~ msgstr "Preset"
+msgid "There are no AB Playout devices set up yet"
+msgstr ""
-#~ msgid "Preset Transition Speed"
-#~ msgstr "Preset transition-hastigheit"
+msgid "There are no Accessors set up."
+msgstr "Ingen aksessorer er satt opp."
-#~ msgid "Zoom Speed"
-#~ msgstr "Zoom-hastigheit"
+msgid "There are no active rundowns."
+msgstr "Fann ingen aktive køyreplanar."
-#~ msgid "Unknown Mapping"
-#~ msgstr "Ukjend lag"
+msgid "There are no exclusivity groups set up."
+msgstr "Ingen eksklusivitetsgrupper er satt opp."
-#~ msgid "Channel: {{channel}}"
-#~ msgstr "Kanal: {{channel}}"
+msgid "There are no filters set up yet"
+msgstr "Det er ikkje satt opp noko filter enno"
-#~ msgid "Port: {{port}}, Channel: {{channel}}"
-#~ msgstr "Port: {{port}}, Kanal: {{channel}}"
+msgid ""
+"There are no Playout Gateways connected and attached to this studio. Please "
+"contact the system administrator to start the Playout Gateway."
+msgstr ""
+"Dette studioet har ingen tilkopla playout-gatewayar. Kontakt "
+"systemadministrator for å starte den."
-#~ msgid "Unknown device type: {{device}}"
-#~ msgstr "Ukjend einingtype: {{device}}"
+msgid "There are no Route Sets set up."
+msgstr "Det er ikkje satt opp omkoplingar enno."
-#~ msgid "Delete this RundownPlaylist?"
-#~ msgstr "Slett denne køyreplanlista?"
+msgid "There are no routes set up yet"
+msgstr "Det er ikkje satt opp omkoplingar enno"
-#~ msgid "Are you sure you want to delete the \"{{name}}\" RundownPlaylist?"
-#~ msgstr "Er du sikker på at du vil slette køyreplanlista \"{{name}}\"?"
+msgid "There are no rundowns ingested into Sofie."
+msgstr "Det er ikkje send køyreplanar til Sofie."
-#~ msgid "Re-Sync this rundownPlaylist?"
-#~ msgstr "Synkroniser køyreplanlista på nytt?"
+msgid "There are no sub-devices for this gateway"
+msgstr ""
-#~ msgid ""
-#~ "Are you sure you want to re-sync all rundowns in playlist \"{{name}}\"?"
-#~ msgstr ""
-#~ "Er du sikker på at du vil synkronisere alle køyreplanane i køyreplanlista "
-#~ "\"{{name}}\" om att?"
+msgid "There is an unknown problem with the part."
+msgstr "Det er eit ukjend problem med denne delen."
-#~ msgid "Timeline views"
-#~ msgstr "Tidslinjevisningar"
+msgid "There is an unspecified problem with the source."
+msgstr "Det er eit ikkje-spesifisert problem med kjelden."
-#~ msgid "Multiple ({{count}})"
-#~ msgstr "Fleire ({{count}})"
+msgid "There is no rundown active in this studio."
+msgstr "Fann ingen aktive køyreplanar for dette studioet."
-#~ msgid "Re-sync all rundowns in playlist"
-#~ msgstr "Synkroniser alle køyreplanane i lista på nytt"
+msgid ""
+"There was an error when troubleshooting the device: \"{{deviceName}}\": "
+"{{errorMessage}}"
+msgstr ""
+"Det hende ein feil under feilsøking av eininga \"{{deviceName}}\": "
+"{{errorMessage}}"
-#~ msgid ""
-#~ "Do you really want to remove the rundownPlaylist \"{{rundownName}}\"? "
-#~ "This cannot be undone!"
-#~ msgstr ""
-#~ "Er du sikker på at du vil slette køyreplanen {{rundownName}} i lista "
-#~ "{{playlistName}} frå Sofie? Denne handlinga kan du ikkje angre!"
+msgid "There was an error: {{error}}"
+msgstr "Det skjedde ein feil: {{error}}"
-#~ msgid "Cue as Next"
-#~ msgstr "Sett som neste"
+msgid "This action has an invalid combination of filters"
+msgstr "Denne handlinga har ein ugydlig kombinasjon av filtre"
-#~ msgid "Edit"
-#~ msgstr "Endre"
+msgid "This affects how much is logged to the console on the server"
+msgstr "Dette påverkar kor mykje som blir logga til serverkonsollen"
-#~ msgctxt "°°°°°°plural"
-#~ msgid "Multiple ({{count}})°°°°°°"
-#~ msgstr "Fleire ({{count}})°°°°°°"
+msgid "This blueprint has not provided a valid config schema"
+msgstr ""
-#~ msgid "Add rundowns by connecting a gateway."
-#~ msgstr "Legg til køyreplanar ved å kople til ein gateway."
+msgid "This Blueprint is not being used by any Show Style"
+msgstr "Dette blueprintet er ikkje i bruk av nokon showstyles"
-#~ msgid "Check system status messages."
-#~ msgstr "Kontroller systemstatusmeldingar."
+msgid "This Blueprint is not compatible with any Studio"
+msgstr "Dette blueprintet er ikkje kompatibel med noko studio"
-#~ msgid "Air Status"
-#~ msgstr "Status for sendinga"
+msgid "This clip ends with black frames after {{seconds}} seconds"
+msgstr ""
-#~ msgid "Sofie Automation Server"
-#~ msgstr "Sofie"
+msgid "This clip ends with freeze frames after {{seconds}} seconds"
+msgstr ""
-#~ msgid "Connecting to the {{platformName}}"
-#~ msgstr "Koplar til {{platformName}}"
+msgid "This could leave the configuration in a broken state"
+msgstr ""
-#~ msgid "Cannot connect to the {{platformName}}: {{reason}}"
-#~ msgstr "Kan ikkje kople til Sofie-serveren: {{reason}}"
+msgid "This enables or disables buckets in the UI - enabled is the default behavior"
+msgstr ""
-#~ msgid "Reconnecting to the {{platformName}}"
-#~ msgstr "Koplar til {{platformName}} på nytt"
+msgid ""
+"This enables or disables the evaluationform in the UI - enabled is the "
+"default behavior"
+msgstr ""
-#~ msgid "Your machine is offline and cannot connect to the {{platformName}}."
-#~ msgstr "Maskina di er fråkopla og kan ikkje kople til {{platformName}}."
+msgid "This feature enables the use of the Properties Panel and the Edit Mode"
+msgstr ""
-#~ msgid "Connected to the {{platformName}}."
-#~ msgstr "Kopla til {{platfromName}}."
+msgid "This has only been tested for the iNews gateway"
+msgstr ""
-#~ msgid "Reconnect now"
-#~ msgstr "Kople til på nytt"
+msgid "This is not in it's normal setting"
+msgstr "Denne innstillinga er vorte endra frå standardverdien"
-#, fuzzy
-#~ msgid "Switching route"
-#~ msgstr "Omkoplinger"
+msgid ""
+"This migration consists of {{stepCount}} steps ({{ignoredStepCount}} steps "
+"are ignored)."
+msgstr ""
-#, fuzzy
-#~ msgid "Are you sure you want to enable this route: \"{{routeName}}\"?"
-#~ msgstr ""
-#~ "Er du sikker på at du vil aktivere denne omkoplinga: \"{{routeName}}\"?"
+msgid "This must be assigned to a device to be able to edit the settings"
+msgstr ""
-#, fuzzy
-#~ msgid "Are you sure you want to disable this route: \"{{routeName}}\"?"
-#~ msgstr ""
-#~ "Er du sikker på at du vil deaktivere denne omkoplinga: \"{{routeName}}\"?"
+msgid "This name will be shown in the title bar of the window"
+msgstr "Dette namnet vert vist i tittellinja for vindauget"
-#~ msgid "Source Layer ID"
-#~ msgstr "Opprinneleg lag-id"
+msgid "This playlist is empty"
+msgstr "Denne spelelista er tom"
-#~ msgid "Test Tools – Recordings"
-#~ msgstr "Testverktøy - Opptak"
+msgid ""
+"This requires the blueprints to implement the "
+"`generateAdlibTestingIngestRundown` method"
+msgstr ""
-#~ msgid "Path Prefix"
-#~ msgstr "Stiprefiks"
+msgid "This rundown has been unpublished from Sofie."
+msgstr "Denne køyreplanen er ikkje lenger tilgjengeleg i Sofie."
-#~ msgid "URL Prefix"
-#~ msgstr "Adresseprefix (url)"
+msgid "This rundown is currently active"
+msgstr "Denne køyreplanen er allereie aktiv"
-#~ msgid "Decklink Input Index"
-#~ msgstr "Decklink-inngang"
+msgid "This rundown is now active. Are you sure you want to exit this screen?"
+msgstr "Denne køyreplanen er aktiv. Er du sikker på at du vil avslutte?"
-#~ msgid "Decklink Input Format"
-#~ msgstr "Format for Decklink-inngang"
+msgid "This rundown will loop indefinitely"
+msgstr "Denne køyreplanen vil gå i ein uendeleg loop"
-#~ msgid "Recordings"
-#~ msgstr "Opptak"
+msgid "This Show Style is not compatible with any Studio"
+msgstr "Denne showstylen er ikkje kompatibelt med noko studio"
-#~ msgid "A required setting is not configured"
-#~ msgstr "Ei obligatorisk innstilling er ikkje konfigurert"
+msgid "This step is required for playout"
+msgstr "Dette steget er naudsynt for avspeling"
-#~ msgid "Are you sure you want to delete recording \"{{name}}\"?"
-#~ msgstr "Er du sikker på at du vil slette opptaket \"{{name}}\"?"
+msgid "This studio doesn't exist."
+msgstr "Dette studioet eksisterer ikkje."
-#~ msgid "Stopped"
-#~ msgstr "Stoppa"
+msgid "This will remove {{indexCount}} old indexes, do you want to continue?"
+msgstr "Dette vil fjerne {{indexCount}} gamle indexer. Vil du fortsette?"
-#~ msgid "Your browser does not support video playback"
-#~ msgstr "Nettlesaren støtter ikkje videoavspeling"
+msgid "Time from platform user event to Action received by Core"
+msgstr ""
-#~ msgid "Recording still in progress"
-#~ msgstr "Opptak held framleis på"
+msgid "Time since planned end"
+msgstr "Tid sidan planlagt slutt"
-#~ msgid "MOS Connection"
-#~ msgstr "MOS-tilkopling"
+msgid "Time since rehearsal end"
+msgstr ""
-#~ msgid "Infinite"
-#~ msgstr "Manuell"
+msgid "Time to planned end"
+msgstr "Tid til planlagt slutt"
-#~ msgid "File Name"
-#~ msgstr "Filnamn"
+msgid "Time to planned start"
+msgstr ""
-#~ msgid "System Messages"
-#~ msgstr "Systemmeldingar"
+msgid "Time to rehearsal end"
+msgstr ""
-#~ msgid ""
-#~ "Are you sure you want to delete this runtime argument \"{{property}}: "
-#~ "{{value}}\"?"
-#~ msgstr ""
-#~ "Er du sikker på at du vil slette runtimeargumentet \"{{property}}: "
-#~ "{{value}}\"?"
+msgid "Timeline"
+msgstr "Tidslinje"
-#~ msgid "Property"
-#~ msgstr "Eigenskap"
+msgid "Timeline Datastore"
+msgstr ""
-#~ msgid "Runtime Arguments for Blueprints"
-#~ msgstr "Runtimeargument for blueprints"
+msgid "Times"
+msgstr "Tider"
-#~ msgid "Source is not set"
-#~ msgstr "Kjelde er ikkje satt"
+msgid "Timestamp"
+msgstr "Tidsstempel"
-#~ msgid "{{displayName}}: {{messages}}"
-#~ msgstr "{{displayName}}: {{messages}}"
+msgid "To inspect the memory heap snapshot, use Chrome DevTools"
+msgstr ""
-#~ msgid "Params"
-#~ msgstr "Parametrar"
+msgid "Today"
+msgstr "I dag"
-#~ msgid "Make ready commands"
-#~ msgstr "Klargjeringskommandoar"
+msgid "Toggle"
+msgstr "Veklse"
-#~ msgid "Remove this command?"
-#~ msgstr "Fjern denne kommandoen?"
+msgid "Toggle AdLibs on single mouse click"
+msgstr "Veksle mellom adliber med enkelt museklikk"
-#~ msgid "Are you sure you want to remove this command?"
-#~ msgstr "Er du sikker på at du vil fjerne denne kommandoen?"
+msgid "Toggle Shelf"
+msgstr "Skuff"
-#~ msgid "Queue"
-#~ msgstr "Kø"
+msgid "Toggle Support Panel"
+msgstr ""
-#~ msgid "Hosts"
-#~ msgstr "Vertar"
+msgid "Toggled Label"
+msgstr ""
-#~ msgid "iNews Queues"
-#~ msgstr "iNews-køar"
+msgid "Tomorrow"
+msgstr "I morgon"
-#~ msgid "User"
-#~ msgstr "Brukar"
+msgid "Tools"
+msgstr "Verktøy"
-#~ msgid "Debug logging"
-#~ msgstr "Logging for feilsøking"
+msgid "Top"
+msgstr ""
-#~ msgid "Storage ID"
-#~ msgstr "Lager-id"
+msgid "Transition"
+msgstr "Effekt"
-#~ msgid "Base Path"
-#~ msgstr "Rotsti"
+msgid "Treat as Main content"
+msgstr ""
-#~ msgid "Media Path"
-#~ msgstr "Mediesti"
+msgid "Trigger dead zone"
+msgstr ""
-#~ msgid "Mapped Networked Drive"
-#~ msgstr "Stasjonsbokstav"
+msgid "Trigger Mode"
+msgstr ""
-#~ msgid "Username"
-#~ msgstr "Brukarnamn"
+msgid "Triggered Actions failed to upload: {{errorMessage}}"
+msgstr "Opplasting av handlingsutløysarar feila: {{errorMessage}}"
-#~ msgid "Don't Scan Entire Storage"
-#~ msgstr "Ikkje scan heile lagringsområdet"
+msgid "Triggered Actions uploaded successfully."
+msgstr "Opplasting av handlingsutløysarar var vellukka."
-#~ msgid "Base path is a network share"
-#~ msgstr "Rotsti er ein nettverksressurs"
+msgid "Trim \"{{name}}\""
+msgstr "Trim \"{{name}}\""
-#~ msgid "Media Flow ID"
-#~ msgstr "Medieflyt-id"
+msgid "Trimmed successfully."
+msgstr ""
-#~ msgid "Media Flow Type"
-#~ msgstr "Medieflyttype"
+msgid "Trimming this clip has failed due to an error: {{error}}."
+msgstr "Endring av inn-/utpunkt for dette klippet feila: {{error}}."
-#~ msgid "Source Storage"
-#~ msgstr "Kjelden sitt lagringsområde"
+msgid ""
+"Trimming this clip has timed out. It's possible that the story is currently "
+"locked for writing in {{nrcsName}} and will eventually be updated. Make "
+"sure that the story is not being edited by other users."
+msgstr ""
+"Endring av inn-/utpunkt for dette klippet tek lang tid. Det er mogleg "
+"manuset i er låst i {{nrcsName}} og at inn-/utpunkt endrast om litt. "
+"Forsikre deg om at manuset ikkje vert redigert av andre brukarar."
-#~ msgid "Target Storage"
-#~ msgstr "Målet sitt lagringsområde"
+msgid ""
+"Trimming this clip is taking longer than expected. It's possible that the "
+"story is locked for writing in {{nrcsName}}."
+msgstr ""
+"Endring av inn-/utpunkt for dette klippet tek meir tid enn forventa. Det er "
+"mogleg manuset er låst for redigering i {{nrcsName}}."
-#~ msgid "Delete this Monitor?"
-#~ msgstr "Slett denne monitoren?"
+msgid "Troubleshoot"
+msgstr "Feilsøk"
-#~ msgid "Are you sure you want to delete the monitor \"{{monitorId}}\"?"
-#~ msgstr "Er du sikker på at du vil slette monitoren \"{{monitorId}}\"?"
+msgid "TSR"
+msgstr ""
-#~ msgid "ID already exists"
-#~ msgstr "Denne id-en eksisterar allereie"
+msgid "Type"
+msgstr "Type"
-#~ msgid "The ID {{monitorId}} already exists!"
-#~ msgstr "Monitor-id-en {{monitorId}} eksisterar allereie!"
+msgid "Unable to check the system configuration for changes"
+msgstr "Kan ikkje kontrollere endringar i systemoppsettet"
-#~ msgid "Monitor ID"
-#~ msgstr "Monitor-id"
+msgid "Unable to upgrade"
+msgstr ""
-#~ msgid "Monitor Type"
-#~ msgstr "Monitortype"
+msgid "Unassign"
+msgstr "Fjern tilordning"
-#~ msgid "Media Scanner Host"
-#~ msgstr "Vert for mediascanner"
+msgid "Unconfigured"
+msgstr ""
-#~ msgid "Media Scanner Port"
-#~ msgstr "Port for mediascanner"
+msgid "Under"
+msgstr ""
-#~ msgid "Quantel ISA URL"
-#~ msgstr "Quantel ISA-adresse (url)"
+msgid "Undo"
+msgstr "Angre"
-#~ msgid "Quantel Server ID"
-#~ msgstr "Quantel server-id"
+msgid "Undo Disable the next element"
+msgstr "Unskip neste super"
-#~ msgid "No. of Available Workers"
-#~ msgstr "Tal på tilgjengelege Workers"
+msgid "Undo Hold"
+msgstr "Angre hold"
-#~ msgid "File Linger Time"
-#~ msgstr "Maks ventetid for fil"
+msgid "Unknown"
+msgstr "Ukjend"
-#~ msgid "Workflow Linger Time"
-#~ msgstr "Maks ventetid for arbeidsflyt"
+msgid "Unknown action"
+msgstr ""
-#~ msgid "Cron-Job Interval Time"
-#~ msgstr "Tidsintervall for Cron-Jobs"
+msgid "Unknown error"
+msgstr "Ukjend feil"
-#~ msgid "Activate Debug Logging"
-#~ msgstr "Aktiver logging for feilsøking"
+msgid "Unknown Layer"
+msgstr "Ukjend lag"
-#~ msgid "Remove this storage?"
-#~ msgstr "Fjern dette lagringsområdet?"
+msgid "Unknown Package \"{{packageId}}\""
+msgstr "Ukjend pakke \"{{packageId}}\""
-#~ msgid "Remove this flow?"
-#~ msgstr "Fjern denne flyten?"
+msgid "Unnamed blueprint"
+msgstr "Blueprint utan namn"
-#~ msgid "Are you sure you want to remove flow \"{{flowId}}\"?"
-#~ msgstr "Er du sikker på at du vil fjerne flyten \"{{flowId}}\"?"
+msgid "Unnamed Show Style"
+msgstr "Showstyle utan namn"
-#~ msgid "Attached Storages"
-#~ msgstr "Tilkopla lagringsområder"
+msgid "Unnamed Studio"
+msgstr "Studio utan namn"
-#~ msgid "Media Flows"
-#~ msgstr "Medieflytar"
+msgid "Unnamed variant"
+msgstr "Variant utan namn"
-#~ msgid "Monitors"
-#~ msgstr "Monitorar"
+msgid "Unsupported array type \"{{ type }}\""
+msgstr ""
-#~ msgid "Primary ID (Newsroom System MOS ID)"
-#~ msgstr "Primær id (News Room System MOS ID)"
+msgid "Unsupported field type \"{{ type }}\""
+msgstr ""
-#~ msgid "Primary Host (IP or Hostname)"
-#~ msgstr "Primær vert (ip-adresse eller vertsnamn)"
+msgid "Unsyncing Rundown"
+msgstr ""
-#~ msgid "Primary: dont use MOS query-port"
-#~ msgstr "Primær: Ikkje bruk MOS Query-port"
+msgid "Until"
+msgstr ""
-#~ msgid "Secondary ID (Newsroom System MOS ID)"
-#~ msgstr "Sekundær id (News Room System MOS ID)"
+msgid "Until end of rundown"
+msgstr "Til slutten av køyreplanen"
-#~ msgid "Secondary Host (IP Address or Hostname)"
-#~ msgstr "Sekundær vert (ip-adresse eller vertsnamn)"
+msgid "Until End of Rundown"
+msgstr ""
-#~ msgid "Secondary: dont use MOS query-port"
-#~ msgstr "Sekundær: Ikkje bruk MOS Query-port"
+msgid "Until end of segment"
+msgstr "Til slutten av segment"
-#~ msgid "MOS ID of Gateway (Sofie MOS ID)"
-#~ msgstr "MOS-id for gateway (Sofie MOS ID)"
+msgid "Until End of Segment"
+msgstr ""
-#~ msgid "Device id"
-#~ msgstr "Einings-id"
+msgid "Until end of showstyle"
+msgstr "Til slutten av showstyle"
-#~ msgid "Thread Usage"
-#~ msgstr "Trådar i bruk"
+msgid "Until End of Showstyle"
+msgstr ""
-#~ msgid "Port"
-#~ msgstr "Port"
+msgid "Until next rundown"
+msgstr "Til neste køyreplan"
-#~ msgid "CasparCG Launcher Host"
-#~ msgstr "Vert for CasparCG Launcher"
+msgid "Until Next Rundown"
+msgstr ""
-#~ msgid "CasparCG Launcher Port"
-#~ msgstr "Port for CasparCG Launcher"
+msgid "Until next segment"
+msgstr "Til neste segment"
-#~ msgid "Minimum recording time"
-#~ msgstr "Minimum lengde for opptak"
+msgid "Until Next Segment"
+msgstr ""
-#~ msgid "Enable SSL"
-#~ msgstr "Aktiver SSL"
+msgid "Until next take"
+msgstr "Til neste Take"
-#~ msgid "HTTPMethod"
-#~ msgstr "HTTPMethod"
+msgid "Until Next Take"
+msgstr ""
-#~ msgid "expectedHttpResponse"
-#~ msgstr "expectedHttpResponse"
+msgid "Update"
+msgstr "Oppdater"
-#~ msgid "Keyword"
-#~ msgstr "Nøkkelord"
+msgid "Update Blueprints?"
+msgstr "Oppdater blueprints?"
-#~ msgid "Interval"
-#~ msgstr "Intervall"
+msgid "Updated"
+msgstr "Oppdatert"
-#~ msgid "(Optional) REST port"
-#~ msgstr "(Valfri) REST-port"
+msgid "Upgrade config for {{name}}"
+msgstr ""
-#~ msgid "(Optional) Websocket port"
-#~ msgstr "(Valfri) Websocket-port"
+msgid "Upgrade Database"
+msgstr "Oppgrader databasen"
-#~ msgid "Show ID"
-#~ msgstr "Show-id"
+msgid "Upgrade required"
+msgstr ""
-#~ msgid "Profile"
-#~ msgstr "Profil"
+msgid "Upgrade Status"
+msgstr ""
-#~ msgid "(Optional) Playlist id"
-#~ msgstr "(Valfri) Spilleliste-id"
+msgid "Upload"
+msgstr "Last opp"
-#~ msgid "Preload all elements"
-#~ msgstr "Last inn alle element på førehand"
+msgid "Upload a new blueprint"
+msgstr "Last opp eit nytt blueprint"
-#~ msgid "Automatically load internal elements when added"
-#~ msgstr "Last interne element automatisk når dei vert lagd til"
+msgid "Upload a snapshot file"
+msgstr ""
-#~ msgid "Only preload elements in active Rundown"
-#~ msgstr "Berre last inn element i aktiv kjøreplan på førehand"
+msgid ""
+"Upload a snapshot file (restores additional info not directly related to a "
+"Playlist / Rundown, such as Packages, PackageWorkStatuses etc"
+msgstr ""
-#~ msgid "Activate Multi-Threading"
-#~ msgstr "Bruk fleire trådar"
+msgid "Upload Blueprints"
+msgstr "Last opp blueprints"
-#~ msgid "Activate Multi-Threaded Timeline Resolving"
-#~ msgstr "Bruk fleire trådar for Timeline Resolving"
+msgid "Upload Layout?"
+msgstr "Last opp layout?"
-#~ msgid "(Restart to apply)"
-#~ msgstr "(Start om att for å ta i bruk endringar)"
+msgid "Upload Snapshot"
+msgstr "Last opp snapshot"
-#, fuzzy
-#~ msgid "Report command timings on all commangs"
-#~ msgstr "Rapporter kommandotider for alle commangs"
+msgid "Upload Snapshot (for debugging)"
+msgstr ""
-#~ msgid "Drive folder name"
-#~ msgstr "Mappenamn på Drive"
+msgid "Upload stored Action Triggers"
+msgstr "Last opp lagra handlingsutløysarar"
-#~ msgid "Provide the name of the folder to download rundowns from"
-#~ msgstr "Oppgje namnet på mappa køyreplanar skal lastas ned frå"
+msgid "URL"
+msgstr "Adresse (url)"
-#, fuzzy
-#~ msgid ""
-#~ "Go to the url below and click on the \"Enable the Drive API\" button. "
-#~ "Then click on \"Download Client configuration\", save the credentials."
-#~ "json file and upload it here."
-#~ msgstr ""
-#~ "Gå til lenka under og klikk på \"Enable the Drive API\"-knappen. Klikk "
-#~ "deretter på \"Download Client configuration\", lagre credentials.json-"
-#~ "fila og last den opp her."
+msgid "URL to the Quantel FileFlow Manager"
+msgstr "Adresse til Quantel FileFlow Manager"
-#~ msgid "Row"
-#~ msgstr "Rad"
+msgid "URL to the Quantel Gateway"
+msgstr "Start Quantel-gateway om att"
-#~ msgid "Cannot connect to the"
-#~ msgstr "Kan ikkje kople til"
+msgid "URL to the Quantel HTTP transformer"
+msgstr "Adresse til Quantel HTTP transformer"
-#~ msgid "Sofie Automation Server:"
-#~ msgstr "Sofie:"
+msgid "URLs to the ISAs, in order of importance (comma separated)"
+msgstr "Adresser (url-er) for ISA-ene (kommaseparert i prioritert rekkefølgje)"
-#~ msgid "rows"
-#~ msgstr "rader"
+msgid "Use {{nrcsName}} order"
+msgstr "Nytt rekkefølgje frå {{nrcsName}}"
-#~ msgid "Delete this Item?"
-#~ msgstr "Slett dette elementet?"
+msgid "Use as default"
+msgstr ""
-#~ msgid "Set Database Version"
-#~ msgstr "Sett databaseversjon"
+msgid "Use color of primary piece as background of panel"
+msgstr ""
-#~ msgid "Are you sure you want to set the database version to"
-#~ msgstr "Er du sikker på at du vil sette databaseversjon til"
+msgid "Use Trigger Mode"
+msgstr "Type utløysar"
-#~ msgid "Restart this device?"
-#~ msgstr "Start denne eininga på nytt?"
+msgid "User Activity Log"
+msgstr "Aktivitetslogg"
-#~ msgid "Is unlimited"
-#~ msgstr "Er utan grenser"
+msgid "User ID"
+msgstr "Brukar-id"
-#~ msgid "Is on clean PGM"
-#~ msgstr "Ligg på cleanfeed"
+msgid "User Log"
+msgstr "Brukarlogg"
-#~ msgid "Reload Rundown"
-#~ msgstr "Last inn køyreplanen på nytt"
+msgid "User Name"
+msgstr "Brukernamn"
-#~ msgid "ID"
-#~ msgstr "ID"
+msgid "Username for authentication"
+msgstr ""
-#~ msgid "status"
-#~ msgstr "status"
+msgid "Validate and Apply Config"
+msgstr ""
-#~ msgid "Nyman's Playground"
-#~ msgstr "Testar"
+msgid "Validation failed!"
+msgstr ""
-#~ msgid "channel"
-#~ msgstr "kanal"
+msgid "Value"
+msgstr "Verdi"
-#~ msgid "layer"
-#~ msgstr "lag"
+msgid "Value between 0 and 1"
+msgstr ""
-#~ msgctxt "item"
-#~ msgid "new_config"
-#~ msgstr "new_config"
+msgid "Variants"
+msgstr "Variantar"
-#~ msgid "No studios are compatible with this blueprint"
-#~ msgstr "Inga studio er kompatible med denne showstylen"
+msgid "version"
+msgstr "versjon"
-#~ msgid "No studios are compatible with this Show Style"
-#~ msgstr "Inga studio er kompatible med denne showstylen"
+msgid "Version"
+msgstr "Versjon"
-#~ msgid "Refresh"
-#~ msgstr "Oppdater"
+msgid "Version for {{name}}: From {{fromVersion}} to {{toVersion}}"
+msgstr "Versjon for {{name}}: Frå {{fromVersion}} til {{toVersion}}"
-#~ msgid "Are you sure you want to remove device \"{{devideId}}\"?"
-#~ msgstr "Er du sikker på at du vil fjerne eininga \"{{devideId}}\"?"
+msgid "View"
+msgstr "Visning"
-#~ msgid ""
-#~ "Only a single Rundown can be active in a studio at the same time. Please "
-#~ "deactivate the other Rundown and try again."
-#~ msgstr ""
-#~ "Bare éin køyreplan kan være aktiv i eit studio. Deaktiver den andre "
-#~ "køyreplanen, og prøv på nytt."
+msgid "View Layout"
+msgstr "Vis layout"
-#~ msgid "Are you sure you want to reset this Rundown?"
-#~ msgstr "Er du sikker på at du vil tilbakestille denne kjøreplan?"
+msgid "Waiting for action: {{actionName}}..."
+msgstr ""
-#~ msgid "Line Templates"
-#~ msgstr "Line Templates"
+msgid "Waiting for gateway to generate URL..."
+msgstr "Ventar på at gateway genererar URL..."
-#~ msgid "Restore Backup"
-#~ msgstr "Restore Backup"
+msgid "Warning"
+msgstr "Åtvaring"
-#~ msgid "Blueprint logic ID"
-#~ msgstr "Blueprint logic ID"
+msgid "Warnings"
+msgstr "Åtvaringar"
-#~ msgid "Is Helper"
-#~ msgstr "Is Helper"
+msgid "Warnings During Migration"
+msgstr "Åtvaringar under migrering"
-#~ msgid "Select this"
-#~ msgstr "Select this"
+msgid "What type of bank"
+msgstr ""
-#~ msgid "System version"
-#~ msgstr "System version"
+msgid "When"
+msgstr ""
-#~ msgid "Take debug snapshot"
-#~ msgstr "Take debug snapshot"
+msgid "When disabled, any HOLD operations will be silently ignored"
+msgstr ""
-#~ msgid ""
-#~ "A Debug Snapshot contains info about the system and the active running "
-#~ "order(s)"
-#~ msgstr ""
-#~ "A Debug Snapshot contains info about the system and the active running "
-#~ "order(s)"
+msgid ""
+"When enabled, double clicking on certain pieces in the GUI will play them "
+"as adlibs"
+msgstr ""
-#~ msgid "Baseline logic ID"
-#~ msgstr "Baseline logic ID"
+msgid ""
+"When enabled, this will override the piece content statuses to have no "
+"errors or warnings and display a mock preview. This should only be used for "
+"development!"
+msgstr ""
-#~ msgid "Post Process logic ID"
-#~ msgstr "Post Process logic ID"
+msgid "When set, resources are considered immutable, ie they will not change"
+msgstr ""
-#~ msgid "External Message logic ID"
-#~ msgstr "External Message logic ID"
+msgid "Whether to show countdown to next break"
+msgstr "Om nedteljing til neste pause skal visast"
-#~ msgid "Download Full Backup"
-#~ msgstr "Download Full Backup"
+msgid ""
+"While there are still breaks coming up in the show, hide the Expected End "
+"timers"
+msgstr "Gøym nedteljing til venta slutt medan det framleis er pauser att i sendinga"
-#~ msgid "Download Current State"
-#~ msgstr "Download Current State"
+msgid "Width"
+msgstr "Breidde"
-#~ msgid "Blueprints' logic"
-#~ msgstr "Blueprints' logic"
+msgid "Work description"
+msgstr "Jobbskildring"
-#~ msgid "Helper"
-#~ msgstr "Helper"
+msgid "Work status"
+msgstr "Jobbstatus"
-#~ msgid "Are you sure you want to delete output channel \"{{channelId}}\"?"
-#~ msgstr "Are you sure you want to delete output channel \"{{channelId}}\"?"
+msgid "Work status reason"
+msgstr "Årsak for jobbstatus"
-#~ msgid "Snapshot"
-#~ msgstr "Snapshot"
+msgid "Work-in-progress"
+msgstr "Pågåande jobbar"
-#~ msgid "Download Debug-Snapshot (all studios)"
-#~ msgstr "Download Debug-Snapshot (all studios)"
+msgid "Worker"
+msgstr ""
-#~ msgid "Download System Snapshot for the studio"
-#~ msgstr "Download System Snapshot for the studio"
+msgid "WorkForce"
+msgstr "Arbeidarstyrke"
-#~ msgid "Download Debug-Snapshot for the studio"
-#~ msgstr "Download Debug-Snapshot for the studio"
+msgid "X"
+msgstr "X"
-#~ msgid "Telemetry"
-#~ msgstr "Telemetry"
+msgid "Xbox Controller"
+msgstr ""
-#~ msgid "MOS Device"
-#~ msgstr "MOS Device"
+msgid "Y"
+msgstr "Y"
-#~ msgid "Sub-Device"
-#~ msgstr "Sub-Device"
+msgid "Yes"
+msgstr "Ja"
-#~ msgid "Kill this device process?"
-#~ msgstr "Kill this device process?"
+msgid "Yes, Take and Download Memory Heap Snapshot"
+msgstr ""
-#~ msgid "Kill"
-#~ msgstr "Kill"
+msgid "Yesterday"
+msgstr "I går"
-#~ msgid "Are you sure you want to kill the process of this device?"
-#~ msgstr "Are you sure you want to kill the process of this device?"
+msgid ""
+"You are in rehearsal mode, the broadcast starts in less than 1 minute. Do "
+"you want to go into On-Air mode?"
+msgstr ""
-#~| msgid "Restore this backup?"
-#~ msgid "Restore from this Backup?"
-#~ msgstr "Restore from this Backup?"
+msgid "You need to run migrations to set the system up for operation."
+msgstr "Du må køyre migrering for å klargjere systemet for bruk."
-#~ msgid "Url"
-#~ msgstr "Url"
+msgid "Your machine is offline and cannot connect to the {{platformName}}."
+msgstr ""
-#~ msgid "Generic properties"
-#~ msgstr "Generic Properties"
+msgid "Your name"
+msgstr "Namnet ditt"
-#~ msgid "ON AIR"
-#~ msgstr "ON AIR"
+msgid "Zone ID"
+msgstr "Sone-id"
-#~ msgid "Click Anywhere to go Fullscreen..."
-#~ msgstr "Klikk hvor som helst for gå til fullskjerm..."
+msgid "Zoom In"
+msgstr "Zoom In"
-#~ msgid "Please enter your name"
-#~ msgstr "Vennligst legg til ditt navn"
+msgid "Zoom Out"
+msgstr "Zoom ut"
-#~ msgid "Template ID"
-#~ msgstr "Template ID"
+msgctxt "one"
+msgid "{{count}} items"
+msgstr ""
-#~ msgid "Templates"
-#~ msgstr "Templates"
+msgctxt "one"
+msgid "There are {{count}} documents that can be removed, do you want to continue?"
+msgstr ""
-#, fuzzy
-#~| msgid "Devices"
-#~ msgid "Mos-devices"
-#~ msgstr "Devices"
+msgctxt "one"
+msgid "This layer is now rerouted by an active Route Set: {{routeSets}}"
+msgstr ""
-#~ msgid "Connecting to Sofie Automation Server..."
-#~ msgstr "Kobler til Sofie-serveren..."
+msgctxt "other"
+msgid "{{count}} items"
+msgstr ""
-#~ msgid "Connected to Sofie Automation Server."
-#~ msgstr "Koblet til Sofie-serveren."
+msgctxt "other"
+msgid "There are {{count}} documents that can be removed, do you want to continue?"
+msgstr ""
-#~ msgid "MOS Devices"
-#~ msgstr "MOS Devices"
+msgctxt "other"
+msgid "This layer is now rerouted by an active Route Set: {{routeSets}}"
+msgstr ""
diff --git a/meteor/i18n/sv.po b/meteor/i18n/sv.po
new file mode 100644
index 00000000000..26a0634fa8e
--- /dev/null
+++ b/meteor/i18n/sv.po
@@ -0,0 +1,4536 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: i18next-conv\n"
+"mime-version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"POT-Creation-Date: 2026-04-14T14:17:21.154Z\n"
+"PO-Revision-Date: 2026-04-14T14:17:21.154Z\n"
+"Language: sv\n"
+
+msgid " The index of the Atem media/clip banks"
+msgstr ""
+
+msgid "({{time}} ago)"
+msgstr ""
+
+msgid "({{timecode}})"
+msgstr ""
+
+msgid ""
+"(Comma separated list. Empty - will store snapshots of all Rundown "
+"Playlists)"
+msgstr ""
+
+msgid "(Default)"
+msgstr ""
+
+msgid "(in: {{time}})"
+msgstr ""
+
+msgid "(Optional) A name/identifier of the local network where the Atem is located"
+msgstr ""
+
+msgid "(Optional) A name/identifier of the local network where the share is located"
+msgstr ""
+
+msgid ""
+"(Optional) A name/identifier of the local network where the share is "
+"located, leave empty if globally accessible"
+msgstr ""
+
+msgid "(Optional) This could be the name of the compute"
+msgstr ""
+
+msgid ""
+"(Optional) This could be the name of the computer on which the local folder "
+"is on"
+msgstr ""
+
+msgid "(Unknown playlist)"
+msgstr ""
+
+msgid "(Unknown rundown)"
+msgstr ""
+
+msgid ""
+"(what happened and when, what should have happened, what could have "
+"triggered the problems, etcetera...)"
+msgstr ""
+
+msgid "{{actionName}} failed! More information can be found in the system log."
+msgstr ""
+
+msgid "{{currentRundownName}} - {{rundownPlaylistName}}"
+msgstr ""
+
+msgid "{{currentRundownName}} - {{rundownPlaylistName}} (Looping)"
+msgstr ""
+
+msgid "{{days}} days, {{hours}} h {{minutes}} min {{seconds}} s ago"
+msgstr ""
+
+msgid "{{frames}} black frames detected in the clip"
+msgstr ""
+
+msgid "{{frames}} black frames detected within the clip"
+msgstr ""
+
+msgid "{{frames}} freeze frames detected in the clip"
+msgstr ""
+
+msgid "{{frames}} freeze frames detected within the clip"
+msgstr ""
+
+msgid "{{hours}} h {{minutes}} min {{seconds}} s ago"
+msgstr ""
+
+msgid "{{indexCount}} indexes was removed."
+msgstr ""
+
+msgid "{{minutes}} min {{seconds}} s ago"
+msgstr ""
+
+msgid "{{nrcsName}} Connection"
+msgstr ""
+
+msgid "{{prevStatements}} and {{finalStatement}}"
+msgstr ""
+
+msgid "{{prevStatements}} or {{finalStatement}}"
+msgstr ""
+
+msgid ""
+"{{reason}} {{sourceLayer}} exists, but is not yet ready on the playout "
+"system"
+msgstr ""
+
+msgid "{{rundownPlaylistName}} (Looping)"
+msgstr ""
+
+msgid "{{seconds}} s ago"
+msgstr ""
+
+msgid "{{showStyleVariant}} – {{showStyleBase}}"
+msgstr ""
+
+msgid "{{sourceLayer}} can't be found on the playout system"
+msgstr ""
+
+msgid "{{sourceLayer}} doesn't have both audio & video"
+msgstr ""
+
+msgid "{{sourceLayer}} has {{audioStreams}} audio streams"
+msgstr ""
+
+msgid "{{sourceLayer}} has the wrong format: {{format}}"
+msgstr ""
+
+msgid "{{sourceLayer}} has unsupported source: {{containerLabels}}"
+msgstr ""
+
+msgid "{{sourceLayer}} is being ingested"
+msgstr ""
+
+msgid ""
+"{{sourceLayer}} is in a placeholder state for an unknown workflow-defined "
+"reason"
+msgstr ""
+
+msgid "{{sourceLayer}} is in an unknown state: \"{{status}}\""
+msgstr ""
+
+msgid "{{sourceLayer}} is missing"
+msgstr ""
+
+msgid "{{sourceLayer}} is missing a file path"
+msgstr ""
+
+msgid "{{sourceLayer}} is not yet ready on the playout system"
+msgstr ""
+
+msgid "{{sourceLayer}} is transferring to the playout system"
+msgstr ""
+
+msgid ""
+"{{sourceLayer}} is transferring to the playout system but cannot be played "
+"yet"
+msgstr ""
+
+msgid "{{studioName}}: Active Rundown"
+msgstr ""
+
+msgid "{{studioName}}: Presenter screen"
+msgstr ""
+
+msgid "{{studioName}}: Prompter"
+msgstr ""
+
+msgid "14 = 7 lines, 20 = 5 lines"
+msgstr ""
+
+msgid "A device must be assigned to the config to edit the settings"
+msgstr ""
+
+msgid ""
+"A Full System Snapshot contains all system settings (studios, showstyles, "
+"blueprints, devices, etc.)"
+msgstr ""
+
+msgid "a second"
+msgstr ""
+
+msgid ""
+"A snapshot of the current Running Order has been created for "
+"troubleshooting."
+msgstr ""
+
+msgid "A Studio Snapshot contains all system settings related to that studio"
+msgstr ""
+
+msgid "AB Channel Display"
+msgstr ""
+
+msgid "AB Playout devices"
+msgstr ""
+
+msgid "AB Resolver Channel Display"
+msgstr ""
+
+msgid "Abort"
+msgstr ""
+
+msgid "Aborting all Media Workflows"
+msgstr ""
+
+msgid "Aborting Media Workflow"
+msgstr ""
+
+msgid "Accessor ID"
+msgstr ""
+
+msgid "Accessor Type"
+msgstr ""
+
+msgid "Accessors"
+msgstr ""
+
+msgid "Action"
+msgstr ""
+
+msgid "Action {{actionName}} done!"
+msgstr ""
+
+msgid "Action {{actionName}} failed: {{error}}"
+msgstr ""
+
+msgid "Action Buttons"
+msgstr ""
+
+msgid "Action Triggers"
+msgstr ""
+
+msgid "Activate \"On Air\""
+msgstr ""
+
+msgid "Activate \"Rehearsal\""
+msgstr ""
+
+msgid "Activate (On-Air)"
+msgstr ""
+
+msgid "Activate (Rehearsal)"
+msgstr ""
+
+msgid "Activate On Air"
+msgstr ""
+
+msgid "Activate Rundown"
+msgstr ""
+
+msgid "Activating Hold"
+msgstr ""
+
+msgid "Activating Rundown Playlist"
+msgstr ""
+
+msgid "Active"
+msgstr ""
+
+msgid "Active Rundown"
+msgstr ""
+
+msgid "Active Rundown View"
+msgstr ""
+
+msgid "Ad-Lib"
+msgstr ""
+
+msgid "Ad-Lib Action"
+msgstr ""
+
+msgid "Add"
+msgstr ""
+
+msgid "Add {{filtersTitle}}"
+msgstr ""
+
+msgid "Add a playout device to the studio in order to configure the route sets"
+msgstr ""
+
+msgid "Add a playout device to the studio in order to edit the layer mappings"
+msgstr ""
+
+msgid "Add Action Trigger"
+msgstr ""
+
+msgid "Add button"
+msgstr ""
+
+msgid "Add filter"
+msgstr ""
+
+msgid "Add some source layers (e.g. Graphics) for your data to appear in rundowns"
+msgstr ""
+
+msgid "AdLib"
+msgstr ""
+
+msgid "AdLib Actions are not supported in the current Rundown"
+msgstr ""
+
+msgid "AdLib could not be found!"
+msgstr ""
+
+msgid "AdLib filter"
+msgstr ""
+
+msgid "Adlib Rank"
+msgstr ""
+
+msgid "Adlib rundowns are not supported for this ShowStyle!"
+msgstr ""
+
+msgid "Adlib Testing"
+msgstr ""
+
+msgid "AdLib Testing"
+msgstr ""
+
+msgid "AdLibs can be only placed in a currently playing part!"
+msgstr ""
+
+msgid "AdLibs on this layer can be queued"
+msgstr ""
+
+msgid "All additional source layers must have active pieces"
+msgstr ""
+
+msgid "All connections working correctly"
+msgstr ""
+
+msgid "All devices working correctly"
+msgstr ""
+
+msgid "All is well, go get a"
+msgstr ""
+
+msgid "All Screens in a MultiViewer"
+msgstr ""
+
+msgid "All steps"
+msgstr ""
+
+msgid "Allow direct playing pieces"
+msgstr ""
+
+msgid "Allow disabling of Pieces"
+msgstr ""
+
+msgid "Allow HOLD mode"
+msgstr ""
+
+msgid "Allow infinites from AdLib testing to persist"
+msgstr ""
+
+msgid "Allow Read access"
+msgstr ""
+
+msgid "Allow Rundowns to be reset while on-air"
+msgstr ""
+
+msgid "Allow Write access"
+msgstr ""
+
+msgid "Also Require Source Layers"
+msgstr ""
+
+msgid "Amount of entries exceeds the limt of 10 000 items."
+msgstr ""
+
+msgid "An error while performing the take, playout may be impacted"
+msgstr ""
+
+msgid "An error while setting the next Part, playout may be impacted"
+msgstr ""
+
+msgid "An internal error occured!"
+msgstr ""
+
+msgid "Another Rundown is Already Active!"
+msgstr ""
+
+msgid "Answers"
+msgstr ""
+
+msgid ""
+"Any AB Playout devices here will only be active when this or another "
+"RouteSet that includes them is active"
+msgstr ""
+
+msgid "APM Enabled"
+msgstr ""
+
+msgid "APM Transaction Sample Rate"
+msgstr ""
+
+msgid "Append"
+msgstr ""
+
+msgid "Append or Replace"
+msgstr ""
+
+msgid "Append rows"
+msgstr ""
+
+msgid "Application credentials"
+msgstr ""
+
+msgid "Application Performance Monitoring"
+msgstr ""
+
+msgid "Apply"
+msgstr ""
+
+msgid "Apply blueprint upgrades"
+msgstr ""
+
+msgid "Apply Config"
+msgstr ""
+
+msgid "Are you sure you want to activate Rehearsal Mode?"
+msgstr ""
+
+msgid ""
+"Are you sure you want to deactivate this Rundown\n"
+"(This will clear the outputs)"
+msgstr ""
+
+msgid ""
+"Are you sure you want to deactivate this rundown?\n"
+"(This will clear the outputs.)"
+msgstr ""
+
+msgid "Are you sure you want to delete output layer \"{{outputId}}\"?"
+msgstr ""
+
+msgid "Are you sure you want to delete source layer \"{{sourceLayerId}}\"?"
+msgstr ""
+
+msgid "Are you sure you want to delete the \"{{name}}\" rundown?"
+msgstr ""
+
+msgid "Are you sure you want to delete the blueprint \"{{blueprintId}}\"?"
+msgstr ""
+
+msgid "Are you sure you want to delete the shelf layout \"{{name}}\"?"
+msgstr ""
+
+msgid "Are you sure you want to delete the show style \"{{showStyleId}}\"?"
+msgstr ""
+
+msgid "Are you sure you want to delete the studio \"{{studioId}}\"?"
+msgstr ""
+
+msgid "Are you sure you want to delete this AdLib?"
+msgstr ""
+
+msgid "Are you sure you want to delete this Bucket?"
+msgstr ""
+
+msgid "Are you sure you want to delete this device: \"{{deviceId}}\"?"
+msgstr ""
+
+msgid "Are you sure you want to empty (remove all adlibs inside) this Bucket?"
+msgstr ""
+
+msgid ""
+"Are you sure you want to force the migration? This will bypass the "
+"migration checks, so be sure to verify that the values in the settings are "
+"correct!"
+msgstr ""
+
+msgid "Are you sure you want to import the contents of the file \"{{fileName}}\"?"
+msgstr ""
+
+msgid "Are you sure you want to re-sync the \"{{name}}\" rundown?"
+msgstr ""
+
+msgid ""
+"Are you sure you want to re-sync the Rundown?\n"
+"(If the currently playing Part has been changed, this can affect the output)"
+msgstr ""
+
+msgid "Are you sure you want to remove {{type}} \"{{deviceId}}\"?"
+msgstr ""
+
+msgid "Are you sure you want to remove all Variants in the table?"
+msgstr ""
+
+msgid ""
+"Are you sure you want to remove exclusivity group \"{{eGroupName}}\"?\n"
+"Route Sets assigned to this group will be reset to no group."
+msgstr ""
+
+msgid "Are you sure you want to remove mapping for layer \"{{mappingId}}\"?"
+msgstr ""
+
+msgid "Are you sure you want to remove the AB Player \"{{playerId}}\"?"
+msgstr ""
+
+msgid ""
+"Are you sure you want to remove the device \"{{deviceName}}\" and all of "
+"it's sub-devices?"
+msgstr ""
+
+msgid "Are you sure you want to remove the Package Container \"{{containerId}}\"?"
+msgstr ""
+
+msgid ""
+"Are you sure you want to remove the Package Container Accessor "
+"\"{{accessorId}}\"?"
+msgstr ""
+
+msgid ""
+"Are you sure you want to remove the Route from \"{{sourceLayerId}}\" to "
+"\"{{newLayerId}}\"?"
+msgstr ""
+
+msgid "Are you sure you want to remove the Route Set \"{{routeId}}\"?"
+msgstr ""
+
+msgid "Are you sure you want to remove the Variant \"{{showStyleVariantId}}\"?"
+msgstr ""
+
+msgid ""
+"Are you sure you want to replace the blueprints with the file "
+"\"{{fileName}}\"?"
+msgstr ""
+
+msgid ""
+"Are you sure you want to reset all overrides for Packing Container "
+"\"{{id}}\"?"
+msgstr ""
+
+msgid ""
+"Are you sure you want to reset all overrides for the mapping for layer "
+"\"{{mappingId}}\"?"
+msgstr ""
+
+msgid ""
+"Are you sure you want to reset all overrides for the output layer "
+"\"{{outputLayerId}}\"?"
+msgstr ""
+
+msgid "Are you sure you want to reset all overrides for the selected row?"
+msgstr ""
+
+msgid ""
+"Are you sure you want to reset all overrides for the source layer "
+"\"{{sourceLayerId}}\"?"
+msgstr ""
+
+msgid ""
+"Are you sure you want to reset the database version?\n"
+"Only do this if you plan on running the migration right after."
+msgstr ""
+
+msgid "Are you sure you want to restart this device?"
+msgstr ""
+
+msgid ""
+"Are you sure you want to restart this Sofie Automation Server Core: "
+"{{name}}?"
+msgstr ""
+
+msgid ""
+"Are you sure you want to restore the system from the snapshot file "
+"\"{{fileName}}\"?"
+msgstr ""
+
+msgid "Are you sure you want to skip the fix up config step for {{name}}"
+msgstr ""
+
+msgid ""
+"Are you sure you want to update the blueprints from the file "
+"\"{{fileName}}\"?"
+msgstr ""
+
+msgid ""
+"Are you sure you want to upload the shelf layout from the file "
+"\"{{fileName}}\"?"
+msgstr ""
+
+msgid ""
+"Are you sure, do you really want to REMOVE the Snapshot "
+"\"{{snapshotName}}\"?\r\n"
+"This cannot be undone!!"
+msgstr ""
+
+msgid "Are you sure?"
+msgstr ""
+
+msgid ""
+"Are you sure? This will cause the whole Sofie system to be unresponsive "
+"several seconds!"
+msgstr ""
+
+msgid "Around 10 minutes ago"
+msgstr ""
+
+msgid "Assign"
+msgstr ""
+
+msgid "Assigned Show Styles"
+msgstr ""
+
+msgid "Assigned Studios"
+msgstr ""
+
+msgid "Attached Subdevices"
+msgstr ""
+
+msgid "Audio Mixing"
+msgstr ""
+
+msgid "Authorize App Access"
+msgstr ""
+
+msgid "Auto"
+msgstr ""
+
+msgid "AutoNext in QuickLoop behavior"
+msgstr ""
+
+msgid "Available Screens for Studio {{studioId}}"
+msgstr ""
+
+msgid "Bad"
+msgstr ""
+
+msgid "Bank Index"
+msgstr ""
+
+msgid "Base URL"
+msgstr ""
+
+msgid "Base url to the resource (example: http://myserver/folder)"
+msgstr ""
+
+msgid "Baseline needs reload, this studio may not work until reloaded"
+msgstr ""
+
+msgid "Behavior"
+msgstr ""
+
+msgid "Blueprint"
+msgstr ""
+
+msgid "Blueprint config has changed"
+msgstr ""
+
+msgid "Blueprint config preset"
+msgstr ""
+
+msgid ""
+"Blueprint config preset has been changed. From \"{{ oldValue }}\", to \"{{ "
+"newValue }}\""
+msgstr ""
+
+msgid "Blueprint config preset is missing"
+msgstr ""
+
+msgid "Blueprint config preset not set"
+msgstr ""
+
+msgid "Blueprint Configuration"
+msgstr ""
+
+msgid "Blueprint has a new version"
+msgstr ""
+
+msgid "Blueprint has been changed. From \"{{ oldValue }}\", to \"{{ newValue }}\""
+msgstr ""
+
+msgid "Blueprint ID"
+msgstr ""
+
+msgid "Blueprint Name"
+msgstr ""
+
+msgid "Blueprint not found!"
+msgstr ""
+
+msgid "Blueprint not set"
+msgstr ""
+
+msgid "Blueprint Type"
+msgstr ""
+
+msgid "Blueprint Version"
+msgstr ""
+
+msgid "Blueprints"
+msgstr ""
+
+msgid "Blueprints updated successfully."
+msgstr ""
+
+msgid "Bottom"
+msgstr ""
+
+msgid "Box color"
+msgstr ""
+
+msgid "BREAK"
+msgstr ""
+
+msgid "Break In"
+msgstr ""
+
+msgid "Bucket AdLib is not compatible with this Rundown!"
+msgstr ""
+
+msgid "Bucket not found!"
+msgstr ""
+
+msgid "Button"
+msgstr ""
+
+msgid "Button height scale factor"
+msgstr ""
+
+msgid "Button mapping"
+msgstr ""
+
+msgid "Button width scale factor"
+msgstr ""
+
+msgid "By Parts"
+msgstr ""
+
+msgid "By Segments"
+msgstr ""
+
+msgid "Camera"
+msgstr ""
+
+msgid "Camera Screen"
+msgstr ""
+
+msgid "Can Generate Adlib Testing Rundown"
+msgstr ""
+
+msgid "Can not be used during a hold!"
+msgstr ""
+
+msgid "Cancel"
+msgstr ""
+
+msgid "Cancel currently pressed hotkey"
+msgstr ""
+
+msgid "Cannot activate HOLD before a part has been taken!"
+msgstr ""
+
+msgid "Cannot activate HOLD between the current and next parts"
+msgstr ""
+
+msgid "Cannot activate HOLD once an adlib has been used"
+msgstr ""
+
+msgid "Cannot cancel HOLD once it has been taken"
+msgstr ""
+
+msgid "Cannot connect to the {{platformName}}: {{reason}}"
+msgstr ""
+
+msgid "Cannot perform take for {{duration}}ms"
+msgstr ""
+
+msgid "Cannot play this AdLib because it is marked as Floated"
+msgstr ""
+
+msgid "Cannot play this AdLib because it is marked as Invalid"
+msgstr ""
+
+msgid "Cannot play this adlib because source layer is not queueable"
+msgstr ""
+
+msgid "Cannot remove the rundown \"{{name}}\" while it is on-air."
+msgstr ""
+
+msgid "Cannot take close to an AUTO"
+msgstr ""
+
+msgid "Cannot take during a transition"
+msgstr ""
+
+msgid "Cannot take unplayable AdLib"
+msgstr ""
+
+msgid "CasparCG on device \"{{deviceName}}\" restarting..."
+msgstr ""
+
+msgid "Center"
+msgstr ""
+
+msgid "Change to fullscreen mode"
+msgstr ""
+
+msgid "Channel Name"
+msgstr ""
+
+msgid ""
+"Check layer types to select all layers of that type, or check individual "
+"layers for more specific filtering."
+msgstr ""
+
+msgid "Check the console for troubleshooting data from device \"{{deviceName}}\"!"
+msgstr ""
+
+msgid "Cleanup"
+msgstr ""
+
+msgid "Cleanup old data"
+msgstr ""
+
+msgid "Cleanup old database indexes"
+msgstr ""
+
+msgid "Clear {{layerName}}"
+msgstr ""
+
+msgid "Clear filter"
+msgstr ""
+
+msgid "Clear queued segment"
+msgstr ""
+
+msgid "Clear QuickLoop"
+msgstr ""
+
+msgid "Clear QuickLoop End"
+msgstr ""
+
+msgid "Clear QuickLoop Start"
+msgstr ""
+
+msgid "Clear Source Layer"
+msgstr ""
+
+msgid "Clear value"
+msgstr ""
+
+msgid "Clearing SourceLayer"
+msgstr ""
+
+msgid "Click anywhere for fullscreen"
+msgstr ""
+
+msgid "Click on a rundown to control your studio"
+msgstr ""
+
+msgid "Click or press Enter for fullscreen"
+msgstr ""
+
+msgid "Click to show available Package Containers"
+msgstr ""
+
+msgid "Click to show available Show Styles"
+msgstr ""
+
+msgid "Client IP"
+msgstr ""
+
+msgid "Clip starts with {{frames}} black frames"
+msgstr ""
+
+msgid "Clip starts with {{frames}} freeze frames"
+msgstr ""
+
+msgid "Clips"
+msgstr ""
+
+msgid "Close"
+msgstr ""
+
+msgid "Close Properties Panel"
+msgstr ""
+
+msgid "Close Rundown"
+msgstr ""
+
+msgid "Comma-separated list of studio labels to filter by. Leave empty for all."
+msgstr ""
+
+msgid "Comma-separated speeds in px/frame"
+msgstr ""
+
+msgid "Compatible Studios"
+msgstr ""
+
+msgid "Completed with warnings"
+msgstr ""
+
+msgid "Config Fix Up must be run or ignored before the configuration can be edited"
+msgstr ""
+
+msgid "Config for {{name}} fix failed"
+msgstr ""
+
+msgid "Config for {{name}} fixed successfully"
+msgstr ""
+
+msgid "Config for {{name}} upgraded failed"
+msgstr ""
+
+msgid "Config for {{name}} upgraded successfully"
+msgstr ""
+
+msgid "Config has not been applied before"
+msgstr ""
+
+msgid "Config ID: "
+msgstr ""
+
+msgid "Config looks good"
+msgstr ""
+
+msgid "Config preset"
+msgstr ""
+
+msgid "Config preset is missing"
+msgstr ""
+
+msgid "Config preset not set"
+msgstr ""
+
+msgid "Config requires fixing up before it can be validated"
+msgstr ""
+
+msgid ""
+"Config value \"{{ name }}\" has changed. From \"{{ oldValue }}\", to \"{{ "
+"newValue }}\""
+msgstr ""
+
+msgid "Configurable Screens"
+msgstr ""
+
+msgid ""
+"Configuration for this Gateway has moved to the Studio Peripheral Device "
+"settings"
+msgstr ""
+
+msgid "Configure display options"
+msgstr ""
+
+msgid ""
+"Configure which pieces should display their assigned AB resolver channel "
+"(e.g., \"Server A\") on various screens. This helps operators identify "
+"which video server is playing each clip."
+msgstr ""
+
+msgid "Confirm"
+msgstr ""
+
+msgid "Connect some devices to the playout gateway"
+msgstr ""
+
+msgid "Connect to {{deviceName}}"
+msgstr ""
+
+msgid "Connected"
+msgstr ""
+
+msgid "Connected App Containers"
+msgstr ""
+
+msgid "Connected Expectation Managers"
+msgstr ""
+
+msgid "Connected to the {{platformName}}."
+msgstr ""
+
+msgid "Connected Workers"
+msgstr ""
+
+msgid "Connecting to the {{platformName}}"
+msgstr ""
+
+msgid "Container Status"
+msgstr ""
+
+msgid "Control mode"
+msgstr ""
+
+msgid "Control modes"
+msgstr ""
+
+msgid ""
+"Controls for exposed Route Sets will be displayed to the producer within "
+"the Rundown View in the Switchboard."
+msgstr ""
+
+msgid "Core"
+msgstr ""
+
+msgid "Core + Worker processing time"
+msgstr ""
+
+msgid "Core System settings"
+msgstr ""
+
+msgid ""
+"Could not create a snapshot for the evaluation, because the previous one "
+"was created just moments ago. If you want another snapshot, try again in a "
+"couple of seconds."
+msgstr ""
+
+msgid "Could not get system status. Please consult system administrator."
+msgstr ""
+
+msgid "Could not restart core: {{err}}"
+msgstr ""
+
+msgid "Could not restart Playout Gateway \"{{playoutDeviceName}}\"."
+msgstr ""
+
+msgid "Create Adlib Testing Rundown"
+msgstr ""
+
+msgid "Create new Bucket"
+msgstr ""
+
+msgid "Created"
+msgstr ""
+
+msgid "Creating a new Bucket"
+msgstr ""
+
+msgid "Creating Adlib Testing Rundown"
+msgstr ""
+
+msgid "Creating Snapshot for debugging"
+msgstr ""
+
+msgid "Critical problems"
+msgstr ""
+
+msgid "Critical Problems"
+msgstr ""
+
+msgid "Cron jobs"
+msgstr ""
+
+msgid "Current Part"
+msgstr ""
+
+msgid "Current part can contain next pieces"
+msgstr ""
+
+msgid "Current Segment"
+msgstr ""
+
+msgid "Custom Classes"
+msgstr ""
+
+msgid "Custom Hotkey Labels"
+msgstr ""
+
+msgid "Deactivate"
+msgstr ""
+
+msgid "Deactivate \"On Air\""
+msgstr ""
+
+msgid "Deactivate Rundown"
+msgstr ""
+
+msgid "Deactivate Studio"
+msgstr ""
+
+msgid "Deactivating other Rundown Playlist, and activating this one"
+msgstr ""
+
+msgid "Deactivating Rundown Playlist"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "Debug mode"
+msgstr ""
+
+msgid "Debug State"
+msgstr ""
+
+msgid "Default"
+msgstr ""
+
+msgid "Default (hide)"
+msgstr ""
+
+msgid "Default Layout"
+msgstr ""
+
+msgid "Default shelf height"
+msgstr ""
+
+msgid "Default State"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Delete Action Trigger"
+msgstr ""
+
+msgid "Delete layout?"
+msgstr ""
+
+msgid "Delete mapping"
+msgstr ""
+
+msgid "Delete output layer"
+msgstr ""
+
+msgid "Delete rundown?"
+msgstr ""
+
+msgid "Delete source layer"
+msgstr ""
+
+msgid "Delete this AdLib"
+msgstr ""
+
+msgid "Delete this Blueprint?"
+msgstr ""
+
+msgid "Delete this Bucket"
+msgstr ""
+
+msgid "Delete this item?"
+msgstr ""
+
+msgid "Delete this output?"
+msgstr ""
+
+msgid "Delete this Show Style?"
+msgstr ""
+
+msgid "Delete this Studio?"
+msgstr ""
+
+msgid "Device"
+msgstr ""
+
+msgid "Device \"{{deviceName}}\" restarting..."
+msgstr ""
+
+msgid "Device {{deviceName}} is disconnected"
+msgstr ""
+
+msgid "Device ID"
+msgstr ""
+
+msgid "Device is already attached to another studio."
+msgstr ""
+
+msgid "Device is missing configuration schema"
+msgstr ""
+
+msgid "Device is of unknown type"
+msgstr ""
+
+msgid "Device Name"
+msgstr ""
+
+msgid "Device not found"
+msgstr ""
+
+msgid "Device Triggers"
+msgstr ""
+
+msgid "Device Type"
+msgstr ""
+
+msgid "Devices"
+msgstr ""
+
+msgid "Devices with issues"
+msgstr ""
+
+msgid "Did you have any problems with the broadcast?"
+msgstr ""
+
+msgid "Diff"
+msgstr ""
+
+msgid "Director Screen"
+msgstr ""
+
+msgid "Director's Screen"
+msgstr ""
+
+msgid "Disable"
+msgstr ""
+
+msgid "Disable Context Menu"
+msgstr ""
+
+msgid "Disable follow take"
+msgstr ""
+
+msgid "Disable hints by adding this to the URL:"
+msgstr ""
+
+msgid "Disable next Piece"
+msgstr ""
+
+msgid "Disable the hover Inspector when hovering over the button"
+msgstr ""
+
+msgid "Disable the next element"
+msgstr ""
+
+msgid "Disable version check"
+msgstr ""
+
+msgid "Disabled"
+msgstr ""
+
+msgid "Disabling next Piece"
+msgstr ""
+
+msgid "Disconnected"
+msgstr ""
+
+msgid "Dismiss"
+msgstr ""
+
+msgid "Dismiss all notifications"
+msgstr ""
+
+msgid "Display AB channel assignments on:"
+msgstr ""
+
+msgid "Display AdLibs in a column in List View"
+msgstr ""
+
+msgid "Display in a column in List View"
+msgstr ""
+
+msgid "Display name of the Package Container"
+msgstr ""
+
+msgid "Display piece duration for source layers"
+msgstr ""
+
+msgid "Display Rank"
+msgstr ""
+
+msgid "Display Style"
+msgstr ""
+
+msgid "Display Take buttons"
+msgstr ""
+
+msgid ""
+"Do you really want to remove just the rundown \"{{rundownName}}\" in the "
+"playlist {{playlistName}} from Sofie? \n"
+"\n"
+"This cannot be undone!"
+msgstr ""
+
+msgid "Do you really want to restore the snapshot \"{{snapshotName}}\"?"
+msgstr ""
+
+msgid "Do you want to activate this Rundown?"
+msgstr ""
+
+msgid ""
+"Do you want to append these to existing Action Triggers, or do you want to "
+"replace them?"
+msgstr ""
+
+msgid "Do you want to do this?"
+msgstr ""
+
+msgid "Do you want to execute {{actionName}}? This may the disrupt the output"
+msgstr ""
+
+msgid "Do you want to restart CasparCG Server \"{{device}}\"?"
+msgstr ""
+
+msgid "Do you want to restart the Playout Gateway?"
+msgstr ""
+
+msgid "Documentation is available at"
+msgstr ""
+
+msgid "Documents to be removed:"
+msgstr ""
+
+msgid "Does NOT support HEAD requests"
+msgstr ""
+
+msgid "Don't treat the end of the last rundown in a playlist as a break"
+msgstr ""
+
+msgid "Done"
+msgstr ""
+
+msgid "Download Action Triggers"
+msgstr ""
+
+msgid "Drag to reorder or move out of playlist"
+msgstr ""
+
+msgid "Drop Rundown here to move it out of its current Playlist"
+msgstr ""
+
+msgid "Dropzone URL"
+msgstr ""
+
+msgid "Duplicate Action Trigger"
+msgstr ""
+
+msgid "Duration"
+msgstr ""
+
+msgid "DURATION"
+msgstr ""
+
+msgid "e.g., Studio A,Studio B"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Edit Action Trigger"
+msgstr ""
+
+msgid "Edit in Nora"
+msgstr ""
+
+msgid "Edit mapping"
+msgstr ""
+
+msgid "Edit Mode"
+msgstr ""
+
+msgid "Edit output layer"
+msgstr ""
+
+msgid "Edit Part Properties"
+msgstr ""
+
+msgid "Edit Piece Properties"
+msgstr ""
+
+msgid "Edit Segment Properties"
+msgstr ""
+
+msgid "Edit source layer"
+msgstr ""
+
+msgid "Edit Support Panel"
+msgstr ""
+
+msgid "Empty"
+msgstr ""
+
+msgid "Empty this Bucket"
+msgstr ""
+
+msgid "Emptying Bucket"
+msgstr ""
+
+msgid "Enable"
+msgstr ""
+
+msgid "Enable \"Play from Anywhere\""
+msgstr ""
+
+msgid "Enable AdLib Testing, for testing AdLibs before taking the first Part"
+msgstr ""
+
+msgid "Enable automatic storage of Rundown Playlist snapshots periodically"
+msgstr ""
+
+msgid "Enable Buckets"
+msgstr ""
+
+msgid "Enable CasparCG restart job"
+msgstr ""
+
+msgid "Enable configuration mode by adding ?configure=1 to the address bar."
+msgstr ""
+
+msgid "Enable Evaluation Form"
+msgstr ""
+
+msgid "Enable hints by adding this to the URL:"
+msgstr ""
+
+msgid "Enable QuickLoop"
+msgstr ""
+
+msgid "Enable search toolbar"
+msgstr ""
+
+msgid "Enable User Editing"
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
+msgid "Enabled on all Parts, applying QuickLoop Fallback Part Duration if needed"
+msgstr ""
+
+msgid "Enabled, but skipping parts with undefined or 0 duration"
+msgstr ""
+
+msgid ""
+"Enables internal monitoring of blocked main thread. Logs when there is an "
+"issue, but (unverified) might cause issues in itself."
+msgstr ""
+
+msgid "End of script"
+msgstr ""
+
+msgid "End Words"
+msgstr ""
+
+msgid "Error"
+msgstr ""
+
+msgid "Error when checking for cleaning up"
+msgstr ""
+
+msgid "Error: The ShowStyle of this Rundown was not found."
+msgstr ""
+
+msgid "Error: The studio of this Rundown was not found."
+msgstr ""
+
+msgid "Est. End"
+msgstr ""
+
+msgid "Evaluations"
+msgstr ""
+
+msgid "Exclusivity group"
+msgstr ""
+
+msgid "Exclusivity Group ID"
+msgstr ""
+
+msgid "Exclusivity Group Name"
+msgstr ""
+
+msgid "Exclusivity Groups"
+msgstr ""
+
+msgid "Execute"
+msgstr ""
+
+msgid "Execute User Operation"
+msgstr ""
+
+msgid "Executed {{actionName}} on device \"{{deviceName}}\": {{response}}"
+msgstr ""
+
+msgid "Executed {{actionName}} on device \"{{deviceName}}\"..."
+msgstr ""
+
+msgid "Executes within the currently open Rundown, requires a Client-side trigger."
+msgstr ""
+
+msgid "Execution times"
+msgstr ""
+
+msgid "Exit"
+msgstr ""
+
+msgid "Expectation Manager"
+msgstr ""
+
+msgid "Expected End"
+msgstr ""
+
+msgid "Expected End text"
+msgstr ""
+
+msgid "Expected End Time"
+msgstr ""
+
+msgid "Expected Start"
+msgstr ""
+
+msgid "Export"
+msgstr ""
+
+msgid "Export visible"
+msgstr ""
+
+msgid "Expose as user selectable layout"
+msgstr ""
+
+msgid "Expose layout as a standalone page"
+msgstr ""
+
+msgid "External message queue has unsent messages."
+msgstr ""
+
+msgid "Failed to activate"
+msgstr ""
+
+msgid "Failed to add a new Show Style Variant: {{errorMessage}}"
+msgstr ""
+
+msgid "Failed to assign AB player for {{pieceNames}}"
+msgstr ""
+
+msgid "Failed to assign non-critical AB player for {{pieceNames}}"
+msgstr ""
+
+msgid "Failed to compare config changes"
+msgstr ""
+
+msgid "Failed to copy Show Style Variant: {{errorMessage}}"
+msgstr ""
+
+msgid "Failed to delete Show Style Variant: {{errorMessage}}"
+msgstr ""
+
+msgid ""
+"Failed to execute {{actionName}} on device: \"{{deviceName}}\": "
+"{{errorMessage}}"
+msgstr ""
+
+msgid "Failed to execute take"
+msgstr ""
+
+msgid "Failed to generate adlib rundown! {{message}}"
+msgstr ""
+
+msgid "Failed to import new Show Style Variants: {{errorMessage}}"
+msgstr ""
+
+msgid ""
+"Failed to import Show Style Variant {{name}}. Make sure it is not already "
+"imported."
+msgstr ""
+
+msgid "Failed to remove all Show Style Variants: {{errorMessage}}"
+msgstr ""
+
+msgid "Failed to reorderShow Style Variant: {{errorMessage}}"
+msgstr ""
+
+msgid "Failed to reset OAuth credentials: {{errorMessage}}"
+msgstr ""
+
+msgid "Failed to restart CasparCG on device: \"{{deviceName}}\": {{errorMessage}}"
+msgstr ""
+
+msgid "Failed to restart device: \"{{deviceName}}\": {{errorMessage}}"
+msgstr ""
+
+msgid "Failed to update blueprints: {{errorMessage}}"
+msgstr ""
+
+msgid "Failed to update config: {{errorMessage}}"
+msgstr ""
+
+msgid "Failed to upload OAuth credentials: {{errorMessage}}"
+msgstr ""
+
+msgid "Failed to upload shelf layout: {{errorMessage}}"
+msgstr ""
+
+msgid "Failed to validate config"
+msgstr ""
+
+msgid "Fatal"
+msgstr ""
+
+msgid "File path to the folder of the local folder"
+msgstr ""
+
+msgid "Filter by Output Layer"
+msgstr ""
+
+msgid "Filter by Source Layer"
+msgstr ""
+
+msgid "Filter disabled"
+msgstr ""
+
+msgid "Filter Disabled"
+msgstr ""
+
+msgid "Filter..."
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Find Trigger..."
+msgstr ""
+
+msgid "Fine scroll"
+msgstr ""
+
+msgid "Fix Up Config"
+msgstr ""
+
+msgid "Fixed duration in Segment header"
+msgstr ""
+
+msgid ""
+"Fixing this problem requires a restart to the host device. Are you sure you "
+"want to restart {{device}}?\n"
+"(This might affect output)"
+msgstr ""
+
+msgid "Floated Adlib"
+msgstr ""
+
+msgid "Floated AdLib"
+msgstr ""
+
+msgid "Folder path"
+msgstr ""
+
+msgid "Folder path to shared folder"
+msgstr ""
+
+msgid "Following"
+msgstr ""
+
+msgid "Font size"
+msgstr ""
+
+msgid "for {{name}} fix skipped successfully"
+msgstr ""
+
+msgid "Force"
+msgstr ""
+
+msgid "Force (deactivate others)"
+msgstr ""
+
+msgid "Force Migration"
+msgstr ""
+
+msgid "Force Migration (unsafe)"
+msgstr ""
+
+msgid "Force the Multi-gateway-mode"
+msgstr ""
+
+msgid "Forward"
+msgstr ""
+
+msgid "Forward: {{forward}}"
+msgstr ""
+
+msgid "Found no future pieces"
+msgstr ""
+
+msgid "Frame Rate"
+msgstr ""
+
+msgid "From"
+msgstr ""
+
+msgid "Full System Snapshot"
+msgstr ""
+
+msgid "fullscreen"
+msgstr ""
+
+msgid "Gateway"
+msgstr ""
+
+msgid "General"
+msgstr ""
+
+msgid "Generated URL"
+msgstr ""
+
+msgid "Generating restart token"
+msgstr ""
+
+msgid "Generic Properties"
+msgstr ""
+
+msgid "Generic Script"
+msgstr ""
+
+msgid "Getting Started"
+msgstr ""
+
+msgid "Global AdLib"
+msgstr ""
+
+msgid "Global AdLibs"
+msgstr ""
+
+msgid "Go to Live"
+msgstr ""
+
+msgid "Go to On Air line"
+msgstr ""
+
+msgid "Go to On Air Segment"
+msgstr ""
+
+msgid "Good"
+msgstr ""
+
+msgid "Graphics"
+msgstr ""
+
+msgid "GUI"
+msgstr ""
+
+msgid "he default state of this Route Set"
+msgstr ""
+
+msgid "Heading"
+msgstr ""
+
+msgid "Height"
+msgstr ""
+
+msgid "Help & Support"
+msgstr ""
+
+msgid "Hide"
+msgstr ""
+
+msgid "Hide Countdown"
+msgstr ""
+
+msgid "Hide default AdLib Start/Execute options"
+msgstr ""
+
+msgid "Hide Diff"
+msgstr ""
+
+msgid "Hide Diff Label"
+msgstr ""
+
+msgid "Hide duplicated AdLibs"
+msgstr ""
+
+msgid "Hide End Time"
+msgstr ""
+
+msgid "Hide Expected End timing when a break is next"
+msgstr ""
+
+msgid "Hide for dynamically inserted parts"
+msgstr ""
+
+msgid "Hide Label"
+msgstr ""
+
+msgid "Hide over/under timer"
+msgstr ""
+
+msgid "Hide Panel from view"
+msgstr ""
+
+msgid "Hide Planned End Label"
+msgstr ""
+
+msgid "Hide Planned Start"
+msgstr ""
+
+msgid "Hide Rundown Divider"
+msgstr ""
+
+msgid "Hide rundown divider between rundowns in a playlist"
+msgstr ""
+
+msgid "Hide scrollbar"
+msgstr ""
+
+msgid "Hold"
+msgstr ""
+
+msgid "Hostname or IP address of the Atem"
+msgstr ""
+
+msgid "Hotkey"
+msgstr ""
+
+msgid "How did the show go?"
+msgstr ""
+
+msgid ""
+"How many of the transactions to monitor. Set to -1 to log nothing (max "
+"performance), 0.5 to log 50% of the transactions, 1 to log all transactions"
+msgstr ""
+
+msgid ""
+"How much preparation time to add to global pieces on the timeline before "
+"they are played"
+msgstr ""
+
+msgid "HTML that will be shown in the Support Panel"
+msgstr ""
+
+msgid "Human-readable name of the layer"
+msgstr ""
+
+msgid "Icon"
+msgstr ""
+
+msgid "Icon color"
+msgstr ""
+
+msgid "Id"
+msgstr ""
+
+msgid "ID"
+msgstr ""
+
+msgid ""
+"ID of the device (corresponds to the device ID in the peripheralDevice "
+"settings)"
+msgstr ""
+
+msgid "ID of the timeline-layer to map to some output"
+msgstr ""
+
+msgid "Idempotency-Key is already used"
+msgstr ""
+
+msgid "Idempotency-Key is missing"
+msgstr ""
+
+msgid "If set, only one Route Set will be active per exclusivity group"
+msgstr ""
+
+msgid ""
+"If set, Package Manager assumes that the source doesn't support HEAD "
+"requests and will use GET instead. If false, HEAD requests will be sent to "
+"check availability."
+msgstr ""
+
+msgid "Ignore and apply"
+msgstr ""
+
+msgid "Ignore QuickLoop"
+msgstr ""
+
+msgid "Ignoring take as playing part has changed since TAKE was requested."
+msgstr ""
+
+msgid "Ignoring TAKES that are too quick after eachother ({{duration}} ms)"
+msgstr ""
+
+msgid "Import"
+msgstr ""
+
+msgid "Import error: {{errorMessage}}"
+msgstr ""
+
+msgid "Import file?"
+msgstr ""
+
+msgid "Importing an AdLib to the Bucket"
+msgstr ""
+
+msgid "In"
+msgstr ""
+
+msgid "IN"
+msgstr ""
+
+msgid "in {{days}} days, {{hours}} h {{minutes}} min {{seconds}} s"
+msgstr ""
+
+msgid "in {{hours}} h {{minutes}} min {{seconds}} s"
+msgstr ""
+
+msgid "in {{minutes}} min {{seconds}} s"
+msgstr ""
+
+msgid "in {{seconds}} s"
+msgstr ""
+
+msgid "In rehearsal"
+msgstr ""
+
+msgid "Include Clear Source Layer in Ad-Libs"
+msgstr ""
+
+msgid "Include Global AdLibs"
+msgstr ""
+
+msgid "Indicate only one next piece per source layer"
+msgstr ""
+
+msgid "Ingest Devices"
+msgstr ""
+
+msgid "Ingest devices are needed to create rundowns"
+msgstr ""
+
+msgid "Ingest from Snapshot"
+msgstr ""
+
+msgid "Ingest Rundown Status"
+msgstr ""
+
+msgid "Ingest Rundown Statuses"
+msgstr ""
+
+msgid "Input Devices"
+msgstr ""
+
+msgid "Input devices allow you to trigger Sofie actions remotely"
+msgstr ""
+
+msgid "Installation name"
+msgstr ""
+
+msgid "Internal Error generating RundownPlaylist"
+msgstr ""
+
+msgid "Internal ID"
+msgstr ""
+
+msgid "Invalid AdLib"
+msgstr ""
+
+msgid "Invalid blueprint: \"{{blueprintId}}\""
+msgstr ""
+
+msgid ""
+"Invalid config preset for blueprint: \"{{configPresetId}}\" "
+"({{blueprintId}})"
+msgstr ""
+
+msgid "Invert joystick"
+msgstr ""
+
+msgid "Is a Guest Input"
+msgstr ""
+
+msgid "Is a Live Remote Input"
+msgstr ""
+
+msgid "Is collapsed by default"
+msgstr ""
+
+msgid "Is flattened"
+msgstr ""
+
+msgid "Is hidden"
+msgstr ""
+
+msgid "Is Immutable"
+msgstr ""
+
+msgid "Is PGM Output"
+msgstr ""
+
+msgid "ISA URLs"
+msgstr ""
+
+msgid "Job Status"
+msgstr ""
+
+msgid "Just now"
+msgstr ""
+
+msgid "Key"
+msgstr ""
+
+msgid "Keyboard"
+msgstr ""
+
+msgid ""
+"Keyboard shortcuts and Stream Deck buttons will not work while filling out "
+"the form!"
+msgstr ""
+
+msgid "Kill (debug)"
+msgstr ""
+
+msgid "Label"
+msgstr ""
+
+msgid "Label contains"
+msgstr ""
+
+msgid "Last"
+msgstr ""
+
+msgid "Last {{layerName}}"
+msgstr ""
+
+msgid "Last modified"
+msgstr ""
+
+msgid "Last rundown is not break"
+msgstr ""
+
+msgid "Last seen"
+msgstr ""
+
+msgid "Last Seen"
+msgstr ""
+
+msgid "Last update"
+msgstr ""
+
+msgid "Last updated"
+msgstr ""
+
+msgid "Layer does not allow sticky pieces!"
+msgstr ""
+
+msgid "Layer ID"
+msgstr ""
+
+msgid "Layer Mappings"
+msgstr ""
+
+msgid "Layer Name"
+msgstr ""
+
+msgid "Leave Unsynced"
+msgstr ""
+
+msgid "Less than a minute ago"
+msgstr ""
+
+msgid "Less than five minutes ago"
+msgstr ""
+
+msgid "Lighting"
+msgstr ""
+
+msgid "Limit"
+msgstr ""
+
+msgid "Live line countdown requires Source Layer"
+msgstr ""
+
+msgid "Live Speak"
+msgstr ""
+
+msgid "Loading"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+msgid "Local"
+msgstr ""
+
+msgid "Local Time"
+msgstr ""
+
+msgid "Logging level"
+msgstr ""
+
+msgid "Logo"
+msgstr ""
+
+msgid "Lookahead Maximum Search Distance (Undefined = {{limit}})"
+msgstr ""
+
+msgid "Lookahead Mode"
+msgstr ""
+
+msgid "Lookahead Target Objects (Undefined = 1)"
+msgstr ""
+
+msgid "Loop End"
+msgstr ""
+
+msgid "Loop Start"
+msgstr ""
+
+msgid "Loops to Start"
+msgstr ""
+
+msgid "Lower Third"
+msgstr ""
+
+msgid "Manage Snapshots"
+msgstr ""
+
+msgid "Mapping cannot be reset as it has no default values"
+msgstr ""
+
+msgid "Mapping Type"
+msgstr ""
+
+msgid "Mappings"
+msgstr ""
+
+msgid "Margin (%)"
+msgstr ""
+
+msgid "Maximum register limit"
+msgstr ""
+
+msgid "Media"
+msgstr ""
+
+msgid "Media Preview URL"
+msgstr ""
+
+msgid "Media Status"
+msgstr ""
+
+msgid "Media Type"
+msgstr ""
+
+msgid "Memory troubleshooting"
+msgstr ""
+
+msgid "Menu"
+msgstr ""
+
+msgid "Message"
+msgstr ""
+
+msgid "Message Queue"
+msgstr ""
+
+msgid "Message shown to users in the Evaluations form"
+msgstr ""
+
+msgid "Messages"
+msgstr ""
+
+msgid "Method"
+msgstr ""
+
+msgid "Method ${method}"
+msgstr ""
+
+msgid "MIDI Pedal"
+msgstr ""
+
+msgid "Migrate database"
+msgstr ""
+
+msgid "Migrations"
+msgstr ""
+
+msgid "Mini Shelf Layout"
+msgstr ""
+
+msgid "Mini Shelf Layouts"
+msgstr ""
+
+msgid "Minimum register limit"
+msgstr ""
+
+msgid "Minimum Take Span"
+msgstr ""
+
+msgid "Minor Warning"
+msgstr ""
+
+msgid "Mirror horizontally"
+msgstr ""
+
+msgid "Mirror vertically"
+msgstr ""
+
+msgid "Mock Piece Content Status"
+msgstr ""
+
+msgid "Mode: {{triggerMode}}"
+msgstr ""
+
+msgid "Modify Shift register"
+msgstr ""
+
+msgid "Modifying Bucket"
+msgstr ""
+
+msgid "Modifying Bucket AdLib"
+msgstr ""
+
+msgid "Monitor blocked thread"
+msgstr ""
+
+msgid "More documentation available at:"
+msgstr ""
+
+msgid "More than 10 minutes ago"
+msgstr ""
+
+msgid "More than 2 hours ago"
+msgstr ""
+
+msgid "More than 30 minutes ago"
+msgstr ""
+
+msgid "More than 5 hours ago"
+msgstr ""
+
+msgid "More than a day ago"
+msgstr ""
+
+msgid "Mouse"
+msgstr ""
+
+msgid "Move Next"
+msgstr ""
+
+msgid "Move Next backwards"
+msgstr ""
+
+msgid "Move Next forwards"
+msgstr ""
+
+msgid "Move Next to the following segment"
+msgstr ""
+
+msgid "Move Next to the previous segment"
+msgstr ""
+
+msgid "Move Parts"
+msgstr ""
+
+msgid "Move Segments"
+msgstr ""
+
+msgid "Moving Next"
+msgstr ""
+
+msgid "Multi-gateway-mode delay time"
+msgstr ""
+
+msgid "Multilingual description, editing will overwrite"
+msgstr ""
+
+msgid "My name is {{name}}"
+msgstr ""
+
+msgid "Name"
+msgstr ""
+
+msgid "Network address"
+msgstr ""
+
+msgid "Network Id"
+msgstr ""
+
+msgid "New Bucket"
+msgstr ""
+
+msgid "New Filter"
+msgstr ""
+
+msgid "New Layer"
+msgstr ""
+
+msgid "New Layout"
+msgstr ""
+
+msgid "New Output"
+msgstr ""
+
+msgid "New Source"
+msgstr ""
+
+msgid "Next"
+msgstr ""
+
+msgid "Next Break text"
+msgstr ""
+
+msgid "Next Loop at"
+msgstr ""
+
+msgid "Next Part"
+msgstr ""
+
+msgid "Next scheduled show"
+msgstr ""
+
+msgid "Next Segment"
+msgstr ""
+
+msgid "Nintendo Joy-Con"
+msgstr ""
+
+msgid "No"
+msgstr ""
+
+msgid "No Action Triggers set up."
+msgstr ""
+
+msgid "No actions available"
+msgstr ""
+
+msgid ""
+"No Ad-Lib matches in the current state of Rundown: "
+"\"{{rundownPlaylistName}}\""
+msgstr ""
+
+msgid "No camera-related source layers found"
+msgstr ""
+
+msgid "No changes"
+msgstr ""
+
+msgid "No gateways are configured"
+msgstr ""
+
+msgid "No matching Action Trigger."
+msgstr ""
+
+msgid "No matching Rundowns available to be used for preview"
+msgstr ""
+
+msgid "No Media matches this filter"
+msgstr ""
+
+msgid "No Media required by this system"
+msgstr ""
+
+msgid "No Media required for this Rundown"
+msgstr ""
+
+msgid "No migrations to apply"
+msgstr ""
+
+msgid "No name set"
+msgstr ""
+
+msgid "No Next point found, please set a part as Next before doing a TAKE."
+msgstr ""
+
+msgid "No notifications"
+msgstr ""
+
+msgid "No output channels set"
+msgstr ""
+
+msgid "No output layers available"
+msgstr ""
+
+msgid "No PGM output"
+msgstr ""
+
+msgid "No problems"
+msgstr ""
+
+msgid "No schema has been provided for this mapping"
+msgstr ""
+
+msgid "No source layers available"
+msgstr ""
+
+msgid "No source layers set"
+msgstr ""
+
+msgid "No status loaded"
+msgstr ""
+
+msgid "None"
+msgstr ""
+
+msgid "Normal scrolling"
+msgstr ""
+
+msgid "Not Active"
+msgstr ""
+
+msgid "Not Connected"
+msgstr ""
+
+msgid "Not defined"
+msgstr ""
+
+msgid "Not Global"
+msgstr ""
+
+msgid "Not in rehearsal"
+msgstr ""
+
+msgid "Not queueable"
+msgstr ""
+
+msgid "Not set"
+msgstr ""
+
+msgid "Note: Core needs to be restarted to apply these settings"
+msgstr ""
+
+msgid "Notes"
+msgstr ""
+
+msgid "Nothing to cleanup!"
+msgstr ""
+
+msgid "Nothing was found on layer!"
+msgstr ""
+
+msgid "Now Active Rundown"
+msgstr ""
+
+msgid "NRCS Name"
+msgstr ""
+
+msgid "OAuth credentials successfully reset"
+msgstr ""
+
+msgid "OAuth credentials successfully uploaded."
+msgstr ""
+
+msgid "Off"
+msgstr ""
+
+msgid "Off-line devices"
+msgstr ""
+
+msgid "OK"
+msgstr ""
+
+msgid "On"
+msgstr ""
+
+msgid "On Air"
+msgstr ""
+
+msgid "On Air At"
+msgstr ""
+
+msgid "On Air In"
+msgstr ""
+
+msgid "On Air Start Time"
+msgstr ""
+
+msgid "On release"
+msgstr ""
+
+msgid "OnAir"
+msgstr ""
+
+msgid ""
+"One of these source layers must have a piece for the countdown to segment "
+"on-air to be show"
+msgstr ""
+
+msgid ""
+"One of these source layers must have an active piece for the live line "
+"countdown to be show"
+msgstr ""
+
+msgid "Only custom trigger modes will be shown"
+msgstr ""
+
+msgid "Only Display AdLibs from Current Segment"
+msgstr ""
+
+msgid "Only Global"
+msgstr ""
+
+msgid "Only Match Global AdLibs"
+msgstr ""
+
+msgid ""
+"Only one rundown can be active at the same time. Currently active rundowns: "
+"{{names}}"
+msgstr ""
+
+msgid "Only Pieces present in rundown are sticky"
+msgstr ""
+
+msgid "Open"
+msgstr ""
+
+msgid "Open Camera Screen"
+msgstr ""
+
+msgid "Open Fullscreen"
+msgstr ""
+
+msgid "Open Presenter Screen"
+msgstr ""
+
+msgid "Open Prompter"
+msgstr ""
+
+msgid "Open shelf by default"
+msgstr ""
+
+msgid "Operating Mode"
+msgstr ""
+
+msgid "Operation"
+msgstr ""
+
+msgid "Optional description of the action"
+msgstr ""
+
+msgid ""
+"Optionally restrict AB channel display to specific output layers (e.g., "
+"only PGM). Leave empty to show for all output layers."
+msgstr ""
+
+msgid "Order 66?"
+msgstr ""
+
+msgid "Original Layer"
+msgstr ""
+
+msgid "Original Layer not found"
+msgstr ""
+
+msgid "Other"
+msgstr ""
+
+msgid "Out"
+msgstr ""
+
+msgid "OUT"
+msgstr ""
+
+msgid "Output channels"
+msgstr ""
+
+msgid "Output Channels"
+msgstr ""
+
+msgid "Output channels are required for your studio to work"
+msgstr ""
+
+msgid "Output Layer"
+msgstr ""
+
+msgid "Over"
+msgstr ""
+
+msgid "Over/Under"
+msgstr ""
+
+msgid "Overflow horizontally"
+msgstr ""
+
+msgid "Overlay Screen"
+msgstr ""
+
+msgid "Package Container ID"
+msgstr ""
+
+msgid "Package Containers"
+msgstr ""
+
+msgid "Package Containers to use for previews"
+msgstr ""
+
+msgid "Package Containers to use for thumbnails"
+msgstr ""
+
+msgid "Package Manager"
+msgstr ""
+
+msgid "Package Manager is offline"
+msgstr ""
+
+msgid "Package Manager status"
+msgstr ""
+
+msgid "Package Manager: Restart Package Container"
+msgstr ""
+
+msgid "Package Manager: Restart work"
+msgstr ""
+
+msgid "Package Status"
+msgstr ""
+
+msgid "Packages"
+msgstr ""
+
+msgid "Parameters"
+msgstr ""
+
+msgid "Parent Config ID"
+msgstr ""
+
+msgid "Parent device is missing"
+msgstr ""
+
+msgid "Parent Devices"
+msgstr ""
+
+msgid "part"
+msgstr ""
+
+msgid "Part"
+msgstr ""
+
+msgid "Part Count Down"
+msgstr ""
+
+msgid "Part Count Up"
+msgstr ""
+
+msgid "Part duration is 0."
+msgstr ""
+
+msgid "Parts Duration"
+msgstr ""
+
+msgid "Parts: {{delta}}"
+msgstr ""
+
+msgid "Password"
+msgstr ""
+
+msgid "Password for authentication"
+msgstr ""
+
+msgid "Peripheral Device is outdated"
+msgstr ""
+
+msgid "Peripheral Device not found!"
+msgstr ""
+
+msgid "Peripheral Devices"
+msgstr ""
+
+msgid "Pick"
+msgstr ""
+
+msgid "Pick last"
+msgstr ""
+
+msgid ""
+"Picks the first instance of an adLib per rundown, identified by uniqueness "
+"Id"
+msgstr ""
+
+msgid "Piece on selected source layers will have a duration label shown"
+msgstr ""
+
+msgid "Piece to take is already live!"
+msgstr ""
+
+msgid "Piece to take is not directly playable!"
+msgstr ""
+
+msgid "Piece to take was not found!"
+msgstr ""
+
+msgid "Pieces on this layer are sticky"
+msgstr ""
+
+msgid "Pieces on this layer can be cleared"
+msgstr ""
+
+msgid "Place label below panel"
+msgstr ""
+
+msgid "Plan. Dur"
+msgstr ""
+
+msgid "Plan. End"
+msgstr ""
+
+msgid "Plan. Start"
+msgstr ""
+
+msgid "Planned Duration"
+msgstr ""
+
+msgid "Planned End"
+msgstr ""
+
+msgid "Planned End text"
+msgstr ""
+
+msgid "Planned Start"
+msgstr ""
+
+msgid "Planned Start Text"
+msgstr ""
+
+msgid "Play-out"
+msgstr ""
+
+msgid "Playlist"
+msgstr ""
+
+msgid "Playout Devices"
+msgstr ""
+
+msgid "Playout devices are needed to control your studio hardware"
+msgstr ""
+
+msgid "Playout devices which uses this package container"
+msgstr ""
+
+msgid "Playout Gateway \"{{playoutDeviceName}}\" is now restarting."
+msgstr ""
+
+msgid ""
+"Please check the database related to the warnings above. If neccessary, you "
+"can"
+msgstr ""
+
+msgid "Please explain the problems you experienced"
+msgstr ""
+
+msgid "Please note: This action is irreversible!"
+msgstr ""
+
+msgid "Pool name"
+msgstr ""
+
+msgid "Pool PlayerId"
+msgstr ""
+
+msgid "Prepare Studio and Activate (Rehearsal)"
+msgstr ""
+
+msgid "Preparing for broadcast"
+msgstr ""
+
+msgid "Preparing, please wait..."
+msgstr ""
+
+msgid "Presenter Layout"
+msgstr ""
+
+msgid "Presenter screen"
+msgstr ""
+
+msgid "Presenter Screen"
+msgstr ""
+
+msgid "Presenter View Layouts"
+msgstr ""
+
+msgid "Preserve position of segments when unsynced relative to other segments"
+msgstr ""
+
+msgid "Previous"
+msgstr ""
+
+msgid "Previous work status reasons"
+msgstr ""
+
+msgid "Prioritizing Media Workflow"
+msgstr ""
+
+msgid "Priority"
+msgstr ""
+
+msgid "Problems"
+msgstr ""
+
+msgid "Profile name to be used by FileFlow when exporting the clips"
+msgstr ""
+
+msgid "Prompter"
+msgstr ""
+
+msgid "Prompter Screen"
+msgstr ""
+
+msgid "Properties"
+msgstr ""
+
+msgid "Quantel FileFlow Profile name"
+msgstr ""
+
+msgid "Quantel FileFlow URL"
+msgstr ""
+
+msgid "Quantel gateway URL"
+msgstr ""
+
+msgid "Quantel transformer URL"
+msgstr ""
+
+msgid "Quantel Zone ID"
+msgstr ""
+
+msgid "Queue AdLib from Minishelf"
+msgstr ""
+
+msgid "Queue all adlibs"
+msgstr ""
+
+msgid "Queue segment"
+msgstr ""
+
+msgid "Queue this AdLib"
+msgstr ""
+
+msgid "Queued Messages"
+msgstr ""
+
+msgid "Queueing next Segment"
+msgstr ""
+
+msgid "Quick Links"
+msgstr ""
+
+msgid "QuickLoop Fallback Part Duration"
+msgstr ""
+
+msgid "Range: Forward max"
+msgstr ""
+
+msgid "Range: Neutral max"
+msgstr ""
+
+msgid "Range: Neutral min"
+msgstr ""
+
+msgid "Range: Reverse min"
+msgstr ""
+
+msgid "Rate limit exceeded"
+msgstr ""
+
+msgid "Re-check"
+msgstr ""
+
+msgid "Re-sync"
+msgstr ""
+
+msgid "Re-Sync"
+msgstr ""
+
+msgid "Re-sync Rundown"
+msgstr ""
+
+msgid "Re-sync rundown data with {{nrcsName}}"
+msgstr ""
+
+msgid "Re-Sync rundown?"
+msgstr ""
+
+msgid "Re-Syncing Rundown"
+msgstr ""
+
+msgid "Re-Syncing Rundown Playlist"
+msgstr ""
+
+msgid "Read marker position"
+msgstr ""
+
+msgid "Reads the ingest (NRCS) data, and pipes it through the blueprints"
+msgstr ""
+
+msgid "Ready"
+msgstr ""
+
+msgid "Reconnect now"
+msgstr ""
+
+msgid "Reconnecting to the {{platformName}}"
+msgstr ""
+
+msgid "Refreshing debug states"
+msgstr ""
+
+msgid "Register ID"
+msgstr ""
+
+msgid "Rehearsal"
+msgstr ""
+
+msgid "Rehearsal mode is already active"
+msgstr ""
+
+msgid "Rehearsal mode is not allowed"
+msgstr ""
+
+msgid "Rehearsal State"
+msgstr ""
+
+msgid "Reload {{nrcsName}} Data"
+msgstr ""
+
+msgid "Reload Baseline"
+msgstr ""
+
+msgid "Reload NRCS Data"
+msgstr ""
+
+msgid "Reload statuses"
+msgstr ""
+
+msgid "Reloading Rundown Playlist Data"
+msgstr ""
+
+msgid "Rem. Dur"
+msgstr ""
+
+msgid "Remote"
+msgstr ""
+
+msgid "Remote Source"
+msgstr ""
+
+msgid "Remote Speak"
+msgstr ""
+
+msgid "Remove"
+msgstr ""
+
+msgid "Remove all Show Style Variants?"
+msgstr ""
+
+msgid "Remove all trimming"
+msgstr ""
+
+msgid "Remove in-trimming"
+msgstr ""
+
+msgid "Remove indexes"
+msgstr ""
+
+msgid "Remove old data"
+msgstr ""
+
+msgid "Remove old data from database"
+msgstr ""
+
+msgid "Remove out-trimming"
+msgstr ""
+
+msgid "Remove rundown"
+msgstr ""
+
+msgid "Remove Snapshot"
+msgstr ""
+
+msgid "Remove this AB PLayers from this Route Set?"
+msgstr ""
+
+msgid "Remove this device?"
+msgstr ""
+
+msgid "Remove this Device?"
+msgstr ""
+
+msgid "Remove this Exclusivity Group?"
+msgstr ""
+
+msgid "Remove this item?"
+msgstr ""
+
+msgid "Remove this mapping?"
+msgstr ""
+
+msgid "Remove this Package Container Accessor?"
+msgstr ""
+
+msgid "Remove this Package Container?"
+msgstr ""
+
+msgid "Remove this Route from this Route Set?"
+msgstr ""
+
+msgid "Remove this Route Set?"
+msgstr ""
+
+msgid "Remove this Show Style Variant?"
+msgstr ""
+
+msgid "Removing Bucket"
+msgstr ""
+
+msgid "Removing Bucket AdLib"
+msgstr ""
+
+msgid "Removing Rundown"
+msgstr ""
+
+msgid "Removing Rundown Playlist"
+msgstr ""
+
+msgid "Rename this AdLib"
+msgstr ""
+
+msgid "Rename this Bucket"
+msgstr ""
+
+msgid "Reording Rundowns in Playlist"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace Blueprints?"
+msgstr ""
+
+msgid "Replace rows"
+msgstr ""
+
+msgid "Require All Additional Source Layers"
+msgstr ""
+
+msgid "Require Piece on Source Layer"
+msgstr ""
+
+msgid "Reset"
+msgstr ""
+
+msgid "Reset Action"
+msgstr ""
+
+msgid "Reset All Versions"
+msgstr ""
+
+msgid "Reset and Activate \"On Air\""
+msgstr ""
+
+msgid "Reset App Credentials"
+msgstr ""
+
+msgid "Reset Database Version"
+msgstr ""
+
+msgid "Reset mapping to default values"
+msgstr ""
+
+msgid "Reset Package Container to default values"
+msgstr ""
+
+msgid "Reset row to default values"
+msgstr ""
+
+msgid "Reset Rundown"
+msgstr ""
+
+msgid "Reset Sort Order"
+msgstr ""
+
+msgid "Reset source layer to default values"
+msgstr ""
+
+msgid "Reset this item?"
+msgstr ""
+
+msgid "Reset this mapping?"
+msgstr ""
+
+msgid "Reset this Package Container?"
+msgstr ""
+
+msgid "Reset to default"
+msgstr ""
+
+msgid "Reset User Credentials"
+msgstr ""
+
+msgid "Resetting and activating Rundown Playlist"
+msgstr ""
+
+msgid "Resetting Playlist to default order"
+msgstr ""
+
+msgid "Resetting Rundown Playlist"
+msgstr ""
+
+msgid "Resource Id"
+msgstr ""
+
+msgid "Restart"
+msgstr ""
+
+msgid "Restart {{device}}"
+msgstr ""
+
+msgid "Restart All Jobs"
+msgstr ""
+
+msgid "Restart CasparCG Server"
+msgstr ""
+
+msgid "Restart Container"
+msgstr ""
+
+msgid "Restart Device"
+msgstr ""
+
+msgid "Restart Playout"
+msgstr ""
+
+msgid "Restart this Device?"
+msgstr ""
+
+msgid "Restart this system?"
+msgstr ""
+
+msgid "Restarting Media Workflow"
+msgstr ""
+
+msgid "Restarting Sofie Core"
+msgstr ""
+
+msgid "Restore"
+msgstr ""
+
+msgid "Restore Deleted Action"
+msgstr ""
+
+msgid "Restore from Snapshot File"
+msgstr ""
+
+msgid "Restore from Stored Snapshots"
+msgstr ""
+
+msgid "Restore from this Snapshot file?"
+msgstr ""
+
+msgid "Restore Part from NRCS"
+msgstr ""
+
+msgid "Restore Segment from NRCS"
+msgstr ""
+
+msgid "Restore Snapshot"
+msgstr ""
+
+msgid "Resync with NRCS"
+msgstr ""
+
+msgid "Retry"
+msgstr ""
+
+msgid "Return to list"
+msgstr ""
+
+msgid "Reveal in Shelf"
+msgstr ""
+
+msgid "Reverse speed map"
+msgstr ""
+
+msgid "Reverse speed map (left trigger)"
+msgstr ""
+
+msgid "Rewind all Segments"
+msgstr ""
+
+msgid "Rewind segments to start"
+msgstr ""
+
+msgid "Rewind Segments to start"
+msgstr ""
+
+msgid "Right hand offset"
+msgstr ""
+
+msgid "Role"
+msgstr ""
+
+msgid "Route Set"
+msgstr ""
+
+msgid "Route Set ID"
+msgstr ""
+
+msgid "Route Set Name"
+msgstr ""
+
+msgid "Route Sets"
+msgstr ""
+
+msgid "Route Type"
+msgstr ""
+
+msgid "Routed Mappings"
+msgstr ""
+
+msgid "Routes"
+msgstr ""
+
+msgid "Row cannot be reset as it has no default values"
+msgstr ""
+
+msgid "Run automatic migration procedure"
+msgstr ""
+
+msgid "Run Migrations to get set up"
+msgstr ""
+
+msgid "Rundown"
+msgstr ""
+
+msgid ""
+"Rundown {{rundownName}} in Playlist {{playlistName}} is missing in the data "
+"from {{nrcsName}}. You can either leave it in Sofie and mark it as Unsynced "
+"or remove the rundown from Sofie. What do you want to do?"
+msgstr ""
+
+msgid "Rundown & Shelf"
+msgstr ""
+
+msgid "Rundown filter"
+msgstr ""
+
+msgid "Rundown for piece \"{{pieceLabel}}\" could not be found."
+msgstr ""
+
+msgid "Rundown Global Piece Prepare Time"
+msgstr ""
+
+msgid "Rundown Header Layout"
+msgstr ""
+
+msgid "Rundown Header Layouts"
+msgstr ""
+
+msgid "Rundown is already doing a HOLD!"
+msgstr ""
+
+msgid "Rundown must be active!"
+msgstr ""
+
+msgid "Rundown must be playing or have a next!"
+msgstr ""
+
+msgid "Rundown must be playing!"
+msgstr ""
+
+msgid "Rundown Name"
+msgstr ""
+
+msgid "Rundown not found"
+msgstr ""
+
+msgid ""
+"Rundown Playlist is active, please deactivate before preparing it for "
+"broadcast"
+msgstr ""
+
+msgid "Rundown Playlist is active, please deactivate it before regenerating it."
+msgstr ""
+
+msgid "Rundown Playlist names to store"
+msgstr ""
+
+msgid "Rundown Playlist not found!"
+msgstr ""
+
+msgid "Rundown View Layouts"
+msgstr ""
+
+msgid ""
+"RundownPlaylist is active but not in rehearsal, please deactivate it or set "
+"in in rehearsal to be able to reset it."
+msgstr ""
+
+msgid "Rundowns"
+msgstr ""
+
+msgid "Save"
+msgstr ""
+
+msgid "Save Changes"
+msgstr ""
+
+msgid "Save to Bucket"
+msgstr ""
+
+msgid "Saving AdLib to Bucket"
+msgstr ""
+
+msgid "Saving Evaluation"
+msgstr ""
+
+msgid "Scale"
+msgstr ""
+
+msgid "Script is empty"
+msgstr ""
+
+msgid "Script Source Layers"
+msgstr ""
+
+msgid "Search..."
+msgstr ""
+
+msgid "Seg. Budg."
+msgstr ""
+
+msgid "segment"
+msgstr ""
+
+msgid "Segment"
+msgstr ""
+
+msgid "Segment Count Down"
+msgstr ""
+
+msgid "Segment Count Up"
+msgstr ""
+
+msgid "Segment countdown requires source layer"
+msgstr ""
+
+msgid "Segment no longer exists in {{nrcs}}"
+msgstr ""
+
+msgid "Segment was hidden in {{nrcs}}"
+msgstr ""
+
+msgid "Segments: {{delta}}"
+msgstr ""
+
+msgid ""
+"Select a presenter layout. Leave as default to use the first available "
+"layout."
+msgstr ""
+
+msgid "Select Action"
+msgstr ""
+
+msgid "Select Compatible Show Styles"
+msgstr ""
+
+msgid "Select image"
+msgstr ""
+
+msgid ""
+"Select one or more control modes. Leave all unchecked for default (mouse + "
+"keyboard)."
+msgstr ""
+
+msgid ""
+"Select source layers to display. Leave all unchecked to show all "
+"camera-related layers."
+msgstr ""
+
+msgid "Select visible Output Groups"
+msgstr ""
+
+msgid "Select visible Source Layers"
+msgstr ""
+
+msgid "Select which playout devices are using this package container"
+msgstr ""
+
+msgid "Send message"
+msgstr ""
+
+msgid "Send message and Deactivate Rundown"
+msgstr ""
+
+msgid "Sent Messages"
+msgstr ""
+
+msgid "Server"
+msgstr ""
+
+msgid "Server {{id}}"
+msgstr ""
+
+msgid "Server ID"
+msgstr ""
+
+msgid ""
+"Server ID. For sources, this should generally be omitted (or set to 0) so "
+"clip-searches are zone-wide. If set, clip-searches are limited to that "
+"server."
+msgstr ""
+
+msgid "Set"
+msgstr ""
+
+msgid "Set as QuickLoop End"
+msgstr ""
+
+msgid "Set as QuickLoop Start"
+msgstr ""
+
+msgid "Set In & Out points"
+msgstr ""
+
+msgid "Set part as Next"
+msgstr ""
+
+msgid "Set segment as Next"
+msgstr ""
+
+msgid "Setting as QuickLoop End"
+msgstr ""
+
+msgid "Setting as QuickLoop Start"
+msgstr ""
+
+msgid "Setting Next"
+msgstr ""
+
+msgid "Setting Next Segment"
+msgstr ""
+
+msgid "Settings"
+msgstr ""
+
+msgid "Shelf"
+msgstr ""
+
+msgid "Shelf Layout"
+msgstr ""
+
+msgid "Shelf layout uploaded successfully."
+msgstr ""
+
+msgid "Shelf Layouts"
+msgstr ""
+
+msgid "Shortcuts"
+msgstr ""
+
+msgid "Show \"Remove snapshots\"-buttons"
+msgstr ""
+
+msgid "Show All"
+msgstr ""
+
+msgid "Show Breaks as Segments"
+msgstr ""
+
+msgid "Show config changes"
+msgstr ""
+
+msgid "Show End"
+msgstr ""
+
+msgid "Show entire On Air Segment"
+msgstr ""
+
+msgid "Show Hotkeys"
+msgstr ""
+
+msgid "Show Inspector"
+msgstr ""
+
+msgid "Show issue"
+msgstr ""
+
+msgid "Show next break timing"
+msgstr ""
+
+msgid "Show panel as a timeline"
+msgstr ""
+
+msgid "Show part title"
+msgstr ""
+
+msgid "Show Piece Icon Color"
+msgstr ""
+
+msgid "Show Rundown Name"
+msgstr ""
+
+msgid "Show segment name"
+msgstr ""
+
+msgid "Show Style"
+msgstr ""
+
+msgid "Show Style Base Name"
+msgstr ""
+
+msgid "Show style not set"
+msgstr ""
+
+msgid "Show Style Variant"
+msgstr ""
+
+msgid "Show Style Variants"
+msgstr ""
+
+msgid "Show Styles"
+msgstr ""
+
+msgid "Show thumbnails next to list items"
+msgstr ""
+
+msgid "ShowStyleBase not found!"
+msgstr ""
+
+msgid "Shuttle Keyboard (Contour ShuttleXpress / X-keys)"
+msgstr ""
+
+msgid "Shuttle WebHID (Contour ShuttleXpress via browser)"
+msgstr ""
+
+msgid "Skip Fix Up Step"
+msgstr ""
+
+msgid "Slack Webhook URLs"
+msgstr ""
+
+msgid "Smooth scrolling"
+msgstr ""
+
+msgid "Snapshot remove failed: {{errorMessage}}"
+msgstr ""
+
+msgid "Snapshot restore failed: {{errorMessage}}"
+msgstr ""
+
+msgid "Snapshot restored!"
+msgstr ""
+
+msgid "Sofie"
+msgstr ""
+
+msgid "Sofie Automation"
+msgstr ""
+
+msgid "Sofie Automation Server"
+msgstr ""
+
+msgid "Sofie Automation Server Core"
+msgstr ""
+
+msgid "Sofie Automation Server Core will restart in {{time}}s..."
+msgstr ""
+
+msgid "Sofie Automation Server Core: {{name}}"
+msgstr ""
+
+msgid "Sofie logo to be displayed in the header. Requires a page refresh."
+msgstr ""
+
+msgid "some invalid reason"
+msgstr ""
+
+msgid "some message"
+msgstr ""
+
+msgid "some reason"
+msgstr ""
+
+msgid "something changed"
+msgstr ""
+
+msgid ""
+"Something went wrong when creating the snapshot. Please contact the system "
+"administrator if the problem persists."
+msgstr ""
+
+msgid "Something went wrong, and it affected the output"
+msgstr ""
+
+msgid "Something went wrong, but it didn't affect the output"
+msgstr ""
+
+msgid ""
+"Something went wrong, please contact the system administrator if the "
+"problem persists."
+msgstr ""
+
+msgid "Source Abbreviation"
+msgstr ""
+
+msgid "Source Layer"
+msgstr ""
+
+msgid "Source layer cannot be reset as it has no default values"
+msgstr ""
+
+msgid "Source Layer Type"
+msgstr ""
+
+msgid "Source Layer Types"
+msgstr ""
+
+msgid "Source Layers"
+msgstr ""
+
+msgid "Source layers containing script"
+msgstr ""
+
+msgid "Source Name"
+msgstr ""
+
+msgid "Source Type"
+msgstr ""
+
+msgid "Source/Output Layers"
+msgstr ""
+
+msgid "Sources"
+msgstr ""
+
+msgid "Space separated list of style class names to use when displaying the action"
+msgstr ""
+
+msgid "Specify additional layers where at least one layer must have an active piece"
+msgstr ""
+
+msgid "Speed control"
+msgstr ""
+
+msgid "Speed map"
+msgstr ""
+
+msgid "Speed map (forward, right trigger)"
+msgstr ""
+
+msgid "Split Screen"
+msgstr ""
+
+msgid "Splits"
+msgstr ""
+
+msgid "Standalone Shelf"
+msgstr ""
+
+msgid "Start Here!"
+msgstr ""
+
+msgid "Start In"
+msgstr ""
+
+msgid "Start this AdLib"
+msgstr ""
+
+msgid "Start time is close"
+msgstr ""
+
+msgid ""
+"Start with giving this browser configuration permissions by adding this to "
+"the URL: "
+msgstr ""
+
+msgid "Started"
+msgstr ""
+
+msgid "Starting AdLib"
+msgstr ""
+
+msgid "Starting Bucket AdLib"
+msgstr ""
+
+msgid "Starting Global AdLib"
+msgstr ""
+
+msgid "Starting Sticky Piece"
+msgstr ""
+
+msgid "State"
+msgstr ""
+
+msgid "State \"{{state}}\""
+msgstr ""
+
+msgid "Statistics"
+msgstr ""
+
+msgid "Status"
+msgstr ""
+
+msgid "Status Messages:"
+msgstr ""
+
+msgid "Sticky Piece"
+msgstr ""
+
+msgid "Store Snapshot"
+msgstr ""
+
+msgid "Studio"
+msgstr ""
+
+msgid "Studio Baseline needs update: "
+msgstr ""
+
+msgid "Studio Labels"
+msgstr ""
+
+msgid "Studio Name"
+msgstr ""
+
+msgid "Studio not found!"
+msgstr ""
+
+msgid "Studio Screen Graphics"
+msgstr ""
+
+msgid "Studio Settings"
+msgstr ""
+
+msgid "Studio Snapshot"
+msgstr ""
+
+msgid "Studios"
+msgstr ""
+
+msgid "Style class names"
+msgstr ""
+
+msgid "Subtract"
+msgstr ""
+
+msgid "Successfully restored snapshot"
+msgstr ""
+
+msgid "Successfully stored snapshot"
+msgstr ""
+
+msgid "Support Panel"
+msgstr ""
+
+msgid "Supported Audio Formats"
+msgstr ""
+
+msgid "Supported Media Formats"
+msgstr ""
+
+msgid "Switch Route Set"
+msgstr ""
+
+msgid "Switch Segment View Mode"
+msgstr ""
+
+msgid "Switch to List View"
+msgstr ""
+
+msgid "Switch to Storyboard View"
+msgstr ""
+
+msgid "Switch to Timeline View"
+msgstr ""
+
+msgid "Switchboard"
+msgstr ""
+
+msgid "Switchboard Panel"
+msgstr ""
+
+msgid "Switching operating mode to {{mode}}"
+msgstr ""
+
+msgid "Switching routing"
+msgstr ""
+
+msgid "System"
+msgstr ""
+
+msgid "System has issues which need to be resolved"
+msgstr ""
+
+msgid "System must have exactly one studio"
+msgstr ""
+
+msgid "System Status"
+msgstr ""
+
+msgid "System-wide"
+msgstr ""
+
+msgid "System-wide Notification Message"
+msgstr ""
+
+msgid "Table is not allowed to have `properties` defined"
+msgstr ""
+
+msgid "Table is only allowed the wildcard `patternProperties`"
+msgstr ""
+
+msgid "Tables are not supported here"
+msgstr ""
+
+msgid "Tag"
+msgstr ""
+
+msgid "Tags must contain"
+msgstr ""
+
+msgid "Take"
+msgstr ""
+
+msgid "Take a Full System Snapshot"
+msgstr ""
+
+msgid "Take a Snapshot"
+msgstr ""
+
+msgid "Take a Snapshot for studio \"{{studioName}}\" only"
+msgstr ""
+
+msgid "Take and Download Memory Heap Snapshot"
+msgstr ""
+
+msgid "Take System Snapshot"
+msgstr ""
+
+msgid "Take System Snapshot failed: {{errorMessage}}"
+msgstr ""
+
+msgid "Taking Piece"
+msgstr ""
+
+msgid "Technical reason: {{reason}}"
+msgstr ""
+
+msgid "test"
+msgstr ""
+
+msgid "Test ERROR message"
+msgstr ""
+
+msgid "Test Info message"
+msgstr ""
+
+msgid "test partInstance"
+msgstr ""
+
+msgid "test pieceInstance"
+msgstr ""
+
+msgid "test playlist"
+msgstr ""
+
+msgid "test rundown"
+msgstr ""
+
+msgid "Test test"
+msgstr ""
+
+msgid "Test Tools"
+msgstr ""
+
+msgid "test2"
+msgstr ""
+
+msgid "Text"
+msgstr ""
+
+msgid "Text to show above countdown to end of show"
+msgstr ""
+
+msgid "Text to show above countdown to next break"
+msgstr ""
+
+msgid "Text to show above show end time"
+msgstr ""
+
+msgid "Text to show above show start time"
+msgstr ""
+
+msgid ""
+"The config UI is now driven by manifests fed by the device. This device "
+"needs updating to provide the configManifest to be configurable"
+msgstr ""
+
+msgid "The following parts no longer exist in {{nrcs}}: {{partNames}}"
+msgstr ""
+
+msgid "The migration can be completed automatically."
+msgstr ""
+
+msgid ""
+"The migration consists of several phases, you will get more options after "
+"you've this migration"
+msgstr ""
+
+msgid "The migration was completed successfully!"
+msgstr ""
+
+msgid "The old data was removed."
+msgstr ""
+
+msgid ""
+"The planned end time has passed, are you sure you want to activate this "
+"Rundown?"
+msgstr ""
+
+msgid "The progress of all steps"
+msgstr ""
+
+msgid "The progress of steps required for playout"
+msgstr ""
+
+msgid ""
+"The rundown \"{{rundownName}}\" is not published or activated in "
+"{{nrcsName}}! No data updates will currently come through."
+msgstr ""
+
+msgid "The rundown can not be reset while it is active"
+msgstr ""
+
+msgid ""
+"The Rundown was attempted to be moved out of the Playlist when it was on "
+"Air. Move it back and try again later."
+msgstr ""
+
+msgid ""
+"The rundown you are trying to execute a take on is inactive, would you like "
+"to activate this rundown?"
+msgstr ""
+
+msgid ""
+"The rundown: \"{{rundownName}}\" will need to be deactivated in order to "
+"activate this one.\n"
+"\n"
+"Are you sure you want to activate this one anyway?"
+msgstr ""
+
+msgid ""
+"The segment duration in the segment header always displays the planned "
+"duration instead of acting as a counter"
+msgstr ""
+
+msgid "The selected part cannot be played"
+msgstr ""
+
+msgid "The selected part does not exist"
+msgstr ""
+
+msgid ""
+"The system configuration has been changed since importing this rundown. It "
+"might not run correctly"
+msgstr ""
+
+msgid "The type of device to use for the output"
+msgstr ""
+
+msgid "The type of mapping to use"
+msgstr ""
+
+msgid "The way this Route Set should behave towards the user"
+msgstr ""
+
+msgid "Then, run the migrations script:"
+msgstr ""
+
+msgid "There are no AB Playout devices set up yet"
+msgstr ""
+
+msgid "There are no Accessors set up."
+msgstr ""
+
+msgid "There are no active rundowns."
+msgstr ""
+
+msgid "There are no exclusivity groups set up."
+msgstr ""
+
+msgid "There are no filters set up yet"
+msgstr ""
+
+msgid ""
+"There are no Playout Gateways connected and attached to this studio. Please "
+"contact the system administrator to start the Playout Gateway."
+msgstr ""
+
+msgid "There are no Route Sets set up."
+msgstr ""
+
+msgid "There are no routes set up yet"
+msgstr ""
+
+msgid "There are no rundowns ingested into Sofie."
+msgstr ""
+
+msgid "There are no sub-devices for this gateway"
+msgstr ""
+
+msgid "There is an unknown problem with the part."
+msgstr ""
+
+msgid "There is an unspecified problem with the source."
+msgstr ""
+
+msgid "There is no rundown active in this studio."
+msgstr ""
+
+msgid ""
+"There was an error when troubleshooting the device: \"{{deviceName}}\": "
+"{{errorMessage}}"
+msgstr ""
+
+msgid "There was an error: {{error}}"
+msgstr ""
+
+msgid "This action has an invalid combination of filters"
+msgstr ""
+
+msgid "This affects how much is logged to the console on the server"
+msgstr ""
+
+msgid "This blueprint has not provided a valid config schema"
+msgstr ""
+
+msgid "This Blueprint is not being used by any Show Style"
+msgstr ""
+
+msgid "This Blueprint is not compatible with any Studio"
+msgstr ""
+
+msgid "This clip ends with black frames after {{seconds}} seconds"
+msgstr ""
+
+msgid "This clip ends with freeze frames after {{seconds}} seconds"
+msgstr ""
+
+msgid "This could leave the configuration in a broken state"
+msgstr ""
+
+msgid "This enables or disables buckets in the UI - enabled is the default behavior"
+msgstr ""
+
+msgid ""
+"This enables or disables the evaluationform in the UI - enabled is the "
+"default behavior"
+msgstr ""
+
+msgid "This feature enables the use of the Properties Panel and the Edit Mode"
+msgstr ""
+
+msgid "This has only been tested for the iNews gateway"
+msgstr ""
+
+msgid "This is not in it's normal setting"
+msgstr ""
+
+msgid ""
+"This migration consists of {{stepCount}} steps ({{ignoredStepCount}} steps "
+"are ignored)."
+msgstr ""
+
+msgid "This must be assigned to a device to be able to edit the settings"
+msgstr ""
+
+msgid "This name will be shown in the title bar of the window"
+msgstr ""
+
+msgid "This playlist is empty"
+msgstr ""
+
+msgid ""
+"This requires the blueprints to implement the "
+"`generateAdlibTestingIngestRundown` method"
+msgstr ""
+
+msgid "This rundown has been unpublished from Sofie."
+msgstr ""
+
+msgid "This rundown is currently active"
+msgstr ""
+
+msgid "This rundown is now active. Are you sure you want to exit this screen?"
+msgstr ""
+
+msgid "This rundown will loop indefinitely"
+msgstr ""
+
+msgid "This Show Style is not compatible with any Studio"
+msgstr ""
+
+msgid "This step is required for playout"
+msgstr ""
+
+msgid "This studio doesn't exist."
+msgstr ""
+
+msgid "This will remove {{indexCount}} old indexes, do you want to continue?"
+msgstr ""
+
+msgid "Time from platform user event to Action received by Core"
+msgstr ""
+
+msgid "Time since planned end"
+msgstr ""
+
+msgid "Time since rehearsal end"
+msgstr ""
+
+msgid "Time to planned end"
+msgstr ""
+
+msgid "Time to planned start"
+msgstr ""
+
+msgid "Time to rehearsal end"
+msgstr ""
+
+msgid "Timeline"
+msgstr ""
+
+msgid "Timeline Datastore"
+msgstr ""
+
+msgid "Times"
+msgstr ""
+
+msgid "Timestamp"
+msgstr ""
+
+msgid "To inspect the memory heap snapshot, use Chrome DevTools"
+msgstr ""
+
+msgid "Today"
+msgstr ""
+
+msgid "Toggle"
+msgstr ""
+
+msgid "Toggle AdLibs on single mouse click"
+msgstr ""
+
+msgid "Toggle Shelf"
+msgstr ""
+
+msgid "Toggle Support Panel"
+msgstr ""
+
+msgid "Toggled Label"
+msgstr ""
+
+msgid "Tomorrow"
+msgstr ""
+
+msgid "Tools"
+msgstr ""
+
+msgid "Top"
+msgstr ""
+
+msgid "Transition"
+msgstr ""
+
+msgid "Treat as Main content"
+msgstr ""
+
+msgid "Trigger dead zone"
+msgstr ""
+
+msgid "Trigger Mode"
+msgstr ""
+
+msgid "Triggered Actions failed to upload: {{errorMessage}}"
+msgstr ""
+
+msgid "Triggered Actions uploaded successfully."
+msgstr ""
+
+msgid "Trim \"{{name}}\""
+msgstr ""
+
+msgid "Trimmed successfully."
+msgstr ""
+
+msgid "Trimming this clip has failed due to an error: {{error}}."
+msgstr ""
+
+msgid ""
+"Trimming this clip has timed out. It's possible that the story is currently "
+"locked for writing in {{nrcsName}} and will eventually be updated. Make "
+"sure that the story is not being edited by other users."
+msgstr ""
+
+msgid ""
+"Trimming this clip is taking longer than expected. It's possible that the "
+"story is locked for writing in {{nrcsName}}."
+msgstr ""
+
+msgid "Troubleshoot"
+msgstr ""
+
+msgid "TSR"
+msgstr ""
+
+msgid "Type"
+msgstr ""
+
+msgid "Unable to check the system configuration for changes"
+msgstr ""
+
+msgid "Unable to upgrade"
+msgstr ""
+
+msgid "Unassign"
+msgstr ""
+
+msgid "Unconfigured"
+msgstr ""
+
+msgid "Under"
+msgstr ""
+
+msgid "Undo"
+msgstr ""
+
+msgid "Undo Disable the next element"
+msgstr ""
+
+msgid "Undo Hold"
+msgstr ""
+
+msgid "Unknown"
+msgstr ""
+
+msgid "Unknown action"
+msgstr ""
+
+msgid "Unknown error"
+msgstr ""
+
+msgid "Unknown Layer"
+msgstr ""
+
+msgid "Unknown Package \"{{packageId}}\""
+msgstr ""
+
+msgid "Unnamed blueprint"
+msgstr ""
+
+msgid "Unnamed Show Style"
+msgstr ""
+
+msgid "Unnamed Studio"
+msgstr ""
+
+msgid "Unnamed variant"
+msgstr ""
+
+msgid "Unsupported array type \"{{ type }}\""
+msgstr ""
+
+msgid "Unsupported field type \"{{ type }}\""
+msgstr ""
+
+msgid "Unsyncing Rundown"
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
+msgid "Until end of rundown"
+msgstr ""
+
+msgid "Until End of Rundown"
+msgstr ""
+
+msgid "Until end of segment"
+msgstr ""
+
+msgid "Until End of Segment"
+msgstr ""
+
+msgid "Until end of showstyle"
+msgstr ""
+
+msgid "Until End of Showstyle"
+msgstr ""
+
+msgid "Until next rundown"
+msgstr ""
+
+msgid "Until Next Rundown"
+msgstr ""
+
+msgid "Until next segment"
+msgstr ""
+
+msgid "Until Next Segment"
+msgstr ""
+
+msgid "Until next take"
+msgstr ""
+
+msgid "Until Next Take"
+msgstr ""
+
+msgid "Update"
+msgstr ""
+
+msgid "Update Blueprints?"
+msgstr ""
+
+msgid "Updated"
+msgstr ""
+
+msgid "Upgrade config for {{name}}"
+msgstr ""
+
+msgid "Upgrade Database"
+msgstr ""
+
+msgid "Upgrade required"
+msgstr ""
+
+msgid "Upgrade Status"
+msgstr ""
+
+msgid "Upload"
+msgstr ""
+
+msgid "Upload a new blueprint"
+msgstr ""
+
+msgid "Upload a snapshot file"
+msgstr ""
+
+msgid ""
+"Upload a snapshot file (restores additional info not directly related to a "
+"Playlist / Rundown, such as Packages, PackageWorkStatuses etc"
+msgstr ""
+
+msgid "Upload Blueprints"
+msgstr ""
+
+msgid "Upload Layout?"
+msgstr ""
+
+msgid "Upload Snapshot"
+msgstr ""
+
+msgid "Upload Snapshot (for debugging)"
+msgstr ""
+
+msgid "Upload stored Action Triggers"
+msgstr ""
+
+msgid "URL"
+msgstr ""
+
+msgid "URL to the Quantel FileFlow Manager"
+msgstr ""
+
+msgid "URL to the Quantel Gateway"
+msgstr ""
+
+msgid "URL to the Quantel HTTP transformer"
+msgstr ""
+
+msgid "URLs to the ISAs, in order of importance (comma separated)"
+msgstr ""
+
+msgid "Use {{nrcsName}} order"
+msgstr ""
+
+msgid "Use as default"
+msgstr ""
+
+msgid "Use color of primary piece as background of panel"
+msgstr ""
+
+msgid "Use Trigger Mode"
+msgstr ""
+
+msgid "User Activity Log"
+msgstr ""
+
+msgid "User ID"
+msgstr ""
+
+msgid "User Log"
+msgstr ""
+
+msgid "User Name"
+msgstr ""
+
+msgid "Username for authentication"
+msgstr ""
+
+msgid "Validate and Apply Config"
+msgstr ""
+
+msgid "Validation failed!"
+msgstr ""
+
+msgid "Value"
+msgstr ""
+
+msgid "Value between 0 and 1"
+msgstr ""
+
+msgid "Variants"
+msgstr ""
+
+msgid "version"
+msgstr ""
+
+msgid "Version"
+msgstr ""
+
+msgid "Version for {{name}}: From {{fromVersion}} to {{toVersion}}"
+msgstr ""
+
+msgid "View"
+msgstr ""
+
+msgid "View Layout"
+msgstr ""
+
+msgid "Waiting for action: {{actionName}}..."
+msgstr ""
+
+msgid "Waiting for gateway to generate URL..."
+msgstr ""
+
+msgid "Warning"
+msgstr ""
+
+msgid "Warnings"
+msgstr ""
+
+msgid "Warnings During Migration"
+msgstr ""
+
+msgid "What type of bank"
+msgstr ""
+
+msgid "When"
+msgstr ""
+
+msgid "When disabled, any HOLD operations will be silently ignored"
+msgstr ""
+
+msgid ""
+"When enabled, double clicking on certain pieces in the GUI will play them "
+"as adlibs"
+msgstr ""
+
+msgid ""
+"When enabled, this will override the piece content statuses to have no "
+"errors or warnings and display a mock preview. This should only be used for "
+"development!"
+msgstr ""
+
+msgid "When set, resources are considered immutable, ie they will not change"
+msgstr ""
+
+msgid "Whether to show countdown to next break"
+msgstr ""
+
+msgid ""
+"While there are still breaks coming up in the show, hide the Expected End "
+"timers"
+msgstr ""
+
+msgid "Width"
+msgstr ""
+
+msgid "Work description"
+msgstr ""
+
+msgid "Work status"
+msgstr ""
+
+msgid "Work status reason"
+msgstr ""
+
+msgid "Work-in-progress"
+msgstr ""
+
+msgid "Worker"
+msgstr ""
+
+msgid "WorkForce"
+msgstr ""
+
+msgid "X"
+msgstr ""
+
+msgid "Xbox Controller"
+msgstr ""
+
+msgid "Y"
+msgstr ""
+
+msgid "Yes"
+msgstr ""
+
+msgid "Yes, Take and Download Memory Heap Snapshot"
+msgstr ""
+
+msgid "Yesterday"
+msgstr ""
+
+msgid ""
+"You are in rehearsal mode, the broadcast starts in less than 1 minute. Do "
+"you want to go into On-Air mode?"
+msgstr ""
+
+msgid "You need to run migrations to set the system up for operation."
+msgstr ""
+
+msgid "Your machine is offline and cannot connect to the {{platformName}}."
+msgstr ""
+
+msgid "Your name"
+msgstr ""
+
+msgid "Zone ID"
+msgstr ""
+
+msgid "Zoom In"
+msgstr ""
+
+msgid "Zoom Out"
+msgstr ""
+
+msgctxt "one"
+msgid "{{count}} items"
+msgstr ""
+
+msgctxt "one"
+msgid "There are {{count}} documents that can be removed, do you want to continue?"
+msgstr ""
+
+msgctxt "one"
+msgid "This layer is now rerouted by an active Route Set: {{routeSets}}"
+msgstr ""
+
+msgctxt "other"
+msgid "{{count}} items"
+msgstr ""
+
+msgctxt "other"
+msgid "There are {{count}} documents that can be removed, do you want to continue?"
+msgstr ""
+
+msgctxt "other"
+msgid "This layer is now rerouted by an active Route Set: {{routeSets}}"
+msgstr ""
diff --git a/meteor/jest.config.js b/meteor/jest.config.js
index 34c1398c620..35279a2c967 100644
--- a/meteor/jest.config.js
+++ b/meteor/jest.config.js
@@ -3,6 +3,8 @@ const path = require('path')
const commonConfig = {
modulePaths: ['/node_modules/'],
moduleNameMapper: {
+ '^@sofie-automation/shared-lib/dist/(.+)\\.js$': '/../packages/shared-lib/src/$1',
+ '^@sofie-automation/shared-lib/dist/(.+)$': '/../packages/shared-lib/src/$1',
// Ensure libraries that would match the extension rule are still resolved
'bignumber.js': 'bignumber.js',
// Drop file extensions in imports
diff --git a/meteor/package.json b/meteor/package.json
index 32c69ae4ee4..ecf6bc5590f 100644
--- a/meteor/package.json
+++ b/meteor/package.json
@@ -25,7 +25,7 @@
"lint:raw": "eslint",
"lintfix": "run lint --fix",
"quickformat": "prettier \"__mocks__/**\" --write ; prettier \"lib/**\" --write ; prettier \"server/**\" --write ; prettier \"client/**\" --write ; prettier \"*.json\" --write ; prettier \"*.js\" --write ; prettier \"*.md\" --write",
- "i18n-extract-pot": "node ./scripts/extract-i18next-pot.mjs -f \"{./lib/**/*.+(ts|tsx),./server/**/*.+(ts|tsx),../packages/job-worker/src/**/*.+(ts|tsx),../packages/corelib/src/**/*.+(ts|tsx),../packages/webui/src/**/*.+(ts|tsx)}\" -o i18n/template.pot",
+ "i18n-extract-po": "node ./scripts/extract-i18next-po.mjs",
"i18n-compile-json": "node ./scripts/i18n-compile-json.mjs",
"visualize": "meteor --production --extra-packages bundle-visualizer",
"release": "commit-and-tag-version --commit-all",
@@ -35,73 +35,75 @@
"validate:dev-dependencies": "yarn npm audit --environment development --severity moderate"
},
"dependencies": {
- "@babel/runtime": "^7.28.6",
+ "@babel/runtime": "^7.29.7",
"@koa/cors": "^5.0.0",
- "@koa/router": "^15.3.0",
+ "@koa/router": "^15.7.0",
"@mos-connection/helper": "^5.0.0-alpha.0",
- "@slack/webhook": "^7.0.6",
+ "@slack/webhook": "^7.2.0",
"@sofie-automation/blueprints-integration": "portal:../packages/blueprints-integration",
"@sofie-automation/corelib": "portal:../packages/corelib",
"@sofie-automation/job-worker": "portal:../packages/job-worker",
"@sofie-automation/meteor-lib": "portal:../packages/meteor-lib",
"@sofie-automation/shared-lib": "portal:../packages/shared-lib",
+ "@swc/core": "^1.15.46",
+ "@swc/helpers": "0.5.17",
"bcrypt": "^6.0.0",
- "body-parser": "^1.20.4",
"deep-extend": "0.6.0",
"deepmerge": "^4.3.1",
- "elastic-apm-node": "^4.15.0",
- "i18next": "^21.10.0",
+ "elastic-apm-node": "^4.18.0",
+ "i18next": "^26.3.6",
"indexof": "0.0.1",
- "koa": "^3.1.1",
+ "koa": "^3.2.1",
"koa-bodyparser": "^4.4.1",
"koa-mount": "^4.2.0",
"koa-static": "^5.0.0",
- "meteor-node-stubs": "^1.2.25",
+ "meteor-node-stubs": "^1.2.27",
"moment": "^2.30.1",
- "nanoid": "^3.3.11",
+ "nanoid": "^3.3.16",
"ntp-client": "^0.5.3",
"object-path": "^0.11.8",
"p-lazy": "^3.1.0",
- "semver": "^7.7.3",
+ "semver": "^7.8.5",
"superfly-timeline": "9.2.0",
- "threadedclass": "^1.3.0",
- "timecode": "0.0.4",
+ "threadedclass": "^1.4.0",
"type-fest": "^4.41.0",
- "underscore": "^1.13.7",
+ "underscore": "^1.13.8",
"winston": "^3.19.0"
},
"devDependencies": {
- "@babel/core": "^7.29.0",
- "@babel/plugin-transform-modules-commonjs": "^7.28.6",
+ "@babel/core": "^7.29.7",
+ "@babel/plugin-transform-modules-commonjs": "^7.29.7",
+ "@meteorjs/rspack": "2.0.1",
+ "@rsdoctor/rspack-plugin": "1.5.7",
+ "@rspack/cli": "1.7.1",
+ "@rspack/core": "1.7.1",
"@shopify/jest-koa-mocks": "^5.3.1",
- "@sofie-automation/code-standard-preset": "^3.0.0",
- "@types/body-parser": "^1.19.6",
+ "@sofie-automation/code-standard-preset": "^3.2.2",
"@types/deep-extend": "^0.6.2",
"@types/jest": "^30.0.0",
- "@types/koa": "^3.0.1",
+ "@types/koa": "^3.0.3",
"@types/koa-bodyparser": "^4.3.13",
"@types/koa-mount": "^4.0.5",
"@types/koa-static": "^4.0.4",
"@types/koa__cors": "^5.0.1",
- "@types/node": "^22.19.8",
+ "@types/node": "^22.20.1",
"@types/semver": "^7.7.1",
"@types/underscore": "^1.13.0",
- "babel-jest": "^30.2.0",
- "commit-and-tag-version": "^12.6.1",
+ "babel-jest": "^30.4.1",
+ "commit-and-tag-version": "^13.1.0",
"ejson": "^2.2.3",
- "eslint": "^9.39.2",
+ "eslint": "^9.39.5",
"fast-clone": "^1.5.13",
- "glob": "^13.0.1",
- "i18next-conv": "^10.2.0",
- "i18next-scanner": "^4.6.0",
- "jest": "^30.2.0",
- "jest-util": "^30.2.0",
+ "glob": "^13.0.6",
+ "i18next-cli": "^1.66.2",
+ "i18next-conv": "^16.0.0",
+ "jest": "^30.4.2",
+ "jest-util": "^30.4.1",
"legally": "^3.5.10",
- "open-cli": "^8.0.0",
- "prettier": "^3.8.1",
- "ts-jest": "^29.4.6",
- "typescript": "~5.7.3",
- "yargs": "^17.7.2"
+ "open-cli": "^9.0.0",
+ "prettier": "^3.8.4",
+ "ts-jest": "29.4.9",
+ "typescript": "~5.9.3"
},
"prettier": "@sofie-automation/code-standard-preset/.prettierrc.json",
"lint-staged": {
@@ -127,7 +129,8 @@
"@sofie-automation/blueprints-integration": "portal:../packages/blueprints-integration",
"@sofie-automation/corelib": "portal:../packages/corelib",
"@sofie-automation/job-worker": "portal:../packages/job-worker",
- "@sofie-automation/shared-lib": "portal:../packages/shared-lib"
+ "@sofie-automation/shared-lib": "portal:../packages/shared-lib",
+ "@meteorjs/rspack": "patch:@meteorjs/rspack@npm%3A2.0.1#~/.yarn/patches/@meteorjs-rspack-npm-2.0.1-d001eb481c.patch"
},
- "packageManager": "yarn@4.12.0"
+ "packageManager": "yarn@4.17.0"
}
diff --git a/meteor/rspack.config.cjs b/meteor/rspack.config.cjs
new file mode 100644
index 00000000000..3c64a7a4933
--- /dev/null
+++ b/meteor/rspack.config.cjs
@@ -0,0 +1,6 @@
+const { defineConfig } = require('@meteorjs/rspack')
+
+module.exports = defineConfig((Meteor) => ({
+ // Exclude native modules from the bundle (use Meteor runtime)
+ ...(Meteor.isServer ? Meteor.compileWithMeteor(['threadedclass']) : {}),
+}))
diff --git a/meteor/scripts/extract-i18next-po.mjs b/meteor/scripts/extract-i18next-po.mjs
new file mode 100644
index 00000000000..06ad2e40f19
--- /dev/null
+++ b/meteor/scripts/extract-i18next-po.mjs
@@ -0,0 +1,4 @@
+#!/usr/bin/env node
+import { extractTranslations } from './translation/extract.mjs'
+
+extractTranslations().catch(console.error)
diff --git a/meteor/scripts/extract-i18next-pot.mjs b/meteor/scripts/extract-i18next-pot.mjs
deleted file mode 100644
index a9d5f795e17..00000000000
--- a/meteor/scripts/extract-i18next-pot.mjs
+++ /dev/null
@@ -1,119 +0,0 @@
-/**
- * The following code is based on i18next-extract-gettext, taken under license
- * from an abandoned repository:
- * https://github.com/queicherius/i18next-extract-gettext/
- *
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2016 David Reeß
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-import fs from 'fs'
-import yargs from 'yargs'
-import { Parser } from 'i18next-scanner'
-import converter from 'i18next-conv'
-import { glob } from 'glob'
-
-const args = yargs(process.argv)
- .option('files', {
- description: 'files to process, specified as a glob pattern',
- alias: 'f',
- type: 'string',
- required: true,
- })
- .option('output', {
- description: 'the output template file name',
- alias: 'o',
- type: 'string',
- required: true,
- })
- .option('key-separator', {
- description: 'key separator to use within the POT file',
- type: 'string',
- })
- .option('ns-separator', {
- description: 'name space separator to use within the POT file',
- type: 'string',
- })
- .option('plural-separator', {
- description: 'plural separator to use within the POT file',
- type: 'string',
- })
- .option('context-separator', {
- description: 'context separator to use within the POT file',
- type: 'string',
- })
- .help()
- .alias('help', 'h').argv
-
-const parserOptions = {
- // Include react helpers into parsing
- attr: {
- list: ['data-i18n', 'i18nKey'],
- },
- func: {
- list: ['i18next.t', 'i18n.t', 't', 'generateTranslation'],
- },
- // Make sure common separators don't break the string
- keySeparator: args.keySeparator || '°°°°°°.°°°°°°',
- nsSeparator: args.nsSeparator || '°°°°°°:°°°°°°',
- pluralSeparator: args.pluralSeparator || '°°°°°°_°°°°°°',
- contextSeparator: args.contextSeparator || '°°°°°°_°°°°°°',
- // Interpolate correctly
- interpolation: {
- prefix: '{{',
- suffix: '}}',
- },
- acorn: {
- ecmaVersion: 11,
- sourceType: 'module',
- },
-}
-
-const parser = new Parser(parserOptions)
-
-const fileGlob = args.files
-const outputFile = args.output
-
-console.log('Extracting translatable strings...')
-console.log('This process may print out some error messages, but the translation template should work fine.')
-console.log('──────\n')
-
-const files = await glob(fileGlob)
-
-// console.debug('Loading content of ' + files.length + ' files')
-
-// console.debug('Parsing translation keys out of content')
-files.map(function (file) {
- const content = fs.readFileSync(file, 'utf-8')
- parser.parseFuncFromString(content, parserOptions)
- parser.parseAttrFromString(content, parserOptions)
-})
-
-const json = parser.get().en.translation
-
-// console.debug('Converting ' + Object.keys(json).length + ' translation keys into gettext')
-const data = await converter.i18nextToPot('en', JSON.stringify(json), { quiet: true })
-// console.debug('Writing into output file')
-fs.writeFileSync(outputFile, data, 'utf-8')
-console.log('\n──────')
-console.log(`✅ Successfully written ${Object.keys(json).length} strings to template "${outputFile}".`)
diff --git a/meteor/scripts/i18n-compile-json.mjs b/meteor/scripts/i18n-compile-json.mjs
index 464922ede8b..4b884313147 100644
--- a/meteor/scripts/i18n-compile-json.mjs
+++ b/meteor/scripts/i18n-compile-json.mjs
@@ -1,5 +1,6 @@
-import { glob } from 'glob'
-import { spawn } from 'child_process'
+import { writeFile, mkdir } from 'node:fs/promises'
+import { join } from 'node:path'
+import { getTranslations } from './translation/bundle.mjs'
/*************************************************
@@ -8,29 +9,19 @@ and compiles the json-files (used in production).
**************************************************/
-const errors = []
-const failedLanguages = []
-// List all po-files:
-const poFiles = await glob('./i18n/*.po')
-
-const languages = []
-for (const poFile of poFiles) {
- const mLanguage = poFile.match(/\/(\w+)\.po/)
- if (mLanguage) languages.push(mLanguage[1])
-}
-
-console.log(`🔍 Found languages: ${languages.join(', ')}`)
+const translations = await getTranslations('i18n', 'translations')
-for (const lng of languages) {
+const errors = []
+for (const { language, data } of translations) {
try {
- console.log('\n')
- await runCmd(
- `i18next-conv -l ${lng} -s i18n/${lng}.po -t ../packages/webui/public/locales/${lng}/translations.json --skipUntranslated`
- )
+ const outDir = join('..', 'packages', 'webui', 'public', 'locales', language)
+ await mkdir(outDir, { recursive: true })
+ const outPath = join(outDir, 'translations.json')
+ await writeFile(outPath, JSON.stringify(data, null, '\t') + '\n', 'utf-8')
+ console.log(`✅ Written ${outPath}`)
} catch (e) {
- console.error(`💣 Failed: ${lng}`)
- errors.push(`${lng}: ${e}`)
- failedLanguages.push(lng)
+ console.error(`💣 Failed: ${language}: ${e}`)
+ errors.push(`${language}: ${e}`)
}
}
@@ -38,28 +29,8 @@ if (errors.length) {
for (const error of errors) {
console.error(error)
}
- console.log(`\n\n😓 Failed to compile: ${failedLanguages.join(', ')}`)
+ console.log(`\n\n😓 Failed to compile: ${errors.map((e) => e.split(':')[0]).join(', ')}`)
process.exit(1)
}
-console.log(`\n\n🥳 Succesfully compiled all translations: ${languages.join(', ')}`)
-
-function runCmd(cmd) {
- console.log(cmd)
- return new Promise((resolve, reject) => {
- const child = spawn(cmd, {
- shell: true,
- windowsHide: true,
- })
- child.stdout.on('data', (data) => {
- console.log(`${data}`.trim())
- })
- child.stderr.on('data', (data) => {
- console.error(`${data}`.trim())
- })
- child.on('close', (code) => {
- if (code === 0) resolve()
- else reject(new Error(`child process exited with code ${code}`))
- })
- })
-}
+console.log(`\n\n🥳 successfully compiled all translations: ${translations.map((t) => t.language).join(', ')}`)
diff --git a/meteor/scripts/translation/bundle.mjs b/meteor/scripts/translation/bundle.mjs
new file mode 100644
index 00000000000..fa8948065b7
--- /dev/null
+++ b/meteor/scripts/translation/bundle.mjs
@@ -0,0 +1,59 @@
+/**
+ * This script will read and bundle the translations in the project's .po files.
+ */
+/* eslint-disable */
+import { readdir, readFile } from 'node:fs/promises'
+import { join, basename } from 'node:path'
+import { gettextToI18next } from 'i18next-conv'
+
+import { conversionOptions } from './config.mjs'
+
+const reverseHack = !!process.env.GENERATE_REVERSE_ENGLISH
+
+async function processPoFile(filePath, namespace) {
+ const start = Date.now()
+ // filePath is like i18n/nb.po — language is the filename without extension
+ const language = basename(filePath, '.po')
+
+ const poFile = await readFile(filePath, 'utf-8')
+
+ const converted = await gettextToI18next(language, poFile, {
+ ...conversionOptions,
+ language,
+ skipUntranslated: !reverseHack || language !== 'en',
+ ns: namespace,
+ })
+
+ const data = JSON.parse(converted)
+
+ console.info(
+ `Processed ${namespace} ${language} (${Object.keys(data).length} translated keys) (${Date.now() - start} ms)`
+ )
+
+ if (reverseHack && language === 'en') {
+ for (const key of Object.keys(data)) {
+ data[key] = key.split('').reverse().join('')
+ }
+ }
+
+ return { language, data }
+}
+
+export async function getTranslations(i18nDir, namespace) {
+ console.info('Bundling translations...')
+
+ let entries
+ try {
+ entries = await readdir(i18nDir)
+ } catch {
+ throw new Error(`Failed to read directory: ${i18nDir}`)
+ }
+
+ const poFiles = entries.filter((f) => f.endsWith('.po')).map((f) => join(i18nDir, f))
+
+ const translations = await Promise.all(poFiles.map((f) => processPoFile(f, namespace)))
+
+ console.info('Translations bundling complete.')
+
+ return translations
+}
diff --git a/meteor/scripts/translation/config.mjs b/meteor/scripts/translation/config.mjs
new file mode 100644
index 00000000000..cdc8c7258b5
--- /dev/null
+++ b/meteor/scripts/translation/config.mjs
@@ -0,0 +1,9 @@
+export const conversionOptions = {
+ gettextDefaultCharset: 'UTF-8',
+ splitNewLine: true,
+ ignorePlurals: false,
+ keyseparator: '→',
+ nsseparator: '⇒',
+ pluralSeparator: '⥤',
+ contextseparator: '⥤',
+}
diff --git a/meteor/scripts/translation/extract.mjs b/meteor/scripts/translation/extract.mjs
new file mode 100644
index 00000000000..fdbfea0954f
--- /dev/null
+++ b/meteor/scripts/translation/extract.mjs
@@ -0,0 +1,121 @@
+// @ts-check
+/**
+ * This script will extract keys from the source code (provided they are wrapped
+ * in a call to the (mock) i18next translation function t()).
+ * The extracted keys are written to .po files, one for each specified locale.
+ *
+ * Translations in already existing .po files will be preserved.
+ */
+
+import { writeFile, readFile } from 'node:fs/promises'
+import { runExtractor } from 'i18next-cli'
+import { i18nextToPo, gettextToI18next } from 'i18next-conv'
+
+import { conversionOptions } from './config.mjs'
+
+export async function extractTranslations() {
+ const start = Date.now()
+ console.info(`\nExtracting keys...`)
+ // const entryPointRoot = parse(sourcePath).dir
+ const locales = ['en', 'nb', 'nn', 'sv']
+ const outputPattern = `i18n/{{language}}.json`
+
+ const extractionStats = { keysExtracted: 0, locales: [] }
+
+ await runExtractor({
+ locales,
+ extract: {
+ input: [
+ // `${entryPointRoot}/**/*.ts`,
+ './lib/**/*.+(ts|tsx)',
+ './server/**/*.+(ts|tsx)',
+ '../packages/job-worker/src/**/*.+(ts|tsx)',
+ '../packages/corelib/src/**/*.+(ts|tsx)',
+ '../packages/webui/src/**/*.+(ts|tsx)',
+ ],
+ output: outputPattern,
+ sort: true,
+ nsSeparator: false,
+ keySeparator: false,
+ defaultValue: '',
+ removeUnusedKeys: true,
+ mergeNamespaces: true,
+ functions: ['t', 'generateTranslation', 'i18n.t'],
+ },
+ plugins: [jsonToPoPlugin('translation', extractionStats)],
+ })
+
+ const taskDuration = Date.now() - start
+ const { keysExtracted } = extractionStats
+ if (keysExtracted) {
+ console.info(`=> OK, ${keysExtracted} keys extracted in ${taskDuration} ms`)
+ for (const { language, keysMerged, keysRemoved } of extractionStats.locales) {
+ console.info(
+ `\t${language}: added ${keysExtracted - keysMerged} new keys, merged ${keysMerged} existing translations, removed ${keysRemoved} obsolete keys`
+ )
+ }
+ } else {
+ console.info(`=> No keys found in ${taskDuration}ms`)
+ }
+}
+
+function jsonToPoPlugin(_translationNamespace, extractionStats) {
+ return {
+ name: 'json-to-po',
+ async afterSync(results) {
+ await Promise.all(
+ results.map(async (result) => {
+ const language = result.path
+ .split(/[/\\]/)
+ .at(-1)
+ .replace(/\.json$/, '')
+ const poPath = result.path.replace(/\.json$/, '.po')
+
+ console.log('lang', language)
+
+ // Load existing translations from the .po file if it exists
+ let existingTranslations = {}
+ try {
+ const existingPo = await readFile(poPath, 'utf-8')
+ const fixedPo = existingPo.replaceAll('#~|', '#~') // Remove empty header to avoid parse issues
+ const converted = await gettextToI18next(language, fixedPo, {
+ ...conversionOptions,
+ language,
+ skipUntranslated: true,
+ })
+ existingTranslations = JSON.parse(converted)
+ } catch {
+ // No existing .po file or parse error - start fresh
+ console.log(`No existing/valid .po file found for ${language}, starting with empty translations.`)
+ }
+
+ // Merge: use existing translations for known keys, empty string for new keys
+ const newTranslations = result.newTranslations
+ const newKeys = Object.keys(newTranslations)
+ const merged = {}
+ let keysMerged = 0
+ for (const key of newKeys) {
+ const existing = existingTranslations[key]
+ if (existing) {
+ merged[key] = existing
+ keysMerged++
+ } else {
+ merged[key] = ''
+ }
+ }
+ const keysRemoved = Object.keys(existingTranslations).length - keysMerged
+
+ extractionStats.keysExtracted = newKeys.length
+ extractionStats.locales.push({ language, keysMerged, keysRemoved })
+
+ const poContent = await i18nextToPo(language, JSON.stringify(merged), {
+ ...conversionOptions,
+ language,
+ skipUntranslated: false,
+ })
+ await writeFile(poPath, poContent)
+ })
+ )
+ },
+ }
+}
diff --git a/meteor/server/Settings.ts b/meteor/server/Settings.ts
deleted file mode 100644
index 647be536c25..00000000000
--- a/meteor/server/Settings.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { Meteor } from 'meteor/meteor'
-import _ from 'underscore'
-import { ISettings, DEFAULT_SETTINGS } from '@sofie-automation/meteor-lib/dist/Settings'
-
-/**
- * This is an object specifying installation-wide, User Interface settings.
- * There are default values for these settings that will be used, unless overriden
- * through Meteor.settings functionality.
- *
- * You can use METEOR_SETTING to inject the settings JSON or you can use the
- * --settings [filename] to provide a JSON file containing the settings
- */
-export let Settings: ISettings = _.clone(DEFAULT_SETTINGS)
-
-Meteor.startup(() => {
- Settings = _.extend(Settings, Meteor.settings.public)
-})
diff --git a/meteor/server/__tests__/cronjobs.test.ts b/meteor/server/__tests__/cronjobs.test.ts
index 131960500fd..eaa8abb6157 100644
--- a/meteor/server/__tests__/cronjobs.test.ts
+++ b/meteor/server/__tests__/cronjobs.test.ts
@@ -12,6 +12,7 @@ import {
StatusCode,
TSR,
} from '@sofie-automation/blueprints-integration'
+import { ShelfButtonSize } from '@sofie-automation/shared-lib/dist/core/model/StudioSettings'
import {
PeripheralDeviceType,
PeripheralDeviceCategory,
@@ -72,7 +73,7 @@ import {
setupDefaultStudioEnvironment,
} from '../../__mocks__/helpers/database'
import { DBSegment } from '@sofie-automation/corelib/dist/dataModel/Segment'
-import { Settings } from '../Settings'
+import { DEFAULT_MAXIMUM_DATA_AGE } from '@sofie-automation/shared-lib/dist/core/constants'
import { SofieIngestCacheType } from '@sofie-automation/corelib/dist/dataModel/SofieIngestDataCache'
import { ObjectOverrideSetOp, ObjectWithOverrides } from '@sofie-automation/corelib/dist/settings/objectWithOverrides'
import { PartInstance } from '@sofie-automation/corelib/dist/dataModel/PartInstance'
@@ -441,7 +442,7 @@ describe('cronjobs', () => {
clientAddress: '',
context: '',
method: '',
- timestamp: lib.getCurrentTime() - Settings.maximumDataAge - 1000,
+ timestamp: lib.getCurrentTime() - DEFAULT_MAXIMUM_DATA_AGE - 1000,
})
await runCronjobs()
@@ -476,7 +477,7 @@ describe('cronjobs', () => {
type: SnapshotType.DEBUG,
version: '',
// Very old:
- created: lib.getCurrentTime() - Settings.maximumDataAge - 1000,
+ created: lib.getCurrentTime() - DEFAULT_MAXIMUM_DATA_AGE - 1000,
})
await runCronjobs()
@@ -509,6 +510,7 @@ describe('cronjobs', () => {
name: props.deviceName,
status: {
statusCode: StatusCode.GOOD,
+ statusDetails: [],
},
token: '',
...props,
@@ -590,6 +592,7 @@ describe('cronjobs', () => {
frameRate: 25,
mediaPreviewsUrl: '',
minimumTakeSpan: 1000,
+ shelfAdlibButtonSize: ShelfButtonSize.LARGE,
}),
routeSetsWithOverrides: newObjectWithOverrides({}),
routeSetExclusivityGroupsWithOverrides: newObjectWithOverrides({}),
diff --git a/meteor/server/api/__tests__/peripheralDevice.resolveActionResult.test.ts b/meteor/server/api/__tests__/peripheralDevice.resolveActionResult.test.ts
new file mode 100644
index 00000000000..acc0fb8db7e
--- /dev/null
+++ b/meteor/server/api/__tests__/peripheralDevice.resolveActionResult.test.ts
@@ -0,0 +1,220 @@
+import { DeviceStatusContext, TSR } from '@sofie-automation/blueprints-integration'
+import { protectString } from '@sofie-automation/corelib/dist/protectedString'
+import { PeripheralDeviceId, StudioId } from '@sofie-automation/corelib/dist/dataModel/Ids'
+import { Blueprints, PeripheralDevices, Studios } from '../../collections'
+import { evalBlueprint } from '../blueprints/cache'
+import { resolveActionResult } from '../peripheralDevice'
+
+jest.mock('../deviceTriggers/observer')
+jest.mock('../blueprints/cache')
+
+const mockEvalBlueprint = evalBlueprint as jest.MockedFunction
+
+const ACTION_ERROR_CODE = 'ACTION_HTTP_REQUEST_FAILED'
+const deviceId = protectString('device0')
+const studioId = protectString('studio0')
+
+function makeErrorResult(overrides: Partial = {}): TSR.ActionExecutionResult {
+ return {
+ result: TSR.ActionExecutionResultCode.Error,
+ response: { key: 'HTTP request to {{url}} failed: {{errorMessage}}' },
+ code: ACTION_ERROR_CODE,
+ context: {
+ url: 'http://graphics/api',
+ errorMessage: 'connection refused',
+ },
+ ...overrides,
+ }
+}
+
+describe('resolveActionResult', () => {
+ beforeEach(() => {
+ jest.spyOn(PeripheralDevices, 'findOneAsync').mockReset()
+ jest.spyOn(Studios, 'findOneAsync').mockReset()
+ jest.spyOn(Blueprints, 'findOneAsync').mockReset()
+ mockEvalBlueprint.mockReset()
+ })
+
+ afterEach(() => {
+ jest.restoreAllMocks()
+ })
+
+ it('returns Ok results unchanged', async () => {
+ const result: TSR.ActionExecutionResult = {
+ result: TSR.ActionExecutionResultCode.Ok,
+ response: { key: 'Action completed' },
+ }
+
+ const resolved = await resolveActionResult(deviceId, result)
+
+ expect(resolved).toBe(result)
+ expect(PeripheralDevices.findOneAsync).not.toHaveBeenCalled()
+ })
+
+ it('returns non-Ok results without a code unchanged', async () => {
+ const result = makeErrorResult({ code: undefined })
+
+ const resolved = await resolveActionResult(deviceId, result)
+
+ expect(resolved).toBe(result)
+ expect(PeripheralDevices.findOneAsync).not.toHaveBeenCalled()
+ })
+
+ it('interpolates a matching string template from deviceActionMessages', async () => {
+ jest.spyOn(PeripheralDevices, 'findOneAsync').mockResolvedValue({
+ name: 'Playout Gateway',
+ studioAndConfigId: { studioId, configId: 'config0' },
+ } as any)
+ jest.spyOn(Studios, 'findOneAsync').mockResolvedValue({ blueprintId: 'blueprint0' } as any)
+ jest.spyOn(Blueprints, 'findOneAsync').mockResolvedValue({
+ _id: 'blueprint0',
+ name: 'test',
+ code: '',
+ } as any)
+ mockEvalBlueprint.mockReturnValue({
+ deviceActionMessages: {
+ [ACTION_ERROR_CODE]: 'Failed to trigger graphics at {{url}}: {{errorMessage}}',
+ },
+ } as any)
+
+ const resolved = await resolveActionResult(deviceId, makeErrorResult())
+
+ expect(resolved.response).toEqual({
+ key: 'Failed to trigger graphics at http://graphics/api: connection refused',
+ })
+ })
+
+ it('uses a DeviceStatusMessageFunction from deviceActionMessages', async () => {
+ jest.spyOn(PeripheralDevices, 'findOneAsync').mockResolvedValue({
+ name: 'Playout Gateway',
+ studioAndConfigId: { studioId, configId: 'config0' },
+ } as any)
+ jest.spyOn(Studios, 'findOneAsync').mockResolvedValue({ blueprintId: 'blueprint0' } as any)
+ jest.spyOn(Blueprints, 'findOneAsync').mockResolvedValue({
+ _id: 'blueprint0',
+ name: 'test',
+ code: '',
+ } as any)
+ mockEvalBlueprint.mockReturnValue({
+ deviceActionMessages: {
+ [ACTION_ERROR_CODE]: (context: DeviceStatusContext) =>
+ `${context.deviceName} could not reach ${context.url as string}`,
+ },
+ } as any)
+
+ const resolved = await resolveActionResult(deviceId, makeErrorResult())
+
+ expect(resolved.response).toEqual({
+ key: 'Playout Gateway could not reach http://graphics/api',
+ })
+ })
+
+ it('clears the response when the blueprint suppresses the message', async () => {
+ jest.spyOn(PeripheralDevices, 'findOneAsync').mockResolvedValue({
+ name: 'Playout Gateway',
+ studioAndConfigId: { studioId, configId: 'config0' },
+ } as any)
+ jest.spyOn(Studios, 'findOneAsync').mockResolvedValue({ blueprintId: 'blueprint0' } as any)
+ jest.spyOn(Blueprints, 'findOneAsync').mockResolvedValue({
+ _id: 'blueprint0',
+ name: 'test',
+ code: '',
+ } as any)
+ mockEvalBlueprint.mockReturnValue({
+ deviceActionMessages: {
+ [ACTION_ERROR_CODE]: '',
+ },
+ } as any)
+
+ const original = makeErrorResult()
+ const resolved = await resolveActionResult(deviceId, original)
+
+ expect(resolved).toMatchObject({
+ result: TSR.ActionExecutionResultCode.Error,
+ code: ACTION_ERROR_CODE,
+ context: original.context,
+ response: { key: '' },
+ })
+ })
+
+ it('returns the original result when there is no matching deviceActionMessages entry', async () => {
+ jest.spyOn(PeripheralDevices, 'findOneAsync').mockResolvedValue({
+ name: 'Playout Gateway',
+ studioAndConfigId: { studioId, configId: 'config0' },
+ } as any)
+ jest.spyOn(Studios, 'findOneAsync').mockResolvedValue({ blueprintId: 'blueprint0' } as any)
+ jest.spyOn(Blueprints, 'findOneAsync').mockResolvedValue({
+ _id: 'blueprint0',
+ name: 'test',
+ code: '',
+ } as any)
+ mockEvalBlueprint.mockReturnValue({
+ deviceActionMessages: {},
+ } as any)
+
+ const result = makeErrorResult()
+ const resolved = await resolveActionResult(deviceId, result)
+
+ expect(resolved).toBe(result)
+ })
+
+ it('resolves messages for child devices via the parent studio', async () => {
+ const parentDeviceId = protectString('parent0')
+ jest.spyOn(PeripheralDevices, 'findOneAsync').mockImplementation(async (id) => {
+ if (id === deviceId) {
+ return {
+ name: 'casparcg0',
+ parentDeviceId,
+ } as any
+ }
+ if (id === parentDeviceId) {
+ return {
+ studioAndConfigId: { studioId, configId: 'config0' },
+ } as any
+ }
+ return undefined
+ })
+ jest.spyOn(Studios, 'findOneAsync').mockResolvedValue({ blueprintId: 'blueprint0' } as any)
+ jest.spyOn(Blueprints, 'findOneAsync').mockResolvedValue({
+ _id: 'blueprint0',
+ name: 'test',
+ code: '',
+ } as any)
+ mockEvalBlueprint.mockReturnValue({
+ deviceActionMessages: {
+ [ACTION_ERROR_CODE]: 'Failed to trigger graphics at {{url}}: {{errorMessage}}',
+ },
+ } as any)
+
+ const resolved = await resolveActionResult(deviceId, makeErrorResult())
+
+ expect(resolved.response).toEqual({
+ key: 'Failed to trigger graphics at http://graphics/api: connection refused',
+ })
+ })
+
+ it('returns the original result when the device has no studio', async () => {
+ jest.spyOn(PeripheralDevices, 'findOneAsync').mockResolvedValue({
+ name: 'Playout Gateway',
+ } as any)
+
+ const result = makeErrorResult()
+ const resolved = await resolveActionResult(deviceId, result)
+
+ expect(resolved).toBe(result)
+ expect(Studios.findOneAsync).not.toHaveBeenCalled()
+ })
+
+ it('returns the original result when blueprint lookup fails', async () => {
+ jest.spyOn(PeripheralDevices, 'findOneAsync').mockResolvedValue({
+ name: 'Playout Gateway',
+ studioAndConfigId: { studioId, configId: 'config0' },
+ } as any)
+ jest.spyOn(Studios, 'findOneAsync').mockResolvedValue(undefined)
+
+ const result = makeErrorResult()
+ const resolved = await resolveActionResult(deviceId, result)
+
+ expect(resolved).toBe(result)
+ })
+})
diff --git a/meteor/server/api/__tests__/peripheralDevice.test.ts b/meteor/server/api/__tests__/peripheralDevice.test.ts
index 594c44049ca..5a37e3edb70 100644
--- a/meteor/server/api/__tests__/peripheralDevice.test.ts
+++ b/meteor/server/api/__tests__/peripheralDevice.test.ts
@@ -203,7 +203,7 @@ describe('test peripheralDevice general API methods', () => {
})
await MeteorCall.peripheralDevice.setStatus(device._id, device.token, {
statusCode: StatusCode.WARNING_MINOR,
- messages: ["Something's not right"],
+ statusDetails: [{ message: "Something's not right" }],
})
expect(((await PeripheralDevices.findOneAsync(device._id)) as PeripheralDevice).status).toMatchObject({
statusCode: StatusCode.WARNING_MINOR,
@@ -650,6 +650,7 @@ describe('test peripheralDevice general API methods', () => {
lastSeen: 0,
status: {
statusCode: StatusCode.GOOD,
+ statusDetails: [],
},
subType: '_process',
token: 'MockToken',
diff --git a/meteor/server/api/blueprints/__tests__/api.test.ts b/meteor/server/api/blueprints/__tests__/api.test.ts
index 1bd945c2fd2..2c92ed6f4f8 100644
--- a/meteor/server/api/blueprints/__tests__/api.test.ts
+++ b/meteor/server/api/blueprints/__tests__/api.test.ts
@@ -1,17 +1,21 @@
import _ from 'underscore'
+import path from 'path'
+import os from 'os'
+import { promises as fsp } from 'fs'
import { setupDefaultStudioEnvironment, packageBlueprint } from '../../../../__mocks__/helpers/database'
import { literal, getRandomId } from '@sofie-automation/corelib/dist/lib'
import { protectString } from '@sofie-automation/corelib/dist/protectedString'
import { Blueprint } from '@sofie-automation/corelib/dist/dataModel/Blueprint'
import { BlueprintManifestType } from '@sofie-automation/blueprints-integration'
import { SYSTEM_ID, ICoreSystem } from '@sofie-automation/meteor-lib/dist/collections/CoreSystem'
-import { insertBlueprint, uploadBlueprint } from '../api'
+import { insertBlueprint, uploadBlueprint, uploadBlueprintAsset } from '../api'
import { MeteorCall } from '../../methods'
import '../../../../__mocks__/_extendJest'
import { Blueprints, CoreSystem } from '../../../collections'
import { SupressLogMessages } from '../../../../__mocks__/suppressLogging'
import { JSONBlobStringify } from '@sofie-automation/shared-lib/dist/lib/JSONBlob'
import { Meteor } from 'meteor/meteor'
+import * as CoreSystemAPI from '../../../coreSystem'
// we don't want the deviceTriggers observer to start up at this time
jest.mock('../../deviceTriggers/observer')
@@ -549,4 +553,34 @@ describe('Test blueprint management api', () => {
)
})
})
+ describe('uploadBlueprintAsset', () => {
+ let storePath: string
+
+ beforeEach(async () => {
+ storePath = await fsp.mkdtemp(path.join(os.tmpdir(), 'sofie-blueprint-assets-'))
+ jest.spyOn(CoreSystemAPI, 'getSystemStorePath').mockReturnValue(storePath)
+ })
+
+ afterEach(async () => {
+ jest.restoreAllMocks()
+ await fsp.rm(storePath, { recursive: true, force: true })
+ })
+
+ test('writes decoded base64 payload to file', async () => {
+ const payload = Buffer.from('some fake binary data \u0000\u0001', 'utf8')
+ const fileId = 'myBlueprint/logo.bin'
+
+ await uploadBlueprintAsset(DEFAULT_CONNECTION, fileId, payload.toString('base64'))
+
+ const expectedFilePath = path.join(storePath, 'assets', fileId)
+ const writtenBuffer = await fsp.readFile(expectedFilePath)
+ expect(writtenBuffer.equals(payload)).toBeTruthy()
+ })
+
+ test('rejects path traversal attempts', async () => {
+ await expect(
+ uploadBlueprintAsset(DEFAULT_CONNECTION, '../outside.bin', Buffer.from('x').toString('base64'))
+ ).rejects.toThrow('Asset name outside of asset storage path')
+ })
+ })
})
diff --git a/meteor/server/api/blueprints/__tests__/http.test.ts b/meteor/server/api/blueprints/__tests__/http.test.ts
index 6673f4eb6a9..6755071de6a 100644
--- a/meteor/server/api/blueprints/__tests__/http.test.ts
+++ b/meteor/server/api/blueprints/__tests__/http.test.ts
@@ -1,5 +1,6 @@
import _ from 'underscore'
import { Meteor } from 'meteor/meteor'
+import { PassThrough } from 'stream'
import { SupressLogMessages } from '../../../../__mocks__/suppressLogging'
import { callKoaRoute } from '../../../../__mocks__/koa-util'
import { blueprintsRouter } from '../http'
@@ -357,4 +358,247 @@ describe('Test blueprint http api', () => {
}
})
})
+
+ describe('router upload assets', () => {
+ describe('POST /assets', () => {
+ async function callRoute(body: any) {
+ const ctx = await callKoaRoute(blueprintsRouter, {
+ method: 'POST',
+ url: '/assets',
+
+ requestBody: body,
+ })
+
+ expect(ctx.response.type).toBe('text/plain')
+ return ctx
+ }
+
+ function resetUploadAssetMock() {
+ const uploadBlueprintAsset = api.uploadBlueprintAsset as any as jest.MockInstance
+ uploadBlueprintAsset.mockClear()
+ return uploadBlueprintAsset
+ }
+
+ beforeEach(() => {
+ resetUploadAssetMock()
+ })
+
+ test('missing body', async () => {
+ SupressLogMessages.suppressLogMessage(/Invalid request body/i)
+ const res = await callRoute(undefined)
+ expect(res.response.status).toEqual(500)
+
+ expect(api.uploadBlueprintAsset).toHaveBeenCalledTimes(0)
+ })
+
+ test('empty body', async () => {
+ SupressLogMessages.suppressLogMessage(/Missing request body/i)
+ const res = await callRoute('')
+ expect(res.response.status).toEqual(500)
+
+ expect(api.uploadBlueprintAsset).toHaveBeenCalledTimes(0)
+ })
+
+ test('non-object body', async () => {
+ SupressLogMessages.suppressLogMessage(/Invalid request body/i)
+ const res = await callRoute(99)
+ expect(res.response.status).toEqual(500)
+
+ expect(api.uploadBlueprintAsset).toHaveBeenCalledTimes(0)
+ })
+
+ test('empty object body', async () => {
+ SupressLogMessages.suppressLogMessage(/Invalid request body/i)
+ const res = await callRoute({})
+ expect(res.response.status).toEqual(500)
+
+ expect(api.uploadBlueprintAsset).toHaveBeenCalledTimes(0)
+ })
+
+ test('with json body', async () => {
+ const fileId = 'folder/asset.png'
+ const payload = {
+ [fileId]: 'Ym9keQ==',
+ }
+
+ const res = await callRoute(payload)
+ expect(res.response.status).toEqual(200)
+ expect(res.body).toEqual('')
+
+ expect(api.uploadBlueprintAsset).toHaveBeenCalledTimes(1)
+ expect(api.uploadBlueprintAsset).toHaveBeenCalledWith(DEFAULT_CONTEXT, fileId, payload[fileId])
+ })
+
+ test('with json body - multiple', async () => {
+ const count = 10
+ const payload: Record = {}
+ for (let i = 0; i < count; i++) {
+ payload[`id${i}.png`] = `body${i}`
+ }
+
+ const res = await callRoute(payload)
+ expect(res.response.status).toEqual(200)
+ expect(res.body).toEqual('')
+
+ expect(api.uploadBlueprintAsset).toHaveBeenCalledTimes(count)
+ for (let i = 0; i < count; i++) {
+ expect(api.uploadBlueprintAsset).toHaveBeenCalledWith(DEFAULT_CONTEXT, `id${i}.png`, `body${i}`)
+ }
+ })
+
+ test('with errors', async () => {
+ const count = 10
+ const payload: Record = {}
+ for (let i = 0; i < count; i++) {
+ payload[`id${i}.png`] = `body${i}`
+ }
+
+ const uploadBlueprintAsset = resetUploadAssetMock()
+ let called = 0
+ uploadBlueprintAsset.mockImplementation(() => {
+ called++
+ if (called === 3 || called === 7) {
+ throw new Meteor.Error(505, 'Some thrown error')
+ }
+ })
+
+ try {
+ SupressLogMessages.suppressLogMessage(/Some thrown error/i)
+ SupressLogMessages.suppressLogMessage(/Some thrown error/i)
+ const res = await callRoute(payload)
+ expect(res.response.status).toEqual(500)
+ expect(res.body).toEqual(
+ 'Errors were encountered: \n[505] Some thrown error\n[505] Some thrown error\n'
+ )
+
+ expect(api.uploadBlueprintAsset).toHaveBeenCalledTimes(count)
+ for (let i = 0; i < count; i++) {
+ expect(api.uploadBlueprintAsset).toHaveBeenCalledWith(DEFAULT_CONTEXT, `id${i}.png`, `body${i}`)
+ }
+ } finally {
+ uploadBlueprintAsset.mockRestore()
+ }
+ })
+ })
+
+ describe('GET /assets/*fileId', () => {
+ function createDataStream() {
+ const stream = new PassThrough()
+ stream.end('asset')
+ return stream
+ }
+
+ async function callRoute(fileId: string) {
+ const ctx = await callKoaRoute(blueprintsRouter, {
+ method: 'GET',
+ url: `/assets/${fileId}`,
+ })
+
+ return ctx
+ }
+
+ function resetRetrieveAssetMock() {
+ const retrieveBlueprintAsset = api.retrieveBlueprintAsset as any as jest.MockInstance
+ retrieveBlueprintAsset.mockClear()
+ return retrieveBlueprintAsset
+ }
+
+ beforeEach(() => {
+ resetRetrieveAssetMock()
+ })
+
+ test('png asset', async () => {
+ const fileId = 'folder/file.png'
+ const dataStream = createDataStream()
+
+ const retrieveBlueprintAsset = resetRetrieveAssetMock()
+ retrieveBlueprintAsset.mockReturnValue(dataStream)
+
+ const res = await callRoute(fileId)
+
+ expect(res.statusCode).toEqual(200)
+ expect(res.response.type).toEqual('image/png')
+ expect(res.body).toBe(dataStream)
+ expect(res.response.get('Cache-Control')).toEqual('public, max-age=1296000, immutable')
+
+ expect(api.retrieveBlueprintAsset).toHaveBeenCalledTimes(1)
+ expect(api.retrieveBlueprintAsset).toHaveBeenCalledWith(DEFAULT_CONTEXT, fileId)
+ })
+
+ test('svg asset', async () => {
+ const fileId = 'folder/file.svg'
+ const dataStream = createDataStream()
+
+ const retrieveBlueprintAsset = resetRetrieveAssetMock()
+ retrieveBlueprintAsset.mockReturnValue(dataStream)
+
+ const res = await callRoute(fileId)
+
+ expect(res.statusCode).toEqual(200)
+ expect(res.response.type).toEqual('image/svg+xml')
+ expect(res.body).toBe(dataStream)
+
+ expect(api.retrieveBlueprintAsset).toHaveBeenCalledTimes(1)
+ expect(api.retrieveBlueprintAsset).toHaveBeenCalledWith(DEFAULT_CONTEXT, fileId)
+ })
+
+ test('gif asset', async () => {
+ const fileId = 'folder/file.gif'
+ const dataStream = createDataStream()
+
+ const retrieveBlueprintAsset = resetRetrieveAssetMock()
+ retrieveBlueprintAsset.mockReturnValue(dataStream)
+
+ const res = await callRoute(fileId)
+
+ expect(res.statusCode).toEqual(200)
+ expect(res.response.type).toEqual('image/gif')
+ expect(res.body).toBe(dataStream)
+
+ expect(api.retrieveBlueprintAsset).toHaveBeenCalledTimes(1)
+ expect(api.retrieveBlueprintAsset).toHaveBeenCalledWith(DEFAULT_CONTEXT, fileId)
+ })
+
+ test('not found', async () => {
+ const fileId = 'folder/missing.png'
+
+ const retrieveBlueprintAsset = resetRetrieveAssetMock()
+ retrieveBlueprintAsset.mockImplementation(() => {
+ const err = new Error('No such file') as Error & { code?: string }
+ err.code = 'ENOENT'
+ throw err
+ })
+
+ SupressLogMessages.suppressLogMessage(/Blueprint asset not found/i)
+ const res = await callRoute(fileId)
+ expect(res.statusCode).toEqual(404)
+ })
+
+ test('path traversal attempt', async () => {
+ const fileId = 'folder/../escape.png'
+
+ const retrieveBlueprintAsset = resetRetrieveAssetMock()
+ retrieveBlueprintAsset.mockImplementation(() => {
+ throw new Error('Requested asset outside of asset storage path')
+ })
+
+ SupressLogMessages.suppressLogMessage(/Blueprint asset path traversal attempt/i)
+ const res = await callRoute(fileId)
+ expect(res.statusCode).toEqual(400)
+ })
+
+ test('internal error', async () => {
+ const fileId = 'folder/file.png'
+
+ const retrieveBlueprintAsset = resetRetrieveAssetMock()
+ retrieveBlueprintAsset.mockImplementation(() => {
+ throw new Error('Some thrown error')
+ })
+
+ SupressLogMessages.suppressLogMessage(/Blueprint asset retrieval failed/i)
+ const res = await callRoute(fileId)
+ expect(res.statusCode).toEqual(500)
+ })
+ })
+ })
})
diff --git a/meteor/server/api/blueprints/api.ts b/meteor/server/api/blueprints/api.ts
index 4a152ef66e9..a02c027868b 100644
--- a/meteor/server/api/blueprints/api.ts
+++ b/meteor/server/api/blueprints/api.ts
@@ -112,23 +112,36 @@ export async function uploadBlueprintAsset(cred: RequestCredentials, fileId: str
assertConnectionHasOneOfPermissions(cred, ...PERMISSIONS_FOR_MANAGE_BLUEPRINTS)
const storePath = getSystemStorePath()
+ const assetsDir = path.resolve(storePath, 'assets') + path.sep
+ const assetPath = path.resolve(path.join(assetsDir, fileId))
+ if (!assetPath.startsWith(assetsDir)) {
+ throw new Error('Asset name outside of asset storage path')
+ }
// TODO: add access control here
const data = Buffer.from(body, 'base64')
- const parsedPath = path.parse(fileId)
- logger.info(
- `Write ${data.length} bytes to ${path.join(storePath, fileId)} (storePath: ${storePath}, fileId: ${fileId})`
- )
+ logger.info(`Write ${data.length} bytes to ${assetPath} (storePath: ${storePath}, fileId: ${fileId})`)
+
+ const assetDirPath = path.dirname(assetPath)
- await fsp.mkdir(path.join(storePath, parsedPath.dir), { recursive: true })
- await fsp.writeFile(path.join(storePath, fileId), data)
+ await fsp.mkdir(assetDirPath, { recursive: true })
+ await fsp.writeFile(assetPath, data)
}
-export function retrieveBlueprintAsset(_cred: RequestCredentials, fileId: string): ReadStream {
+export async function retrieveBlueprintAsset(_cred: RequestCredentials, fileId: string): Promise {
check(fileId, String)
const storePath = getSystemStorePath()
+ const assetsDir = path.resolve(storePath, 'assets') + path.sep
+ const assetPath = path.resolve(path.join(assetsDir, fileId))
+ if (!assetPath.startsWith(assetsDir)) {
+ throw new Error('Requested asset outside of asset storage path')
+ }
- return createReadStream(path.join(storePath, fileId))
+ const stream = createReadStream(assetPath)
+ return new Promise((resolve, reject) => {
+ stream.on('open', () => resolve(stream))
+ stream.on('error', (err) => reject(err))
+ })
}
/** Only to be called from internal functions */
export async function internalUploadBlueprint(
diff --git a/meteor/server/api/blueprints/http.ts b/meteor/server/api/blueprints/http.ts
index 29b1a6bc719..bf9666dd303 100644
--- a/meteor/server/api/blueprints/http.ts
+++ b/meteor/server/api/blueprints/http.ts
@@ -179,15 +179,15 @@ blueprintsRouter.post(
}
)
-blueprintsRouter.get('/assets/*splat', async (ctx) => {
+blueprintsRouter.get('/assets/*fileId', async (ctx) => {
logger.debug(`Blueprint Asset: ${ctx.socket.remoteAddress} GET "${ctx.url}"`)
// TODO - some sort of user verification
// for now just check it's a png to prevent snapshots being downloaded
- const filePath = ctx.params[0]
+ const filePath = ctx.params.fileId
if (filePath.match(/\.(png|svg|gif)?$/)) {
try {
- const dataStream = retrieveBlueprintAsset(ctx, filePath)
+ const dataStream = await retrieveBlueprintAsset(ctx, filePath)
const extension = path.extname(filePath)
if (extension === '.svg') {
ctx.response.type = 'image/svg+xml'
@@ -200,8 +200,17 @@ blueprintsRouter.get('/assets/*splat', async (ctx) => {
ctx.set('Cache-Control', `public, max-age=${BLUEPRINT_ASSET_MAX_AGE}, immutable`)
ctx.statusCode = 200
ctx.body = dataStream
- } catch {
- ctx.statusCode = 404 // Probably
+ } catch (e) {
+ if (e instanceof Error && 'code' in e && e.code === 'ENOENT') {
+ logger.warn('Blueprint asset not found: ' + e)
+ ctx.statusCode = 404
+ } else if (e instanceof Error && e.message.includes('outside of asset storage path')) {
+ logger.warn('Blueprint asset path traversal attempt: ' + e)
+ ctx.statusCode = 400
+ } else {
+ logger.warn('Blueprint asset retrieval failed: ' + e)
+ ctx.statusCode = 500
+ }
}
} else {
ctx.statusCode = 403
diff --git a/meteor/server/api/buckets.ts b/meteor/server/api/buckets.ts
index 39516601d03..e82e65c9f58 100644
--- a/meteor/server/api/buckets.ts
+++ b/meteor/server/api/buckets.ts
@@ -230,7 +230,7 @@ export namespace BucketsAPI {
await Promise.all([
Buckets.removeAsync(bucket._id),
- await runIngestOperation(bucket.studioId, IngestJobs.BucketEmpty, {
+ runIngestOperation(bucket.studioId, IngestJobs.BucketEmpty, {
bucketId: bucket._id,
}),
])
diff --git a/meteor/server/api/cleanup.ts b/meteor/server/api/cleanup.ts
index b56ef583b40..d5c82ae5e34 100644
--- a/meteor/server/api/cleanup.ts
+++ b/meteor/server/api/cleanup.ts
@@ -2,14 +2,16 @@ import { ProtectedString } from '@sofie-automation/shared-lib/dist/lib/protected
import { getCurrentTime } from '../lib/lib'
import { CollectionCleanupResult } from '@sofie-automation/meteor-lib/dist/api/system'
import { MongoQuery } from '@sofie-automation/corelib/dist/mongo'
-import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import {
getActiveRundownPlaylistsInStudioFromDb,
getExpiredRemovedPackageInfos,
getOrphanedPackageInfos,
removePackageInfos,
} from './studio/lib'
-import { Settings } from '../Settings'
+import { getCoreSystemAsync } from '../coreSystem/collection'
+import { applyAndValidateOverrides } from '@sofie-automation/corelib/dist/settings/objectWithOverrides'
+import { DEFAULT_MAXIMUM_DATA_AGE } from '@sofie-automation/shared-lib/dist/core/constants'
import { CollectionName } from '@sofie-automation/corelib/dist/dataModel/Collections'
import {
BlueprintId,
@@ -81,6 +83,18 @@ export async function cleanupOldDataInner(actuallyCleanup = false): Promise 0
+ ? configuredMaximumDataAge
+ : DEFAULT_MAXIMUM_DATA_AGE
+
const result: CollectionCleanupResult = {}
const addToResult = (collectionName: CollectionName, docsToRemove: number) => {
if (!result[collectionName]) {
@@ -275,7 +289,7 @@ export async function cleanupOldDataInner(actuallyCleanup = false): Promise
) {
- return ServerClientAPI.callPeripheralDeviceFunctionOrAction(
+ const result = await ServerClientAPI.callPeripheralDeviceFunctionOrAction(
this,
context,
deviceId,
@@ -470,6 +471,7 @@ class ServerClientAPIClass extends MethodContextAPI implements NewClientAPI {
actionId,
payload
)
+ return resolveActionResult(deviceId, result)
}
async callBackgroundPeripheralDeviceFunction(
deviceId: PeripheralDeviceId,
diff --git a/meteor/server/api/deviceTriggers/RundownContentObserver.ts b/meteor/server/api/deviceTriggers/RundownContentObserver.ts
index e65674ce855..e6dcf9f782d 100644
--- a/meteor/server/api/deviceTriggers/RundownContentObserver.ts
+++ b/meteor/server/api/deviceTriggers/RundownContentObserver.ts
@@ -33,9 +33,7 @@ export class RundownContentObserver {
#observers: Meteor.LiveQueryHandle[] = []
#cache: ContentCache
#cancelCache: () => void
- #cleanup: (() => void) | undefined = () => {
- throw new Error('RundownContentObserver.#cleanup has not been set!')
- }
+ #cleanup: (() => void) | undefined
#disposed = false
private constructor(onChanged: ChangedHandler) {
diff --git a/meteor/server/api/deviceTriggers/StudioObserver.ts b/meteor/server/api/deviceTriggers/StudioObserver.ts
index c98a154b468..5f18675eda1 100644
--- a/meteor/server/api/deviceTriggers/StudioObserver.ts
+++ b/meteor/server/api/deviceTriggers/StudioObserver.ts
@@ -10,7 +10,7 @@ import { MongoFieldSpecifierOnesStrict } from '@sofie-automation/corelib/dist/mo
import EventEmitter from 'events'
import { Meteor } from 'meteor/meteor'
import _ from 'underscore'
-import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import { DBRundown } from '@sofie-automation/corelib/dist/dataModel/Rundown'
import { DBShowStyleBase } from '@sofie-automation/corelib/dist/dataModel/ShowStyleBase'
import { logger } from '../../logging'
@@ -212,6 +212,8 @@ export class StudioObserver extends EventEmitter {
this.nextProps = undefined
const { activePlaylistId, activationId } = this.currentProps
+ const rundownContentChanged = this.#rundownContentChanged
+ const pieceInstancesChanged = this.#pieceInstancesChanged
this.showStyleBaseId = showStyleBaseId
@@ -219,7 +221,7 @@ export class StudioObserver extends EventEmitter {
logger.silly(`Creating new RundownContentObserver`)
const obs1 = await RundownContentObserver.create(activePlaylistId, showStyleBaseId, rundownIds, (cache) => {
- return this.#rundownContentChanged(showStyleBaseId, cache)
+ return rundownContentChanged(showStyleBaseId, cache)
})
return () => {
@@ -228,11 +230,9 @@ export class StudioObserver extends EventEmitter {
})
this.#pieceInstancesLiveQuery = await PieceInstancesObserver.create(activationId, showStyleBaseId, (cache) => {
- const cleanupChanges = this.#pieceInstancesChanged(showStyleBaseId, cache)
+ const cleanupChanges = pieceInstancesChanged(showStyleBaseId, cache)
- return () => {
- cleanupChanges?.()
- }
+ return () => cleanupChanges?.()
})
if (this.#disposed) {
@@ -249,5 +249,6 @@ export class StudioObserver extends EventEmitter {
this.#playlistInStudioLiveQuery.stop()
this.updatePlaylistInStudio.cancel()
this.#rundownsLiveQuery?.stop()
+ this.#pieceInstancesLiveQuery?.stop()
}
}
diff --git a/meteor/server/api/deviceTriggers/__tests__/StudioObserver.test.ts b/meteor/server/api/deviceTriggers/__tests__/StudioObserver.test.ts
new file mode 100644
index 00000000000..b2ebaeecc05
--- /dev/null
+++ b/meteor/server/api/deviceTriggers/__tests__/StudioObserver.test.ts
@@ -0,0 +1,156 @@
+import { protectString } from '@sofie-automation/corelib/dist/protectedString'
+import {
+ RundownId,
+ RundownPlaylistActivationId,
+ RundownPlaylistId,
+ ShowStyleBaseId,
+ StudioId,
+} from '@sofie-automation/corelib/dist/dataModel/Ids'
+
+import type { ContentCache as RundownContentCache } from '../reactiveContentCache'
+import type { ContentCache as PieceInstancesContentCache } from '../reactiveContentCacheForPieceInstances'
+import { runAllTimers } from '../../../../__mocks__/helpers/jest'
+
+type OnChangedRundown = (cache: RundownContentCache) => () => void
+type OnChangedPieceInstances = (cache: PieceInstancesContentCache) => () => void
+
+let capturedRundownContentOnChanged: OnChangedRundown | undefined
+let capturedPieceInstancesOnChanged: OnChangedPieceInstances | undefined
+
+jest.mock('../../../publications/lib/observerChain', () => {
+ const fakeHandle = { stop: jest.fn() }
+ const chain: any = {
+ next: jest.fn(() => chain),
+ end: jest.fn(() => fakeHandle),
+ }
+ return {
+ observerChain: jest.fn(() => chain),
+ }
+})
+
+jest.mock('../RundownsObserver', () => {
+ return {
+ RundownsObserver: {
+ create: jest.fn(
+ async (_playlistId: RundownPlaylistId, onChanged: (ids: RundownId[]) => Promise<() => void>) => {
+ // Immediately drive the callback once, to emulate initial observer execution
+ await onChanged([protectString('r0')])
+ return { stop: jest.fn() }
+ }
+ ),
+ },
+ }
+})
+
+jest.mock('../RundownContentObserver', () => {
+ return {
+ RundownContentObserver: {
+ create: jest.fn(
+ async (
+ _playlistId: RundownPlaylistId,
+ _showStyleBaseId: ShowStyleBaseId,
+ _rundownIds: RundownId[],
+ onChanged: OnChangedRundown
+ ) => {
+ capturedRundownContentOnChanged = onChanged
+ return { stop: jest.fn() }
+ }
+ ),
+ },
+ }
+})
+
+jest.mock('../PieceInstancesObserver', () => {
+ return {
+ PieceInstancesObserver: {
+ create: jest.fn(
+ async (
+ _activationId: RundownPlaylistActivationId,
+ _showStyleBaseId: ShowStyleBaseId,
+ onChanged: OnChangedPieceInstances
+ ) => {
+ capturedPieceInstancesOnChanged = onChanged
+ return { stop: jest.fn() }
+ }
+ ),
+ },
+ }
+})
+
+describe('StudioObserver', () => {
+ beforeEach(() => {
+ jest.useFakeTimers()
+ capturedRundownContentOnChanged = undefined
+ capturedPieceInstancesOnChanged = undefined
+ })
+
+ test('rundown deactivation regression: observer callbacks must not depend on `this` (private fields)', async () => {
+ // Import after mocks are in place
+ const { StudioObserver } = await import('../StudioObserver')
+
+ const studioId = protectString('studio0')
+ const playlistId = protectString('playlist0')
+ const activationId = protectString('activation0')
+ const rundownId = protectString('rundown0')
+ const showStyleBaseId = protectString('showStyleBase0')
+
+ const rundownCleanup = jest.fn()
+ const pieceCleanup = jest.fn()
+
+ const onRundownContentChanged = jest.fn(
+ (_ssbId: ShowStyleBaseId, _cache: RundownContentCache) => rundownCleanup
+ )
+ const onPieceInstancesChanged = jest.fn(
+ (_ssbId: ShowStyleBaseId, _cache: PieceInstancesContentCache) => pieceCleanup
+ )
+
+ const observer = new StudioObserver(studioId, onRundownContentChanged, onPieceInstancesChanged)
+
+ // Prime state so updateShowStyle goes down the creation path
+ ;(observer as any).nextProps = {
+ activePlaylistId: playlistId,
+ activationId,
+ currentRundownId: rundownId,
+ }
+
+ const state = {
+ currentRundown: { _id: rundownId, showStyleBaseId },
+ showStyleBase: { _id: showStyleBaseId },
+ }
+
+ // Trigger the debounced execution
+ const ps: Promise = (observer as any).updateShowStyle.call(state)
+
+ // Flush debounce timers and any queued promises
+ await jest.advanceTimersByTimeAsync(25)
+ await runAllTimers()
+ await ps
+
+ // Ensure we captured callbacks from the two observers
+ expect(capturedRundownContentOnChanged).toBeTruthy()
+ expect(capturedPieceInstancesOnChanged).toBeTruthy()
+
+ const mockRundownCache = {} as any as RundownContentCache
+ const mockPieceInstancesCache = {} as any as PieceInstancesContentCache
+
+ // Regression: invoke callbacks without a bound `this` (simulates lost context)
+ expect(() => capturedRundownContentOnChanged!(mockRundownCache)).not.toThrow()
+ expect(() => capturedPieceInstancesOnChanged!(mockPieceInstancesCache)).not.toThrow()
+
+ // They should return cleanup fns
+ const cleanup1 = capturedRundownContentOnChanged!(mockRundownCache)
+ const cleanup2 = capturedPieceInstancesOnChanged!(mockPieceInstancesCache)
+ expect(typeof cleanup1).toBe('function')
+ expect(typeof cleanup2).toBe('function')
+
+ // Ensure our handlers were called with expected args
+ expect(onRundownContentChanged).toHaveBeenCalledWith(showStyleBaseId, mockRundownCache)
+ expect(onPieceInstancesChanged).toHaveBeenCalledWith(showStyleBaseId, mockPieceInstancesCache)
+
+ // Ensure returned cleanup fns are callable
+ expect(() => cleanup1()).not.toThrow()
+ expect(() => cleanup2()).not.toThrow()
+
+ observer.stop()
+ })
+})
diff --git a/meteor/server/api/deviceTriggers/__tests__/TagsService.test.ts b/meteor/server/api/deviceTriggers/__tests__/TagsService.test.ts
index 1248e391583..bb42dce479e 100644
--- a/meteor/server/api/deviceTriggers/__tests__/TagsService.test.ts
+++ b/meteor/server/api/deviceTriggers/__tests__/TagsService.test.ts
@@ -9,7 +9,7 @@ import {
} from '@sofie-automation/corelib/dist/dataModel/Ids'
import { ContentCache } from '../reactiveContentCacheForPieceInstances'
import { ReactiveCacheCollection } from '../../../publications/lib/ReactiveCacheCollection'
-import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import { DBShowStyleBase } from '@sofie-automation/corelib/dist/dataModel/ShowStyleBase'
import { wrapDefaultObject } from '@sofie-automation/corelib/dist/settings/objectWithOverrides'
import { literal, normalizeArray } from '@sofie-automation/corelib/dist/lib'
diff --git a/meteor/server/api/deviceTriggers/observer.ts b/meteor/server/api/deviceTriggers/observer.ts
index cbabcc5356a..704c43b78cc 100644
--- a/meteor/server/api/deviceTriggers/observer.ts
+++ b/meteor/server/api/deviceTriggers/observer.ts
@@ -1,5 +1,6 @@
import { PeripheralDeviceId, StudioId } from '@sofie-automation/corelib/dist/dataModel/Ids'
import { ITranslatableMessage } from '@sofie-automation/corelib/dist/TranslatableMessage'
+import { TFunction } from 'i18next'
import { check } from 'meteor/check'
import { Meteor } from 'meteor/meteor'
import _ from 'underscore'
@@ -145,6 +146,10 @@ export async function receiveInputDeviceTrigger(
const context = actionManager.getContext()
if (!context) throw new Meteor.Error(500, `Undefined Device Trigger context for studio "${studioId}"`)
- await executableAction.execute((t: ITranslatableMessage) => t.key ?? t, `${deviceId}: ${triggerId}`, context)
+ await executableAction.execute(
+ ((t: ITranslatableMessage) => t.key ?? t) as unknown as TFunction, // TFunction has some odd generic constraints on the return type now
+ `${deviceId}: ${triggerId}`,
+ context
+ )
}
}
diff --git a/meteor/server/api/deviceTriggers/reactiveContentCache.ts b/meteor/server/api/deviceTriggers/reactiveContentCache.ts
index 5c01abb7ec4..b8e170c1047 100644
--- a/meteor/server/api/deviceTriggers/reactiveContentCache.ts
+++ b/meteor/server/api/deviceTriggers/reactiveContentCache.ts
@@ -6,7 +6,7 @@ import { DBPart } from '@sofie-automation/corelib/dist/dataModel/Part'
import { DBPartInstance } from '@sofie-automation/corelib/dist/dataModel/PartInstance'
import { RundownBaselineAdLibAction } from '@sofie-automation/corelib/dist/dataModel/RundownBaselineAdLibAction'
import { RundownBaselineAdLibItem } from '@sofie-automation/corelib/dist/dataModel/RundownBaselineAdLibPiece'
-import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import { DBSegment } from '@sofie-automation/corelib/dist/dataModel/Segment'
import { DBShowStyleBase } from '@sofie-automation/corelib/dist/dataModel/ShowStyleBase'
import { DBTriggeredActions } from '@sofie-automation/meteor-lib/dist/collections/TriggeredActions'
diff --git a/meteor/server/api/deviceTriggers/reactiveContentCacheForPieceInstances.ts b/meteor/server/api/deviceTriggers/reactiveContentCacheForPieceInstances.ts
index fafba70f46d..2035e70c21e 100644
--- a/meteor/server/api/deviceTriggers/reactiveContentCacheForPieceInstances.ts
+++ b/meteor/server/api/deviceTriggers/reactiveContentCacheForPieceInstances.ts
@@ -1,6 +1,6 @@
import { Meteor } from 'meteor/meteor'
import _ from 'underscore'
-import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import { DBShowStyleBase } from '@sofie-automation/corelib/dist/dataModel/ShowStyleBase'
import { ReactiveCacheCollection } from '../../publications/lib/ReactiveCacheCollection'
import { MongoFieldSpecifierOnesStrict } from '@sofie-automation/corelib/dist/mongo'
diff --git a/meteor/server/api/deviceTriggers/triggersContext.ts b/meteor/server/api/deviceTriggers/triggersContext.ts
index a93d5da362a..435ee512128 100644
--- a/meteor/server/api/deviceTriggers/triggersContext.ts
+++ b/meteor/server/api/deviceTriggers/triggersContext.ts
@@ -18,7 +18,10 @@ import { PartId, StudioId } from '@sofie-automation/corelib/dist/dataModel/Ids'
import { DummyReactiveVar } from '@sofie-automation/meteor-lib/dist/triggers/reactive-var'
import { ReactivePlaylistActionContext } from '@sofie-automation/meteor-lib/dist/triggers/actionFactory'
import { FindOneOptions, FindOptions, MongoQuery } from '@sofie-automation/corelib/dist/mongo'
-import { DBRundownPlaylist, SelectedPartInstance } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import {
+ DBRundownPlaylist,
+ SelectedPartInstance,
+} from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import {
AdLibActions,
AdLibPieces,
@@ -156,10 +159,9 @@ async function fetchInfoForSelectedPart(partInfo: SelectedPartInstance | null):
const partInstance = (await PartInstances.findOneAsync(partInfo.partInstanceId, {
projection: {
- // @ts-expect-error deep property
'part._id': 1,
segmentId: 1,
- },
+ } as any,
})) as (Pick & { part: Pick }) | null
if (!partInstance) return null
diff --git a/meteor/server/api/evaluations.ts b/meteor/server/api/evaluations.ts
index 22ac4689f62..5b7385e50c2 100644
--- a/meteor/server/api/evaluations.ts
+++ b/meteor/server/api/evaluations.ts
@@ -7,7 +7,7 @@ import { Meteor } from 'meteor/meteor'
import _ from 'underscore'
import { fetchStudioLight } from '../optimizations'
import { sendSlackMessageToWebhook } from './integration/slack'
-import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import { Evaluations, RundownPlaylists } from '../collections'
import { applyAndValidateOverrides } from '@sofie-automation/corelib/dist/settings/objectWithOverrides'
import { VerifiedRundownPlaylistForUserAction } from '../security/check'
diff --git a/meteor/server/api/peripheralDevice.ts b/meteor/server/api/peripheralDevice.ts
index be6e118a0af..ca864f3438d 100644
--- a/meteor/server/api/peripheralDevice.ts
+++ b/meteor/server/api/peripheralDevice.ts
@@ -2,7 +2,14 @@ import { Meteor } from 'meteor/meteor'
import { check, Match } from '../lib/check'
import _ from 'underscore'
import { PeripheralDeviceType, PeripheralDevice } from '@sofie-automation/corelib/dist/dataModel/PeripheralDevice'
-import { PeripheralDeviceCommands, PeripheralDevices, Rundowns, Studios, UserActionsLog } from '../collections'
+import {
+ PeripheralDeviceCommands,
+ PeripheralDevices,
+ Rundowns,
+ Studios,
+ UserActionsLog,
+ Blueprints,
+} from '../collections'
import { stringifyObjects, literal } from '@sofie-automation/corelib/dist/lib'
import { protectString, unprotectString } from '@sofie-automation/corelib/dist/protectedString'
import { getCurrentTime } from '../lib/lib'
@@ -30,14 +37,16 @@ import { checkAccessAndGetPeripheralDevice } from '../security/check'
import { UserActionsLogItem } from '@sofie-automation/meteor-lib/dist/collections/UserActionsLog'
import { PackageManagerIntegration } from './integration/expectedPackages'
import { profiler } from './profiler'
-import { QueueStudioJob } from '../worker/worker'
+import { QueueStudioJob, QueueOrUpdateStudioJob } from '../worker/worker'
import { StudioJobs } from '@sofie-automation/corelib/dist/worker/studio'
import {
PlayoutChangedResults,
PeripheralDeviceInitOptions,
PeripheralDeviceStatusObject,
TimelineTriggerTimeResult,
+ DeviceStatusDetail,
} from '@sofie-automation/shared-lib/dist/peripheralDevice/peripheralDeviceAPI'
+import type { PeripheralDeviceExternalEvent } from '@sofie-automation/shared-lib/dist/peripheralDevice/externalEvents'
import { checkStudioExists } from '../optimizations'
import {
ExpectedPackageId,
@@ -65,8 +74,215 @@ import bodyParser from 'koa-bodyparser'
import { assertConnectionHasOneOfPermissions } from '../security/auth'
import { DBStudio } from '@sofie-automation/corelib/dist/dataModel/Studio'
import { getRootSubpath } from '../lib'
+import { evalBlueprint } from './blueprints/cache'
+import { StudioBlueprintManifest, TSR } from '@sofie-automation/blueprints-integration'
+import { StatusMessageResolver } from '@sofie-automation/corelib'
+import { interpollateTranslation } from '@sofie-automation/corelib/dist/TranslatableMessage'
+import { Blueprint } from '@sofie-automation/corelib/dist/dataModel/Blueprint'
+import { StudioId } from '@sofie-automation/corelib/dist/dataModel/Ids'
const apmNamespace = 'peripheralDevice'
+
+type StudioBlueprintLookup = {
+ blueprint: Pick
+ manifest: StudioBlueprintManifest
+}
+
+/**
+ * Load and evaluate the Studio blueprint manifest for a studio.
+ * Returns undefined when the studio has no blueprint or lookup fails.
+ */
+async function getStudioBlueprintManifest(studioId: StudioId): Promise {
+ const studio = (await Studios.findOneAsync(studioId, {
+ projection: { blueprintId: 1 },
+ })) as Pick | undefined
+
+ if (!studio?.blueprintId) return undefined
+
+ const blueprint = (await Blueprints.findOneAsync(studio.blueprintId, {
+ projection: { _id: 1, name: 1, code: 1 },
+ })) as Pick | undefined
+
+ if (!blueprint) return undefined
+
+ const manifest = evalBlueprint(blueprint) as StudioBlueprintManifest
+ return { blueprint, manifest }
+}
+
+/**
+ * Resolve device status details using the Studio blueprint's deviceStatusMessages.
+ * This allows blueprints to customize status messages shown to operators.
+ *
+ * @param studioId - The studio ID to look up the blueprint
+ * @param deviceName - The peripheral device name (shorter than TSR's internal name)
+ * @param deviceId - The peripheral device ID
+ * @param statusDetails - Structured status details from TSR
+ * @param defaultMessages - The original messages from TSR (used as fallback)
+ */
+async function resolveDeviceStatusDetails(
+ studioId: StudioId,
+ deviceName: string,
+ deviceId: PeripheralDeviceId,
+ statusDetails: DeviceStatusDetail[],
+ defaultMessages: string[]
+): Promise {
+ try {
+ const studioBlueprint = await getStudioBlueprintManifest(studioId)
+ if (!studioBlueprint) {
+ // No blueprint, return empty (caller will use original messages)
+ return []
+ }
+
+ const { blueprint, manifest: blueprintManifest } = studioBlueprint
+
+ logger.debug(
+ `Blueprint ${blueprint._id} deviceStatusMessages keys: ${Object.keys(blueprintManifest.deviceStatusMessages ?? {}).join(', ')}`
+ )
+
+ if (!blueprintManifest.deviceStatusMessages) {
+ // Blueprint doesn't define any custom status messages
+ logger.debug(`Blueprint ${blueprint._id} has no deviceStatusMessages`)
+ return []
+ }
+
+ // Create resolver with the blueprint's status messages
+ const resolver = new StatusMessageResolver(
+ blueprint._id,
+ blueprintManifest.deviceStatusMessages,
+ undefined // No system error messages
+ )
+
+ // Resolve each status detail
+ const resolvedMessages: string[] = []
+ for (let i = 0; i < statusDetails.length; i++) {
+ const statusDetail = statusDetails[i]
+ // statusDetail.message is always pre-rendered by TSR; use it as fallback if no defaultMessages entry
+ const defaultMessage = defaultMessages[i] ?? statusDetail.message
+
+ if (!statusDetail.code) {
+ // No structured code - use the pre-rendered TSR message directly
+ resolvedMessages.push(defaultMessage)
+ continue
+ }
+
+ logger.debug(
+ `Resolving status code: ${statusDetail.code}, context: ${JSON.stringify(statusDetail.context)}`
+ )
+ const message = resolver.getDeviceStatusMessage(
+ statusDetail.code,
+ {
+ ...statusDetail.context,
+ // Override with peripheral device info (TSR might have longer names)
+ deviceName,
+ deviceId: unprotectString(deviceId),
+ },
+ defaultMessage
+ )
+
+ if (message) {
+ // Interpolate the message template with context values
+ const interpolated = interpollateTranslation(message.key, message.args)
+ logger.debug(`Resolved message for ${statusDetail.code}: ${interpolated}`)
+ resolvedMessages.push(interpolated)
+ // Also mutate statusDetail.message so the UI can read from statusDetails[].message directly
+ statusDetail.message = interpolated
+ } else {
+ // Message suppressed by blueprint - clear the message so the UI doesn't show the raw TSR message
+ statusDetail.message = ''
+ logger.debug(`Message suppressed for ${statusDetail.code}`)
+ }
+ }
+
+ return resolvedMessages
+ } catch (e) {
+ // Log error but don't fail - fall back to original messages
+ logger.error(`Error resolving device status messages: ${e}`)
+ return []
+ }
+}
+
+/**
+ * Resolve a TSR ActionExecutionResult using the Studio blueprint's deviceActionMessages.
+ * If the result has a structured `code` and `context`, and the blueprint defines a custom
+ * message template for that code, the `response` field is replaced with the resolved message.
+ * When the blueprint suppresses the message (empty string template), `response` is cleared.
+ *
+ * @param deviceId - The peripheral device ID (used to look up the studio and blueprint)
+ * @param result - The action execution result from TSR
+ * @returns The result with `response` resolved, cleared on suppression, or unchanged when no custom message applies
+ */
+export async function resolveActionResult(
+ deviceId: PeripheralDeviceId,
+ result: TSR.ActionExecutionResult
+): Promise {
+ if (result.result === TSR.ActionExecutionResultCode.Ok) return result
+ if (!result.code) return result
+
+ try {
+ const device = (await PeripheralDevices.findOneAsync(deviceId, {
+ projection: { name: 1, studioAndConfigId: 1, parentDeviceId: 1 },
+ })) as Pick | undefined
+
+ if (!device) return result
+
+ // Child devices (like casparcg0) don't have studioAndConfigId directly - get it from parent
+ let studioId = device.studioAndConfigId?.studioId
+ if (!studioId && device.parentDeviceId) {
+ const parentDevice = await PeripheralDevices.findOneAsync(device.parentDeviceId, {
+ projection: { studioAndConfigId: 1 },
+ })
+ studioId = parentDevice?.studioAndConfigId?.studioId
+ }
+
+ if (!studioId) return result
+
+ const studioBlueprint = await getStudioBlueprintManifest(studioId)
+ if (!studioBlueprint) return result
+
+ const { blueprint, manifest: blueprintManifest } = studioBlueprint
+
+ if (!blueprintManifest.deviceActionMessages) return result
+
+ const resolver = new StatusMessageResolver(blueprint._id, blueprintManifest.deviceActionMessages, undefined)
+
+ // Use the existing TSR response as the fallback default message
+ const defaultMessage = result.response?.key ?? ''
+
+ const resolved = resolver.getDeviceStatusMessage(
+ result.code,
+ {
+ ...(result.context ?? {}),
+ deviceName: device.name,
+ deviceId: unprotectString(deviceId),
+ },
+ defaultMessage
+ )
+
+ if (resolved === null) {
+ // Message suppressed by blueprint - clear response so the UI doesn't show the raw TSR message
+ return {
+ ...result,
+ response: { key: '' },
+ }
+ }
+
+ // resolved.key is either the custom blueprint message or the defaultMessage
+ if (resolved.key === defaultMessage) {
+ // No custom message found - keep original response unchanged
+ return result
+ }
+
+ const interpolated = interpollateTranslation(resolved.key, resolved.args)
+ return {
+ ...result,
+ response: { key: interpolated },
+ }
+ } catch (e) {
+ logger.error(`Error resolving device action messages: ${e}`)
+ return result
+ }
+}
+
export namespace ServerPeripheralDeviceAPI {
export async function initialize(
context: MethodContext,
@@ -141,6 +357,7 @@ export namespace ServerPeripheralDeviceAPI {
created: getCurrentTime(),
status: {
statusCode: StatusCode.UNKNOWN,
+ statusDetails: [],
},
connected: true,
connectionId: options.connectionId,
@@ -203,6 +420,37 @@ export namespace ServerPeripheralDeviceAPI {
throw new Meteor.Error(400, 'device status code is not known')
}
+ // Resolve status messages using Studio blueprint if structured status details are present
+ // Child devices (like casparcg0) don't have studioAndConfigId directly - get it from parent
+ let studioId = peripheralDevice.studioAndConfigId?.studioId
+ if (!studioId && peripheralDevice.parentDeviceId) {
+ const parentDevice = await PeripheralDevices.findOneAsync(peripheralDevice.parentDeviceId, {
+ projection: { studioAndConfigId: 1 },
+ })
+ studioId = parentDevice?.studioAndConfigId?.studioId
+ }
+
+ logger.info(
+ `Device ${deviceId} setStatus: statusDetails=${status.statusDetails?.length ?? 'undefined'}, messages=${status.messages?.length ?? 'undefined'}, studioId=${studioId ?? 'none'}`
+ )
+ if (status.statusDetails && status.statusDetails.length > 0) {
+ if (studioId) {
+ const resolvedMessages = await resolveDeviceStatusDetails(
+ studioId,
+ peripheralDevice.name,
+ peripheralDevice._id,
+ status.statusDetails,
+ status.messages ?? []
+ )
+ // Use blueprint-resolved messages if available, otherwise fall back to statusDetails messages
+ status.messages =
+ resolvedMessages.length > 0 ? resolvedMessages : status.statusDetails.map((d) => d.message)
+ } else {
+ // No studio context, derive messages directly from statusDetails
+ status.messages = status.statusDetails.map((d) => d.message)
+ }
+ }
+
// check if we have to update something:
if (!_.isEqual(status, peripheralDevice.status)) {
logger.info(
@@ -312,6 +560,32 @@ export namespace ServerPeripheralDeviceAPI {
transaction?.end()
}
+ export async function reportExternalEvents(
+ context: MethodContext,
+ deviceId: PeripheralDeviceId,
+ token: string,
+ events: PeripheralDeviceExternalEvent[]
+ ): Promise {
+ check(events, Array)
+
+ const peripheralDevice = await checkAccessAndGetPeripheralDevice(deviceId, token, context)
+
+ if (!peripheralDevice.studioAndConfigId)
+ throw new Error(`PeripheralDevice "${peripheralDevice._id}" sent reportExternalEvents, but has no studioId`)
+
+ if (!events.length) return
+
+ const studioId = peripheralDevice.studioAndConfigId.studioId
+ // An arbitrary cap, to avoid unbound memory growth
+ const MAX_PENDING_EXTERNAL_EVENTS = 1000
+
+ // Merge events into the last pending OnExternalEvents job in the queue, or enqueue a new one.
+ // This prevents queue flooding when many events arrive in a burst, or when multiple gateways
+ // report events for the same studio simultaneously.
+ QueueOrUpdateStudioJob(StudioJobs.OnExternalEvents, studioId, (existing) => ({
+ events: [...(existing?.events ?? []), ...events].slice(-MAX_PENDING_EXTERNAL_EVENTS),
+ }))
+ }
export async function pingWithCommand(
context: MethodContext,
deviceId: PeripheralDeviceId,
@@ -883,6 +1157,13 @@ class ServerPeripheralDeviceAPIClass extends MethodContextAPI implements NewPeri
) {
return ServerPeripheralDeviceAPI.playoutPlaybackChanged(this, deviceId, deviceToken, changedResults)
}
+ async reportExternalEvents(
+ deviceId: PeripheralDeviceId,
+ deviceToken: string,
+ events: PeripheralDeviceExternalEvent[]
+ ) {
+ return ServerPeripheralDeviceAPI.reportExternalEvents(this, deviceId, deviceToken, events)
+ }
async reportResolveDone(
deviceId: PeripheralDeviceId,
deviceToken: string,
diff --git a/meteor/server/api/rest/koa.ts b/meteor/server/api/rest/koa.ts
index 7e6f8420aaa..188a8a887ac 100644
--- a/meteor/server/api/rest/koa.ts
+++ b/meteor/server/api/rest/koa.ts
@@ -13,6 +13,8 @@ import { logger } from '../../logging'
import { PackageInfo } from '../../coreSystem'
import { profiler } from '../profiler'
import fs from 'fs/promises'
+import type { IExtendedSettings } from '@sofie-automation/meteor-lib/dist/Settings'
+import { ENABLE_HEADER_AUTH } from '../../security/auth'
declare module 'http' {
interface IncomingMessage {
@@ -123,7 +125,10 @@ function getExtendedMeteorRuntimeConfig() {
return `window.__meteor_runtime_config__ = (${JSON.stringify({
// @ts-expect-error missing types for internal meteor detail
...__meteor_runtime_config__,
- sofieVersionExtended: versionExtended,
+ ...({
+ sofieVersionExtended: versionExtended,
+ enableHeaderAuth: ENABLE_HEADER_AUTH,
+ } satisfies IExtendedSettings),
})})`
}
diff --git a/meteor/server/api/rest/v1/__tests__/playlists.spec.ts b/meteor/server/api/rest/v1/__tests__/playlists.spec.ts
new file mode 100644
index 00000000000..33a1262dce0
--- /dev/null
+++ b/meteor/server/api/rest/v1/__tests__/playlists.spec.ts
@@ -0,0 +1,228 @@
+import { registerRoutes } from '../playlists'
+import { ClientAPI } from '@sofie-automation/meteor-lib/dist/api/client'
+import { protectString } from '@sofie-automation/corelib/dist/protectedString'
+import { PlaylistsRestAPI } from '../../../../lib/rest/v1'
+
+describe('Playlists REST API Routes', () => {
+ let mockRegisterRoute: jest.Mock
+ let mockServerAPI: jest.Mocked
+
+ beforeEach(() => {
+ mockRegisterRoute = jest.fn()
+ mockServerAPI = {
+ tTimerStartCountdown: jest.fn().mockResolvedValue(ClientAPI.responseSuccess(undefined)),
+ tTimerStartFreeRun: jest.fn().mockResolvedValue(ClientAPI.responseSuccess(undefined)),
+ tTimerPause: jest.fn().mockResolvedValue(ClientAPI.responseSuccess(undefined)),
+ tTimerResume: jest.fn().mockResolvedValue(ClientAPI.responseSuccess(undefined)),
+ tTimerRestart: jest.fn().mockResolvedValue(ClientAPI.responseSuccess(undefined)),
+ tTimerClearProjected: jest.fn().mockResolvedValue(ClientAPI.responseSuccess(undefined)),
+ tTimerSetProjectedAnchorPart: jest.fn().mockResolvedValue(ClientAPI.responseSuccess(undefined)),
+ tTimerSetProjectedTime: jest.fn().mockResolvedValue(ClientAPI.responseSuccess(undefined)),
+ tTimerSetProjectedDuration: jest.fn().mockResolvedValue(ClientAPI.responseSuccess(undefined)),
+ } as any
+
+ registerRoutes(mockRegisterRoute)
+ })
+
+ test('should register T-timer countdown route', () => {
+ const countdownRoute = mockRegisterRoute.mock.calls.find(
+ (call) => call[1] === '/playlists/:playlistId/t-timers/:timerIndex/countdown'
+ )
+ expect(countdownRoute).toBeDefined()
+ expect(countdownRoute[0]).toBe('post')
+ })
+
+ test('T-timer countdown handler should call serverAPI.tTimerStartCountdown', async () => {
+ const countdownRoute = mockRegisterRoute.mock.calls.find(
+ (call) => call[1] === '/playlists/:playlistId/t-timers/:timerIndex/countdown'
+ )
+ const handler = countdownRoute[4]
+
+ const params = { playlistId: 'playlist0', timerIndex: '1' }
+ const body = { duration: 60, stopAtZero: true, startPaused: false }
+ const connection = {} as any
+ const event = 'test-event'
+
+ await handler(mockServerAPI, connection, event, params, body)
+
+ expect(mockServerAPI.tTimerStartCountdown).toHaveBeenCalledWith(
+ connection,
+ event,
+ protectString('playlist0'),
+ 1,
+ 60,
+ true,
+ false
+ )
+ })
+
+ test('T-timer countdown handler should reject malformed timerIndex', async () => {
+ const countdownRoute = mockRegisterRoute.mock.calls.find(
+ (call) => call[1] === '/playlists/:playlistId/t-timers/:timerIndex/countdown'
+ )
+ const handler = countdownRoute[4]
+
+ const params = { playlistId: 'playlist0', timerIndex: '1foo' }
+ const body = { duration: 60, stopAtZero: true, startPaused: false }
+ const connection = {} as any
+ const event = 'test-event'
+
+ await expect(handler(mockServerAPI, connection, event, params, body)).rejects.toMatchObject({ error: 400 })
+ expect(mockServerAPI.tTimerStartCountdown).not.toHaveBeenCalled()
+ })
+
+ test('T-timer countdown handler should reject out-of-range timerIndex', async () => {
+ const countdownRoute = mockRegisterRoute.mock.calls.find(
+ (call) => call[1] === '/playlists/:playlistId/t-timers/:timerIndex/countdown'
+ )
+ const handler = countdownRoute[4]
+
+ const params = { playlistId: 'playlist0', timerIndex: '4' }
+ const body = { duration: 60, stopAtZero: true, startPaused: false }
+ const connection = {} as any
+ const event = 'test-event'
+
+ await expect(handler(mockServerAPI, connection, event, params, body)).rejects.toMatchObject({ error: 400 })
+ expect(mockServerAPI.tTimerStartCountdown).not.toHaveBeenCalled()
+ })
+
+ test('should register T-timer pause route', () => {
+ const pauseRoute = mockRegisterRoute.mock.calls.find(
+ (call) => call[1] === '/playlists/:playlistId/t-timers/:timerIndex/pause'
+ )
+ expect(pauseRoute).toBeDefined()
+ expect(pauseRoute[0]).toBe('post')
+ })
+
+ test('T-timer pause handler should call serverAPI.tTimerPause', async () => {
+ const pauseRoute = mockRegisterRoute.mock.calls.find(
+ (call) => call[1] === '/playlists/:playlistId/t-timers/:timerIndex/pause'
+ )
+ const handler = pauseRoute[4]
+
+ const params = { playlistId: 'playlist0', timerIndex: '2' }
+ const connection = {} as any
+ const event = 'test-event'
+
+ await handler(mockServerAPI, connection, event, params, {})
+
+ expect(mockServerAPI.tTimerPause).toHaveBeenCalledWith(connection, event, protectString('playlist0'), 2)
+ })
+
+ test('T-timer projected clear handler should accept playlist externalId', async () => {
+ const route = mockRegisterRoute.mock.calls.find(
+ (call) => call[1] === '/playlists/:playlistId/t-timers/:timerIndex/projected/clear'
+ )
+ expect(route).toBeDefined()
+ const handler = route[4]
+
+ const params = { playlistId: 'playlistExternalId', timerIndex: '1' }
+ const connection = {} as any
+ const event = 'test-event'
+
+ await handler(mockServerAPI, connection, event, params, {})
+
+ expect(mockServerAPI.tTimerClearProjected).toHaveBeenCalledWith(
+ connection,
+ event,
+ protectString('playlistExternalId'),
+ 1
+ )
+ })
+
+ test('T-timer projected anchor-part handler should accept playlist externalId', async () => {
+ const route = mockRegisterRoute.mock.calls.find(
+ (call) => call[1] === '/playlists/:playlistId/t-timers/:timerIndex/projected/anchor-part'
+ )
+ expect(route).toBeDefined()
+ const handler = route[4]
+
+ const params = { playlistId: 'playlistExternalId', timerIndex: '2' }
+ const body = { externalId: 'partExternalId' }
+ const connection = {} as any
+ const event = 'test-event'
+
+ await handler(mockServerAPI, connection, event, params, body)
+
+ expect(mockServerAPI.tTimerSetProjectedAnchorPart).toHaveBeenCalledWith(
+ connection,
+ event,
+ protectString('playlistExternalId'),
+ 2,
+ undefined,
+ 'partExternalId'
+ )
+ })
+
+ test('T-timer projected anchor-part handler should accept partId', async () => {
+ const route = mockRegisterRoute.mock.calls.find(
+ (call) => call[1] === '/playlists/:playlistId/t-timers/:timerIndex/projected/anchor-part'
+ )
+ expect(route).toBeDefined()
+ const handler = route[4]
+
+ const params = { playlistId: 'playlistExternalId', timerIndex: '2' }
+ const body = { partId: 'partInternalId' }
+ const connection = {} as any
+ const event = 'test-event'
+
+ await handler(mockServerAPI, connection, event, params, body)
+
+ expect(mockServerAPI.tTimerSetProjectedAnchorPart).toHaveBeenCalledWith(
+ connection,
+ event,
+ protectString('playlistExternalId'),
+ 2,
+ protectString('partInternalId'),
+ undefined
+ )
+ })
+
+ test('T-timer projected time handler should accept playlist externalId', async () => {
+ const route = mockRegisterRoute.mock.calls.find(
+ (call) => call[1] === '/playlists/:playlistId/t-timers/:timerIndex/projected/time'
+ )
+ expect(route).toBeDefined()
+ const handler = route[4]
+
+ const params = { playlistId: 'playlistExternalId', timerIndex: '3' }
+ const body = { time: 1707024000000, paused: false }
+ const connection = {} as any
+ const event = 'test-event'
+
+ await handler(mockServerAPI, connection, event, params, body)
+
+ expect(mockServerAPI.tTimerSetProjectedTime).toHaveBeenCalledWith(
+ connection,
+ event,
+ protectString('playlistExternalId'),
+ 3,
+ 1707024000000,
+ false
+ )
+ })
+
+ test('T-timer projected duration handler should accept playlist externalId', async () => {
+ const route = mockRegisterRoute.mock.calls.find(
+ (call) => call[1] === '/playlists/:playlistId/t-timers/:timerIndex/projected/duration'
+ )
+ expect(route).toBeDefined()
+ const handler = route[4]
+
+ const params = { playlistId: 'playlistExternalId', timerIndex: '1' }
+ const body = { duration: 60000, paused: true }
+ const connection = {} as any
+ const event = 'test-event'
+
+ await handler(mockServerAPI, connection, event, params, body)
+
+ expect(mockServerAPI.tTimerSetProjectedDuration).toHaveBeenCalledWith(
+ connection,
+ event,
+ protectString('playlistExternalId'),
+ 1,
+ 60000,
+ true
+ )
+ })
+})
diff --git a/meteor/server/api/rest/v1/ingest.ts b/meteor/server/api/rest/v1/ingest.ts
index da2bd206e0f..f1ecfd392cb 100644
--- a/meteor/server/api/rest/v1/ingest.ts
+++ b/meteor/server/api/rest/v1/ingest.ts
@@ -9,7 +9,7 @@ import {
} from '@sofie-automation/corelib/dist/dataModel/Ids'
import { DBPart } from '@sofie-automation/corelib/dist/dataModel/Part'
import { getRundownNrcsName, Rundown } from '@sofie-automation/corelib/dist/dataModel/Rundown'
-import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import { DBSegment } from '@sofie-automation/corelib/dist/dataModel/Segment'
import { protectString, unprotectString } from '@sofie-automation/corelib/dist/protectedString'
import { IngestJobs } from '@sofie-automation/corelib/dist/worker/ingest'
@@ -164,6 +164,8 @@ class IngestServerAPI implements IngestRestAPI {
playlistExternalId: rawRundown.playlistExternalId,
studioId: unprotectString(rawRundown.studioId),
name: rawRundown.name,
+ type: rawRundown.source.type,
+ timing: rawRundown.timing,
}
}
@@ -175,6 +177,12 @@ class IngestServerAPI implements IngestRestAPI {
rank: rawSegment._rank,
rundownId: unprotectString(rawSegment.rundownId),
isHidden: rawSegment.isHidden,
+ timing: rawSegment.segmentTiming
+ ? {
+ budgetDuration: rawSegment.segmentTiming.budgetDuration,
+ countdownType: rawSegment.segmentTiming.countdownType,
+ }
+ : undefined,
}
}
@@ -780,17 +788,6 @@ class IngestServerAPI implements IngestRestAPI {
if (!segment) {
return
}
-
- const parts = await this.findParts(segment._id)
- return Promise.all(
- parts.map(async (part) =>
- runIngestOperation(studio._id, IngestJobs.RemovePart, {
- partExternalId: part.externalId,
- rundownExternalId: rundown.externalId,
- segmentExternalId: segment.externalId,
- })
- )
- )
})
)
@@ -839,17 +836,6 @@ class IngestServerAPI implements IngestRestAPI {
if (!segment) {
throw new Meteor.Error(400, `Segment '${segmentId}' does not exist`)
}
- const parts = await this.findParts(segment._id)
-
- await Promise.all(
- parts.map(async (part) =>
- runIngestOperation(studio._id, IngestJobs.RemovePart, {
- partExternalId: part.externalId,
- rundownExternalId: rundown.externalId,
- segmentExternalId: segment.externalId,
- })
- )
- )
await runIngestOperation(studio._id, IngestJobs.UpdateSegment, {
rundownExternalId: rundown.externalId,
diff --git a/meteor/server/api/rest/v1/playlists.ts b/meteor/server/api/rest/v1/playlists.ts
index cdd3e69174b..50b68accb8e 100644
--- a/meteor/server/api/rest/v1/playlists.ts
+++ b/meteor/server/api/rest/v1/playlists.ts
@@ -14,6 +14,7 @@ import {
RundownPlaylistId,
SegmentId,
} from '@sofie-automation/corelib/dist/dataModel/Ids'
+import { RundownTTimerIndex } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/TTimers'
import { Match, check } from '../../../lib/check'
import { PlaylistsRestAPI } from '../../../lib/rest/v1'
import { Meteor } from 'meteor/meteor'
@@ -30,7 +31,7 @@ import {
RundownPlaylists,
Segments,
} from '../../../collections'
-import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import { ServerClientAPI } from '../../client'
import { QueueNextSegmentResult, StudioJobs, TakeNextPartResult } from '@sofie-automation/corelib/dist/worker/studio'
import { getCurrentTime } from '../../../lib/lib'
@@ -38,6 +39,15 @@ import { TriggerReloadDataResponse } from '@sofie-automation/meteor-lib/dist/api
import { ServerRundownAPI } from '../../rundown'
import { triggerWriteAccess } from '../../../security/securityVerify'
+function parseTimerIndex(rawTimerIndex: string): RundownTTimerIndex {
+ const timerIndex = Number(rawTimerIndex)
+ if (!Number.isInteger(timerIndex) || timerIndex < 1 || timerIndex > 3) {
+ throw new Meteor.Error(400, `Invalid timerIndex`)
+ }
+
+ return timerIndex as RundownTTimerIndex
+}
+
class PlaylistsServerAPI implements PlaylistsRestAPI {
constructor(private context: ServerAPIContext) {}
@@ -647,6 +657,261 @@ class PlaylistsServerAPI implements PlaylistsRestAPI {
}
)
}
+
+ async tTimerStartCountdown(
+ connection: Meteor.Connection,
+ event: string,
+ rundownPlaylistId: RundownPlaylistId,
+ timerIndex: RundownTTimerIndex,
+ duration: number,
+ stopAtZero?: boolean,
+ startPaused?: boolean
+ ): Promise> {
+ const playlist = await this.findPlaylist(rundownPlaylistId)
+
+ return ServerClientAPI.runUserActionInLogForPlaylistOnWorker(
+ this.context.getMethodContext(connection),
+ event,
+ getCurrentTime(),
+ playlist._id,
+ () => {
+ check(playlist._id, String)
+ check(timerIndex, Number)
+ check(duration, Number)
+ check(stopAtZero, Match.Optional(Boolean))
+ check(startPaused, Match.Optional(Boolean))
+ },
+ StudioJobs.TTimerStartCountdown,
+ {
+ playlistId: playlist._id,
+ timerIndex,
+ duration,
+ stopAtZero: !!stopAtZero,
+ startPaused: !!startPaused,
+ }
+ )
+ }
+
+ async tTimerStartFreeRun(
+ connection: Meteor.Connection,
+ event: string,
+ rundownPlaylistId: RundownPlaylistId,
+ timerIndex: RundownTTimerIndex,
+ startPaused?: boolean
+ ): Promise> {
+ const playlist = await this.findPlaylist(rundownPlaylistId)
+
+ return ServerClientAPI.runUserActionInLogForPlaylistOnWorker(
+ this.context.getMethodContext(connection),
+ event,
+ getCurrentTime(),
+ playlist._id,
+ () => {
+ check(playlist._id, String)
+ check(timerIndex, Number)
+ check(startPaused, Match.Optional(Boolean))
+ },
+ StudioJobs.TTimerStartFreeRun,
+ {
+ playlistId: playlist._id,
+ timerIndex,
+ startPaused: !!startPaused,
+ }
+ )
+ }
+
+ async tTimerPause(
+ connection: Meteor.Connection,
+ event: string,
+ rundownPlaylistId: RundownPlaylistId,
+ timerIndex: RundownTTimerIndex
+ ): Promise> {
+ const playlist = await this.findPlaylist(rundownPlaylistId)
+
+ return ServerClientAPI.runUserActionInLogForPlaylistOnWorker(
+ this.context.getMethodContext(connection),
+ event,
+ getCurrentTime(),
+ playlist._id,
+ () => {
+ check(playlist._id, String)
+ check(timerIndex, Number)
+ },
+ StudioJobs.TTimerPause,
+ {
+ playlistId: playlist._id,
+ timerIndex,
+ }
+ )
+ }
+
+ async tTimerResume(
+ connection: Meteor.Connection,
+ event: string,
+ rundownPlaylistId: RundownPlaylistId,
+ timerIndex: RundownTTimerIndex
+ ): Promise> {
+ const playlist = await this.findPlaylist(rundownPlaylistId)
+
+ return ServerClientAPI.runUserActionInLogForPlaylistOnWorker(
+ this.context.getMethodContext(connection),
+ event,
+ getCurrentTime(),
+ playlist._id,
+ () => {
+ check(playlist._id, String)
+ check(timerIndex, Number)
+ },
+ StudioJobs.TTimerResume,
+ {
+ playlistId: playlist._id,
+ timerIndex,
+ }
+ )
+ }
+
+ async tTimerRestart(
+ connection: Meteor.Connection,
+ event: string,
+ rundownPlaylistId: RundownPlaylistId,
+ timerIndex: RundownTTimerIndex
+ ): Promise> {
+ const playlist = await this.findPlaylist(rundownPlaylistId)
+
+ return ServerClientAPI.runUserActionInLogForPlaylistOnWorker(
+ this.context.getMethodContext(connection),
+ event,
+ getCurrentTime(),
+ playlist._id,
+ () => {
+ check(playlist._id, String)
+ check(timerIndex, Number)
+ },
+ StudioJobs.TTimerRestart,
+ {
+ playlistId: playlist._id,
+ timerIndex,
+ }
+ )
+ }
+
+ async tTimerClearProjected(
+ connection: Meteor.Connection,
+ event: string,
+ rundownPlaylistId: RundownPlaylistId,
+ timerIndex: RundownTTimerIndex
+ ): Promise> {
+ const playlist = await this.findPlaylist(rundownPlaylistId)
+
+ return ServerClientAPI.runUserActionInLogForPlaylistOnWorker(
+ this.context.getMethodContext(connection),
+ event,
+ getCurrentTime(),
+ playlist._id,
+ () => {
+ check(playlist._id, String)
+ check(timerIndex, Number)
+ },
+ StudioJobs.TTimerClearProjected,
+ {
+ playlistId: playlist._id,
+ timerIndex,
+ }
+ )
+ }
+
+ async tTimerSetProjectedAnchorPart(
+ connection: Meteor.Connection,
+ event: string,
+ rundownPlaylistId: RundownPlaylistId,
+ timerIndex: RundownTTimerIndex,
+ partId?: PartId,
+ externalId?: string
+ ): Promise> {
+ const playlist = await this.findPlaylist(rundownPlaylistId)
+
+ return ServerClientAPI.runUserActionInLogForPlaylistOnWorker(
+ this.context.getMethodContext(connection),
+ event,
+ getCurrentTime(),
+ playlist._id,
+ () => {
+ check(playlist._id, String)
+ check(timerIndex, Number)
+ check(partId, Match.Optional(String))
+ check(externalId, Match.Optional(String))
+ },
+ StudioJobs.TTimerSetProjectedAnchorPart,
+ {
+ playlistId: playlist._id,
+ timerIndex,
+ partId,
+ externalId,
+ }
+ )
+ }
+
+ async tTimerSetProjectedTime(
+ connection: Meteor.Connection,
+ event: string,
+ rundownPlaylistId: RundownPlaylistId,
+ timerIndex: RundownTTimerIndex,
+ time: number,
+ paused?: boolean
+ ): Promise> {
+ const playlist = await this.findPlaylist(rundownPlaylistId)
+
+ return ServerClientAPI.runUserActionInLogForPlaylistOnWorker(
+ this.context.getMethodContext(connection),
+ event,
+ getCurrentTime(),
+ playlist._id,
+ () => {
+ check(playlist._id, String)
+ check(timerIndex, Number)
+ check(time, Number)
+ check(paused, Match.Optional(Boolean))
+ },
+ StudioJobs.TTimerSetProjectedTime,
+ {
+ playlistId: playlist._id,
+ timerIndex,
+ time,
+ paused: !!paused,
+ }
+ )
+ }
+
+ async tTimerSetProjectedDuration(
+ connection: Meteor.Connection,
+ event: string,
+ rundownPlaylistId: RundownPlaylistId,
+ timerIndex: RundownTTimerIndex,
+ duration: number,
+ paused?: boolean
+ ): Promise> {
+ const playlist = await this.findPlaylist(rundownPlaylistId)
+
+ return ServerClientAPI.runUserActionInLogForPlaylistOnWorker(
+ this.context.getMethodContext(connection),
+ event,
+ getCurrentTime(),
+ playlist._id,
+ () => {
+ check(playlist._id, String)
+ check(timerIndex, Number)
+ check(duration, Number)
+ check(paused, Match.Optional(Boolean))
+ },
+ StudioJobs.TTimerSetProjectedDuration,
+ {
+ playlistId: playlist._id,
+ timerIndex,
+ duration,
+ paused: !!paused,
+ }
+ )
+ }
}
class PlaylistsAPIFactory implements APIFactory {
@@ -724,7 +989,9 @@ export function registerRoutes(registerRoute: APIRegisterHook)
'post',
'/playlists/:playlistId/execute-adlib',
new Map([
+ [400, []],
[404, [UserErrorMessage.RundownPlaylistNotFound]],
+ [409, [UserErrorMessage.ValidationFailed]],
[412, [UserErrorMessage.InactiveRundown, UserErrorMessage.NoCurrentPart, UserErrorMessage.AdlibNotFound]],
]),
playlistsAPIFactory,
@@ -760,7 +1027,9 @@ export function registerRoutes(registerRoute: APIRegisterHook)
'post',
'/playlists/:playlistId/execute-bucket-adlib',
new Map([
+ [400, []],
[404, [UserErrorMessage.RundownPlaylistNotFound]],
+ [409, [UserErrorMessage.ValidationFailed]],
[
412,
[
@@ -999,4 +1268,203 @@ export function registerRoutes(registerRoute: APIRegisterHook)
return await serverAPI.recallStickyPiece(connection, event, playlistId, sourceLayerId)
}
)
+
+ registerRoute<
+ { playlistId: string; timerIndex: string },
+ { duration: number; stopAtZero?: boolean; startPaused?: boolean },
+ void
+ >(
+ 'post',
+ '/playlists/:playlistId/t-timers/:timerIndex/countdown',
+ new Map([[404, [UserErrorMessage.RundownPlaylistNotFound]]]),
+ playlistsAPIFactory,
+ async (serverAPI, connection, event, params, body) => {
+ const rundownPlaylistId = protectString(params.playlistId)
+ const timerIndex = parseTimerIndex(params.timerIndex)
+ logger.info(`API POST: t-timer countdown ${rundownPlaylistId} ${timerIndex}`)
+
+ check(rundownPlaylistId, String)
+ check(timerIndex, Number)
+ return await serverAPI.tTimerStartCountdown(
+ connection,
+ event,
+ rundownPlaylistId,
+ timerIndex,
+ body.duration,
+ body.stopAtZero,
+ body.startPaused
+ )
+ }
+ )
+
+ registerRoute<{ playlistId: string; timerIndex: string }, { startPaused?: boolean }, void>(
+ 'post',
+ '/playlists/:playlistId/t-timers/:timerIndex/free-run',
+ new Map([[404, [UserErrorMessage.RundownPlaylistNotFound]]]),
+ playlistsAPIFactory,
+ async (serverAPI, connection, event, params, body) => {
+ const rundownPlaylistId = protectString(params.playlistId)
+ const timerIndex = parseTimerIndex(params.timerIndex)
+ logger.info(`API POST: t-timer free-run ${rundownPlaylistId} ${timerIndex}`)
+
+ check(rundownPlaylistId, String)
+ check(timerIndex, Number)
+ return await serverAPI.tTimerStartFreeRun(
+ connection,
+ event,
+ rundownPlaylistId,
+ timerIndex,
+ body.startPaused
+ )
+ }
+ )
+
+ registerRoute<{ playlistId: string; timerIndex: string }, never, void>(
+ 'post',
+ '/playlists/:playlistId/t-timers/:timerIndex/pause',
+ new Map([[404, [UserErrorMessage.RundownPlaylistNotFound]]]),
+ playlistsAPIFactory,
+ async (serverAPI, connection, event, params, _) => {
+ const rundownPlaylistId = protectString(params.playlistId)
+ const timerIndex = parseTimerIndex(params.timerIndex)
+ logger.info(`API POST: t-timer pause ${rundownPlaylistId} ${timerIndex}`)
+
+ check(rundownPlaylistId, String)
+ check(timerIndex, Number)
+ return await serverAPI.tTimerPause(connection, event, rundownPlaylistId, timerIndex)
+ }
+ )
+
+ registerRoute<{ playlistId: string; timerIndex: string }, never, void>(
+ 'post',
+ '/playlists/:playlistId/t-timers/:timerIndex/resume',
+ new Map([[404, [UserErrorMessage.RundownPlaylistNotFound]]]),
+ playlistsAPIFactory,
+ async (serverAPI, connection, event, params, _) => {
+ const rundownPlaylistId = protectString(params.playlistId)
+ const timerIndex = parseTimerIndex(params.timerIndex)
+ logger.info(`API POST: t-timer resume ${rundownPlaylistId} ${timerIndex}`)
+
+ check(rundownPlaylistId, String)
+ check(timerIndex, Number)
+ return await serverAPI.tTimerResume(connection, event, rundownPlaylistId, timerIndex)
+ }
+ )
+
+ registerRoute<{ playlistId: string; timerIndex: string }, never, void>(
+ 'post',
+ '/playlists/:playlistId/t-timers/:timerIndex/restart',
+ new Map([[404, [UserErrorMessage.RundownPlaylistNotFound]]]),
+ playlistsAPIFactory,
+ async (serverAPI, connection, event, params, _) => {
+ const rundownPlaylistId = protectString(params.playlistId)
+ const timerIndex = parseTimerIndex(params.timerIndex)
+ logger.info(`API POST: t-timer restart ${rundownPlaylistId} ${timerIndex}`)
+
+ check(rundownPlaylistId, String)
+ check(timerIndex, Number)
+ return await serverAPI.tTimerRestart(connection, event, rundownPlaylistId, timerIndex)
+ }
+ )
+
+ registerRoute<{ playlistId: string; timerIndex: string }, never, void>(
+ 'post',
+ '/playlists/:playlistId/t-timers/:timerIndex/projected/clear',
+ new Map([[404, [UserErrorMessage.RundownPlaylistNotFound]]]),
+ playlistsAPIFactory,
+ async (serverAPI, connection, event, params, _) => {
+ const rundownPlaylistId = protectString(params.playlistId)
+ const timerIndex = parseTimerIndex(params.timerIndex)
+ logger.info(`API POST: t-timer projected clear ${rundownPlaylistId} ${timerIndex}`)
+
+ check(rundownPlaylistId, String)
+ check(timerIndex, Number)
+ return await serverAPI.tTimerClearProjected(connection, event, rundownPlaylistId, timerIndex)
+ }
+ )
+
+ registerRoute<{ playlistId: string; timerIndex: string }, { partId?: string; externalId?: string }, void>(
+ 'post',
+ '/playlists/:playlistId/t-timers/:timerIndex/projected/anchor-part',
+ new Map([[404, [UserErrorMessage.RundownPlaylistNotFound]]]),
+ playlistsAPIFactory,
+ async (serverAPI, connection, event, params, body) => {
+ const rundownPlaylistId = protectString(params.playlistId)
+ const timerIndex = parseTimerIndex(params.timerIndex)
+ logger.info(`API POST: t-timer projected anchor-part ${rundownPlaylistId} ${timerIndex}`)
+
+ check(rundownPlaylistId, String)
+ check(timerIndex, Number)
+ check(body.partId, Match.Optional(String))
+ check(body.externalId, Match.Optional(String))
+
+ if (!body.partId && !body.externalId) {
+ throw new Meteor.Error(400, `Must provide either 'partId' or 'externalId'`)
+ }
+
+ const partId = body.partId ? protectString(body.partId) : undefined
+ const externalId = body.externalId
+
+ return await serverAPI.tTimerSetProjectedAnchorPart(
+ connection,
+ event,
+ rundownPlaylistId,
+ timerIndex,
+ partId,
+ externalId
+ )
+ }
+ )
+
+ registerRoute<{ playlistId: string; timerIndex: string }, { time: number; paused?: boolean }, void>(
+ 'post',
+ '/playlists/:playlistId/t-timers/:timerIndex/projected/time',
+ new Map([[404, [UserErrorMessage.RundownPlaylistNotFound]]]),
+ playlistsAPIFactory,
+ async (serverAPI, connection, event, params, body) => {
+ const rundownPlaylistId = protectString(params.playlistId)
+ const timerIndex = parseTimerIndex(params.timerIndex)
+ logger.info(`API POST: t-timer projected time ${rundownPlaylistId} ${timerIndex}`)
+
+ check(rundownPlaylistId, String)
+ check(timerIndex, Number)
+ check(body.time, Number)
+ check(body.paused, Match.Optional(Boolean))
+
+ return await serverAPI.tTimerSetProjectedTime(
+ connection,
+ event,
+ rundownPlaylistId,
+ timerIndex,
+ body.time,
+ body.paused
+ )
+ }
+ )
+
+ registerRoute<{ playlistId: string; timerIndex: string }, { duration: number; paused?: boolean }, void>(
+ 'post',
+ '/playlists/:playlistId/t-timers/:timerIndex/projected/duration',
+ new Map([[404, [UserErrorMessage.RundownPlaylistNotFound]]]),
+ playlistsAPIFactory,
+ async (serverAPI, connection, event, params, body) => {
+ const rundownPlaylistId = protectString(params.playlistId)
+ const timerIndex = parseTimerIndex(params.timerIndex)
+ logger.info(`API POST: t-timer projected duration ${rundownPlaylistId} ${timerIndex}`)
+
+ check(rundownPlaylistId, String)
+ check(timerIndex, Number)
+ check(body.duration, Number)
+ check(body.paused, Match.Optional(Boolean))
+
+ return await serverAPI.tTimerSetProjectedDuration(
+ connection,
+ event,
+ rundownPlaylistId,
+ timerIndex,
+ body.duration,
+ body.paused
+ )
+ }
+ )
}
diff --git a/meteor/server/api/rest/v1/showstyles.ts b/meteor/server/api/rest/v1/showstyles.ts
index 9c434b6ac05..08a98690230 100644
--- a/meteor/server/api/rest/v1/showstyles.ts
+++ b/meteor/server/api/rest/v1/showstyles.ts
@@ -23,7 +23,7 @@ import {
validateAPIBlueprintConfigForShowStyle,
} from './typeConversion'
import { Rundown } from '@sofie-automation/corelib/dist/dataModel/Rundown'
-import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import { runUpgradeForShowStyleBase, validateConfigForShowStyleBase } from '../../../migration/upgrades'
import { DBShowStyleVariant } from '@sofie-automation/corelib/dist/dataModel/ShowStyleVariant'
import { assertNever } from '@sofie-automation/corelib/dist/lib'
diff --git a/meteor/server/api/rest/v1/studios.ts b/meteor/server/api/rest/v1/studios.ts
index be8fd376423..c4325e13e73 100644
--- a/meteor/server/api/rest/v1/studios.ts
+++ b/meteor/server/api/rest/v1/studios.ts
@@ -10,7 +10,7 @@ import { ClientAPI } from '@sofie-automation/meteor-lib/dist/api/client'
import { PeripheralDevices, RundownPlaylists, Studios } from '../../../collections'
import { APIStudioFrom, studioFrom, validateAPIBlueprintConfigForStudio } from './typeConversion'
import { runUpgradeForStudio, updateStudioBaseline, validateConfigForStudio } from '../../../migration/upgrades'
-import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import { ServerClientAPI } from '../../client'
import { assertNever, literal } from '@sofie-automation/corelib/dist/lib'
import { getCurrentTime } from '../../../lib/lib'
diff --git a/meteor/server/api/rest/v1/typeConversion.ts b/meteor/server/api/rest/v1/typeConversion.ts
index 6d7f3b61888..4c98666cb8a 100644
--- a/meteor/server/api/rest/v1/typeConversion.ts
+++ b/meteor/server/api/rest/v1/typeConversion.ts
@@ -55,7 +55,7 @@ import {
DEFAULT_FALLBACK_PART_DURATION,
} from '@sofie-automation/shared-lib/dist/core/constants'
import { Bucket } from '@sofie-automation/corelib/dist/dataModel/Bucket'
-import { ForceQuickLoopAutoNext } from '@sofie-automation/shared-lib/dist/core/model/StudioSettings'
+import { ForceQuickLoopAutoNext, ShelfButtonSize } from '@sofie-automation/shared-lib/dist/core/model/StudioSettings'
import { PlaylistSnapshotOptions, SystemSnapshotOptions } from '@sofie-automation/meteor-lib/dist/api/shapshot'
/*
@@ -175,7 +175,7 @@ export async function APIShowStyleVariantFrom(
}
}
-export function sourceLayerFrom(apiSourceLayer: APISourceLayer): ISourceLayer {
+export function sourceLayerFrom(apiSourceLayer: APISourceLayer): Complete {
let layerType: SourceLayerType
switch (apiSourceLayer.layerType) {
case 'audio':
@@ -235,10 +235,21 @@ export function sourceLayerFrom(apiSourceLayer: APISourceLayer): ISourceLayer {
_rank: apiSourceLayer.rank,
type: layerType,
exclusiveGroup: apiSourceLayer.exclusiveGroup,
+ isRemoteInput: apiSourceLayer.isRemoteInput,
+ isGuestInput: apiSourceLayer.isGuestInput,
+ isClearable: apiSourceLayer.isClearable,
+ isSticky: apiSourceLayer.isSticky,
+ stickyOriginalOnly: apiSourceLayer.stickyOriginalOnly,
+ isQueueable: apiSourceLayer.isQueueable,
+ isHidden: apiSourceLayer.isHidden,
+ allowDisable: apiSourceLayer.allowDisable,
+ onPresenterScreen: apiSourceLayer.onPresenterScreen,
+ onListViewColumn: apiSourceLayer.onListViewColumn,
+ onListViewAdLibColumn: apiSourceLayer.onListViewAdLibColumn,
}
}
-export function APISourceLayerFrom(sourceLayer: ISourceLayer): APISourceLayer {
+export function APISourceLayerFrom(sourceLayer: ISourceLayer): Complete {
let layerType: APISourceLayer['layerType']
switch (sourceLayer.type) {
case SourceLayerType.AUDIO:
@@ -298,6 +309,17 @@ export function APISourceLayerFrom(sourceLayer: ISourceLayer): APISourceLayer {
rank: sourceLayer._rank,
layerType,
exclusiveGroup: sourceLayer.exclusiveGroup,
+ isRemoteInput: sourceLayer.isRemoteInput,
+ isGuestInput: sourceLayer.isGuestInput,
+ isClearable: sourceLayer.isClearable,
+ isSticky: sourceLayer.isSticky,
+ stickyOriginalOnly: sourceLayer.stickyOriginalOnly,
+ isQueueable: sourceLayer.isQueueable,
+ isHidden: sourceLayer.isHidden,
+ allowDisable: sourceLayer.allowDisable,
+ onPresenterScreen: sourceLayer.onPresenterScreen,
+ onListViewColumn: sourceLayer.onListViewColumn,
+ onListViewAdLibColumn: sourceLayer.onListViewAdLibColumn,
}
}
@@ -424,8 +446,18 @@ export function studioSettingsFrom(apiStudioSettings: APIStudioSettings): Comple
allowPieceDirectPlay: apiStudioSettings.allowPieceDirectPlay ?? true, // Backwards compatible
enableBuckets: apiStudioSettings.enableBuckets ?? true, // Backwards compatible
enableEvaluationForm: apiStudioSettings.enableEvaluationForm ?? true, // Backwards compatible
+ shelfAdlibButtonSize: apiStudioSettings.shelfAdlibButtonSize ?? ShelfButtonSize.LARGE,
mockPieceContentStatus: apiStudioSettings.mockPieceContentStatus,
rundownGlobalPiecesPrepareTime: apiStudioSettings.rundownGlobalPiecesPrepareTime,
+ autoRewindLeavingSegment: apiStudioSettings.autoRewindLeavingSegment,
+ disableBlurBorder: apiStudioSettings.disableBlurBorder,
+ allowGrabbingTimeline: apiStudioSettings.allowGrabbingTimeline,
+ useCountdownToFreezeFrame: apiStudioSettings.useCountdownToFreezeFrame,
+ // defaultShelfDisplayOptions is intentionally not exposed through the REST API
+ defaultShelfDisplayOptions: undefined,
+ defaultDisplayDuration: apiStudioSettings.defaultDisplayDuration,
+ defaultTimeScale: apiStudioSettings.defaultTimeScale,
+ followOnAirSegmentsHistory: apiStudioSettings.followOnAirSegmentsHistory,
}
}
@@ -452,8 +484,16 @@ export function APIStudioSettingsFrom(settings: IStudioSettings): Complete {
/** Max count of one type of items to include in the snapshot */
const LIMIT_COUNT = 500
@@ -343,6 +344,8 @@ async function createRundownPlaylistSnapshot(
playlistId: playlist._id,
full: !!options.withArchivedDocuments,
withTimeline: !!options.withTimeline,
+ snapshotId,
+ reason,
})
const coreResult = await queuedJob.complete
const coreSnapshot: CoreRundownPlaylistSnapshot = JSONBlobParse(coreResult.snapshotJson)
@@ -693,19 +696,63 @@ export async function storeSystemSnapshot(
return internalStoreSystemSnapshot(options, reason)
}
+/**
+ * Runs {@link StudioJobs.OnSystemSnapshotCreated} for each studio after a snapshot is stored.
+ *
+ * Studio-scoped system snapshots run one job; full-system snapshots run one job per studio in the snapshot.
+ * Waits for each blueprint hook to finish; hook failures are logged and do not fail snapshot storage.
+ */
+async function queueOnSystemSnapshotCreatedJobs(
+ storedId: SnapshotId,
+ reason: string,
+ type: BlueprintSnapshotType,
+ options: SystemSnapshotOptions,
+ studioIds: StudioId[]
+): Promise {
+ const fullSystem = !options.studioId
+
+ for (const studioId of studioIds) {
+ try {
+ const job = await QueueStudioJob(StudioJobs.OnSystemSnapshotCreated, studioId, {
+ snapshotId: storedId,
+ reason,
+ type,
+ options: {
+ studioId,
+ withDeviceSnapshots: options.withDeviceSnapshots,
+ fullSystem,
+ },
+ })
+ await job.complete
+ } catch (err) {
+ logger.error(
+ `OnSystemSnapshotCreated failed for snapshot ${storedId} (studio ${studioId}, withDeviceSnapshots=${options.withDeviceSnapshots}): ${stringifyError(err)}`
+ )
+ }
+ }
+}
+
/** Take and store a system snapshot. For internal use only, performs no access control. */
export async function internalStoreSystemSnapshot(options: SystemSnapshotOptions, reason: string): Promise {
check(options.studioId, Match.Optional(String))
const s = await createSystemSnapshot(options)
- return storeSnaphot(s, reason)
+ const storedId = await storeSnaphot(s, reason)
+
+ // Full-system snapshots: one blueprint hook job per studio in the snapshot
+ const studioIds = options.studioId ? [options.studioId] : s.studios.map((studio) => studio._id)
+ if (studioIds.length > 0) {
+ await queueOnSystemSnapshotCreatedJobs(storedId, reason, 'system', options, studioIds)
+ }
+
+ return storedId
}
export async function storeRundownPlaylistSnapshot(
playlist: VerifiedRundownPlaylistForUserAction,
options: PlaylistSnapshotOptions,
reason: string
): Promise {
- const s = await createRundownPlaylistSnapshot(playlist, options)
+ const s = await createRundownPlaylistSnapshot(playlist, options, reason)
return storeSnaphot(s, reason)
}
export async function internalStoreRundownPlaylistSnapshot(
@@ -713,7 +760,7 @@ export async function internalStoreRundownPlaylistSnapshot(
options: PlaylistSnapshotOptions,
reason: string
): Promise {
- const s = await createRundownPlaylistSnapshot(playlist, options)
+ const s = await createRundownPlaylistSnapshot(playlist, options, reason)
return storeSnaphot(s, reason)
}
export async function storeDebugSnapshot(
@@ -731,7 +778,13 @@ export async function storeDebugSnapshot(
assertConnectionHasOneOfPermissions(context.connection, ...PERMISSIONS_FOR_SNAPSHOT_MANAGEMENT)
const s = await createDebugSnapshot(studioId)
- return storeSnaphot(s, reason)
+ const storedId = await storeSnaphot(s, reason)
+
+ await queueOnSystemSnapshotCreatedJobs(storedId, reason, 'debug', { studioId, withDeviceSnapshots: true }, [
+ studioId,
+ ])
+
+ return storedId
}
export async function restoreSnapshot(
context: MethodContext,
diff --git a/meteor/server/api/studio/api.ts b/meteor/server/api/studio/api.ts
index 5e9a3d94c30..fda983b994a 100644
--- a/meteor/server/api/studio/api.ts
+++ b/meteor/server/api/studio/api.ts
@@ -25,9 +25,15 @@ import { MethodContextAPI, MethodContext } from '../methodContext'
import { wrapDefaultObject } from '@sofie-automation/corelib/dist/settings/objectWithOverrides'
import { PeripheralDeviceId, StudioId } from '@sofie-automation/corelib/dist/dataModel/Ids'
import { logger } from '../../logging'
-import { DEFAULT_MINIMUM_TAKE_SPAN } from '@sofie-automation/shared-lib/dist/core/constants'
+import {
+ DEFAULT_MINIMUM_TAKE_SPAN,
+ DEFAULT_DISPLAY_DURATION,
+ DEFAULT_SHELF_DISPLAY_OPTIONS,
+ DEFAULT_TIME_SCALE,
+} from '@sofie-automation/shared-lib/dist/core/constants'
import { UserPermissions } from '@sofie-automation/meteor-lib/dist/userPermissions'
import { assertConnectionHasOneOfPermissions } from '../../security/auth'
+import { ShelfButtonSize } from '@sofie-automation/shared-lib/dist/core/model/StudioSettings'
const PERMISSIONS_FOR_MANAGE_STUDIOS: Array = ['configure']
@@ -64,6 +70,15 @@ export async function insertStudioInner(newId?: StudioId): Promise {
allowPieceDirectPlay: false,
enableBuckets: true,
enableEvaluationForm: true,
+ shelfAdlibButtonSize: ShelfButtonSize.LARGE,
+ autoRewindLeavingSegment: true,
+ disableBlurBorder: false,
+ allowGrabbingTimeline: true,
+ useCountdownToFreezeFrame: true,
+ defaultShelfDisplayOptions: DEFAULT_SHELF_DISPLAY_OPTIONS,
+ defaultDisplayDuration: DEFAULT_DISPLAY_DURATION,
+ defaultTimeScale: DEFAULT_TIME_SCALE,
+ followOnAirSegmentsHistory: 0,
}),
_rundownVersionHash: '',
routeSetsWithOverrides: wrapDefaultObject({}),
diff --git a/meteor/server/api/studio/lib.ts b/meteor/server/api/studio/lib.ts
index dc0c161793d..b8e317c2885 100644
--- a/meteor/server/api/studio/lib.ts
+++ b/meteor/server/api/studio/lib.ts
@@ -1,7 +1,7 @@
import { RundownPlaylistId, StudioId } from '@sofie-automation/corelib/dist/dataModel/Ids'
import { PackageInfoDB } from '@sofie-automation/corelib/dist/dataModel/PackageInfos'
import { PeripheralDevice } from '@sofie-automation/corelib/dist/dataModel/PeripheralDevice'
-import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import { protectString } from '@sofie-automation/shared-lib/dist/lib/protectedString'
import { getCurrentTime } from '../../lib/lib'
import { ExpectedPackages, PackageInfos, PeripheralDevices, RundownPlaylists } from '../../collections'
diff --git a/meteor/server/api/systemTime/ntpTimeChecker.ts b/meteor/server/api/systemTime/ntpTimeChecker.ts
deleted file mode 100644
index 5d588eeea5d..00000000000
--- a/meteor/server/api/systemTime/ntpTimeChecker.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-import { Meteor } from 'meteor/meteor'
-import { Settings } from '../../Settings'
-import { StatusCode } from '@sofie-automation/blueprints-integration'
-import { setSystemStatus } from '../../systemStatus/systemStatus'
-import { logger } from '../../logging'
-import { determineDiffTime } from './systemTime'
-import { stringifyError } from '@sofie-automation/shared-lib/dist/lib/stringifyError'
-
-const CHECK_INTERVAL = 60 * 1000
-
-let failCount = 0
-
-Meteor.startup(() => {
- if (Settings.enableNTPTimeChecker) {
- // Periodically checks an NTP-server for the diff in time, and raises a warning if the diff is too large.
-
- const enableNTPTimeChecker = Settings.enableNTPTimeChecker
- Meteor.setInterval(() => {
- determineDiffTime({
- host: enableNTPTimeChecker.host,
- port: enableNTPTimeChecker.port,
- })
- .then((result) => {
- failCount = 0
-
- // Note: Subtracting `mean` with `stdDev` is not really the right thing to do, but it helps avoiding warnings in bad network conditions...
- if (Math.abs(result.mean) - Math.abs(result.stdDev) > enableNTPTimeChecker.maxAllowedDiff) {
- logger.warn(`ntpTimeChecker: diff is ${result.mean} ms (stdDev=${result.stdDev})`)
-
- setSystemStatus('ntpTimeChecker', {
- statusCode: StatusCode.WARNING_MINOR,
- messages: [
- `Warning: The time of the server differs ${result.mean} ms from the NTP server (check the configuration of the OS that Sofie Core is running on)`,
- ],
- })
- } else {
- setSystemStatus('ntpTimeChecker', { statusCode: StatusCode.GOOD, messages: [] })
- }
- })
- .catch((err) => {
- logger.error(`Error in determineDiffTime: ${stringifyError(err)}`)
- failCount++
- if (failCount > 10) {
- setSystemStatus('ntpTimeChecker', {
- statusCode: StatusCode.WARNING_MINOR,
- messages: [`Warning: Unable to get the NTP time from the server. Error: ${err}`],
- })
- }
- })
- }, CHECK_INTERVAL)
-
- setSystemStatus('ntpTimeChecker', { statusCode: StatusCode.GOOD, messages: [] })
- }
-})
diff --git a/meteor/server/api/userActions.ts b/meteor/server/api/userActions.ts
index ef467b48c60..545ddfb74e2 100644
--- a/meteor/server/api/userActions.ts
+++ b/meteor/server/api/userActions.ts
@@ -43,7 +43,7 @@ import {
import { NrcsIngestDataCache, Parts, Pieces, Rundowns } from '../collections'
import { NrcsIngestCacheType } from '@sofie-automation/corelib/dist/dataModel/NrcsIngestDataCache'
import { verifyHashedToken } from './singleUseTokens'
-import { QuickLoopMarker } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import { QuickLoopMarker } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import { runIngestOperation } from './ingest/lib'
import { IngestJobs } from '@sofie-automation/corelib/dist/worker/ingest'
import { UserPermissions } from '@sofie-automation/meteor-lib/dist/userPermissions'
diff --git a/meteor/server/collections/rundown.ts b/meteor/server/collections/rundown.ts
index c084b62c41e..c3fb4e1d174 100644
--- a/meteor/server/collections/rundown.ts
+++ b/meteor/server/collections/rundown.ts
@@ -9,12 +9,12 @@ import { DBRundown } from '@sofie-automation/corelib/dist/dataModel/Rundown'
import { RundownBaselineAdLibAction } from '@sofie-automation/corelib/dist/dataModel/RundownBaselineAdLibAction'
import { RundownBaselineAdLibItem } from '@sofie-automation/corelib/dist/dataModel/RundownBaselineAdLibPiece'
import { RundownBaselineObj } from '@sofie-automation/corelib/dist/dataModel/RundownBaselineObj'
-import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
+import { PartInstance } from '@sofie-automation/corelib/dist/dataModel/PartInstance'
import { DBPart } from '@sofie-automation/corelib/dist/dataModel/Part'
import { DBSegment } from '@sofie-automation/corelib/dist/dataModel/Segment'
import { createAsyncOnlyReadOnlyMongoCollection } from './collection'
import { registerIndex } from './indices'
-import { PartInstance } from '@sofie-automation/corelib/dist/dataModel/PartInstance'
export const AdLibActions = createAsyncOnlyReadOnlyMongoCollection(CollectionName.AdLibActions)
registerIndex(AdLibActions, {
@@ -68,11 +68,10 @@ registerIndex(PartInstances, {
})
registerIndex(PartInstances, {
rundownId: 1,
- // @ts-expect-error deep property
'part._id': 1,
takeCount: 1,
reset: 1,
-})
+} as any)
export const Parts = createAsyncOnlyReadOnlyMongoCollection(CollectionName.Parts)
registerIndex(Parts, {
diff --git a/meteor/server/coreSystem/index.ts b/meteor/server/coreSystem/index.ts
index f5dadbb8d24..b566d743200 100644
--- a/meteor/server/coreSystem/index.ts
+++ b/meteor/server/coreSystem/index.ts
@@ -2,6 +2,11 @@ import { SYSTEM_ID, GENESIS_SYSTEM_VERSION } from '@sofie-automation/meteor-lib/
import { parseVersion } from '../systemStatus/semverUtils'
import { getCurrentTime } from '../lib/lib'
import { stringifyError } from '@sofie-automation/shared-lib/dist/lib/stringifyError'
+import {
+ DEFAULT_MAXIMUM_DATA_AGE,
+ DEFAULT_CONFIRM_KEY_CODE,
+ DEFAULT_POISON_KEY,
+} from '@sofie-automation/shared-lib/dist/core/constants'
import { Meteor } from 'meteor/meteor'
import { prepareMigration, runMigration } from '../migration/databaseMigration'
import { CURRENT_SYSTEM_VERSION } from '../migration/currentSystemVersion'
@@ -18,6 +23,8 @@ import { checkDatabaseVersions } from './checkDatabaseVersions'
import PLazy from 'p-lazy'
import { getCoreSystemAsync } from './collection'
import { wrapDefaultObject } from '@sofie-automation/corelib/dist/settings/objectWithOverrides'
+const mosPkgJson = require('@mos-connection/helper/package.json')
+const superTimelinePkgJson = require('superfly-timeline/package.json')
export { PackageInfo }
@@ -77,6 +84,9 @@ async function initializeCoreSystem() {
heading: '',
message: '',
},
+ maximumDataAge: DEFAULT_MAXIMUM_DATA_AGE,
+ confirmKeyCode: DEFAULT_CONFIRM_KEY_CODE,
+ poisonKey: DEFAULT_POISON_KEY,
}),
lastBlueprintConfig: undefined,
})
@@ -125,30 +135,10 @@ function onCoreSystemChanged() {
export const RelevantSystemVersions = PLazy.from(async () => {
const versions: { [name: string]: string } = {}
- const dependencies: any = PackageInfo.dependencies
- if (dependencies) {
- const libNames: string[] = ['@mos-connection/helper', 'superfly-timeline']
-
- const getRealVersion = async (name: string, fallback: string): Promise => {
- try {
- const pkgInfo = require(name + '/package.json')
- return pkgInfo.version
- } catch (e) {
- logger.warn(`Failed to read version of package "${name}": ${stringifyError(e)}`)
- return parseVersion(fallback)
- }
- }
-
- await Promise.all([
- ...libNames.map(async (name) => {
- versions[name] = await getRealVersion(name, dependencies[name])
- }),
- ])
- versions['core'] = PackageInfo.versionExtended || PackageInfo.version // package version
- versions['timeline-state-resolver-types'] = TMP_TSR_VERSION
- } else {
- logger.error(`Core package dependencies missing`)
- }
+ versions['@mos-connection/helper'] = mosPkgJson.version
+ versions['superfly-timeline'] = superTimelinePkgJson.version
+ versions['core'] = PackageInfo.versionExtended || PackageInfo.version // package version
+ versions['timeline-state-resolver-types'] = TMP_TSR_VERSION
return versions
})
diff --git a/meteor/server/cronjobs.ts b/meteor/server/cronjobs.ts
index eba5011a248..e45704cbaef 100644
--- a/meteor/server/cronjobs.ts
+++ b/meteor/server/cronjobs.ts
@@ -26,7 +26,7 @@ import {
translateMessage,
} from '@sofie-automation/corelib/dist/TranslatableMessage'
import { applyAndValidateOverrides } from '@sofie-automation/corelib/dist/settings/objectWithOverrides'
-import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import { StudioId } from '@sofie-automation/corelib/dist/dataModel/Ids'
const lowPrioFcn = (fcn: () => any) => {
diff --git a/meteor/server/lib/rest/v1/ingest.ts b/meteor/server/lib/rest/v1/ingest.ts
index 8924b95be58..b4c94148bb7 100644
--- a/meteor/server/lib/rest/v1/ingest.ts
+++ b/meteor/server/lib/rest/v1/ingest.ts
@@ -250,6 +250,13 @@ export type RundownResponse = {
playlistId: string
playlistExternalId?: string
name: string
+ type?: string
+ timing?: {
+ type: string
+ expectedStart?: number
+ expectedDuration?: number
+ expectedEnd?: number
+ }
}
export type SegmentResponse = {
@@ -259,6 +266,10 @@ export type SegmentResponse = {
name: string
rank: number
isHidden?: boolean
+ timing?: {
+ budgetDuration?: number
+ countdownType?: string
+ }
}
export type PartResponse = {
diff --git a/meteor/server/lib/rest/v1/playlists.ts b/meteor/server/lib/rest/v1/playlists.ts
index 778ff2b04d2..c50c53a82dc 100644
--- a/meteor/server/lib/rest/v1/playlists.ts
+++ b/meteor/server/lib/rest/v1/playlists.ts
@@ -12,6 +12,7 @@ import {
SegmentId,
} from '@sofie-automation/corelib/dist/dataModel/Ids'
import { QueueNextSegmentResult, TakeNextPartResult } from '@sofie-automation/corelib/dist/worker/studio'
+import { RundownTTimerIndex } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/TTimers'
import { Meteor } from 'meteor/meteor'
/* *************************************************************************
@@ -271,4 +272,146 @@ export interface PlaylistsRestAPI {
rundownPlaylistId: RundownPlaylistId,
sourceLayerId: string
): Promise>
+ /**
+ * Configure a T-timer as a countdown.
+ * @param connection Connection data including client and header details
+ * @param event User event string
+ * @param rundownPlaylistId Target Playlist.
+ * @param timerIndex Index of the timer (1-3).
+ * @param duration Duration in seconds.
+ * @param stopAtZero Whether to stop at zero.
+ * @param startPaused Whether to start paused.
+ */
+ tTimerStartCountdown(
+ connection: Meteor.Connection,
+ event: string,
+ rundownPlaylistId: RundownPlaylistId,
+ timerIndex: RundownTTimerIndex,
+ duration: number,
+ stopAtZero?: boolean,
+ startPaused?: boolean
+ ): Promise>
+
+ /**
+ * Configure a T-timer as a free-running timer.
+ * @param connection Connection data including client and header details
+ * @param event User event string
+ * @param rundownPlaylistId Target Playlist.
+ * @param timerIndex Index of the timer (1-3).
+ * @param startPaused Whether to start paused.
+ */
+ tTimerStartFreeRun(
+ connection: Meteor.Connection,
+ event: string,
+ rundownPlaylistId: RundownPlaylistId,
+ timerIndex: RundownTTimerIndex,
+ startPaused?: boolean
+ ): Promise>
+ /**
+ * Pause a T-timer.
+ * @param connection Connection data including client and header details
+ * @param event User event string
+ * @param rundownPlaylistId Target Playlist.
+ * @param timerIndex Index of the timer (1-3).
+ */
+ tTimerPause(
+ connection: Meteor.Connection,
+ event: string,
+ rundownPlaylistId: RundownPlaylistId,
+ timerIndex: RundownTTimerIndex
+ ): Promise>
+ /**
+ * Resume a T-timer.
+ * @param connection Connection data including client and header details
+ * @param event User event string
+ * @param rundownPlaylistId Target Playlist.
+ * @param timerIndex Index of the timer (1-3).
+ */
+ tTimerResume(
+ connection: Meteor.Connection,
+ event: string,
+ rundownPlaylistId: RundownPlaylistId,
+ timerIndex: RundownTTimerIndex
+ ): Promise>
+ /**
+ * Restart a T-timer.
+ * @param connection Connection data including client and header details
+ * @param event User event string
+ * @param rundownPlaylistId Target Playlist.
+ * @param timerIndex Index of the timer (1-3).
+ */
+ tTimerRestart(
+ connection: Meteor.Connection,
+ event: string,
+ rundownPlaylistId: RundownPlaylistId,
+ timerIndex: RundownTTimerIndex
+ ): Promise>
+
+ /**
+ * Clear any projection state (manual or anchor-based) for a T-timer.
+ * @param connection Connection data including client and header details
+ * @param event User event string
+ * @param rundownPlaylistId Target Playlist.
+ * @param timerIndex Index of the timer (1-3).
+ */
+ tTimerClearProjected(
+ connection: Meteor.Connection,
+ event: string,
+ rundownPlaylistId: RundownPlaylistId,
+ timerIndex: RundownTTimerIndex
+ ): Promise>
+
+ /**
+ * Set the anchor part for automatic projection calculation.
+ * @param connection Connection data including client and header details
+ * @param event User event string
+ * @param rundownPlaylistId Target Playlist.
+ * @param timerIndex Index of the timer (1-3).
+ * @param partId Part id (internal) or part externalId (will be resolved by the worker)
+ * @param externalId Part externalId (will be resolved by the worker)
+ */
+ tTimerSetProjectedAnchorPart(
+ connection: Meteor.Connection,
+ event: string,
+ rundownPlaylistId: RundownPlaylistId,
+ timerIndex: RundownTTimerIndex,
+ partId?: PartId,
+ externalId?: string
+ ): Promise>
+
+ /**
+ * Set the projection as an absolute timestamp.
+ * @param connection Connection data including client and header details
+ * @param event User event string
+ * @param rundownPlaylistId Target Playlist.
+ * @param timerIndex Index of the timer (1-3).
+ * @param time Unix timestamp (ms)
+ * @param paused If true, the projection is treated as paused (doesn't count down with time)
+ */
+ tTimerSetProjectedTime(
+ connection: Meteor.Connection,
+ event: string,
+ rundownPlaylistId: RundownPlaylistId,
+ timerIndex: RundownTTimerIndex,
+ time: number,
+ paused?: boolean
+ ): Promise>
+
+ /**
+ * Set the projection as a duration from now.
+ * @param connection Connection data including client and header details
+ * @param event User event string
+ * @param rundownPlaylistId Target Playlist.
+ * @param timerIndex Index of the timer (1-3).
+ * @param duration Duration in milliseconds.
+ * @param paused If true, the projection is treated as paused (doesn't count down with time)
+ */
+ tTimerSetProjectedDuration(
+ connection: Meteor.Connection,
+ event: string,
+ rundownPlaylistId: RundownPlaylistId,
+ timerIndex: RundownTTimerIndex,
+ duration: number,
+ paused?: boolean
+ ): Promise>
}
diff --git a/meteor/server/lib/rest/v1/showstyles.ts b/meteor/server/lib/rest/v1/showstyles.ts
index 1c9af76033c..598778ecd6f 100644
--- a/meteor/server/lib/rest/v1/showstyles.ts
+++ b/meteor/server/lib/rest/v1/showstyles.ts
@@ -254,4 +254,15 @@ export interface APISourceLayer {
| 'studio-screen'
| 'remote-speak'
exclusiveGroup?: string
+ isRemoteInput?: boolean
+ isGuestInput?: boolean
+ isClearable?: boolean
+ isSticky?: boolean
+ stickyOriginalOnly?: boolean
+ isQueueable?: boolean
+ isHidden?: boolean
+ allowDisable?: boolean
+ onPresenterScreen?: boolean
+ onListViewColumn?: boolean
+ onListViewAdLibColumn?: boolean
}
diff --git a/meteor/server/lib/rest/v1/studios.ts b/meteor/server/lib/rest/v1/studios.ts
index c94e9429624..6b3a2b4280a 100644
--- a/meteor/server/lib/rest/v1/studios.ts
+++ b/meteor/server/lib/rest/v1/studios.ts
@@ -1,6 +1,7 @@
import { ClientAPI } from '@sofie-automation/meteor-lib/dist/api/client'
import { PeripheralDeviceId, StudioId } from '@sofie-automation/corelib/dist/dataModel/Ids'
import { Meteor } from 'meteor/meteor'
+import { ShelfButtonSize } from '@sofie-automation/shared-lib/dist/core/model/StudioSettings'
/* *************************************************************************
This file contains types and interfaces that are used by the REST API.
@@ -223,6 +224,15 @@ export interface APIStudioSettings {
allowPieceDirectPlay?: boolean
enableBuckets?: boolean
enableEvaluationForm?: boolean
+ /** Default size of AdLib buttons in the mini shelf */
+ shelfAdlibButtonSize?: Exclude
mockPieceContentStatus?: boolean
rundownGlobalPiecesPrepareTime?: number
+ autoRewindLeavingSegment?: boolean
+ disableBlurBorder?: boolean
+ allowGrabbingTimeline?: boolean
+ useCountdownToFreezeFrame?: boolean
+ defaultDisplayDuration?: number
+ defaultTimeScale?: number
+ followOnAirSegmentsHistory?: number
}
diff --git a/meteor/server/migration/0_1_0.ts b/meteor/server/migration/0_1_0.ts
index 70449b205aa..6579ea032f4 100644
--- a/meteor/server/migration/0_1_0.ts
+++ b/meteor/server/migration/0_1_0.ts
@@ -6,6 +6,7 @@ import { wrapDefaultObject } from '@sofie-automation/corelib/dist/settings/objec
import { ShowStyleVariantId } from '@sofie-automation/corelib/dist/dataModel/Ids'
import { ShowStyleBases, ShowStyleVariants, Studios } from '../collections'
import { DEFAULT_MINIMUM_TAKE_SPAN } from '@sofie-automation/shared-lib/dist/core/constants'
+import { ShelfButtonSize } from '@sofie-automation/shared-lib/dist/core/model/StudioSettings'
/**
* This file contains system specific migration steps.
@@ -37,6 +38,7 @@ export const addSteps = addMigrationSteps('0.1.0', [
allowPieceDirectPlay: false,
enableBuckets: true,
enableEvaluationForm: true,
+ shelfAdlibButtonSize: ShelfButtonSize.LARGE,
}),
mappingsWithOverrides: wrapDefaultObject({}),
blueprintConfigWithOverrides: wrapDefaultObject({}),
diff --git a/meteor/server/migration/1_40_0.ts b/meteor/server/migration/1_40_0.ts
index c418d34278c..664d4fc0f68 100644
--- a/meteor/server/migration/1_40_0.ts
+++ b/meteor/server/migration/1_40_0.ts
@@ -1,5 +1,5 @@
+import { Meteor } from 'meteor/meteor'
import { addMigrationSteps } from './databaseMigration'
-import { Settings } from '../Settings'
import { Studios } from '../collections'
// Release 40 (Skipped)
@@ -36,7 +36,7 @@ interface ISettingsOld {
maxAllowedDiff: number
}
}
-const OldSettings = Settings as Partial
+const OldSettings = (Meteor.settings.public ?? {}) as Partial
const oldFrameRate = OldSettings.frameRate ?? 25
export const addSteps = addMigrationSteps('1.40.0', [
diff --git a/meteor/server/migration/X_X_X.ts b/meteor/server/migration/X_X_X.ts
index 238ea09fadd..f67dc3b7054 100644
--- a/meteor/server/migration/X_X_X.ts
+++ b/meteor/server/migration/X_X_X.ts
@@ -1,7 +1,8 @@
import { addMigrationSteps } from './databaseMigration'
import { CURRENT_SYSTEM_VERSION } from './currentSystemVersion'
-import { RundownPlaylists } from '../collections'
+import { RundownPlaylists, Segments, Studios } from '../collections'
import { ContainerIdsToObjectWithOverridesMigrationStep } from './steps/X_X_X/ContainerIdsToObjectWithOverridesMigrationStep'
+import { ShelfButtonSize } from '@sofie-automation/shared-lib/dist/core/model/StudioSettings'
/*
* **************************************************************************************
@@ -83,5 +84,69 @@ export const addSteps = addMigrationSteps(CURRENT_SYSTEM_VERSION, [
)
},
},
+ {
+ id: `studios settings create default shelfAdlibButtonSize=large`,
+ canBeRunAutomatically: true,
+ validate: async () => {
+ const studios = await Studios.findFetchAsync({
+ 'settingsWithOverrides.defaults.shelfAdlibButtonSize': { $exists: false },
+ })
+
+ if (studios.length > 0) return `Some studios are missing settings default shelfAdlibButtonSize`
+ return false
+ },
+ migrate: async () => {
+ const studios = await Studios.findFetchAsync({
+ 'settingsWithOverrides.defaults.shelfAdlibButtonSize': { $exists: false },
+ })
+
+ for (const studio of studios) {
+ await Studios.updateAsync(studio._id, {
+ $set: {
+ 'settingsWithOverrides.defaults.shelfAdlibButtonSize': ShelfButtonSize.LARGE,
+ },
+ })
+ }
+ },
+ },
+ {
+ id: `segments migrate showShelf to displayMinishelf`,
+ canBeRunAutomatically: true,
+ validate: async () => {
+ const count = await Segments.countDocuments({
+ showShelf: { $exists: true },
+ })
+ if (count > 0) return `There are ${count} Segments with legacy showShelf`
+ return false
+ },
+ migrate: async () => {
+ // showShelf: true => displayMinishelf: inherit (if missing)
+ await Segments.mutableCollection.updateAsync(
+ {
+ showShelf: true,
+ displayMinishelf: { $exists: false },
+ },
+ {
+ $set: {
+ displayMinishelf: ShelfButtonSize.INHERIT,
+ },
+ },
+ { multi: true }
+ )
+
+ // Always remove legacy field
+ await Segments.mutableCollection.updateAsync(
+ {
+ showShelf: { $exists: true },
+ },
+ {
+ $unset: {
+ showShelf: 1,
+ },
+ },
+ { multi: true }
+ )
+ },
+ },
// Add your migration here
])
diff --git a/meteor/server/migration/upgrades/system.ts b/meteor/server/migration/upgrades/system.ts
index 15ae90bea81..3db08bec2ef 100644
--- a/meteor/server/migration/upgrades/system.ts
+++ b/meteor/server/migration/upgrades/system.ts
@@ -14,6 +14,11 @@ import { CoreSystemId } from '@sofie-automation/corelib/dist/dataModel/Ids'
import { DEFAULT_CORE_TRIGGERS } from './defaultSystemActionTriggers'
import { protectString } from '@sofie-automation/corelib/dist/protectedString'
import { ICoreSystemSettings } from '@sofie-automation/shared-lib/dist/core/model/CoreSystemSettings'
+import {
+ DEFAULT_MAXIMUM_DATA_AGE,
+ DEFAULT_CONFIRM_KEY_CODE,
+ DEFAULT_POISON_KEY,
+} from '@sofie-automation/shared-lib/dist/core/constants'
export async function runUpgradeForCoreSystem(coreSystemId: CoreSystemId): Promise {
logger.info(`Running upgrade for CoreSystem`)
@@ -102,6 +107,9 @@ function generateDefaultSystemConfig(): BlueprintResultApplySystemConfig {
heading: '',
message: '',
},
+ maximumDataAge: DEFAULT_MAXIMUM_DATA_AGE,
+ confirmKeyCode: DEFAULT_CONFIRM_KEY_CODE,
+ poisonKey: DEFAULT_POISON_KEY,
},
triggeredActions: Object.values(DEFAULT_CORE_TRIGGERS),
}
diff --git a/meteor/server/publications/_publications.ts b/meteor/server/publications/_publications.ts
index 64a027a2791..501d8fa4d15 100644
--- a/meteor/server/publications/_publications.ts
+++ b/meteor/server/publications/_publications.ts
@@ -4,6 +4,7 @@ import './lib/lib'
import './buckets'
import './blueprintUpgradeStatus/publication'
import './ingestStatus/publication'
+import './externalEventSubscriptions'
import './packageManager/expectedPackages/publication'
import './packageManager/packageContainers'
import './packageManager/playoutContext'
diff --git a/meteor/server/publications/externalEventSubscriptions.ts b/meteor/server/publications/externalEventSubscriptions.ts
new file mode 100644
index 00000000000..acf8b14d559
--- /dev/null
+++ b/meteor/server/publications/externalEventSubscriptions.ts
@@ -0,0 +1,179 @@
+import { PeripheralDeviceId, StudioId } from '@sofie-automation/corelib/dist/dataModel/Ids'
+import { assertNever, getHash, literal } from '@sofie-automation/corelib/dist/lib'
+import { protectString } from '@sofie-automation/corelib/dist/protectedString'
+import { MongoFieldSpecifierOnesStrict } from '@sofie-automation/corelib/dist/mongo'
+import { DBRundown } from '@sofie-automation/corelib/dist/dataModel/Rundown'
+import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
+import { ReadonlyDeep } from 'type-fest'
+import {
+ CustomPublish,
+ CustomPublishCollection,
+ meteorCustomPublish,
+ setUpCollectionOptimizedObserver,
+ SetupObserversResult,
+ TriggerUpdate,
+} from '../lib/customPublication'
+import { logger } from '../logging'
+import { RundownPlaylists, Rundowns } from '../collections'
+import {
+ PeripheralDevicePubSub,
+ PeripheralDevicePubSubCollectionsNames,
+ ExternalEventSubscriptionDocument,
+ ExternalEventSubscriptionId,
+} from '@sofie-automation/shared-lib/dist/pubsub/peripheralDevice'
+import type { PeripheralDeviceExternalEvent } from '@sofie-automation/shared-lib/dist/peripheralDevice/externalEvents'
+import { checkAccessAndGetPeripheralDevice } from '../security/check'
+import { check } from '../lib/check'
+
+type RundownPlaylistFields = '_id' | 'activationId'
+const rundownPlaylistFieldSpecifier = literal<
+ MongoFieldSpecifierOnesStrict>
+>({
+ _id: 1,
+ activationId: 1,
+})
+
+type RundownFields = '_id' | 'playlistId' | 'externalEventSubscriptions'
+const rundownFieldSpecifier = literal>>({
+ _id: 1,
+ playlistId: 1,
+ externalEventSubscriptions: 1,
+})
+
+interface ExternalEventSubscriptionsArgs {
+ readonly studioId: StudioId
+ readonly type: PeripheralDeviceExternalEvent['type']
+}
+
+// eslint-disable-next-line @typescript-eslint/no-empty-object-type
+interface ExternalEventSubscriptionsState {}
+
+interface ExternalEventSubscriptionsUpdateProps {
+ invalidateAll: true
+}
+
+async function setupExternalEventSubscriptionsObservers(
+ args: ReadonlyDeep,
+ triggerUpdate: TriggerUpdate
+): Promise {
+ const trigger = () => triggerUpdate({ invalidateAll: true })
+
+ return [
+ // Observe active playlists in the studio — activation/deactivation changes which rundowns are in scope
+ RundownPlaylists.observeChanges(
+ { studioId: args.studioId },
+ { added: trigger, changed: trigger, removed: trigger },
+ { projection: rundownPlaylistFieldSpecifier }
+ ),
+ // Observe rundowns in the studio — react only when externalEventSubscriptions or playlistId changes
+ Rundowns.observeChanges(
+ { studioId: args.studioId },
+ { added: trigger, changed: trigger, removed: trigger },
+ { projection: rundownFieldSpecifier }
+ ),
+ ]
+}
+
+async function manipulateExternalEventSubscriptionsData(
+ args: ReadonlyDeep,
+ _state: Partial,
+ collection: CustomPublishCollection,
+ _updateProps: Partial> | undefined
+): Promise {
+ // Find all active playlists in the studio
+ const activePlaylists = (await RundownPlaylists.findFetchAsync(
+ { studioId: args.studioId, activationId: { $exists: true } },
+ { projection: rundownPlaylistFieldSpecifier }
+ )) as Pick[]
+ const activePlaylistIds = activePlaylists.map((p) => p._id)
+
+ // Find rundowns belonging to active playlists
+ const activeRundowns = (await Rundowns.findFetchAsync(
+ { studioId: args.studioId, playlistId: { $in: activePlaylistIds } },
+ { projection: rundownFieldSpecifier }
+ )) as Pick[]
+
+ // Build the set of valid IDs and the docs to upsert (filtered by type)
+ const validIds = new Set()
+ const subsToUpsert: ExternalEventSubscriptionDocument[] = []
+
+ for (const rundown of activeRundowns) {
+ for (const sub of rundown.externalEventSubscriptions ?? []) {
+ if (sub.type !== args.type) continue
+
+ switch (sub.type) {
+ case 'tsr': {
+ const id = protectString(
+ getHash(`tsr_${sub.deviceId}_${sub.deviceType}_${String(sub.event)}`)
+ )
+ validIds.add(id)
+ subsToUpsert.push({
+ _id: id,
+ type: 'tsr',
+ deviceId: sub.deviceId,
+ deviceType: sub.deviceType,
+ event: sub.event as string,
+ })
+ break
+ }
+ default:
+ assertNever(sub.type)
+ break
+ }
+ }
+ }
+
+ // Remove docs for subscriptions that are no longer active
+ collection.remove((doc) => !validIds.has(doc._id))
+
+ // Upsert each individual subscription doc
+ for (const sub of subsToUpsert) {
+ collection.replace(sub)
+ }
+}
+
+async function startOrJoinExternalEventSubscriptionsPublication(
+ pub: CustomPublish,
+ studioId: StudioId,
+ type: PeripheralDeviceExternalEvent['type']
+) {
+ await setUpCollectionOptimizedObserver<
+ ExternalEventSubscriptionDocument,
+ ExternalEventSubscriptionsArgs,
+ ExternalEventSubscriptionsState,
+ ExternalEventSubscriptionsUpdateProps
+ >(
+ `pub_${PeripheralDevicePubSub.externalEventSubscriptionsForDevice}_${studioId}_${type}`,
+ { studioId, type },
+ setupExternalEventSubscriptionsObservers,
+ manipulateExternalEventSubscriptionsData,
+ pub,
+ 100
+ )
+}
+
+meteorCustomPublish(
+ PeripheralDevicePubSub.externalEventSubscriptionsForDevice,
+ PeripheralDevicePubSubCollectionsNames.externalEventSubscriptions,
+ async function (
+ pub: CustomPublish,
+ type: PeripheralDeviceExternalEvent['type'],
+ deviceId: PeripheralDeviceId,
+ token: string | undefined
+ ) {
+ check(deviceId, String)
+ check(type, String)
+
+ const peripheralDevice = await checkAccessAndGetPeripheralDevice(deviceId, token, this)
+
+ const studioId = peripheralDevice.studioAndConfigId?.studioId
+ if (!studioId) {
+ logger.warn(
+ `Publication ${PeripheralDevicePubSub.externalEventSubscriptionsForDevice}: device ${deviceId} has no studio`
+ )
+ return
+ }
+
+ await startOrJoinExternalEventSubscriptionsPublication(pub, studioId, type)
+ }
+)
diff --git a/meteor/server/publications/ingestStatus/reactiveContentCache.ts b/meteor/server/publications/ingestStatus/reactiveContentCache.ts
index 87f50a691ac..d9f6b93dd8e 100644
--- a/meteor/server/publications/ingestStatus/reactiveContentCache.ts
+++ b/meteor/server/publications/ingestStatus/reactiveContentCache.ts
@@ -5,8 +5,8 @@ import type { MongoFieldSpecifierOnesStrict } from '@sofie-automation/corelib/di
import type { NrcsIngestDataCacheObj } from '@sofie-automation/corelib/dist/dataModel/NrcsIngestDataCache'
import type { RundownId } from '@sofie-automation/corelib/dist/dataModel/Ids'
import type { DBRundown } from '@sofie-automation/corelib/dist/dataModel/Rundown'
-import type { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
import { PartInstance } from '@sofie-automation/corelib/dist/dataModel/PartInstance'
+import type { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
export type PlaylistCompact = Pick<
DBRundownPlaylist,
diff --git a/meteor/server/publications/lib/lib.ts b/meteor/server/publications/lib/lib.ts
index 69a06ae2d71..62bb2aa2e42 100644
--- a/meteor/server/publications/lib/lib.ts
+++ b/meteor/server/publications/lib/lib.ts
@@ -72,7 +72,7 @@ export async function waitForAllObserversReady(
): Promise {
// Wait for all the promises to complete
// Future: could this fail faster by aborting the rest once the first fails?
- const results = await Promise.allSettled(observers)
+ const results = await Promise.allSettled(observers as Array>)
const allSuccessfull = results.filter(
(r): r is PromiseFulfilledResult => r.status === 'fulfilled'
)
diff --git a/meteor/server/publications/lib/quickLoop.ts b/meteor/server/publications/lib/quickLoop.ts
index 03e4aae1165..c04b589ccaf 100644
--- a/meteor/server/publications/lib/quickLoop.ts
+++ b/meteor/server/publications/lib/quickLoop.ts
@@ -3,7 +3,7 @@ import {
DBRundownPlaylist,
QuickLoopMarker,
QuickLoopMarkerType,
-} from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+} from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import { ForceQuickLoopAutoNext } from '@sofie-automation/shared-lib/dist/core/model/StudioSettings'
import { MarkerPosition, compareMarkerPositions } from '@sofie-automation/corelib/dist/playout/playlist'
import { ProtectedString, unprotectString } from '@sofie-automation/corelib/dist/protectedString'
diff --git a/meteor/server/publications/packageManager/expectedPackages/contentCache.ts b/meteor/server/publications/packageManager/expectedPackages/contentCache.ts
index 4d5a6533ed9..a60a66294a3 100644
--- a/meteor/server/publications/packageManager/expectedPackages/contentCache.ts
+++ b/meteor/server/publications/packageManager/expectedPackages/contentCache.ts
@@ -2,7 +2,7 @@ import { ReactiveCacheCollection } from '../../lib/ReactiveCacheCollection'
import { literal } from '@sofie-automation/corelib/dist/lib'
import { MongoFieldSpecifierOnesStrict } from '@sofie-automation/corelib/dist/mongo'
import { ExpectedPackageDB } from '@sofie-automation/corelib/dist/dataModel/ExpectedPackages'
-import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import { PieceInstance } from '@sofie-automation/corelib/dist/dataModel/PieceInstance'
export type RundownPlaylistCompact = Pick<
@@ -28,10 +28,11 @@ export const pieceInstanceFieldsSpecifier = literal
+export type ExpectedPackageDBCompact = Pick
export const expectedPackageDBFieldsSpecifier = literal>({
_id: 1,
+ rundownId: 1,
package: 1,
})
diff --git a/meteor/server/publications/packageManager/expectedPackages/generate.ts b/meteor/server/publications/packageManager/expectedPackages/generate.ts
index 203d4239ea9..326e15ce217 100644
--- a/meteor/server/publications/packageManager/expectedPackages/generate.ts
+++ b/meteor/server/publications/packageManager/expectedPackages/generate.ts
@@ -127,6 +127,7 @@ function generateExpectedPackageForDevice(
expectedPackage: {
...expectedPackage.package,
_id: expectedPackage._id,
+ rundownId: expectedPackage.rundownId ?? undefined,
sideEffect: packageSideEffect,
},
sources: combinedSources,
diff --git a/meteor/server/publications/packageManager/playoutContext.ts b/meteor/server/publications/packageManager/playoutContext.ts
index 99e22143fe5..bb3f5390a11 100644
--- a/meteor/server/publications/packageManager/playoutContext.ts
+++ b/meteor/server/publications/packageManager/playoutContext.ts
@@ -1,6 +1,6 @@
import { PeripheralDeviceId, StudioId } from '@sofie-automation/corelib/dist/dataModel/Ids'
import { DBRundown } from '@sofie-automation/corelib/dist/dataModel/Rundown'
-import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import { literal } from '@sofie-automation/corelib/dist/lib'
import { MongoFieldSpecifierOnesStrict } from '@sofie-automation/corelib/dist/mongo'
import { PackageManagerPlayoutContext } from '@sofie-automation/shared-lib/dist/package-manager/publications'
diff --git a/meteor/server/publications/partInstancesUI/publication.ts b/meteor/server/publications/partInstancesUI/publication.ts
index 5c30cea8a2c..464cc6cb51d 100644
--- a/meteor/server/publications/partInstancesUI/publication.ts
+++ b/meteor/server/publications/partInstancesUI/publication.ts
@@ -13,7 +13,7 @@ import { ContentCache, PartInstanceOmitedFields, createReactiveContentCache } fr
import { ReadonlyDeep } from 'type-fest'
import { RundownPlaylists } from '../../collections'
import { literal } from '@sofie-automation/corelib/dist/lib'
-import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import { MongoFieldSpecifierOnesStrict } from '@sofie-automation/corelib/dist/mongo'
import { RundownsObserver } from '../lib/rundownsObserver'
import { RundownContentObserver } from './rundownContentObserver'
diff --git a/meteor/server/publications/partInstancesUI/reactiveContentCache.ts b/meteor/server/publications/partInstancesUI/reactiveContentCache.ts
index 66e1e0658ed..34ce3e25427 100644
--- a/meteor/server/publications/partInstancesUI/reactiveContentCache.ts
+++ b/meteor/server/publications/partInstancesUI/reactiveContentCache.ts
@@ -2,7 +2,7 @@ import { DBSegment } from '@sofie-automation/corelib/dist/dataModel/Segment'
import { ReactiveCacheCollection } from '../lib/ReactiveCacheCollection'
import { literal } from '@sofie-automation/corelib/dist/lib'
import { MongoFieldSpecifierOnesStrict, MongoFieldSpecifierZeroes } from '@sofie-automation/corelib/dist/mongo'
-import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import { DBStudio, IStudioSettings } from '@sofie-automation/corelib/dist/dataModel/Studio'
import { DBPartInstance } from '@sofie-automation/corelib/dist/dataModel/PartInstance'
import { StudioId } from '@sofie-automation/corelib/dist/dataModel/Ids'
diff --git a/meteor/server/publications/partsUI/publication.ts b/meteor/server/publications/partsUI/publication.ts
index 868956828aa..8474450ecc5 100644
--- a/meteor/server/publications/partsUI/publication.ts
+++ b/meteor/server/publications/partsUI/publication.ts
@@ -14,7 +14,7 @@ import { ContentCache, PartOmitedFields, createReactiveContentCache } from './re
import { ReadonlyDeep } from 'type-fest'
import { RundownPlaylists } from '../../collections'
import { literal } from '@sofie-automation/corelib/dist/lib'
-import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import { MongoFieldSpecifierOnesStrict } from '@sofie-automation/corelib/dist/mongo'
import { RundownsObserver } from '../lib/rundownsObserver'
import { RundownContentObserver } from './rundownContentObserver'
diff --git a/meteor/server/publications/partsUI/reactiveContentCache.ts b/meteor/server/publications/partsUI/reactiveContentCache.ts
index 12d9423e8e4..74b34843abb 100644
--- a/meteor/server/publications/partsUI/reactiveContentCache.ts
+++ b/meteor/server/publications/partsUI/reactiveContentCache.ts
@@ -3,7 +3,7 @@ import { DBSegment } from '@sofie-automation/corelib/dist/dataModel/Segment'
import { ReactiveCacheCollection } from '../lib/ReactiveCacheCollection'
import { literal } from '@sofie-automation/corelib/dist/lib'
import { MongoFieldSpecifierOnesStrict, MongoFieldSpecifierZeroes } from '@sofie-automation/corelib/dist/mongo'
-import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import { DBStudio, IStudioSettings } from '@sofie-automation/corelib/dist/dataModel/Studio'
import { StudioId } from '@sofie-automation/corelib/dist/dataModel/Ids'
diff --git a/meteor/server/publications/pieceContentStatusUI/__tests__/checkPieceContentStatus.test.ts b/meteor/server/publications/pieceContentStatusUI/__tests__/checkPieceContentStatus.test.ts
index a7573349389..8e43d6865f9 100644
--- a/meteor/server/publications/pieceContentStatusUI/__tests__/checkPieceContentStatus.test.ts
+++ b/meteor/server/publications/pieceContentStatusUI/__tests__/checkPieceContentStatus.test.ts
@@ -14,8 +14,10 @@ import {
SourceLayerType,
IBlueprintPieceGeneric,
PieceLifespan,
+ SplitsContent,
VTContent,
} from '@sofie-automation/blueprints-integration'
+import { ShelfButtonSize } from '@sofie-automation/shared-lib/dist/core/model/StudioSettings'
import { Complete, literal } from '@sofie-automation/corelib/dist/lib'
import { MongoMock } from '../../../../__mocks__/mongo'
import {
@@ -42,6 +44,10 @@ import { RundownId } from '@sofie-automation/corelib/dist/dataModel/Ids'
const mockMediaObjectsCollection = MongoMock.getInnerMockCollection(MediaObjects)
describe('lib/mediaObjects', () => {
+ beforeEach(async () => {
+ await mockMediaObjectsCollection.removeAsync({})
+ })
+
describe('buildFormatString', () => {
it('deepscan tff, stream unknown', () => {
const format1 = buildFormatString(
@@ -244,6 +250,305 @@ describe('lib/mediaObjects', () => {
expect(mediaId3).toEqual(undefined)
})
+ test('packageName: media object status uses mediaId or falls back to fileName', async () => {
+ const mockStudioSettings: IStudioSettings = {
+ supportedMediaFormats: '1920x1080i5000, 1280x720, i5000, i5000tff',
+ mediaPreviewsUrl: '',
+ supportedAudioStreams: '4',
+ frameRate: 25,
+ minimumTakeSpan: DEFAULT_MINIMUM_TAKE_SPAN,
+ allowHold: false,
+ allowPieceDirectPlay: false,
+ enableBuckets: false,
+ enableEvaluationForm: false,
+ shelfAdlibButtonSize: ShelfButtonSize.LARGE,
+ }
+
+ const mockDefaultStudio = defaultStudio(protectString('studio0'))
+ const mockStudio: Complete = {
+ _id: mockDefaultStudio._id,
+ settings: mockStudioSettings,
+ packageContainerSettings: {
+ previewContainerIds: ['previews0'],
+ thumbnailContainerIds: ['thumbnails0'],
+ },
+ routeSets: applyAndValidateOverrides(mockDefaultStudio.routeSetsWithOverrides).obj,
+ mappings: applyAndValidateOverrides(mockDefaultStudio.mappingsWithOverrides).obj,
+ packageContainers: applyAndValidateOverrides(mockDefaultStudio.packageContainersWithOverrides).obj,
+ }
+
+ await mockMediaObjectsCollection.insertAsync(
+ literal({
+ _id: protectString(''),
+ _attachments: {},
+ _rev: '',
+ cinf: '',
+ collectionId: 'studio0',
+ mediaId: 'TEST_FILE',
+ mediaPath: '',
+ mediaSize: 0,
+ mediaTime: 0,
+ mediainfo: literal({
+ name: 'test_file',
+ field_order: PackageInfo.FieldOrder.TFF,
+ streams: [
+ literal({
+ width: 1920,
+ height: 1080,
+ codec: {
+ type: MediaStreamType.Video,
+ time_base: '1/50',
+ },
+ }),
+ literal({
+ channels: 1,
+ codec: {
+ type: MediaStreamType.Audio,
+ time_base: '1/25',
+ },
+ }),
+ literal({
+ channels: 1,
+ codec: {
+ type: MediaStreamType.Audio,
+ time_base: '1/25',
+ },
+ }),
+ literal({
+ channels: 1,
+ codec: {
+ type: MediaStreamType.Audio,
+ time_base: '1/25',
+ },
+ }),
+ literal({
+ channels: 1,
+ codec: {
+ type: MediaStreamType.Audio,
+ time_base: '1/25',
+ },
+ }),
+ ],
+ }),
+ objId: '',
+ previewPath: '',
+ previewSize: 0,
+ previewTime: 0,
+ studioId: protectString('studio0'),
+ thumbSize: 0,
+ thumbTime: 0,
+ tinf: '',
+ })
+ )
+
+ await mockMediaObjectsCollection.insertAsync(
+ literal({
+ _id: protectString(''),
+ _attachments: {},
+ _rev: '',
+ cinf: '',
+ collectionId: 'studio0',
+ mediaId: 'TEST_FILE_2',
+ mediaPath: '',
+ mediaSize: 0,
+ mediaTime: 0,
+ mediainfo: literal({
+ name: 'test_file_2',
+ field_order: PackageInfo.FieldOrder.Progressive,
+ streams: [
+ literal({
+ width: 1920,
+ height: 1080,
+ codec: {
+ type: MediaStreamType.Video,
+ time_base: '1/50',
+ },
+ }),
+ literal({
+ channels: 1,
+ codec: {
+ type: MediaStreamType.Audio,
+ time_base: '1/25',
+ },
+ }),
+ literal({
+ channels: 1,
+ codec: {
+ type: MediaStreamType.Audio,
+ time_base: '1/25',
+ },
+ }),
+ literal({
+ channels: 1,
+ codec: {
+ type: MediaStreamType.Audio,
+ time_base: '1/25',
+ },
+ }),
+ literal({
+ channels: 1,
+ codec: {
+ type: MediaStreamType.Audio,
+ time_base: '1/25',
+ },
+ }),
+ ],
+ }),
+ objId: '',
+ previewPath: '',
+ previewSize: 0,
+ previewTime: 0,
+ studioId: protectString('studio0'),
+ thumbSize: 0,
+ thumbTime: 0,
+ tinf: '',
+ })
+ )
+
+ const sourcelayer = literal({
+ _id: '',
+ _rank: 0,
+ name: '',
+ type: SourceLayerType.LIVE_SPEAK,
+ })
+
+ const messageFactory = new PieceContentStatusMessageFactory(undefined)
+ const mockOwnerId = protectString('rundown0')
+
+ const [status1] = await checkPieceContentStatusAndDependencies(
+ mockStudio,
+ mockOwnerId,
+ messageFactory,
+ literal({
+ _id: protectString('piece1'),
+ name: 'Test_file',
+ prerollDuration: 0,
+ externalId: '',
+ lifespan: PieceLifespan.WithinPart,
+ privateData: {},
+ outputLayerId: '',
+ sourceLayerId: '',
+ content: literal({
+ fileName: 'test_file',
+ path: '',
+ }),
+ timelineObjectsString: EmptyPieceTimelineObjectsBlob,
+ }),
+ sourcelayer
+ )
+ expect(status1.packageName).toEqual('TEST_FILE')
+
+ const [status2] = await checkPieceContentStatusAndDependencies(
+ mockStudio,
+ mockOwnerId,
+ messageFactory,
+ literal({
+ _id: protectString('piece2'),
+ name: 'Test_file_2',
+ prerollDuration: 0,
+ externalId: '',
+ lifespan: PieceLifespan.WithinPart,
+ privateData: {},
+ outputLayerId: '',
+ sourceLayerId: '',
+ content: literal({
+ fileName: 'test_file_2',
+ path: '',
+ }),
+ timelineObjectsString: EmptyPieceTimelineObjectsBlob,
+ }),
+ sourcelayer
+ )
+ expect(status2.packageName).toEqual('TEST_FILE_2')
+
+ const [status3] = await checkPieceContentStatusAndDependencies(
+ mockStudio,
+ mockOwnerId,
+ messageFactory,
+ literal({
+ _id: protectString('piece3'),
+ name: 'Test_file_3',
+ prerollDuration: 0,
+ externalId: '',
+ lifespan: PieceLifespan.WithinPart,
+ privateData: {},
+ outputLayerId: '',
+ sourceLayerId: '',
+ content: literal({
+ fileName: 'test_file_3',
+ path: '',
+ }),
+ timelineObjectsString: EmptyPieceTimelineObjectsBlob,
+ }),
+ sourcelayer
+ )
+ expect(status3.packageName).toEqual('TEST_FILE_3')
+ })
+
+ test('packageName: exposed even when ignoreMediaObjectStatus is set', async () => {
+ const mockStudioSettings: IStudioSettings = {
+ supportedMediaFormats: '1920x1080i5000, 1280x720, i5000, i5000tff',
+ mediaPreviewsUrl: '',
+ supportedAudioStreams: '4',
+ frameRate: 25,
+ minimumTakeSpan: DEFAULT_MINIMUM_TAKE_SPAN,
+ allowHold: false,
+ allowPieceDirectPlay: false,
+ enableBuckets: false,
+ enableEvaluationForm: false,
+ shelfAdlibButtonSize: ShelfButtonSize.LARGE,
+ }
+
+ const mockDefaultStudio = defaultStudio(protectString('studio0'))
+ const mockStudio: Complete = {
+ _id: mockDefaultStudio._id,
+ settings: mockStudioSettings,
+ packageContainerSettings: {
+ previewContainerIds: ['previews0'],
+ thumbnailContainerIds: ['thumbnails0'],
+ },
+ routeSets: applyAndValidateOverrides(mockDefaultStudio.routeSetsWithOverrides).obj,
+ mappings: applyAndValidateOverrides(mockDefaultStudio.mappingsWithOverrides).obj,
+ packageContainers: applyAndValidateOverrides(mockDefaultStudio.packageContainersWithOverrides).obj,
+ }
+
+ const ignorePiece = literal({
+ _id: protectString('pieceIgnore'),
+ name: 'Ignore media status',
+ prerollDuration: 0,
+ externalId: '',
+ lifespan: PieceLifespan.WithinPart,
+ privateData: {},
+ outputLayerId: '',
+ sourceLayerId: '',
+ content: {
+ fileName: 'ignored_file',
+ path: '',
+ ignoreMediaObjectStatus: true,
+ } as any,
+ timelineObjectsString: EmptyPieceTimelineObjectsBlob,
+ })
+
+ const messageFactory = new PieceContentStatusMessageFactory(undefined)
+ const mockOwnerId = protectString('rundown0')
+
+ const [ignoredStatus] = await checkPieceContentStatusAndDependencies(
+ mockStudio,
+ mockOwnerId,
+ messageFactory,
+ ignorePiece,
+ literal({
+ _id: '',
+ _rank: 0,
+ name: '',
+ type: SourceLayerType.VT,
+ })
+ )
+
+ expect(ignoredStatus.status).toEqual(PieceStatusCode.UNKNOWN)
+ expect(ignoredStatus.packageName).toEqual('IGNORED_FILE')
+ })
+
test('checkPieceContentStatus', async () => {
const mockStudioSettings: IStudioSettings = {
supportedMediaFormats: '1920x1080i5000, 1280x720, i5000, i5000tff',
@@ -255,6 +560,7 @@ describe('lib/mediaObjects', () => {
allowPieceDirectPlay: false,
enableBuckets: false,
enableEvaluationForm: false,
+ shelfAdlibButtonSize: ShelfButtonSize.LARGE,
}
const mockDefaultStudio = defaultStudio(protectString('studio0'))
@@ -514,4 +820,168 @@ describe('lib/mediaObjects', () => {
})
)
})
+
+ describe('SPLITS boxPreviews', () => {
+ const mockStudioSettings: IStudioSettings = {
+ supportedMediaFormats: '1920x1080i5000',
+ mediaPreviewsUrl: 'http://preview/',
+ supportedAudioStreams: '4',
+ frameRate: 25,
+ minimumTakeSpan: DEFAULT_MINIMUM_TAKE_SPAN,
+ allowHold: false,
+ allowPieceDirectPlay: false,
+ enableBuckets: false,
+ enableEvaluationForm: false,
+ shelfAdlibButtonSize: ShelfButtonSize.LARGE,
+ }
+
+ const mockDefaultStudio = defaultStudio(protectString('studio0'))
+ const mockStudio: Complete = {
+ _id: mockDefaultStudio._id,
+ settings: mockStudioSettings,
+ packageContainerSettings: {
+ previewContainerIds: ['previews0'],
+ thumbnailContainerIds: ['thumbnails0'],
+ },
+ routeSets: applyAndValidateOverrides(mockDefaultStudio.routeSetsWithOverrides).obj,
+ mappings: applyAndValidateOverrides(mockDefaultStudio.mappingsWithOverrides).obj,
+ packageContainers: applyAndValidateOverrides(mockDefaultStudio.packageContainersWithOverrides).obj,
+ }
+
+ const splitsLayer = literal({
+ _id: '',
+ _rank: 0,
+ name: 'Splits',
+ type: SourceLayerType.SPLITS,
+ })
+
+ const messageFactory = new PieceContentStatusMessageFactory(undefined)
+ const mockOwnerId = protectString('rundown0')
+
+ async function insertMediaObject(mediaId: string): Promise {
+ await mockMediaObjectsCollection.insertAsync(
+ literal({
+ _id: protectString(''),
+ _attachments: {},
+ _rev: '',
+ cinf: '',
+ collectionId: 'studio0',
+ mediaId,
+ mediaPath: '',
+ mediaSize: 0,
+ mediaTime: 0,
+ mediainfo: literal({
+ name: mediaId,
+ field_order: PackageInfo.FieldOrder.Progressive,
+ streams: [
+ literal({
+ width: 1920,
+ height: 1080,
+ codec: {
+ type: MediaStreamType.Video,
+ time_base: '1/50',
+ },
+ }),
+ ],
+ }),
+ objId: '',
+ previewPath: 'previews',
+ previewSize: 0,
+ previewTime: 0,
+ studioId: protectString('studio0'),
+ thumbSize: 0,
+ thumbTime: 0,
+ tinf: '',
+ })
+ )
+ }
+
+ test('MediaObject fallback: index-aligned boxPreviews with dots in file names', async () => {
+ await insertMediaObject('CLIPS/HEAD3_SNOW.MP4')
+ await insertMediaObject('CLIPS/OTHER.MP4')
+
+ const [status] = await checkPieceContentStatusAndDependencies(
+ mockStudio,
+ mockOwnerId,
+ messageFactory,
+ literal({
+ _id: protectString('split1'),
+ name: 'Split',
+ prerollDuration: 0,
+ externalId: '',
+ lifespan: PieceLifespan.WithinPart,
+ privateData: {},
+ outputLayerId: '',
+ sourceLayerId: '',
+ content: literal({
+ boxSourceConfiguration: [
+ {
+ type: SourceLayerType.CAMERA,
+ studioLabel: 'Cam 1',
+ switcherInput: 1,
+ },
+ {
+ type: SourceLayerType.VT,
+ studioLabel: 'Snow',
+ switcherInput: '',
+ fileName: 'clips/head3_Snow.mp4',
+ path: 'clips/head3_Snow.mp4',
+ },
+ {
+ type: SourceLayerType.VT,
+ studioLabel: 'Other',
+ switcherInput: '',
+ fileName: 'clips/other.mp4',
+ path: 'clips/other.mp4',
+ },
+ ],
+ }),
+ timelineObjectsString: EmptyPieceTimelineObjectsBlob,
+ }),
+ splitsLayer
+ )
+
+ expect(status.thumbnailUrl).toBeUndefined()
+ expect(status.previewUrl).toBeUndefined()
+ expect(status.boxPreviews).toHaveLength(3)
+ expect(status.boxPreviews?.[0]).toEqual({})
+ expect(status.boxPreviews?.[1]?.thumbnailUrl).toContain('CLIPS%2FHEAD3_SNOW.MP4')
+ expect(status.boxPreviews?.[2]?.thumbnailUrl).toContain('CLIPS%2FOTHER.MP4')
+ })
+
+ test('case-insensitive fileName matching', async () => {
+ await insertMediaObject('CLIPS/FOO.MP4')
+
+ const [status] = await checkPieceContentStatusAndDependencies(
+ mockStudio,
+ mockOwnerId,
+ messageFactory,
+ literal({
+ _id: protectString('split2'),
+ name: 'Split',
+ prerollDuration: 0,
+ externalId: '',
+ lifespan: PieceLifespan.WithinPart,
+ privateData: {},
+ outputLayerId: '',
+ sourceLayerId: '',
+ content: literal({
+ boxSourceConfiguration: [
+ {
+ type: SourceLayerType.VT,
+ studioLabel: 'Foo',
+ switcherInput: '',
+ fileName: 'clips/foo.mp4',
+ path: 'clips/foo.mp4',
+ },
+ ],
+ }),
+ timelineObjectsString: EmptyPieceTimelineObjectsBlob,
+ }),
+ splitsLayer
+ )
+
+ expect(status.boxPreviews?.[0]?.thumbnailUrl).toBeDefined()
+ })
+ })
})
diff --git a/meteor/server/publications/pieceContentStatusUI/checkPieceContentStatus.ts b/meteor/server/publications/pieceContentStatusUI/checkPieceContentStatus.ts
index ba2435e8cd3..4b8545299c5 100644
--- a/meteor/server/publications/pieceContentStatusUI/checkPieceContentStatus.ts
+++ b/meteor/server/publications/pieceContentStatusUI/checkPieceContentStatus.ts
@@ -8,6 +8,7 @@ import {
LiveSpeakContent,
PackageInfo,
SourceLayerType,
+ SplitsContent,
VTContent,
} from '@sofie-automation/blueprints-integration'
import { getExpectedPackageId } from '@sofie-automation/corelib/dist/dataModel/ExpectedPackages'
@@ -52,11 +53,17 @@ import {
PackageInfoLight,
PieceDependencies,
} from './common'
-import { PieceContentStatusObj } from '@sofie-automation/corelib/dist/dataModel/PieceContentStatus'
+import { PieceContentStatusObj, SplitBoxPreviewUrls } from '@sofie-automation/corelib/dist/dataModel/PieceContentStatus'
import { PieceContentStatusMessageFactory, PieceContentStatusMessageRequiredArgs } from './messageFactory'
import { PackageStatusMessage } from '@sofie-automation/shared-lib/dist/packageStatusMessages'
import { BucketAdLib } from '@sofie-automation/corelib/dist/dataModel/BucketAdLibPiece'
import { StudioPackageContainerSettings } from '@sofie-automation/shared-lib/dist/core/model/PackageContainer'
+import {
+ buildPublishedBoxPreviews,
+ getMediaIdFromSplitBox,
+ getMediaIdsFromSplitsContent,
+ normalizeSplitBoxMediaId,
+} from '@sofie-automation/shared-lib/dist/package-manager/splitBoxMedia'
const DEFAULT_MESSAGE_FACTORY = new PieceContentStatusMessageFactory(undefined)
@@ -190,6 +197,7 @@ export function getMediaObjectMediaId(
): string | undefined {
switch (sourceLayer.type) {
case SourceLayerType.VT:
+ case SourceLayerType.STUDIO_SCREEN:
return (piece.content as VTContent)?.fileName?.toUpperCase()
case SourceLayerType.LIVE_SPEAK:
return (piece.content as LiveSpeakContent)?.fileName?.toUpperCase()
@@ -241,24 +249,45 @@ export async function checkPieceContentStatusAndDependencies(
}
if (studio.settings.mockPieceContentStatus) {
- return [
- {
- status: PieceStatusCode.OK,
- messages: [],
- progress: undefined,
+ const mockStatus: PieceContentStatusObj = {
+ status: PieceStatusCode.OK,
+ messages: [],
+ progress: undefined,
- freezes: [],
- blacks: [],
- scenes: [],
+ freezes: [],
+ blacks: [],
+ scenes: [],
- thumbnailUrl: '/dev/fakeThumbnail.png',
- previewUrl: '/dev/fakePreview.mp4',
+ thumbnailUrl: '/dev/fakeThumbnail.png',
+ previewUrl: '/dev/fakePreview.mp4',
- packageName: null,
- contentDuration: 30 * 1000,
- },
- pieceDependencies,
- ]
+ packageName: '/dev/fakePreview.mp4',
+ contentDuration: 30 * 1000,
+ }
+
+ if (sourceLayer.type === SourceLayerType.SPLITS) {
+ const splitsContent = piece.content as SplitsContent | undefined
+ if (splitsContent?.boxSourceConfiguration) {
+ return [
+ {
+ ...mockStatus,
+ thumbnailUrl: undefined,
+ previewUrl: undefined,
+ boxPreviews: splitsContent.boxSourceConfiguration.map((box) =>
+ getMediaIdFromSplitBox(box)
+ ? {
+ thumbnailUrl: '/dev/fakeThumbnail.png',
+ previewUrl: '/dev/fakePreview.mp4',
+ }
+ : {}
+ ),
+ },
+ pieceDependencies,
+ ]
+ }
+ }
+
+ return [mockStatus, pieceDependencies]
}
const ignoreMediaStatus = piece.content && piece.content.ignoreMediaObjectStatus
@@ -295,6 +324,17 @@ export async function checkPieceContentStatusAndDependencies(
) as Promise
}
+ const getMediaObject = async (mediaId: string) => {
+ pieceDependencies.mediaObjects.push(mediaId)
+ return MediaObjects.findOneAsync(
+ {
+ studioId: studio._id,
+ mediaId,
+ },
+ { projection: mediaObjectFieldSpecifier }
+ ) as Promise
+ }
+
// Using Expected Packages:
const status = await checkPieceContentExpectedPackageStatus(
piece,
@@ -305,6 +345,9 @@ export async function checkPieceContentStatusAndDependencies(
getPackageContainerPackageStatus,
messageFactory || DEFAULT_MESSAGE_FACTORY
)
+ if (sourceLayer.type === SourceLayerType.SPLITS && status.boxPreviews) {
+ await fillSplitsBoxPreviewsFromMediaObjects(studio, piece, status, getMediaObject)
+ }
return [status, pieceDependencies]
} else {
// Fallback to MediaObject statuses:
@@ -319,6 +362,11 @@ export async function checkPieceContentStatusAndDependencies(
) as Promise
}
+ if (sourceLayer.type === SourceLayerType.SPLITS) {
+ const status = await checkPieceContentSplitsMediaObjectStatus(piece, studio, getMediaObject)
+ return [status, pieceDependencies]
+ }
+
const status = await checkPieceContentMediaObjectStatus(
piece,
sourceLayer,
@@ -343,7 +391,7 @@ export async function checkPieceContentStatusAndDependencies(
thumbnailUrl: undefined,
previewUrl: undefined,
- packageName: null,
+ packageName: getMediaObjectMediaId(piece, sourceLayer) || null,
contentDuration: undefined,
},
pieceDependencies,
@@ -355,6 +403,89 @@ interface MediaObjectMessage {
message: ITranslatableMessage | null
}
+async function fillSplitsBoxPreviewsFromMediaObjects(
+ studio: PieceContentStatusStudio,
+ piece: PieceContentStatusPiece,
+ status: PieceContentStatusObj,
+ getMediaObject: (mediaId: string) => Promise
+): Promise {
+ const splitsContent = piece.content as SplitsContent | undefined
+ const boxes = splitsContent?.boxSourceConfiguration
+ if (!boxes?.length || !status.boxPreviews) return
+
+ const newPreviews = [...status.boxPreviews]
+ for (let i = 0; i < boxes.length; i++) {
+ const mediaId = getMediaIdFromSplitBox(boxes[i])
+ if (!mediaId) continue
+
+ const preview = newPreviews[i] ?? {}
+ if (preview.thumbnailUrl || preview.previewUrl) continue
+
+ const mediaObject = await getMediaObject(mediaId)
+ if (!mediaObject) continue
+
+ newPreviews[i] = {
+ thumbnailUrl: getAssetUrlFromContentMetaData(mediaObject, 'thumbnail', studio.settings.mediaPreviewsUrl),
+ previewUrl: getAssetUrlFromContentMetaData(mediaObject, 'preview', studio.settings.mediaPreviewsUrl),
+ }
+ }
+ status.boxPreviews = newPreviews
+}
+
+async function checkPieceContentSplitsMediaObjectStatus(
+ piece: PieceContentStatusPiece,
+ studio: PieceContentStatusStudio,
+ getMediaObject: (mediaId: string) => Promise
+): Promise {
+ const splitsContent = piece.content as SplitsContent | undefined
+ const boxes = splitsContent?.boxSourceConfiguration ?? []
+ const previewByMediaId = new Map()
+ let contentDuration: number | undefined
+
+ for (const mediaId of getMediaIdsFromSplitsContent({ boxSourceConfiguration: boxes })) {
+ const mediaObject = await getMediaObject(mediaId)
+ if (!mediaObject) continue
+
+ previewByMediaId.set(mediaId, {
+ thumbnailUrl: getAssetUrlFromContentMetaData(mediaObject, 'thumbnail', studio.settings.mediaPreviewsUrl),
+ previewUrl: getAssetUrlFromContentMetaData(mediaObject, 'preview', studio.settings.mediaPreviewsUrl),
+ })
+
+ if (mediaObject.mediainfo?.streams?.length) {
+ const maximumStreamDuration = mediaObject.mediainfo.streams.reduce(
+ (prev, current) =>
+ current.duration !== undefined ? Math.max(prev, Number.parseFloat(current.duration)) : prev,
+ Number.NaN
+ )
+ if (Number.isFinite(maximumStreamDuration)) {
+ contentDuration = Math.max(contentDuration ?? 0, maximumStreamDuration)
+ }
+ }
+ }
+
+ let pieceStatus = PieceStatusCode.UNKNOWN
+ if (previewByMediaId.size > 0) {
+ pieceStatus = PieceStatusCode.OK
+ }
+
+ return {
+ status: pieceStatus,
+ messages: [],
+ progress: 0,
+
+ freezes: [],
+ blacks: [],
+ scenes: [],
+
+ thumbnailUrl: undefined,
+ previewUrl: undefined,
+
+ packageName: null,
+ contentDuration,
+ boxPreviews: buildPublishedBoxPreviews(boxes, previewByMediaId),
+ }
+}
+
async function checkPieceContentMediaObjectStatus(
piece: PieceContentStatusPiece,
sourceLayer: ISourceLayer,
@@ -377,6 +508,7 @@ async function checkPieceContentMediaObjectStatus(
const fileName = getMediaObjectMediaId(piece, sourceLayer)
switch (sourceLayer.type) {
case SourceLayerType.VT:
+ case SourceLayerType.STUDIO_SCREEN:
case SourceLayerType.LIVE_SPEAK:
case SourceLayerType.TRANSITION:
// If the fileName is not set...
@@ -566,7 +698,7 @@ async function checkPieceContentMediaObjectStatus(
? getAssetUrlFromContentMetaData(metadata, 'preview', studio.settings.mediaPreviewsUrl)
: undefined,
- packageName: metadata?.mediaId || null,
+ packageName: metadata?.mediaId || fileName || null,
contentDuration,
}
@@ -609,6 +741,8 @@ async function checkPieceContentExpectedPackageStatus(
messageFactory: PieceContentStatusMessageFactory
): Promise {
const settings: IStudioSettings | undefined = studio?.settings
+ const isSplitsLayer = sourceLayer.type === SourceLayerType.SPLITS
+ const previewByMediaId = new Map()
const ignoreMediaAudioStatus = piece.content && piece.content.ignoreAudioFormat
@@ -708,28 +842,31 @@ async function checkPieceContentExpectedPackageStatus(
continue
}
- if (!thumbnailUrl) {
- const sideEffect = getSideEffect(expectedPackage, studio.packageContainerSettings)
-
- thumbnailUrl = await getAssetUrlFromPackageContainerStatus(
- studio.packageContainers,
- getPackageContainerPackageStatus,
- candidatePackageId,
- sideEffect.thumbnailContainerId,
- sideEffect.thumbnailPackageSettings?.path
- )
- }
+ const resolvedUrls = await resolveExpectedPackageAssetUrls(
+ studio,
+ expectedPackage,
+ candidatePackageId,
+ getPackageContainerPackageStatus
+ )
- if (!previewUrl) {
- const sideEffect = getSideEffect(expectedPackage, studio.packageContainerSettings)
+ if (isSplitsLayer) {
+ const pkgMediaPath = getExpectedPackageFileName(expectedPackage)
+ if (pkgMediaPath) {
+ const mediaId = normalizeSplitBoxMediaId(pkgMediaPath)
+ const existing = previewByMediaId.get(mediaId) ?? {}
+ previewByMediaId.set(mediaId, {
+ thumbnailUrl: existing.thumbnailUrl ?? resolvedUrls.thumbnailUrl,
+ previewUrl: existing.previewUrl ?? resolvedUrls.previewUrl,
+ })
+ }
+ } else {
+ if (!thumbnailUrl) {
+ thumbnailUrl = resolvedUrls.thumbnailUrl
+ }
- previewUrl = await getAssetUrlFromPackageContainerStatus(
- studio.packageContainers,
- getPackageContainerPackageStatus,
- candidatePackageId,
- sideEffect.previewContainerId,
- sideEffect.previewPackageSettings?.path
- )
+ if (!previewUrl) {
+ previewUrl = resolvedUrls.previewUrl
+ }
}
progress = getPackageProgress(packageOnPackageContainer.status) ?? undefined
@@ -868,6 +1005,16 @@ async function checkPieceContentExpectedPackageStatus(
: messageFactory.getTranslation(msg.message, messageArgs)
})
+ let boxPreviews: SplitBoxPreviewUrls[] | undefined
+ if (isSplitsLayer) {
+ const splitsContent = piece.content as SplitsContent | undefined
+ if (splitsContent?.boxSourceConfiguration) {
+ boxPreviews = buildPublishedBoxPreviews(splitsContent.boxSourceConfiguration, previewByMediaId)
+ }
+ thumbnailUrl = undefined
+ previewUrl = undefined
+ }
+
return {
status: pieceStatus,
messages: _.compact(translatedMessages),
@@ -883,9 +1030,40 @@ async function checkPieceContentExpectedPackageStatus(
packageName,
contentDuration,
+ boxPreviews,
}
}
+async function resolveExpectedPackageAssetUrls(
+ studio: PieceContentStatusStudio,
+ expectedPackage: ExpectedPackage.Any,
+ candidatePackageId: ExpectedPackageId,
+ getPackageContainerPackageStatus: (
+ packageContainerId: string,
+ expectedPackageId: ExpectedPackageId
+ ) => Promise
+): Promise {
+ const sideEffect = getSideEffect(expectedPackage, studio.packageContainerSettings)
+
+ const thumbnailUrl = await getAssetUrlFromPackageContainerStatus(
+ studio.packageContainers,
+ getPackageContainerPackageStatus,
+ candidatePackageId,
+ sideEffect.thumbnailContainerId,
+ sideEffect.thumbnailPackageSettings?.path
+ )
+
+ const previewUrl = await getAssetUrlFromPackageContainerStatus(
+ studio.packageContainers,
+ getPackageContainerPackageStatus,
+ candidatePackageId,
+ sideEffect.previewContainerId,
+ sideEffect.previewPackageSettings?.path
+ )
+
+ return { thumbnailUrl, previewUrl }
+}
+
async function getAssetUrlFromPackageContainerStatus(
packageContainers: Record,
getPackageContainerPackageStatus: (
diff --git a/meteor/server/publications/pieceContentStatusUI/rundown/publication.ts b/meteor/server/publications/pieceContentStatusUI/rundown/publication.ts
index a9b95c71407..f2710d50b3a 100644
--- a/meteor/server/publications/pieceContentStatusUI/rundown/publication.ts
+++ b/meteor/server/publications/pieceContentStatusUI/rundown/publication.ts
@@ -15,7 +15,7 @@ import {
import { MongoFieldSpecifierOnesStrict } from '@sofie-automation/corelib/dist/mongo'
import { ReadonlyDeep } from 'type-fest'
import { UIPieceContentStatus } from '@sofie-automation/corelib/dist/dataModel/PieceContentStatus'
-import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import {
MediaObjects,
PackageContainerPackageStatuses,
diff --git a/meteor/server/publications/rundown.ts b/meteor/server/publications/rundown.ts
index 6e4e5788858..b83748913c9 100644
--- a/meteor/server/publications/rundown.ts
+++ b/meteor/server/publications/rundown.ts
@@ -67,6 +67,7 @@ meteorPublish(
{
projection: {
privateData: 0,
+ externalEventSubscriptions: 0,
},
}
)
@@ -90,6 +91,7 @@ meteorPublish(
const modifier: FindOptions = {
projection: {
privateData: 0,
+ externalEventSubscriptions: 0,
},
}
@@ -112,6 +114,7 @@ meteorPublish(
const modifier: FindOptions = {
projection: {
privateData: 0,
+ externalEventSubscriptions: 0,
},
}
diff --git a/meteor/server/publications/rundownPlaylist.ts b/meteor/server/publications/rundownPlaylist.ts
index c52efc85d36..582c104934e 100644
--- a/meteor/server/publications/rundownPlaylist.ts
+++ b/meteor/server/publications/rundownPlaylist.ts
@@ -1,5 +1,5 @@
import { meteorPublish } from './lib/lib'
-import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import { RundownPlaylists } from '../collections'
import { CorelibPubSub } from '@sofie-automation/corelib/dist/pubsub'
import { MeteorPubSub } from '@sofie-automation/meteor-lib/dist/api/pubsub'
diff --git a/meteor/server/publications/segmentPartNotesUI/__tests__/generateNotesForSegment.test.ts b/meteor/server/publications/segmentPartNotesUI/__tests__/generateNotesForSegment.test.ts
index 3debf641199..fea13201aa3 100644
--- a/meteor/server/publications/segmentPartNotesUI/__tests__/generateNotesForSegment.test.ts
+++ b/meteor/server/publications/segmentPartNotesUI/__tests__/generateNotesForSegment.test.ts
@@ -486,4 +486,121 @@ describe('generateNotesForSegment', () => {
])
)
})
+
+ test('partInstance with runtime invalidReason', async () => {
+ const playlistId = protectString('playlist0')
+ const nrcsName = 'some nrcs'
+
+ const segment: Pick = {
+ _id: protectString('segment0'),
+ _rank: 1,
+ rundownId: protectString('rundown0'),
+ name: 'A segment',
+ notes: [],
+ orphaned: undefined,
+ }
+
+ const partInstance0: Pick = {
+ _id: protectString('instance0'),
+ segmentId: segment._id,
+ rundownId: segment.rundownId,
+ orphaned: undefined,
+ reset: false,
+ invalidReason: {
+ message: generateTranslation('Runtime error occurred'),
+ severity: NoteSeverity.ERROR,
+ },
+ part: {
+ _id: protectString('part0'),
+ title: 'Test Part',
+ } as any,
+ }
+
+ const notes = generateNotesForSegment(playlistId, segment, nrcsName, [], [partInstance0])
+ expect(notes).toEqual(
+ literal([
+ {
+ _id: protectString('segment0_partinstance_instance0_invalid_runtime'),
+ note: {
+ type: NoteSeverity.ERROR,
+ message: partInstance0.invalidReason!.message,
+ rank: segment._rank,
+ origin: {
+ segmentId: segment._id,
+ rundownId: segment.rundownId,
+ name: partInstance0.part.title,
+ partId: partInstance0.part._id,
+ segmentName: segment.name,
+ },
+ },
+ playlistId: playlistId,
+ rundownId: segment.rundownId,
+ segmentId: segment._id,
+ },
+ ])
+ )
+ })
+
+ test('partInstance with runtime invalidReason but reset - no note', async () => {
+ const playlistId = protectString('playlist0')
+ const nrcsName = 'some nrcs'
+
+ const segment: Pick = {
+ _id: protectString('segment0'),
+ _rank: 1,
+ rundownId: protectString('rundown0'),
+ name: 'A segment',
+ notes: [],
+ orphaned: undefined,
+ }
+
+ const partInstance0: Pick = {
+ _id: protectString('instance0'),
+ segmentId: segment._id,
+ rundownId: segment.rundownId,
+ orphaned: undefined,
+ reset: true,
+ invalidReason: {
+ message: generateTranslation('Runtime error occurred'),
+ severity: NoteSeverity.ERROR,
+ },
+ part: {
+ _id: protectString('part0'),
+ title: 'Test Part',
+ } as any,
+ }
+
+ const notes = generateNotesForSegment(playlistId, segment, nrcsName, [], [partInstance0])
+ expect(notes).toHaveLength(0)
+ })
+
+ test('partInstance without invalidReason - no note', async () => {
+ const playlistId = protectString('playlist0')
+ const nrcsName = 'some nrcs'
+
+ const segment: Pick = {
+ _id: protectString('segment0'),
+ _rank: 1,
+ rundownId: protectString('rundown0'),
+ name: 'A segment',
+ notes: [],
+ orphaned: undefined,
+ }
+
+ const partInstance0: Pick = {
+ _id: protectString('instance0'),
+ segmentId: segment._id,
+ rundownId: segment.rundownId,
+ orphaned: undefined,
+ reset: false,
+ invalidReason: undefined,
+ part: {
+ _id: protectString('part0'),
+ title: 'Test Part',
+ } as any,
+ }
+
+ const notes = generateNotesForSegment(playlistId, segment, nrcsName, [], [partInstance0])
+ expect(notes).toHaveLength(0)
+ })
})
diff --git a/meteor/server/publications/segmentPartNotesUI/__tests__/publication.test.ts b/meteor/server/publications/segmentPartNotesUI/__tests__/publication.test.ts
index f232e383710..42e34002970 100644
--- a/meteor/server/publications/segmentPartNotesUI/__tests__/publication.test.ts
+++ b/meteor/server/publications/segmentPartNotesUI/__tests__/publication.test.ts
@@ -69,7 +69,7 @@ describe('manipulateUISegmentPartNotesPublicationData', () => {
Rundowns: new ReactiveCacheCollection('Rundowns'),
Segments: new ReactiveCacheCollection('Segments'),
Parts: new ReactiveCacheCollection('Parts'),
- DeletedPartInstances: new ReactiveCacheCollection('DeletedPartInstances'),
+ PartInstances: new ReactiveCacheCollection('PartInstances'),
}
newCache.Rundowns.insert({
@@ -356,11 +356,11 @@ describe('manipulateUISegmentPartNotesPublicationData', () => {
invalid: false,
invalidReason: undefined,
})
- newCache.DeletedPartInstances.insert({
+ newCache.PartInstances.insert({
_id: 'instance0',
segmentId: segmentId0,
rundownId: rundownId,
- orphaned: undefined,
+ orphaned: 'deleted',
reset: false,
part: 'part' as any,
})
@@ -421,6 +421,7 @@ describe('manipulateUISegmentPartNotesPublicationData', () => {
[
{
_id: 'instance0',
+ orphaned: 'deleted',
part: 'part',
reset: false,
rundownId: 'rundown0',
diff --git a/meteor/server/publications/segmentPartNotesUI/generateNotesForSegment.ts b/meteor/server/publications/segmentPartNotesUI/generateNotesForSegment.ts
index 89dd9545a2f..da4205a90d6 100644
--- a/meteor/server/publications/segmentPartNotesUI/generateNotesForSegment.ts
+++ b/meteor/server/publications/segmentPartNotesUI/generateNotesForSegment.ts
@@ -155,5 +155,31 @@ export function generateNotesForSegment(
}
}
+ // Generate notes for runtime invalidReason on PartInstances
+ // This is distinct from planned invalidReason on Parts - these are runtime validation issues
+ for (const partInstance of partInstances) {
+ // Skip if the PartInstance has been reset (no longer relevant) or has no runtime invalidReason
+ if (partInstance.reset || !partInstance.invalidReason) continue
+
+ notes.push({
+ _id: protectString(`${segment._id}_partinstance_${partInstance._id}_invalid_runtime`),
+ playlistId,
+ rundownId: partInstance.rundownId,
+ segmentId: segment._id,
+ note: {
+ type: partInstance.invalidReason.severity ?? NoteSeverity.ERROR,
+ message: partInstance.invalidReason.message,
+ rank: segment._rank,
+ origin: {
+ segmentId: partInstance.segmentId,
+ partId: partInstance.part._id,
+ rundownId: partInstance.rundownId,
+ segmentName: segment.name,
+ name: partInstance.part.title,
+ },
+ },
+ })
+ }
+
return notes
}
diff --git a/meteor/server/publications/segmentPartNotesUI/publication.ts b/meteor/server/publications/segmentPartNotesUI/publication.ts
index 4de954886c1..131440a6f1a 100644
--- a/meteor/server/publications/segmentPartNotesUI/publication.ts
+++ b/meteor/server/publications/segmentPartNotesUI/publication.ts
@@ -27,7 +27,7 @@ import {
} from './reactiveContentCache'
import { RundownsObserver } from '../lib/rundownsObserver'
import { RundownContentObserver } from './rundownContentObserver'
-import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import { generateNotesForSegment } from './generateNotesForSegment'
import { RundownPlaylists } from '../../collections'
import { check, Match } from 'meteor/check'
@@ -91,7 +91,7 @@ async function setupUISegmentPartNotesPublicationObservers(
triggerUpdate({ invalidateSegmentIds: [doc.segmentId, oldDoc.segmentId] }),
removed: (doc) => triggerUpdate({ invalidateSegmentIds: [doc.segmentId] }),
}),
- cache.DeletedPartInstances.find({}).observe({
+ cache.PartInstances.find({}).observe({
added: (doc) => triggerUpdate({ invalidateSegmentIds: [doc.segmentId] }),
changed: (doc, oldDoc) =>
triggerUpdate({ invalidateSegmentIds: [doc.segmentId, oldDoc.segmentId] }),
@@ -184,13 +184,13 @@ export async function manipulateUISegmentPartNotesPublicationData(
interface UpdateNotesData {
rundownsCache: Map>
parts: Map[]>
- deletedPartInstances: Map[]>
+ partInstances: Map[]>
}
function compileUpdateNotesData(cache: ReadonlyDeep): UpdateNotesData {
return {
rundownsCache: normalizeArrayToMap(cache.Rundowns.find({}).fetch(), '_id'),
parts: groupByToMap(cache.Parts.find({}).fetch(), 'segmentId'),
- deletedPartInstances: groupByToMap(cache.DeletedPartInstances.find({}).fetch(), 'segmentId'),
+ partInstances: groupByToMap(cache.PartInstances.find({}).fetch(), 'segmentId'),
}
}
@@ -205,7 +205,7 @@ function updateNotesForSegment(
segment,
getRundownNrcsName(state.rundownsCache.get(segment.rundownId)),
state.parts.get(segment._id) ?? [],
- state.deletedPartInstances.get(segment._id) ?? []
+ state.partInstances.get(segment._id) ?? []
)
// Insert generated notes
diff --git a/meteor/server/publications/segmentPartNotesUI/reactiveContentCache.ts b/meteor/server/publications/segmentPartNotesUI/reactiveContentCache.ts
index 22b82c88159..788a681418d 100644
--- a/meteor/server/publications/segmentPartNotesUI/reactiveContentCache.ts
+++ b/meteor/server/publications/segmentPartNotesUI/reactiveContentCache.ts
@@ -35,7 +35,7 @@ export const partFieldSpecifier = literal>
>({
@@ -44,7 +44,9 @@ export const partInstanceFieldSpecifier = literal<
rundownId: 1,
orphaned: 1,
reset: 1,
+ invalidReason: 1,
// @ts-expect-error Deep not supported
+ 'part._id': 1,
'part.title': 1,
})
@@ -52,7 +54,7 @@ export interface ContentCache {
Rundowns: ReactiveCacheCollection>
Segments: ReactiveCacheCollection>
Parts: ReactiveCacheCollection>
- DeletedPartInstances: ReactiveCacheCollection>
+ PartInstances: ReactiveCacheCollection>
}
export function createReactiveContentCache(): ContentCache {
@@ -60,9 +62,7 @@ export function createReactiveContentCache(): ContentCache {
Rundowns: new ReactiveCacheCollection>('rundowns'),
Segments: new ReactiveCacheCollection>('segments'),
Parts: new ReactiveCacheCollection>('parts'),
- DeletedPartInstances: new ReactiveCacheCollection>(
- 'deletedPartInstances'
- ),
+ PartInstances: new ReactiveCacheCollection>('partInstances'),
}
return cache
diff --git a/meteor/server/publications/segmentPartNotesUI/rundownContentObserver.ts b/meteor/server/publications/segmentPartNotesUI/rundownContentObserver.ts
index 8beb78d1feb..82bb509065b 100644
--- a/meteor/server/publications/segmentPartNotesUI/rundownContentObserver.ts
+++ b/meteor/server/publications/segmentPartNotesUI/rundownContentObserver.ts
@@ -58,8 +58,12 @@ export class RundownContentObserver {
}
),
PartInstances.observeChanges(
- { rundownId: { $in: rundownIds }, reset: { $ne: true }, orphaned: 'deleted' },
- cache.DeletedPartInstances.link(),
+ {
+ rundownId: { $in: rundownIds },
+ reset: { $ne: true },
+ $or: [{ invalidReason: { $exists: true } }, { orphaned: 'deleted' }],
+ },
+ cache.PartInstances.link(),
{ projection: partInstanceFieldSpecifier }
),
])
diff --git a/meteor/server/security/auth.ts b/meteor/server/security/auth.ts
index aa4b62f2b02..29930eb11ec 100644
--- a/meteor/server/security/auth.ts
+++ b/meteor/server/security/auth.ts
@@ -3,7 +3,6 @@ import {
USER_PERMISSIONS_HEADER,
UserPermissions,
} from '@sofie-automation/meteor-lib/dist/userPermissions'
-import { Settings } from '../Settings'
import { Meteor } from 'meteor/meteor'
import Koa from 'koa'
import { triggerWriteAccess } from './securityVerify'
@@ -12,8 +11,15 @@ import { CollectionName } from '@sofie-automation/corelib/dist/dataModel/Collect
export type RequestCredentials = Meteor.Connection | Koa.ParameterizedContext
+/**
+ * Whether http-header based security measures are enabled.
+ * Configured via the `SOFIE_ENABLE_HEADER_AUTH` environment variable (`1` or `true` to enable).
+ */
+export const ENABLE_HEADER_AUTH =
+ process.env.SOFIE_ENABLE_HEADER_AUTH === '1' || process.env.SOFIE_ENABLE_HEADER_AUTH?.toLowerCase() === 'true'
+
export function parseConnectionPermissions(conn: RequestCredentials): UserPermissions {
- if (!Settings.enableHeaderAuth) {
+ if (!ENABLE_HEADER_AUTH) {
// If auth is disabled, return all permissions
return {
studio: true,
@@ -49,7 +55,7 @@ export function assertConnectionHasOneOfPermissions(
if (!conn) throw new Meteor.Error(403, 'Can only be invoked by clients')
// Skip if auth is disabled
- if (!Settings.enableHeaderAuth) return
+ if (!ENABLE_HEADER_AUTH) return
const permissions = parseConnectionPermissions(conn)
for (const permission of allowedPermissions) {
@@ -70,7 +76,7 @@ export function checkHasOneOfPermissions(
triggerWriteAccess()
// Skip if auth is disabled
- if (!Settings.enableHeaderAuth) return true
+ if (!ENABLE_HEADER_AUTH) return true
if (!permissions) throw new Meteor.Error(403, 'Permissions is null')
diff --git a/meteor/server/security/check.ts b/meteor/server/security/check.ts
index 2b93e231883..df19d425037 100644
--- a/meteor/server/security/check.ts
+++ b/meteor/server/security/check.ts
@@ -1,6 +1,6 @@
import { PeripheralDeviceId, RundownId, RundownPlaylistId } from '@sofie-automation/corelib/dist/dataModel/Ids'
import { Meteor } from 'meteor/meteor'
-import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import { DBRundown } from '@sofie-automation/corelib/dist/dataModel/Rundown'
import { assertConnectionHasOneOfPermissions, RequestCredentials } from './auth'
import { PeripheralDevices, RundownPlaylists, Rundowns } from '../collections'
diff --git a/meteor/server/systemStatus/__tests__/systemStatus.test.ts b/meteor/server/systemStatus/__tests__/systemStatus.test.ts
index b482a82fe31..09571d5b698 100644
--- a/meteor/server/systemStatus/__tests__/systemStatus.test.ts
+++ b/meteor/server/systemStatus/__tests__/systemStatus.test.ts
@@ -90,6 +90,7 @@ describe('systemStatus', () => {
$set: {
status: literal({
statusCode: StatusCode.WARNING_MAJOR,
+ statusDetails: [],
messages: [],
}),
},
@@ -116,6 +117,7 @@ describe('systemStatus', () => {
$set: {
status: literal({
statusCode: StatusCode.GOOD,
+ statusDetails: [],
messages: [],
}),
},
diff --git a/meteor/server/webmanifest.ts b/meteor/server/webmanifest.ts
index 3795941f299..909c5d7a642 100644
--- a/meteor/server/webmanifest.ts
+++ b/meteor/server/webmanifest.ts
@@ -12,7 +12,7 @@ import { getLocale, getRootSubpath, Translations } from './lib'
import { generateTranslation } from '@sofie-automation/corelib/dist/lib'
import { ITranslatableMessage } from '@sofie-automation/blueprints-integration'
import { interpollateTranslation } from '@sofie-automation/corelib/dist/TranslatableMessage'
-import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
+import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist/RundownPlaylist'
import { getCoreSystemAsync } from './coreSystem/collection'
import Koa from 'koa'
import KoaRouter from '@koa/router'
diff --git a/meteor/server/worker/__tests__/jobQueue.test.ts b/meteor/server/worker/__tests__/jobQueue.test.ts
index 93db5024fda..2977379faa3 100644
--- a/meteor/server/worker/__tests__/jobQueue.test.ts
+++ b/meteor/server/worker/__tests__/jobQueue.test.ts
@@ -651,6 +651,175 @@ describe('WorkerJobQueueManager', () => {
})
})
+ describe('mergeOrQueueJob', () => {
+ it('should enqueue a new job when the queue is empty', async () => {
+ const queueName = 'testQueue'
+ const jobName = 'mergeJob'
+ const generateData = jest.fn((_existing: unknown | null) => ({ value: 1 }))
+
+ manager.mergeOrQueueJob(queueName, jobName, generateData)
+
+ expect(generateData).toHaveBeenCalledTimes(1)
+ expect(generateData).toHaveBeenCalledWith(null)
+
+ const job = await manager.getNextJob(queueName)
+ expect(job).not.toBeNull()
+ expect(job?.name).toBe(jobName)
+ expect(job?.data).toEqual({ value: 1 })
+ })
+
+ it('should enqueue a new job when the tail has a different job name', async () => {
+ const queueName = 'testQueue'
+ const generateData = jest.fn((_existing: unknown | null) => ({ value: 42 }))
+
+ await manager.queueJobWithoutResult(queueName, 'otherJob', { existing: true }, undefined)
+
+ manager.mergeOrQueueJob(queueName, 'mergeJob', generateData)
+
+ expect(generateData).toHaveBeenCalledWith(null)
+
+ // Two jobs should be in the queue
+ const firstJob = await manager.getNextJob(queueName)
+ expect(firstJob?.name).toBe('otherJob')
+
+ const secondJob = await manager.getNextJob(queueName)
+ expect(secondJob?.name).toBe('mergeJob')
+ expect(secondJob?.data).toEqual({ value: 42 })
+ })
+
+ it('should merge data into the tail job when it has the same name', async () => {
+ const queueName = 'testQueue'
+ const jobName = 'mergeJob'
+ const initialData = { count: 1 }
+ const generateData = jest.fn((existing: unknown | null) => ({
+ ...(existing as object),
+ count: ((existing as { count: number } | null)?.count ?? 0) + 1,
+ }))
+
+ await manager.queueJobWithoutResult(queueName, jobName, initialData, undefined)
+
+ manager.mergeOrQueueJob(queueName, jobName, generateData)
+
+ expect(generateData).toHaveBeenCalledWith(initialData)
+
+ // Should still be only one job in the queue
+ const firstJob = await manager.getNextJob(queueName)
+ expect(firstJob?.name).toBe(jobName)
+ expect(firstJob?.data).toEqual({ count: 2 })
+
+ const noMoreJobs = await manager.getNextJob(queueName)
+ expect(noMoreJobs).toBeNull()
+ })
+
+ it('should only merge with the tail job, not jobs earlier in the queue', async () => {
+ const queueName = 'testQueue'
+ const jobName = 'mergeJob'
+ const generateData = jest.fn((_existing: unknown | null) => ({ merged: true }))
+
+ // Queue: [mergeJob (index 0), otherJob (index 1/tail)]
+ await manager.queueJobWithoutResult(queueName, jobName, { original: true }, undefined)
+ await manager.queueJobWithoutResult(queueName, 'otherJob', {}, undefined)
+
+ // Tail is 'otherJob', not 'mergeJob' — should enqueue a new job
+ manager.mergeOrQueueJob(queueName, jobName, generateData)
+
+ expect(generateData).toHaveBeenCalledWith(null)
+
+ // Three jobs should be in the queue
+ const firstJob = await manager.getNextJob(queueName)
+ expect(firstJob?.name).toBe(jobName)
+ expect(firstJob?.data).toEqual({ original: true })
+
+ const secondJob = await manager.getNextJob(queueName)
+ expect(secondJob?.name).toBe('otherJob')
+
+ const thirdJob = await manager.getNextJob(queueName)
+ expect(thirdJob?.name).toBe(jobName)
+ expect(thirdJob?.data).toEqual({ merged: true })
+ })
+
+ it('should notify a waiting worker when a new job is enqueued', async () => {
+ const queueName = 'testQueue'
+
+ // Worker starts waiting (queue is empty)
+ const waitPromise = manager.waitForNextJob(queueName)
+
+ manager.mergeOrQueueJob(queueName, 'mergeJob', () => ({ value: 1 }))
+
+ // Wait for deferred notification
+ await waitTime(10)
+
+ await expect(waitPromise).resolves.toBeUndefined()
+ })
+
+ it('should not add a new job when merging into the tail', async () => {
+ const queueName = 'testQueue'
+ const jobName = 'mergeJob'
+
+ await manager.queueJobWithoutResult(queueName, jobName, { value: 0 }, undefined)
+
+ // Merge — should not add a second job
+ manager.mergeOrQueueJob(queueName, jobName, (existing) => ({
+ ...(existing as object),
+ value: ((existing as { value: number } | null)?.value ?? 0) + 1,
+ }))
+
+ const firstJob = await manager.getNextJob(queueName)
+ expect(firstJob?.name).toBe(jobName)
+ expect(firstJob?.data).toEqual({ value: 1 })
+
+ // Queue should now be empty
+ const noMoreJobs = await manager.getNextJob(queueName)
+ expect(noMoreJobs).toBeNull()
+ })
+
+ it('should enqueue a new job after the previous tail job has been consumed', async () => {
+ const queueName = 'testQueue'
+ const jobName = 'mergeJob'
+
+ // First call: new job
+ manager.mergeOrQueueJob(queueName, jobName, () => ({ round: 1 }))
+
+ // Consume the job
+ const firstJob = await manager.getNextJob(queueName)
+ expect(firstJob?.name).toBe(jobName)
+ expect(firstJob?.data).toEqual({ round: 1 })
+
+ // Second call: queue is empty again — should create a fresh job with null as existing
+ const generateData = jest.fn(() => ({ round: 2 }))
+ manager.mergeOrQueueJob(queueName, jobName, generateData)
+
+ expect(generateData).toHaveBeenCalledWith(null)
+
+ const secondJob = await manager.getNextJob(queueName)
+ expect(secondJob?.name).toBe(jobName)
+ expect(secondJob?.data).toEqual({ round: 2 })
+ })
+
+ it('should accumulate multiple merges into the same tail job', async () => {
+ const queueName = 'testQueue'
+ const jobName = 'mergeJob'
+
+ // First call creates a new job
+ manager.mergeOrQueueJob(queueName, jobName, () => ({ total: 1 }))
+
+ // Subsequent calls should keep merging into the tail
+ manager.mergeOrQueueJob(queueName, jobName, (existing) => ({
+ total: ((existing as { total: number } | null)?.total ?? 0) + 1,
+ }))
+ manager.mergeOrQueueJob(queueName, jobName, (existing) => ({
+ total: ((existing as { total: number } | null)?.total ?? 0) + 1,
+ }))
+
+ // Should be exactly one job with accumulated data
+ const job = await manager.getNextJob(queueName)
+ expect(job?.name).toBe(jobName)
+ expect(job?.data).toEqual({ total: 3 })
+
+ expect(await manager.getNextJob(queueName)).toBeNull()
+ })
+ })
+
describe('multiple queues', () => {
it('should maintain separate queues for different queue names', async () => {
const queue1 = 'queue1'
diff --git a/meteor/server/worker/jobQueue.ts b/meteor/server/worker/jobQueue.ts
index 459116cf103..24e024c9fb8 100644
--- a/meteor/server/worker/jobQueue.ts
+++ b/meteor/server/worker/jobQueue.ts
@@ -360,6 +360,46 @@ export class WorkerJobQueueManager {
}
this.#runningJobs.clear()
}
+
+ /**
+ * Merge new data into the last pending job in the queue if it has the given name,
+ * otherwise enqueue a new fire-and-forget job.
+ *
+ * This prevents queue flooding when high-frequency events arrive: as long as the tail job
+ * has not yet been picked up by the worker, incoming data is merged into it in-place.
+ * Once the worker starts executing it or another jobName gets queued, the next call will enqueue a fresh job.
+ *
+ * @param queueName - The target queue
+ * @param jobName - The job type name to match against
+ * @param generateData - Called to produce job data. Receives the existing job's data when
+ * merging into a tail job, or `null` when creating a new job.
+ */
+ mergeOrQueueJob(queueName: string, jobName: string, generateData: (existing: unknown | null) => unknown): void {
+ const queue = this.#getOrCreateQueue(queueName)
+
+ // Only inspect the very last entry. Scanning further back would risk updating a job in the
+ // middle of the queue, breaking the ordering guarantee relative to other job types.
+ const tail = queue.jobsHighPriority[queue.jobsHighPriority.length - 1]
+ if (tail && tail.spec.name === jobName) {
+ // Merge into the existing tail job in-place
+ tail.spec.data = generateData(tail.spec.data)
+ logger.debug(`Merged events into existing "${jobName}" job in queue "${queueName}"`)
+ } else {
+ // Tail is absent, already picked up, or a different job type — push a new job
+ const entry: JobEntry = {
+ spec: {
+ id: getRandomString(),
+ name: jobName,
+ data: generateData(null),
+ },
+ completionHandler: null,
+ }
+ queue.jobsHighPriority.push(entry)
+ queue.metricsTotal.inc()
+ logger.debug(`Enqueued new "${jobName}" job in queue "${queueName}"`)
+ this.#notifyWorker(queue)
+ }
+ }
}
function generateCompletionHandler(
diff --git a/meteor/server/worker/worker.ts b/meteor/server/worker/worker.ts
index 6a813e0a3aa..d5b496ca45e 100644
--- a/meteor/server/worker/worker.ts
+++ b/meteor/server/worker/worker.ts
@@ -239,6 +239,33 @@ export async function QueueStudioJob(
return queueManager.queueJobAndWrapResult(getStudioQueueName(studioId), jobName, jobParameters, now, options)
}
+/**
+ * Merge new job data into the last pending job in the studio's queue if it has the same name,
+ * otherwise enqueue a new fire-and-forget job.
+ *
+ * Use this instead of {@link QueueStudioJob} when events can be safely batched together and you
+ * do not need to await the result (e.g. device feedback events from gateways).
+ *
+ * @param jobName - The job type
+ * @param studioId - Id of the studio
+ * @param generateData - Called to produce the job data. Receives the existing pending job's data
+ * when merging, or `null` when creating a new job. Both cases are handled by the same function.
+ */
+export function QueueOrUpdateStudioJob(
+ jobName: T,
+ studioId: StudioId,
+ generateData: (existing: Parameters[0] | null) => Parameters[0]
+): void {
+ if (isInTestWrite()) throw new Meteor.Error(404, 'Should not be reachable during startup tests')
+ if (!studioId) throw new Meteor.Error(500, 'Missing studioId')
+
+ queueManager.mergeOrQueueJob(
+ getStudioQueueName(studioId),
+ jobName,
+ generateData as (existing: unknown | null) => unknown
+ )
+}
+
/**
* Queue a job for ingest
* @param jobName Job name
diff --git a/meteor/tsconfig-meteor.json b/meteor/tsconfig-meteor.json
index ab1b76a6c28..7d27cd7c2a1 100644
--- a/meteor/tsconfig-meteor.json
+++ b/meteor/tsconfig-meteor.json
@@ -4,7 +4,7 @@
{
"compilerOptions": {
/* Basic Options */
- "target": "es2018",
+ "target": "es2024",
"module": "es2015",
"lib": ["esnext"],
"allowJs": true,
diff --git a/meteor/yarn.lock b/meteor/yarn.lock
index b5f457f7f10..6dd8b18de8f 100644
--- a/meteor/yarn.lock
+++ b/meteor/yarn.lock
@@ -2,7 +2,7 @@
# Manual changes might be lost - proceed with caution!
__metadata:
- version: 8
+ version: 10
cacheKey: 10
"@aashutoshrathi/word-wrap@npm:^1.2.3":
@@ -23,149 +23,160 @@ __metadata:
languageName: node
linkType: hard
-"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.22.13, @babel/code-frame@npm:^7.27.1, @babel/code-frame@npm:^7.28.6, @babel/code-frame@npm:^7.29.0":
- version: 7.29.0
- resolution: "@babel/code-frame@npm:7.29.0"
+"@babel/code-frame@npm:7.26.2":
+ version: 7.26.2
+ resolution: "@babel/code-frame@npm:7.26.2"
dependencies:
- "@babel/helper-validator-identifier": "npm:^7.28.5"
+ "@babel/helper-validator-identifier": "npm:^7.25.9"
+ js-tokens: "npm:^4.0.0"
+ picocolors: "npm:^1.0.0"
+ checksum: 10/db2c2122af79d31ca916755331bb4bac96feb2b334cdaca5097a6b467fdd41963b89b14b6836a14f083de7ff887fc78fa1b3c10b14e743d33e12dbfe5ee3d223
+ languageName: node
+ linkType: hard
+
+"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.22.13, @babel/code-frame@npm:^7.27.1, @babel/code-frame@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/code-frame@npm:7.29.7"
+ dependencies:
+ "@babel/helper-validator-identifier": "npm:^7.29.7"
js-tokens: "npm:^4.0.0"
picocolors: "npm:^1.1.1"
- checksum: 10/199e15ff89007dd30675655eec52481cb245c9fdf4f81e4dc1f866603b0217b57aff25f5ffa0a95bbc8e31eb861695330cd7869ad52cc211aa63016320ef72c5
+ checksum: 10/84da552e51a55795a50b3589116edb2f9e368a647d266380683775f18effd9acd4521b0246bebd0b049a7f32af1f87b1e8475d3bcb665f876bd04ade8da99697
languageName: node
linkType: hard
-"@babel/compat-data@npm:^7.28.6":
- version: 7.29.0
- resolution: "@babel/compat-data@npm:7.29.0"
- checksum: 10/7f21beedb930ed8fbf7eabafc60e6e6521c1d905646bf1317a61b2163339157fe797efeb85962bf55136e166b01fd1a6b526a15974b92a8b877d564dcb6c9580
+"@babel/compat-data@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/compat-data@npm:7.29.7"
+ checksum: 10/ad2272714087f68970977f6e2b53597a8503fc9c3028c4a91686474bd77a707dd00903cdde4b73788972016d1bad4dc3fa4e5ff38e1ed8f1c3bde1095352973a
languageName: node
linkType: hard
-"@babel/core@npm:^7.23.9, @babel/core@npm:^7.27.4, @babel/core@npm:^7.29.0":
- version: 7.29.0
- resolution: "@babel/core@npm:7.29.0"
+"@babel/core@npm:^7.23.9, @babel/core@npm:^7.27.4, @babel/core@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/core@npm:7.29.7"
dependencies:
- "@babel/code-frame": "npm:^7.29.0"
- "@babel/generator": "npm:^7.29.0"
- "@babel/helper-compilation-targets": "npm:^7.28.6"
- "@babel/helper-module-transforms": "npm:^7.28.6"
- "@babel/helpers": "npm:^7.28.6"
- "@babel/parser": "npm:^7.29.0"
- "@babel/template": "npm:^7.28.6"
- "@babel/traverse": "npm:^7.29.0"
- "@babel/types": "npm:^7.29.0"
+ "@babel/code-frame": "npm:^7.29.7"
+ "@babel/generator": "npm:^7.29.7"
+ "@babel/helper-compilation-targets": "npm:^7.29.7"
+ "@babel/helper-module-transforms": "npm:^7.29.7"
+ "@babel/helpers": "npm:^7.29.7"
+ "@babel/parser": "npm:^7.29.7"
+ "@babel/template": "npm:^7.29.7"
+ "@babel/traverse": "npm:^7.29.7"
+ "@babel/types": "npm:^7.29.7"
"@jridgewell/remapping": "npm:^2.3.5"
convert-source-map: "npm:^2.0.0"
debug: "npm:^4.1.0"
gensync: "npm:^1.0.0-beta.2"
json5: "npm:^2.2.3"
semver: "npm:^6.3.1"
- checksum: 10/25f4e91688cdfbaf1365831f4f245b436cdaabe63d59389b75752013b8d61819ee4257101b52fc328b0546159fd7d0e74457ed7cf12c365fea54be4fb0a40229
+ checksum: 10/38e71cf81db790b0bb2a3a0c8140c2b1c87576b61dc6be676de4fab8c3be871af590a739e8c489fe8e8f9a8e5899fa11e35e59e9e09d40b259c6a675f2f98928
languageName: node
linkType: hard
-"@babel/generator@npm:^7.27.5, @babel/generator@npm:^7.29.0":
- version: 7.29.0
- resolution: "@babel/generator@npm:7.29.0"
+"@babel/generator@npm:^7.27.5, @babel/generator@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/generator@npm:7.29.7"
dependencies:
- "@babel/parser": "npm:^7.29.0"
- "@babel/types": "npm:^7.29.0"
+ "@babel/parser": "npm:^7.29.7"
+ "@babel/types": "npm:^7.29.7"
"@jridgewell/gen-mapping": "npm:^0.3.12"
"@jridgewell/trace-mapping": "npm:^0.3.28"
jsesc: "npm:^3.0.2"
- checksum: 10/e144a5d3db43207e0909702c60a01928be8751c3df12cb99e94249a618358acd773c99d33c2209a9049142034e13591ba0a7ce938da49d9f7709dc3814020d1e
+ checksum: 10/60fb0432ebeab791b2d68e5fc49da6f8e8b68bcc4751211ccf08ac0101e9dcaddefd0cbbbd488afb1c1517515c7c3e76f63d9b05d06deaeb008afd499488db9c
languageName: node
linkType: hard
-"@babel/helper-compilation-targets@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/helper-compilation-targets@npm:7.28.6"
+"@babel/helper-compilation-targets@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/helper-compilation-targets@npm:7.29.7"
dependencies:
- "@babel/compat-data": "npm:^7.28.6"
- "@babel/helper-validator-option": "npm:^7.27.1"
+ "@babel/compat-data": "npm:^7.29.7"
+ "@babel/helper-validator-option": "npm:^7.29.7"
browserslist: "npm:^4.24.0"
lru-cache: "npm:^5.1.1"
semver: "npm:^6.3.1"
- checksum: 10/f512a5aeee4dfc6ea8807f521d085fdca8d66a7d068a6dd5e5b37da10a6081d648c0bbf66791a081e4e8e6556758da44831b331540965dfbf4f5275f3d0a8788
+ checksum: 10/af9ed4299ad5cfbe48432a964f37cbbfc200bbeb0f8ba9cbc86448503fa929382d5161d32096274752230c9feb919c9ef595559498833da656fc6a8e24a62383
languageName: node
linkType: hard
-"@babel/helper-globals@npm:^7.28.0":
- version: 7.28.0
- resolution: "@babel/helper-globals@npm:7.28.0"
- checksum: 10/91445f7edfde9b65dcac47f4f858f68dc1661bf73332060ab67ad7cc7b313421099a2bfc4bda30c3db3842cfa1e86fffbb0d7b2c5205a177d91b22c8d7d9cb47
+"@babel/helper-globals@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/helper-globals@npm:7.29.7"
+ checksum: 10/e53203e87ae24a45f59639edea0c429bc3c63c6d74f1862fe60a35032d89478e7511d2f34855da0fcb65782668d72e59e93d1de5bc00121ba9bc1aa38f1f0ad3
languageName: node
linkType: hard
-"@babel/helper-module-imports@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/helper-module-imports@npm:7.28.6"
+"@babel/helper-module-imports@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/helper-module-imports@npm:7.29.7"
dependencies:
- "@babel/traverse": "npm:^7.28.6"
- "@babel/types": "npm:^7.28.6"
- checksum: 10/64b1380d74425566a3c288074d7ce4dea56d775d2d3325a3d4a6df1dca702916c1d268133b6f385de9ba5b822b3c6e2af5d3b11ac88e5453d5698d77264f0ec0
+ "@babel/traverse": "npm:^7.29.7"
+ "@babel/types": "npm:^7.29.7"
+ checksum: 10/28ec6f7efd99588d6eebfb25c9f1ccc34cb0cdb0839c4c0f08b3ec0105ccaefbe7e8b4f651f3f55a4f5c4fcb1d979bd32a9b8ee23e3e62163ea22aaa7ee0dfa1
languageName: node
linkType: hard
-"@babel/helper-module-transforms@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/helper-module-transforms@npm:7.28.6"
+"@babel/helper-module-transforms@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/helper-module-transforms@npm:7.29.7"
dependencies:
- "@babel/helper-module-imports": "npm:^7.28.6"
- "@babel/helper-validator-identifier": "npm:^7.28.5"
- "@babel/traverse": "npm:^7.28.6"
+ "@babel/helper-module-imports": "npm:^7.29.7"
+ "@babel/helper-validator-identifier": "npm:^7.29.7"
+ "@babel/traverse": "npm:^7.29.7"
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 10/2e421c7db743249819ee51e83054952709dc2e197c7d5d415b4bdddc718580195704bfcdf38544b3f674efc2eccd4d29a65d38678fc827ed3934a7690984cd8b
+ checksum: 10/33251b1fb44d726194a974a0078b1269511d130a2609357ff829b479e9e4dca96ecd5384c534a477095f665ffb01503d3e680699c2002e5b62e6ca1a272f1892
languageName: node
linkType: hard
-"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.28.6, @babel/helper-plugin-utils@npm:^7.8.0":
- version: 7.28.6
- resolution: "@babel/helper-plugin-utils@npm:7.28.6"
- checksum: 10/21c853bbc13dbdddf03309c9a0477270124ad48989e1ad6524b83e83a77524b333f92edd2caae645c5a7ecf264ec6d04a9ebe15aeb54c7f33c037b71ec521e4a
+"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.28.6, @babel/helper-plugin-utils@npm:^7.29.7, @babel/helper-plugin-utils@npm:^7.8.0":
+ version: 7.29.7
+ resolution: "@babel/helper-plugin-utils@npm:7.29.7"
+ checksum: 10/6d16929fe5c792bbc8e4d67e18d7c1be69d2f18992deaa3d94dc26541fec662e83cbeeaf7553c6867d068eb7aed4e0d5e3e137c1dd4d5bcfa286f8d772f1f457
languageName: node
linkType: hard
-"@babel/helper-string-parser@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/helper-string-parser@npm:7.27.1"
- checksum: 10/0ae29cc2005084abdae2966afdb86ed14d41c9c37db02c3693d5022fba9f5d59b011d039380b8e537c34daf117c549f52b452398f576e908fb9db3c7abbb3a00
+"@babel/helper-string-parser@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/helper-string-parser@npm:7.29.7"
+ checksum: 10/4d8ef0ef7105f3d9fe4361137c8f42e5b4c7a52b5380b962762f2a528a1ba89064e2c6236090716ce34b63707b886ae0ebf36b2c2fcc2851f27e652febfc3648
languageName: node
linkType: hard
-"@babel/helper-validator-identifier@npm:^7.28.5":
- version: 7.28.5
- resolution: "@babel/helper-validator-identifier@npm:7.28.5"
- checksum: 10/8e5d9b0133702cfacc7f368bf792f0f8ac0483794877c6dca5fcb73810ee138e27527701826fb58a40a004f3a5ec0a2f3c3dd5e326d262530b119918f3132ba7
+"@babel/helper-validator-identifier@npm:^7.25.9, @babel/helper-validator-identifier@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/helper-validator-identifier@npm:7.29.7"
+ checksum: 10/2efa42701eb05babf26dff3332109c9e5e1a3400a71fb9e68ee27af28235036a2a72c2494c04bdab3f909075f42a58b2e8271074372bc7f8e79ec02bd364d7a7
languageName: node
linkType: hard
-"@babel/helper-validator-option@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/helper-validator-option@npm:7.27.1"
- checksum: 10/db73e6a308092531c629ee5de7f0d04390835b21a263be2644276cb27da2384b64676cab9f22cd8d8dbd854c92b1d7d56fc8517cf0070c35d1c14a8c828b0903
+"@babel/helper-validator-option@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/helper-validator-option@npm:7.29.7"
+ checksum: 10/aeb6aa966f59300d3cc2fea7c68e1dfd7ad011fc10e535c8e2b2de3094b27c859428dc7220f16420350f8b1cde99da120b673be04bcb0c2f37b56258c96bed58
languageName: node
linkType: hard
-"@babel/helpers@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/helpers@npm:7.28.6"
+"@babel/helpers@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/helpers@npm:7.29.7"
dependencies:
- "@babel/template": "npm:^7.28.6"
- "@babel/types": "npm:^7.28.6"
- checksum: 10/213485cdfffc4deb81fc1bf2cefed61bc825049322590ef69690e223faa300a2a4d1e7d806c723bb1f1f538226b9b1b6c356ca94eb47fa7c6d9e9f251ee425e6
+ "@babel/template": "npm:^7.29.7"
+ "@babel/types": "npm:^7.29.7"
+ checksum: 10/b4d1ef12c19e896585c009ba29677839097ff04f8b11a2430d335c3fb6bd667b4f9e96a3b185a083fdde6b1137eabbbf2600c32425cb69cefc81d81d5cfe425d
languageName: node
linkType: hard
-"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.28.6, @babel/parser@npm:^7.29.0":
- version: 7.29.0
- resolution: "@babel/parser@npm:7.29.0"
+"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/parser@npm:7.29.7"
dependencies:
- "@babel/types": "npm:^7.29.0"
+ "@babel/types": "npm:^7.29.7"
bin:
parser: ./bin/babel-parser.js
- checksum: 10/b1576dca41074997a33ee740d87b330ae2e647f4b7da9e8d2abd3772b18385d303b0cee962b9b88425e0f30d58358dbb8d63792c1a2d005c823d335f6a029747
+ checksum: 10/da40c5928c95997b01aabe84fc3440881b8f20b866714fefa142961d37e82ffc03fbb9afed706f15f8a688278f95286ca0cea0d87ad6c77600f8c6c45d9824ee
languageName: node
linkType: hard
@@ -356,58 +367,58 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-modules-commonjs@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/plugin-transform-modules-commonjs@npm:7.28.6"
+"@babel/plugin-transform-modules-commonjs@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-modules-commonjs@npm:7.29.7"
dependencies:
- "@babel/helper-module-transforms": "npm:^7.28.6"
- "@babel/helper-plugin-utils": "npm:^7.28.6"
+ "@babel/helper-module-transforms": "npm:^7.29.7"
+ "@babel/helper-plugin-utils": "npm:^7.29.7"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10/ec6ea2958e778a7e0220f4a75cb5816cecddc6bd98efa10499fff7baabaa29a594d50d787a4ebf8a8ba66fefcf76ca2ded602be0b4554ae3317e53b3b3375b37
+ checksum: 10/7d816febde2d65bde5607ef355d751ba6c5a2d68ffe47c37b809e3ed2f829603751d4b5a5506f4299936d95fc73909243f9074f98dd32201277ec4131fc3ff33
languageName: node
linkType: hard
-"@babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.22.5, @babel/runtime@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/runtime@npm:7.28.6"
- checksum: 10/fbcd439cb74d4a681958eb064c509829e3f46d8a4bfaaf441baa81bb6733d1e680bccc676c813883d7741bcaada1d0d04b15aa320ef280b5734e2192b50decf9
+"@babel/runtime@npm:^7.28.6, @babel/runtime@npm:^7.29.2, @babel/runtime@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/runtime@npm:7.29.7"
+ checksum: 10/9883b4951787779fd382b121f22f92966d85f19434841f65fb00b2dfec232107e139683f47c6f252891826ad8ee18317b46c3a0e4819116a9885f47b46d7126a
languageName: node
linkType: hard
-"@babel/template@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/template@npm:7.28.6"
+"@babel/template@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/template@npm:7.29.7"
dependencies:
- "@babel/code-frame": "npm:^7.28.6"
- "@babel/parser": "npm:^7.28.6"
- "@babel/types": "npm:^7.28.6"
- checksum: 10/0ad6e32bf1e7e31bf6b52c20d15391f541ddd645cbd488a77fe537a15b280ee91acd3a777062c52e03eedbc2e1f41548791f6a3697c02476ec5daf49faa38533
+ "@babel/code-frame": "npm:^7.29.7"
+ "@babel/parser": "npm:^7.29.7"
+ "@babel/types": "npm:^7.29.7"
+ checksum: 10/da92f7a5b61e05d2fb3934a44f18cec6006ee3c595116c17a3b44cb9756ecd43205c7360dbfa326fa8f4d00aaeb9e777342a881070d11c2305e9c694bc3ca6ff
languageName: node
linkType: hard
-"@babel/traverse@npm:^7.28.6, @babel/traverse@npm:^7.29.0":
- version: 7.29.0
- resolution: "@babel/traverse@npm:7.29.0"
+"@babel/traverse@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/traverse@npm:7.29.7"
dependencies:
- "@babel/code-frame": "npm:^7.29.0"
- "@babel/generator": "npm:^7.29.0"
- "@babel/helper-globals": "npm:^7.28.0"
- "@babel/parser": "npm:^7.29.0"
- "@babel/template": "npm:^7.28.6"
- "@babel/types": "npm:^7.29.0"
+ "@babel/code-frame": "npm:^7.29.7"
+ "@babel/generator": "npm:^7.29.7"
+ "@babel/helper-globals": "npm:^7.29.7"
+ "@babel/parser": "npm:^7.29.7"
+ "@babel/template": "npm:^7.29.7"
+ "@babel/types": "npm:^7.29.7"
debug: "npm:^4.3.1"
- checksum: 10/3a0d0438f1ba9fed4fbe1706ea598a865f9af655a16ca9517ab57bda526e224569ca1b980b473fb68feea5e08deafbbf2cf9febb941f92f2d2533310c3fc4abc
+ checksum: 10/ce24086a7dd8c408cbdb159437d3c8e02464a6d32b320d884fa742e2c5a3344b9342a923c7a371fc1789b4d82a59972a7008b5d8bbc1bc0c5ae42a39b28dc7f6
languageName: node
linkType: hard
-"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.27.3, @babel/types@npm:^7.28.6, @babel/types@npm:^7.29.0":
- version: 7.29.0
- resolution: "@babel/types@npm:7.29.0"
+"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.27.3, @babel/types@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/types@npm:7.29.7"
dependencies:
- "@babel/helper-string-parser": "npm:^7.27.1"
- "@babel/helper-validator-identifier": "npm:^7.28.5"
- checksum: 10/bfc2b211210f3894dcd7e6a33b2d1c32c93495dc1e36b547376aa33441abe551ab4bc1640d4154ee2acd8e46d3bbc925c7224caae02fcaf0e6a771e97fccc661
+ "@babel/helper-string-parser": "npm:^7.29.7"
+ "@babel/helper-validator-identifier": "npm:^7.29.7"
+ checksum: 10/bd4f5635db1057bd0abeebf93eb3ae38399e152271cea8dce8288350f0afa13ed3e2db2e16e22bd3303068890eec18965a83420539afbe0dde31432b4cf9636d
languageName: node
linkType: hard
@@ -418,6 +429,13 @@ __metadata:
languageName: node
linkType: hard
+"@borewit/text-codec@npm:^0.2.1":
+ version: 0.2.2
+ resolution: "@borewit/text-codec@npm:0.2.2"
+ checksum: 10/c971790a72d9e766286db71f68613d1bac3b8bd9eaba52fbf18a8b17903c095968ed5369efdba378751926440aab93f3dd17c89242ef20525808ddced22d49b8
+ languageName: node
+ linkType: hard
+
"@colors/colors@npm:1.6.0, @colors/colors@npm:^1.6.0":
version: 1.6.0
resolution: "@colors/colors@npm:1.6.0"
@@ -425,6 +443,48 @@ __metadata:
languageName: node
linkType: hard
+"@conventional-changelog/git-client@npm:3.1.0, @conventional-changelog/git-client@npm:^3.1.0":
+ version: 3.1.0
+ resolution: "@conventional-changelog/git-client@npm:3.1.0"
+ dependencies:
+ "@simple-libs/child-process-utils": "npm:^2.0.0"
+ "@simple-libs/stream-utils": "npm:^2.0.0"
+ semver: "npm:^7.5.2"
+ peerDependencies:
+ conventional-commits-filter: ^6.0.1
+ conventional-commits-parser: ^7.0.1
+ peerDependenciesMeta:
+ conventional-commits-filter:
+ optional: true
+ conventional-commits-parser:
+ optional: true
+ checksum: 10/41e6dc3e24d47eae5355aa42f54cecade0fb103772cd917e9df13bfc667877c1cc94a9ad9127bb3605d35783ce72d5b62715d7f60b7c9259513ea0d2628d3107
+ languageName: node
+ linkType: hard
+
+"@conventional-changelog/template@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "@conventional-changelog/template@npm:1.2.1"
+ checksum: 10/be65738f81cb232a794fc0ab2bbe9af2e32896e0c731fe8bdf8a2ab8dabdcc2645937d1025d6f7ad8878c6a51be1da9cab71e287ac476b8e07fb0b8cb7811425
+ languageName: node
+ linkType: hard
+
+"@croct/json5-parser@npm:^0.2.2":
+ version: 0.2.2
+ resolution: "@croct/json5-parser@npm:0.2.2"
+ dependencies:
+ "@croct/json": "npm:^2.1.0"
+ checksum: 10/27883b0c32503962a3d353829280b9e92f211cc90a485436a9625ff08ad907f936ca1662dc6056a3cea0c256c9d942395f3a9d4d4ae994817e085ae2ca352321
+ languageName: node
+ linkType: hard
+
+"@croct/json@npm:^2.1.0":
+ version: 2.1.0
+ resolution: "@croct/json@npm:2.1.0"
+ checksum: 10/8ccd333d533bb8d9cfee52a87473f37a33ad76794cebed47281317095adb0bdcc01f795f7adb56aa55999eb246155c2abfba381aaee4aab1e05ace34db0e5ecf
+ languageName: node
+ linkType: hard
+
"@dabh/diagnostics@npm:^2.0.8":
version: 2.0.8
resolution: "@dabh/diagnostics@npm:2.0.8"
@@ -436,6 +496,13 @@ __metadata:
languageName: node
linkType: hard
+"@discoveryjs/json-ext@npm:0.5.7, @discoveryjs/json-ext@npm:^0.5.7":
+ version: 0.5.7
+ resolution: "@discoveryjs/json-ext@npm:0.5.7"
+ checksum: 10/b95682a852448e8ef50d6f8e3b7ba288aab3fd98a2bafbe46881a3db0c6e7248a2debe9e1ee0d4137c521e4743ca5bbcb1c0765c9d7b3e0ef53231506fec42b4
+ languageName: node
+ linkType: hard
+
"@elastic/ecs-helpers@npm:^2.1.1":
version: 2.1.1
resolution: "@elastic/ecs-helpers@npm:2.1.1"
@@ -452,35 +519,35 @@ __metadata:
languageName: node
linkType: hard
-"@emnapi/core@npm:^1.4.3":
- version: 1.8.1
- resolution: "@emnapi/core@npm:1.8.1"
+"@emnapi/core@npm:^1.4.3, @emnapi/core@npm:^1.5.0":
+ version: 1.10.0
+ resolution: "@emnapi/core@npm:1.10.0"
dependencies:
- "@emnapi/wasi-threads": "npm:1.1.0"
+ "@emnapi/wasi-threads": "npm:1.2.1"
tslib: "npm:^2.4.0"
- checksum: 10/904ea60c91fc7d8aeb4a8f2c433b8cfb47c50618f2b6f37429fc5093c857c6381c60628a5cfbc3a7b0d75b0a288f21d4ed2d4533e82f92c043801ef255fd6a5c
+ checksum: 10/d32f386084e64deaf2609aabb8295d1ad5af6144d0f46d2060b76cc53f1f3b486df54bec9b0f33c37d85a3822e1193ebcd4e3deb4a5f0e4cd650aa2ffc631715
languageName: node
linkType: hard
-"@emnapi/runtime@npm:^1.4.3":
- version: 1.8.1
- resolution: "@emnapi/runtime@npm:1.8.1"
+"@emnapi/runtime@npm:^1.4.3, @emnapi/runtime@npm:^1.5.0":
+ version: 1.10.0
+ resolution: "@emnapi/runtime@npm:1.10.0"
dependencies:
tslib: "npm:^2.4.0"
- checksum: 10/26725e202d4baefdc4a6ba770f703dfc80825a27c27a08c22bac1e1ce6f8f75c47b4fe9424d9b63239463c33ef20b650f08d710da18dfa1164a95e5acb865dba
+ checksum: 10/d21083d07fa0c2da171c142e78ef986b66b07d45b06accc0bcaf49fcc61bb4dbc10e1c1760813070165b9f49b054376a931045347f21c0f42ff1eb2d2040faac
languageName: node
linkType: hard
-"@emnapi/wasi-threads@npm:1.1.0":
- version: 1.1.0
- resolution: "@emnapi/wasi-threads@npm:1.1.0"
+"@emnapi/wasi-threads@npm:1.2.1":
+ version: 1.2.1
+ resolution: "@emnapi/wasi-threads@npm:1.2.1"
dependencies:
tslib: "npm:^2.4.0"
- checksum: 10/0d557e75262d2f4c95cb2a456ba0785ef61f919ce488c1d76e5e3acfd26e00c753ef928cd80068363e0c166ba8cc0141305daf0f81aad5afcd421f38f11e0f4e
+ checksum: 10/57cd4292be81c05d26aa886d68a9e4c449ff666e8503fed6463dfc6b64a4e4213f03c152d53296b7cda32840271e38cd33347332070658f01befeb9bf4e59f36
languageName: node
linkType: hard
-"@eslint-community/eslint-utils@npm:^4.1.2, @eslint-community/eslint-utils@npm:^4.4.0, @eslint-community/eslint-utils@npm:^4.4.1, @eslint-community/eslint-utils@npm:^4.8.0":
+"@eslint-community/eslint-utils@npm:^4.1.2, @eslint-community/eslint-utils@npm:^4.5.0, @eslint-community/eslint-utils@npm:^4.8.0, @eslint-community/eslint-utils@npm:^4.9.1":
version: 4.9.1
resolution: "@eslint-community/eslint-utils@npm:4.9.1"
dependencies:
@@ -491,21 +558,21 @@ __metadata:
languageName: node
linkType: hard
-"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.11.0, @eslint-community/regexpp@npm:^4.12.1":
- version: 4.12.1
- resolution: "@eslint-community/regexpp@npm:4.12.1"
- checksum: 10/c08f1dd7dd18fbb60bdd0d85820656d1374dd898af9be7f82cb00451313402a22d5e30569c150315b4385907cdbca78c22389b2a72ab78883b3173be317620cc
+"@eslint-community/regexpp@npm:^4.11.0, @eslint-community/regexpp@npm:^4.12.1, @eslint-community/regexpp@npm:^4.12.2":
+ version: 4.12.2
+ resolution: "@eslint-community/regexpp@npm:4.12.2"
+ checksum: 10/049b280fddf71dd325514e0a520024969431dc3a8b02fa77476e6820e9122f28ab4c9168c11821f91a27982d2453bcd7a66193356ea84e84fb7c8d793be1ba0c
languageName: node
linkType: hard
-"@eslint/config-array@npm:^0.21.1":
- version: 0.21.1
- resolution: "@eslint/config-array@npm:0.21.1"
+"@eslint/config-array@npm:^0.21.2":
+ version: 0.21.2
+ resolution: "@eslint/config-array@npm:0.21.2"
dependencies:
"@eslint/object-schema": "npm:^2.1.7"
debug: "npm:^4.3.1"
- minimatch: "npm:^3.1.2"
- checksum: 10/6eaa0435972f735ce52d581f355a0b616e50a9b8a73304a7015398096e252798b9b3b968a67b524eefb0fdeacc57c4d960f0ec6432abe1c1e24be815b88c5d18
+ minimatch: "npm:^3.1.5"
+ checksum: 10/148477ba995cf57fc725601916d5a7914aa249112d8bec2c3ac9122e2b2f540e6ef013ff4f6785346a4b565f09b20db127fa6f7322f5ffbdb3f1f8d2078a531c
languageName: node
linkType: hard
@@ -527,27 +594,27 @@ __metadata:
languageName: node
linkType: hard
-"@eslint/eslintrc@npm:^3.3.1":
- version: 3.3.3
- resolution: "@eslint/eslintrc@npm:3.3.3"
+"@eslint/eslintrc@npm:^3.3.6":
+ version: 3.3.6
+ resolution: "@eslint/eslintrc@npm:3.3.6"
dependencies:
- ajv: "npm:^6.12.4"
+ ajv: "npm:^6.14.0"
debug: "npm:^4.3.2"
espree: "npm:^10.0.1"
globals: "npm:^14.0.0"
ignore: "npm:^5.2.0"
import-fresh: "npm:^3.2.1"
- js-yaml: "npm:^4.1.1"
- minimatch: "npm:^3.1.2"
+ js-yaml: "npm:^4.3.0"
+ minimatch: "npm:^3.1.5"
strip-json-comments: "npm:^3.1.1"
- checksum: 10/b586a364ff15ce1b68993aefc051ca330b1fece15fb5baf4a708d00113f9a14895cffd84a5f24c5a97bd4b4321130ab2314f90aa462a250f6b859c2da2cba1f3
+ checksum: 10/8d1d501069faf7c1c73e37181ec403dd2d1509f8da85f226531f6a7fdd9a9326fc6d2ea2e8192515992578cf9e7ed87f9d7ce3f1bfc6d0f0e77796d18e0e8ef6
languageName: node
linkType: hard
-"@eslint/js@npm:9.39.2":
- version: 9.39.2
- resolution: "@eslint/js@npm:9.39.2"
- checksum: 10/6b7f676746f3111b5d1b23715319212ab9297868a0fa9980d483c3da8965d5841673aada2d5653e85a3f7156edee0893a7ae7035211b4efdcb2848154bb947f2
+"@eslint/js@npm:9.39.5":
+ version: 9.39.5
+ resolution: "@eslint/js@npm:9.39.5"
+ checksum: 10/042d522f28da10ab205f368a94b620334418eb13a5226e50f7edd03dbe26809eb477d0b7a4dc3968b43a98f6ce594f6c03731214c3e0386fd5bcb74fdb9df64c
languageName: node
linkType: hard
@@ -568,15 +635,6 @@ __metadata:
languageName: node
linkType: hard
-"@gulpjs/to-absolute-glob@npm:^4.0.0":
- version: 4.0.0
- resolution: "@gulpjs/to-absolute-glob@npm:4.0.0"
- dependencies:
- is-negated-glob: "npm:^1.0.0"
- checksum: 10/30ec7825064422b6f02c1975ab6c779ff73409411c37bec2e984262459935afd196c1dbe960075e914967a047743ccf726fce3d3ebb4417ca2e3c34538fbceb8
- languageName: node
- linkType: hard
-
"@humanfs/core@npm:^0.19.1":
version: 0.19.1
resolution: "@humanfs/core@npm:0.19.1"
@@ -615,10 +673,244 @@ __metadata:
languageName: node
linkType: hard
-"@hutson/parse-repository-url@npm:^3.0.0":
- version: 3.0.2
- resolution: "@hutson/parse-repository-url@npm:3.0.2"
- checksum: 10/dae0656f2e77315a3027ab9ca438ed344bf78a5fda7b145f65a1fface20dfb17e94e1d31e146c8b76de4657c21020aabc72dc53b53941c9f5fe2c27416559283
+"@inquirer/ansi@npm:^2.0.7":
+ version: 2.0.7
+ resolution: "@inquirer/ansi@npm:2.0.7"
+ checksum: 10/ae4ff228412f1f67d78aa9a7410e07e692eeb7c9b75034825f1039898821b02505dfe934be53d6ee4ce5bde9e7ff6b4ce7547bacc1c9aa441396cb9b99717e0f
+ languageName: node
+ linkType: hard
+
+"@inquirer/checkbox@npm:^5.2.1":
+ version: 5.2.1
+ resolution: "@inquirer/checkbox@npm:5.2.1"
+ dependencies:
+ "@inquirer/ansi": "npm:^2.0.7"
+ "@inquirer/core": "npm:^11.2.1"
+ "@inquirer/figures": "npm:^2.0.7"
+ "@inquirer/type": "npm:^4.0.7"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10/8a4b9a336a48c32db0403c56b228351210a3e8d5706032274e8cc47579f2b8a6a9b2cabe11a6aa96694f1e6bac5364fd9cdafe1d67ad65eafb5e6edc696fd534
+ languageName: node
+ linkType: hard
+
+"@inquirer/confirm@npm:^6.1.1":
+ version: 6.1.1
+ resolution: "@inquirer/confirm@npm:6.1.1"
+ dependencies:
+ "@inquirer/core": "npm:^11.2.1"
+ "@inquirer/type": "npm:^4.0.7"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10/631d35403438949abe073ba6b7823682d4bd995a582226df0c8d18fd2b069a42e415bc40988fd10b138984701d585da32086da6d90814ec50eaa8a2778dc6bfb
+ languageName: node
+ linkType: hard
+
+"@inquirer/core@npm:^11.2.1":
+ version: 11.2.1
+ resolution: "@inquirer/core@npm:11.2.1"
+ dependencies:
+ "@inquirer/ansi": "npm:^2.0.7"
+ "@inquirer/figures": "npm:^2.0.7"
+ "@inquirer/type": "npm:^4.0.7"
+ cli-width: "npm:^4.1.0"
+ fast-wrap-ansi: "npm:^0.2.0"
+ mute-stream: "npm:^3.0.0"
+ signal-exit: "npm:^4.1.0"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10/687c2ee50985a8eb3142c902e99dd888176e66af2eed0781238e7b4b1f327737d4db053345a20b74c7fefa47da539238eea0afcd1e59e577409ca5ead94aa6d1
+ languageName: node
+ linkType: hard
+
+"@inquirer/editor@npm:^5.2.2":
+ version: 5.2.2
+ resolution: "@inquirer/editor@npm:5.2.2"
+ dependencies:
+ "@inquirer/core": "npm:^11.2.1"
+ "@inquirer/external-editor": "npm:^3.0.3"
+ "@inquirer/type": "npm:^4.0.7"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10/cc375c8f9f332df47f36a998dcc9107cd97e0e26577b7ba1413d6cc84ee1790b232b0667b37e3f0f53bf52c004bf11d216a743f816b6f26d25dd584462a1e34c
+ languageName: node
+ linkType: hard
+
+"@inquirer/expand@npm:^5.1.1":
+ version: 5.1.1
+ resolution: "@inquirer/expand@npm:5.1.1"
+ dependencies:
+ "@inquirer/core": "npm:^11.2.1"
+ "@inquirer/type": "npm:^4.0.7"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10/a93b230bcddb4387a720f12615e8414999427e132110122f6ab9273a684fa0917bea946b35cb4a4e16d9cc7859f78b01e39656e140aed5885bc96212a3668857
+ languageName: node
+ linkType: hard
+
+"@inquirer/external-editor@npm:^3.0.3":
+ version: 3.0.3
+ resolution: "@inquirer/external-editor@npm:3.0.3"
+ dependencies:
+ chardet: "npm:^2.1.1"
+ iconv-lite: "npm:^0.7.2"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10/7d20388ff3fc051684c5ca07c8247db2ab73b706f0a3c710197ffe96685965bdca9a065df6db497f2db30255fb5b6c5998ccc39192f318159522d2704fc29817
+ languageName: node
+ linkType: hard
+
+"@inquirer/figures@npm:^2.0.7":
+ version: 2.0.7
+ resolution: "@inquirer/figures@npm:2.0.7"
+ checksum: 10/145d74307b17712807ccd561787ecd1a72d574165b4d07a146e0d815f8e0320ffd39fb07f81a33910a4d2f0e098862b35b87614c4d3da740a29fa42c38dcb768
+ languageName: node
+ linkType: hard
+
+"@inquirer/input@npm:^5.1.2":
+ version: 5.1.2
+ resolution: "@inquirer/input@npm:5.1.2"
+ dependencies:
+ "@inquirer/core": "npm:^11.2.1"
+ "@inquirer/type": "npm:^4.0.7"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10/ff8f5112559b778162c6f93bb57c967cd829b7c32fc8621febf41e3b817fb8538903e1afa33dcb7c942da1de8db216173aca01fd41b455b6350fc036b302becd
+ languageName: node
+ linkType: hard
+
+"@inquirer/number@npm:^4.1.1":
+ version: 4.1.1
+ resolution: "@inquirer/number@npm:4.1.1"
+ dependencies:
+ "@inquirer/core": "npm:^11.2.1"
+ "@inquirer/type": "npm:^4.0.7"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10/ee99f233596bc8e7b191d6f844f4a48057e6f3615884f1dbdb816c36ea3d6a5685db6ad3b8efc9bab6ae2397e202d8b49a53a99b96f63f4d6e42d660c318db23
+ languageName: node
+ linkType: hard
+
+"@inquirer/password@npm:^5.1.1":
+ version: 5.1.1
+ resolution: "@inquirer/password@npm:5.1.1"
+ dependencies:
+ "@inquirer/ansi": "npm:^2.0.7"
+ "@inquirer/core": "npm:^11.2.1"
+ "@inquirer/type": "npm:^4.0.7"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10/b0b9994de1b49096cc1bf47910b122dd1704cd12434de304081f09090f42d83af699c202e5b8b0c12eb5f87acb7cc4c62a6d97a8781aefe7352b4695eb2b242f
+ languageName: node
+ linkType: hard
+
+"@inquirer/prompts@npm:^8.5.2":
+ version: 8.5.2
+ resolution: "@inquirer/prompts@npm:8.5.2"
+ dependencies:
+ "@inquirer/checkbox": "npm:^5.2.1"
+ "@inquirer/confirm": "npm:^6.1.1"
+ "@inquirer/editor": "npm:^5.2.2"
+ "@inquirer/expand": "npm:^5.1.1"
+ "@inquirer/input": "npm:^5.1.2"
+ "@inquirer/number": "npm:^4.1.1"
+ "@inquirer/password": "npm:^5.1.1"
+ "@inquirer/rawlist": "npm:^5.3.1"
+ "@inquirer/search": "npm:^4.2.1"
+ "@inquirer/select": "npm:^5.2.1"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10/af39efea141bf193c4ffcb9ccf3ac371e9c0beeb160b281137966a179eb1f86e7aced0b6e8a4debfeb8f52a25381eaf13a14ec0c5600d0384e59115d6c5c96b3
+ languageName: node
+ linkType: hard
+
+"@inquirer/rawlist@npm:^5.3.1":
+ version: 5.3.1
+ resolution: "@inquirer/rawlist@npm:5.3.1"
+ dependencies:
+ "@inquirer/core": "npm:^11.2.1"
+ "@inquirer/type": "npm:^4.0.7"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10/4443f2041cd2cbdf0d730ac0eede50dd912f248115f06f5e80d9d965de5ad071bbcb412c2b17b80abd847ba26090fe52050b44475207a3e99587ffe8e8f03335
+ languageName: node
+ linkType: hard
+
+"@inquirer/search@npm:^4.2.1":
+ version: 4.2.1
+ resolution: "@inquirer/search@npm:4.2.1"
+ dependencies:
+ "@inquirer/core": "npm:^11.2.1"
+ "@inquirer/figures": "npm:^2.0.7"
+ "@inquirer/type": "npm:^4.0.7"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10/8e5d53506649102dd991d594a5267c6ace473b4875ea2bd0b6f1c3f5b8191d23889f35db6dd986daeb52f0ccdb399229a05b7d94a6cf99bdc56c1173e7e3b6e6
+ languageName: node
+ linkType: hard
+
+"@inquirer/select@npm:^5.2.1":
+ version: 5.2.1
+ resolution: "@inquirer/select@npm:5.2.1"
+ dependencies:
+ "@inquirer/ansi": "npm:^2.0.7"
+ "@inquirer/core": "npm:^11.2.1"
+ "@inquirer/figures": "npm:^2.0.7"
+ "@inquirer/type": "npm:^4.0.7"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10/3ceca17d780dff006678bbcde172de086c38026ce1d209a38b881cbecc6b7e35b1d6871a02916f8f1ba8dca4f48218ffe05bd838b7fe3de5614e4fddc78dccf8
+ languageName: node
+ linkType: hard
+
+"@inquirer/type@npm:^4.0.7":
+ version: 4.0.7
+ resolution: "@inquirer/type@npm:4.0.7"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10/97769b74264a2575c12c231e3d4acf98b4ae237fc987cec6b459f88b907b1729623403b8d9fe0cf2ca21743114777c64e3031fbeff72e9da37fbf4c8985f587f
languageName: node
linkType: hard
@@ -665,110 +957,110 @@ __metadata:
languageName: node
linkType: hard
-"@jest/console@npm:30.2.0":
- version: 30.2.0
- resolution: "@jest/console@npm:30.2.0"
+"@jest/console@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/console@npm:30.4.1"
dependencies:
- "@jest/types": "npm:30.2.0"
+ "@jest/types": "npm:30.4.1"
"@types/node": "npm:*"
chalk: "npm:^4.1.2"
- jest-message-util: "npm:30.2.0"
- jest-util: "npm:30.2.0"
+ jest-message-util: "npm:30.4.1"
+ jest-util: "npm:30.4.1"
slash: "npm:^3.0.0"
- checksum: 10/7cda9793962afa5c7fcfdde0ff5012694683b17941ee3c6a55ea9fd9a02f1c51ec4b4c767b867e1226f85a26af1d0f0d72c6a344e34c5bc4300312ebffd6e50b
+ checksum: 10/4eb463d29654c20716f5f9cde43e5d958cb3b9234477df57da5b3814c3f1a4a0ab611a8eaf4b5abc146190a012584d7025f445f3560ed62acd843fc95c0a0e65
languageName: node
linkType: hard
-"@jest/core@npm:30.2.0":
- version: 30.2.0
- resolution: "@jest/core@npm:30.2.0"
+"@jest/core@npm:30.4.2":
+ version: 30.4.2
+ resolution: "@jest/core@npm:30.4.2"
dependencies:
- "@jest/console": "npm:30.2.0"
- "@jest/pattern": "npm:30.0.1"
- "@jest/reporters": "npm:30.2.0"
- "@jest/test-result": "npm:30.2.0"
- "@jest/transform": "npm:30.2.0"
- "@jest/types": "npm:30.2.0"
+ "@jest/console": "npm:30.4.1"
+ "@jest/pattern": "npm:30.4.0"
+ "@jest/reporters": "npm:30.4.1"
+ "@jest/test-result": "npm:30.4.1"
+ "@jest/transform": "npm:30.4.1"
+ "@jest/types": "npm:30.4.1"
"@types/node": "npm:*"
ansi-escapes: "npm:^4.3.2"
chalk: "npm:^4.1.2"
ci-info: "npm:^4.2.0"
exit-x: "npm:^0.2.2"
+ fast-json-stable-stringify: "npm:^2.1.0"
graceful-fs: "npm:^4.2.11"
- jest-changed-files: "npm:30.2.0"
- jest-config: "npm:30.2.0"
- jest-haste-map: "npm:30.2.0"
- jest-message-util: "npm:30.2.0"
- jest-regex-util: "npm:30.0.1"
- jest-resolve: "npm:30.2.0"
- jest-resolve-dependencies: "npm:30.2.0"
- jest-runner: "npm:30.2.0"
- jest-runtime: "npm:30.2.0"
- jest-snapshot: "npm:30.2.0"
- jest-util: "npm:30.2.0"
- jest-validate: "npm:30.2.0"
- jest-watcher: "npm:30.2.0"
- micromatch: "npm:^4.0.8"
- pretty-format: "npm:30.2.0"
+ jest-changed-files: "npm:30.4.1"
+ jest-config: "npm:30.4.2"
+ jest-haste-map: "npm:30.4.1"
+ jest-message-util: "npm:30.4.1"
+ jest-regex-util: "npm:30.4.0"
+ jest-resolve: "npm:30.4.1"
+ jest-resolve-dependencies: "npm:30.4.2"
+ jest-runner: "npm:30.4.2"
+ jest-runtime: "npm:30.4.2"
+ jest-snapshot: "npm:30.4.1"
+ jest-util: "npm:30.4.1"
+ jest-validate: "npm:30.4.1"
+ jest-watcher: "npm:30.4.1"
+ pretty-format: "npm:30.4.1"
slash: "npm:^3.0.0"
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
peerDependenciesMeta:
node-notifier:
optional: true
- checksum: 10/6763bb1efd937778f009821cd94c3705d3c31a156258a224b8745c1e0887976683f5413745ffb361b526f0fa2692e36aaa963aa197cc77ba932cff9d6d28af9d
+ checksum: 10/ecc695392685ab56c6df5d29d6f7927141071d8f3f75e5f7c7664f0faded1307caf5daf051074252d5ddb9546bf2bfe3b0c63ca81fe6238dc34e1bb5f8a7a261
languageName: node
linkType: hard
-"@jest/diff-sequences@npm:30.0.1":
- version: 30.0.1
- resolution: "@jest/diff-sequences@npm:30.0.1"
- checksum: 10/0ddb7c7ba92d6057a2ee51a9cfc2155b77cca707fe959167466ea02dcb0687018cc3c22b9622f25f3a417d6ad370e2d4dcfedf9f1410dc9c02954a7484423cc7
+"@jest/diff-sequences@npm:30.4.0":
+ version: 30.4.0
+ resolution: "@jest/diff-sequences@npm:30.4.0"
+ checksum: 10/65c27937c10a7157899dad5d176806104286f9d55464f318955a0cee98db8aed6b8f70ad4aee7133468087146422cdd391d49b1e101ec543db3283ee4eb59c06
languageName: node
linkType: hard
-"@jest/environment@npm:30.2.0":
- version: 30.2.0
- resolution: "@jest/environment@npm:30.2.0"
+"@jest/environment@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/environment@npm:30.4.1"
dependencies:
- "@jest/fake-timers": "npm:30.2.0"
- "@jest/types": "npm:30.2.0"
+ "@jest/fake-timers": "npm:30.4.1"
+ "@jest/types": "npm:30.4.1"
"@types/node": "npm:*"
- jest-mock: "npm:30.2.0"
- checksum: 10/e168a4ff328980eb9fde5e43aea80807fd0b2dbd4579ae8f68a03415a1e58adf5661db298054fa2351c7cb2b5a74bf67b8ab996656cf5927d0b0d0b6e2c2966b
+ jest-mock: "npm:30.4.1"
+ checksum: 10/c25946fee29604f5aa24ea059bc3cc7bc4c8cdaf26db1ed6ffa4f28e37f5193cc4e868650c807d89caff4123e44d07b58200d4cb5960ebdb7d66531509d76359
languageName: node
linkType: hard
-"@jest/expect-utils@npm:30.2.0":
- version: 30.2.0
- resolution: "@jest/expect-utils@npm:30.2.0"
+"@jest/expect-utils@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/expect-utils@npm:30.4.1"
dependencies:
"@jest/get-type": "npm:30.1.0"
- checksum: 10/f2442f1bceb3411240d0f16fd0074377211b4373d3b8b2dc28929e861b6527a6deb403a362c25afa511d933cda4dfbdc98d4a08eeb51ee4968f7cb0299562349
+ checksum: 10/3f0337ec791d669cacd07594521f2da71b956712dfd0c0007253dd5e886ef640df510af1357878a80ac56f09d3db9fd68e3db66959f0fdb3add5f551dd7e0f35
languageName: node
linkType: hard
-"@jest/expect@npm:30.2.0":
- version: 30.2.0
- resolution: "@jest/expect@npm:30.2.0"
+"@jest/expect@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/expect@npm:30.4.1"
dependencies:
- expect: "npm:30.2.0"
- jest-snapshot: "npm:30.2.0"
- checksum: 10/d950d95a64d5c6a39d56171dabb8dbe59423096231bb4f21d8ee0019878e6626701ac9d782803dc2589e2799ed39704031f818533f8a3e571b57032eafa85d12
+ expect: "npm:30.4.1"
+ jest-snapshot: "npm:30.4.1"
+ checksum: 10/40ae0317a3590ced7a7fd21c49e6b1af6b122e6a83822e643af83f02034dfed6485248cae08d6bcf9380039ba3824ac56db18478712c64ddf5f709ee23cf30cd
languageName: node
linkType: hard
-"@jest/fake-timers@npm:30.2.0":
- version: 30.2.0
- resolution: "@jest/fake-timers@npm:30.2.0"
+"@jest/fake-timers@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/fake-timers@npm:30.4.1"
dependencies:
- "@jest/types": "npm:30.2.0"
- "@sinonjs/fake-timers": "npm:^13.0.0"
+ "@jest/types": "npm:30.4.1"
+ "@sinonjs/fake-timers": "npm:^15.4.0"
"@types/node": "npm:*"
- jest-message-util: "npm:30.2.0"
- jest-mock: "npm:30.2.0"
- jest-util: "npm:30.2.0"
- checksum: 10/c2df66576ba8049b07d5f239777243e21fcdaa09a446be1e55fac709d6273e2a926c1562e0372c3013142557ed9d386381624023549267a667b6e1b656e37fe6
+ jest-message-util: "npm:30.4.1"
+ jest-mock: "npm:30.4.1"
+ jest-util: "npm:30.4.1"
+ checksum: 10/bc7aff23548395d6e7957bc24f699f921a9616f2357ab49616b0468c7b5e94e6ac4cbdd45d306f1a5d7f72e2a055294f52be3666e4c1da7c137874c5b226e1c6
languageName: node
linkType: hard
@@ -779,52 +1071,52 @@ __metadata:
languageName: node
linkType: hard
-"@jest/globals@npm:30.2.0":
- version: 30.2.0
- resolution: "@jest/globals@npm:30.2.0"
+"@jest/globals@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/globals@npm:30.4.1"
dependencies:
- "@jest/environment": "npm:30.2.0"
- "@jest/expect": "npm:30.2.0"
- "@jest/types": "npm:30.2.0"
- jest-mock: "npm:30.2.0"
- checksum: 10/d4a331d3847cebb3acefe120350d8a6bb5517c1403de7cd2b4dc67be425f37ba0511beee77d6837b4da2d93a25a06d6f829ad7837da365fae45e1da57523525c
+ "@jest/environment": "npm:30.4.1"
+ "@jest/expect": "npm:30.4.1"
+ "@jest/types": "npm:30.4.1"
+ jest-mock: "npm:30.4.1"
+ checksum: 10/5fe04b9c3b97f0061e4464201ee0dd674dd958843eb80542791d1c576c51f12aaa3f3b369e136d5fd3f8c716f9c9bbfbb76491a3cbc3c4efb3cc71063f909132
languageName: node
linkType: hard
-"@jest/pattern@npm:30.0.1":
- version: 30.0.1
- resolution: "@jest/pattern@npm:30.0.1"
+"@jest/pattern@npm:30.4.0":
+ version: 30.4.0
+ resolution: "@jest/pattern@npm:30.4.0"
dependencies:
"@types/node": "npm:*"
- jest-regex-util: "npm:30.0.1"
- checksum: 10/afd03b4d3eadc9c9970cf924955dee47984a7e767901fe6fa463b17b246f0ddeec07b3e82c09715c54bde3c8abb92074160c0d79967bd23778724f184e7f5b7b
+ jest-regex-util: "npm:30.4.0"
+ checksum: 10/4fb1db0e586713708d2fcd79059315600978608483ef2d80e04a0a59b20b0d8de0d3f47cad950ff90bfb9ea3cb788709ee3d1eb225734e4dbf1c4b743c93d204
languageName: node
linkType: hard
-"@jest/reporters@npm:30.2.0":
- version: 30.2.0
- resolution: "@jest/reporters@npm:30.2.0"
+"@jest/reporters@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/reporters@npm:30.4.1"
dependencies:
"@bcoe/v8-coverage": "npm:^0.2.3"
- "@jest/console": "npm:30.2.0"
- "@jest/test-result": "npm:30.2.0"
- "@jest/transform": "npm:30.2.0"
- "@jest/types": "npm:30.2.0"
+ "@jest/console": "npm:30.4.1"
+ "@jest/test-result": "npm:30.4.1"
+ "@jest/transform": "npm:30.4.1"
+ "@jest/types": "npm:30.4.1"
"@jridgewell/trace-mapping": "npm:^0.3.25"
"@types/node": "npm:*"
chalk: "npm:^4.1.2"
collect-v8-coverage: "npm:^1.0.2"
exit-x: "npm:^0.2.2"
- glob: "npm:^10.3.10"
+ glob: "npm:^10.5.0"
graceful-fs: "npm:^4.2.11"
istanbul-lib-coverage: "npm:^3.0.0"
istanbul-lib-instrument: "npm:^6.0.0"
istanbul-lib-report: "npm:^3.0.0"
istanbul-lib-source-maps: "npm:^5.0.0"
istanbul-reports: "npm:^3.1.3"
- jest-message-util: "npm:30.2.0"
- jest-util: "npm:30.2.0"
- jest-worker: "npm:30.2.0"
+ jest-message-util: "npm:30.4.1"
+ jest-util: "npm:30.4.1"
+ jest-worker: "npm:30.4.1"
slash: "npm:^3.0.0"
string-length: "npm:^4.0.2"
v8-to-istanbul: "npm:^9.0.1"
@@ -833,28 +1125,28 @@ __metadata:
peerDependenciesMeta:
node-notifier:
optional: true
- checksum: 10/3848b59bf740c10c4e5c234dcc41c54adbd74932bf05d1d1582d09d86e9baa86ddaf3c43903505fd042ba1203c2889a732137d08058ce9dc0069ba33b5d5373d
+ checksum: 10/e14e3717c9fe49004b6406cc53554f90954345917bb5f077d23e3a2cecde26d90493e1522d95f63b6c14ef06fb63d45b695ac6400d63b96fecc7a80d1ef83f4d
languageName: node
linkType: hard
-"@jest/schemas@npm:30.0.5":
- version: 30.0.5
- resolution: "@jest/schemas@npm:30.0.5"
+"@jest/schemas@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/schemas@npm:30.4.1"
dependencies:
"@sinclair/typebox": "npm:^0.34.0"
- checksum: 10/40df4db55d4aeed09d1c7e19caf23788309cea34490a1c5d584c913494195e698b9967e996afc27226cac6d76e7512fe73ae6b9584480695c60dd18a5459cdba
+ checksum: 10/86e62c8fd8fc77535085f1ede3a416430a3740f78b8f88ec7d0ee4516b22daf3326ffc1ade9d5f7839bbde923aaf1b5ac430a42ed4bb1a38edc3de5005a58f51
languageName: node
linkType: hard
-"@jest/snapshot-utils@npm:30.2.0":
- version: 30.2.0
- resolution: "@jest/snapshot-utils@npm:30.2.0"
+"@jest/snapshot-utils@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/snapshot-utils@npm:30.4.1"
dependencies:
- "@jest/types": "npm:30.2.0"
+ "@jest/types": "npm:30.4.1"
chalk: "npm:^4.1.2"
graceful-fs: "npm:^4.2.11"
natural-compare: "npm:^1.4.0"
- checksum: 10/6b30ab2b0682117e3ce775e70b5be1eb01e1ea53a74f12ac7090cd1a5f37e9b795cd8de83853afa7b4b799c96b1c482499aa993ca2034ea0679525d32b7f9625
+ checksum: 10/8f17768702153267388b3043f358027385e591ac4668699bfce3547cb8e08ac146a074913bcddf68c0a4f7155e24a6d582d27f4592f5c3bd5f9fbc3f9182ef78
languageName: node
linkType: hard
@@ -869,65 +1161,64 @@ __metadata:
languageName: node
linkType: hard
-"@jest/test-result@npm:30.2.0":
- version: 30.2.0
- resolution: "@jest/test-result@npm:30.2.0"
+"@jest/test-result@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/test-result@npm:30.4.1"
dependencies:
- "@jest/console": "npm:30.2.0"
- "@jest/types": "npm:30.2.0"
+ "@jest/console": "npm:30.4.1"
+ "@jest/types": "npm:30.4.1"
"@types/istanbul-lib-coverage": "npm:^2.0.6"
collect-v8-coverage: "npm:^1.0.2"
- checksum: 10/f58f79c3c3ba6dd15325e05b0b5a300777cd8cc38327f622608b6fe849b1073ee9633e33d1e5d7ef5b97a1ce71543d0ad92674b7a279f53033143e8dd7c22959
+ checksum: 10/c420182d72cef64827981230b4c84b2de3f4312067e7baf1e3e13c501dc57f73faa09fed1a5ed1a6e96bc29f6c67ac2c14de5f973945f14853010729678cb44a
languageName: node
linkType: hard
-"@jest/test-sequencer@npm:30.2.0":
- version: 30.2.0
- resolution: "@jest/test-sequencer@npm:30.2.0"
+"@jest/test-sequencer@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/test-sequencer@npm:30.4.1"
dependencies:
- "@jest/test-result": "npm:30.2.0"
+ "@jest/test-result": "npm:30.4.1"
graceful-fs: "npm:^4.2.11"
- jest-haste-map: "npm:30.2.0"
+ jest-haste-map: "npm:30.4.1"
slash: "npm:^3.0.0"
- checksum: 10/7923964b27048b2233858b32aa1b34d4dd9e404311626d944a706bcdcaa0b1585f43f2ffa3fa893ecbf133566f31ba2b79ab5eaaaf674b8558c6c7029ecbea5e
+ checksum: 10/d911ef0c527c402d41537aa5f9754725a58732c1c6616401454633fd45729da0b2f01b4c50322b1b789a9f2d4edf3a24aecb0b2e4ca4d873c4335894b63bc5b0
languageName: node
linkType: hard
-"@jest/transform@npm:30.2.0":
- version: 30.2.0
- resolution: "@jest/transform@npm:30.2.0"
+"@jest/transform@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/transform@npm:30.4.1"
dependencies:
"@babel/core": "npm:^7.27.4"
- "@jest/types": "npm:30.2.0"
+ "@jest/types": "npm:30.4.1"
"@jridgewell/trace-mapping": "npm:^0.3.25"
babel-plugin-istanbul: "npm:^7.0.1"
chalk: "npm:^4.1.2"
convert-source-map: "npm:^2.0.0"
fast-json-stable-stringify: "npm:^2.1.0"
graceful-fs: "npm:^4.2.11"
- jest-haste-map: "npm:30.2.0"
- jest-regex-util: "npm:30.0.1"
- jest-util: "npm:30.2.0"
- micromatch: "npm:^4.0.8"
+ jest-haste-map: "npm:30.4.1"
+ jest-regex-util: "npm:30.4.0"
+ jest-util: "npm:30.4.1"
pirates: "npm:^4.0.7"
slash: "npm:^3.0.0"
write-file-atomic: "npm:^5.0.1"
- checksum: 10/c75d72d524c2a50ea6c05778a9b76a6e48bc228a3390896a6edd4416f7b4954ee0a07e229ed7b4949ce8889324b70034c784751e3fc455a25648bd8dcad17d0d
+ checksum: 10/7b570451f6c26360f1b852c2281dcc4e36fe685dbc159cf5eabf83d49d6aae4569f444d38f3afb5b3b6e0b809eb41b65f3145c0cac5fee3eec9c9b178fb1f0ea
languageName: node
linkType: hard
-"@jest/types@npm:30.2.0":
- version: 30.2.0
- resolution: "@jest/types@npm:30.2.0"
+"@jest/types@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/types@npm:30.4.1"
dependencies:
- "@jest/pattern": "npm:30.0.1"
- "@jest/schemas": "npm:30.0.5"
+ "@jest/pattern": "npm:30.4.0"
+ "@jest/schemas": "npm:30.4.1"
"@types/istanbul-lib-coverage": "npm:^2.0.6"
"@types/istanbul-reports": "npm:^3.0.4"
"@types/node": "npm:*"
"@types/yargs": "npm:^17.0.33"
chalk: "npm:^4.1.2"
- checksum: 10/f50fcaea56f873a51d19254ab16762f2ea8ca88e3e08da2e496af5da2b67c322915a4fcd0153803cc05063ffe87ebef2ab4330e0a1b06ab984a26c916cbfc26b
+ checksum: 10/cc0999508613487c6d0f55661cd342ebe7cfe579fa9917534b94310204358f03f94524f70f00b4fe3c6dd2ccd0fd44657615a1b9f420ab310d68b43964bff87c
languageName: node
linkType: hard
@@ -958,7 +1249,7 @@ __metadata:
languageName: node
linkType: hard
-"@jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0":
+"@jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0, @jridgewell/sourcemap-codec@npm:^1.5.5":
version: 1.5.5
resolution: "@jridgewell/sourcemap-codec@npm:1.5.5"
checksum: 10/5d9d207b462c11e322d71911e55e21a4e2772f71ffe8d6f1221b8eb5ae6774458c1d242f897fb0814e8714ca9a6b498abfa74dfe4f434493342902b1a48b33a5
@@ -975,72 +1266,319 @@ __metadata:
languageName: node
linkType: hard
-"@koa/cors@npm:^5.0.0":
- version: 5.0.0
- resolution: "@koa/cors@npm:5.0.0"
- dependencies:
- vary: "npm:^1.1.2"
- checksum: 10/3a0e32fbc422a5f9a41540ce3b7499d46073ddb0e4e851394a74bac5ecd0eaa1f24a8f189b7bd6a50c5863788ae6945c52d990edf99fdd2151a4404f266fe2e7
+"@jsonjoy.com/base64@npm:17.67.0":
+ version: 17.67.0
+ resolution: "@jsonjoy.com/base64@npm:17.67.0"
+ peerDependencies:
+ tslib: 2
+ checksum: 10/ae44b0c4c83ecc5c0ee1911706a665e18e89d64a2b705cc458d7f6fc3c3c7db0e621261e978d02b74ded6a9fe1aafc8e708eb8a133e794a92bb033c50a0c4ccd
+ languageName: node
+ linkType: hard
+
+"@jsonjoy.com/base64@npm:^1.1.2":
+ version: 1.1.2
+ resolution: "@jsonjoy.com/base64@npm:1.1.2"
+ peerDependencies:
+ tslib: 2
+ checksum: 10/d76bb58eff841c090d9bf69a073611ffa73c40a664ccbcea689f65961f57d7b24051269d06b437e4f6204285d6ba92f50f587c5e95c5f9e4f10b36a2ed4cd0c8
+ languageName: node
+ linkType: hard
+
+"@jsonjoy.com/buffers@npm:17.67.0, @jsonjoy.com/buffers@npm:^17.65.0":
+ version: 17.67.0
+ resolution: "@jsonjoy.com/buffers@npm:17.67.0"
+ peerDependencies:
+ tslib: 2
+ checksum: 10/6c8f6c4c73ec4ddab538a88be0bf72d8a934752755d43b0289fbe19ce9fa6123f082d1cd5ae179495e121a2f50267d26d36641f6dadedd8d5d2a2f980426e8ff
+ languageName: node
+ linkType: hard
+
+"@jsonjoy.com/buffers@npm:^1.0.0, @jsonjoy.com/buffers@npm:^1.2.0":
+ version: 1.2.1
+ resolution: "@jsonjoy.com/buffers@npm:1.2.1"
+ peerDependencies:
+ tslib: 2
+ checksum: 10/8ef4784d05c0fb4d0f27a1f78f5b0ae1f3b537d237f978d10be0b88f59a534ae44db2a4bde28eee0eb461ede31dc194aab5927ac001ed2b764629fa43ae9b60b
+ languageName: node
+ linkType: hard
+
+"@jsonjoy.com/codegen@npm:17.67.0":
+ version: 17.67.0
+ resolution: "@jsonjoy.com/codegen@npm:17.67.0"
+ peerDependencies:
+ tslib: 2
+ checksum: 10/e2462836c708999d045c4a15099f12e721089a3731f0ad33da210559a52ed763b8bddbec3c181857341984ef12ea355290609f37f0dc6f8de1545c028090adf5
+ languageName: node
+ linkType: hard
+
+"@jsonjoy.com/codegen@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "@jsonjoy.com/codegen@npm:1.0.0"
+ peerDependencies:
+ tslib: 2
+ checksum: 10/a0afb03d2af4fbc1377c547e507f5db99a25f515d8c4b6b2cef1ff28145ac59fff12b6e1f41f9734cb62ea5619e7f9be1acd0908305d6f4176898ee534ee9a64
languageName: node
linkType: hard
-"@koa/router@npm:^15.3.0":
- version: 15.3.0
- resolution: "@koa/router@npm:15.3.0"
+"@jsonjoy.com/fs-core@npm:4.57.2":
+ version: 4.57.2
+ resolution: "@jsonjoy.com/fs-core@npm:4.57.2"
dependencies:
- debug: "npm:^4.4.3"
- http-errors: "npm:^2.0.1"
- koa-compose: "npm:^4.1.0"
- path-to-regexp: "npm:^8.3.0"
+ "@jsonjoy.com/fs-node-builtins": "npm:4.57.2"
+ "@jsonjoy.com/fs-node-utils": "npm:4.57.2"
+ thingies: "npm:^2.5.0"
peerDependencies:
- koa: ^2.0.0 || ^3.0.0
- peerDependenciesMeta:
- koa:
- optional: false
- checksum: 10/5f2679916514c28a1694ec3c0eac1b869c21d5527a4fdc4b248b3f4c595010389973401eadf6ff3f5c26d24ee84a391325880de51320f1965f917a21120d2899
+ tslib: 2
+ checksum: 10/6db8b3a7fb874229c7991bbdc094d752adbde7d774e5ef70df5a787130c7c8ed4ac2d34eaac079383c527269feaa91d1cb4f5c1504af995cca95070af769a0bd
languageName: node
linkType: hard
-"@meteorjs/browserify-sign@npm:^4.2.3":
- version: 4.2.6
- resolution: "@meteorjs/browserify-sign@npm:4.2.6"
+"@jsonjoy.com/fs-fsa@npm:4.57.2":
+ version: 4.57.2
+ resolution: "@jsonjoy.com/fs-fsa@npm:4.57.2"
dependencies:
- bn.js: "npm:^5.2.1"
- brorand: "npm:^1.1.0"
- browserify-rsa: "npm:^4.1.0"
- create-hash: "npm:^1.2.0"
- create-hmac: "npm:^1.1.7"
- hash-base: "npm:~3.0"
- hash.js: "npm:^1.0.0"
- hmac-drbg: "npm:^1.0.1"
- inherits: "npm:^2.0.4"
- minimalistic-assert: "npm:^1.0.1"
- minimalistic-crypto-utils: "npm:^1.0.1"
- parse-asn1: "npm:^5.1.7"
- readable-stream: "npm:^2.3.8"
- safe-buffer: "npm:^5.2.1"
- checksum: 10/a4e5dc58d348f373a28ba3e55b27967780e8b674a180f6408db944de888e647f6d10c1b2f7a544f8fafcfcd50e0e990a4a5cc974f38346655c3a4f029001c640
+ "@jsonjoy.com/fs-core": "npm:4.57.2"
+ "@jsonjoy.com/fs-node-builtins": "npm:4.57.2"
+ "@jsonjoy.com/fs-node-utils": "npm:4.57.2"
+ thingies: "npm:^2.5.0"
+ peerDependencies:
+ tslib: 2
+ checksum: 10/0edf3b73d06a27e81f8a8e3b042022b9440c4794bb21d9957c15cd5c87f629e7e2f6695d464f82bb52d16e08fb3e682090ced5e712cc5bb05b41cbe99ce6e393
languageName: node
linkType: hard
-"@meteorjs/create-ecdh@npm:^4.0.4":
- version: 4.0.5
- resolution: "@meteorjs/create-ecdh@npm:4.0.5"
+"@jsonjoy.com/fs-node-builtins@npm:4.57.2":
+ version: 4.57.2
+ resolution: "@jsonjoy.com/fs-node-builtins@npm:4.57.2"
+ peerDependencies:
+ tslib: 2
+ checksum: 10/3284f0f0a989ad2bc0abc485748b2f3581648401c7d86be9b4541374f65050d384b61b5e44eff9b463d43fd1764bead1251783681105962ba5954b5e64b42480
+ languageName: node
+ linkType: hard
+
+"@jsonjoy.com/fs-node-to-fsa@npm:4.57.2":
+ version: 4.57.2
+ resolution: "@jsonjoy.com/fs-node-to-fsa@npm:4.57.2"
dependencies:
- bn.js: "npm:^4.11.9"
- brorand: "npm:^1.1.0"
- hash.js: "npm:^1.0.0"
- hmac-drbg: "npm:^1.0.1"
- inherits: "npm:^2.0.4"
- minimalistic-assert: "npm:^1.0.1"
- minimalistic-crypto-utils: "npm:^1.0.1"
- checksum: 10/e2173d7594eb0be2dd5cdd8840a9c49f0c653948ab73a6b5370bbfc22519255cc44cbd7dcd093cf9900064bf275adba3feb3de710e1fe98428e6a2f228f8c2ec
+ "@jsonjoy.com/fs-fsa": "npm:4.57.2"
+ "@jsonjoy.com/fs-node-builtins": "npm:4.57.2"
+ "@jsonjoy.com/fs-node-utils": "npm:4.57.2"
+ peerDependencies:
+ tslib: 2
+ checksum: 10/8d6e7447c640c02eb89c03e6a565af13b30607402a83ab462f0e16cced95d1cf0a09cc43fe297c379e51e905e0a6f7e14e65a65d19ece0756c3ae888e618e88c
languageName: node
linkType: hard
-"@meteorjs/crypto-browserify@npm:^3.12.1":
- version: 3.12.4
- resolution: "@meteorjs/crypto-browserify@npm:3.12.4"
+"@jsonjoy.com/fs-node-utils@npm:4.57.2":
+ version: 4.57.2
+ resolution: "@jsonjoy.com/fs-node-utils@npm:4.57.2"
+ dependencies:
+ "@jsonjoy.com/fs-node-builtins": "npm:4.57.2"
+ peerDependencies:
+ tslib: 2
+ checksum: 10/f63c7c8fd5a63a163a01bc70dac262419bcc1ae182186f249e038703b04a401e49eab9043514384555177e9385929b58a76cab945e8c7cdc6809efc2ea50bf31
+ languageName: node
+ linkType: hard
+
+"@jsonjoy.com/fs-node@npm:4.57.2":
+ version: 4.57.2
+ resolution: "@jsonjoy.com/fs-node@npm:4.57.2"
+ dependencies:
+ "@jsonjoy.com/fs-core": "npm:4.57.2"
+ "@jsonjoy.com/fs-node-builtins": "npm:4.57.2"
+ "@jsonjoy.com/fs-node-utils": "npm:4.57.2"
+ "@jsonjoy.com/fs-print": "npm:4.57.2"
+ "@jsonjoy.com/fs-snapshot": "npm:4.57.2"
+ glob-to-regex.js: "npm:^1.0.0"
+ thingies: "npm:^2.5.0"
+ peerDependencies:
+ tslib: 2
+ checksum: 10/2e7777874624035b5503a6d7cbefa82c06adcf3ad63140cd8ce83082b46dace5f8981f98121cb27c79f5755b3790623fbc9facf2b27b00aca28498d4d33df611
+ languageName: node
+ linkType: hard
+
+"@jsonjoy.com/fs-print@npm:4.57.2":
+ version: 4.57.2
+ resolution: "@jsonjoy.com/fs-print@npm:4.57.2"
+ dependencies:
+ "@jsonjoy.com/fs-node-utils": "npm:4.57.2"
+ tree-dump: "npm:^1.1.0"
+ peerDependencies:
+ tslib: 2
+ checksum: 10/4931c8de684a655ab11ba2285016c35f3558f1f8f3444ac42fe7f5ea417556661b6f88d238c107f30c30b2d131eb2e0ecb1bb8626a7f6e0440996f42ea31dd7b
+ languageName: node
+ linkType: hard
+
+"@jsonjoy.com/fs-snapshot@npm:4.57.2":
+ version: 4.57.2
+ resolution: "@jsonjoy.com/fs-snapshot@npm:4.57.2"
+ dependencies:
+ "@jsonjoy.com/buffers": "npm:^17.65.0"
+ "@jsonjoy.com/fs-node-utils": "npm:4.57.2"
+ "@jsonjoy.com/json-pack": "npm:^17.65.0"
+ "@jsonjoy.com/util": "npm:^17.65.0"
+ peerDependencies:
+ tslib: 2
+ checksum: 10/191b9d9a63f0ad30342da7ab37a45bbe84c935ae204e3780d69acf2fb12fdf07f7da8c3ade38255207de72fdb3b64a30e8dcc2ad93cfe424e77697d3cd419166
+ languageName: node
+ linkType: hard
+
+"@jsonjoy.com/json-pack@npm:^1.11.0":
+ version: 1.21.0
+ resolution: "@jsonjoy.com/json-pack@npm:1.21.0"
+ dependencies:
+ "@jsonjoy.com/base64": "npm:^1.1.2"
+ "@jsonjoy.com/buffers": "npm:^1.2.0"
+ "@jsonjoy.com/codegen": "npm:^1.0.0"
+ "@jsonjoy.com/json-pointer": "npm:^1.0.2"
+ "@jsonjoy.com/util": "npm:^1.9.0"
+ hyperdyperid: "npm:^1.2.0"
+ thingies: "npm:^2.5.0"
+ tree-dump: "npm:^1.1.0"
+ peerDependencies:
+ tslib: 2
+ checksum: 10/138b7eb8c96e6e435b0218c8f2eb5554e4eb49198a8718673a65e81da53b4617553ffa7124b51d6ea00fdfb868d6ff8b5ad6365e8336380ca7025f04d0412ee7
+ languageName: node
+ linkType: hard
+
+"@jsonjoy.com/json-pack@npm:^17.65.0":
+ version: 17.67.0
+ resolution: "@jsonjoy.com/json-pack@npm:17.67.0"
+ dependencies:
+ "@jsonjoy.com/base64": "npm:17.67.0"
+ "@jsonjoy.com/buffers": "npm:17.67.0"
+ "@jsonjoy.com/codegen": "npm:17.67.0"
+ "@jsonjoy.com/json-pointer": "npm:17.67.0"
+ "@jsonjoy.com/util": "npm:17.67.0"
+ hyperdyperid: "npm:^1.2.0"
+ thingies: "npm:^2.5.0"
+ tree-dump: "npm:^1.1.0"
+ peerDependencies:
+ tslib: 2
+ checksum: 10/9ff4403862e49433fe607175e90af749d64902640d63919ba559e5748d1a3db60d7366cc3b84dcc4a57ad478540e5eecb22fed80766e293482a0ab8e583b1b0b
+ languageName: node
+ linkType: hard
+
+"@jsonjoy.com/json-pointer@npm:17.67.0":
+ version: 17.67.0
+ resolution: "@jsonjoy.com/json-pointer@npm:17.67.0"
+ dependencies:
+ "@jsonjoy.com/util": "npm:17.67.0"
+ peerDependencies:
+ tslib: 2
+ checksum: 10/5a27c6b5b1276d357cfc3e8a05112d6305ccd17bf672190f25dfac2f4108ced170e784451d64728f60f93305c0007e3f832ddd175b8a47f3eb652cbabcec31ad
+ languageName: node
+ linkType: hard
+
+"@jsonjoy.com/json-pointer@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "@jsonjoy.com/json-pointer@npm:1.0.2"
+ dependencies:
+ "@jsonjoy.com/codegen": "npm:^1.0.0"
+ "@jsonjoy.com/util": "npm:^1.9.0"
+ peerDependencies:
+ tslib: 2
+ checksum: 10/f22baeb3abc8ace2d8902d06ec297343431d4486dcf399aaaffd26ace7e62e194fe0efb4b7880e45b3b7939224ee838d3213448ef654fc8a61c91a76fe994d94
+ languageName: node
+ linkType: hard
+
+"@jsonjoy.com/util@npm:17.67.0, @jsonjoy.com/util@npm:^17.65.0":
+ version: 17.67.0
+ resolution: "@jsonjoy.com/util@npm:17.67.0"
+ dependencies:
+ "@jsonjoy.com/buffers": "npm:17.67.0"
+ "@jsonjoy.com/codegen": "npm:17.67.0"
+ peerDependencies:
+ tslib: 2
+ checksum: 10/b0facf65c3190d6ed1ada7e5b7679d80fa5da73bfbd02f2bb2f3af1c28c0d854b6ee2350824313b7ba82c0e5191da94903b4af61255bc232dbb7feedd2f31e0c
+ languageName: node
+ linkType: hard
+
+"@jsonjoy.com/util@npm:^1.9.0":
+ version: 1.9.0
+ resolution: "@jsonjoy.com/util@npm:1.9.0"
+ dependencies:
+ "@jsonjoy.com/buffers": "npm:^1.0.0"
+ "@jsonjoy.com/codegen": "npm:^1.0.0"
+ peerDependencies:
+ tslib: 2
+ checksum: 10/1a6e5301d725a7161b93ff707eb1a954bf4552a2fa96eee9a960d3ae3ed5f993d18b56dcff29e98036341a5968c5d1b2dfe21f76695390e7f0d89b81f24c85e0
+ languageName: node
+ linkType: hard
+
+"@koa/cors@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "@koa/cors@npm:5.0.0"
+ dependencies:
+ vary: "npm:^1.1.2"
+ checksum: 10/3a0e32fbc422a5f9a41540ce3b7499d46073ddb0e4e851394a74bac5ecd0eaa1f24a8f189b7bd6a50c5863788ae6945c52d990edf99fdd2151a4404f266fe2e7
+ languageName: node
+ linkType: hard
+
+"@koa/router@npm:^15.7.0":
+ version: 15.7.0
+ resolution: "@koa/router@npm:15.7.0"
+ dependencies:
+ debug: "npm:^4.4.3"
+ http-errors: "npm:^2.0.1"
+ koa-compose: "npm:^4.1.0"
+ path-to-regexp: "npm:^8.4.2"
+ peerDependencies:
+ koa: ^2.0.0 || ^3.0.0
+ peerDependenciesMeta:
+ koa:
+ optional: false
+ checksum: 10/cdbac3ea87660af321c2c9c7f6aef511118018bda369525a7eaa83c28401e17643e2d16ca35117b3c19d0496115e6e8b849bc791be5ee649e426fbef14531fc6
+ languageName: node
+ linkType: hard
+
+"@leichtgewicht/ip-codec@npm:^2.0.1":
+ version: 2.0.5
+ resolution: "@leichtgewicht/ip-codec@npm:2.0.5"
+ checksum: 10/cb98c608392abe59457a14e00134e7dfa57c0c9b459871730cd4e907bb12b834cbd03e08ad8663fea9e486f260da7f1293ccd9af0376bf5524dd8536192f248c
+ languageName: node
+ linkType: hard
+
+"@meteorjs/browserify-sign@npm:^4.2.3":
+ version: 4.2.6
+ resolution: "@meteorjs/browserify-sign@npm:4.2.6"
+ dependencies:
+ bn.js: "npm:^5.2.1"
+ brorand: "npm:^1.1.0"
+ browserify-rsa: "npm:^4.1.0"
+ create-hash: "npm:^1.2.0"
+ create-hmac: "npm:^1.1.7"
+ hash-base: "npm:~3.0"
+ hash.js: "npm:^1.0.0"
+ hmac-drbg: "npm:^1.0.1"
+ inherits: "npm:^2.0.4"
+ minimalistic-assert: "npm:^1.0.1"
+ minimalistic-crypto-utils: "npm:^1.0.1"
+ parse-asn1: "npm:^5.1.7"
+ readable-stream: "npm:^2.3.8"
+ safe-buffer: "npm:^5.2.1"
+ checksum: 10/a4e5dc58d348f373a28ba3e55b27967780e8b674a180f6408db944de888e647f6d10c1b2f7a544f8fafcfcd50e0e990a4a5cc974f38346655c3a4f029001c640
+ languageName: node
+ linkType: hard
+
+"@meteorjs/create-ecdh@npm:^4.0.4":
+ version: 4.0.5
+ resolution: "@meteorjs/create-ecdh@npm:4.0.5"
+ dependencies:
+ bn.js: "npm:^4.11.9"
+ brorand: "npm:^1.1.0"
+ hash.js: "npm:^1.0.0"
+ hmac-drbg: "npm:^1.0.1"
+ inherits: "npm:^2.0.4"
+ minimalistic-assert: "npm:^1.0.1"
+ minimalistic-crypto-utils: "npm:^1.0.1"
+ checksum: 10/e2173d7594eb0be2dd5cdd8840a9c49f0c653948ab73a6b5370bbfc22519255cc44cbd7dcd093cf9900064bf275adba3feb3de710e1fe98428e6a2f228f8c2ec
+ languageName: node
+ linkType: hard
+
+"@meteorjs/crypto-browserify@npm:^3.12.1":
+ version: 3.12.4
+ resolution: "@meteorjs/crypto-browserify@npm:3.12.4"
dependencies:
"@meteorjs/browserify-sign": "npm:^4.2.3"
"@meteorjs/create-ecdh": "npm:^4.0.4"
@@ -1058,163 +1596,677 @@ __metadata:
languageName: node
linkType: hard
-"@mongodb-js/saslprep@npm:^1.3.0":
- version: 1.4.5
- resolution: "@mongodb-js/saslprep@npm:1.4.5"
- dependencies:
- sparse-bitfield: "npm:^3.0.3"
- checksum: 10/40cde05e68d5ab243b1db7196b86b91c1de099a451c73fe2faa4ba3f220009f0e829a150a716de991a764068fd12f5d9303ae7d05ab3c9973d39c5588a67ebf7
+"@meteorjs/rspack@npm:2.0.1":
+ version: 2.0.1
+ resolution: "@meteorjs/rspack@npm:2.0.1"
+ dependencies:
+ fast-deep-equal: "npm:^3.1.3"
+ ignore-loader: "npm:^0.1.2"
+ node-polyfill-webpack-plugin: "npm:^4.1.0"
+ webpack-merge: "npm:^6.0.1"
+ peerDependencies:
+ "@rspack/cli": ">=1.3.0"
+ "@rspack/core": ">=1.3.0"
+ "@swc/core": ">=1.3.0"
+ checksum: 10/56712025ac211e29875834f7befb9f4cd3deaed88c71dc4065ec0eb73f26335de2e53020ed0f8305206fae5fcea03305d95a444505a33cef434ca72eee82400d
+ languageName: node
+ linkType: hard
+
+"@meteorjs/rspack@patch:@meteorjs/rspack@npm%3A2.0.1#~/.yarn/patches/@meteorjs-rspack-npm-2.0.1-d001eb481c.patch":
+ version: 2.0.1
+ resolution: "@meteorjs/rspack@patch:@meteorjs/rspack@npm%3A2.0.1#~/.yarn/patches/@meteorjs-rspack-npm-2.0.1-d001eb481c.patch::version=2.0.1&hash=660a4f"
+ dependencies:
+ fast-deep-equal: "npm:^3.1.3"
+ ignore-loader: "npm:^0.1.2"
+ node-polyfill-webpack-plugin: "npm:^4.1.0"
+ webpack-merge: "npm:^6.0.1"
+ peerDependencies:
+ "@rspack/cli": ">=1.3.0"
+ "@rspack/core": ">=1.3.0"
+ "@swc/core": ">=1.3.0"
+ checksum: 10/731954011d435b7c6378fad258661cd6bae5801761cc40d8dd3f6fdfa24d9497760f2705e5e9473ed9f5c1b7ba6842446964c3467454aad16a3a8807951a25f7
+ languageName: node
+ linkType: hard
+
+"@module-federation/error-codes@npm:0.22.0":
+ version: 0.22.0
+ resolution: "@module-federation/error-codes@npm:0.22.0"
+ checksum: 10/4edb269e9f3039899f879788c84d2bfecff94ca8e87ffcd80dbf8589d8543ec32558b3fa05c8549a8abd3ac33e856ff2aacf458dea5c0d7bea608bf12bb13359
+ languageName: node
+ linkType: hard
+
+"@module-federation/runtime-core@npm:0.22.0":
+ version: 0.22.0
+ resolution: "@module-federation/runtime-core@npm:0.22.0"
+ dependencies:
+ "@module-federation/error-codes": "npm:0.22.0"
+ "@module-federation/sdk": "npm:0.22.0"
+ checksum: 10/d21969198322b6f79e0513b702d0af5097613d47819724c849b6c677c163cd10fb8c89e3ff62b798bec498ee4d8e95dec71861071bc4ed74bd86a7e43193bc05
+ languageName: node
+ linkType: hard
+
+"@module-federation/runtime-tools@npm:0.22.0":
+ version: 0.22.0
+ resolution: "@module-federation/runtime-tools@npm:0.22.0"
+ dependencies:
+ "@module-federation/runtime": "npm:0.22.0"
+ "@module-federation/webpack-bundler-runtime": "npm:0.22.0"
+ checksum: 10/0e7693c1ec02fc5bef770b478c8757cad9cfefb2310d1943151d0ad079b72472d9b2c8a087299e9124dfcd6b649c83290c7fdfa333865baab4ba193f39e7b6bd
+ languageName: node
+ linkType: hard
+
+"@module-federation/runtime@npm:0.22.0":
+ version: 0.22.0
+ resolution: "@module-federation/runtime@npm:0.22.0"
+ dependencies:
+ "@module-federation/error-codes": "npm:0.22.0"
+ "@module-federation/runtime-core": "npm:0.22.0"
+ "@module-federation/sdk": "npm:0.22.0"
+ checksum: 10/eca608be999d7d2e83abc1169643c2f795a5ed950f9e2bdf7000400a30b3e1e0ca4bdaa5daa09f55e44868383d444707e40236cec1aaa7b40432b0cce800b7f3
+ languageName: node
+ linkType: hard
+
+"@module-federation/sdk@npm:0.22.0":
+ version: 0.22.0
+ resolution: "@module-federation/sdk@npm:0.22.0"
+ checksum: 10/d7085d883730a33145052520787a7e59cf9c54b51b2946bebc7c63a6bb668bcc6cbdc27fa0b7354a62f5a7ee4e8829a66b84e644607498f2e37cfd5eb4ded0da
+ languageName: node
+ linkType: hard
+
+"@module-federation/webpack-bundler-runtime@npm:0.22.0":
+ version: 0.22.0
+ resolution: "@module-federation/webpack-bundler-runtime@npm:0.22.0"
+ dependencies:
+ "@module-federation/runtime": "npm:0.22.0"
+ "@module-federation/sdk": "npm:0.22.0"
+ checksum: 10/afd24406817dfc6474ebcf5be714ccf26690eb3f6f5172bda711c8f23dba149fe47293f7aa2d0733dfed0334c98d4d3d9e7c2da2be78750cae5a72d72f32ce93
+ languageName: node
+ linkType: hard
+
+"@mongodb-js/saslprep@npm:^1.3.0":
+ version: 1.4.5
+ resolution: "@mongodb-js/saslprep@npm:1.4.5"
+ dependencies:
+ sparse-bitfield: "npm:^3.0.3"
+ checksum: 10/40cde05e68d5ab243b1db7196b86b91c1de099a451c73fe2faa4ba3f220009f0e829a150a716de991a764068fd12f5d9303ae7d05ab3c9973d39c5588a67ebf7
+ languageName: node
+ linkType: hard
+
+"@mos-connection/helper@npm:^5.0.0-alpha.0":
+ version: 5.0.0-alpha.0
+ resolution: "@mos-connection/helper@npm:5.0.0-alpha.0"
+ dependencies:
+ "@mos-connection/model": "npm:5.0.0-alpha.0"
+ iconv-lite: "npm:^0.7.0"
+ tslib: "npm:^2.8.1"
+ xml-js: "npm:^1.6.11"
+ xmlbuilder: "npm:^15.1.1"
+ checksum: 10/bcfcd90839c508bcf38294a27824357c61c3ac76317beb127ad1b984a75942eaad3e04353ada962e5ee93ddbbb9e1dc70503230e74f98738519b0d64e0786a16
+ languageName: node
+ linkType: hard
+
+"@mos-connection/model@npm:5.0.0-alpha.0, @mos-connection/model@npm:^5.0.0-alpha.0":
+ version: 5.0.0-alpha.0
+ resolution: "@mos-connection/model@npm:5.0.0-alpha.0"
+ checksum: 10/e66edde4a7f0c20bc468151e5e90b49edd34dc63837a573b30400c3f1e981da2b3d6c504f361a8416eed545477598dc64999543ee5bd33fdcc70786e1330784f
+ languageName: node
+ linkType: hard
+
+"@napi-rs/wasm-runtime@npm:1.0.7":
+ version: 1.0.7
+ resolution: "@napi-rs/wasm-runtime@npm:1.0.7"
+ dependencies:
+ "@emnapi/core": "npm:^1.5.0"
+ "@emnapi/runtime": "npm:^1.5.0"
+ "@tybys/wasm-util": "npm:^0.10.1"
+ checksum: 10/6bc32d32d486d07b83220a9b7b2b715e39acacbacef0011ebca05c00b41d80a0535123da10fea7a7d6d7e206712bb50dc50ac3cf88b770754d44378570fb5c05
+ languageName: node
+ linkType: hard
+
+"@napi-rs/wasm-runtime@npm:^0.2.11":
+ version: 0.2.12
+ resolution: "@napi-rs/wasm-runtime@npm:0.2.12"
+ dependencies:
+ "@emnapi/core": "npm:^1.4.3"
+ "@emnapi/runtime": "npm:^1.4.3"
+ "@tybys/wasm-util": "npm:^0.10.0"
+ checksum: 10/5fd518182427980c28bc724adf06c5f32f9a8915763ef560b5f7d73607d30cd15ac86d0cbd2eb80d4cfab23fc80d0876d89ca36a9daadcb864bc00917c94187c
+ languageName: node
+ linkType: hard
+
+"@napi-rs/wasm-runtime@npm:^1.1.1":
+ version: 1.1.4
+ resolution: "@napi-rs/wasm-runtime@npm:1.1.4"
+ dependencies:
+ "@tybys/wasm-util": "npm:^0.10.1"
+ peerDependencies:
+ "@emnapi/core": ^1.7.1
+ "@emnapi/runtime": ^1.7.1
+ checksum: 10/1db3dc7eeb981306b09360487bd8ce4dfa5588d273bd8ea9f07dccca1b4ade57b675414180fc9bb66966c6c50b17208b0263194993e2f7f92cc7af28bda4d1af
+ languageName: node
+ linkType: hard
+
+"@nodable/entities@npm:^2.2.0":
+ version: 2.2.0
+ resolution: "@nodable/entities@npm:2.2.0"
+ checksum: 10/7f44743adb5947ea6e0c276fecc927eb47ff1a6526256aeb03098d98086c906b2ab98663330c049a55758644b1fd23478222cbc8d4f773ac737c979ff2c1c769
+ languageName: node
+ linkType: hard
+
+"@npmcli/agent@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "@npmcli/agent@npm:4.0.0"
+ dependencies:
+ agent-base: "npm:^7.1.0"
+ http-proxy-agent: "npm:^7.0.0"
+ https-proxy-agent: "npm:^7.0.1"
+ lru-cache: "npm:^11.2.1"
+ socks-proxy-agent: "npm:^8.0.3"
+ checksum: 10/1a81573becc60515031accc696e6405e9b894e65c12b98ef4aeee03b5617c41948633159dbf6caf5dde5b47367eeb749bdc7b7dfb21960930a9060a935c6f636
+ languageName: node
+ linkType: hard
+
+"@npmcli/fs@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "@npmcli/fs@npm:5.0.0"
+ dependencies:
+ semver: "npm:^7.3.5"
+ checksum: 10/4935c7719d17830d0f9fa46c50be17b2a3c945cec61760f6d0909bce47677c42e1810ca673305890f9e84f008ec4d8e841182f371e42100a8159d15f22249208
+ languageName: node
+ linkType: hard
+
+"@opentelemetry/api@npm:^1.4.0, @opentelemetry/api@npm:^1.4.1":
+ version: 1.9.0
+ resolution: "@opentelemetry/api@npm:1.9.0"
+ checksum: 10/a607f0eef971893c4f2ee2a4c2069aade6ec3e84e2a1f5c2aac19f65c5d9eeea41aa72db917c1029faafdd71789a1a040bdc18f40d63690e22ccae5d7070f194
+ languageName: node
+ linkType: hard
+
+"@opentelemetry/core@npm:2.10.0, @opentelemetry/core@npm:^2.8.0":
+ version: 2.10.0
+ resolution: "@opentelemetry/core@npm:2.10.0"
+ dependencies:
+ "@opentelemetry/semantic-conventions": "npm:^1.29.0"
+ peerDependencies:
+ "@opentelemetry/api": ">=1.0.0 <1.10.0"
+ checksum: 10/b95d912461d878a23e092317a98eb593b2316e0e63bb0618f351aba8fcb92253553ba8d4ceac3f575b4152325a85da2cf39f4e68123088ef47429f7328c971e5
+ languageName: node
+ linkType: hard
+
+"@opentelemetry/resources@npm:2.10.0":
+ version: 2.10.0
+ resolution: "@opentelemetry/resources@npm:2.10.0"
+ dependencies:
+ "@opentelemetry/core": "npm:2.10.0"
+ "@opentelemetry/semantic-conventions": "npm:^1.29.0"
+ peerDependencies:
+ "@opentelemetry/api": ">=1.3.0 <1.10.0"
+ checksum: 10/514248ae27380231a3f1f3ecbea5f2bd2cab4f8fed37b265c07501e542bd5ac84be500fee44a018ae7af3c465c59984e0878ba8571a2c7e65976477ad5e70b7a
+ languageName: node
+ linkType: hard
+
+"@opentelemetry/sdk-metrics@npm:^2.8.0":
+ version: 2.10.0
+ resolution: "@opentelemetry/sdk-metrics@npm:2.10.0"
+ dependencies:
+ "@opentelemetry/core": "npm:2.10.0"
+ "@opentelemetry/resources": "npm:2.10.0"
+ peerDependencies:
+ "@opentelemetry/api": ">=1.9.0 <1.10.0"
+ checksum: 10/aebff94cc886e4873818a15c777685691ed3aeffde9e1782407a57cb551647933428a44cafa7050296a8bc09c4da761e2467625eb8b0503dab7e6097363ee84f
+ languageName: node
+ linkType: hard
+
+"@opentelemetry/semantic-conventions@npm:^1.29.0":
+ version: 1.43.0
+ resolution: "@opentelemetry/semantic-conventions@npm:1.43.0"
+ checksum: 10/44c0e667cbfbecd98911cd6a90dc5f873de262da82d6684f467a87d529098b04fb2b9705bbd3524ecdedf13c62914d9ccf0ddcc4104dbba5062faf68f361aef4
+ languageName: node
+ linkType: hard
+
+"@pkgjs/parseargs@npm:^0.11.0":
+ version: 0.11.0
+ resolution: "@pkgjs/parseargs@npm:0.11.0"
+ checksum: 10/115e8ceeec6bc69dff2048b35c0ab4f8bbee12d8bb6c1f4af758604586d802b6e669dcb02dda61d078de42c2b4ddce41b3d9e726d7daa6b4b850f4adbf7333ff
+ languageName: node
+ linkType: hard
+
+"@pkgr/core@npm:^0.2.9":
+ version: 0.2.9
+ resolution: "@pkgr/core@npm:0.2.9"
+ checksum: 10/bb2fb86977d63f836f8f5b09015d74e6af6488f7a411dcd2bfdca79d76b5a681a9112f41c45bdf88a9069f049718efc6f3900d7f1de66a2ec966068308ae517f
+ languageName: node
+ linkType: hard
+
+"@polka/url@npm:^1.0.0-next.24":
+ version: 1.0.0-next.29
+ resolution: "@polka/url@npm:1.0.0-next.29"
+ checksum: 10/69ca11ab15a4ffec7f0b07fcc4e1f01489b3d9683a7e1867758818386575c60c213401259ba3705b8a812228d17e2bfd18e6f021194d943fff4bca389c9d4f28
+ languageName: node
+ linkType: hard
+
+"@postalsys/gettext@npm:^4.1.0":
+ version: 4.1.1
+ resolution: "@postalsys/gettext@npm:4.1.1"
+ checksum: 10/eb94234009a1ef72de5338265d975f63cd40bb3551ef6159b23ed72bb8a80f630a170124d5a4e51b3f5e6b4d534a6cbc5d419387323613c7355a88f23cfe9306
+ languageName: node
+ linkType: hard
+
+"@rsbuild/plugin-check-syntax@npm:1.6.1":
+ version: 1.6.1
+ resolution: "@rsbuild/plugin-check-syntax@npm:1.6.1"
+ dependencies:
+ acorn: "npm:^8.15.0"
+ browserslist-to-es-version: "npm:^1.2.0"
+ htmlparser2: "npm:10.0.0"
+ picocolors: "npm:^1.1.1"
+ source-map: "npm:^0.7.6"
+ peerDependencies:
+ "@rsbuild/core": ^1.0.0 || ^2.0.0-0
+ peerDependenciesMeta:
+ "@rsbuild/core":
+ optional: true
+ checksum: 10/9ae6097a0800dd7bd8802dc9517d34d4e48a0d691b185e5a4b48f3830a11e7b40ed02e04db1d00edfe3c2dd8736748b02af3d58743dfaf74193b94248061c0b0
+ languageName: node
+ linkType: hard
+
+"@rsdoctor/client@npm:1.5.7":
+ version: 1.5.7
+ resolution: "@rsdoctor/client@npm:1.5.7"
+ checksum: 10/4cd49643ef536f5a30570540c7750a8868602750e33888f1629968ac2b8414b75f4faaf3345ce19daf4495d8f9ba4cc2752556d86a9896cc658b52b3c516aa37
+ languageName: node
+ linkType: hard
+
+"@rsdoctor/core@npm:1.5.7":
+ version: 1.5.7
+ resolution: "@rsdoctor/core@npm:1.5.7"
+ dependencies:
+ "@rsbuild/plugin-check-syntax": "npm:1.6.1"
+ "@rsdoctor/graph": "npm:1.5.7"
+ "@rsdoctor/sdk": "npm:1.5.7"
+ "@rsdoctor/types": "npm:1.5.7"
+ "@rsdoctor/utils": "npm:1.5.7"
+ "@rspack/resolver": "npm:0.2.8"
+ browserslist-load-config: "npm:^1.0.1"
+ es-toolkit: "npm:^1.45.1"
+ filesize: "npm:^10.1.6"
+ fs-extra: "npm:^11.1.1"
+ semver: "npm:^7.7.4"
+ source-map: "npm:^0.7.6"
+ checksum: 10/90ccc63c002d911a1a336bd05919078709c35a67fa4d7cb4677428674aff25929482dbb094521b8a9e823988a00ba84a41cb60b7f7b425a91dcb10f340c05d9a
+ languageName: node
+ linkType: hard
+
+"@rsdoctor/graph@npm:1.5.7":
+ version: 1.5.7
+ resolution: "@rsdoctor/graph@npm:1.5.7"
+ dependencies:
+ "@rsdoctor/types": "npm:1.5.7"
+ "@rsdoctor/utils": "npm:1.5.7"
+ es-toolkit: "npm:^1.45.1"
+ path-browserify: "npm:1.0.1"
+ source-map: "npm:^0.7.6"
+ checksum: 10/95ccc588582e96b9b0d734f23985086cff910d012b195b42f3dad98a62985c890e02c323d09507bf17897271cd11bea27a931af22e7311147c40a6b9d5083e5b
+ languageName: node
+ linkType: hard
+
+"@rsdoctor/rspack-plugin@npm:1.5.7":
+ version: 1.5.7
+ resolution: "@rsdoctor/rspack-plugin@npm:1.5.7"
+ dependencies:
+ "@rsdoctor/core": "npm:1.5.7"
+ "@rsdoctor/graph": "npm:1.5.7"
+ "@rsdoctor/sdk": "npm:1.5.7"
+ "@rsdoctor/types": "npm:1.5.7"
+ "@rsdoctor/utils": "npm:1.5.7"
+ peerDependencies:
+ "@rspack/core": "*"
+ peerDependenciesMeta:
+ "@rspack/core":
+ optional: true
+ checksum: 10/411694b90e2a99333bdce14522f73048dc7561642786b7835b9d50f116c336e20d9ffdbfac2d533b5a85b68e18fcfdb67423f2cafb11c99f8e0ed5cc811c9e09
+ languageName: node
+ linkType: hard
+
+"@rsdoctor/sdk@npm:1.5.7":
+ version: 1.5.7
+ resolution: "@rsdoctor/sdk@npm:1.5.7"
+ dependencies:
+ "@rsdoctor/client": "npm:1.5.7"
+ "@rsdoctor/graph": "npm:1.5.7"
+ "@rsdoctor/types": "npm:1.5.7"
+ "@rsdoctor/utils": "npm:1.5.7"
+ launch-editor: "npm:^2.13.2"
+ safer-buffer: "npm:2.1.2"
+ socket.io: "npm:4.8.1"
+ tapable: "npm:2.3.0"
+ checksum: 10/04a0c6421613c509f76a2c4f2822fb3206e1c25ded9b366df8355f0bea78cf346273c8a93c43b35388433c6a88e375d446dd393d57068d7f401241474a8ed018
+ languageName: node
+ linkType: hard
+
+"@rsdoctor/types@npm:1.5.7":
+ version: 1.5.7
+ resolution: "@rsdoctor/types@npm:1.5.7"
+ dependencies:
+ "@types/connect": "npm:3.4.38"
+ "@types/estree": "npm:1.0.5"
+ "@types/tapable": "npm:2.3.0"
+ source-map: "npm:^0.7.6"
+ peerDependencies:
+ "@rspack/core": "*"
+ webpack: 5.x
+ peerDependenciesMeta:
+ "@rspack/core":
+ optional: true
+ webpack:
+ optional: true
+ checksum: 10/d62084127a94a8aaded3fd9ba83995a3a2a8ae9b3c27766d44166f6b0da283e87b8eb174d52065132633e34eed798ec242c8c5b122b591349bb0e0b5c85f3ef4
+ languageName: node
+ linkType: hard
+
+"@rsdoctor/utils@npm:1.5.7":
+ version: 1.5.7
+ resolution: "@rsdoctor/utils@npm:1.5.7"
+ dependencies:
+ "@babel/code-frame": "npm:7.26.2"
+ "@rsdoctor/types": "npm:1.5.7"
+ "@types/estree": "npm:1.0.5"
+ acorn: "npm:^8.10.0"
+ acorn-import-attributes: "npm:^1.9.5"
+ acorn-walk: "npm:8.3.5"
+ deep-eql: "npm:4.1.4"
+ envinfo: "npm:7.21.0"
+ fs-extra: "npm:^11.1.1"
+ get-port: "npm:5.1.1"
+ json-stream-stringify: "npm:3.0.1"
+ lines-and-columns: "npm:2.0.4"
+ picocolors: "npm:^1.1.1"
+ rslog: "npm:^1.3.2"
+ strip-ansi: "npm:^6.0.1"
+ checksum: 10/dde280555811b13dd0e1cf619597ebc08170cf59647bc86953c73d09b612e8eca5f3fb09a2b6264059e3d79e6a0e2f47b50c88636a950da9bbb9a8490e16fcff
+ languageName: node
+ linkType: hard
+
+"@rspack/binding-darwin-arm64@npm:1.7.1":
+ version: 1.7.1
+ resolution: "@rspack/binding-darwin-arm64@npm:1.7.1"
+ conditions: os=darwin & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@rspack/binding-darwin-x64@npm:1.7.1":
+ version: 1.7.1
+ resolution: "@rspack/binding-darwin-x64@npm:1.7.1"
+ conditions: os=darwin & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@rspack/binding-linux-arm64-gnu@npm:1.7.1":
+ version: 1.7.1
+ resolution: "@rspack/binding-linux-arm64-gnu@npm:1.7.1"
+ conditions: os=linux & cpu=arm64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@rspack/binding-linux-arm64-musl@npm:1.7.1":
+ version: 1.7.1
+ resolution: "@rspack/binding-linux-arm64-musl@npm:1.7.1"
+ conditions: os=linux & cpu=arm64 & libc=musl
+ languageName: node
+ linkType: hard
+
+"@rspack/binding-linux-x64-gnu@npm:1.7.1":
+ version: 1.7.1
+ resolution: "@rspack/binding-linux-x64-gnu@npm:1.7.1"
+ conditions: os=linux & cpu=x64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@rspack/binding-linux-x64-musl@npm:1.7.1":
+ version: 1.7.1
+ resolution: "@rspack/binding-linux-x64-musl@npm:1.7.1"
+ conditions: os=linux & cpu=x64 & libc=musl
+ languageName: node
+ linkType: hard
+
+"@rspack/binding-wasm32-wasi@npm:1.7.1":
+ version: 1.7.1
+ resolution: "@rspack/binding-wasm32-wasi@npm:1.7.1"
+ dependencies:
+ "@napi-rs/wasm-runtime": "npm:1.0.7"
+ conditions: cpu=wasm32
+ languageName: node
+ linkType: hard
+
+"@rspack/binding-win32-arm64-msvc@npm:1.7.1":
+ version: 1.7.1
+ resolution: "@rspack/binding-win32-arm64-msvc@npm:1.7.1"
+ conditions: os=win32 & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@rspack/binding-win32-ia32-msvc@npm:1.7.1":
+ version: 1.7.1
+ resolution: "@rspack/binding-win32-ia32-msvc@npm:1.7.1"
+ conditions: os=win32 & cpu=ia32
+ languageName: node
+ linkType: hard
+
+"@rspack/binding-win32-x64-msvc@npm:1.7.1":
+ version: 1.7.1
+ resolution: "@rspack/binding-win32-x64-msvc@npm:1.7.1"
+ conditions: os=win32 & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@rspack/binding@npm:1.7.1":
+ version: 1.7.1
+ resolution: "@rspack/binding@npm:1.7.1"
+ dependencies:
+ "@rspack/binding-darwin-arm64": "npm:1.7.1"
+ "@rspack/binding-darwin-x64": "npm:1.7.1"
+ "@rspack/binding-linux-arm64-gnu": "npm:1.7.1"
+ "@rspack/binding-linux-arm64-musl": "npm:1.7.1"
+ "@rspack/binding-linux-x64-gnu": "npm:1.7.1"
+ "@rspack/binding-linux-x64-musl": "npm:1.7.1"
+ "@rspack/binding-wasm32-wasi": "npm:1.7.1"
+ "@rspack/binding-win32-arm64-msvc": "npm:1.7.1"
+ "@rspack/binding-win32-ia32-msvc": "npm:1.7.1"
+ "@rspack/binding-win32-x64-msvc": "npm:1.7.1"
+ dependenciesMeta:
+ "@rspack/binding-darwin-arm64":
+ optional: true
+ "@rspack/binding-darwin-x64":
+ optional: true
+ "@rspack/binding-linux-arm64-gnu":
+ optional: true
+ "@rspack/binding-linux-arm64-musl":
+ optional: true
+ "@rspack/binding-linux-x64-gnu":
+ optional: true
+ "@rspack/binding-linux-x64-musl":
+ optional: true
+ "@rspack/binding-wasm32-wasi":
+ optional: true
+ "@rspack/binding-win32-arm64-msvc":
+ optional: true
+ "@rspack/binding-win32-ia32-msvc":
+ optional: true
+ "@rspack/binding-win32-x64-msvc":
+ optional: true
+ checksum: 10/2ebdcfb4787aa6b41f143e386915c6afddea306ea7edddf094071030e8ec49ee4ba84d1bf1ddf4813b34dba8df884bd782eebb90df5244f3c33831f85369877f
languageName: node
linkType: hard
-"@mos-connection/helper@npm:^5.0.0-alpha.0":
- version: 5.0.0-alpha.0
- resolution: "@mos-connection/helper@npm:5.0.0-alpha.0"
+"@rspack/cli@npm:1.7.1":
+ version: 1.7.1
+ resolution: "@rspack/cli@npm:1.7.1"
dependencies:
- "@mos-connection/model": "npm:5.0.0-alpha.0"
- iconv-lite: "npm:^0.7.0"
- tslib: "npm:^2.8.1"
- xml-js: "npm:^1.6.11"
- xmlbuilder: "npm:^15.1.1"
- checksum: 10/bcfcd90839c508bcf38294a27824357c61c3ac76317beb127ad1b984a75942eaad3e04353ada962e5ee93ddbbb9e1dc70503230e74f98738519b0d64e0786a16
+ "@discoveryjs/json-ext": "npm:^0.5.7"
+ "@rspack/dev-server": "npm:~1.1.5"
+ exit-hook: "npm:^4.0.0"
+ webpack-bundle-analyzer: "npm:4.10.2"
+ peerDependencies:
+ "@rspack/core": ^1.0.0-alpha || ^1.x
+ bin:
+ rspack: bin/rspack.js
+ checksum: 10/e8b32556b4c9d229258d70c8d64f0efab19163db7e70f41405a282e56459081e3ce737e0ac7f00150ca1c6bcc91d0ac50496030bca762f9406bd4c258a785cc8
languageName: node
linkType: hard
-"@mos-connection/model@npm:5.0.0-alpha.0, @mos-connection/model@npm:^5.0.0-alpha.0":
- version: 5.0.0-alpha.0
- resolution: "@mos-connection/model@npm:5.0.0-alpha.0"
- checksum: 10/e66edde4a7f0c20bc468151e5e90b49edd34dc63837a573b30400c3f1e981da2b3d6c504f361a8416eed545477598dc64999543ee5bd33fdcc70786e1330784f
+"@rspack/core@npm:1.7.1":
+ version: 1.7.1
+ resolution: "@rspack/core@npm:1.7.1"
+ dependencies:
+ "@module-federation/runtime-tools": "npm:0.22.0"
+ "@rspack/binding": "npm:1.7.1"
+ "@rspack/lite-tapable": "npm:1.1.0"
+ peerDependencies:
+ "@swc/helpers": ">=0.5.1"
+ peerDependenciesMeta:
+ "@swc/helpers":
+ optional: true
+ checksum: 10/0fe6c0d1fa9ffe9c6b4c0032c6c69b50bdd4ff5d3dbe508ca68630053e1413ef249b3bc2a423e5e16c0bfa1de5da3c39337e87976a22eb86039fc0226ed1880d
languageName: node
linkType: hard
-"@napi-rs/wasm-runtime@npm:^0.2.11":
- version: 0.2.12
- resolution: "@napi-rs/wasm-runtime@npm:0.2.12"
+"@rspack/dev-server@npm:~1.1.5":
+ version: 1.1.5
+ resolution: "@rspack/dev-server@npm:1.1.5"
dependencies:
- "@emnapi/core": "npm:^1.4.3"
- "@emnapi/runtime": "npm:^1.4.3"
- "@tybys/wasm-util": "npm:^0.10.0"
- checksum: 10/5fd518182427980c28bc724adf06c5f32f9a8915763ef560b5f7d73607d30cd15ac86d0cbd2eb80d4cfab23fc80d0876d89ca36a9daadcb864bc00917c94187c
+ chokidar: "npm:^3.6.0"
+ http-proxy-middleware: "npm:^2.0.9"
+ p-retry: "npm:^6.2.0"
+ webpack-dev-server: "npm:5.2.2"
+ ws: "npm:^8.18.0"
+ peerDependencies:
+ "@rspack/core": "*"
+ checksum: 10/67a747d998f9a2449cb1c6c5791ffc812c9d99a7219595359ce960063f344fde9f8f2000bbc9633dc490082f69b74a20b8f319697bd19beca65bd108f5dff5e5
languageName: node
linkType: hard
-"@nodelib/fs.scandir@npm:2.1.5":
- version: 2.1.5
- resolution: "@nodelib/fs.scandir@npm:2.1.5"
- dependencies:
- "@nodelib/fs.stat": "npm:2.0.5"
- run-parallel: "npm:^1.1.9"
- checksum: 10/6ab2a9b8a1d67b067922c36f259e3b3dfd6b97b219c540877a4944549a4d49ea5ceba5663905ab5289682f1f3c15ff441d02f0447f620a42e1cb5e1937174d4b
+"@rspack/lite-tapable@npm:1.1.0":
+ version: 1.1.0
+ resolution: "@rspack/lite-tapable@npm:1.1.0"
+ checksum: 10/41ff73fe5e1b8dccaad746c9c1bd36dd67649e1ad35776f311b5ba94333a397704e11158579e25a6a7e677c51abe35e66987b1b000faef48d4e4ad2470fea150
languageName: node
linkType: hard
-"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2":
- version: 2.0.5
- resolution: "@nodelib/fs.stat@npm:2.0.5"
- checksum: 10/012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0
+"@rspack/resolver-binding-darwin-arm64@npm:0.2.8":
+ version: 0.2.8
+ resolution: "@rspack/resolver-binding-darwin-arm64@npm:0.2.8"
+ conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
-"@nodelib/fs.walk@npm:^1.2.3":
- version: 1.2.8
- resolution: "@nodelib/fs.walk@npm:1.2.8"
- dependencies:
- "@nodelib/fs.scandir": "npm:2.1.5"
- fastq: "npm:^1.6.0"
- checksum: 10/40033e33e96e97d77fba5a238e4bba4487b8284678906a9f616b5579ddaf868a18874c0054a75402c9fbaaa033a25ceae093af58c9c30278e35c23c9479e79b0
+"@rspack/resolver-binding-darwin-x64@npm:0.2.8":
+ version: 0.2.8
+ resolution: "@rspack/resolver-binding-darwin-x64@npm:0.2.8"
+ conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
-"@npmcli/agent@npm:^4.0.0":
- version: 4.0.0
- resolution: "@npmcli/agent@npm:4.0.0"
- dependencies:
- agent-base: "npm:^7.1.0"
- http-proxy-agent: "npm:^7.0.0"
- https-proxy-agent: "npm:^7.0.1"
- lru-cache: "npm:^11.2.1"
- socks-proxy-agent: "npm:^8.0.3"
- checksum: 10/1a81573becc60515031accc696e6405e9b894e65c12b98ef4aeee03b5617c41948633159dbf6caf5dde5b47367eeb749bdc7b7dfb21960930a9060a935c6f636
+"@rspack/resolver-binding-linux-arm64-gnu@npm:0.2.8":
+ version: 0.2.8
+ resolution: "@rspack/resolver-binding-linux-arm64-gnu@npm:0.2.8"
+ conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
-"@npmcli/fs@npm:^5.0.0":
- version: 5.0.0
- resolution: "@npmcli/fs@npm:5.0.0"
- dependencies:
- semver: "npm:^7.3.5"
- checksum: 10/4935c7719d17830d0f9fa46c50be17b2a3c945cec61760f6d0909bce47677c42e1810ca673305890f9e84f008ec4d8e841182f371e42100a8159d15f22249208
+"@rspack/resolver-binding-linux-arm64-musl@npm:0.2.8":
+ version: 0.2.8
+ resolution: "@rspack/resolver-binding-linux-arm64-musl@npm:0.2.8"
+ conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
-"@opentelemetry/api@npm:^1.4.0, @opentelemetry/api@npm:^1.4.1":
- version: 1.9.0
- resolution: "@opentelemetry/api@npm:1.9.0"
- checksum: 10/a607f0eef971893c4f2ee2a4c2069aade6ec3e84e2a1f5c2aac19f65c5d9eeea41aa72db917c1029faafdd71789a1a040bdc18f40d63690e22ccae5d7070f194
+"@rspack/resolver-binding-linux-x64-gnu@npm:0.2.8":
+ version: 0.2.8
+ resolution: "@rspack/resolver-binding-linux-x64-gnu@npm:0.2.8"
+ conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
-"@opentelemetry/core@npm:1.17.0, @opentelemetry/core@npm:^1.11.0":
- version: 1.17.0
- resolution: "@opentelemetry/core@npm:1.17.0"
- dependencies:
- "@opentelemetry/semantic-conventions": "npm:1.17.0"
- peerDependencies:
- "@opentelemetry/api": ">=1.0.0 <1.7.0"
- checksum: 10/809b4754faad1f51b352834a791299e73443c28a30821757233388d812aa2df9a61bd61254a9e580207e501b1be511c178e0414e5de5e2428ee559dc329ebb03
+"@rspack/resolver-binding-linux-x64-musl@npm:0.2.8":
+ version: 0.2.8
+ resolution: "@rspack/resolver-binding-linux-x64-musl@npm:0.2.8"
+ conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
-"@opentelemetry/resources@npm:1.17.0":
- version: 1.17.0
- resolution: "@opentelemetry/resources@npm:1.17.0"
+"@rspack/resolver-binding-wasm32-wasi@npm:0.2.8":
+ version: 0.2.8
+ resolution: "@rspack/resolver-binding-wasm32-wasi@npm:0.2.8"
dependencies:
- "@opentelemetry/core": "npm:1.17.0"
- "@opentelemetry/semantic-conventions": "npm:1.17.0"
- peerDependencies:
- "@opentelemetry/api": ">=1.0.0 <1.7.0"
- checksum: 10/c3555c49a43addbbf2eb24c379195f295250eb163060aca01f662194e973070cabf006d0d9d6e1ed19008442bae46a765c16c23d9ca0d7ba7c4a7988c0047af2
+ "@napi-rs/wasm-runtime": "npm:^1.1.1"
+ conditions: cpu=wasm32
languageName: node
linkType: hard
-"@opentelemetry/sdk-metrics@npm:^1.12.0":
- version: 1.17.0
- resolution: "@opentelemetry/sdk-metrics@npm:1.17.0"
- dependencies:
- "@opentelemetry/core": "npm:1.17.0"
- "@opentelemetry/resources": "npm:1.17.0"
- lodash.merge: "npm:^4.6.2"
- peerDependencies:
- "@opentelemetry/api": ">=1.3.0 <1.7.0"
- checksum: 10/45876ed27d564a64f2b0cc7f63699c5a5a91192cb20f124b15fb12a0e346aec1e5f65f19eb18031977e1a8119972b815573b750f4953dbc5eef150fe4d9eefc3
+"@rspack/resolver-binding-win32-arm64-msvc@npm:0.2.8":
+ version: 0.2.8
+ resolution: "@rspack/resolver-binding-win32-arm64-msvc@npm:0.2.8"
+ conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
-"@opentelemetry/semantic-conventions@npm:1.17.0":
- version: 1.17.0
- resolution: "@opentelemetry/semantic-conventions@npm:1.17.0"
- checksum: 10/1f6bbd4d543ad529ddb3f6b55e08940995b5958fa990bc54bfa50136fc0a93d12a9bfed7f3addb5d84b1afaade8bd4b9afc36d2fe2d65a3f6325511b3a29d851
+"@rspack/resolver-binding-win32-ia32-msvc@npm:0.2.8":
+ version: 0.2.8
+ resolution: "@rspack/resolver-binding-win32-ia32-msvc@npm:0.2.8"
+ conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
-"@pkgjs/parseargs@npm:^0.11.0":
- version: 0.11.0
- resolution: "@pkgjs/parseargs@npm:0.11.0"
- checksum: 10/115e8ceeec6bc69dff2048b35c0ab4f8bbee12d8bb6c1f4af758604586d802b6e669dcb02dda61d078de42c2b4ddce41b3d9e726d7daa6b4b850f4adbf7333ff
+"@rspack/resolver-binding-win32-x64-msvc@npm:0.2.8":
+ version: 0.2.8
+ resolution: "@rspack/resolver-binding-win32-x64-msvc@npm:0.2.8"
+ conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
-"@pkgr/core@npm:^0.1.0":
- version: 0.1.1
- resolution: "@pkgr/core@npm:0.1.1"
- checksum: 10/6f25fd2e3008f259c77207ac9915b02f1628420403b2630c92a07ff963129238c9262afc9e84344c7a23b5cc1f3965e2cd17e3798219f5fd78a63d144d3cceba
+"@rspack/resolver@npm:0.2.8":
+ version: 0.2.8
+ resolution: "@rspack/resolver@npm:0.2.8"
+ dependencies:
+ "@rspack/resolver-binding-darwin-arm64": "npm:0.2.8"
+ "@rspack/resolver-binding-darwin-x64": "npm:0.2.8"
+ "@rspack/resolver-binding-linux-arm64-gnu": "npm:0.2.8"
+ "@rspack/resolver-binding-linux-arm64-musl": "npm:0.2.8"
+ "@rspack/resolver-binding-linux-x64-gnu": "npm:0.2.8"
+ "@rspack/resolver-binding-linux-x64-musl": "npm:0.2.8"
+ "@rspack/resolver-binding-wasm32-wasi": "npm:0.2.8"
+ "@rspack/resolver-binding-win32-arm64-msvc": "npm:0.2.8"
+ "@rspack/resolver-binding-win32-ia32-msvc": "npm:0.2.8"
+ "@rspack/resolver-binding-win32-x64-msvc": "npm:0.2.8"
+ dependenciesMeta:
+ "@rspack/resolver-binding-darwin-arm64":
+ optional: true
+ "@rspack/resolver-binding-darwin-x64":
+ optional: true
+ "@rspack/resolver-binding-linux-arm64-gnu":
+ optional: true
+ "@rspack/resolver-binding-linux-arm64-musl":
+ optional: true
+ "@rspack/resolver-binding-linux-x64-gnu":
+ optional: true
+ "@rspack/resolver-binding-linux-x64-musl":
+ optional: true
+ "@rspack/resolver-binding-wasm32-wasi":
+ optional: true
+ "@rspack/resolver-binding-win32-arm64-msvc":
+ optional: true
+ "@rspack/resolver-binding-win32-ia32-msvc":
+ optional: true
+ "@rspack/resolver-binding-win32-x64-msvc":
+ optional: true
+ checksum: 10/1216853602eb1283606a8b5bd166c3ac38308520fec457b3f5e585a959fe5881a0ac69af271bdb55cbf4dddbb76b0eb79711687a3990612462bb23101630ebf9
languageName: node
linkType: hard
-"@pkgr/core@npm:^0.2.9":
- version: 0.2.9
- resolution: "@pkgr/core@npm:0.2.9"
- checksum: 10/bb2fb86977d63f836f8f5b09015d74e6af6488f7a411dcd2bfdca79d76b5a681a9112f41c45bdf88a9069f049718efc6f3900d7f1de66a2ec966068308ae517f
+"@sec-ant/readable-stream@npm:^0.4.1":
+ version: 0.4.1
+ resolution: "@sec-ant/readable-stream@npm:0.4.1"
+ checksum: 10/aac89581652ac85debe7c5303451c2ebf8bf25ca25db680e4b9b73168f6940616d9a4bbe3348981827b1159b14e2f2e6af4b7bd5735cac898c12d5c51909c102
languageName: node
linkType: hard
@@ -1228,6 +2280,39 @@ __metadata:
languageName: node
linkType: hard
+"@simple-libs/child-process-utils@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "@simple-libs/child-process-utils@npm:2.0.0"
+ dependencies:
+ "@simple-libs/stream-utils": "npm:^2.0.0"
+ checksum: 10/d2388d0f30b2bfaedf444530568ccdd01ca2a6cc3f4dfa3244abaffe3683b03add96727735560be5fb951d0b512f5bfef69219653690c7305f8fc953d3723333
+ languageName: node
+ linkType: hard
+
+"@simple-libs/hosted-git-info@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "@simple-libs/hosted-git-info@npm:2.0.0"
+ checksum: 10/14a562db8cc2d74e9c2a9840988ea8a8093c3f31c9df50cf0125f12861ff0b2eba5794b19fbd831c54ba433e9048030610d2b6ef3579c339c161130c6168bd68
+ languageName: node
+ linkType: hard
+
+"@simple-libs/normalize-package-data@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "@simple-libs/normalize-package-data@npm:1.0.0"
+ dependencies:
+ "@simple-libs/hosted-git-info": "npm:^2.0.0"
+ semver: "npm:^7.8.5"
+ checksum: 10/ee45e62169d8c323bb422ced14ee9d8a9cb6dbc33abf17ad74791289f1e6557d02fc75fda2feeeeab30b8502d44cc0a14e67690ad631e34f3fb3838a57353387
+ languageName: node
+ linkType: hard
+
+"@simple-libs/stream-utils@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "@simple-libs/stream-utils@npm:2.0.0"
+ checksum: 10/012fddda038a0657e62ae2cbb4f89c9ac56d0d2c611b695695ddaabf70cfc9c5207e6b88a9cb3497b9ff05fc74fbe75296cb70f1d1cf9c015efff197b06ee481
+ languageName: node
+ linkType: hard
+
"@sinclair/typebox@npm:^0.34.0":
version: 0.34.48
resolution: "@sinclair/typebox@npm:0.34.48"
@@ -1235,6 +2320,13 @@ __metadata:
languageName: node
linkType: hard
+"@sindresorhus/merge-streams@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "@sindresorhus/merge-streams@npm:4.0.0"
+ checksum: 10/16551c787f5328c8ef05fd9831ade64369ccc992df78deb635ec6c44af217d2f1b43f8728c348cdc4e00585ff2fad6e00d8155199cbf6b154acc45fe65cbf0aa
+ languageName: node
+ linkType: hard
+
"@sinonjs/commons@npm:^3.0.1":
version: 3.0.1
resolution: "@sinonjs/commons@npm:3.0.1"
@@ -1244,30 +2336,33 @@ __metadata:
languageName: node
linkType: hard
-"@sinonjs/fake-timers@npm:^13.0.0":
- version: 13.0.5
- resolution: "@sinonjs/fake-timers@npm:13.0.5"
+"@sinonjs/fake-timers@npm:^15.4.0":
+ version: 15.4.0
+ resolution: "@sinonjs/fake-timers@npm:15.4.0"
dependencies:
"@sinonjs/commons": "npm:^3.0.1"
- checksum: 10/11ee417968fc4dce1896ab332ac13f353866075a9d2a88ed1f6258f17cc4f7d93e66031b51fcddb8c203aa4d53fd980b0ae18aba06269f4682164878a992ec3f
+ checksum: 10/3960a9fe065f38a4228c66d184eeb101e8a6af9cbfc8454dd5d45ac397201da72134048d4e808a25993494885b172dd6deecdad9949bbf4c1d3a220ef561f6cc
languageName: node
linkType: hard
-"@slack/types@npm:^2.9.0":
- version: 2.14.0
- resolution: "@slack/types@npm:2.14.0"
- checksum: 10/fa24a113b88e087f899078504c2ba50ab9795f7c2dd1a2d95b28217a3af20e554494f9cc3b8c8ce173120990d98e19400c95369f9067cecfcc46c08b59d2a46f
+"@slack/types@npm:^2.20.1":
+ version: 2.20.1
+ resolution: "@slack/types@npm:2.20.1"
+ checksum: 10/5d13017df8c8468f34e4d24579a26f5ada934a6b7139e88d894c7d1d14f47da826a20c08e2537c6ab74d7624a4b193dc2b34458bae6466173fad1fd5c053b6f6
languageName: node
linkType: hard
-"@slack/webhook@npm:^7.0.6":
- version: 7.0.6
- resolution: "@slack/webhook@npm:7.0.6"
+"@slack/webhook@npm:^7.2.0":
+ version: 7.2.0
+ resolution: "@slack/webhook@npm:7.2.0"
dependencies:
- "@slack/types": "npm:^2.9.0"
- "@types/node": "npm:>=18.0.0"
- axios: "npm:^1.11.0"
- checksum: 10/8f8083f9654e590f04731985b337f576842b2034a9261010f85d813c4e262f69d856c142b0dcf2022bfe69c22c2e97cc7d877a79989cd0f7a0cf2554ae0754ed
+ "@slack/types": "npm:^2.20.1"
+ "@types/node": "npm:>=18"
+ "@types/retry": "npm:0.12.0"
+ axios: "npm:^1.16.0"
+ p-retry: "npm:^4.6.2"
+ retry: "npm:^0.13.1"
+ checksum: 10/daca1fe5235a945628a7fa7f4230ca81a230e01e1953d38c53eb802b7a096593cd7598404d7949432567cc6916f91f7717135e2810fea1ace28c8ecb6646d3cb
languageName: node
linkType: hard
@@ -1281,6 +2376,13 @@ __metadata:
languageName: node
linkType: hard
+"@socket.io/component-emitter@npm:~3.1.0":
+ version: 3.1.2
+ resolution: "@socket.io/component-emitter@npm:3.1.2"
+ checksum: 10/89888f00699eb34e3070624eb7b8161fa29f064aeb1389a48f02195d55dd7c52a504e52160016859f6d6dffddd54324623cdd47fd34b3d46f9ed96c18c456edc
+ languageName: node
+ linkType: hard
+
"@sofie-automation/blueprints-integration@portal:../packages/blueprints-integration::locator=automation-core%40workspace%3A.":
version: 0.0.0-use.local
resolution: "@sofie-automation/blueprints-integration@portal:../packages/blueprints-integration::locator=automation-core%40workspace%3A."
@@ -1291,21 +2393,22 @@ __metadata:
languageName: node
linkType: soft
-"@sofie-automation/code-standard-preset@npm:^3.0.0":
- version: 3.0.0
- resolution: "@sofie-automation/code-standard-preset@npm:3.0.0"
+"@sofie-automation/code-standard-preset@npm:^3.2.2":
+ version: 3.2.2
+ resolution: "@sofie-automation/code-standard-preset@npm:3.2.2"
dependencies:
- "@sofie-automation/eslint-plugin": "npm:0.2.0"
+ "@sofie-automation/eslint-plugin": "npm:0.2.1"
+ "@vitest/eslint-plugin": "npm:^1.6.6"
date-fns: "npm:^4.1.0"
- eslint-config-prettier: "npm:^10.0.1"
- eslint-plugin-jest: "npm:^28.11.0"
- eslint-plugin-n: "npm:^17.15.1"
- eslint-plugin-prettier: "npm:^5.2.3"
+ eslint-config-prettier: "npm:^10.1.8"
+ eslint-plugin-jest: "npm:^28.14.0"
+ eslint-plugin-n: "npm:^17.23.2"
+ eslint-plugin-prettier: "npm:^5.5.5"
license-checker: "npm:^25.0.1"
meow: "npm:^13.2.0"
read-package-up: "npm:^11.0.0"
- semver: "npm:^7.6.3"
- typescript-eslint: "npm:^8.21.0"
+ semver: "npm:^7.7.3"
+ typescript-eslint: "npm:^8.54.0"
peerDependencies:
eslint: ^9
prettier: ^3
@@ -1313,7 +2416,7 @@ __metadata:
bin:
sofie-licensecheck: ./bin/checkLicenses.mjs
sofie-version: ./bin/updateVersion.mjs
- checksum: 10/fa61dc1f90377ad2196f2e6c33dea9988bbe9cfd6eb8b277a083ae1147c00e83e526b7520bb5548d4935fb91b7f9f1d8f9b701db419da760488c318ea42a243f
+ checksum: 10/e930ea2e5dfb6502f121cf25d157c57450d1c96be5c65c4d3b3695ec3251683d1373c1cd189d47daff2b4dc7b7f6854d3fb92e38a21fc03418886707324bcd92
languageName: node
linkType: hard
@@ -1324,28 +2427,28 @@ __metadata:
"@sofie-automation/blueprints-integration": "npm:26.3.0-2"
"@sofie-automation/shared-lib": "npm:26.3.0-2"
fast-clone: "npm:^1.5.13"
- i18next: "npm:^21.10.0"
+ i18next: "npm:^26.3.6"
influx: "npm:^5.12.0"
- nanoid: "npm:^3.3.11"
+ nanoid: "npm:^3.3.16"
object-path: "npm:^0.11.8"
prom-client: "npm:^15.1.3"
- timecode: "npm:0.0.4"
tslib: "npm:^2.8.1"
type-fest: "npm:^4.41.0"
- underscore: "npm:^1.13.7"
+ underscore: "npm:^1.13.8"
peerDependencies:
- mongodb: ^6.12.0
+ mongodb: ^7.1.1
languageName: node
linkType: soft
-"@sofie-automation/eslint-plugin@npm:0.2.0":
- version: 0.2.0
- resolution: "@sofie-automation/eslint-plugin@npm:0.2.0"
+"@sofie-automation/eslint-plugin@npm:0.2.1":
+ version: 0.2.1
+ resolution: "@sofie-automation/eslint-plugin@npm:0.2.1"
dependencies:
"@typescript-eslint/utils": "npm:^8.21.0"
+ tslib: "npm:^2.8.1"
peerDependencies:
eslint: ^9
- checksum: 10/7d2898cab2d89fcab727597a7a8ff49dacb030166f390d4b20ec27fbb53f8e330a2a034090484611f1cb0fe98bd4a1bc961e0cc6e77236d5c84065ae830fa1ad
+ checksum: 10/650cd6f075d531a9f88012aff314d3a9d5a0e9414f2062a13ba49ba955ad6140255ec863ee69ea2b112c31228341de7ad4f42ecf3ebd39cfdea1fba5be62da0b
languageName: node
linkType: hard
@@ -1353,22 +2456,22 @@ __metadata:
version: 0.0.0-use.local
resolution: "@sofie-automation/job-worker@portal:../packages/job-worker::locator=automation-core%40workspace%3A."
dependencies:
- "@slack/webhook": "npm:^7.0.6"
+ "@slack/webhook": "npm:^7.2.0"
"@sofie-automation/blueprints-integration": "npm:26.3.0-2"
"@sofie-automation/corelib": "npm:26.3.0-2"
"@sofie-automation/shared-lib": "npm:26.3.0-2"
amqplib: "npm:0.10.5"
- chrono-node: "npm:^2.9.0"
+ chrono-node: "npm:^2.9.1"
deepmerge: "npm:^4.3.1"
- elastic-apm-node: "npm:^4.15.0"
- mongodb: "npm:^6.21.0"
+ elastic-apm-node: "npm:^4.18.0"
+ mongodb: "npm:^7.1.1"
p-lazy: "npm:^3.1.0"
p-timeout: "npm:^4.1.0"
superfly-timeline: "npm:9.2.0"
- threadedclass: "npm:^1.3.0"
+ threadedclass: "npm:^1.4.0"
tslib: "npm:^2.8.1"
type-fest: "npm:^4.41.0"
- underscore: "npm:^1.13.7"
+ underscore: "npm:^1.13.8"
languageName: node
linkType: soft
@@ -1381,12 +2484,12 @@ __metadata:
"@sofie-automation/corelib": "npm:26.3.0-2"
"@sofie-automation/shared-lib": "npm:26.3.0-2"
deep-extend: "npm:0.6.0"
- semver: "npm:^7.7.3"
+ semver: "npm:^7.8.5"
type-fest: "npm:^4.41.0"
- underscore: "npm:^1.13.7"
+ underscore: "npm:^1.13.8"
peerDependencies:
- i18next: ^21.10.0
- mongodb: ^6.12.0
+ i18next: ^26.0.4
+ mongodb: ^7.1.1
languageName: node
linkType: soft
@@ -1395,13 +2498,184 @@ __metadata:
resolution: "@sofie-automation/shared-lib@portal:../packages/shared-lib::locator=automation-core%40workspace%3A."
dependencies:
"@mos-connection/model": "npm:^5.0.0-alpha.0"
- kairos-lib: "npm:^0.2.3"
- timeline-state-resolver-types: "npm:10.0.0-nightly-chore-update-atem-state-20260309-091304-dea89c910.0"
+ kairos-lib: "npm:^1.0.0"
+ timeline-state-resolver-types: "npm:10.0.0-nightly-main-20260714-110908-7c702dedf.0"
tslib: "npm:^2.8.1"
type-fest: "npm:^4.41.0"
languageName: node
linkType: soft
+"@swc/core-darwin-arm64@npm:1.15.46":
+ version: 1.15.46
+ resolution: "@swc/core-darwin-arm64@npm:1.15.46"
+ conditions: os=darwin & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@swc/core-darwin-x64@npm:1.15.46":
+ version: 1.15.46
+ resolution: "@swc/core-darwin-x64@npm:1.15.46"
+ conditions: os=darwin & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@swc/core-linux-arm-gnueabihf@npm:1.15.46":
+ version: 1.15.46
+ resolution: "@swc/core-linux-arm-gnueabihf@npm:1.15.46"
+ conditions: os=linux & cpu=arm
+ languageName: node
+ linkType: hard
+
+"@swc/core-linux-arm64-gnu@npm:1.15.46":
+ version: 1.15.46
+ resolution: "@swc/core-linux-arm64-gnu@npm:1.15.46"
+ conditions: os=linux & cpu=arm64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@swc/core-linux-arm64-musl@npm:1.15.46":
+ version: 1.15.46
+ resolution: "@swc/core-linux-arm64-musl@npm:1.15.46"
+ conditions: os=linux & cpu=arm64 & libc=musl
+ languageName: node
+ linkType: hard
+
+"@swc/core-linux-ppc64-gnu@npm:1.15.46":
+ version: 1.15.46
+ resolution: "@swc/core-linux-ppc64-gnu@npm:1.15.46"
+ conditions: os=linux & cpu=ppc64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@swc/core-linux-s390x-gnu@npm:1.15.46":
+ version: 1.15.46
+ resolution: "@swc/core-linux-s390x-gnu@npm:1.15.46"
+ conditions: os=linux & cpu=s390x & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@swc/core-linux-x64-gnu@npm:1.15.46":
+ version: 1.15.46
+ resolution: "@swc/core-linux-x64-gnu@npm:1.15.46"
+ conditions: os=linux & cpu=x64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@swc/core-linux-x64-musl@npm:1.15.46":
+ version: 1.15.46
+ resolution: "@swc/core-linux-x64-musl@npm:1.15.46"
+ conditions: os=linux & cpu=x64 & libc=musl
+ languageName: node
+ linkType: hard
+
+"@swc/core-win32-arm64-msvc@npm:1.15.46":
+ version: 1.15.46
+ resolution: "@swc/core-win32-arm64-msvc@npm:1.15.46"
+ conditions: os=win32 & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@swc/core-win32-ia32-msvc@npm:1.15.46":
+ version: 1.15.46
+ resolution: "@swc/core-win32-ia32-msvc@npm:1.15.46"
+ conditions: os=win32 & cpu=ia32
+ languageName: node
+ linkType: hard
+
+"@swc/core-win32-x64-msvc@npm:1.15.46":
+ version: 1.15.46
+ resolution: "@swc/core-win32-x64-msvc@npm:1.15.46"
+ conditions: os=win32 & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@swc/core@npm:^1.15.18, @swc/core@npm:^1.15.41, @swc/core@npm:^1.15.46":
+ version: 1.15.46
+ resolution: "@swc/core@npm:1.15.46"
+ dependencies:
+ "@swc/core-darwin-arm64": "npm:1.15.46"
+ "@swc/core-darwin-x64": "npm:1.15.46"
+ "@swc/core-linux-arm-gnueabihf": "npm:1.15.46"
+ "@swc/core-linux-arm64-gnu": "npm:1.15.46"
+ "@swc/core-linux-arm64-musl": "npm:1.15.46"
+ "@swc/core-linux-ppc64-gnu": "npm:1.15.46"
+ "@swc/core-linux-s390x-gnu": "npm:1.15.46"
+ "@swc/core-linux-x64-gnu": "npm:1.15.46"
+ "@swc/core-linux-x64-musl": "npm:1.15.46"
+ "@swc/core-win32-arm64-msvc": "npm:1.15.46"
+ "@swc/core-win32-ia32-msvc": "npm:1.15.46"
+ "@swc/core-win32-x64-msvc": "npm:1.15.46"
+ "@swc/counter": "npm:^0.1.3"
+ "@swc/types": "npm:^0.1.27"
+ peerDependencies:
+ "@swc/helpers": ">=0.5.17"
+ dependenciesMeta:
+ "@swc/core-darwin-arm64":
+ optional: true
+ "@swc/core-darwin-x64":
+ optional: true
+ "@swc/core-linux-arm-gnueabihf":
+ optional: true
+ "@swc/core-linux-arm64-gnu":
+ optional: true
+ "@swc/core-linux-arm64-musl":
+ optional: true
+ "@swc/core-linux-ppc64-gnu":
+ optional: true
+ "@swc/core-linux-s390x-gnu":
+ optional: true
+ "@swc/core-linux-x64-gnu":
+ optional: true
+ "@swc/core-linux-x64-musl":
+ optional: true
+ "@swc/core-win32-arm64-msvc":
+ optional: true
+ "@swc/core-win32-ia32-msvc":
+ optional: true
+ "@swc/core-win32-x64-msvc":
+ optional: true
+ peerDependenciesMeta:
+ "@swc/helpers":
+ optional: true
+ checksum: 10/7345ee1a99729f0082bfe7988bada60c8390bc8642cb06d33514773a0ab1b6a350d0213538058daedbf964871e1056426971c7c1993c8da5d50c52b86c4b6371
+ languageName: node
+ linkType: hard
+
+"@swc/counter@npm:^0.1.3":
+ version: 0.1.3
+ resolution: "@swc/counter@npm:0.1.3"
+ checksum: 10/df8f9cfba9904d3d60f511664c70d23bb323b3a0803ec9890f60133954173047ba9bdeabce28cd70ba89ccd3fd6c71c7b0bd58be85f611e1ffbe5d5c18616598
+ languageName: node
+ linkType: hard
+
+"@swc/helpers@npm:0.5.17":
+ version: 0.5.17
+ resolution: "@swc/helpers@npm:0.5.17"
+ dependencies:
+ tslib: "npm:^2.8.0"
+ checksum: 10/1fc8312a78f1f99c8ec838585445e99763eeebff2356100738cdfdb8ad47d2d38df678ee6edd93a90fe319ac52da67adc14ac00eb82b606c5fb8ebc5d06ec2a2
+ languageName: node
+ linkType: hard
+
+"@swc/types@npm:^0.1.27":
+ version: 0.1.27
+ resolution: "@swc/types@npm:0.1.27"
+ dependencies:
+ "@swc/counter": "npm:^0.1.3"
+ checksum: 10/96b8161fbb3a151741c0b286a5886609219accc45c67b7cf946376c352d76e6c0fb11554d3e1daee3e55fe82156e8237b82245cda8e706f580d1c03272cfa29a
+ languageName: node
+ linkType: hard
+
+"@tokenizer/inflate@npm:^0.4.1":
+ version: 0.4.1
+ resolution: "@tokenizer/inflate@npm:0.4.1"
+ dependencies:
+ debug: "npm:^4.4.3"
+ token-types: "npm:^6.1.1"
+ checksum: 10/27d58757e1a6c004e86f8a5f1a40fe47cb48aa6891864d03de6eab27d42fafc1456f396bc8bc300e16913b0a85f42034d011db0213d17e544ed201a7fc24244e
+ languageName: node
+ linkType: hard
+
"@tokenizer/token@npm:^0.3.0":
version: 0.3.0
resolution: "@tokenizer/token@npm:0.3.0"
@@ -1409,12 +2683,12 @@ __metadata:
languageName: node
linkType: hard
-"@tybys/wasm-util@npm:^0.10.0":
- version: 0.10.1
- resolution: "@tybys/wasm-util@npm:0.10.1"
+"@tybys/wasm-util@npm:^0.10.0, @tybys/wasm-util@npm:^0.10.1":
+ version: 0.10.2
+ resolution: "@tybys/wasm-util@npm:0.10.2"
dependencies:
tslib: "npm:^2.4.0"
- checksum: 10/7fe0d239397aebb002ac4855d30c197c06a05ea8df8511350a3a5b1abeefe26167c60eda8a5508337571161e4c4b53d7c1342296123f9607af8705369de9fa7f
+ checksum: 10/d12f1dafe12d7a573c406b35ffef0038042b9cc9fbcc74d657267eb635499b956276afc05eebdbd81bea582e1c4c921421a1dd7243a93daaa8c8216b19395c23
languageName: node
linkType: hard
@@ -1468,7 +2742,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/body-parser@npm:*, @types/body-parser@npm:^1.19.6":
+"@types/body-parser@npm:*":
version: 1.19.6
resolution: "@types/body-parser@npm:1.19.6"
dependencies:
@@ -1478,12 +2752,31 @@ __metadata:
languageName: node
linkType: hard
-"@types/connect@npm:*":
- version: 3.4.36
- resolution: "@types/connect@npm:3.4.36"
+"@types/bonjour@npm:^3.5.13":
+ version: 3.5.13
+ resolution: "@types/bonjour@npm:3.5.13"
+ dependencies:
+ "@types/node": "npm:*"
+ checksum: 10/e827570e097bd7d625a673c9c208af2d1a22fa3885c0a1646533cf24394c839c3e5f60ac1bc60c0ddcc69c0615078c9fb2c01b42596c7c582d895d974f2409ee
+ languageName: node
+ linkType: hard
+
+"@types/connect-history-api-fallback@npm:^1.5.4":
+ version: 1.5.4
+ resolution: "@types/connect-history-api-fallback@npm:1.5.4"
+ dependencies:
+ "@types/express-serve-static-core": "npm:*"
+ "@types/node": "npm:*"
+ checksum: 10/e1dee43b8570ffac02d2d47a2b4ba80d3ca0dd1840632dafb221da199e59dbe3778d3d7303c9e23c6b401f37c076935a5bc2aeae1c4e5feaefe1c371fe2073fd
+ languageName: node
+ linkType: hard
+
+"@types/connect@npm:*, @types/connect@npm:3.4.38":
+ version: 3.4.38
+ resolution: "@types/connect@npm:3.4.38"
dependencies:
"@types/node": "npm:*"
- checksum: 10/4dee3d966fb527b98f0cbbdcf6977c9193fc3204ed539b7522fe5e64dfa45f9017bdda4ffb1f760062262fce7701a0ee1c2f6ce2e50af36c74d4e37052303172
+ checksum: 10/7eb1bc5342a9604facd57598a6c62621e244822442976c443efb84ff745246b10d06e8b309b6e80130026a396f19bf6793b7cecd7380169f369dac3bfc46fb99
languageName: node
linkType: hard
@@ -1506,6 +2799,15 @@ __metadata:
languageName: node
linkType: hard
+"@types/cors@npm:^2.8.12":
+ version: 2.8.19
+ resolution: "@types/cors@npm:2.8.19"
+ dependencies:
+ "@types/node": "npm:*"
+ checksum: 10/9545cc532c9218754443f48a0c98c1a9ba4af1fe54a3425c95de75ff3158147bb39e666cb7c6bf98cc56a9c6dc7b4ce5b2cbdae6b55d5942e50c81b76ed6b825
+ languageName: node
+ linkType: hard
+
"@types/deep-extend@npm:^0.6.2":
version: 0.6.2
resolution: "@types/deep-extend@npm:0.6.2"
@@ -1513,6 +2815,13 @@ __metadata:
languageName: node
linkType: hard
+"@types/estree@npm:1.0.5":
+ version: 1.0.5
+ resolution: "@types/estree@npm:1.0.5"
+ checksum: 10/7de6d928dd4010b0e20c6919e1a6c27b61f8d4567befa89252055fad503d587ecb9a1e3eab1b1901f923964d7019796db810b7fd6430acb26c32866d126fd408
+ languageName: node
+ linkType: hard
+
"@types/estree@npm:^1.0.6":
version: 1.0.6
resolution: "@types/estree@npm:1.0.6"
@@ -1520,27 +2829,39 @@ __metadata:
languageName: node
linkType: hard
-"@types/express-serve-static-core@npm:^4.17.33":
- version: 4.17.36
- resolution: "@types/express-serve-static-core@npm:4.17.36"
+"@types/express-serve-static-core@npm:*":
+ version: 5.1.1
+ resolution: "@types/express-serve-static-core@npm:5.1.1"
+ dependencies:
+ "@types/node": "npm:*"
+ "@types/qs": "npm:*"
+ "@types/range-parser": "npm:*"
+ "@types/send": "npm:*"
+ checksum: 10/7f3d8cf7e68764c9f3e8f6a12825b69ccf5287347fc1c20b29803d4f08a4abc1153ae11d7258852c61aad50f62ef72d4c1b9c97092b0a90462c3dddec2f6026c
+ languageName: node
+ linkType: hard
+
+"@types/express-serve-static-core@npm:^4.17.21, @types/express-serve-static-core@npm:^4.17.33":
+ version: 4.19.8
+ resolution: "@types/express-serve-static-core@npm:4.19.8"
dependencies:
"@types/node": "npm:*"
"@types/qs": "npm:*"
"@types/range-parser": "npm:*"
"@types/send": "npm:*"
- checksum: 10/47d5c30a4a2a6de5dd1ceef6fed61a2e49e50e09ab3bab67a2bfa4375617c54b0397b3397ef4dad80ae3a7e400943464d857b437dabd9fed88b47256f2be774b
+ checksum: 10/eb1b832343c0991395c9b10e124dc805921ea7c08efe01222d83912123b8c054119d009e9e55c91af6bdbeeec153c0d35411c9c6d80781bc8c0a43e8b1a84387
languageName: node
linkType: hard
-"@types/express@npm:*":
- version: 4.17.17
- resolution: "@types/express@npm:4.17.17"
+"@types/express@npm:*, @types/express@npm:^4.17.21":
+ version: 4.17.25
+ resolution: "@types/express@npm:4.17.25"
dependencies:
"@types/body-parser": "npm:*"
"@types/express-serve-static-core": "npm:^4.17.33"
"@types/qs": "npm:*"
- "@types/serve-static": "npm:*"
- checksum: 10/e2959a5fecdc53f8a524891a16e66dfc330ee0519e89c2579893179db686e10cfa6079a68e0fb8fd00eedbcaf3eabfd10916461939f3bc02ef671d848532c37e
+ "@types/serve-static": "npm:^1"
+ checksum: 10/c309fdb79fb8569b5d8d8f11268d0160b271f8b38f0a82c20a0733e526baf033eb7a921cd51d54fe4333c616de9e31caf7d4f3ef73baaf212d61f23f460b0369
languageName: node
linkType: hard
@@ -1558,6 +2879,15 @@ __metadata:
languageName: node
linkType: hard
+"@types/http-proxy@npm:^1.17.8":
+ version: 1.17.17
+ resolution: "@types/http-proxy@npm:1.17.17"
+ dependencies:
+ "@types/node": "npm:*"
+ checksum: 10/893e46e12be576baa471cf2fc13a4f0e413eaf30a5850de8fdbea3040e138ad4171234c59b986cf7137ff20a1582b254bf0c44cfd715d5ed772e1ab94dd75cd1
+ languageName: node
+ linkType: hard
+
"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.1, @types/istanbul-lib-coverage@npm:^2.0.6":
version: 2.0.6
resolution: "@types/istanbul-lib-coverage@npm:2.0.6"
@@ -1593,7 +2923,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/json-schema@npm:^7.0.15":
+"@types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.9":
version: 7.0.15
resolution: "@types/json-schema@npm:7.0.15"
checksum: 10/1a3c3e06236e4c4aab89499c428d585527ce50c24fe8259e8b3926d3df4cfbbbcf306cfc73ddfb66cbafc973116efd15967020b0f738f63e09e64c7d260519e7
@@ -1653,9 +2983,9 @@ __metadata:
languageName: node
linkType: hard
-"@types/koa@npm:*, @types/koa@npm:^3.0.1":
- version: 3.0.1
- resolution: "@types/koa@npm:3.0.1"
+"@types/koa@npm:*, @types/koa@npm:^3.0.3":
+ version: 3.0.3
+ resolution: "@types/koa@npm:3.0.3"
dependencies:
"@types/accepts": "npm:*"
"@types/content-disposition": "npm:*"
@@ -1665,7 +2995,7 @@ __metadata:
"@types/keygrip": "npm:*"
"@types/koa-compose": "npm:*"
"@types/node": "npm:*"
- checksum: 10/b1581d31d562bb5d9f61bc0148652abffc701c39930eb77a57b7d1f43aaad56ffa1970f6f3d4d6a0a56395a6832e2711a3278850dcc5a6c986ba6ed2cd0f4f1f
+ checksum: 10/0ad2edb8e958f9eaf6c4a448e43d687e0f84f167aa6ce79e0f14bc0708732a8b62390ceff383b7391469ed4b003e1053e1699520ec89117c88e89499773767db
languageName: node
linkType: hard
@@ -1678,13 +3008,6 @@ __metadata:
languageName: node
linkType: hard
-"@types/mime@npm:*":
- version: 3.0.1
- resolution: "@types/mime@npm:3.0.1"
- checksum: 10/4040fac73fd0cea2460e29b348c1a6173da747f3a87da0dbce80dd7a9355a3d0e51d6d9a401654f3e5550620e3718b5a899b2ec1debf18424e298a2c605346e7
- languageName: node
- linkType: hard
-
"@types/mime@npm:^1":
version: 1.3.2
resolution: "@types/mime@npm:1.3.2"
@@ -1692,23 +3015,34 @@ __metadata:
languageName: node
linkType: hard
-"@types/minimist@npm:^1.2.0":
- version: 1.2.2
- resolution: "@types/minimist@npm:1.2.2"
- checksum: 10/b8da83c66eb4aac0440e64674b19564d9d86c80ae273144db9681e5eeff66f238ade9515f5006ffbfa955ceff8b89ad2bd8ec577d7caee74ba101431fb07045d
+"@types/node-forge@npm:^1.3.0":
+ version: 1.3.14
+ resolution: "@types/node-forge@npm:1.3.14"
+ dependencies:
+ "@types/node": "npm:*"
+ checksum: 10/500ce72435285fca145837da079b49a09a5bdf8391b0effc3eb2455783dd81ab129e574a36e1a0374a4823d889d5328177ebfd6fe45b432c0c43d48d790fe39c
+ languageName: node
+ linkType: hard
+
+"@types/node@npm:*, @types/node@npm:>=10.0.0, @types/node@npm:>=18":
+ version: 25.7.0
+ resolution: "@types/node@npm:25.7.0"
+ dependencies:
+ undici-types: "npm:~7.21.0"
+ checksum: 10/1b11c865ea517ab90af870c2f58c100804e3dd8dc25a62b5e5af3aea12ad015f9faf513664babc7e0c755bb1c0744649b2ff19b7b434c1648ad8057f2dc6c71a
languageName: node
linkType: hard
-"@types/node@npm:*, @types/node@npm:>=18.0.0, @types/node@npm:^22.19.8":
- version: 22.19.8
- resolution: "@types/node@npm:22.19.8"
+"@types/node@npm:^22.20.1":
+ version: 22.20.1
+ resolution: "@types/node@npm:22.20.1"
dependencies:
undici-types: "npm:~6.21.0"
- checksum: 10/a61c68d434871d4a13496e3607502b2ff8e2ff69dca7e09228de5bea3bc95eb627d09243a8cff8e0bf9ff1fa13baaf0178531748f59ae81f0569c7a2f053bfa5
+ checksum: 10/0949e49d0383569ebd1222a2f65a9adb9328a6a6dbed459a02cdb37c61147755386c004c4ffbe436de59f5859df1774b1dd6bf168f7aeee46884bb190e0c384f
languageName: node
linkType: hard
-"@types/normalize-package-data@npm:^2.4.0, @types/normalize-package-data@npm:^2.4.3":
+"@types/normalize-package-data@npm:^2.4.3":
version: 2.4.4
resolution: "@types/normalize-package-data@npm:2.4.4"
checksum: 10/65dff72b543997b7be8b0265eca7ace0e34b75c3e5fee31de11179d08fa7124a7a5587265d53d0409532ecb7f7fba662c2012807963e1f9b059653ec2c83ee05
@@ -1729,6 +3063,20 @@ __metadata:
languageName: node
linkType: hard
+"@types/retry@npm:0.12.0":
+ version: 0.12.0
+ resolution: "@types/retry@npm:0.12.0"
+ checksum: 10/bbd0b88f4b3eba7b7acfc55ed09c65ef6f2e1bcb4ec9b4dca82c66566934351534317d294a770a7cc6c0468d5573c5350abab6e37c65f8ef254443e1b028e44d
+ languageName: node
+ linkType: hard
+
+"@types/retry@npm:0.12.2":
+ version: 0.12.2
+ resolution: "@types/retry@npm:0.12.2"
+ checksum: 10/e5675035717b39ce4f42f339657cae9637cf0c0051cf54314a6a2c44d38d91f6544be9ddc0280587789b6afd056be5d99dbe3e9f4df68c286c36321579b1bf4a
+ languageName: node
+ linkType: hard
+
"@types/semver@npm:^7.7.1":
version: 7.7.1
resolution: "@types/semver@npm:7.7.1"
@@ -1736,24 +3084,42 @@ __metadata:
languageName: node
linkType: hard
-"@types/send@npm:*":
- version: 0.17.1
- resolution: "@types/send@npm:0.17.1"
+"@types/send@npm:*, @types/send@npm:<1":
+ version: 0.17.6
+ resolution: "@types/send@npm:0.17.6"
dependencies:
"@types/mime": "npm:^1"
"@types/node": "npm:*"
- checksum: 10/6420837887858f7aa82f2c0272f73edb42385bd0978f43095e83590a405d86c8cc6d918c30b2d542f1d8bddc9f3d16c2e8fdfca936940de71b97c45f228d1896
+ checksum: 10/4948ab32ab84a81a0073f8243dd48ee766bc80608d5391060360afd1249f83c08a7476f142669ac0b0b8831c89d909a88bcb392d1b39ee48b276a91b50f3d8d1
+ languageName: node
+ linkType: hard
+
+"@types/serve-index@npm:^1.9.4":
+ version: 1.9.4
+ resolution: "@types/serve-index@npm:1.9.4"
+ dependencies:
+ "@types/express": "npm:*"
+ checksum: 10/72727c88d54da5b13275ebfb75dcdc4aa12417bbe9da1939e017c4c5f0c906fae843aa4e0fbfe360e7ee9df2f3d388c21abfc488f77ce58693fb57809f8ded92
languageName: node
linkType: hard
-"@types/serve-static@npm:*":
- version: 1.15.2
- resolution: "@types/serve-static@npm:1.15.2"
+"@types/serve-static@npm:^1, @types/serve-static@npm:^1.15.5":
+ version: 1.15.10
+ resolution: "@types/serve-static@npm:1.15.10"
dependencies:
"@types/http-errors": "npm:*"
- "@types/mime": "npm:*"
"@types/node": "npm:*"
- checksum: 10/d5f8f5aaa765be6417aa3f2ebe36591f4e9d2d8a7480edf7d3db041427420fd565cb921fc021271098dd2afafce2b443fc0d978faa3ae21a2a58ebde7d525e9e
+ "@types/send": "npm:<1"
+ checksum: 10/d9be72487540b9598e7d77260d533f241eb2e5db5181bb885ef2d6bc4592dad1c9e8c0e27f465d59478b2faf90edd2d535e834f20fbd9dd3c0928d43dc486404
+ languageName: node
+ linkType: hard
+
+"@types/sockjs@npm:^0.3.36":
+ version: 0.3.36
+ resolution: "@types/sockjs@npm:0.3.36"
+ dependencies:
+ "@types/node": "npm:*"
+ checksum: 10/b4b5381122465d80ea8b158537c00bc82317222d3fb31fd7229ff25b31fa89134abfbab969118da55622236bf3d8fee75759f3959908b5688991f492008f29bc
languageName: node
linkType: hard
@@ -1764,6 +3130,15 @@ __metadata:
languageName: node
linkType: hard
+"@types/tapable@npm:2.3.0":
+ version: 2.3.0
+ resolution: "@types/tapable@npm:2.3.0"
+ dependencies:
+ tapable: "npm:^2.3.0"
+ checksum: 10/9c6a3d75851d114c233033a04b88c8a4b27cd5edc026c4aea08b310c1561be5fd22fe408e3419fb598352126ef0e0c228b738be4cf948da8b5ebb2342909814f
+ languageName: node
+ linkType: hard
+
"@types/triple-beam@npm:^1.3.2":
version: 1.3.3
resolution: "@types/triple-beam@npm:1.3.3"
@@ -1785,12 +3160,21 @@ __metadata:
languageName: node
linkType: hard
-"@types/whatwg-url@npm:^11.0.2":
- version: 11.0.5
- resolution: "@types/whatwg-url@npm:11.0.5"
+"@types/whatwg-url@npm:^13.0.0":
+ version: 13.0.0
+ resolution: "@types/whatwg-url@npm:13.0.0"
dependencies:
"@types/webidl-conversions": "npm:*"
- checksum: 10/23a0c45aff51817807b473a6adb181d6e3bb0d27dde54e84883d5d5bc93358e95204d2188e7ff7fdc2cdaf157e97e1188ef0a22ec79228da300fc30d4a05b56a
+ checksum: 10/82018c7dc057dd4b5ee6137e54a659d2d043146eaade8afc2dda472773cc66f2abad73525020a2bf399a09b1bf448504f9e519d6b2d7495e6e781bb5de686753
+ languageName: node
+ linkType: hard
+
+"@types/ws@npm:^8.5.10, @types/ws@npm:^8.5.12":
+ version: 8.18.1
+ resolution: "@types/ws@npm:8.18.1"
+ dependencies:
+ "@types/node": "npm:*"
+ checksum: 10/1ce05e3174dcacf28dae0e9b854ef1c9a12da44c7ed73617ab6897c5cbe4fccbb155a20be5508ae9a7dde2f83bd80f5cf3baa386b934fc4b40889ec963e94f3a
languageName: node
linkType: hard
@@ -1810,115 +3194,138 @@ __metadata:
languageName: node
linkType: hard
-"@typescript-eslint/eslint-plugin@npm:8.23.0":
- version: 8.23.0
- resolution: "@typescript-eslint/eslint-plugin@npm:8.23.0"
+"@typescript-eslint/eslint-plugin@npm:8.58.2":
+ version: 8.58.2
+ resolution: "@typescript-eslint/eslint-plugin@npm:8.58.2"
dependencies:
- "@eslint-community/regexpp": "npm:^4.10.0"
- "@typescript-eslint/scope-manager": "npm:8.23.0"
- "@typescript-eslint/type-utils": "npm:8.23.0"
- "@typescript-eslint/utils": "npm:8.23.0"
- "@typescript-eslint/visitor-keys": "npm:8.23.0"
- graphemer: "npm:^1.4.0"
- ignore: "npm:^5.3.1"
+ "@eslint-community/regexpp": "npm:^4.12.2"
+ "@typescript-eslint/scope-manager": "npm:8.58.2"
+ "@typescript-eslint/type-utils": "npm:8.58.2"
+ "@typescript-eslint/utils": "npm:8.58.2"
+ "@typescript-eslint/visitor-keys": "npm:8.58.2"
+ ignore: "npm:^7.0.5"
natural-compare: "npm:^1.4.0"
- ts-api-utils: "npm:^2.0.1"
+ ts-api-utils: "npm:^2.5.0"
peerDependencies:
- "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0
- eslint: ^8.57.0 || ^9.0.0
- typescript: ">=4.8.4 <5.8.0"
- checksum: 10/3900a86f6edf9fee496e8814ed4c8d405f9331808174f4bca0d3af2541a947e872c9f7519a2549644ba5aae1dc06a63308bda9d8da00ef7c62f685be05502d5e
+ "@typescript-eslint/parser": ^8.58.2
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: ">=4.8.4 <6.1.0"
+ checksum: 10/e17da9302a66c405d6f7ca33409b177535933b96b9548825c0c66368813b21aeff9550348234ea1b882427fbdc246e5032fbe655cea6bc71aa688417f988c934
languageName: node
linkType: hard
-"@typescript-eslint/parser@npm:8.23.0":
- version: 8.23.0
- resolution: "@typescript-eslint/parser@npm:8.23.0"
+"@typescript-eslint/parser@npm:8.58.2":
+ version: 8.58.2
+ resolution: "@typescript-eslint/parser@npm:8.58.2"
dependencies:
- "@typescript-eslint/scope-manager": "npm:8.23.0"
- "@typescript-eslint/types": "npm:8.23.0"
- "@typescript-eslint/typescript-estree": "npm:8.23.0"
- "@typescript-eslint/visitor-keys": "npm:8.23.0"
- debug: "npm:^4.3.4"
+ "@typescript-eslint/scope-manager": "npm:8.58.2"
+ "@typescript-eslint/types": "npm:8.58.2"
+ "@typescript-eslint/typescript-estree": "npm:8.58.2"
+ "@typescript-eslint/visitor-keys": "npm:8.58.2"
+ debug: "npm:^4.4.3"
peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
- typescript: ">=4.8.4 <5.8.0"
- checksum: 10/7c3ae38665effc7a730d455657ca535c1553ab154d3b983ed4df2bc5b87291b69f4b90245356d8fc5a414d6dca36b34780d9408a45ac272d4bc390b8f03bda4d
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: ">=4.8.4 <6.1.0"
+ checksum: 10/276da6985cd531615d99a1875d87e2d619adbc6377577849c4f3abc4402a7101dea35b7666019c0e83f3346cace002448668e4a4ebe35734d504d48689a7e836
languageName: node
linkType: hard
-"@typescript-eslint/scope-manager@npm:8.23.0":
- version: 8.23.0
- resolution: "@typescript-eslint/scope-manager@npm:8.23.0"
+"@typescript-eslint/project-service@npm:8.58.2":
+ version: 8.58.2
+ resolution: "@typescript-eslint/project-service@npm:8.58.2"
dependencies:
- "@typescript-eslint/types": "npm:8.23.0"
- "@typescript-eslint/visitor-keys": "npm:8.23.0"
- checksum: 10/eb4624ccd907c21ca49c4600dec0c447349d7e987cda21181c008dc5ce855590e311efabe73b79b15da0948ce5f63ce0c33613ab4a39ea95578b099b724392e3
+ "@typescript-eslint/tsconfig-utils": "npm:^8.58.2"
+ "@typescript-eslint/types": "npm:^8.58.2"
+ debug: "npm:^4.4.3"
+ peerDependencies:
+ typescript: ">=4.8.4 <6.1.0"
+ checksum: 10/fcaf2b17aa0476164a53626b2754ab01ca595e913828699276972dcafe6369dd31cb7ce73cd32b8f4dd9209a7bf480c51b87266d0c434adb27a462e24e7940af
languageName: node
linkType: hard
-"@typescript-eslint/type-utils@npm:8.23.0":
- version: 8.23.0
- resolution: "@typescript-eslint/type-utils@npm:8.23.0"
+"@typescript-eslint/scope-manager@npm:8.58.2, @typescript-eslint/scope-manager@npm:^8.58.0":
+ version: 8.58.2
+ resolution: "@typescript-eslint/scope-manager@npm:8.58.2"
dependencies:
- "@typescript-eslint/typescript-estree": "npm:8.23.0"
- "@typescript-eslint/utils": "npm:8.23.0"
- debug: "npm:^4.3.4"
- ts-api-utils: "npm:^2.0.1"
+ "@typescript-eslint/types": "npm:8.58.2"
+ "@typescript-eslint/visitor-keys": "npm:8.58.2"
+ checksum: 10/d38da7a1d6e9d8ec87eb0d5115e3978ebe33fa5cb0f5b9b1c202ab314ebf352d33c66b0070ab3244ff79beec8fff19ec9e4063c36288ec0bc66fd24508d2b264
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/tsconfig-utils@npm:8.58.2, @typescript-eslint/tsconfig-utils@npm:^8.58.2":
+ version: 8.58.2
+ resolution: "@typescript-eslint/tsconfig-utils@npm:8.58.2"
+ peerDependencies:
+ typescript: ">=4.8.4 <6.1.0"
+ checksum: 10/68d40f96150dba33ccb9aa5a1531cc0fb4c413ed6665a3d2b1651437ea162d1a3c9dc0c3dc8208e48f9eddcf51f35fa9880b18f9a03397bbafcbec8dae9391c9
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/type-utils@npm:8.58.2":
+ version: 8.58.2
+ resolution: "@typescript-eslint/type-utils@npm:8.58.2"
+ dependencies:
+ "@typescript-eslint/types": "npm:8.58.2"
+ "@typescript-eslint/typescript-estree": "npm:8.58.2"
+ "@typescript-eslint/utils": "npm:8.58.2"
+ debug: "npm:^4.4.3"
+ ts-api-utils: "npm:^2.5.0"
peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
- typescript: ">=4.8.4 <5.8.0"
- checksum: 10/b036a48c5eacef10ed42aef02c859011b11b52938eab4857cfa267730820b90fd29d978a28d43174605b6b7966f095c813d9107e9f0995b92231b53983b12092
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: ">=4.8.4 <6.1.0"
+ checksum: 10/82eefae7f5d15cd6545deeb702ba36214903e833e58b6f460880fb3f606e1adc5eee90f55c7f0e9cb50575d17dd7c96a92e8d3e796893dd373908d8604623774
languageName: node
linkType: hard
-"@typescript-eslint/types@npm:8.23.0":
- version: 8.23.0
- resolution: "@typescript-eslint/types@npm:8.23.0"
- checksum: 10/e2a68bc6e89226e47e495a91e0614aa5c3c4580b11f7fd99ac6728c1fce92f10755b0d7ade3cf6d3eb1209cd9cd0f29bd742f8dddc394b28bcead7025394eaa2
+"@typescript-eslint/types@npm:8.58.2, @typescript-eslint/types@npm:^8.58.2":
+ version: 8.58.2
+ resolution: "@typescript-eslint/types@npm:8.58.2"
+ checksum: 10/9ffbe0542c91442c9841e157b85bc7bdc7e9a3f5ad5e6ef32f8d98556bc947f9b4151e54dec414c2c6d68eb436483259e74decd8fe56330689298980949ba5cc
languageName: node
linkType: hard
-"@typescript-eslint/typescript-estree@npm:8.23.0":
- version: 8.23.0
- resolution: "@typescript-eslint/typescript-estree@npm:8.23.0"
+"@typescript-eslint/typescript-estree@npm:8.58.2":
+ version: 8.58.2
+ resolution: "@typescript-eslint/typescript-estree@npm:8.58.2"
dependencies:
- "@typescript-eslint/types": "npm:8.23.0"
- "@typescript-eslint/visitor-keys": "npm:8.23.0"
- debug: "npm:^4.3.4"
- fast-glob: "npm:^3.3.2"
- is-glob: "npm:^4.0.3"
- minimatch: "npm:^9.0.4"
- semver: "npm:^7.6.0"
- ts-api-utils: "npm:^2.0.1"
+ "@typescript-eslint/project-service": "npm:8.58.2"
+ "@typescript-eslint/tsconfig-utils": "npm:8.58.2"
+ "@typescript-eslint/types": "npm:8.58.2"
+ "@typescript-eslint/visitor-keys": "npm:8.58.2"
+ debug: "npm:^4.4.3"
+ minimatch: "npm:^10.2.2"
+ semver: "npm:^7.7.3"
+ tinyglobby: "npm:^0.2.15"
+ ts-api-utils: "npm:^2.5.0"
peerDependencies:
- typescript: ">=4.8.4 <5.8.0"
- checksum: 10/ddc9790d460bea065eeed3760759c034aef307e72c51b5ec7d869fdc77f18c28354c9e35841b44eebbdc54241bab4154809ae8213d33593a9bff20dc3b247fc3
+ typescript: ">=4.8.4 <6.1.0"
+ checksum: 10/e34bfcd426045d75f91b951ed35f3f880b209434d3574c44d3aac210a16e84e4489e43d4c7b8b552b7cd44862bd58c2f411ede7b40efa5f14ede835bb3e6d3c9
languageName: node
linkType: hard
-"@typescript-eslint/utils@npm:8.23.0, @typescript-eslint/utils@npm:^6.0.0 || ^7.0.0 || ^8.0.0, @typescript-eslint/utils@npm:^8.21.0":
- version: 8.23.0
- resolution: "@typescript-eslint/utils@npm:8.23.0"
+"@typescript-eslint/utils@npm:8.58.2, @typescript-eslint/utils@npm:^6.0.0 || ^7.0.0 || ^8.0.0, @typescript-eslint/utils@npm:^8.21.0, @typescript-eslint/utils@npm:^8.58.0":
+ version: 8.58.2
+ resolution: "@typescript-eslint/utils@npm:8.58.2"
dependencies:
- "@eslint-community/eslint-utils": "npm:^4.4.0"
- "@typescript-eslint/scope-manager": "npm:8.23.0"
- "@typescript-eslint/types": "npm:8.23.0"
- "@typescript-eslint/typescript-estree": "npm:8.23.0"
+ "@eslint-community/eslint-utils": "npm:^4.9.1"
+ "@typescript-eslint/scope-manager": "npm:8.58.2"
+ "@typescript-eslint/types": "npm:8.58.2"
+ "@typescript-eslint/typescript-estree": "npm:8.58.2"
peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
- typescript: ">=4.8.4 <5.8.0"
- checksum: 10/72588d617ee5b1fa1020d008a7ff714a4a1e0fc1167aa9ff4b8ae71a37b25f43b2d40bca3380c56bb84d4092b6cac8d5d14d74e290e80217175ccf8237faf22a
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: ">=4.8.4 <6.1.0"
+ checksum: 10/b46e6cddf2de96618b98c2635836512c7dc63217b874698b2ed079a41762b1c3c8edae4b15690e0b0c7b896e81d39617835a19bfbe03fe4176ddded49cf813d3
languageName: node
linkType: hard
-"@typescript-eslint/visitor-keys@npm:8.23.0":
- version: 8.23.0
- resolution: "@typescript-eslint/visitor-keys@npm:8.23.0"
+"@typescript-eslint/visitor-keys@npm:8.58.2":
+ version: 8.58.2
+ resolution: "@typescript-eslint/visitor-keys@npm:8.58.2"
dependencies:
- "@typescript-eslint/types": "npm:8.23.0"
- eslint-visitor-keys: "npm:^4.2.0"
- checksum: 10/fd473849b85e564e31aec64feb3417a4e16e48bf21f1959fbab56258e19c21ef47bbdb523c64a8921cdc82a5083735418890b6f74b564fd1ece305c977a0f7a6
+ "@typescript-eslint/types": "npm:8.58.2"
+ eslint-visitor-keys: "npm:^5.0.0"
+ checksum: 10/051dd3d3507d4b36b5ead6acd3a00813b0775405cb074ad8fb4eb951b6c7a007a6f45c57b90ffab7755b8b7636e6f9a23b787221880db174584eca0739a0a9ab
languageName: node
linkType: hard
@@ -2064,15 +3471,25 @@ __metadata:
languageName: node
linkType: hard
-"JSONStream@npm:^1.3.5":
- version: 1.3.5
- resolution: "JSONStream@npm:1.3.5"
+"@vitest/eslint-plugin@npm:^1.6.6":
+ version: 1.6.15
+ resolution: "@vitest/eslint-plugin@npm:1.6.15"
dependencies:
- jsonparse: "npm:^1.2.0"
- through: "npm:>=2.2.7 <3"
- bin:
- JSONStream: ./bin.js
- checksum: 10/e30daf7b9b2da23076181d9a0e4bec33bc1d97e8c0385b949f1b16ba3366a1d241ec6f077850c01fe32379b5ebb8b96b65496984bc1545a93a5150bf4c267439
+ "@typescript-eslint/scope-manager": "npm:^8.58.0"
+ "@typescript-eslint/utils": "npm:^8.58.0"
+ peerDependencies:
+ "@typescript-eslint/eslint-plugin": "*"
+ eslint: ">=8.57.0"
+ typescript: ">=5.0.0"
+ vitest: "*"
+ peerDependenciesMeta:
+ "@typescript-eslint/eslint-plugin":
+ optional: true
+ typescript:
+ optional: true
+ vitest:
+ optional: true
+ checksum: 10/665b8164abc8b83a5a459048cb616af4bad94c0472f7c80de34f26a21a437144390d5986e6e6ddb1746ae635b12afbaae8a2c054f426c66519429e85760b9c3a
languageName: node
linkType: hard
@@ -2099,7 +3516,7 @@ __metadata:
languageName: node
linkType: hard
-"accepts@npm:^1.3.5, accepts@npm:^1.3.7, accepts@npm:^1.3.8":
+"accepts@npm:^1.3.5, accepts@npm:^1.3.7, accepts@npm:^1.3.8, accepts@npm:~1.3.4, accepts@npm:~1.3.8":
version: 1.3.8
resolution: "accepts@npm:1.3.8"
dependencies:
@@ -2109,17 +3526,6 @@ __metadata:
languageName: node
linkType: hard
-"acorn-class-fields@npm:^0.3.7":
- version: 0.3.7
- resolution: "acorn-class-fields@npm:0.3.7"
- dependencies:
- acorn-private-class-elements: "npm:^0.2.7"
- peerDependencies:
- acorn: ^6 || ^7 || ^8
- checksum: 10/02151a4d3f985707529fefcf1388583ec7ae3c99a7aaaf9f50ffd301b73d02c6c4842e04a431853eaaabb8fee421e35df060447cc8080e226a520ceaa5295b52
- languageName: node
- linkType: hard
-
"acorn-import-attributes@npm:^1.9.5":
version: 1.9.5
resolution: "acorn-import-attributes@npm:1.9.5"
@@ -2129,7 +3535,7 @@ __metadata:
languageName: node
linkType: hard
-"acorn-jsx@npm:^5.3.1, acorn-jsx@npm:^5.3.2":
+"acorn-jsx@npm:^5.3.2":
version: 5.3.2
resolution: "acorn-jsx@npm:5.3.2"
peerDependencies:
@@ -2138,70 +3544,21 @@ __metadata:
languageName: node
linkType: hard
-"acorn-private-class-elements@npm:^0.2.7":
- version: 0.2.7
- resolution: "acorn-private-class-elements@npm:0.2.7"
- peerDependencies:
- acorn: ^6.1.0 || ^7 || ^8
- checksum: 10/e4980847da236c56bb0ed87e38c89348d609701f2927e5db0757f4dbba1b773b459d8b98b4b80525ff34b24a5c2777f85e01ecd426a518a40ce8c6234a4d9486
- languageName: node
- linkType: hard
-
-"acorn-private-methods@npm:^0.3.3":
- version: 0.3.3
- resolution: "acorn-private-methods@npm:0.3.3"
- dependencies:
- acorn-private-class-elements: "npm:^0.2.7"
- peerDependencies:
- acorn: ^6 || ^7 || ^8
- checksum: 10/da692a68fb39020d0371e4d3c44c87780120b70b0751533c6f391a765df560a92b4a0914d5782cbd4fda58eda8bc4291bc0cb6a33b635486256ca63a1fb0bf13
- languageName: node
- linkType: hard
-
-"acorn-stage3@npm:^4.0.0":
- version: 4.0.0
- resolution: "acorn-stage3@npm:4.0.0"
- dependencies:
- acorn-class-fields: "npm:^0.3.7"
- acorn-private-methods: "npm:^0.3.3"
- acorn-static-class-features: "npm:^0.2.4"
- peerDependencies:
- acorn: ^7.4 || ^8
- checksum: 10/10c2322b6494a104ed212b97e9925b2d03b50e4f1e370ad50d9d5e9507f79092dc046802f13ca57ff681c91ef7c02e0f68469473431833603b79630d233f0476
- languageName: node
- linkType: hard
-
-"acorn-static-class-features@npm:^0.2.4":
- version: 0.2.4
- resolution: "acorn-static-class-features@npm:0.2.4"
+"acorn-walk@npm:8.3.5, acorn-walk@npm:^8.0.0":
+ version: 8.3.5
+ resolution: "acorn-walk@npm:8.3.5"
dependencies:
- acorn-private-class-elements: "npm:^0.2.7"
- peerDependencies:
- acorn: ^6.1.0 || ^7 || ^8
- checksum: 10/145ad623afc61f8417ce5cb6544d4c938099b313e59952eb50ca30b18c4a64ea3a30295c3063a599e90a8db03863606ca97873d52f93e1890e80bd9402ab3153
- languageName: node
- linkType: hard
-
-"acorn-walk@npm:^8.0.0":
- version: 8.2.0
- resolution: "acorn-walk@npm:8.2.0"
- checksum: 10/e69f7234f2adfeb16db3671429a7c80894105bd7534cb2032acf01bb26e6a847952d11a062d071420b43f8d82e33d2e57f26fe87d9cce0853e8143d8910ff1de
+ acorn: "npm:^8.11.0"
+ checksum: 10/f52a158a1c1f00c82702c7eb9b8ae8aad79748a7689241dcc2d797dce680f1dcb15c78f312f687eeacdfb3a4cac4b87d04af470f0201bd56c6661fca6f94b195
languageName: node
linkType: hard
-"acorn@npm:^8.0.4, acorn@npm:^8.14.0, acorn@npm:^8.15.0":
- version: 8.15.0
- resolution: "acorn@npm:8.15.0"
+"acorn@npm:^8.0.4, acorn@npm:^8.10.0, acorn@npm:^8.11.0, acorn@npm:^8.14.0, acorn@npm:^8.15.0":
+ version: 8.16.0
+ resolution: "acorn@npm:8.16.0"
bin:
acorn: bin/acorn
- checksum: 10/77f2de5051a631cf1729c090e5759148459cdb76b5f5c70f890503d629cf5052357b0ce783c0f976dd8a93c5150f59f6d18df1def3f502396a20f81282482fa4
- languageName: node
- linkType: hard
-
-"add-stream@npm:^1.0.0":
- version: 1.0.0
- resolution: "add-stream@npm:1.0.0"
- checksum: 10/3e9e8b0b8f0170406d7c3a9a39bfbdf419ccccb0fd2a396338c0fda0a339af73bf738ad414fc520741de74517acf0dd92b4a36fd3298a47fd5371eee8f2c5a06
+ checksum: 10/690c673bb4d61b38ef82795fab58526471ad7f7e67c0e40c4ff1e10ecd80ce5312554ef633c9995bfc4e6d170cef165711f9ca9e49040b62c0c66fbf2dd3df2b
languageName: node
linkType: hard
@@ -2212,6 +3569,15 @@ __metadata:
languageName: node
linkType: hard
+"agent-base@npm:6":
+ version: 6.0.2
+ resolution: "agent-base@npm:6.0.2"
+ dependencies:
+ debug: "npm:4"
+ checksum: 10/21fb903e0917e5cb16591b4d0ef6a028a54b83ac30cd1fca58dece3d4e0990512a8723f9f83130d88a41e2af8b1f7be1386fda3ea2d181bb1a62155e75e95e23
+ languageName: node
+ linkType: hard
+
"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2":
version: 7.1.4
resolution: "agent-base@npm:7.1.4"
@@ -2228,7 +3594,32 @@ __metadata:
languageName: node
linkType: hard
-"ajv@npm:^6.12.4":
+"ajv-formats@npm:^2.1.1":
+ version: 2.1.1
+ resolution: "ajv-formats@npm:2.1.1"
+ dependencies:
+ ajv: "npm:^8.0.0"
+ peerDependencies:
+ ajv: ^8.0.0
+ peerDependenciesMeta:
+ ajv:
+ optional: true
+ checksum: 10/70c263ded219bf277ffd9127f793b625f10a46113b2e901e150da41931fcfd7f5592da6d66862f4449bb157ffe65867c3294a7df1d661cc232c4163d5a1718ed
+ languageName: node
+ linkType: hard
+
+"ajv-keywords@npm:^5.1.0":
+ version: 5.1.0
+ resolution: "ajv-keywords@npm:5.1.0"
+ dependencies:
+ fast-deep-equal: "npm:^3.1.3"
+ peerDependencies:
+ ajv: ^8.8.2
+ checksum: 10/5021f96ab7ddd03a4005326bd06f45f448ebfbb0fe7018b1b70b6c28142fa68372bda2057359814b83fd0b2d4c8726c297f0a7557b15377be7b56ce5344533d8
+ languageName: node
+ linkType: hard
+
+"ajv@npm:^6.14.0":
version: 6.14.0
resolution: "ajv@npm:6.14.0"
dependencies:
@@ -2240,6 +3631,18 @@ __metadata:
languageName: node
linkType: hard
+"ajv@npm:^8.0.0, ajv@npm:^8.9.0":
+ version: 8.20.0
+ resolution: "ajv@npm:8.20.0"
+ dependencies:
+ fast-deep-equal: "npm:^3.1.3"
+ fast-uri: "npm:^3.0.1"
+ json-schema-traverse: "npm:^1.0.0"
+ require-from-string: "npm:^2.0.2"
+ checksum: 10/5ce59c0537f4c2aca9a758b412659ec70acb4d5dde971c10ecf21d2e3d799f99acdb4a08e1f5fb2e067c8542930398aae793bb996bb07d3feb81dae22fe2ada9
+ languageName: node
+ linkType: hard
+
"amqplib@npm:0.10.5":
version: 0.10.5
resolution: "amqplib@npm:0.10.5"
@@ -2260,6 +3663,15 @@ __metadata:
languageName: node
linkType: hard
+"ansi-html-community@npm:^0.0.8":
+ version: 0.0.8
+ resolution: "ansi-html-community@npm:0.0.8"
+ bin:
+ ansi-html: bin/ansi-html
+ checksum: 10/08df3696720edacd001a8d53b197bb5728242c55484680117dab9f7633a6320e961a939bddd88ee5c71d4a64f3ddb49444d1c694bd0668adbb3f95ba114f2386
+ languageName: node
+ linkType: hard
+
"ansi-regex@npm:^5.0.1":
version: 5.0.1
resolution: "ansi-regex@npm:5.0.1"
@@ -2267,7 +3679,7 @@ __metadata:
languageName: node
linkType: hard
-"ansi-regex@npm:^6.0.1":
+"ansi-regex@npm:^6.2.2":
version: 6.2.2
resolution: "ansi-regex@npm:6.2.2"
checksum: 10/9b17ce2c6daecc75bcd5966b9ad672c23b184dc3ed9bf3c98a0702f0d2f736c15c10d461913568f2cf527a5e64291c7473358885dd493305c84a1cfed66ba94f
@@ -2306,7 +3718,7 @@ __metadata:
languageName: node
linkType: hard
-"anymatch@npm:^3.1.3":
+"anymatch@npm:^3.1.3, anymatch@npm:~3.1.2":
version: 3.1.3
resolution: "anymatch@npm:3.1.3"
dependencies:
@@ -2316,6 +3728,13 @@ __metadata:
languageName: node
linkType: hard
+"anynum@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "anynum@npm:1.0.0"
+ checksum: 10/5f7921dfa10fc80cc88442d6c9681203281cb68a2a7b69d2ba9c5977ef31cf0044209006eea59b22ad44ab172b2ccea38d6cab9f41e66570c76fc2470ba15c23
+ languageName: node
+ linkType: hard
+
"argparse@npm:^1.0.7":
version: 1.0.10
resolution: "argparse@npm:1.0.10"
@@ -2332,6 +3751,13 @@ __metadata:
languageName: node
linkType: hard
+"argue-cli@npm:^3.1.0":
+ version: 3.1.0
+ resolution: "argue-cli@npm:3.1.0"
+ checksum: 10/e7bfdfb2c804e0070591e865d0c231618c8d71dac5eef768c8a4d39a3d159b45e5e08306fcb3c88a013ee7115bee90ba2b9411d3a8c4a0b3a7477c8c7024f642
+ languageName: node
+ linkType: hard
+
"array-buffer-byte-length@npm:^1.0.0":
version: 1.0.0
resolution: "array-buffer-byte-length@npm:1.0.0"
@@ -2349,10 +3775,10 @@ __metadata:
languageName: node
linkType: hard
-"array-ify@npm:^1.0.0":
- version: 1.0.0
- resolution: "array-ify@npm:1.0.0"
- checksum: 10/c0502015b319c93dd4484f18036bcc4b654eb76a4aa1f04afbcef11ac918859bb1f5d71ba1f0f1141770db9eef1a4f40f1761753650873068010bbf7bcdae4a4
+"array-flatten@npm:1.1.1":
+ version: 1.1.1
+ resolution: "array-flatten@npm:1.1.1"
+ checksum: 10/e13c9d247241be82f8b4ec71d035ed7204baa82fae820d4db6948d30d3c4a9f2b3905eb2eec2b937d4aa3565200bd3a1c500480114cff649fa748747d2a50feb
languageName: node
linkType: hard
@@ -2371,13 +3797,6 @@ __metadata:
languageName: node
linkType: hard
-"arrify@npm:^1.0.1":
- version: 1.0.1
- resolution: "arrify@npm:1.0.1"
- checksum: 10/745075dd4a4624ff0225c331dacb99be501a515d39bcb7c84d24660314a6ec28e68131b137e6f7e16318170842ce97538cd298fc4cd6b2cc798e0b957f2747e7
- languageName: node
- linkType: hard
-
"arrify@npm:^2.0.1":
version: 2.0.1
resolution: "arrify@npm:2.0.1"
@@ -2403,7 +3822,7 @@ __metadata:
languageName: node
linkType: hard
-"assert@npm:^2.1.0":
+"assert@npm:^2.0.0, assert@npm:^2.1.0":
version: 2.1.0
resolution: "assert@npm:2.1.0"
dependencies:
@@ -2471,71 +3890,73 @@ __metadata:
version: 0.0.0-use.local
resolution: "automation-core@workspace:."
dependencies:
- "@babel/core": "npm:^7.29.0"
- "@babel/plugin-transform-modules-commonjs": "npm:^7.28.6"
- "@babel/runtime": "npm:^7.28.6"
+ "@babel/core": "npm:^7.29.7"
+ "@babel/plugin-transform-modules-commonjs": "npm:^7.29.7"
+ "@babel/runtime": "npm:^7.29.7"
"@koa/cors": "npm:^5.0.0"
- "@koa/router": "npm:^15.3.0"
+ "@koa/router": "npm:^15.7.0"
+ "@meteorjs/rspack": "npm:2.0.1"
"@mos-connection/helper": "npm:^5.0.0-alpha.0"
+ "@rsdoctor/rspack-plugin": "npm:1.5.7"
+ "@rspack/cli": "npm:1.7.1"
+ "@rspack/core": "npm:1.7.1"
"@shopify/jest-koa-mocks": "npm:^5.3.1"
- "@slack/webhook": "npm:^7.0.6"
+ "@slack/webhook": "npm:^7.2.0"
"@sofie-automation/blueprints-integration": "portal:../packages/blueprints-integration"
- "@sofie-automation/code-standard-preset": "npm:^3.0.0"
+ "@sofie-automation/code-standard-preset": "npm:^3.2.2"
"@sofie-automation/corelib": "portal:../packages/corelib"
"@sofie-automation/job-worker": "portal:../packages/job-worker"
"@sofie-automation/meteor-lib": "portal:../packages/meteor-lib"
"@sofie-automation/shared-lib": "portal:../packages/shared-lib"
- "@types/body-parser": "npm:^1.19.6"
+ "@swc/core": "npm:^1.15.46"
+ "@swc/helpers": "npm:0.5.17"
"@types/deep-extend": "npm:^0.6.2"
"@types/jest": "npm:^30.0.0"
- "@types/koa": "npm:^3.0.1"
+ "@types/koa": "npm:^3.0.3"
"@types/koa-bodyparser": "npm:^4.3.13"
"@types/koa-mount": "npm:^4.0.5"
"@types/koa-static": "npm:^4.0.4"
"@types/koa__cors": "npm:^5.0.1"
- "@types/node": "npm:^22.19.8"
+ "@types/node": "npm:^22.20.1"
"@types/semver": "npm:^7.7.1"
"@types/underscore": "npm:^1.13.0"
- babel-jest: "npm:^30.2.0"
+ babel-jest: "npm:^30.4.1"
bcrypt: "npm:^6.0.0"
- body-parser: "npm:^1.20.4"
- commit-and-tag-version: "npm:^12.6.1"
+ commit-and-tag-version: "npm:^13.1.0"
deep-extend: "npm:0.6.0"
deepmerge: "npm:^4.3.1"
ejson: "npm:^2.2.3"
- elastic-apm-node: "npm:^4.15.0"
- eslint: "npm:^9.39.2"
+ elastic-apm-node: "npm:^4.18.0"
+ eslint: "npm:^9.39.5"
fast-clone: "npm:^1.5.13"
- glob: "npm:^13.0.1"
- i18next: "npm:^21.10.0"
- i18next-conv: "npm:^10.2.0"
- i18next-scanner: "npm:^4.6.0"
+ glob: "npm:^13.0.6"
+ i18next: "npm:^26.3.6"
+ i18next-cli: "npm:^1.66.2"
+ i18next-conv: "npm:^16.0.0"
indexof: "npm:0.0.1"
- jest: "npm:^30.2.0"
- jest-util: "npm:^30.2.0"
- koa: "npm:^3.1.1"
+ jest: "npm:^30.4.2"
+ jest-util: "npm:^30.4.1"
+ koa: "npm:^3.2.1"
koa-bodyparser: "npm:^4.4.1"
koa-mount: "npm:^4.2.0"
koa-static: "npm:^5.0.0"
legally: "npm:^3.5.10"
- meteor-node-stubs: "npm:^1.2.25"
+ meteor-node-stubs: "npm:^1.2.27"
moment: "npm:^2.30.1"
- nanoid: "npm:^3.3.11"
+ nanoid: "npm:^3.3.16"
ntp-client: "npm:^0.5.3"
object-path: "npm:^0.11.8"
- open-cli: "npm:^8.0.0"
+ open-cli: "npm:^9.0.0"
p-lazy: "npm:^3.1.0"
- prettier: "npm:^3.8.1"
- semver: "npm:^7.7.3"
+ prettier: "npm:^3.8.4"
+ semver: "npm:^7.8.5"
superfly-timeline: "npm:9.2.0"
- threadedclass: "npm:^1.3.0"
- timecode: "npm:0.0.4"
- ts-jest: "npm:^29.4.6"
+ threadedclass: "npm:^1.4.0"
+ ts-jest: "npm:29.4.9"
type-fest: "npm:^4.41.0"
- typescript: "npm:~5.7.3"
- underscore: "npm:^1.13.7"
+ typescript: "npm:~5.9.3"
+ underscore: "npm:^1.13.8"
winston: "npm:^3.19.0"
- yargs: "npm:^17.7.2"
languageName: unknown
linkType: soft
@@ -2548,31 +3969,32 @@ __metadata:
languageName: node
linkType: hard
-"axios@npm:^1.11.0":
- version: 1.13.6
- resolution: "axios@npm:1.13.6"
+"axios@npm:^1.16.0":
+ version: 1.18.1
+ resolution: "axios@npm:1.18.1"
dependencies:
- follow-redirects: "npm:^1.15.11"
+ follow-redirects: "npm:^1.16.0"
form-data: "npm:^4.0.5"
- proxy-from-env: "npm:^1.1.0"
- checksum: 10/a7ed83c2af3ef21d64609df0f85e76893a915a864c5934df69241001d0578082d6521a0c730bf37518ee458821b5695957cb10db9fc705f2a8996c8686ea7a89
+ https-proxy-agent: "npm:^5.0.1"
+ proxy-from-env: "npm:^2.1.0"
+ checksum: 10/c4cdced3ee0a9bf7dcae189fbc74a124aa079d4f04dbd995e602d39c1419476e8d021f87ee39ac8d8398e5a55e6d0b986238b3645f0d9177ac80de87c2a73f18
languageName: node
linkType: hard
-"babel-jest@npm:30.2.0, babel-jest@npm:^30.2.0":
- version: 30.2.0
- resolution: "babel-jest@npm:30.2.0"
+"babel-jest@npm:30.4.1, babel-jest@npm:^30.4.1":
+ version: 30.4.1
+ resolution: "babel-jest@npm:30.4.1"
dependencies:
- "@jest/transform": "npm:30.2.0"
+ "@jest/transform": "npm:30.4.1"
"@types/babel__core": "npm:^7.20.5"
babel-plugin-istanbul: "npm:^7.0.1"
- babel-preset-jest: "npm:30.2.0"
+ babel-preset-jest: "npm:30.4.0"
chalk: "npm:^4.1.2"
graceful-fs: "npm:^4.2.11"
slash: "npm:^3.0.0"
peerDependencies:
"@babel/core": ^7.11.0 || ^8.0.0-0
- checksum: 10/4c7351a366cf8ac2b8a2e4e438867693eb9d83ed24c29c648da4576f700767aaf72a5d14337fc3f92c50b069f5025b26c7b89e3b7b867914b7cf8997fc15f095
+ checksum: 10/f739152bee60b368b27676441c54e235b49bca10329bb6395b54cca5982ced1f7a5a2c504e406e1082aac3dc68ab518771c9de62cf66ffe00993ad071a58fd1b
languageName: node
linkType: hard
@@ -2589,12 +4011,12 @@ __metadata:
languageName: node
linkType: hard
-"babel-plugin-jest-hoist@npm:30.2.0":
- version: 30.2.0
- resolution: "babel-plugin-jest-hoist@npm:30.2.0"
+"babel-plugin-jest-hoist@npm:30.4.0":
+ version: 30.4.0
+ resolution: "babel-plugin-jest-hoist@npm:30.4.0"
dependencies:
"@types/babel__core": "npm:^7.20.5"
- checksum: 10/360e87a9aa35f4cf208a10ba79e1821ea906f9e3399db2a9762cbc5076fd59f808e571d88b5b1106738d22e23f9ddefbb8137b2780b2abd401c8573b85c8a2f5
+ checksum: 10/112f984b3b4315f7ff15d5d17df7f5aa4b500e562c67c2eafcd9974af4369c17d50feed2f9c95cbcec32faba8ccb04f8b62828aca41a47d5fdedc532b49fbf19
languageName: node
linkType: hard
@@ -2623,15 +4045,15 @@ __metadata:
languageName: node
linkType: hard
-"babel-preset-jest@npm:30.2.0":
- version: 30.2.0
- resolution: "babel-preset-jest@npm:30.2.0"
+"babel-preset-jest@npm:30.4.0":
+ version: 30.4.0
+ resolution: "babel-preset-jest@npm:30.4.0"
dependencies:
- babel-plugin-jest-hoist: "npm:30.2.0"
+ babel-plugin-jest-hoist: "npm:30.4.0"
babel-preset-current-node-syntax: "npm:^1.2.0"
peerDependencies:
"@babel/core": ^7.11.0 || ^8.0.0-beta.1
- checksum: 10/f75e155a8cf63ea1c5ca942bf757b934427630a1eeafdf861e9117879b3367931fc521da3c41fd52f8d59d705d1093ffb46c9474b3fd4d765d194bea5659d7d9
+ checksum: 10/7fbdcaa1f24b2efbc1b658220df849a375858bd5e208cefcf53b116bca972b28565a0715521cc20bec41adbd20ff73b9dbbdea3634bd71f50062f0ce694a7159
languageName: node
linkType: hard
@@ -2656,6 +4078,22 @@ __metadata:
languageName: node
linkType: hard
+"base64id@npm:2.0.0, base64id@npm:~2.0.0":
+ version: 2.0.0
+ resolution: "base64id@npm:2.0.0"
+ checksum: 10/e3312328429e512b0713469c5312f80b447e71592cae0a5bddf3f1adc9c89d1b2ed94156ad7bb9f529398f310df7ff6f3dbe9550735c6a759f247c088ea67364
+ languageName: node
+ linkType: hard
+
+"baseline-browser-mapping@npm:^2.10.12":
+ version: 2.10.29
+ resolution: "baseline-browser-mapping@npm:2.10.29"
+ bin:
+ baseline-browser-mapping: dist/cli.cjs
+ checksum: 10/df8fd128168e473abf1ebe3b7d6a9d7fead3a4d76f9f6aa3dce4dd797e5b5a1ecd32b7eb0855c21f6acdb5c48eba9e176a4f93040e47790bb05fe3fccd4ad9d6
+ languageName: node
+ linkType: hard
+
"basic-auth@npm:^2.0.1":
version: 2.0.1
resolution: "basic-auth@npm:2.0.1"
@@ -2665,6 +4103,13 @@ __metadata:
languageName: node
linkType: hard
+"batch@npm:0.6.1":
+ version: 0.6.1
+ resolution: "batch@npm:0.6.1"
+ checksum: 10/61f9934c7378a51dce61b915586191078ef7f1c3eca707fdd58b96ff2ff56d9e0af2bdab66b1462301a73c73374239e6542d9821c0af787f3209a23365d07e7f
+ languageName: node
+ linkType: hard
+
"bcrypt@npm:^6.0.0":
version: 6.0.0
resolution: "bcrypt@npm:6.0.0"
@@ -2683,6 +4128,13 @@ __metadata:
languageName: node
linkType: hard
+"binary-extensions@npm:^2.0.0":
+ version: 2.3.0
+ resolution: "binary-extensions@npm:2.3.0"
+ checksum: 10/bcad01494e8a9283abf18c1b967af65ee79b0c6a9e6fcfafebfe91dbe6e0fc7272bafb73389e198b310516ae04f7ad17d79aacf6cb4c0d5d5202a7e2e52c7d98
+ languageName: node
+ linkType: hard
+
"binary-search@npm:^1.3.3":
version: 1.3.6
resolution: "binary-search@npm:1.3.6"
@@ -2697,17 +4149,6 @@ __metadata:
languageName: node
linkType: hard
-"bl@npm:^5.0.0":
- version: 5.1.0
- resolution: "bl@npm:5.1.0"
- dependencies:
- buffer: "npm:^6.0.3"
- inherits: "npm:^2.0.4"
- readable-stream: "npm:^3.4.0"
- checksum: 10/0340d3d70def4213cd9cbcd8592f7c5922d3668e7b231286c354613fac4a8411ad373cff26e06162da7423035bbd5caafce3e140a5f397be72fcd1e9d86f1179
- languageName: node
- linkType: hard
-
"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.9":
version: 4.12.3
resolution: "bn.js@npm:4.12.3"
@@ -2715,16 +4156,16 @@ __metadata:
languageName: node
linkType: hard
-"bn.js@npm:^5.2.1":
+"bn.js@npm:^5.2.1, bn.js@npm:^5.2.2":
version: 5.2.3
resolution: "bn.js@npm:5.2.3"
checksum: 10/dfb3927e0d531e6ec4f191597ce6f7f7665310c356fef5f968ada676b8058027f959af42eaa37b5f5c63617e819d3741813025ab15dd71a90f2e74698df0b58e
languageName: node
linkType: hard
-"body-parser@npm:^1.20.4":
- version: 1.20.4
- resolution: "body-parser@npm:1.20.4"
+"body-parser@npm:~1.20.5":
+ version: 1.20.6
+ resolution: "body-parser@npm:1.20.6"
dependencies:
bytes: "npm:~3.1.2"
content-type: "npm:~1.0.5"
@@ -2734,43 +4175,53 @@ __metadata:
http-errors: "npm:~2.0.1"
iconv-lite: "npm:~0.4.24"
on-finished: "npm:~2.4.1"
- qs: "npm:~6.14.0"
+ qs: "npm:~6.15.1"
raw-body: "npm:~2.5.3"
type-is: "npm:~1.6.18"
unpipe: "npm:~1.0.0"
- checksum: 10/ff67e28d3f426707be8697a75fdf8d564dc50c341b41f054264d8ab6e2924e519c7ce8acc9d0de05328fdc41e1d9f3f200aec9c1cfb1867d6b676a410d97c689
+ checksum: 10/cf3730f79d8d773a1a6f34fdec4bd40cf41b2cf25c17a3b9dfeb81e83b7e62e309285a92ba6bf5d99eee44144083d3122f332757215da37eb4740544432c2766
+ languageName: node
+ linkType: hard
+
+"bonjour-service@npm:^1.2.1":
+ version: 1.3.0
+ resolution: "bonjour-service@npm:1.3.0"
+ dependencies:
+ fast-deep-equal: "npm:^3.1.3"
+ multicast-dns: "npm:^7.2.5"
+ checksum: 10/63d516d88f15fa4b89e247e6ff7d81c21a3ef5ed035b0b043c2b38e0c839f54f4ce58fbf9b7668027bf538ac86de366939dbb55cca63930f74eeea1e278c9585
languageName: node
linkType: hard
"brace-expansion@npm:^1.1.7":
- version: 1.1.13
- resolution: "brace-expansion@npm:1.1.13"
+ version: 1.1.16
+ resolution: "brace-expansion@npm:1.1.16"
dependencies:
balanced-match: "npm:^1.0.0"
concat-map: "npm:0.0.1"
- checksum: 10/b5f4329fdbe9d2e25fa250c8f866ebd054ba946179426e99b86dcccddabdb1d481f0e40ee5430032e62a7d0a6c2837605ace6783d015aa1d65d85ca72154d936
+ checksum: 10/94498bead66c51536df5b7bf1b0a0e581a5b7f86888be10481d06920c4bd9d976e003b13a3d19fddc733f21a09d162ff72f90e18b2c9d062b15121e973d0e13b
languageName: node
linkType: hard
"brace-expansion@npm:^2.0.2":
- version: 2.0.3
- resolution: "brace-expansion@npm:2.0.3"
+ version: 2.1.2
+ resolution: "brace-expansion@npm:2.1.2"
dependencies:
balanced-match: "npm:^1.0.0"
- checksum: 10/e9dd66caaf0784126e1654f1bc19adb28f3ef86f39f2226f833f7700ec727c141f6cd85eaa47bacf3426beda01c9fbc3a2f28174cf59330dc9b58ffaf9e09d96
+ checksum: 10/0e0f9b0df1f0809e9c326470e022eeb24334ddb54c43b1ac39f1d38f3cbaeb940794de1db826f5491843ac00d7932c43f10350a65ccd51fe7d05da627152f204
languageName: node
linkType: hard
"brace-expansion@npm:^5.0.5":
- version: 5.0.5
- resolution: "brace-expansion@npm:5.0.5"
+ version: 5.0.7
+ resolution: "brace-expansion@npm:5.0.7"
dependencies:
balanced-match: "npm:^4.0.2"
- checksum: 10/f259b2ddf04489da9512ad637ba6b4ef2d77abd4445d20f7f1714585f153435200a53fa6a2e4a5ee974df14ddad4cd16421f6f803e96e8b452bd48598878d0ee
+ checksum: 10/98c12de33fa53ab07b2b5179f6740045508c61c4319638faf47a0d72615db80058f66c0d1cb74dc8ed591bbf507c068027e80cfb86a2f467bfd330574e13ed7b
languageName: node
linkType: hard
-"braces@npm:^3.0.3":
+"braces@npm:^3.0.3, braces@npm:~3.0.2":
version: 3.0.3
resolution: "braces@npm:3.0.3"
dependencies:
@@ -2795,6 +4246,15 @@ __metadata:
languageName: node
linkType: hard
+"browser-resolve@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "browser-resolve@npm:2.0.0"
+ dependencies:
+ resolve: "npm:^1.17.0"
+ checksum: 10/ad5314db3429a903b07d6445137588665c4677d6276298bb08f0623f05cb107762b73c78f03b4f954a712bd1ebaf98e349b9d98e423123a42804924327a5acd4
+ languageName: node
+ linkType: hard
+
"browserify-aes@npm:^1.0.4, browserify-aes@npm:^1.2.0":
version: 1.2.0
resolution: "browserify-aes@npm:1.2.0"
@@ -2832,7 +4292,7 @@ __metadata:
languageName: node
linkType: hard
-"browserify-rsa@npm:^4.0.0, browserify-rsa@npm:^4.1.0":
+"browserify-rsa@npm:^4.0.0, browserify-rsa@npm:^4.1.0, browserify-rsa@npm:^4.1.1":
version: 4.1.1
resolution: "browserify-rsa@npm:4.1.1"
dependencies:
@@ -2843,6 +4303,23 @@ __metadata:
languageName: node
linkType: hard
+"browserify-sign@npm:^4.2.3":
+ version: 4.2.5
+ resolution: "browserify-sign@npm:4.2.5"
+ dependencies:
+ bn.js: "npm:^5.2.2"
+ browserify-rsa: "npm:^4.1.1"
+ create-hash: "npm:^1.2.0"
+ create-hmac: "npm:^1.1.7"
+ elliptic: "npm:^6.6.1"
+ inherits: "npm:^2.0.4"
+ parse-asn1: "npm:^5.1.9"
+ readable-stream: "npm:^2.3.8"
+ safe-buffer: "npm:^5.2.1"
+ checksum: 10/ccfe54ab61b8e01e84c507b60912f9ae8701f4e53accc3d85c3773db13f14c51f17b684167735d28c59aaf5523ee59c66cc831ddc178bc7f598257e590ca1a35
+ languageName: node
+ linkType: hard
+
"browserify-zlib@npm:^0.2.0":
version: 0.2.0
resolution: "browserify-zlib@npm:0.2.0"
@@ -2852,17 +4329,36 @@ __metadata:
languageName: node
linkType: hard
-"browserslist@npm:^4.24.0":
- version: 4.24.4
- resolution: "browserslist@npm:4.24.4"
+"browserslist-load-config@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "browserslist-load-config@npm:1.0.1"
+ checksum: 10/872d2978d2546eb02920b7124d8269e10b3a8d26c1426f1ca844c0d4db53929789d1df5acd0b322b464af18264b58d0f3038a54656fe160c6dc1ab18b2d9491f
+ languageName: node
+ linkType: hard
+
+"browserslist-to-es-version@npm:^1.2.0":
+ version: 1.4.1
+ resolution: "browserslist-to-es-version@npm:1.4.1"
+ dependencies:
+ browserslist: "npm:^4.28.1"
+ bin:
+ browserslist-to-es-version: dist/cli.js
+ checksum: 10/0eac7e028636e16d360a5904ccc5e3d1a749d1451da2a716e2f48bca43709766c8f74e371529f81cbc18841a21da4e020c03801ffa117df3848574b358e7d4eb
+ languageName: node
+ linkType: hard
+
+"browserslist@npm:^4.24.0, browserslist@npm:^4.28.1":
+ version: 4.28.2
+ resolution: "browserslist@npm:4.28.2"
dependencies:
- caniuse-lite: "npm:^1.0.30001688"
- electron-to-chromium: "npm:^1.5.73"
- node-releases: "npm:^2.0.19"
- update-browserslist-db: "npm:^1.1.1"
+ baseline-browser-mapping: "npm:^2.10.12"
+ caniuse-lite: "npm:^1.0.30001782"
+ electron-to-chromium: "npm:^1.5.328"
+ node-releases: "npm:^2.0.36"
+ update-browserslist-db: "npm:^1.2.3"
bin:
browserslist: cli.js
- checksum: 10/11fda105e803d891311a21a1f962d83599319165faf471c2d70e045dff82a12128f5b50b1fcba665a2352ad66147aaa248a9d2355a80aadc3f53375eb3de2e48
+ checksum: 10/cff88386e5b5ba5614c9063bd32ef94865bba22b6a381844c7d09ea1eea62a2247e7106e516abdbfda6b75b9986044c991dfe45f92f10add5ad63dccc07589ec
languageName: node
linkType: hard
@@ -2884,10 +4380,10 @@ __metadata:
languageName: node
linkType: hard
-"bson@npm:^6.10.4":
- version: 6.10.4
- resolution: "bson@npm:6.10.4"
- checksum: 10/8a79a452219a13898358a5abc93e32bc3805236334f962661da121ce15bd5cade27718ba3310ee2a143ff508489b08467eed172ecb2a658cb8d2e94fdb76b215
+"bson@npm:^7.1.1":
+ version: 7.2.0
+ resolution: "bson@npm:7.2.0"
+ checksum: 10/a768e55d328a5961aa1bda0f1d1ea619e8bab911fb72018ca5c779000ae538cfc0cc8082fe75d4e941cb8ee928b6a7377b10bc0eb75872f36cdfaac8380512c6
languageName: node
linkType: hard
@@ -2948,7 +4444,7 @@ __metadata:
languageName: node
linkType: hard
-"bytes@npm:~3.1.2":
+"bytes@npm:3.1.2, bytes@npm:~3.1.2":
version: 3.1.2
resolution: "bytes@npm:3.1.2"
checksum: 10/a10abf2ba70c784471d6b4f58778c0beeb2b5d405148e66affa91f23a9f13d07603d0a0354667310ae1d6dc141474ffd44e2a074be0f6e2254edb8fc21445388
@@ -3023,17 +4519,6 @@ __metadata:
languageName: node
linkType: hard
-"camelcase-keys@npm:^6.2.2":
- version: 6.2.2
- resolution: "camelcase-keys@npm:6.2.2"
- dependencies:
- camelcase: "npm:^5.3.1"
- map-obj: "npm:^4.0.0"
- quick-lru: "npm:^4.0.1"
- checksum: 10/c1999f5b6d03bee7be9a36e48eef3da9e93e51b000677348ec8d15d51fc4418375890fb6c7155e387322d2ebb2a2cdebf9cd96607a6753d1d6c170d9b1e2eed5
- languageName: node
- linkType: hard
-
"camelcase@npm:^5.3.1":
version: 5.3.1
resolution: "camelcase@npm:5.3.1"
@@ -3048,14 +4533,14 @@ __metadata:
languageName: node
linkType: hard
-"caniuse-lite@npm:^1.0.30001688":
- version: 1.0.30001697
- resolution: "caniuse-lite@npm:1.0.30001697"
- checksum: 10/cd0ca97e71f4157ff3d26990a24122586a973a14086ad43c459c2f0f2f9876b327eee57c2315bb04bd5e826e77d0b6f55723c583c78be0eaf0f3f171afaf7eff
+"caniuse-lite@npm:^1.0.30001782":
+ version: 1.0.30001792
+ resolution: "caniuse-lite@npm:1.0.30001792"
+ checksum: 10/96635acd22e8bd5d02c165de659cc14265b96f5e7253acd0117ad94a3310297f2402e4a8665d6f20003bf6193c3b995d2cb9fda6b3c2f731194dc9299c90f905
languageName: node
linkType: hard
-"chalk@npm:^2.4.1, chalk@npm:^2.4.2":
+"chalk@npm:^2.4.1":
version: 2.4.2
resolution: "chalk@npm:2.4.2"
dependencies:
@@ -3066,7 +4551,7 @@ __metadata:
languageName: node
linkType: hard
-"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.2":
+"chalk@npm:^4.0.0, chalk@npm:^4.1.2":
version: 4.1.2
resolution: "chalk@npm:4.1.2"
dependencies:
@@ -3076,6 +4561,13 @@ __metadata:
languageName: node
linkType: hard
+"chalk@npm:^5.6.2":
+ version: 5.6.2
+ resolution: "chalk@npm:5.6.2"
+ checksum: 10/1b2f48f6fba1370670d5610f9cd54c391d6ede28f4b7062dd38244ea5768777af72e5be6b74fb6c6d54cb84c4a2dff3f3afa9b7cb5948f7f022cfd3d087989e0
+ languageName: node
+ linkType: hard
+
"char-regex@npm:^1.0.2":
version: 1.0.2
resolution: "char-regex@npm:1.0.2"
@@ -3083,6 +4575,41 @@ __metadata:
languageName: node
linkType: hard
+"chardet@npm:^2.1.1":
+ version: 2.1.1
+ resolution: "chardet@npm:2.1.1"
+ checksum: 10/d56913b65e45c5c86f331988e2ef6264c131bfeadaae098ee719bf6610546c77740e37221ffec802dde56b5e4466613a4c754786f4da6b5f6c5477243454d324
+ languageName: node
+ linkType: hard
+
+"chokidar@npm:^3.6.0":
+ version: 3.6.0
+ resolution: "chokidar@npm:3.6.0"
+ dependencies:
+ anymatch: "npm:~3.1.2"
+ braces: "npm:~3.0.2"
+ fsevents: "npm:~2.3.2"
+ glob-parent: "npm:~5.1.2"
+ is-binary-path: "npm:~2.1.0"
+ is-glob: "npm:~4.0.1"
+ normalize-path: "npm:~3.0.0"
+ readdirp: "npm:~3.6.0"
+ dependenciesMeta:
+ fsevents:
+ optional: true
+ checksum: 10/c327fb07704443f8d15f7b4a7ce93b2f0bc0e6cea07ec28a7570aa22cd51fcf0379df589403976ea956c369f25aa82d84561947e227cd925902e1751371658df
+ languageName: node
+ linkType: hard
+
+"chokidar@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "chokidar@npm:5.0.0"
+ dependencies:
+ readdirp: "npm:^5.0.0"
+ checksum: 10/a1c2a4ee6ee81ba6409712c295a47be055fb9de1186dfbab33c1e82f28619de962ba02fc5f9d433daaedc96c35747460d8b2079ac2907de2c95e3f7cce913113
+ languageName: node
+ linkType: hard
+
"chownr@npm:^3.0.0":
version: 3.0.0
resolution: "chownr@npm:3.0.0"
@@ -3090,10 +4617,10 @@ __metadata:
languageName: node
linkType: hard
-"chrono-node@npm:^2.9.0":
- version: 2.9.0
- resolution: "chrono-node@npm:2.9.0"
- checksum: 10/a30bbaa67f9a127e711db6e694ee4c89292d8f533dbfdc3d7cb34f479728e02e377f682e75ad84dd4b6a16016c248a5e85fb453943b96f93f5993f5ccddc6d08
+"chrono-node@npm:^2.9.1":
+ version: 2.9.1
+ resolution: "chrono-node@npm:2.9.1"
+ checksum: 10/f5c7dab023201ee70807de4da6f5e6345b7984f2f457fd602138ca8daeef52baccab55a4201acdd0cd5d6710190f6c15becabe35c2c93d6b41c36e46b048de34
languageName: node
linkType: hard
@@ -3129,14 +4656,26 @@ __metadata:
languageName: node
linkType: hard
-"cliui@npm:^7.0.2":
- version: 7.0.4
- resolution: "cliui@npm:7.0.4"
+"cli-cursor@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "cli-cursor@npm:5.0.0"
dependencies:
- string-width: "npm:^4.2.0"
- strip-ansi: "npm:^6.0.0"
- wrap-ansi: "npm:^7.0.0"
- checksum: 10/db858c49af9d59a32d603987e6fddaca2ce716cd4602ba5a2bb3a5af1351eebe82aba8dff3ef3e1b331f7fa9d40ca66e67bdf8e7c327ce0ea959747ead65c0ef
+ restore-cursor: "npm:^5.0.0"
+ checksum: 10/1eb9a3f878b31addfe8d82c6d915ec2330cec8447ab1f117f4aa34f0137fbb3137ec3466e1c9a65bcb7557f6e486d343f2da57f253a2f668d691372dfa15c090
+ languageName: node
+ linkType: hard
+
+"cli-spinners@npm:^3.2.0":
+ version: 3.4.0
+ resolution: "cli-spinners@npm:3.4.0"
+ checksum: 10/6a4021c1999011fc34ae714f055dcdafb56309abc1f8fb021ea7d9370dfc524485fe8684226015e5fe6053dd30544e74270184ff7edc3fa4d37043b8efd0a054
+ languageName: node
+ linkType: hard
+
+"cli-width@npm:^4.1.0":
+ version: 4.1.0
+ resolution: "cli-width@npm:4.1.0"
+ checksum: 10/b58876fbf0310a8a35c79b72ecfcf579b354e18ad04e6b20588724ea2b522799a758507a37dfe132fafaf93a9922cafd9514d9e1598e6b2cd46694853aed099f
languageName: node
linkType: hard
@@ -3151,28 +4690,14 @@ __metadata:
languageName: node
linkType: hard
-"clone-deep@npm:^4.0.0":
+"clone-deep@npm:^4.0.1":
version: 4.0.1
resolution: "clone-deep@npm:4.0.1"
dependencies:
is-plain-object: "npm:^2.0.4"
kind-of: "npm:^6.0.2"
shallow-clone: "npm:^3.0.0"
- checksum: 10/770f912fe4e6f21873c8e8fbb1e99134db3b93da32df271d00589ea4a29dbe83a9808a322c93f3bcaf8584b8b4fa6fc269fc8032efbaa6728e0c9886c74467d2
- languageName: node
- linkType: hard
-
-"clone-stats@npm:^1.0.0":
- version: 1.0.0
- resolution: "clone-stats@npm:1.0.0"
- checksum: 10/654c0425afc5c5c55a4d95b2e0c6eccdd55b5247e7a1e7cca9000b13688b96b0a157950c72c5307f9fd61f17333ad796d3cd654778f2d605438012391cc4ada5
- languageName: node
- linkType: hard
-
-"clone@npm:^2.1.2":
- version: 2.1.2
- resolution: "clone@npm:2.1.2"
- checksum: 10/d9c79efba655f0bf601ab299c57eb54cbaa9860fb011aee9d89ed5ac0d12df1660ab7642fddaabb9a26b7eff0e117d4520512cb70798319ff5d30a111b5310c2
+ checksum: 10/770f912fe4e6f21873c8e8fbb1e99134db3b93da32df271d00589ea4a29dbe83a9808a322c93f3bcaf8584b8b4fa6fc269fc8032efbaa6728e0c9886c74467d2
languageName: node
linkType: hard
@@ -3269,6 +4794,13 @@ __metadata:
languageName: node
linkType: hard
+"colorette@npm:^2.0.10, colorette@npm:^2.0.20":
+ version: 2.0.20
+ resolution: "colorette@npm:2.0.20"
+ checksum: 10/0b8de48bfa5d10afc160b8eaa2b9938f34a892530b2f7d7897e0458d9535a066e3998b49da9d21161c78225b272df19ae3a64d6df28b4c9734c0e55bbd02406f
+ languageName: node
+ linkType: hard
+
"combined-stream@npm:^1.0.8":
version: 1.0.8
resolution: "combined-stream@npm:1.0.8"
@@ -3278,52 +4810,66 @@ __metadata:
languageName: node
linkType: hard
-"commander@npm:^5.1.0":
- version: 5.1.0
- resolution: "commander@npm:5.1.0"
- checksum: 10/3e2ef5c003c5179250161e42ce6d48e0e69a54af970c65b7f985c70095240c260fd647453efd4c2c5a31b30ce468f373dc70f769c2f54a2c014abc4792aaca28
+"commander@npm:^14.0.2, commander@npm:^14.0.3":
+ version: 14.0.3
+ resolution: "commander@npm:14.0.3"
+ checksum: 10/dfa9ebe2a433d277de5cb0252d23b10a543d245d892db858d23b516336a835c50fd4f52bee4cd13c705cc8acb6f03dc632c73dd806f7d06d3353eb09953dd17a
languageName: node
linkType: hard
-"commander@npm:^9.0.0":
- version: 9.5.0
- resolution: "commander@npm:9.5.0"
- checksum: 10/41c49b3d0f94a1fbeb0463c85b13f15aa15a9e0b4d5e10a49c0a1d58d4489b549d62262b052ae0aa6cfda53299bee487bfe337825df15e342114dde543f82906
+"commander@npm:^7.2.0":
+ version: 7.2.0
+ resolution: "commander@npm:7.2.0"
+ checksum: 10/9973af10727ad4b44f26703bf3e9fdc323528660a7590efe3aa9ad5042b4584c0deed84ba443f61c9d6f02dade54a5a5d3c95e306a1e1630f8374ae6db16c06d
languageName: node
linkType: hard
-"commit-and-tag-version@npm:^12.6.1":
- version: 12.6.1
- resolution: "commit-and-tag-version@npm:12.6.1"
+"commit-and-tag-version@npm:^13.1.0":
+ version: 13.1.0
+ resolution: "commit-and-tag-version@npm:13.1.0"
dependencies:
- chalk: "npm:^2.4.2"
- conventional-changelog: "npm:4.0.0"
+ "@conventional-changelog/git-client": "npm:3.1.0"
+ chalk: "npm:^5.6.2"
+ conventional-changelog: "npm:8.1.0"
conventional-changelog-config-spec: "npm:2.1.0"
- conventional-changelog-conventionalcommits: "npm:6.1.0"
- conventional-recommended-bump: "npm:7.0.1"
- detect-indent: "npm:^6.1.0"
+ conventional-changelog-conventionalcommits: "npm:10.2.1"
+ conventional-recommended-bump: "npm:12.1.0"
+ detect-indent: "npm:^7.0.2"
detect-newline: "npm:^3.1.0"
dotgitignore: "npm:^2.1.0"
- fast-xml-parser: "npm:^5.2.5"
+ fast-xml-parser: "npm:^5.5.6"
figures: "npm:^3.2.0"
find-up: "npm:^5.0.0"
- git-semver-tags: "npm:^5.0.1"
semver: "npm:^7.7.2"
yaml: "npm:^2.6.0"
yargs: "npm:^17.7.2"
bin:
commit-and-tag-version: bin/cli.js
- checksum: 10/a7fc46f4e9b50a9071986ea7743839af7a73609bcecbb73ba3a2de15dd2d89f10174a05e8e1af2ffa1a435acf11093589d338e73408def6705278a6f8d7c91b3
+ checksum: 10/245d94ed8879f13a26912a79e7ac60d96473f4128bbf08ec32ba77e80aa1daabb95e352b9f112c8e61085266cb5d53b213556f9adee36dfd8a1b5c3e7daeb86e
languageName: node
linkType: hard
-"compare-func@npm:^2.0.0":
- version: 2.0.0
- resolution: "compare-func@npm:2.0.0"
+"compressible@npm:~2.0.18":
+ version: 2.0.18
+ resolution: "compressible@npm:2.0.18"
+ dependencies:
+ mime-db: "npm:>= 1.43.0 < 2"
+ checksum: 10/58321a85b375d39230405654721353f709d0c1442129e9a17081771b816302a012471a9b8f4864c7dbe02eef7f2aaac3c614795197092262e94b409c9be108f0
+ languageName: node
+ linkType: hard
+
+"compression@npm:^1.7.4":
+ version: 1.8.1
+ resolution: "compression@npm:1.8.1"
dependencies:
- array-ify: "npm:^1.0.0"
- dot-prop: "npm:^5.1.0"
- checksum: 10/fb71d70632baa1e93283cf9d80f30ac97f003aabee026e0b4426c9716678079ef5fea7519b84d012cbed938c476493866a38a79760564a9e21ae9433e40e6f0d
+ bytes: "npm:3.1.2"
+ compressible: "npm:~2.0.18"
+ debug: "npm:2.6.9"
+ negotiator: "npm:~0.6.4"
+ on-headers: "npm:~1.1.0"
+ safe-buffer: "npm:5.2.1"
+ vary: "npm:~1.1.2"
+ checksum: 10/e7552bfbd780f2003c6fe8decb44561f5cc6bc82f0c61e81122caff5ec656f37824084f52155b1e8ef31d7656cecbec9a2499b7a68e92e20780ffb39b479abb7
languageName: node
linkType: hard
@@ -3334,19 +4880,14 @@ __metadata:
languageName: node
linkType: hard
-"concat-stream@npm:^2.0.0":
+"connect-history-api-fallback@npm:^2.0.0":
version: 2.0.0
- resolution: "concat-stream@npm:2.0.0"
- dependencies:
- buffer-from: "npm:^1.0.0"
- inherits: "npm:^2.0.3"
- readable-stream: "npm:^3.0.2"
- typedarray: "npm:^0.0.6"
- checksum: 10/250e576d0617e7c58e1c4b2dd6fe69560f316d2c962a409f9f3aac794018499ddb31948b1e4296f217008e124cd5d526432097745157fe504b5d9f3dc469eadb
+ resolution: "connect-history-api-fallback@npm:2.0.0"
+ checksum: 10/3b26bf4041fdb33deacdcb3af9ae11e9a0b413fb14c95844d74a460b55e407625b364955dcf965c654605cde9d24ad5dad423c489aa430825aab2035859aba0c
languageName: node
linkType: hard
-"console-browserify@npm:^1.2.0":
+"console-browserify@npm:^1.1.0, console-browserify@npm:^1.2.0":
version: 1.2.0
resolution: "console-browserify@npm:1.2.0"
checksum: 10/4f16c471fa84909af6ae00527ce8d19dd9ed587eab85923c145cadfbc35414139f87e7bdd61746138e22cd9df45c2a1ca060370998c2c39f801d4a778105bac5
@@ -3367,7 +4908,7 @@ __metadata:
languageName: node
linkType: hard
-"content-disposition@npm:^0.5.3, content-disposition@npm:~0.5.2":
+"content-disposition@npm:^0.5.3, content-disposition@npm:~0.5.2, content-disposition@npm:~0.5.4":
version: 0.5.4
resolution: "content-disposition@npm:0.5.4"
dependencies:
@@ -3383,36 +4924,13 @@ __metadata:
languageName: node
linkType: hard
-"content-type@npm:^1.0.4, content-type@npm:^1.0.5, content-type@npm:~1.0.5":
+"content-type@npm:1.0.5, content-type@npm:^1.0.4, content-type@npm:^1.0.5, content-type@npm:~1.0.4, content-type@npm:~1.0.5":
version: 1.0.5
resolution: "content-type@npm:1.0.5"
checksum: 10/585847d98dc7fb8035c02ae2cb76c7a9bd7b25f84c447e5ed55c45c2175e83617c8813871b4ee22f368126af6b2b167df655829007b21aa10302873ea9c62662
languageName: node
linkType: hard
-"conventional-changelog-angular@npm:^6.0.0":
- version: 6.0.0
- resolution: "conventional-changelog-angular@npm:6.0.0"
- dependencies:
- compare-func: "npm:^2.0.0"
- checksum: 10/ddc59ead53a45b817d83208200967f5340866782b8362d5e2e34105fdfa3d3a31585ebbdec7750bdb9de53da869f847e8ca96634a9801f51e27ecf4e7ffe2bad
- languageName: node
- linkType: hard
-
-"conventional-changelog-atom@npm:^3.0.0":
- version: 3.0.0
- resolution: "conventional-changelog-atom@npm:3.0.0"
- checksum: 10/9b8c2667e4a263f5e49d7415d16acf5cb240787fe7b604b5a49ef9b63adabf01297dc1e72f0700b98423f99f47e665dccf37e914e12f432b7bf155d0973e054f
- languageName: node
- linkType: hard
-
-"conventional-changelog-codemirror@npm:^3.0.0":
- version: 3.0.0
- resolution: "conventional-changelog-codemirror@npm:3.0.0"
- checksum: 10/9d7ae60d8e4185502e89e27e46ae69253a4e26ce519fd8475f4695af1472f923711669d44ea2dcee3ce92f78c07ed6ac080eafb07f22b4010ab78139201aa0b0
- languageName: node
- linkType: hard
-
"conventional-changelog-config-spec@npm:2.1.0":
version: 2.1.0
resolution: "conventional-changelog-config-spec@npm:2.1.0"
@@ -3420,152 +4938,86 @@ __metadata:
languageName: node
linkType: hard
-"conventional-changelog-conventionalcommits@npm:6.1.0, conventional-changelog-conventionalcommits@npm:^6.0.0":
- version: 6.1.0
- resolution: "conventional-changelog-conventionalcommits@npm:6.1.0"
- dependencies:
- compare-func: "npm:^2.0.0"
- checksum: 10/7e5caef7d65b381a0b302534058acff83adc7a907094c85379ef138c35f2aa043cf8e7a3bef30f42078dcc4bff0e8bc763b179c007dd732d92856fae0607a4bc
- languageName: node
- linkType: hard
-
-"conventional-changelog-core@npm:^5.0.0":
- version: 5.0.2
- resolution: "conventional-changelog-core@npm:5.0.2"
+"conventional-changelog-conventionalcommits@npm:10.2.1":
+ version: 10.2.1
+ resolution: "conventional-changelog-conventionalcommits@npm:10.2.1"
dependencies:
- add-stream: "npm:^1.0.0"
- conventional-changelog-writer: "npm:^6.0.0"
- conventional-commits-parser: "npm:^4.0.0"
- dateformat: "npm:^3.0.3"
- get-pkg-repo: "npm:^4.2.1"
- git-raw-commits: "npm:^3.0.0"
- git-remote-origin-url: "npm:^2.0.0"
- git-semver-tags: "npm:^5.0.0"
- normalize-package-data: "npm:^3.0.3"
- read-pkg: "npm:^3.0.0"
- read-pkg-up: "npm:^3.0.0"
- checksum: 10/eceb8ddbe226768dad326f5cea3b4281b073e51e1af70591280e476c0883f61bc816a5ef4b53debeadf9d98acff1a07aaa3cc0cfff0dfb5b7c56d4f786029d51
- languageName: node
- linkType: hard
-
-"conventional-changelog-ember@npm:^3.0.0":
- version: 3.0.0
- resolution: "conventional-changelog-ember@npm:3.0.0"
- checksum: 10/7c32f6dd0c560cfc148767c1b8e3eee7e6498b279e7d4fab8c0f254839a8f2d32a5b43f5fdc32cc869f4f20544daea9c7852a0795a2ef3bc059d5293044510ce
- languageName: node
- linkType: hard
-
-"conventional-changelog-eslint@npm:^4.0.0":
- version: 4.0.0
- resolution: "conventional-changelog-eslint@npm:4.0.0"
- checksum: 10/98fa5da097196f5b66456a06cc27395b7d41faeb83789f9a3c31a75b27349f586ce74c8d6fb41377764d7c9ff931ee3ce20e74f8e4ce15dbec436ba769a1639b
- languageName: node
- linkType: hard
-
-"conventional-changelog-express@npm:^3.0.0":
- version: 3.0.0
- resolution: "conventional-changelog-express@npm:3.0.0"
- checksum: 10/bac94ebd8d759db78eb3d410061a57c4007c0f1dcafad174bff6b38ca8a2de16ac368bc149eafc6ef7eba408e9b04731605a23458c634ae70b3f0bdc5635cf1e
+ "@conventional-changelog/template": "npm:^1.2.1"
+ checksum: 10/670efe9ba741a1b8daae4cb456961e00e1325b54c5d1af7bed7b2b7f0ab2c034668a0f18b5c8a309773f062795d813d14d64b91fa025790557c9b27d8531e5a0
languageName: node
linkType: hard
-"conventional-changelog-jquery@npm:^4.0.0":
- version: 4.0.0
- resolution: "conventional-changelog-jquery@npm:4.0.0"
- checksum: 10/141b6c7b147bb5e706d0fa784817b02d04ed3a5cfc0cb0c99ccea41d890266e239ff8a32c05e128258bb415ceec3305cf16ff2f5baf12049d1dee58b18915bc4
+"conventional-changelog-preset-loader@npm:^6.0.1":
+ version: 6.0.1
+ resolution: "conventional-changelog-preset-loader@npm:6.0.1"
+ checksum: 10/3b82fbbc842932c725cb9097b03908118b9771cca8cbfd00929f470e980925652849f708bb4b75fb5b39209687c0b54551c3998c18e814b4286fd17338e490ac
languageName: node
linkType: hard
-"conventional-changelog-jshint@npm:^3.0.0":
- version: 3.0.0
- resolution: "conventional-changelog-jshint@npm:3.0.0"
+"conventional-changelog-writer@npm:^9.2.0":
+ version: 9.2.0
+ resolution: "conventional-changelog-writer@npm:9.2.0"
dependencies:
- compare-func: "npm:^2.0.0"
- checksum: 10/4ee044c9cf6c960f40dfd8b80b67ef5989d0b9489a4b94ba711ca35d82a98095882c138f2f823de0d444409d71c8b65b12025c79e23ac946b97e344b57476bf9
- languageName: node
- linkType: hard
-
-"conventional-changelog-preset-loader@npm:^3.0.0":
- version: 3.0.0
- resolution: "conventional-changelog-preset-loader@npm:3.0.0"
- checksum: 10/199c4730c5151f243d35c24585114900c2a7091eab5832cfeb49067a18a2b77d5c9a86b779e6e18b49278a1ff83c011c1d9bb6da95bd1f78d9e36d4d379216d5
- languageName: node
- linkType: hard
-
-"conventional-changelog-writer@npm:^6.0.0":
- version: 6.0.1
- resolution: "conventional-changelog-writer@npm:6.0.1"
- dependencies:
- conventional-commits-filter: "npm:^3.0.0"
- dateformat: "npm:^3.0.3"
- handlebars: "npm:^4.7.7"
- json-stringify-safe: "npm:^5.0.1"
- meow: "npm:^8.1.2"
- semver: "npm:^7.0.0"
- split: "npm:^1.0.1"
+ "@conventional-changelog/template": "npm:^1.2.1"
+ "@simple-libs/stream-utils": "npm:^2.0.0"
+ argue-cli: "npm:^3.1.0"
+ conventional-commits-filter: "npm:^6.0.1"
+ semver: "npm:^7.5.2"
bin:
- conventional-changelog-writer: cli.js
- checksum: 10/9649d390b91c0621b17ccd7faf046990385da46c53004fcc3f13e5887ece26d134316d466de8c21d0c90672c1fca2b7ec98f28603ee04df8cfe5bcfc1fb70e76
+ conventional-changelog-writer: ./dist/cli/index.js
+ checksum: 10/bb074557420a3f23392c64317ca6914d49ea548ff9c6418fb9cffa9c2cbf8878f1136bce38202af69646af896a6eade1945c87b9058a18b94adf7ed2fd72283e
languageName: node
linkType: hard
-"conventional-changelog@npm:4.0.0":
- version: 4.0.0
- resolution: "conventional-changelog@npm:4.0.0"
- dependencies:
- conventional-changelog-angular: "npm:^6.0.0"
- conventional-changelog-atom: "npm:^3.0.0"
- conventional-changelog-codemirror: "npm:^3.0.0"
- conventional-changelog-conventionalcommits: "npm:^6.0.0"
- conventional-changelog-core: "npm:^5.0.0"
- conventional-changelog-ember: "npm:^3.0.0"
- conventional-changelog-eslint: "npm:^4.0.0"
- conventional-changelog-express: "npm:^3.0.0"
- conventional-changelog-jquery: "npm:^4.0.0"
- conventional-changelog-jshint: "npm:^3.0.0"
- conventional-changelog-preset-loader: "npm:^3.0.0"
- checksum: 10/42c9297b2353950213d084903ce209a9d2e0c843510c5550952bf9cfb611edcc5a0a7ae2d6e6d408a3353716e428075198341f5ffea8e0328f244641df1dffc5
+"conventional-changelog@npm:8.1.0":
+ version: 8.1.0
+ resolution: "conventional-changelog@npm:8.1.0"
+ dependencies:
+ "@conventional-changelog/git-client": "npm:^3.1.0"
+ "@simple-libs/hosted-git-info": "npm:^2.0.0"
+ "@simple-libs/normalize-package-data": "npm:^1.0.0"
+ argue-cli: "npm:^3.1.0"
+ conventional-changelog-preset-loader: "npm:^6.0.1"
+ conventional-changelog-writer: "npm:^9.2.0"
+ conventional-commits-parser: "npm:^7.1.0"
+ fd-package-json: "npm:^2.0.0"
+ bin:
+ conventional-changelog: ./dist/cli/index.js
+ checksum: 10/e2a0263db104d7ef498a968c8762ed185516552fecfab5894888b481b75a4ea3d80f4479f0de118e4a41ae4d004b35982aa7bd90b7c816a2ebf1459399241b82
languageName: node
linkType: hard
-"conventional-commits-filter@npm:^3.0.0":
- version: 3.0.0
- resolution: "conventional-commits-filter@npm:3.0.0"
- dependencies:
- lodash.ismatch: "npm:^4.4.0"
- modify-values: "npm:^1.0.1"
- checksum: 10/73337f42acff7189e1dfca8d13c9448ce085ac1c09976cb33617cc909949621befb1640b1c6c30a1be4953a1be0deea9e93fa0dc86725b8be8e249a64fbb4632
+"conventional-commits-filter@npm:^6.0.1":
+ version: 6.0.1
+ resolution: "conventional-commits-filter@npm:6.0.1"
+ checksum: 10/3d668c4428a67eb02267d6fc59f0830b2ec71b78e728062ef7b7698e8d510b2c379a549a9101844d0f2bb7b06b4add91e8c26258e55e29a9d8b9060ac2c83500
languageName: node
linkType: hard
-"conventional-commits-parser@npm:^4.0.0":
- version: 4.0.0
- resolution: "conventional-commits-parser@npm:4.0.0"
+"conventional-commits-parser@npm:^7.1.0":
+ version: 7.1.0
+ resolution: "conventional-commits-parser@npm:7.1.0"
dependencies:
- JSONStream: "npm:^1.3.5"
- is-text-path: "npm:^1.0.1"
- meow: "npm:^8.1.2"
- split2: "npm:^3.2.2"
+ "@simple-libs/stream-utils": "npm:^2.0.0"
+ argue-cli: "npm:^3.1.0"
bin:
- conventional-commits-parser: cli.js
- checksum: 10/d3b7d947b486d3bb40f961808947ee46487429e050be840030211a80aa2eec170e427207c830f2720d8ab898649a652bbbe1825993b8bf0596517e3603f5a1bd
+ conventional-commits-parser: ./dist/cli/index.js
+ checksum: 10/53ae3939469602f5767870a5417952aea6fb68cb602706e680a1df826f39ed381eaef2e99fe7e06ff9df040dc6f5ada4eb923004b3b50bb584fb8e65f749bb69
languageName: node
linkType: hard
-"conventional-recommended-bump@npm:7.0.1":
- version: 7.0.1
- resolution: "conventional-recommended-bump@npm:7.0.1"
- dependencies:
- concat-stream: "npm:^2.0.0"
- conventional-changelog-preset-loader: "npm:^3.0.0"
- conventional-commits-filter: "npm:^3.0.0"
- conventional-commits-parser: "npm:^4.0.0"
- git-raw-commits: "npm:^3.0.0"
- git-semver-tags: "npm:^5.0.0"
- meow: "npm:^8.1.2"
+"conventional-recommended-bump@npm:12.1.0":
+ version: 12.1.0
+ resolution: "conventional-recommended-bump@npm:12.1.0"
+ dependencies:
+ "@conventional-changelog/git-client": "npm:^3.1.0"
+ argue-cli: "npm:^3.1.0"
+ conventional-changelog-preset-loader: "npm:^6.0.1"
+ conventional-commits-filter: "npm:^6.0.1"
+ conventional-commits-parser: "npm:^7.1.0"
bin:
- conventional-recommended-bump: cli.js
- checksum: 10/8d815e7c6f8083085ce4c784b27b0799de628ad2671d99e23c4b08885fb04c5b2adcb6053898eb1f183ee26489273edcbb110c7cd9f80cb06153be53fef2b174
+ conventional-recommended-bump: ./dist/cli/index.js
+ checksum: 10/48819c690c81aa00411b4491cc0bf13f42a3aec07f3cea16bb3ca6b6ea7d5479c3406561f364ff66e210fa81d4a6bd9fe749df32ff9c4ab8964533bbab634081
languageName: node
linkType: hard
@@ -3583,7 +5035,14 @@ __metadata:
languageName: node
linkType: hard
-"cookie@npm:^0.7.1":
+"cookie-signature@npm:~1.0.6":
+ version: 1.0.7
+ resolution: "cookie-signature@npm:1.0.7"
+ checksum: 10/1a62808cd30d15fb43b70e19829b64d04b0802d8ef00275b57d152de4ae6a3208ca05c197b6668d104c4d9de389e53ccc2d3bc6bcaaffd9602461417d8c40710
+ languageName: node
+ linkType: hard
+
+"cookie@npm:^0.7.1, cookie@npm:~0.7.1, cookie@npm:~0.7.2":
version: 0.7.2
resolution: "cookie@npm:0.7.2"
checksum: 10/24b286c556420d4ba4e9bc09120c9d3db7d28ace2bd0f8ccee82422ce42322f73c8312441271e5eefafbead725980e5996cc02766dbb89a90ac7f5636ede608f
@@ -3614,6 +5073,26 @@ __metadata:
languageName: node
linkType: hard
+"cors@npm:~2.8.5":
+ version: 2.8.6
+ resolution: "cors@npm:2.8.6"
+ dependencies:
+ object-assign: "npm:^4"
+ vary: "npm:^1"
+ checksum: 10/aa7174305b21ceb90f9c84f4eaa32f04432d333addbfdc0d1eb7310393c48902e5364aada5ac2f5d054528d63b3179238444475426fcb74e1e345077de485727
+ languageName: node
+ linkType: hard
+
+"create-ecdh@npm:^4.0.4":
+ version: 4.0.4
+ resolution: "create-ecdh@npm:4.0.4"
+ dependencies:
+ bn.js: "npm:^4.1.0"
+ elliptic: "npm:^6.5.3"
+ checksum: 10/0dd7fca9711d09e152375b79acf1e3f306d1a25ba87b8ff14c2fd8e68b83aafe0a7dd6c4e540c9ffbdd227a5fa1ad9b81eca1f233c38bb47770597ba247e614b
+ languageName: node
+ linkType: hard
+
"create-hash@npm:^1.1.0, create-hash@npm:^1.2.0":
version: 1.2.0
resolution: "create-hash@npm:1.2.0"
@@ -3641,6 +5120,13 @@ __metadata:
languageName: node
linkType: hard
+"create-require@npm:^1.1.1":
+ version: 1.1.1
+ resolution: "create-require@npm:1.1.1"
+ checksum: 10/a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff
+ languageName: node
+ linkType: hard
+
"cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.6":
version: 7.0.6
resolution: "cross-spawn@npm:7.0.6"
@@ -3652,6 +5138,26 @@ __metadata:
languageName: node
linkType: hard
+"crypto-browserify@npm:^3.12.1":
+ version: 3.12.1
+ resolution: "crypto-browserify@npm:3.12.1"
+ dependencies:
+ browserify-cipher: "npm:^1.0.1"
+ browserify-sign: "npm:^4.2.3"
+ create-ecdh: "npm:^4.0.4"
+ create-hash: "npm:^1.2.0"
+ create-hmac: "npm:^1.1.7"
+ diffie-hellman: "npm:^5.0.3"
+ hash-base: "npm:~3.0.4"
+ inherits: "npm:^2.0.4"
+ pbkdf2: "npm:^3.1.2"
+ public-encrypt: "npm:^4.0.3"
+ randombytes: "npm:^2.1.0"
+ randomfill: "npm:^1.0.4"
+ checksum: 10/13da0b5f61b3e8e68fcbebf0394f2b2b4d35a0d0ba6ab762720c13391d3697ea42735260a26328a6a3d872be7d4cb5abe98a7a8f88bc93da7ba59b993331b409
+ languageName: node
+ linkType: hard
+
"crypto-random-string@npm:^4.0.0":
version: 4.0.0
resolution: "crypto-random-string@npm:4.0.0"
@@ -3661,13 +5167,6 @@ __metadata:
languageName: node
linkType: hard
-"dargs@npm:^7.0.0":
- version: 7.0.0
- resolution: "dargs@npm:7.0.0"
- checksum: 10/b8f1e3cba59c42e1f13a114ad4848c3fc1cf7470f633ee9e9f1043762429bc97d91ae31b826fb135eefde203a3fdb20deb0c0a0222ac29d937b8046085d668d1
- languageName: node
- linkType: hard
-
"date-fns@npm:^4.1.0":
version: 4.1.0
resolution: "date-fns@npm:4.1.0"
@@ -3675,10 +5174,10 @@ __metadata:
languageName: node
linkType: hard
-"dateformat@npm:^3.0.3":
- version: 3.0.3
- resolution: "dateformat@npm:3.0.3"
- checksum: 10/0504baf50c3777ad333c96c37d1673d67efcb7dd071563832f70b5cbf7f3f4753f18981d44bfd8f665d5e5a511d2fc0af8e0ead8b585b9b3ddaa90067864d3f0
+"debounce@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "debounce@npm:1.2.1"
+ checksum: 10/0b95b2a9d80ed69117d890f8dab8c0f2d6066f8d20edd1d810ae51f8f366a6d4c8b1d56e97dcb9304e93d57de4d5db440d34a03def7dad50403fc3f22bf16808
languageName: node
linkType: hard
@@ -3691,7 +5190,7 @@ __metadata:
languageName: node
linkType: hard
-"debug@npm:4, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.4.3":
+"debug@npm:4, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.4.3, debug@npm:~4.4.1":
version: 4.4.3
resolution: "debug@npm:4.4.3"
dependencies:
@@ -3712,27 +5211,22 @@ __metadata:
languageName: node
linkType: hard
-"debuglog@npm:^1.0.1":
- version: 1.0.1
- resolution: "debuglog@npm:1.0.1"
- checksum: 10/942a3196951ef139e3c19dc55583c1f9532fad92e293ffc6cbf8bb67562ea1aa013b5b86b4a89c2dd89e5e1c16e00b975e5ba3aa0a11070a3577e81162e6e29d
- languageName: node
- linkType: hard
-
-"decamelize-keys@npm:^1.1.0":
- version: 1.1.1
- resolution: "decamelize-keys@npm:1.1.1"
+"debug@npm:~4.3.2":
+ version: 4.3.7
+ resolution: "debug@npm:4.3.7"
dependencies:
- decamelize: "npm:^1.1.0"
- map-obj: "npm:^1.0.0"
- checksum: 10/71d5898174f17a8d2303cecc98ba0236e842948c4d042a8180d5e749be8442220bca2d16dd93bebd7b49e86c807814273212e4da0fae67be7c58c282ff76057a
+ ms: "npm:^2.1.3"
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ checksum: 10/71168908b9a78227ab29d5d25fe03c5867750e31ce24bf2c44a86efc5af041758bb56569b0a3d48a9b5344c00a24a777e6f4100ed6dfd9534a42c1dde285125a
languageName: node
linkType: hard
-"decamelize@npm:^1.1.0":
- version: 1.2.0
- resolution: "decamelize@npm:1.2.0"
- checksum: 10/ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa
+"debuglog@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "debuglog@npm:1.0.1"
+ checksum: 10/942a3196951ef139e3c19dc55583c1f9532fad92e293ffc6cbf8bb67562ea1aa013b5b86b4a89c2dd89e5e1c16e00b975e5ba3aa0a11070a3577e81162e6e29d
languageName: node
linkType: hard
@@ -3748,6 +5242,15 @@ __metadata:
languageName: node
linkType: hard
+"deep-eql@npm:4.1.4":
+ version: 4.1.4
+ resolution: "deep-eql@npm:4.1.4"
+ dependencies:
+ type-detect: "npm:^4.0.0"
+ checksum: 10/f04f4d581f044a824a6322fe4f68fbee4d6780e93fc710cd9852cbc82bfc7010df00f0e05894b848abbe14dc3a25acac44f424e181ae64d12f2ab9d0a875a5ef
+ languageName: node
+ linkType: hard
+
"deep-equal@npm:~1.0.1":
version: 1.0.1
resolution: "deep-equal@npm:1.0.1"
@@ -3769,7 +5272,7 @@ __metadata:
languageName: node
linkType: hard
-"deepmerge@npm:^4.0.0, deepmerge@npm:^4.3.1":
+"deepmerge@npm:^4.3.1":
version: 4.3.1
resolution: "deepmerge@npm:4.3.1"
checksum: 10/058d9e1b0ff1a154468bf3837aea436abcfea1ba1d165ddaaf48ca93765fdd01a30d33c36173da8fbbed951dd0a267602bc782fe288b0fc4b7e1e7091afc4529
@@ -3783,13 +5286,13 @@ __metadata:
languageName: node
linkType: hard
-"default-browser@npm:^5.2.1":
- version: 5.2.1
- resolution: "default-browser@npm:5.2.1"
+"default-browser@npm:^5.2.1, default-browser@npm:^5.4.0":
+ version: 5.5.0
+ resolution: "default-browser@npm:5.5.0"
dependencies:
bundle-name: "npm:^4.1.0"
default-browser-id: "npm:^5.0.0"
- checksum: 10/afab7eff7b7f5f7a94d9114d1ec67273d3fbc539edf8c0f80019879d53aa71e867303c6f6d7cffeb10a6f3cfb59d4f963dba3f9c96830b4540cc7339a1bf9840
+ checksum: 10/c5c5d84a4abd82850e98f06798a55dee87fc1064538bea00cc14c0fb2dccccbff5e9e07eeea80385fa653202d5d92509838b4239d610ddfa1c76a04a1f65e767
languageName: node
linkType: hard
@@ -3860,17 +5363,17 @@ __metadata:
languageName: node
linkType: hard
-"destroy@npm:^1.0.4, destroy@npm:^1.2.0, destroy@npm:~1.2.0":
+"destroy@npm:1.2.0, destroy@npm:^1.0.4, destroy@npm:^1.2.0, destroy@npm:~1.2.0":
version: 1.2.0
resolution: "destroy@npm:1.2.0"
checksum: 10/0acb300b7478a08b92d810ab229d5afe0d2f4399272045ab22affa0d99dbaf12637659411530a6fcd597a9bdac718fc94373a61a95b4651bbc7b83684a565e38
languageName: node
linkType: hard
-"detect-indent@npm:^6.1.0":
- version: 6.1.0
- resolution: "detect-indent@npm:6.1.0"
- checksum: 10/ab953a73c72dbd4e8fc68e4ed4bfd92c97eb6c43734af3900add963fd3a9316f3bc0578b018b24198d4c31a358571eff5f0656e81a1f3b9ad5c547d58b2d093d
+"detect-indent@npm:^7.0.2":
+ version: 7.0.2
+ resolution: "detect-indent@npm:7.0.2"
+ checksum: 10/ef215d1b55a14f677ce03e840973b25362b6f8cd3f566bc82831fa1abb2be6a95423729bc573dc2334b1371ad7be18d9ec67e1a9611b71a04cb6d63f0d8e54cc
languageName: node
linkType: hard
@@ -3881,6 +5384,13 @@ __metadata:
languageName: node
linkType: hard
+"detect-node@npm:^2.0.4":
+ version: 2.1.0
+ resolution: "detect-node@npm:2.1.0"
+ checksum: 10/832184ec458353e41533ac9c622f16c19f7c02d8b10c303dfd3a756f56be93e903616c0bb2d4226183c9351c15fc0b3dba41a17a2308262afabcfa3776e6ae6e
+ languageName: node
+ linkType: hard
+
"dezalgo@npm:^1.0.0":
version: 1.0.4
resolution: "dezalgo@npm:1.0.4"
@@ -3902,6 +5412,33 @@ __metadata:
languageName: node
linkType: hard
+"dns-packet@npm:^5.2.2":
+ version: 5.6.1
+ resolution: "dns-packet@npm:5.6.1"
+ dependencies:
+ "@leichtgewicht/ip-codec": "npm:^2.0.1"
+ checksum: 10/ef5496dd5a906e22ed262cbe1a6f5d532c0893c4f1884a7aa37d4d0d8b8376a2b43f749aab087c8bb1354d67b40444f7fca8de4017b161a4cea468543061aed3
+ languageName: node
+ linkType: hard
+
+"dom-serializer@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "dom-serializer@npm:2.0.0"
+ dependencies:
+ domelementtype: "npm:^2.3.0"
+ domhandler: "npm:^5.0.2"
+ entities: "npm:^4.2.0"
+ checksum: 10/e3bf9027a64450bca0a72297ecdc1e3abb7a2912268a9f3f5d33a2e29c1e2c3502c6e9f860fc6625940bfe0cfb57a44953262b9e94df76872fdfb8151097eeb3
+ languageName: node
+ linkType: hard
+
+"domain-browser@npm:4.22.0":
+ version: 4.22.0
+ resolution: "domain-browser@npm:4.22.0"
+ checksum: 10/3ffbaf0cae8da717698d472ca85ab52f96c538fe1fe85e5eb3351d4e7af52423ce096b8a0c51bb318e1c9ccf9c2e94b3b0f68e5923ad0aa0c623a32b641ed11c
+ languageName: node
+ linkType: hard
+
"domain-browser@npm:^4.23.0":
version: 4.23.0
resolution: "domain-browser@npm:4.23.0"
@@ -3909,12 +5446,30 @@ __metadata:
languageName: node
linkType: hard
-"dot-prop@npm:^5.1.0":
- version: 5.3.0
- resolution: "dot-prop@npm:5.3.0"
+"domelementtype@npm:^2.3.0":
+ version: 2.3.0
+ resolution: "domelementtype@npm:2.3.0"
+ checksum: 10/ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6
+ languageName: node
+ linkType: hard
+
+"domhandler@npm:^5.0.2, domhandler@npm:^5.0.3":
+ version: 5.0.3
+ resolution: "domhandler@npm:5.0.3"
+ dependencies:
+ domelementtype: "npm:^2.3.0"
+ checksum: 10/809b805a50a9c6884a29f38aec0a4e1b4537f40e1c861950ed47d10b049febe6b79ab72adaeeebb3cc8fc1cd33f34e97048a72a9265103426d93efafa78d3e96
+ languageName: node
+ linkType: hard
+
+"domutils@npm:^3.2.1":
+ version: 3.2.2
+ resolution: "domutils@npm:3.2.2"
dependencies:
- is-obj: "npm:^2.0.0"
- checksum: 10/33b2561617bd5c73cf9305368ba4638871c5dbf9c8100c8335acd2e2d590a81ec0e75c11cfaea5cc3cf8c2f668cad4beddb52c11856d0c9e666348eee1baf57a
+ dom-serializer: "npm:^2.0.0"
+ domelementtype: "npm:^2.3.0"
+ domhandler: "npm:^5.0.3"
+ checksum: 10/2e08842151aa406f50fe5e6d494f4ec73c2373199fa00d1f77b56ec604e566b7f226312ae35ab8160bb7f27a27c7285d574c8044779053e499282ca9198be210
languageName: node
linkType: hard
@@ -3939,6 +5494,13 @@ __metadata:
languageName: node
linkType: hard
+"duplexer@npm:^0.1.2":
+ version: 0.1.2
+ resolution: "duplexer@npm:0.1.2"
+ checksum: 10/62ba61a830c56801db28ff6305c7d289b6dc9f859054e8c982abd8ee0b0a14d2e9a8e7d086ffee12e868d43e2bbe8a964be55ddbd8c8957714c87373c7a4f9b0
+ languageName: node
+ linkType: hard
+
"eastasianwidth@npm:^0.2.0":
version: 0.2.0
resolution: "eastasianwidth@npm:0.2.0"
@@ -3960,14 +5522,14 @@ __metadata:
languageName: node
linkType: hard
-"elastic-apm-node@npm:^4.15.0":
- version: 4.15.0
- resolution: "elastic-apm-node@npm:4.15.0"
+"elastic-apm-node@npm:^4.18.0":
+ version: 4.18.0
+ resolution: "elastic-apm-node@npm:4.18.0"
dependencies:
"@elastic/ecs-pino-format": "npm:^1.5.0"
"@opentelemetry/api": "npm:^1.4.1"
- "@opentelemetry/core": "npm:^1.11.0"
- "@opentelemetry/sdk-metrics": "npm:^1.12.0"
+ "@opentelemetry/core": "npm:^2.8.0"
+ "@opentelemetry/sdk-metrics": "npm:^2.8.0"
after-all-results: "npm:^2.0.0"
agentkeepalive: "npm:^4.2.1"
async-value-promise: "npm:^1.1.1"
@@ -3982,7 +5544,7 @@ __metadata:
fast-safe-stringify: "npm:^2.0.7"
fast-stream-to-buffer: "npm:^1.0.0"
http-headers: "npm:^3.0.2"
- import-in-the-middle: "npm:1.14.4"
+ import-in-the-middle: "npm:1.15.0"
json-bigint: "npm:^1.0.0"
lru-cache: "npm:10.2.0"
measured-reporting: "npm:^1.51.1"
@@ -4001,14 +5563,29 @@ __metadata:
sql-summary: "npm:^1.0.1"
stream-chopper: "npm:^3.0.1"
unicode-byte-truncate: "npm:^1.0.0"
- checksum: 10/6207a28ee1ab4b1d0459e2f545745377d6108a7d32587c51607f1f46bb6e08d051d67c73978ba2b089026bf22e6d1abcf44f8558a10013e6629577276688b199
+ checksum: 10/839e2b0d2b4a54c2260fb523d0eb3718e3fb6192b588fce04703dba4217bd8c506c18edc027e53c6fe5e98a456c1cb600366fefa72e7dd91db79b1848694da5d
+ languageName: node
+ linkType: hard
+
+"electron-to-chromium@npm:^1.5.328":
+ version: 1.5.354
+ resolution: "electron-to-chromium@npm:1.5.354"
+ checksum: 10/7da615ccaefcf07b8e99849bfbb7b96a0838634aa73d72873ecc146339cac94e6ad90cb6aed84beb22e20fe082559a58c8035caf5a3a8ebeac93c51a8bca2c67
languageName: node
linkType: hard
-"electron-to-chromium@npm:^1.5.73":
- version: 1.5.91
- resolution: "electron-to-chromium@npm:1.5.91"
- checksum: 10/0b2785042abccecf2a2074bfc5a7b843707835327096809834a62ff94268771c55e549dec10decfca5148f6f5ef9f8ed83671b1910670ecb349d99ec8e8f8769
+"elliptic@npm:^6.5.3, elliptic@npm:^6.6.1":
+ version: 6.6.1
+ resolution: "elliptic@npm:6.6.1"
+ dependencies:
+ bn.js: "npm:^4.11.9"
+ brorand: "npm:^1.1.0"
+ hash.js: "npm:^1.0.0"
+ hmac-drbg: "npm:^1.0.1"
+ inherits: "npm:^2.0.4"
+ minimalistic-assert: "npm:^1.0.1"
+ minimalistic-crypto-utils: "npm:^1.0.1"
+ checksum: 10/dc678c9febd89a219c4008ba3a9abb82237be853d9fd171cd602c8fb5ec39927e65c6b5e7a1b2a4ea82ee8e0ded72275e7932bb2da04a5790c2638b818e4e1c5
languageName: node
linkType: hard
@@ -4047,14 +5624,14 @@ __metadata:
languageName: node
linkType: hard
-"encodeurl@npm:^2.0.0":
+"encodeurl@npm:^2.0.0, encodeurl@npm:~2.0.0":
version: 2.0.0
resolution: "encodeurl@npm:2.0.0"
checksum: 10/abf5cd51b78082cf8af7be6785813c33b6df2068ce5191a40ca8b1afe6a86f9230af9a9ce694a5ce4665955e5c1120871826df9c128a642e09c58d592e2807fe
languageName: node
linkType: hard
-"encoding@npm:^0.1.13":
+"encoding@npm:0.1.13, encoding@npm:^0.1.13":
version: 0.1.13
resolution: "encoding@npm:0.1.13"
dependencies:
@@ -4072,6 +5649,31 @@ __metadata:
languageName: node
linkType: hard
+"engine.io-parser@npm:~5.2.1":
+ version: 5.2.3
+ resolution: "engine.io-parser@npm:5.2.3"
+ checksum: 10/eb0023fff5766e7ae9d59e52d92df53fea06d472cfd7b52e5d2c36b4c1dbf78cab5fde1052bcb3d4bb85bdb5aee10ae85d8a1c6c04676dac0c6cdf16bcba6380
+ languageName: node
+ linkType: hard
+
+"engine.io@npm:~6.6.0":
+ version: 6.6.9
+ resolution: "engine.io@npm:6.6.9"
+ dependencies:
+ "@types/cors": "npm:^2.8.12"
+ "@types/node": "npm:>=10.0.0"
+ "@types/ws": "npm:^8.5.12"
+ accepts: "npm:~1.3.4"
+ base64id: "npm:2.0.0"
+ cookie: "npm:~0.7.2"
+ cors: "npm:~2.8.5"
+ debug: "npm:~4.4.1"
+ engine.io-parser: "npm:~5.2.1"
+ ws: "npm:~8.21.0"
+ checksum: 10/604c1d0d7180b67689ccb9bf8d5faca3255cdeed63c05eae92960df2f1c0c016fe37f492d2c015efa9082af5addf553ee9923113649d593cd09ee3e19cefa5f4
+ languageName: node
+ linkType: hard
+
"enhanced-resolve@npm:^5.17.1":
version: 5.18.0
resolution: "enhanced-resolve@npm:5.18.0"
@@ -4082,10 +5684,17 @@ __metadata:
languageName: node
linkType: hard
-"ensure-type@npm:^1.5.0":
- version: 1.5.1
- resolution: "ensure-type@npm:1.5.1"
- checksum: 10/a88b004b608aff24ac0474b3cbbc9a78b11106f314dcde233157a6b2022de45d43c86c03fb2edc50759426c0f852b9a354402a956b5e7dadc7af86866daef663
+"entities@npm:^4.2.0":
+ version: 4.5.0
+ resolution: "entities@npm:4.5.0"
+ checksum: 10/ede2a35c9bce1aeccd055a1b445d41c75a14a2bb1cd22e242f20cf04d236cdcd7f9c859eb83f76885327bfae0c25bf03303665ee1ce3d47c5927b98b0e3e3d48
+ languageName: node
+ linkType: hard
+
+"entities@npm:^6.0.0":
+ version: 6.0.1
+ resolution: "entities@npm:6.0.1"
+ checksum: 10/62af1307202884349d2867f0aac5c60d8b57102ea0b0e768b16246099512c28e239254ad772d6834e7e14cb1b6f153fc3d0c031934e3183b086c86d3838d874a
languageName: node
linkType: hard
@@ -4096,10 +5705,12 @@ __metadata:
languageName: node
linkType: hard
-"eol@npm:^0.9.1":
- version: 0.9.1
- resolution: "eol@npm:0.9.1"
- checksum: 10/9d3fd93bb2bb5c69c7fe8dfb97b62213ed95857a2e90f5db3110415993e8a989d87fb011755ce22fdb92ca36fbe4e111b395a6f4ce00b9b51d3f00f19c2acf52
+"envinfo@npm:7.21.0":
+ version: 7.21.0
+ resolution: "envinfo@npm:7.21.0"
+ bin:
+ envinfo: dist/cli.js
+ checksum: 10/2469a72802ded4e43c007dcd1c5dd44d8049b7d18276874dcc3f3f14a54bc72806fa35e82760974ca1442d82f5f9df3651048204e72791f81bcdd5f07422a561
languageName: node
linkType: hard
@@ -4228,6 +5839,18 @@ __metadata:
languageName: node
linkType: hard
+"es-toolkit@npm:^1.45.1":
+ version: 1.46.1
+ resolution: "es-toolkit@npm:1.46.1"
+ dependenciesMeta:
+ "@trivago/prettier-plugin-sort-imports@4.3.0":
+ unplugged: true
+ prettier-plugin-sort-re-exports@0.0.1:
+ unplugged: true
+ checksum: 10/15fa8e58848c3cf3f56b3fca6505362a7e19a6487613cd928197d11a12066010655ee47f74e5f412d949173f998df7ce7babcba9ff838bd40ce4ca79fca8f3c4
+ languageName: node
+ linkType: hard
+
"escalade@npm:^3.1.1, escalade@npm:^3.2.0":
version: 3.2.0
resolution: "escalade@npm:3.2.0"
@@ -4235,7 +5858,7 @@ __metadata:
languageName: node
linkType: hard
-"escape-html@npm:^1.0.3":
+"escape-html@npm:^1.0.3, escape-html@npm:~1.0.3":
version: 1.0.3
resolution: "escape-html@npm:1.0.3"
checksum: 10/6213ca9ae00d0ab8bccb6d8d4e0a98e76237b2410302cf7df70aaa6591d509a2a37ce8998008cbecae8fc8ffaadf3fb0229535e6a145f3ce0b211d060decbb24
@@ -4274,14 +5897,14 @@ __metadata:
languageName: node
linkType: hard
-"eslint-config-prettier@npm:^10.0.1":
- version: 10.0.1
- resolution: "eslint-config-prettier@npm:10.0.1"
+"eslint-config-prettier@npm:^10.1.8":
+ version: 10.1.8
+ resolution: "eslint-config-prettier@npm:10.1.8"
peerDependencies:
eslint: ">=7.0.0"
bin:
- eslint-config-prettier: build/bin/cli.js
- checksum: 10/ba6875df0fc4fd3c7c6e2ec9c2e6a224462f7afc662f4cf849775c598a3571c1be136a9b683b12971653b3dcf3f31472aaede3076524b46ec9a77582630158e5
+ eslint-config-prettier: bin/cli.js
+ checksum: 10/03f8e6ea1a6a9b8f9eeaf7c8c52a96499ec4b275b9ded33331a6cc738ed1d56de734097dbd0091f136f0e84bc197388bd8ec22a52a4658105883f8c8b7d8921a
languageName: node
linkType: hard
@@ -4298,9 +5921,9 @@ __metadata:
languageName: node
linkType: hard
-"eslint-plugin-jest@npm:^28.11.0":
- version: 28.11.0
- resolution: "eslint-plugin-jest@npm:28.11.0"
+"eslint-plugin-jest@npm:^28.14.0":
+ version: 28.14.0
+ resolution: "eslint-plugin-jest@npm:28.14.0"
dependencies:
"@typescript-eslint/utils": "npm:^6.0.0 || ^7.0.0 || ^8.0.0"
peerDependencies:
@@ -4312,45 +5935,46 @@ __metadata:
optional: true
jest:
optional: true
- checksum: 10/7f3896ec2dc03110688bb9f359a7aa1ba1a6d9a60ffbc3642361c4aaf55afcba9ce36b6609b20b1507028c2170ffe29b0f3e9cc9b7fe12fdd233740a2f9ce0a1
+ checksum: 10/6032497bd97d6dd010450d5fdf535b8613a2789f4f83764ae04361c48d06d92f3d9b2e4350914b8fd857b6e611ba2b5282a1133ab8ec51b3e7053f9d336058e6
languageName: node
linkType: hard
-"eslint-plugin-n@npm:^17.15.1":
- version: 17.15.1
- resolution: "eslint-plugin-n@npm:17.15.1"
+"eslint-plugin-n@npm:^17.23.2":
+ version: 17.24.0
+ resolution: "eslint-plugin-n@npm:17.24.0"
dependencies:
- "@eslint-community/eslint-utils": "npm:^4.4.1"
+ "@eslint-community/eslint-utils": "npm:^4.5.0"
enhanced-resolve: "npm:^5.17.1"
eslint-plugin-es-x: "npm:^7.8.0"
get-tsconfig: "npm:^4.8.1"
globals: "npm:^15.11.0"
+ globrex: "npm:^0.1.2"
ignore: "npm:^5.3.2"
- minimatch: "npm:^9.0.5"
semver: "npm:^7.6.3"
+ ts-declaration-location: "npm:^1.0.6"
peerDependencies:
eslint: ">=8.23.0"
- checksum: 10/43fc161949fa0346ac7063a30580cd0db27e216b8e6a48d73d0bf4f10b88e9b65f263399843b3fe2087f766f264d16f0cbe8f2f898591516842201dc115a2d21
+ checksum: 10/bbff1172f7297288d209f167febb3a31747838d5ed8050aa7d1aa2540a49b4f9932828831529f0306f2909e41ae3ae8848c145238a6990eae5a9d128a59b056c
languageName: node
linkType: hard
-"eslint-plugin-prettier@npm:^5.2.3":
- version: 5.2.3
- resolution: "eslint-plugin-prettier@npm:5.2.3"
+"eslint-plugin-prettier@npm:^5.5.5":
+ version: 5.5.5
+ resolution: "eslint-plugin-prettier@npm:5.5.5"
dependencies:
- prettier-linter-helpers: "npm:^1.0.0"
- synckit: "npm:^0.9.1"
+ prettier-linter-helpers: "npm:^1.0.1"
+ synckit: "npm:^0.11.12"
peerDependencies:
"@types/eslint": ">=8.0.0"
eslint: ">=8.0.0"
- eslint-config-prettier: "*"
+ eslint-config-prettier: ">= 7.0.0 <10.0.0 || >=10.1.0"
prettier: ">=3.0.0"
peerDependenciesMeta:
"@types/eslint":
optional: true
eslint-config-prettier:
optional: true
- checksum: 10/6444a0b89f3e2a6b38adce69761133f8539487d797f1655b3fa24f93a398be132c4f68f87041a14740b79202368d5782aa1dffd2bd7a3ea659f263d6796acf15
+ checksum: 10/36c22c2fa2fd7c61ed292af1280e1d8f94dfe1671eacc5a503a249ca4b27fd226dbf6a1820457d611915926946f42729488d2dc7a5c320601e6cf1fad0d28f66
languageName: node
linkType: hard
@@ -4371,30 +5995,37 @@ __metadata:
languageName: node
linkType: hard
-"eslint-visitor-keys@npm:^4.2.0, eslint-visitor-keys@npm:^4.2.1":
+"eslint-visitor-keys@npm:^4.2.1":
version: 4.2.1
resolution: "eslint-visitor-keys@npm:4.2.1"
checksum: 10/3ee00fc6a7002d4b0ffd9dc99e13a6a7882c557329e6c25ab254220d71e5c9c4f89dca4695352949ea678eb1f3ba912a18ef8aac0a7fe094196fd92f441bfce2
languageName: node
linkType: hard
-"eslint@npm:^9.39.2":
- version: 9.39.2
- resolution: "eslint@npm:9.39.2"
+"eslint-visitor-keys@npm:^5.0.0":
+ version: 5.0.1
+ resolution: "eslint-visitor-keys@npm:5.0.1"
+ checksum: 10/f9cc1a57b75e0ef949545cac33d01e8367e302de4c1483266ed4d8646ee5c306376660196bbb38b004e767b7043d1e661cb4336b49eff634a1bbe75c1db709ec
+ languageName: node
+ linkType: hard
+
+"eslint@npm:^9.39.5":
+ version: 9.39.5
+ resolution: "eslint@npm:9.39.5"
dependencies:
"@eslint-community/eslint-utils": "npm:^4.8.0"
"@eslint-community/regexpp": "npm:^4.12.1"
- "@eslint/config-array": "npm:^0.21.1"
+ "@eslint/config-array": "npm:^0.21.2"
"@eslint/config-helpers": "npm:^0.4.2"
"@eslint/core": "npm:^0.17.0"
- "@eslint/eslintrc": "npm:^3.3.1"
- "@eslint/js": "npm:9.39.2"
+ "@eslint/eslintrc": "npm:^3.3.6"
+ "@eslint/js": "npm:9.39.5"
"@eslint/plugin-kit": "npm:^0.4.1"
"@humanfs/node": "npm:^0.16.6"
"@humanwhocodes/module-importer": "npm:^1.0.1"
"@humanwhocodes/retry": "npm:^0.4.2"
"@types/estree": "npm:^1.0.6"
- ajv: "npm:^6.12.4"
+ ajv: "npm:^6.14.0"
chalk: "npm:^4.0.0"
cross-spawn: "npm:^7.0.6"
debug: "npm:^4.3.2"
@@ -4413,7 +6044,7 @@ __metadata:
is-glob: "npm:^4.0.0"
json-stable-stringify-without-jsonify: "npm:^1.0.1"
lodash.merge: "npm:^4.6.2"
- minimatch: "npm:^3.1.2"
+ minimatch: "npm:^3.1.5"
natural-compare: "npm:^1.4.0"
optionator: "npm:^0.9.3"
peerDependencies:
@@ -4423,7 +6054,7 @@ __metadata:
optional: true
bin:
eslint: bin/eslint.js
- checksum: 10/53ff0e9c8264e7e8d40d50fdc0c0df0b701cfc5289beedfb686c214e3e7b199702f894bbd1bb48653727bb1ecbd1147cf5f555a4ae71e1daf35020cdc9072d9f
+ checksum: 10/081b27602a923276e4d591a0ef7972ff6f12cd189a93a0dadd5b8eb0338f2984882dc92d545cdf3527cb9c78230183394d411cf68098ee9dbbcb80d4f9fe115c
languageName: node
linkType: hard
@@ -4438,16 +6069,6 @@ __metadata:
languageName: node
linkType: hard
-"esprima-next@npm:^5.7.0":
- version: 5.8.4
- resolution: "esprima-next@npm:5.8.4"
- bin:
- esparse: bin/esparse.js
- esvalidate: bin/esvalidate.js
- checksum: 10/3efd0523a3db5c02ef109421931774daaa0e3439c820f6ed617a7253bba90b47b6691607d764d285d8b33cc631ebbfdfe33853150301177911667adb6bab52ea
- languageName: node
- linkType: hard
-
"esprima@npm:^4.0.0":
version: 4.0.1
resolution: "esprima@npm:4.0.1"
@@ -4490,6 +6111,13 @@ __metadata:
languageName: node
linkType: hard
+"etag@npm:~1.8.1":
+ version: 1.8.1
+ resolution: "etag@npm:1.8.1"
+ checksum: 10/571aeb3dbe0f2bbd4e4fadbdb44f325fc75335cd5f6f6b6a091e6a06a9f25ed5392f0863c5442acb0646787446e816f13cbfc6edce5b07658541dff573cab1ff
+ languageName: node
+ linkType: hard
+
"event-target-shim@npm:^5.0.0":
version: 5.0.1
resolution: "event-target-shim@npm:5.0.1"
@@ -4497,14 +6125,14 @@ __metadata:
languageName: node
linkType: hard
-"eventemitter3@npm:^4.0.4":
+"eventemitter3@npm:^4.0.0, eventemitter3@npm:^4.0.4":
version: 4.0.7
resolution: "eventemitter3@npm:4.0.7"
checksum: 10/8030029382404942c01d0037079f1b1bc8fed524b5849c237b80549b01e2fc49709e1d0c557fa65ca4498fc9e24cff1475ef7b855121fcc15f9d61f93e282346
languageName: node
linkType: hard
-"events@npm:^3.3.0":
+"events@npm:^3.0.0, events@npm:^3.3.0":
version: 3.3.0
resolution: "events@npm:3.3.0"
checksum: 10/a3d47e285e28d324d7180f1e493961a2bbb4cad6412090e4dec114f4db1f5b560c7696ee8e758f55e23913ede856e3689cd3aa9ae13c56b5d8314cd3b3ddd1be
@@ -4539,6 +6167,33 @@ __metadata:
languageName: node
linkType: hard
+"execa@npm:^9.6.1":
+ version: 9.6.1
+ resolution: "execa@npm:9.6.1"
+ dependencies:
+ "@sindresorhus/merge-streams": "npm:^4.0.0"
+ cross-spawn: "npm:^7.0.6"
+ figures: "npm:^6.1.0"
+ get-stream: "npm:^9.0.0"
+ human-signals: "npm:^8.0.1"
+ is-plain-obj: "npm:^4.1.0"
+ is-stream: "npm:^4.0.1"
+ npm-run-path: "npm:^6.0.0"
+ pretty-ms: "npm:^9.2.0"
+ signal-exit: "npm:^4.1.0"
+ strip-final-newline: "npm:^4.0.0"
+ yoctocolors: "npm:^2.1.1"
+ checksum: 10/d0f7a2185152379f8772f6d780b188f2728a95b9a68d1a897f58805d7ba6bd55eaa5e128cb66a274251a6b5e4d9388332b1417bd7d46c25e020e4e55725cf79e
+ languageName: node
+ linkType: hard
+
+"exit-hook@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "exit-hook@npm:4.0.0"
+ checksum: 10/5aa8b4e45fa943e7e174c25329750a0ffefb593ccc2eafd5d67e1d734b114c93cb36b5714548fb1c2a1dd90f3e9cdc606b5e788f428f780708774da444021fdc
+ languageName: node
+ linkType: hard
+
"exit-x@npm:^0.2.2":
version: 0.2.2
resolution: "exit-x@npm:0.2.2"
@@ -4546,17 +6201,17 @@ __metadata:
languageName: node
linkType: hard
-"expect@npm:30.2.0, expect@npm:^30.0.0":
- version: 30.2.0
- resolution: "expect@npm:30.2.0"
+"expect@npm:30.4.1, expect@npm:^30.0.0":
+ version: 30.4.1
+ resolution: "expect@npm:30.4.1"
dependencies:
- "@jest/expect-utils": "npm:30.2.0"
+ "@jest/expect-utils": "npm:30.4.1"
"@jest/get-type": "npm:30.1.0"
- jest-matcher-utils: "npm:30.2.0"
- jest-message-util: "npm:30.2.0"
- jest-mock: "npm:30.2.0"
- jest-util: "npm:30.2.0"
- checksum: 10/cf98ab45ab2e9f2fb9943a3ae0097f72d63a94be179a19fd2818d8fdc3b7681d31cc8ef540606eb8dd967d9c44d73fef263a614e9de260c22943ffb122ad66fd
+ jest-matcher-utils: "npm:30.4.1"
+ jest-message-util: "npm:30.4.1"
+ jest-mock: "npm:30.4.1"
+ jest-util: "npm:30.4.1"
+ checksum: 10/f25051e5073c55369199ec3108ac01c60074bd09dad0b5a6c9fe40596438051cb52607e0e97505126422535b8d0dacab13aa29bb14e9fac71630bc710201a3f1
languageName: node
linkType: hard
@@ -4567,6 +6222,45 @@ __metadata:
languageName: node
linkType: hard
+"express@npm:^4.21.2":
+ version: 4.22.2
+ resolution: "express@npm:4.22.2"
+ dependencies:
+ accepts: "npm:~1.3.8"
+ array-flatten: "npm:1.1.1"
+ body-parser: "npm:~1.20.5"
+ content-disposition: "npm:~0.5.4"
+ content-type: "npm:~1.0.4"
+ cookie: "npm:~0.7.1"
+ cookie-signature: "npm:~1.0.6"
+ debug: "npm:2.6.9"
+ depd: "npm:2.0.0"
+ encodeurl: "npm:~2.0.0"
+ escape-html: "npm:~1.0.3"
+ etag: "npm:~1.8.1"
+ finalhandler: "npm:~1.3.1"
+ fresh: "npm:~0.5.2"
+ http-errors: "npm:~2.0.0"
+ merge-descriptors: "npm:1.0.3"
+ methods: "npm:~1.1.2"
+ on-finished: "npm:~2.4.1"
+ parseurl: "npm:~1.3.3"
+ path-to-regexp: "npm:~0.1.12"
+ proxy-addr: "npm:~2.0.7"
+ qs: "npm:~6.15.1"
+ range-parser: "npm:~1.2.1"
+ safe-buffer: "npm:5.2.1"
+ send: "npm:~0.19.0"
+ serve-static: "npm:~1.16.2"
+ setprototypeof: "npm:1.2.0"
+ statuses: "npm:~2.0.1"
+ type-is: "npm:~1.6.18"
+ utils-merge: "npm:1.0.1"
+ vary: "npm:~1.1.2"
+ checksum: 10/defeef5f1cda5bf5ee4a6b35252563552d8d97fab1d29f502e45ef64316f5d02f49739d7c8a79e425613af3a542d0e3cd8cf7e85671ce2ddd592197abcf5acc3
+ languageName: node
+ linkType: hard
+
"fast-clone@npm:^1.5.13":
version: 1.5.13
resolution: "fast-clone@npm:1.5.13"
@@ -4588,26 +6282,6 @@ __metadata:
languageName: node
linkType: hard
-"fast-fifo@npm:^1.1.0":
- version: 1.3.2
- resolution: "fast-fifo@npm:1.3.2"
- checksum: 10/6bfcba3e4df5af7be3332703b69a7898a8ed7020837ec4395bb341bd96cc3a6d86c3f6071dd98da289618cf2234c70d84b2a6f09a33dd6f988b1ff60d8e54275
- languageName: node
- linkType: hard
-
-"fast-glob@npm:^3.3.2":
- version: 3.3.3
- resolution: "fast-glob@npm:3.3.3"
- dependencies:
- "@nodelib/fs.stat": "npm:^2.0.2"
- "@nodelib/fs.walk": "npm:^1.2.3"
- glob-parent: "npm:^5.1.2"
- merge2: "npm:^1.3.0"
- micromatch: "npm:^4.0.8"
- checksum: 10/dcc6432b269762dd47381d8b8358bf964d8f4f60286ac6aa41c01ade70bda459ff2001b516690b96d5365f68a49242966112b5d5cc9cd82395fa8f9d017c90ad
- languageName: node
- linkType: hard
-
"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0":
version: 2.1.0
resolution: "fast-json-stable-stringify@npm:2.1.0"
@@ -4636,43 +6310,79 @@ __metadata:
languageName: node
linkType: hard
-"fast-stream-to-buffer@npm:^1.0.0":
- version: 1.0.0
- resolution: "fast-stream-to-buffer@npm:1.0.0"
+"fast-stream-to-buffer@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "fast-stream-to-buffer@npm:1.0.0"
+ dependencies:
+ end-of-stream: "npm:^1.4.1"
+ checksum: 10/1c9902a15233610b5b36b704827743d769e48970337a447f38505f95e5ff1d30cce35d8533e2c08de4d62bc454dc96f5b8b3851f39b135587ea0720bdc37a9c5
+ languageName: node
+ linkType: hard
+
+"fast-string-truncated-width@npm:^3.0.2":
+ version: 3.0.3
+ resolution: "fast-string-truncated-width@npm:3.0.3"
+ checksum: 10/3a1631e48927cb558b612a90ee78a61a660823c39b024bfc113935760b5b64805dbf03c4e696c33005294db578417687432e9d13567f1a582c2c75015e8a7648
+ languageName: node
+ linkType: hard
+
+"fast-string-width@npm:^3.0.2":
+ version: 3.0.2
+ resolution: "fast-string-width@npm:3.0.2"
+ dependencies:
+ fast-string-truncated-width: "npm:^3.0.2"
+ checksum: 10/5b9019769f2b00b96d43575c202f4e035a0e55eba7669a9a32351de9fa0805d0959a2afcaec6e4db5ee9b9a4c08d8e77f95abeb04b5bae2f76635cf04ddb4b80
+ languageName: node
+ linkType: hard
+
+"fast-uri@npm:^3.0.1":
+ version: 3.1.4
+ resolution: "fast-uri@npm:3.1.4"
+ checksum: 10/1c1ff8e7b6f7b38e997b1528aa2c97e290e0173d51250bfe4e11a303e454fc297a287555b5cb2ded59dbfce7876855fb15994a1a6b439f2497a2b8926513e397
+ languageName: node
+ linkType: hard
+
+"fast-wrap-ansi@npm:^0.2.0":
+ version: 0.2.0
+ resolution: "fast-wrap-ansi@npm:0.2.0"
dependencies:
- end-of-stream: "npm:^1.4.1"
- checksum: 10/1c9902a15233610b5b36b704827743d769e48970337a447f38505f95e5ff1d30cce35d8533e2c08de4d62bc454dc96f5b8b3851f39b135587ea0720bdc37a9c5
+ fast-string-width: "npm:^3.0.2"
+ checksum: 10/e717a249dae84c9a964e6b5da05c373fadd92714b2afb2d6c7e6f766c3409c773c95b28e186dcdd397e2d7850533dbdd766845d0cd29e15d172d33128f9447d3
languageName: node
linkType: hard
-"fast-xml-builder@npm:^1.1.4":
- version: 1.1.4
- resolution: "fast-xml-builder@npm:1.1.4"
+"fast-xml-builder@npm:^1.2.0":
+ version: 1.2.0
+ resolution: "fast-xml-builder@npm:1.2.0"
dependencies:
- path-expression-matcher: "npm:^1.1.3"
- checksum: 10/32937866aaf5a90e69d1f4ee6e15e875248d5b5d2afd70277e9e8323074de4980cef24575a591b8e43c29f405d5f12377b3bad3842dc412b0c5c17a3eaee4b6b
+ path-expression-matcher: "npm:^1.5.0"
+ xml-naming: "npm:^0.1.0"
+ checksum: 10/5948add7796879d03b6c779cbb17f2f203a41cdf23dfaaa4789c65078a36376cd0709a6586701e980e3d244ebd5fdb35db1235ccb5e4fb9e9abfd8c51e7b8813
languageName: node
linkType: hard
-"fast-xml-parser@npm:^5.2.5":
- version: 5.5.8
- resolution: "fast-xml-parser@npm:5.5.8"
+"fast-xml-parser@npm:^5.5.6":
+ version: 5.9.2
+ resolution: "fast-xml-parser@npm:5.9.2"
dependencies:
- fast-xml-builder: "npm:^1.1.4"
- path-expression-matcher: "npm:^1.2.0"
- strnum: "npm:^2.2.0"
+ "@nodable/entities": "npm:^2.2.0"
+ fast-xml-builder: "npm:^1.2.0"
+ is-unsafe: "npm:^1.0.1"
+ path-expression-matcher: "npm:^1.5.0"
+ strnum: "npm:^2.4.0"
+ xml-naming: "npm:^0.1.0"
bin:
fxparser: src/cli/cli.js
- checksum: 10/888f9a5d345e65e34b70d394798a1542603a216f06c140a9671d031b80b42c01ef2e68f2a0ceea45e7703fa80549f0e06da710f5a2faafdc910d1b6b354f0fa0
+ checksum: 10/c2ef301453d9db188469615c90bb552aab628c1b5b564e02db17e0295781bcc449cb174bad8638f5760cfb673e0f2df875495838b08f78ed5c0c5c6f51175ade
languageName: node
linkType: hard
-"fastq@npm:^1.13.0, fastq@npm:^1.6.0":
- version: 1.15.0
- resolution: "fastq@npm:1.15.0"
+"faye-websocket@npm:^0.11.3":
+ version: 0.11.4
+ resolution: "faye-websocket@npm:0.11.4"
dependencies:
- reusify: "npm:^1.0.4"
- checksum: 10/67c01b1c972e2d5b6fea197a1a39d5d582982aea69ff4c504badac71080d8396d4843b165a9686e907c233048f15a86bbccb0e7f83ba771f6fa24bcde059d0c3
+ websocket-driver: "npm:>=0.5.1"
+ checksum: 10/22433c14c60925e424332d2794463a8da1c04848539b5f8db5fced62a7a7c71a25335a4a8b37334e3a32318835e2b87b1733d008561964121c4a0bd55f0878c3
languageName: node
linkType: hard
@@ -4685,6 +6395,15 @@ __metadata:
languageName: node
linkType: hard
+"fd-package-json@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "fd-package-json@npm:2.0.0"
+ dependencies:
+ walk-up-path: "npm:^4.0.0"
+ checksum: 10/e595a1a23f8e208815cdcf26c92218240da00acce80468324408dc4a5cb6c26b6efb5076f0458a02f044562a1e60253731187a627d5416b4961468ddfc0ae426
+ languageName: node
+ linkType: hard
+
"fdir@npm:^6.5.0":
version: 6.5.0
resolution: "fdir@npm:6.5.0"
@@ -4713,6 +6432,15 @@ __metadata:
languageName: node
linkType: hard
+"figures@npm:^6.1.0":
+ version: 6.1.0
+ resolution: "figures@npm:6.1.0"
+ dependencies:
+ is-unicode-supported: "npm:^2.0.0"
+ checksum: 10/9822d13630bee8e6a9f2da866713adf13854b07e0bfde042defa8bba32d47a1c0b2afa627ce73837c674cf9a5e3edce7e879ea72cb9ea7960b2390432d8e1167
+ languageName: node
+ linkType: hard
+
"file-entry-cache@npm:^8.0.0":
version: 8.0.0
resolution: "file-entry-cache@npm:8.0.0"
@@ -4722,14 +6450,22 @@ __metadata:
languageName: node
linkType: hard
-"file-type@npm:^18.7.0":
- version: 18.7.0
- resolution: "file-type@npm:18.7.0"
+"file-type@npm:^21.3.4":
+ version: 21.3.4
+ resolution: "file-type@npm:21.3.4"
dependencies:
- readable-web-to-node-stream: "npm:^3.0.2"
- strtok3: "npm:^7.0.0"
- token-types: "npm:^5.0.1"
- checksum: 10/95b70313d697484bb9613dd822a29554e9754b49f4d62f17e399649c981a12556776b4ee83b0a62b752fc9048ac79f6cf79ad13b2a750d89afa170902c7b0029
+ "@tokenizer/inflate": "npm:^0.4.1"
+ strtok3: "npm:^10.3.4"
+ token-types: "npm:^6.1.1"
+ uint8array-extras: "npm:^1.4.0"
+ checksum: 10/42d5cf6aafb998fb2f0357e96ea7c48bcce5249f899523a3a5a4c297f4fe2346cc0aff9cf04243ada5c54b6457183550b2a04902b6533cd5e64aaa344d78e0eb
+ languageName: node
+ linkType: hard
+
+"filesize@npm:^10.1.6":
+ version: 10.1.6
+ resolution: "filesize@npm:10.1.6"
+ checksum: 10/e800837c4fc02303f1944d5a4c7b706df1c5cd95d745181852604fb00a1c2d55d2d3921252722bd2f0c86b59c94edaba23fa224776bbf977455d4034e7be1f45
languageName: node
linkType: hard
@@ -4742,6 +6478,21 @@ __metadata:
languageName: node
linkType: hard
+"finalhandler@npm:~1.3.1":
+ version: 1.3.2
+ resolution: "finalhandler@npm:1.3.2"
+ dependencies:
+ debug: "npm:2.6.9"
+ encodeurl: "npm:~2.0.0"
+ escape-html: "npm:~1.0.3"
+ on-finished: "npm:~2.4.1"
+ parseurl: "npm:~1.3.3"
+ statuses: "npm:~2.0.2"
+ unpipe: "npm:~1.0.0"
+ checksum: 10/6cb4f9f80eaeb5a0fac4fdbd27a65d39271f040a0034df16556d896bfd855fd42f09da886781b3102117ea8fceba97b903c1f8b08df1fb5740576d5e0f481eed
+ languageName: node
+ linkType: hard
+
"find-up-simple@npm:^1.0.0":
version: 1.0.0
resolution: "find-up-simple@npm:1.0.0"
@@ -4749,15 +6500,6 @@ __metadata:
languageName: node
linkType: hard
-"find-up@npm:^2.0.0":
- version: 2.1.0
- resolution: "find-up@npm:2.1.0"
- dependencies:
- locate-path: "npm:^2.0.0"
- checksum: 10/43284fe4da09f89011f08e3c32cd38401e786b19226ea440b75386c1b12a4cb738c94969808d53a84f564ede22f732c8409e3cfc3f7fb5b5c32378ad0bbf28bd
- languageName: node
- linkType: hard
-
"find-up@npm:^3.0.0":
version: 3.0.0
resolution: "find-up@npm:3.0.0"
@@ -4797,6 +6539,15 @@ __metadata:
languageName: node
linkType: hard
+"flat@npm:^5.0.2":
+ version: 5.0.2
+ resolution: "flat@npm:5.0.2"
+ bin:
+ flat: cli.js
+ checksum: 10/72479e651c15eab53e25ce04c31bab18cfaac0556505cac19221dbbe85bbb9686bc76e4d397e89e5bf516ce667dcf818f8b07e585568edba55abc2bf1f698fb5
+ languageName: node
+ linkType: hard
+
"flatted@npm:^3.2.9":
version: 3.4.2
resolution: "flatted@npm:3.4.2"
@@ -4811,13 +6562,13 @@ __metadata:
languageName: node
linkType: hard
-"follow-redirects@npm:^1.15.11":
- version: 1.15.11
- resolution: "follow-redirects@npm:1.15.11"
+"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.16.0":
+ version: 1.16.0
+ resolution: "follow-redirects@npm:1.16.0"
peerDependenciesMeta:
debug:
optional: true
- checksum: 10/07372fd74b98c78cf4d417d68d41fdaa0be4dcacafffb9e67b1e3cf090bc4771515e65020651528faab238f10f9b9c0d9707d6c1574a6c0387c5de1042cde9ba
+ checksum: 10/3fbe3d80b3b544c22705d837aa5d4a0d07a740d913534a2620b0a004c610af4148e3b58723536dd099aaa1c9d3a155964bde9665d6e5cb331460809a1fc572fd
languageName: node
linkType: hard
@@ -4841,15 +6592,15 @@ __metadata:
linkType: hard
"form-data@npm:^4.0.5":
- version: 4.0.5
- resolution: "form-data@npm:4.0.5"
+ version: 4.0.6
+ resolution: "form-data@npm:4.0.6"
dependencies:
asynckit: "npm:^0.4.0"
combined-stream: "npm:^1.0.8"
es-set-tostringtag: "npm:^2.1.0"
- hasown: "npm:^2.0.2"
- mime-types: "npm:^2.1.12"
- checksum: 10/52ecd6e927c8c4e215e68a7ad5e0f7c1031397439672fd9741654b4a94722c4182e74cc815b225dcb5be3f4180f36428f67c6dd39eaa98af0dcfdd26c00c19cd
+ hasown: "npm:^2.0.4"
+ mime-types: "npm:^2.1.35"
+ checksum: 10/de6614c8537c92fa5fa3ee7e827758f98f5a9c033f348b7de81855ef36e5cb867e75d9f405d9483ab8d724a4a20d4e79926a299fa8dbba38f530eb659f0884e4
languageName: node
linkType: hard
@@ -4860,6 +6611,13 @@ __metadata:
languageName: node
linkType: hard
+"forwarded@npm:0.2.0":
+ version: 0.2.0
+ resolution: "forwarded@npm:0.2.0"
+ checksum: 10/29ba9fd347117144e97cbb8852baae5e8b2acb7d1b591ef85695ed96f5b933b1804a7fac4a15dd09ca7ac7d0cdc104410e8102aae2dd3faa570a797ba07adb81
+ languageName: node
+ linkType: hard
+
"fresh@npm:^0.5.2, fresh@npm:~0.5.2":
version: 0.5.2
resolution: "fresh@npm:0.5.2"
@@ -4867,6 +6625,17 @@ __metadata:
languageName: node
linkType: hard
+"fs-extra@npm:^11.1.1":
+ version: 11.3.5
+ resolution: "fs-extra@npm:11.3.5"
+ dependencies:
+ graceful-fs: "npm:^4.2.0"
+ jsonfile: "npm:^6.0.1"
+ universalify: "npm:^2.0.0"
+ checksum: 10/dc8408818eec8b03efad8742d079ecab749a2f7bc9f208e429b447fcac7632fae52e09312d6d42218efe7e2efa97f03ff232d639ade4aa7fcd8c00ebe9ad0c0c
+ languageName: node
+ linkType: hard
+
"fs-minipass@npm:^3.0.0":
version: 3.0.3
resolution: "fs-minipass@npm:3.0.3"
@@ -4876,16 +6645,6 @@ __metadata:
languageName: node
linkType: hard
-"fs-mkdirp-stream@npm:^2.0.1":
- version: 2.0.1
- resolution: "fs-mkdirp-stream@npm:2.0.1"
- dependencies:
- graceful-fs: "npm:^4.2.8"
- streamx: "npm:^2.12.0"
- checksum: 10/9fefd9fa3d6985aea0935944288bd20215779f683ec3af3c157cf4d4d4b0c546caae8219219f47a05a1df3b23f6a605fe64bee6ee14e550f1a670db67359ff27
- languageName: node
- linkType: hard
-
"fs.realpath@npm:^1.0.0":
version: 1.0.0
resolution: "fs.realpath@npm:1.0.0"
@@ -4893,7 +6652,7 @@ __metadata:
languageName: node
linkType: hard
-"fsevents@npm:^2.3.3":
+"fsevents@npm:^2.3.3, fsevents@npm:~2.3.2":
version: 2.3.3
resolution: "fsevents@npm:2.3.3"
dependencies:
@@ -4903,7 +6662,7 @@ __metadata:
languageName: node
linkType: hard
-"fsevents@patch:fsevents@npm%3A^2.3.3#optional!builtin":
+"fsevents@patch:fsevents@npm%3A^2.3.3#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin":
version: 2.3.3
resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1"
dependencies:
@@ -4959,6 +6718,13 @@ __metadata:
languageName: node
linkType: hard
+"get-east-asian-width@npm:^1.5.0":
+ version: 1.5.0
+ resolution: "get-east-asian-width@npm:1.5.0"
+ checksum: 10/60bc34cd1e975055ab99f0f177e31bed3e516ff7cee9c536474383954a976abaa6b94a51d99ad158ef1e372790fa096cab7d07f166bb0778f6587954c0fbe946
+ languageName: node
+ linkType: hard
+
"get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.3.0":
version: 1.3.1
resolution: "get-intrinsic@npm:1.3.1"
@@ -4987,17 +6753,10 @@ __metadata:
languageName: node
linkType: hard
-"get-pkg-repo@npm:^4.2.1":
- version: 4.2.1
- resolution: "get-pkg-repo@npm:4.2.1"
- dependencies:
- "@hutson/parse-repository-url": "npm:^3.0.0"
- hosted-git-info: "npm:^4.0.0"
- through2: "npm:^2.0.0"
- yargs: "npm:^16.2.0"
- bin:
- get-pkg-repo: src/cli.js
- checksum: 10/033225cf7cdf3f61885f45c492975f412268cf9f3ec68cc42df9af1bec54cf0b0c5ddb7391a6dc973361e7e10df9d432cca0050892ba8856bc50413e0741804f
+"get-port@npm:5.1.1":
+ version: 5.1.1
+ resolution: "get-port@npm:5.1.1"
+ checksum: 10/0162663ffe5c09e748cd79d97b74cd70e5a5c84b760a475ce5767b357fb2a57cb821cee412d646aa8a156ed39b78aab88974eddaa9e5ee926173c036c0713787
languageName: node
linkType: hard
@@ -5011,13 +6770,6 @@ __metadata:
languageName: node
linkType: hard
-"get-stdin@npm:^9.0.0":
- version: 9.0.0
- resolution: "get-stdin@npm:9.0.0"
- checksum: 10/5972bc34d05932b45512c8e2d67b040f1c1ca8afb95c56cbc480985f2d761b7e37fe90dc8abd22527f062cc5639a6930ff346e9952ae4c11a2d4275869459594
- languageName: node
- linkType: hard
-
"get-stream@npm:^6.0.0":
version: 6.0.1
resolution: "get-stream@npm:6.0.1"
@@ -5025,6 +6777,16 @@ __metadata:
languageName: node
linkType: hard
+"get-stream@npm:^9.0.0":
+ version: 9.0.1
+ resolution: "get-stream@npm:9.0.1"
+ dependencies:
+ "@sec-ant/readable-stream": "npm:^0.4.1"
+ is-stream: "npm:^4.0.1"
+ checksum: 10/ce56e6db6bcd29ca9027b0546af035c3e93dcd154ca456b54c298901eb0e5b2ce799c5d727341a100c99e14c523f267f1205f46f153f7b75b1f4da6d98a21c5e
+ languageName: node
+ linkType: hard
+
"get-symbol-description@npm:^1.0.0":
version: 1.0.0
resolution: "get-symbol-description@npm:1.0.0"
@@ -5044,63 +6806,39 @@ __metadata:
languageName: node
linkType: hard
-"gettext-parser@npm:^4.0.3":
- version: 4.2.0
- resolution: "gettext-parser@npm:4.2.0"
- dependencies:
- content-type: "npm:^1.0.4"
- encoding: "npm:^0.1.13"
- readable-stream: "npm:^3.6.0"
- safe-buffer: "npm:^5.2.1"
- checksum: 10/44f97cc4216da7e23f344b947048bb46d7349e1127f01cd976e5250249588f966d1cbe3b59f5a228f0650259140c90cc41e1d858815f7913c77f887689611fa6
- languageName: node
- linkType: hard
-
-"git-raw-commits@npm:^3.0.0":
- version: 3.0.0
- resolution: "git-raw-commits@npm:3.0.0"
- dependencies:
- dargs: "npm:^7.0.0"
- meow: "npm:^8.1.2"
- split2: "npm:^3.2.2"
- bin:
- git-raw-commits: cli.js
- checksum: 10/198892f307829d22fc8ec1c9b4a63876a1fde847763857bb74bd1b04c6f6bc0d7464340c25d0f34fd0fb395759363aa1f8ce324357027320d80523bf234676ab
- languageName: node
- linkType: hard
-
-"git-remote-origin-url@npm:^2.0.0":
- version: 2.0.0
- resolution: "git-remote-origin-url@npm:2.0.0"
+"gettext-converter@npm:^1.3.0":
+ version: 1.3.1
+ resolution: "gettext-converter@npm:1.3.1"
dependencies:
- gitconfiglocal: "npm:^1.0.0"
- pify: "npm:^2.3.0"
- checksum: 10/85263a09c044b5f4fe2acc45cbb3c5331ab2bd4484bb53dfe7f3dd593a4bf90a9786a2e00b9884524331f50b3da18e8c924f01c2944087fc7f342282c4437b73
+ arrify: "npm:^2.0.1"
+ content-type: "npm:1.0.5"
+ encoding: "npm:0.1.13"
+ checksum: 10/b5666122cf88805eb43a460e08ba78db7d431088df482e2fc0b90c6d051e823b613fc72756ccd1e7915b9d3d365a368a27d831f11bd15060d1d671b913aa92da
languageName: node
linkType: hard
-"git-semver-tags@npm:^5.0.0, git-semver-tags@npm:^5.0.1":
- version: 5.0.1
- resolution: "git-semver-tags@npm:5.0.1"
+"gettext-parser@npm:^8.0.0":
+ version: 8.0.0
+ resolution: "gettext-parser@npm:8.0.0"
dependencies:
- meow: "npm:^8.1.2"
- semver: "npm:^7.0.0"
- bin:
- git-semver-tags: cli.js
- checksum: 10/056e34a3dd0d91ca737225d360e46a0330c92f1508c38ad93965c3a204e5c7bfe7746f1f7e7d6b456bd61245c770fd0755148823bf852eed71099d094bee6cc2
+ content-type: "npm:^1.0.5"
+ encoding: "npm:^0.1.13"
+ readable-stream: "npm:^4.5.2"
+ safe-buffer: "npm:^5.2.1"
+ checksum: 10/e22f42241f9fea3d8379879792a97e705b0bb31539246ee1bec024f247a6e8940c4feb66b24ab6412fa0cd778263c32a1d055992f3a2bc6983d5d191712c128f
languageName: node
linkType: hard
-"gitconfiglocal@npm:^1.0.0":
- version: 1.0.0
- resolution: "gitconfiglocal@npm:1.0.0"
+"glob-parent@npm:^6.0.2":
+ version: 6.0.2
+ resolution: "glob-parent@npm:6.0.2"
dependencies:
- ini: "npm:^1.3.2"
- checksum: 10/e6d2764c15bbab6d1d1000d1181bb907f6b3796bb04f63614dba571b18369e0ecb1beaf27ce8da5b24307ef607e3a5f262a67cb9575510b9446aac697d421beb
+ is-glob: "npm:^4.0.3"
+ checksum: 10/c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8
languageName: node
linkType: hard
-"glob-parent@npm:^5.1.2":
+"glob-parent@npm:~5.1.2":
version: 5.1.2
resolution: "glob-parent@npm:5.1.2"
dependencies:
@@ -5109,32 +6847,16 @@ __metadata:
languageName: node
linkType: hard
-"glob-parent@npm:^6.0.2":
- version: 6.0.2
- resolution: "glob-parent@npm:6.0.2"
- dependencies:
- is-glob: "npm:^4.0.3"
- checksum: 10/c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8
- languageName: node
- linkType: hard
-
-"glob-stream@npm:^8.0.0":
- version: 8.0.0
- resolution: "glob-stream@npm:8.0.0"
- dependencies:
- "@gulpjs/to-absolute-glob": "npm:^4.0.0"
- anymatch: "npm:^3.1.3"
- fastq: "npm:^1.13.0"
- glob-parent: "npm:^6.0.2"
- is-glob: "npm:^4.0.3"
- is-negated-glob: "npm:^1.0.0"
- normalize-path: "npm:^3.0.0"
- streamx: "npm:^2.12.5"
- checksum: 10/b1d18b6fd49086ff02e031f03e3debac747047d304b349a6dced3b7944c665344ef63496363f483acc7c6afcd6ebfb11af1652824f2c370d83c0f3905d5c67e0
+"glob-to-regex.js@npm:^1.0.0, glob-to-regex.js@npm:^1.0.1":
+ version: 1.2.0
+ resolution: "glob-to-regex.js@npm:1.2.0"
+ peerDependencies:
+ tslib: 2
+ checksum: 10/13034e642db479d75448bdd9f37de7451bef2879c394bfe3f8df6588e0479893e94059eaee77cdf50dce675607fb2395c132dcca0c9a559a6192e89b2ad0f134
languageName: node
linkType: hard
-"glob@npm:^10.3.10":
+"glob@npm:^10.5.0":
version: 10.5.0
resolution: "glob@npm:10.5.0"
dependencies:
@@ -5150,14 +6872,14 @@ __metadata:
languageName: node
linkType: hard
-"glob@npm:^13.0.0, glob@npm:^13.0.1":
- version: 13.0.1
- resolution: "glob@npm:13.0.1"
+"glob@npm:^13.0.0, glob@npm:^13.0.6":
+ version: 13.0.6
+ resolution: "glob@npm:13.0.6"
dependencies:
- minimatch: "npm:^10.1.2"
- minipass: "npm:^7.1.2"
- path-scurry: "npm:^2.0.0"
- checksum: 10/465e8cc269ab88d7415a3906cdc0f4543a2ae54df99207204af5bc28a944396d8d893822f546a8056a78ec714e608ab4f3502532c4d6b9cc5e113adf0fe5109e
+ minimatch: "npm:^10.2.2"
+ minipass: "npm:^7.1.3"
+ path-scurry: "npm:^2.0.2"
+ checksum: 10/201ad69e5f0aa74e1d8c00a481581f8b8c804b6a4fbfabeeb8541f5d756932800331daeba99b58fb9e4cd67e12ba5a7eba5b82fb476691588418060b84353214
languageName: node
linkType: hard
@@ -5198,6 +6920,13 @@ __metadata:
languageName: node
linkType: hard
+"globrex@npm:^0.1.2":
+ version: 0.1.2
+ resolution: "globrex@npm:0.1.2"
+ checksum: 10/81ce62ee6f800d823d6b7da7687f841676d60ee8f51f934ddd862e4057316d26665c4edc0358d4340a923ac00a514f8b67c787e28fe693aae16350f4e60d55e9
+ languageName: node
+ linkType: hard
+
"gopd@npm:^1.0.1, gopd@npm:^1.2.0":
version: 1.2.0
resolution: "gopd@npm:1.2.0"
@@ -5205,30 +6934,30 @@ __metadata:
languageName: node
linkType: hard
-"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.2.10, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.8":
+"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6":
version: 4.2.11
resolution: "graceful-fs@npm:4.2.11"
checksum: 10/bf152d0ed1dc159239db1ba1f74fdbc40cb02f626770dcd5815c427ce0688c2635a06ed69af364396da4636d0408fcf7d4afdf7881724c3307e46aff30ca49e2
languageName: node
linkType: hard
-"graphemer@npm:^1.4.0":
- version: 1.4.0
- resolution: "graphemer@npm:1.4.0"
- checksum: 10/6dd60dba97007b21e3a829fab3f771803cc1292977fe610e240ea72afd67e5690ac9eeaafc4a99710e78962e5936ab5a460787c2a1180f1cb0ccfac37d29f897
+"gzip-size@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "gzip-size@npm:6.0.0"
+ dependencies:
+ duplexer: "npm:^0.1.2"
+ checksum: 10/2df97f359696ad154fc171dcb55bc883fe6e833bca7a65e457b9358f3cb6312405ed70a8da24a77c1baac0639906cd52358dc0ce2ec1a937eaa631b934c94194
languageName: node
linkType: hard
-"gulp-sort@npm:^2.0.0":
- version: 2.0.0
- resolution: "gulp-sort@npm:2.0.0"
- dependencies:
- through2: "npm:^2.0.1"
- checksum: 10/8645d80b26990290e8623ccf38420e319a4ea67b64ac3e4f2b5de6c20b9006973001fd989dfe0fe3b2560044d3dfbc005685126826536e01718a2628aa45d0c5
+"handle-thing@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "handle-thing@npm:2.0.1"
+ checksum: 10/441ec98b07f26819c70c702f6c874088eebeb551b242fe8fae4eab325746b82bf84ae7a1f6419547698accb3941fa26806c5f5f93c50e19f90e499065a711d61
languageName: node
linkType: hard
-"handlebars@npm:^4.7.7, handlebars@npm:^4.7.8":
+"handlebars@npm:^4.7.9":
version: 4.7.9
resolution: "handlebars@npm:4.7.9"
dependencies:
@@ -5246,13 +6975,6 @@ __metadata:
languageName: node
linkType: hard
-"hard-rejection@npm:^2.1.0":
- version: 2.1.0
- resolution: "hard-rejection@npm:2.1.0"
- checksum: 10/7baaf80a0c7fff4ca79687b4060113f1529589852152fa935e6787a2bc96211e784ad4588fb3048136ff8ffc9dfcf3ae385314a5b24db32de20bea0d1597f9dc
- languageName: node
- linkType: hard
-
"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2":
version: 1.0.2
resolution: "has-bigints@npm:1.0.2"
@@ -5347,12 +7069,12 @@ __metadata:
languageName: node
linkType: hard
-"hasown@npm:^2.0.2":
- version: 2.0.2
- resolution: "hasown@npm:2.0.2"
+"hasown@npm:^2.0.2, hasown@npm:^2.0.3, hasown@npm:^2.0.4":
+ version: 2.0.4
+ resolution: "hasown@npm:2.0.4"
dependencies:
function-bind: "npm:^1.1.2"
- checksum: 10/7898a9c1788b2862cf0f9c345a6bec77ba4a0c0983c7f19d610c382343d4f98fa260686b225dfb1f88393a66679d2ec58ee310c1d6868c081eda7918f32cc70a
+ checksum: 10/13823863ae48161068b4c51606a3128451c66f14545a5169d667fe9fca168dcd38c27570c7a299e32ef844b8da3d55def7fe88602f8970d4311fb543ee88001a
languageName: node
linkType: hard
@@ -5374,15 +7096,6 @@ __metadata:
languageName: node
linkType: hard
-"hosted-git-info@npm:^4.0.0, hosted-git-info@npm:^4.0.1":
- version: 4.1.0
- resolution: "hosted-git-info@npm:4.1.0"
- dependencies:
- lru-cache: "npm:^6.0.0"
- checksum: 10/4dc67022b7ecb12829966bd731fb9a5f14d351547aafc6520ef3c8e7211f4f0e69452d24e29eae3d9b17df924d660052e53d8ca321cf3008418fb7e6c7c47d6f
- languageName: node
- linkType: hard
-
"hosted-git-info@npm:^7.0.0":
version: 7.0.2
resolution: "hosted-git-info@npm:7.0.2"
@@ -5392,13 +7105,46 @@ __metadata:
languageName: node
linkType: hard
-"html-escaper@npm:^2.0.0":
+"hpack.js@npm:^2.1.6":
+ version: 2.1.6
+ resolution: "hpack.js@npm:2.1.6"
+ dependencies:
+ inherits: "npm:^2.0.1"
+ obuf: "npm:^1.0.0"
+ readable-stream: "npm:^2.0.1"
+ wbuf: "npm:^1.1.0"
+ checksum: 10/6910e4b9d943a78fd8e84ac42729fdab9bd406789d6204ad160af9dc5aa4750fc01f208249bf7116c11dc0678207a387b4ade24e4b628b95385b251ceeeb719c
+ languageName: node
+ linkType: hard
+
+"html-escaper@npm:^2.0.0, html-escaper@npm:^2.0.2":
version: 2.0.2
resolution: "html-escaper@npm:2.0.2"
checksum: 10/034d74029dcca544a34fb6135e98d427acd73019796ffc17383eaa3ec2fe1c0471dcbbc8f8ed39e46e86d43ccd753a160631615e4048285e313569609b66d5b7
languageName: node
linkType: hard
+"html-parse-stringify@npm:^3.0.1":
+ version: 3.0.1
+ resolution: "html-parse-stringify@npm:3.0.1"
+ dependencies:
+ void-elements: "npm:3.1.0"
+ checksum: 10/8743b76cc50e46d1956c1ad879d18eb9613b0d2d81e24686d633f9f69bb26b84676f64a926973de793cca479997017a63219278476d617b6c42d68246d7c07fe
+ languageName: node
+ linkType: hard
+
+"htmlparser2@npm:10.0.0":
+ version: 10.0.0
+ resolution: "htmlparser2@npm:10.0.0"
+ dependencies:
+ domelementtype: "npm:^2.3.0"
+ domhandler: "npm:^5.0.3"
+ domutils: "npm:^3.2.1"
+ entities: "npm:^6.0.0"
+ checksum: 10/768870f0e020dca19dc45df206cb6ac466c5dba6566c8fca4ca880347eed409f9977028d08644ac516bca8628ac9c7ded5a3847dc3ee1c043f049abf9e817154
+ languageName: node
+ linkType: hard
+
"http-assert@npm:^1.3.0, http-assert@npm:^1.5.0":
version: 1.5.0
resolution: "http-assert@npm:1.5.0"
@@ -5416,6 +7162,13 @@ __metadata:
languageName: node
linkType: hard
+"http-deceiver@npm:^1.2.7":
+ version: 1.2.7
+ resolution: "http-deceiver@npm:1.2.7"
+ checksum: 10/9ae293b0acbfad6ed45d52c1f85f58ab062465872fd9079c80d78c6527634002d73c2a9d8c0296cc12d178a0b689bb5291d9979aad3ce71ab17a7517588adbf7
+ languageName: node
+ linkType: hard
+
"http-errors@npm:^1.6.3, http-errors@npm:^1.7.3, http-errors@npm:~1.8.0":
version: 1.8.1
resolution: "http-errors@npm:1.8.1"
@@ -5429,7 +7182,7 @@ __metadata:
languageName: node
linkType: hard
-"http-errors@npm:^2.0.0, http-errors@npm:^2.0.1, http-errors@npm:~2.0.1":
+"http-errors@npm:^2.0.0, http-errors@npm:^2.0.1, http-errors@npm:~2.0.0, http-errors@npm:~2.0.1":
version: 2.0.1
resolution: "http-errors@npm:2.0.1"
dependencies:
@@ -5463,6 +7216,13 @@ __metadata:
languageName: node
linkType: hard
+"http-parser-js@npm:>=0.5.1":
+ version: 0.5.10
+ resolution: "http-parser-js@npm:0.5.10"
+ checksum: 10/33c53b458cfdf7e43f1517f9bcb6bed1c614b1c7c5d65581a84304110eb9eb02a48f998c7504b8bee432ef4a8ec9318e7009406b506b28b5610fed516242b20a
+ languageName: node
+ linkType: hard
+
"http-proxy-agent@npm:^7.0.0":
version: 7.0.2
resolution: "http-proxy-agent@npm:7.0.2"
@@ -5473,6 +7233,35 @@ __metadata:
languageName: node
linkType: hard
+"http-proxy-middleware@npm:^2.0.9":
+ version: 2.0.10
+ resolution: "http-proxy-middleware@npm:2.0.10"
+ dependencies:
+ "@types/http-proxy": "npm:^1.17.8"
+ http-proxy: "npm:^1.18.1"
+ is-glob: "npm:^4.0.1"
+ is-plain-obj: "npm:^3.0.0"
+ micromatch: "npm:^4.0.2"
+ peerDependencies:
+ "@types/express": ^4.17.13
+ peerDependenciesMeta:
+ "@types/express":
+ optional: true
+ checksum: 10/efa8b5d4dec112fba5f6741df33a926818f87156f44dee425e653284c20844f3a9f2af88042a7d4ef297161479e1549302dea693bce23123fa2da07420fa2214
+ languageName: node
+ linkType: hard
+
+"http-proxy@npm:^1.18.1":
+ version: 1.18.1
+ resolution: "http-proxy@npm:1.18.1"
+ dependencies:
+ eventemitter3: "npm:^4.0.0"
+ follow-redirects: "npm:^1.0.0"
+ requires-port: "npm:^1.0.0"
+ checksum: 10/2489e98aba70adbfd8b9d41ed1ff43528be4598c88616c558b109a09eaffe4bb35e551b6c75ac42ed7d948bb7530a22a2be6ef4f0cecacb5927be139f4274594
+ languageName: node
+ linkType: hard
+
"https-browserify@npm:^1.0.0":
version: 1.0.0
resolution: "https-browserify@npm:1.0.0"
@@ -5480,6 +7269,16 @@ __metadata:
languageName: node
linkType: hard
+"https-proxy-agent@npm:^5.0.1":
+ version: 5.0.1
+ resolution: "https-proxy-agent@npm:5.0.1"
+ dependencies:
+ agent-base: "npm:6"
+ debug: "npm:4"
+ checksum: 10/f0dce7bdcac5e8eaa0be3c7368bb8836ed010fb5b6349ffb412b172a203efe8f807d9a6681319105ea1b6901e1972c7b5ea899672a7b9aad58309f766dcbe0df
+ languageName: node
+ linkType: hard
+
"https-proxy-agent@npm:^7.0.1":
version: 7.0.6
resolution: "https-proxy-agent@npm:7.0.6"
@@ -5497,6 +7296,13 @@ __metadata:
languageName: node
linkType: hard
+"human-signals@npm:^8.0.1":
+ version: 8.0.1
+ resolution: "human-signals@npm:8.0.1"
+ checksum: 10/903389a018b16f330c5e0f6e8b76d592c79552152ea892f249e5290e71c790f5722dc9b740fedd4bdef30566754a69012aaed97a6a528da0d417fad990a6f515
+ languageName: node
+ linkType: hard
+
"humanize-ms@npm:^1.2.1":
version: 1.2.1
resolution: "humanize-ms@npm:1.2.1"
@@ -5506,70 +7312,83 @@ __metadata:
languageName: node
linkType: hard
-"i18next-conv@npm:^10.2.0":
- version: 10.2.0
- resolution: "i18next-conv@npm:10.2.0"
- dependencies:
- arrify: "npm:^2.0.1"
- chalk: "npm:^4.0.0"
- commander: "npm:^5.1.0"
- gettext-parser: "npm:^4.0.3"
- mkdirp: "npm:^1.0.4"
- node-gettext: "npm:^3.0.0"
+"hyperdyperid@npm:^1.2.0":
+ version: 1.2.0
+ resolution: "hyperdyperid@npm:1.2.0"
+ checksum: 10/64abb5568ff17aa08ac0175ae55e46e22831c5552be98acdd1692081db0209f36fff58b31432017b4e1772c178962676a2cc3c54e4d5d7f020d7710cec7ad7a6
+ languageName: node
+ linkType: hard
+
+"i18next-cli@npm:^1.66.2":
+ version: 1.66.2
+ resolution: "i18next-cli@npm:1.66.2"
+ dependencies:
+ "@croct/json5-parser": "npm:^0.2.2"
+ "@swc/core": "npm:^1.15.41"
+ chokidar: "npm:^5.0.0"
+ commander: "npm:^14.0.3"
+ execa: "npm:^9.6.1"
+ glob: "npm:^13.0.6"
+ i18next: "npm:^26.3.1"
+ i18next-resources-for-ts: "npm:^2.1.0"
+ inquirer: "npm:^14.0.2"
+ jiti: "npm:^2.7.0"
+ jsonc-parser: "npm:^3.3.1"
+ magic-string: "npm:^0.30.21"
+ minimatch: "npm:^10.2.5"
+ ora: "npm:^9.4.0"
+ react: "npm:^19.2.7"
+ react-i18next: "npm:^17.0.8"
+ yaml: "npm:^2.9.0"
bin:
- i18next-conv: bin/index.js
- checksum: 10/0aaf5ee54560c1fd4a6593bc1a7cc75c04586de66a22ce35a4831c4f750f545c3dffa017c8ef9490ac1c4bed720d95330ac6b7fabb36fe0eb73630e0069a4187
+ i18next-cli: dist/esm/cli.js
+ checksum: 10/2e3e39d19d76227578e098c04f2097b168008bb98bed11eea923e713e81a8f2202b7380ef22187b2e058e3f995bf36df9a0bc448bf9820882aea569b967a4359
languageName: node
linkType: hard
-"i18next-scanner@npm:^4.6.0":
- version: 4.6.0
- resolution: "i18next-scanner@npm:4.6.0"
+"i18next-conv@npm:^16.0.0":
+ version: 16.0.0
+ resolution: "i18next-conv@npm:16.0.0"
dependencies:
- acorn: "npm:^8.0.4"
- acorn-jsx: "npm:^5.3.1"
- acorn-stage3: "npm:^4.0.0"
- acorn-walk: "npm:^8.0.0"
- chalk: "npm:^4.1.0"
- clone-deep: "npm:^4.0.0"
- commander: "npm:^9.0.0"
- deepmerge: "npm:^4.0.0"
- ensure-type: "npm:^1.5.0"
- eol: "npm:^0.9.1"
- esprima-next: "npm:^5.7.0"
- gulp-sort: "npm:^2.0.0"
- i18next: "npm:*"
- lodash: "npm:^4.0.0"
- parse5: "npm:^6.0.0"
- sortobject: "npm:^4.0.0"
- through2: "npm:^4.0.0"
- vinyl: "npm:^3.0.0"
- vinyl-fs: "npm:^4.0.0"
+ "@postalsys/gettext": "npm:^4.1.0"
+ colorette: "npm:^2.0.20"
+ commander: "npm:^14.0.2"
+ gettext-converter: "npm:^1.3.0"
+ gettext-parser: "npm:^8.0.0"
+ p-from-callback: "npm:^2.0.0"
bin:
- i18next-scanner: bin/cli.js
- checksum: 10/51673170adad6a664bd9b9757dcc54a6fffe7f1e4338de3dcc5de1fbc8d8af87223ece393f9d7c2c579c3efe24525203a8d8f60c2107adfe3d1e3dced92bd21c
+ i18next-conv: bin/index.js
+ checksum: 10/f05114e775c8e4d72184f016f94ebba28576c46bbb72c8c75c2b2d64fee25ef8b78987041899ae2e61ebde043e8cb9c3a3accc507ce5e920f6d24a7d3a000cb3
languageName: node
linkType: hard
-"i18next@npm:*":
- version: 23.5.1
- resolution: "i18next@npm:23.5.1"
+"i18next-resources-for-ts@npm:^2.1.0":
+ version: 2.1.0
+ resolution: "i18next-resources-for-ts@npm:2.1.0"
dependencies:
- "@babel/runtime": "npm:^7.22.5"
- checksum: 10/38e62d582b0f67eb2eee4f079c9cd512246496f2fb970f50a0be26c7c5e6ac5e772de9763ac1943919ecd816b2c0375f4b2071c67b1485a6a980c4d37348408f
+ "@babel/runtime": "npm:^7.28.6"
+ "@swc/core": "npm:^1.15.18"
+ chokidar: "npm:^5.0.0"
+ yaml: "npm:^2.8.2"
+ bin:
+ i18next-resources-for-ts: bin/i18next-resources-for-ts.js
+ checksum: 10/f873bf58b0e4c08ad3be2ff8159919ebd42a7e9e2c4d39649eb6e337522f4611fa9a6a2dea320c5350fad5b72abc689c9b7285c1611b007bcaaf5bc1b22d205a
languageName: node
linkType: hard
-"i18next@npm:^21.10.0":
- version: 21.10.0
- resolution: "i18next@npm:21.10.0"
- dependencies:
- "@babel/runtime": "npm:^7.17.2"
- checksum: 10/f0d2ab888627c24b00068461eeedad33437970396539b663a4916e7ba279f6bb91e34221ee9c3608079b9d320a0cb02e9f51458f5c47c809c45676900db94abf
+"i18next@npm:^26.3.1, i18next@npm:^26.3.6":
+ version: 26.3.6
+ resolution: "i18next@npm:26.3.6"
+ peerDependencies:
+ typescript: ^5 || ^6 || ^7
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ checksum: 10/529f1dbfae6b0fe98d997af98af5d6d0a0e27ddf5b91b81c5dfccad94e3a66dceeba2d1b7327f0045085bc4d552abbf4a1efbfadd4bbb98d13a54e3310eae428
languageName: node
linkType: hard
-"iconv-lite@npm:^0.6.2, iconv-lite@npm:^0.6.3":
+"iconv-lite@npm:^0.6.2":
version: 0.6.3
resolution: "iconv-lite@npm:0.6.3"
dependencies:
@@ -5578,12 +7397,12 @@ __metadata:
languageName: node
linkType: hard
-"iconv-lite@npm:^0.7.0":
- version: 0.7.0
- resolution: "iconv-lite@npm:0.7.0"
+"iconv-lite@npm:^0.7.0, iconv-lite@npm:^0.7.2":
+ version: 0.7.2
+ resolution: "iconv-lite@npm:0.7.2"
dependencies:
safer-buffer: "npm:>= 2.1.2 < 3.0.0"
- checksum: 10/5bfc897fedfb7e29991ae5ef1c061ed4f864005f8c6d61ef34aba6a3885c04bd207b278c0642b041383aeac2d11645b4319d0ca7b863b0be4be0cde1c9238ca7
+ checksum: 10/24c937b532f868e938386b62410b303b7c767ce3d08dc2829cbe59464d5a26ef86ae5ad1af6b34eec43ddfea39e7d101638644b0178d67262fa87015d59f983a
languageName: node
linkType: hard
@@ -5603,13 +7422,27 @@ __metadata:
languageName: node
linkType: hard
-"ignore@npm:^5.2.0, ignore@npm:^5.3.1, ignore@npm:^5.3.2":
+"ignore-loader@npm:^0.1.2":
+ version: 0.1.2
+ resolution: "ignore-loader@npm:0.1.2"
+ checksum: 10/26b5f81b24e59c575d5314e1416c4ae21fb88e65b3c60c90581288ef925fcaa2b39e7f8f96cd449e488c217337d5240fba5a916f9aec073ec04495d7a5716ac4
+ languageName: node
+ linkType: hard
+
+"ignore@npm:^5.2.0, ignore@npm:^5.3.2":
version: 5.3.2
resolution: "ignore@npm:5.3.2"
checksum: 10/cceb6a457000f8f6a50e1196429750d782afce5680dd878aa4221bd79972d68b3a55b4b1458fc682be978f4d3c6a249046aa0880637367216444ab7b014cfc98
languageName: node
linkType: hard
+"ignore@npm:^7.0.5":
+ version: 7.0.5
+ resolution: "ignore@npm:7.0.5"
+ checksum: 10/f134b96a4de0af419196f52c529d5c6120c4456ff8a6b5a14ceaaa399f883e15d58d2ce651c9b69b9388491d4669dda47285d307e827de9304a53a1824801bc6
+ languageName: node
+ linkType: hard
+
"import-fresh@npm:^3.2.1":
version: 3.3.0
resolution: "import-fresh@npm:3.3.0"
@@ -5620,15 +7453,15 @@ __metadata:
languageName: node
linkType: hard
-"import-in-the-middle@npm:1.14.4":
- version: 1.14.4
- resolution: "import-in-the-middle@npm:1.14.4"
+"import-in-the-middle@npm:1.15.0":
+ version: 1.15.0
+ resolution: "import-in-the-middle@npm:1.15.0"
dependencies:
acorn: "npm:^8.14.0"
acorn-import-attributes: "npm:^1.9.5"
cjs-module-lexer: "npm:^1.2.2"
module-details-from-path: "npm:^1.0.3"
- checksum: 10/96b657cfe33dda86cc1160446039b1ff115154a0242ff26b275177621e12f88ba2b23df5f15e1fa8e5cba57ee8f8d02d353df0d2ec1b08d3a3503e3e4e987ab3
+ checksum: 10/a1ff65ea557ffe67e63dd67b411255fedd8622b324ff22ba99f4436b8fcf74da0333e62b4e8142f447e5db64a42ec9e65f926d50fa55e89c4e4d64626d8cf5f8
languageName: node
linkType: hard
@@ -5651,13 +7484,6 @@ __metadata:
languageName: node
linkType: hard
-"indent-string@npm:^4.0.0":
- version: 4.0.0
- resolution: "indent-string@npm:4.0.0"
- checksum: 10/cd3f5cbc9ca2d624c6a1f53f12e6b341659aba0e2d3254ae2b4464aaea8b4294cdb09616abbc59458f980531f2429784ed6a420d48d245bcad0811980c9efae9
- languageName: node
- linkType: hard
-
"index-to-position@npm:^0.1.2":
version: 0.1.2
resolution: "index-to-position@npm:0.1.2"
@@ -5710,10 +7536,22 @@ __metadata:
languageName: node
linkType: hard
-"ini@npm:^1.3.2":
- version: 1.3.8
- resolution: "ini@npm:1.3.8"
- checksum: 10/314ae176e8d4deb3def56106da8002b462221c174ddb7ce0c49ee72c8cd1f9044f7b10cc555a7d8850982c3b9ca96fc212122749f5234bc2b6fb05fb942ed566
+"inquirer@npm:^14.0.2":
+ version: 14.0.2
+ resolution: "inquirer@npm:14.0.2"
+ dependencies:
+ "@inquirer/ansi": "npm:^2.0.7"
+ "@inquirer/core": "npm:^11.2.1"
+ "@inquirer/prompts": "npm:^8.5.2"
+ "@inquirer/type": "npm:^4.0.7"
+ mute-stream: "npm:^3.0.0"
+ run-async: "npm:^4.0.6"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10/0f2cf1687f7f8248a6d68e3025d8ef8382ac232765ad44f570f9802a526da8992761f36a3b063e03f55fbbaf0e7b988567f5e504b7be3126745b28ebf4d8d5fd
languageName: node
linkType: hard
@@ -5735,6 +7573,20 @@ __metadata:
languageName: node
linkType: hard
+"ipaddr.js@npm:1.9.1":
+ version: 1.9.1
+ resolution: "ipaddr.js@npm:1.9.1"
+ checksum: 10/864d0cced0c0832700e9621913a6429ccdc67f37c1bd78fb8c6789fff35c9d167cb329134acad2290497a53336813ab4798d2794fd675d5eb33b5fdf0982b9ca
+ languageName: node
+ linkType: hard
+
+"ipaddr.js@npm:^2.1.0":
+ version: 2.4.0
+ resolution: "ipaddr.js@npm:2.4.0"
+ checksum: 10/e29cd15cd1f3c177f1671a74ed5dc2d7908088294850a7dbc000969a370cf02d6cdd81f8ab35a4fb0397247cd93999528eb4506277cd7db52fa2a487015207cf
+ languageName: node
+ linkType: hard
+
"is-arguments@npm:^1.0.4":
version: 1.1.1
resolution: "is-arguments@npm:1.1.1"
@@ -5772,6 +7624,15 @@ __metadata:
languageName: node
linkType: hard
+"is-binary-path@npm:~2.1.0":
+ version: 2.1.0
+ resolution: "is-binary-path@npm:2.1.0"
+ dependencies:
+ binary-extensions: "npm:^2.0.0"
+ checksum: 10/078e51b4f956c2c5fd2b26bb2672c3ccf7e1faff38e0ebdba45612265f4e3d9fc3127a1fa8370bbf09eab61339203c3d3b7af5662cbf8be4030f8fac37745b0e
+ languageName: node
+ linkType: hard
+
"is-boolean-object@npm:^1.1.0":
version: 1.1.2
resolution: "is-boolean-object@npm:1.1.2"
@@ -5789,12 +7650,12 @@ __metadata:
languageName: node
linkType: hard
-"is-core-module@npm:^2.13.0, is-core-module@npm:^2.5.0":
- version: 2.13.0
- resolution: "is-core-module@npm:2.13.0"
+"is-core-module@npm:^2.16.1":
+ version: 2.16.2
+ resolution: "is-core-module@npm:2.16.2"
dependencies:
- has: "npm:^1.0.3"
- checksum: 10/55ccb5ccd208a1e088027065ee6438a99367e4c31c366b52fbaeac8fa23111cd17852111836d904da604801b3286d38d3d1ffa6cd7400231af8587f021099dc6
+ hasown: "npm:^2.0.3"
+ checksum: 10/6ee7535d82bbe457685799c5f145daf4b7c6be3afbd8e90788429d557f663d6dee72a8e4b9a45d0d756c243fcb5028095999243df090e5f04c02b153786bc8c6
languageName: node
linkType: hard
@@ -5853,7 +7714,7 @@ __metadata:
languageName: node
linkType: hard
-"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3":
+"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1":
version: 4.0.3
resolution: "is-glob@npm:4.0.3"
dependencies:
@@ -5862,6 +7723,13 @@ __metadata:
languageName: node
linkType: hard
+"is-in-ssh@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "is-in-ssh@npm:1.0.0"
+ checksum: 10/d55cb39afdbca0cdc94cd493da7819c00d35048ea04fc1624aabde6e0c86aa6b91ddb38b2baf73c4b5d53cc8fbf1a8dfbf2e315594a808474b751ffb6b0d3e58
+ languageName: node
+ linkType: hard
+
"is-inside-container@npm:^1.0.0":
version: 1.0.0
resolution: "is-inside-container@npm:1.0.0"
@@ -5882,6 +7750,13 @@ __metadata:
languageName: node
linkType: hard
+"is-interactive@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "is-interactive@npm:2.0.0"
+ checksum: 10/e8d52ad490bed7ae665032c7675ec07732bbfe25808b0efbc4d5a76b1a1f01c165f332775c63e25e9a03d319ebb6b24f571a9e902669fc1e40b0a60b5be6e26c
+ languageName: node
+ linkType: hard
+
"is-nan@npm:^1.3.2":
version: 1.3.2
resolution: "is-nan@npm:1.3.2"
@@ -5892,13 +7767,6 @@ __metadata:
languageName: node
linkType: hard
-"is-negated-glob@npm:^1.0.0":
- version: 1.0.0
- resolution: "is-negated-glob@npm:1.0.0"
- checksum: 10/752cb846d71403d0a26389d1f56f8e2ffdb110e994dffe41ebacd1ff4953ee1dc8e71438a00a4e398355113a755f05fc91c73da15541a11d2f080f6b39030d91
- languageName: node
- linkType: hard
-
"is-negative-zero@npm:^2.0.2":
version: 2.0.2
resolution: "is-negative-zero@npm:2.0.2"
@@ -5906,6 +7774,13 @@ __metadata:
languageName: node
linkType: hard
+"is-network-error@npm:^1.0.0":
+ version: 1.3.2
+ resolution: "is-network-error@npm:1.3.2"
+ checksum: 10/6d5c0663f476acf7fd5894b5bdce14284aec6b595ad34484d430249b736372e46c345249fd1688bddb2c1380d72c28741838926d1d078264e37e779e970f9d93
+ languageName: node
+ linkType: hard
+
"is-number-object@npm:^1.0.4":
version: 1.0.7
resolution: "is-number-object@npm:1.0.7"
@@ -5922,17 +7797,17 @@ __metadata:
languageName: node
linkType: hard
-"is-obj@npm:^2.0.0":
- version: 2.0.0
- resolution: "is-obj@npm:2.0.0"
- checksum: 10/c9916ac8f4621962a42f5e80e7ffdb1d79a3fab7456ceaeea394cd9e0858d04f985a9ace45be44433bf605673c8be8810540fe4cc7f4266fc7526ced95af5a08
+"is-plain-obj@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "is-plain-obj@npm:3.0.0"
+ checksum: 10/a6ebdf8e12ab73f33530641972a72a4b8aed6df04f762070d823808303e4f76d87d5ea5bd76f96a7bbe83d93f04ac7764429c29413bd9049853a69cb630fb21c
languageName: node
linkType: hard
-"is-plain-obj@npm:^1.1.0":
- version: 1.1.0
- resolution: "is-plain-obj@npm:1.1.0"
- checksum: 10/0ee04807797aad50859652a7467481816cbb57e5cc97d813a7dcd8915da8195dc68c436010bf39d195226cde6a2d352f4b815f16f26b7bf486a5754290629931
+"is-plain-obj@npm:^4.1.0":
+ version: 4.1.0
+ resolution: "is-plain-obj@npm:4.1.0"
+ checksum: 10/6dc45da70d04a81f35c9310971e78a6a3c7a63547ef782e3a07ee3674695081b6ca4e977fbb8efc48dae3375e0b34558d2bcd722aec9bddfa2d7db5b041be8ce
languageName: node
linkType: hard
@@ -5985,6 +7860,13 @@ __metadata:
languageName: node
linkType: hard
+"is-stream@npm:^4.0.1":
+ version: 4.0.1
+ resolution: "is-stream@npm:4.0.1"
+ checksum: 10/cbea3f1fc271b21ceb228819d0c12a0965a02b57f39423925f99530b4eb86935235f258f06310b67cd02b2d10b49e9a0998f5ececf110ab7d3760bae4055ad23
+ languageName: node
+ linkType: hard
+
"is-string@npm:^1.0.5, is-string@npm:^1.0.7":
version: 1.0.7
resolution: "is-string@npm:1.0.7"
@@ -6003,15 +7885,6 @@ __metadata:
languageName: node
linkType: hard
-"is-text-path@npm:^1.0.1":
- version: 1.0.1
- resolution: "is-text-path@npm:1.0.1"
- dependencies:
- text-extensions: "npm:^1.0.0"
- checksum: 10/fb5d78752c22b3f73a7c9540768f765ffcfa38c9e421e2b9af869565307fa1ae5e3d3a2ba016a43549742856846566d327da406e94a5846ec838a288b1704fd2
- languageName: node
- linkType: hard
-
"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.12, is-typed-array@npm:^1.1.14, is-typed-array@npm:^1.1.3, is-typed-array@npm:^1.1.9":
version: 1.1.15
resolution: "is-typed-array@npm:1.1.15"
@@ -6021,10 +7894,17 @@ __metadata:
languageName: node
linkType: hard
-"is-valid-glob@npm:^1.0.0":
- version: 1.0.0
- resolution: "is-valid-glob@npm:1.0.0"
- checksum: 10/0155951e89291d405cbb2ff4e25a38ee7a88bc70b05f246c25d31a1d09f13d4207377e5860f67443bbda8e3e353da37047b60e586bd9c97a39c9301c30b67acb
+"is-unicode-supported@npm:^2.0.0, is-unicode-supported@npm:^2.1.0":
+ version: 2.1.0
+ resolution: "is-unicode-supported@npm:2.1.0"
+ checksum: 10/f254e3da6b0ab1a57a94f7273a7798dd35d1d45b227759f600d0fa9d5649f9c07fa8d3c8a6360b0e376adf916d151ec24fc9a50c5295c58bae7ca54a76a063f9
+ languageName: node
+ linkType: hard
+
+"is-unsafe@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "is-unsafe@npm:1.0.1"
+ checksum: 10/971d05c69a742f866e4f257e4008ee3a9fb84ebf81141352211698416e1cf52aa03bcda54e3a5c2f25547f4b4cbb6d9e02c048a4daef5e7baea51f33089ddc9e
languageName: node
linkType: hard
@@ -6081,6 +7961,13 @@ __metadata:
languageName: node
linkType: hard
+"isomorphic-timers-promises@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "isomorphic-timers-promises@npm:1.0.1"
+ checksum: 10/2dabe397039081dbf30039f295333a7f9888b072dd0afa3aa7d8ba8f812a6db5efcbda0861a4be43ecfec207d56314ecf27150187b8d0f924a93103fa93eac73
+ languageName: node
+ linkType: hard
+
"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0":
version: 3.2.0
resolution: "istanbul-lib-coverage@npm:3.2.0"
@@ -6146,58 +8033,58 @@ __metadata:
languageName: node
linkType: hard
-"jest-changed-files@npm:30.2.0":
- version: 30.2.0
- resolution: "jest-changed-files@npm:30.2.0"
+"jest-changed-files@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-changed-files@npm:30.4.1"
dependencies:
execa: "npm:^5.1.1"
- jest-util: "npm:30.2.0"
+ jest-util: "npm:30.4.1"
p-limit: "npm:^3.1.0"
- checksum: 10/ff2275ed5839b88c12ffa66fdc5c17ba02d3e276be6b558bed92872c282d050c3fdd1a275a81187cbe35c16d6d40337b85838772836463c7a2fbd1cba9785ca0
+ checksum: 10/e566af0d6c53115edf34fd1d9bda3b857fcc6626bd032516a480b60ec208d515558eda1e693e76ef992633d71828a4c38a3e91a236142459855483cbd03ff4c4
languageName: node
linkType: hard
-"jest-circus@npm:30.2.0":
- version: 30.2.0
- resolution: "jest-circus@npm:30.2.0"
+"jest-circus@npm:30.4.2":
+ version: 30.4.2
+ resolution: "jest-circus@npm:30.4.2"
dependencies:
- "@jest/environment": "npm:30.2.0"
- "@jest/expect": "npm:30.2.0"
- "@jest/test-result": "npm:30.2.0"
- "@jest/types": "npm:30.2.0"
+ "@jest/environment": "npm:30.4.1"
+ "@jest/expect": "npm:30.4.1"
+ "@jest/test-result": "npm:30.4.1"
+ "@jest/types": "npm:30.4.1"
"@types/node": "npm:*"
chalk: "npm:^4.1.2"
co: "npm:^4.6.0"
dedent: "npm:^1.6.0"
is-generator-fn: "npm:^2.1.0"
- jest-each: "npm:30.2.0"
- jest-matcher-utils: "npm:30.2.0"
- jest-message-util: "npm:30.2.0"
- jest-runtime: "npm:30.2.0"
- jest-snapshot: "npm:30.2.0"
- jest-util: "npm:30.2.0"
+ jest-each: "npm:30.4.1"
+ jest-matcher-utils: "npm:30.4.1"
+ jest-message-util: "npm:30.4.1"
+ jest-runtime: "npm:30.4.2"
+ jest-snapshot: "npm:30.4.1"
+ jest-util: "npm:30.4.1"
p-limit: "npm:^3.1.0"
- pretty-format: "npm:30.2.0"
+ pretty-format: "npm:30.4.1"
pure-rand: "npm:^7.0.0"
slash: "npm:^3.0.0"
stack-utils: "npm:^2.0.6"
- checksum: 10/68bfc65d92385db1017643988215e4ff5af0b10bcab86fb749a063be6bb7d5eb556dc53dd21bedf833a19aa6ae1a781a8d27b2bea25562de02d294b3017435a9
+ checksum: 10/b210db2cd3ab595c6053deee4c11e7eb5ea293b9af16fc87021288125dd42e8d13fdc77be21eca71f1636c6fe104edc26e32d6e707168763e97b0d1718c11203
languageName: node
linkType: hard
-"jest-cli@npm:30.2.0":
- version: 30.2.0
- resolution: "jest-cli@npm:30.2.0"
+"jest-cli@npm:30.4.2":
+ version: 30.4.2
+ resolution: "jest-cli@npm:30.4.2"
dependencies:
- "@jest/core": "npm:30.2.0"
- "@jest/test-result": "npm:30.2.0"
- "@jest/types": "npm:30.2.0"
+ "@jest/core": "npm:30.4.2"
+ "@jest/test-result": "npm:30.4.1"
+ "@jest/types": "npm:30.4.1"
chalk: "npm:^4.1.2"
exit-x: "npm:^0.2.2"
import-local: "npm:^3.2.0"
- jest-config: "npm:30.2.0"
- jest-util: "npm:30.2.0"
- jest-validate: "npm:30.2.0"
+ jest-config: "npm:30.4.2"
+ jest-util: "npm:30.4.1"
+ jest-validate: "npm:30.4.1"
yargs: "npm:^17.7.2"
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
@@ -6206,36 +8093,35 @@ __metadata:
optional: true
bin:
jest: ./bin/jest.js
- checksum: 10/1cc8304f0e2608801c84cdecce9565a6178f668a6475aed3767a1d82cc539915f98e7404d7c387510313684011dc3095c15397d6725f73aac80fbd96c4155faa
+ checksum: 10/dd33f8ee6500298639d5ec4d5f641306d9876fa182042ee40e9c63c59bdf9a82dc46da5bf38fae0783f6ac874df7f7f099006b263022954cf494f8468dfe583c
languageName: node
linkType: hard
-"jest-config@npm:30.2.0":
- version: 30.2.0
- resolution: "jest-config@npm:30.2.0"
+"jest-config@npm:30.4.2":
+ version: 30.4.2
+ resolution: "jest-config@npm:30.4.2"
dependencies:
"@babel/core": "npm:^7.27.4"
"@jest/get-type": "npm:30.1.0"
- "@jest/pattern": "npm:30.0.1"
- "@jest/test-sequencer": "npm:30.2.0"
- "@jest/types": "npm:30.2.0"
- babel-jest: "npm:30.2.0"
+ "@jest/pattern": "npm:30.4.0"
+ "@jest/test-sequencer": "npm:30.4.1"
+ "@jest/types": "npm:30.4.1"
+ babel-jest: "npm:30.4.1"
chalk: "npm:^4.1.2"
ci-info: "npm:^4.2.0"
deepmerge: "npm:^4.3.1"
- glob: "npm:^10.3.10"
+ glob: "npm:^10.5.0"
graceful-fs: "npm:^4.2.11"
- jest-circus: "npm:30.2.0"
- jest-docblock: "npm:30.2.0"
- jest-environment-node: "npm:30.2.0"
- jest-regex-util: "npm:30.0.1"
- jest-resolve: "npm:30.2.0"
- jest-runner: "npm:30.2.0"
- jest-util: "npm:30.2.0"
- jest-validate: "npm:30.2.0"
- micromatch: "npm:^4.0.8"
+ jest-circus: "npm:30.4.2"
+ jest-docblock: "npm:30.4.0"
+ jest-environment-node: "npm:30.4.1"
+ jest-regex-util: "npm:30.4.0"
+ jest-resolve: "npm:30.4.1"
+ jest-runner: "npm:30.4.2"
+ jest-util: "npm:30.4.1"
+ jest-validate: "npm:30.4.1"
parse-json: "npm:^5.2.0"
- pretty-format: "npm:30.2.0"
+ pretty-format: "npm:30.4.1"
slash: "npm:^3.0.0"
strip-json-comments: "npm:^3.1.1"
peerDependencies:
@@ -6249,128 +8135,129 @@ __metadata:
optional: true
ts-node:
optional: true
- checksum: 10/296786b0a3d62de77e2f691f208d54ab541c1a73f87747d922eda643c6f25b89125ef3150170c07a6c8a316a30c15428e46237d499f688b0777f38de8a61ad16
+ checksum: 10/d37d923a5b3e815b73bbefe09c2f7fb092d6933f5f4ec0555fd9cacf97c58e8adb73fc4780a99e6a49e798444b1bb0097c9d5232feb1b8ffa31af589f9c02d9a
languageName: node
linkType: hard
-"jest-diff@npm:30.2.0":
- version: 30.2.0
- resolution: "jest-diff@npm:30.2.0"
+"jest-diff@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-diff@npm:30.4.1"
dependencies:
- "@jest/diff-sequences": "npm:30.0.1"
+ "@jest/diff-sequences": "npm:30.4.0"
"@jest/get-type": "npm:30.1.0"
chalk: "npm:^4.1.2"
- pretty-format: "npm:30.2.0"
- checksum: 10/1fb9e4fb7dff81814b4f69eaa7db28e184d62306a3a8ea2447d02ca53d2cfa771e83ede513f67ec5239dffacfaac32ff2b49866d211e4c7516f51c1fc06ede42
+ pretty-format: "npm:30.4.1"
+ checksum: 10/594212df96bf101170afdb7eebd188d6d7d27241cbdd18b61d95f1142a3c94ae3b270377d15e719fb3c5efe4458d32acba8ad13dd6230dd7d6917a9eebb32625
languageName: node
linkType: hard
-"jest-docblock@npm:30.2.0":
- version: 30.2.0
- resolution: "jest-docblock@npm:30.2.0"
+"jest-docblock@npm:30.4.0":
+ version: 30.4.0
+ resolution: "jest-docblock@npm:30.4.0"
dependencies:
detect-newline: "npm:^3.1.0"
- checksum: 10/e01a7d1193947ed0f9713c26bfc7852e51cb758cafec807e5665a0a8d582473a43778bee099f8aa5c70b2941963e5341f4b10bd86b036a4fa3bcec0f4c04e099
+ checksum: 10/0ee25351ef941e832e53d10e74f34b38941b8f5fe750584661f6c5a115771818b081b8e39830c49d152fd361af81c7800c2d3a3c3a0e2dc742f7bfdbb6b1baaa
languageName: node
linkType: hard
-"jest-each@npm:30.2.0":
- version: 30.2.0
- resolution: "jest-each@npm:30.2.0"
+"jest-each@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-each@npm:30.4.1"
dependencies:
"@jest/get-type": "npm:30.1.0"
- "@jest/types": "npm:30.2.0"
+ "@jest/types": "npm:30.4.1"
chalk: "npm:^4.1.2"
- jest-util: "npm:30.2.0"
- pretty-format: "npm:30.2.0"
- checksum: 10/f95e7dc1cef4b6a77899325702a214834ae25d01276cc31279654dc7e04f63c1925a37848dd16a0d16508c0fd3d182145f43c10af93952b7a689df3aeac198e9
+ jest-util: "npm:30.4.1"
+ pretty-format: "npm:30.4.1"
+ checksum: 10/077365c3fd0dc0d74aaa180fe4e3728533685413db58e7a30c8502d19a60a0b08259825d8aa36c569c8175a9d0cf901dd69c0a4eb63567c22c07bd0b566ddf89
languageName: node
linkType: hard
-"jest-environment-node@npm:30.2.0":
- version: 30.2.0
- resolution: "jest-environment-node@npm:30.2.0"
+"jest-environment-node@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-environment-node@npm:30.4.1"
dependencies:
- "@jest/environment": "npm:30.2.0"
- "@jest/fake-timers": "npm:30.2.0"
- "@jest/types": "npm:30.2.0"
+ "@jest/environment": "npm:30.4.1"
+ "@jest/fake-timers": "npm:30.4.1"
+ "@jest/types": "npm:30.4.1"
"@types/node": "npm:*"
- jest-mock: "npm:30.2.0"
- jest-util: "npm:30.2.0"
- jest-validate: "npm:30.2.0"
- checksum: 10/7918bfea7367bd3e12dbbc4ea5afb193b5c47e480a6d1382512f051e2f028458fc9f5ef2f6260737ad41a0b1894661790ff3aaf3cbb4148a33ce2ce7aec64847
+ jest-mock: "npm:30.4.1"
+ jest-util: "npm:30.4.1"
+ jest-validate: "npm:30.4.1"
+ checksum: 10/b93157061c6fa4b62808741bdda5fbc0372a9d2a3db844f0ffb819ed104b3b5c6ff73375d9f57c0d8485a0ad6aed07d4cfbb98aca985c38e1a29f64096b940bc
languageName: node
linkType: hard
-"jest-haste-map@npm:30.2.0":
- version: 30.2.0
- resolution: "jest-haste-map@npm:30.2.0"
+"jest-haste-map@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-haste-map@npm:30.4.1"
dependencies:
- "@jest/types": "npm:30.2.0"
+ "@jest/types": "npm:30.4.1"
"@types/node": "npm:*"
anymatch: "npm:^3.1.3"
fb-watchman: "npm:^2.0.2"
fsevents: "npm:^2.3.3"
graceful-fs: "npm:^4.2.11"
- jest-regex-util: "npm:30.0.1"
- jest-util: "npm:30.2.0"
- jest-worker: "npm:30.2.0"
- micromatch: "npm:^4.0.8"
+ jest-regex-util: "npm:30.4.0"
+ jest-util: "npm:30.4.1"
+ jest-worker: "npm:30.4.1"
+ picomatch: "npm:^4.0.3"
walker: "npm:^1.0.8"
dependenciesMeta:
fsevents:
optional: true
- checksum: 10/a88be6b0b672144aa30fe2d72e630d639c8d8729ee2cef84d0f830eac2005ac021cd8354f8ed8ecd74223f6a8b281efb62f466f5c9e01ed17650e38761051f4c
+ checksum: 10/d26404c7258d03fa423604191bca39707438ca1e62a9a471c92fcd468fa386cbdce2c50b3834fb830b25836e3eee34e3070d22b016b42f0ab626c157f5726eeb
languageName: node
linkType: hard
-"jest-leak-detector@npm:30.2.0":
- version: 30.2.0
- resolution: "jest-leak-detector@npm:30.2.0"
+"jest-leak-detector@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-leak-detector@npm:30.4.1"
dependencies:
"@jest/get-type": "npm:30.1.0"
- pretty-format: "npm:30.2.0"
- checksum: 10/c430d6ed7910b2174738fbdca4ea64cbfe805216414c0d143c1090148f1389fec99d0733c0a8ed0a86709c89b4a4085b4749ac3a2cbc7deaf3ca87457afd24fc
+ pretty-format: "npm:30.4.1"
+ checksum: 10/8c0945d1c73f6a2abde8660f7fc5693b344cd1f5fd66153c0c2d13007f8429486eb99ecf15ac68d3d4410534fd0fad1ed430c32a641cdac66e021dbd33204c9a
languageName: node
linkType: hard
-"jest-matcher-utils@npm:30.2.0":
- version: 30.2.0
- resolution: "jest-matcher-utils@npm:30.2.0"
+"jest-matcher-utils@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-matcher-utils@npm:30.4.1"
dependencies:
"@jest/get-type": "npm:30.1.0"
chalk: "npm:^4.1.2"
- jest-diff: "npm:30.2.0"
- pretty-format: "npm:30.2.0"
- checksum: 10/f3f1ecf68ca63c9d1d80a175637a8fc655edfd1ee83220f6e3f6bd464ecbe2f93148fdd440a5a5e5a2b0b2cc8ee84ddc3dcef58a6dbc66821c792f48d260c6d4
+ jest-diff: "npm:30.4.1"
+ pretty-format: "npm:30.4.1"
+ checksum: 10/4da6e5c7fe5903fae7394233ea4b892567fb027065670c03096d01be0b389f858055c5ade20d59e82fedec6f3287e6f1720de526cd9a9ad3495432320adb9194
languageName: node
linkType: hard
-"jest-message-util@npm:30.2.0":
- version: 30.2.0
- resolution: "jest-message-util@npm:30.2.0"
+"jest-message-util@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-message-util@npm:30.4.1"
dependencies:
"@babel/code-frame": "npm:^7.27.1"
- "@jest/types": "npm:30.2.0"
+ "@jest/types": "npm:30.4.1"
"@types/stack-utils": "npm:^2.0.3"
chalk: "npm:^4.1.2"
graceful-fs: "npm:^4.2.11"
- micromatch: "npm:^4.0.8"
- pretty-format: "npm:30.2.0"
+ jest-util: "npm:30.4.1"
+ picomatch: "npm:^4.0.3"
+ pretty-format: "npm:30.4.1"
slash: "npm:^3.0.0"
stack-utils: "npm:^2.0.6"
- checksum: 10/e29ec76e8c8e4da5f5b25198be247535626ccf3a940e93fdd51fc6a6bcf70feaa2921baae3806182a090431d90b08c939eb13fb64249b171d2e9ae3a452a8fd2
+ checksum: 10/f83894efa37aa9c61c0a559b1027ecdb0d0cd8afd3e8ea74e797c707d58daea814e72f04b6db0bb6a148c12ae203e9c6e6c5544832ca5fae286c4f80c18ddc3f
languageName: node
linkType: hard
-"jest-mock@npm:30.2.0":
- version: 30.2.0
- resolution: "jest-mock@npm:30.2.0"
+"jest-mock@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-mock@npm:30.4.1"
dependencies:
- "@jest/types": "npm:30.2.0"
+ "@jest/types": "npm:30.4.1"
"@types/node": "npm:*"
- jest-util: "npm:30.2.0"
- checksum: 10/cde9b56805f90bf811a9231873ee88a0fb83bf4bf50972ae76960725da65220fcb119688f2e90e1ef33fbfd662194858d7f43809d881f1c41bb55d94e62adeab
+ jest-util: "npm:30.4.1"
+ checksum: 10/8d0c2794130217b9030b888ce380fe57d82388eec19351bd666440ba46f1e24a7e2bdf42cbe9bcfda2b881d4c0ea09db3c80131b9ab788fb5224af2a1339b422
languageName: node
linkType: hard
@@ -6386,193 +8273,193 @@ __metadata:
languageName: node
linkType: hard
-"jest-regex-util@npm:30.0.1":
- version: 30.0.1
- resolution: "jest-regex-util@npm:30.0.1"
- checksum: 10/fa8dac80c3e94db20d5e1e51d1bdf101cf5ede8f4e0b8f395ba8b8ea81e71804ffd747452a6bb6413032865de98ac656ef8ae43eddd18d980b6442a2764ed562
+"jest-regex-util@npm:30.4.0":
+ version: 30.4.0
+ resolution: "jest-regex-util@npm:30.4.0"
+ checksum: 10/8664fcc1d07c8236a3bd012c0f06ae9d14d96e758b32ee340a3a7c4c326d0b5052d8c4ae4f4c4184f08bf78723d905352f22923647df9658ace3604f03bf074f
languageName: node
linkType: hard
-"jest-resolve-dependencies@npm:30.2.0":
- version: 30.2.0
- resolution: "jest-resolve-dependencies@npm:30.2.0"
+"jest-resolve-dependencies@npm:30.4.2":
+ version: 30.4.2
+ resolution: "jest-resolve-dependencies@npm:30.4.2"
dependencies:
- jest-regex-util: "npm:30.0.1"
- jest-snapshot: "npm:30.2.0"
- checksum: 10/0ff1a574f8c07f2e54a4ac8ab17aea00dfe2982e99b03fbd44f4211a94b8e5a59fdc43a59f9d6c0578a10a7b56a0611ad5ab40e4893973ff3f40dd414433b194
+ jest-regex-util: "npm:30.4.0"
+ jest-snapshot: "npm:30.4.1"
+ checksum: 10/ec7e27d1abf67dfe9ec1a2887b5fa883e1e6ca38eb45506a82f93e29d8df62c18cb40ec07af43fe0fa65d568051a878b6649745f6c032d8962a8dad6323763ad
languageName: node
linkType: hard
-"jest-resolve@npm:30.2.0":
- version: 30.2.0
- resolution: "jest-resolve@npm:30.2.0"
+"jest-resolve@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-resolve@npm:30.4.1"
dependencies:
chalk: "npm:^4.1.2"
graceful-fs: "npm:^4.2.11"
- jest-haste-map: "npm:30.2.0"
+ jest-haste-map: "npm:30.4.1"
jest-pnp-resolver: "npm:^1.2.3"
- jest-util: "npm:30.2.0"
- jest-validate: "npm:30.2.0"
+ jest-util: "npm:30.4.1"
+ jest-validate: "npm:30.4.1"
slash: "npm:^3.0.0"
unrs-resolver: "npm:^1.7.11"
- checksum: 10/e1f03da6811a946f5d885ea739a973975d099cc760641f9e1f90ac9c6621408538ba1e909f789d45d6e8d2411b78fb09230f16f15669621aa407aed7511fdf01
+ checksum: 10/197ca741df92c1006c2367142b5e44827d995f062e94a923f574e87ce04f966634851bb31f54ea377ca163a8362613947cd2311abf8a5712fe879b1ac15f662f
languageName: node
linkType: hard
-"jest-runner@npm:30.2.0":
- version: 30.2.0
- resolution: "jest-runner@npm:30.2.0"
+"jest-runner@npm:30.4.2":
+ version: 30.4.2
+ resolution: "jest-runner@npm:30.4.2"
dependencies:
- "@jest/console": "npm:30.2.0"
- "@jest/environment": "npm:30.2.0"
- "@jest/test-result": "npm:30.2.0"
- "@jest/transform": "npm:30.2.0"
- "@jest/types": "npm:30.2.0"
+ "@jest/console": "npm:30.4.1"
+ "@jest/environment": "npm:30.4.1"
+ "@jest/test-result": "npm:30.4.1"
+ "@jest/transform": "npm:30.4.1"
+ "@jest/types": "npm:30.4.1"
"@types/node": "npm:*"
chalk: "npm:^4.1.2"
emittery: "npm:^0.13.1"
exit-x: "npm:^0.2.2"
graceful-fs: "npm:^4.2.11"
- jest-docblock: "npm:30.2.0"
- jest-environment-node: "npm:30.2.0"
- jest-haste-map: "npm:30.2.0"
- jest-leak-detector: "npm:30.2.0"
- jest-message-util: "npm:30.2.0"
- jest-resolve: "npm:30.2.0"
- jest-runtime: "npm:30.2.0"
- jest-util: "npm:30.2.0"
- jest-watcher: "npm:30.2.0"
- jest-worker: "npm:30.2.0"
+ jest-docblock: "npm:30.4.0"
+ jest-environment-node: "npm:30.4.1"
+ jest-haste-map: "npm:30.4.1"
+ jest-leak-detector: "npm:30.4.1"
+ jest-message-util: "npm:30.4.1"
+ jest-resolve: "npm:30.4.1"
+ jest-runtime: "npm:30.4.2"
+ jest-util: "npm:30.4.1"
+ jest-watcher: "npm:30.4.1"
+ jest-worker: "npm:30.4.1"
p-limit: "npm:^3.1.0"
source-map-support: "npm:0.5.13"
- checksum: 10/d3706aa70e64a7ef8b38360d34ea6c261ba4d0b42136d7fb603c4fa71c24fa81f22c39ed2e39ee0db2363a42827810291f3ceb6a299e5996b41d701ad9b24184
+ checksum: 10/3ed8ee70019f1f5a63faaf07a15e522ec878601dc6eccbde7eb4d0529e4d1a7314e7041160075458257e3103f41d6e9bbb2df8698806805ae2768a7e90228103
languageName: node
linkType: hard
-"jest-runtime@npm:30.2.0":
- version: 30.2.0
- resolution: "jest-runtime@npm:30.2.0"
+"jest-runtime@npm:30.4.2":
+ version: 30.4.2
+ resolution: "jest-runtime@npm:30.4.2"
dependencies:
- "@jest/environment": "npm:30.2.0"
- "@jest/fake-timers": "npm:30.2.0"
- "@jest/globals": "npm:30.2.0"
+ "@jest/environment": "npm:30.4.1"
+ "@jest/fake-timers": "npm:30.4.1"
+ "@jest/globals": "npm:30.4.1"
"@jest/source-map": "npm:30.0.1"
- "@jest/test-result": "npm:30.2.0"
- "@jest/transform": "npm:30.2.0"
- "@jest/types": "npm:30.2.0"
+ "@jest/test-result": "npm:30.4.1"
+ "@jest/transform": "npm:30.4.1"
+ "@jest/types": "npm:30.4.1"
"@types/node": "npm:*"
chalk: "npm:^4.1.2"
cjs-module-lexer: "npm:^2.1.0"
collect-v8-coverage: "npm:^1.0.2"
- glob: "npm:^10.3.10"
+ glob: "npm:^10.5.0"
graceful-fs: "npm:^4.2.11"
- jest-haste-map: "npm:30.2.0"
- jest-message-util: "npm:30.2.0"
- jest-mock: "npm:30.2.0"
- jest-regex-util: "npm:30.0.1"
- jest-resolve: "npm:30.2.0"
- jest-snapshot: "npm:30.2.0"
- jest-util: "npm:30.2.0"
+ jest-haste-map: "npm:30.4.1"
+ jest-message-util: "npm:30.4.1"
+ jest-mock: "npm:30.4.1"
+ jest-regex-util: "npm:30.4.0"
+ jest-resolve: "npm:30.4.1"
+ jest-snapshot: "npm:30.4.1"
+ jest-util: "npm:30.4.1"
slash: "npm:^3.0.0"
strip-bom: "npm:^4.0.0"
- checksum: 10/81a3a9951420863f001e74c510bf35b85ae983f636f43ee1ffa1618b5a8ddafb681bc2810f71814bc8c8373e9593c89576b2325daf3c765e50057e48d5941df3
+ checksum: 10/bc2612a17650e7187d2c778aa66fc07926f828eeb3a445e47ffa757f65a4fb29628a43c6e792196b0a3a06d099b0405b6654a2c314fc5092013690d01483fd75
languageName: node
linkType: hard
-"jest-snapshot@npm:30.2.0":
- version: 30.2.0
- resolution: "jest-snapshot@npm:30.2.0"
+"jest-snapshot@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-snapshot@npm:30.4.1"
dependencies:
"@babel/core": "npm:^7.27.4"
"@babel/generator": "npm:^7.27.5"
"@babel/plugin-syntax-jsx": "npm:^7.27.1"
"@babel/plugin-syntax-typescript": "npm:^7.27.1"
"@babel/types": "npm:^7.27.3"
- "@jest/expect-utils": "npm:30.2.0"
+ "@jest/expect-utils": "npm:30.4.1"
"@jest/get-type": "npm:30.1.0"
- "@jest/snapshot-utils": "npm:30.2.0"
- "@jest/transform": "npm:30.2.0"
- "@jest/types": "npm:30.2.0"
+ "@jest/snapshot-utils": "npm:30.4.1"
+ "@jest/transform": "npm:30.4.1"
+ "@jest/types": "npm:30.4.1"
babel-preset-current-node-syntax: "npm:^1.2.0"
chalk: "npm:^4.1.2"
- expect: "npm:30.2.0"
+ expect: "npm:30.4.1"
graceful-fs: "npm:^4.2.11"
- jest-diff: "npm:30.2.0"
- jest-matcher-utils: "npm:30.2.0"
- jest-message-util: "npm:30.2.0"
- jest-util: "npm:30.2.0"
- pretty-format: "npm:30.2.0"
+ jest-diff: "npm:30.4.1"
+ jest-matcher-utils: "npm:30.4.1"
+ jest-message-util: "npm:30.4.1"
+ jest-util: "npm:30.4.1"
+ pretty-format: "npm:30.4.1"
semver: "npm:^7.7.2"
synckit: "npm:^0.11.8"
- checksum: 10/119390b49f397ed622ba7c375fc15f97af67c4fc49a34cf829c86ee732be2b06ad3c7171c76bb842a0e84a234783f1a4c721909aa316fbe00c6abc7c5962dfbc
+ checksum: 10/6135108d3e0e9fb93ed10fd9ad91d8dbe56f90a9ea84c32a0b551518f8c71f363299dcc301717f3ed82cfe2a276d7993d2b3ccfabea3e8020d49ae8b0f9b6cd8
languageName: node
linkType: hard
-"jest-util@npm:30.2.0, jest-util@npm:^30.2.0":
- version: 30.2.0
- resolution: "jest-util@npm:30.2.0"
+"jest-util@npm:30.4.1, jest-util@npm:^30.4.1":
+ version: 30.4.1
+ resolution: "jest-util@npm:30.4.1"
dependencies:
- "@jest/types": "npm:30.2.0"
+ "@jest/types": "npm:30.4.1"
"@types/node": "npm:*"
chalk: "npm:^4.1.2"
ci-info: "npm:^4.2.0"
graceful-fs: "npm:^4.2.11"
- picomatch: "npm:^4.0.2"
- checksum: 10/cf2f2fb83417ea69f9992121561c95cf4e9aad7946819b771b8b52addf78811101b33b51d0a39fa0c305f2751dab262feed7699de052659ff03d51827c8862f5
+ picomatch: "npm:^4.0.3"
+ checksum: 10/603093e12076906afcf28be514d5b7ac4e3c0e26997b0047614cf2a308b65d773137304a1fb011d747517e881aeed067f6606b9937f5b838d67f6e5734b49ebe
languageName: node
linkType: hard
-"jest-validate@npm:30.2.0":
- version: 30.2.0
- resolution: "jest-validate@npm:30.2.0"
+"jest-validate@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-validate@npm:30.4.1"
dependencies:
"@jest/get-type": "npm:30.1.0"
- "@jest/types": "npm:30.2.0"
+ "@jest/types": "npm:30.4.1"
camelcase: "npm:^6.3.0"
chalk: "npm:^4.1.2"
leven: "npm:^3.1.0"
- pretty-format: "npm:30.2.0"
- checksum: 10/61e66c6df29a1e181f8de063678dd2096bb52cc8a8ead3c9a3f853d54eca458ad04c7fb81931d9274affb67d0504a91a2a520456a139a26665810c3bf039b677
+ pretty-format: "npm:30.4.1"
+ checksum: 10/527fe8ad02df9a4f7f467ecc4e3ac2a37a27b7b30345e7bc3cb9c2ead33fbc8ed1290c0827baa06471281012c38abb96cb268af274a0a2350548e50db20a434f
languageName: node
linkType: hard
-"jest-watcher@npm:30.2.0":
- version: 30.2.0
- resolution: "jest-watcher@npm:30.2.0"
+"jest-watcher@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-watcher@npm:30.4.1"
dependencies:
- "@jest/test-result": "npm:30.2.0"
- "@jest/types": "npm:30.2.0"
+ "@jest/test-result": "npm:30.4.1"
+ "@jest/types": "npm:30.4.1"
"@types/node": "npm:*"
ansi-escapes: "npm:^4.3.2"
chalk: "npm:^4.1.2"
emittery: "npm:^0.13.1"
- jest-util: "npm:30.2.0"
+ jest-util: "npm:30.4.1"
string-length: "npm:^4.0.2"
- checksum: 10/fa38d06dcc59dbbd6a9ff22dea499d3c81ed376d9993b82d01797a99bf466d48641a99b9f3670a4b5480ca31144c5e017b96b7059e4d7541358fb48cf517a2db
+ checksum: 10/05350ed3d5643e87e22cc5faee14f912dfc06ba63d56944006d9837f2070ed509a1d124c7e7be3e3a9a6a382bd31d491146da6fda4483acd4b8292091888e9bd
languageName: node
linkType: hard
-"jest-worker@npm:30.2.0":
- version: 30.2.0
- resolution: "jest-worker@npm:30.2.0"
+"jest-worker@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-worker@npm:30.4.1"
dependencies:
"@types/node": "npm:*"
"@ungap/structured-clone": "npm:^1.3.0"
- jest-util: "npm:30.2.0"
+ jest-util: "npm:30.4.1"
merge-stream: "npm:^2.0.0"
supports-color: "npm:^8.1.1"
- checksum: 10/9354b0c71c80173f673da6bbc0ddaad26e4395b06532f7332e0c1e93e855b873b10139b040e01eda77f3dc5a0b67613e2bd7c56c4947ee771acfc3611de2ca29
+ checksum: 10/ff6af73c9097fc07e90490d3e1e354c702390ef66f7f40054a15dd6d56809a25634179969ff80bde782a6c645f49fa48bf3aacfe7d05af7315c48020f9b2b1cd
languageName: node
linkType: hard
-"jest@npm:^30.2.0":
- version: 30.2.0
- resolution: "jest@npm:30.2.0"
+"jest@npm:^30.4.2":
+ version: 30.4.2
+ resolution: "jest@npm:30.4.2"
dependencies:
- "@jest/core": "npm:30.2.0"
- "@jest/types": "npm:30.2.0"
+ "@jest/core": "npm:30.4.2"
+ "@jest/types": "npm:30.4.1"
import-local: "npm:^3.2.0"
- jest-cli: "npm:30.2.0"
+ jest-cli: "npm:30.4.2"
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
peerDependenciesMeta:
@@ -6580,7 +8467,16 @@ __metadata:
optional: true
bin:
jest: ./bin/jest.js
- checksum: 10/61c9d100750e4354cd7305d1f3ba253ffde4deaf12cb4be4d42d54f2dd5986e383a39c4a8691dbdc3839c69094a52413ed36f1886540ac37b71914a990b810d0
+ checksum: 10/3690f4009a46781b480fbd4c8c60dd910a3cf8af76626f29971003c28eb17dfa322e86f3203e3da168edcc9f7ba973f3b1fbf15ca12393cc5f86bc61f3289fef
+ languageName: node
+ linkType: hard
+
+"jiti@npm:^2.7.0":
+ version: 2.7.0
+ resolution: "jiti@npm:2.7.0"
+ bin:
+ jiti: lib/jiti-cli.mjs
+ checksum: 10/6d75a8dbd61dbee031aa0937fabb748ff8ddf370b971958cc704f5cf26b4c5bdc9dcd0563059b2627a2bd41d946fa0bc64f912fdc8981ca7945a9d63c74ad0f9
languageName: node
linkType: hard
@@ -6592,25 +8488,25 @@ __metadata:
linkType: hard
"js-yaml@npm:^3.13.1":
- version: 3.14.2
- resolution: "js-yaml@npm:3.14.2"
+ version: 3.15.0
+ resolution: "js-yaml@npm:3.15.0"
dependencies:
argparse: "npm:^1.0.7"
esprima: "npm:^4.0.0"
bin:
js-yaml: bin/js-yaml.js
- checksum: 10/172e0b6007b0bf0fc8d2469c94424f7dd765c64a047d2b790831fecef2204a4054eabf4d911eb73ab8c9a3256ab8ba1ee8d655b789bf24bf059c772acc2075a1
+ checksum: 10/2fdf3a1453ed93a8e06d6ca8054c0bec145cf40ab51f305d1071736a03668b95e40f47cfd0239d7d50019b4780a18cdaca3c935def935594c9876964c49f1185
languageName: node
linkType: hard
-"js-yaml@npm:^4.1.1":
- version: 4.1.1
- resolution: "js-yaml@npm:4.1.1"
+"js-yaml@npm:^4.3.0":
+ version: 4.3.0
+ resolution: "js-yaml@npm:4.3.0"
dependencies:
argparse: "npm:^2.0.1"
bin:
js-yaml: bin/js-yaml.js
- checksum: 10/a52d0519f0f4ef5b4adc1cde466cb54c50d56e2b4a983b9d5c9c0f2f99462047007a6274d7e95617a21d3c91fde3ee6115536ed70991cd645ba8521058b78f77
+ checksum: 10/2bcec3a8118d7f744badeb04e14366578d234a736f353d41fe35d2305e4ce2409a8e041d277f07cd6bbc8aaa12128d650a68ce43247072519bede20962d2126f
languageName: node
linkType: hard
@@ -6639,13 +8535,6 @@ __metadata:
languageName: node
linkType: hard
-"json-parse-better-errors@npm:^1.0.1":
- version: 1.0.2
- resolution: "json-parse-better-errors@npm:1.0.2"
- checksum: 10/5553232045359b767b0f2039a6777fede1a8d7dca1a0ffb1f9ef73a7519489ae7f566b2e040f2b4c38edb8e35e37ae07af7f0a52420902f869ee0dbf5dc6c784
- languageName: node
- linkType: hard
-
"json-parse-even-better-errors@npm:^2.3.0":
version: 2.3.1
resolution: "json-parse-even-better-errors@npm:2.3.1"
@@ -6660,6 +8549,13 @@ __metadata:
languageName: node
linkType: hard
+"json-schema-traverse@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "json-schema-traverse@npm:1.0.0"
+ checksum: 10/02f2f466cdb0362558b2f1fd5e15cce82ef55d60cd7f8fa828cf35ba74330f8d767fcae5c5c2adb7851fa811766c694b9405810879bc4e1ddd78a7c0e03658ad
+ languageName: node
+ linkType: hard
+
"json-stable-stringify-without-jsonify@npm:^1.0.1":
version: 1.0.1
resolution: "json-stable-stringify-without-jsonify@npm:1.0.1"
@@ -6667,10 +8563,10 @@ __metadata:
languageName: node
linkType: hard
-"json-stringify-safe@npm:^5.0.1":
- version: 5.0.1
- resolution: "json-stringify-safe@npm:5.0.1"
- checksum: 10/59169a081e4eeb6f9559ae1f938f656191c000e0512aa6df9f3c8b2437a4ab1823819c6b9fd1818a4e39593ccfd72e9a051fdd3e2d1e340ed913679e888ded8c
+"json-stream-stringify@npm:3.0.1":
+ version: 3.0.1
+ resolution: "json-stream-stringify@npm:3.0.1"
+ checksum: 10/ac2d35bf805dbf2a1d72e1ae7c47bc8febfc36c6b8772f695f6ee5a99a7adaa60b106695d981c44d9d579c8293a706129a1c8e65b53d8ad4f4b15a0da8a23445
languageName: node
linkType: hard
@@ -6683,19 +8579,32 @@ __metadata:
languageName: node
linkType: hard
-"jsonparse@npm:^1.2.0":
- version: 1.3.1
- resolution: "jsonparse@npm:1.3.1"
- checksum: 10/24531e956f0f19d79e22c157cebd81b37af3486ae22f9bc1028f8c2a4d1b70df48b168ff86f8568d9c2248182de9b6da9f50f685d5e4b9d1d2d339d2a29d15bc
+"jsonc-parser@npm:^3.3.1":
+ version: 3.3.1
+ resolution: "jsonc-parser@npm:3.3.1"
+ checksum: 10/9b0dc391f20b47378f843ef1e877e73ec652a5bdc3c5fa1f36af0f119a55091d147a86c1ee86a232296f55c929bba174538c2bf0312610e0817a22de131cc3f4
languageName: node
linkType: hard
-"kairos-lib@npm:0.2.3, kairos-lib@npm:^0.2.3":
- version: 0.2.3
- resolution: "kairos-lib@npm:0.2.3"
+"jsonfile@npm:^6.0.1":
+ version: 6.2.1
+ resolution: "jsonfile@npm:6.2.1"
+ dependencies:
+ graceful-fs: "npm:^4.1.6"
+ universalify: "npm:^2.0.0"
+ dependenciesMeta:
+ graceful-fs:
+ optional: true
+ checksum: 10/6022bcca984bb5ac57855f80d1c7013765c2db13624292d4652b83f9f4ae93486b82ba516ad5ea91d07cd2f6e2e579b42e422ec1d680e78605f4af25644b9797
+ languageName: node
+ linkType: hard
+
+"kairos-lib@npm:1.0.0, kairos-lib@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "kairos-lib@npm:1.0.0"
dependencies:
tslib: "npm:^2.8.1"
- checksum: 10/d1be6e208896839ea693924b26f185a6b7e7dff9b1f964e4283df2e2d438554f396b4cad7cb696dcd111a2a554c12c9642bf92f7037bd8059e96a118c3a4c2c9
+ checksum: 10/e7a40a5b83199b529b27cbd9b445aee7027ea890209e02fd3d3b17db12b9c86871cc4a4c3e52575ce43c64c8f2712a7be88f29b0d75ab0d94faf4efba6907686
languageName: node
linkType: hard
@@ -6717,7 +8626,7 @@ __metadata:
languageName: node
linkType: hard
-"kind-of@npm:^6.0.2, kind-of@npm:^6.0.3":
+"kind-of@npm:^6.0.2":
version: 6.0.3
resolution: "kind-of@npm:6.0.3"
checksum: 10/5873d303fb36aad875b7538798867da2ae5c9e328d67194b0162a3659a627d22f742fc9c4ae95cd1704132a24b00cae5041fc00c0f6ef937dc17080dc4dbb962
@@ -6814,9 +8723,9 @@ __metadata:
languageName: node
linkType: hard
-"koa@npm:^3.1.1":
- version: 3.2.0
- resolution: "koa@npm:3.2.0"
+"koa@npm:^3.2.1":
+ version: 3.2.1
+ resolution: "koa@npm:3.2.1"
dependencies:
accepts: "npm:^1.3.8"
content-disposition: "npm:~1.0.1"
@@ -6836,7 +8745,7 @@ __metadata:
statuses: "npm:^2.0.1"
type-is: "npm:^2.0.1"
vary: "npm:^1.1.2"
- checksum: 10/f8f256c342543a00fb42114a5c28822c96e343a663013b339dd546368069d3eee8d825d80cee51998aa26ba167f93caee70213c57d694061ccafd06d35c8ebaa
+ checksum: 10/bdfc1db4b2a32c765ed648d08233ff068b110739488c967c43d5b2b4185be04196cb7059a8c0705e7dc64981c47e942177be507992ea04bd15736740cdd85ae5
languageName: node
linkType: hard
@@ -6847,10 +8756,13 @@ __metadata:
languageName: node
linkType: hard
-"lead@npm:^4.0.0":
- version: 4.0.0
- resolution: "lead@npm:4.0.0"
- checksum: 10/7117297c29b94e4846822e5ae0a25780af834586c0862b89ff899e44547f4f742d67801f19838b34611d36eec44868604c55525e12d2a1fb0c9496a9792ca396
+"launch-editor@npm:^2.13.2, launch-editor@npm:^2.6.1":
+ version: 2.14.1
+ resolution: "launch-editor@npm:2.14.1"
+ dependencies:
+ picocolors: "npm:^1.1.1"
+ shell-quote: "npm:^1.8.4"
+ checksum: 10/335d12ca437280e77070657531c251b6c91c62bc653f70ab66ddd2a6e50131b1b043480411c5b93d54955a0a6eb8ec01e9a5b5cfe2d887341d878d19394a126b
languageName: node
linkType: hard
@@ -6900,6 +8812,13 @@ __metadata:
languageName: node
linkType: hard
+"lines-and-columns@npm:2.0.4":
+ version: 2.0.4
+ resolution: "lines-and-columns@npm:2.0.4"
+ checksum: 10/81ac2f943f5428a46bd4ea2561c74ba674a107d8e6cc70cd317d16892a36ff3ba0dc6e599aca8b6f8668d26c85288394c6edf7a40e985ca843acab3701b80d4c
+ languageName: node
+ linkType: hard
+
"lines-and-columns@npm:^1.1.6":
version: 1.2.4
resolution: "lines-and-columns@npm:1.2.4"
@@ -6907,28 +8826,6 @@ __metadata:
languageName: node
linkType: hard
-"load-json-file@npm:^4.0.0":
- version: 4.0.0
- resolution: "load-json-file@npm:4.0.0"
- dependencies:
- graceful-fs: "npm:^4.1.2"
- parse-json: "npm:^4.0.0"
- pify: "npm:^3.0.0"
- strip-bom: "npm:^3.0.0"
- checksum: 10/8f5d6d93ba64a9620445ee9bde4d98b1eac32cf6c8c2d20d44abfa41a6945e7969456ab5f1ca2fb06ee32e206c9769a20eec7002fe290de462e8c884b6b8b356
- languageName: node
- linkType: hard
-
-"locate-path@npm:^2.0.0":
- version: 2.0.0
- resolution: "locate-path@npm:2.0.0"
- dependencies:
- p-locate: "npm:^2.0.0"
- path-exists: "npm:^3.0.0"
- checksum: 10/02d581edbbbb0fa292e28d96b7de36b5b62c2fa8b5a7e82638ebb33afa74284acf022d3b1e9ae10e3ffb7658fbc49163fcd5e76e7d1baaa7801c3e05a81da755
- languageName: node
- linkType: hard
-
"locate-path@npm:^3.0.0":
version: 3.0.0
resolution: "locate-path@npm:3.0.0"
@@ -6957,20 +8854,6 @@ __metadata:
languageName: node
linkType: hard
-"lodash.get@npm:^4.4.2":
- version: 4.4.2
- resolution: "lodash.get@npm:4.4.2"
- checksum: 10/2a4925f6e89bc2c010a77a802d1ba357e17ed1ea03c2ddf6a146429f2856a216663e694a6aa3549a318cbbba3fd8b7decb392db457e6ac0b83dc745ed0a17380
- languageName: node
- linkType: hard
-
-"lodash.ismatch@npm:^4.4.0":
- version: 4.4.0
- resolution: "lodash.ismatch@npm:4.4.0"
- checksum: 10/946a7176cdf4048f7b624378defda00dc0d01a2dad9933c54dad11fbecc253716df4210fbbfcd7d042e6fdb7603463cfe48e0ef576e20bf60d43f7deb1a2fe04
- languageName: node
- linkType: hard
-
"lodash.memoize@npm:^4.1.2":
version: 4.1.2
resolution: "lodash.memoize@npm:4.1.2"
@@ -6992,10 +8875,13 @@ __metadata:
languageName: node
linkType: hard
-"lodash@npm:^4.0.0":
- version: 4.17.23
- resolution: "lodash@npm:4.17.23"
- checksum: 10/82504c88250f58da7a5a4289f57a4f759c44946c005dd232821c7688b5fcfbf4a6268f6a6cdde4b792c91edd2f3b5398c1d2a0998274432cff76def48735e233
+"log-symbols@npm:^7.0.1":
+ version: 7.0.1
+ resolution: "log-symbols@npm:7.0.1"
+ dependencies:
+ is-unicode-supported: "npm:^2.0.0"
+ yoctocolors: "npm:^2.1.1"
+ checksum: 10/0862313d84826b551582e39659b8586c56b65130c5f4f976420e2c23985228334f2a26fc4251ac22bf0a5b415d9430e86bf332557d934c10b036f9a549d63a09
languageName: node
linkType: hard
@@ -7043,12 +8929,12 @@ __metadata:
languageName: node
linkType: hard
-"lru-cache@npm:^6.0.0":
- version: 6.0.0
- resolution: "lru-cache@npm:6.0.0"
+"magic-string@npm:^0.30.21":
+ version: 0.30.21
+ resolution: "magic-string@npm:0.30.21"
dependencies:
- yallist: "npm:^4.0.0"
- checksum: 10/fc1fe2ee205f7c8855fa0f34c1ab0bcf14b6229e35579ec1fd1079f31d6fc8ef8eb6fd17f2f4d99788d7e339f50e047555551ebd5e434dda503696e7c6591825
+ "@jridgewell/sourcemap-codec": "npm:^1.5.5"
+ checksum: 10/57d5691f41ed40d962d8bd300148114f53db67fadbff336207db10a99f2bdf4a1be9cac3a68ee85dba575912ee1d4402e4396408196ec2d3afd043b076156221
languageName: node
linkType: hard
@@ -7096,20 +8982,6 @@ __metadata:
languageName: node
linkType: hard
-"map-obj@npm:^1.0.0":
- version: 1.0.1
- resolution: "map-obj@npm:1.0.1"
- checksum: 10/f8e6fc7f6137329c376c4524f6d25b3c243c17019bc8f621d15a2dcb855919e482a9298a78ae58b00dbd0e76b640bf6533aa343a9e993cfc16e0346a2507e7f8
- languageName: node
- linkType: hard
-
-"map-obj@npm:^4.0.0":
- version: 4.3.0
- resolution: "map-obj@npm:4.3.0"
- checksum: 10/fbc554934d1a27a1910e842bc87b177b1a556609dd803747c85ece420692380827c6ae94a95cce4407c054fa0964be3bf8226f7f2cb2e9eeee432c7c1985684e
- languageName: node
- linkType: hard
-
"mapcap@npm:^1.0.0":
version: 1.0.0
resolution: "mapcap@npm:1.0.0"
@@ -7171,6 +9043,30 @@ __metadata:
languageName: node
linkType: hard
+"memfs@npm:^4.43.1":
+ version: 4.57.2
+ resolution: "memfs@npm:4.57.2"
+ dependencies:
+ "@jsonjoy.com/fs-core": "npm:4.57.2"
+ "@jsonjoy.com/fs-fsa": "npm:4.57.2"
+ "@jsonjoy.com/fs-node": "npm:4.57.2"
+ "@jsonjoy.com/fs-node-builtins": "npm:4.57.2"
+ "@jsonjoy.com/fs-node-to-fsa": "npm:4.57.2"
+ "@jsonjoy.com/fs-node-utils": "npm:4.57.2"
+ "@jsonjoy.com/fs-print": "npm:4.57.2"
+ "@jsonjoy.com/fs-snapshot": "npm:4.57.2"
+ "@jsonjoy.com/json-pack": "npm:^1.11.0"
+ "@jsonjoy.com/util": "npm:^1.9.0"
+ glob-to-regex.js: "npm:^1.0.1"
+ thingies: "npm:^2.5.0"
+ tree-dump: "npm:^1.0.3"
+ tslib: "npm:^2.0.0"
+ peerDependencies:
+ tslib: 2
+ checksum: 10/872b08504889b616a2ec28655509632112d80f8f0fd6d8c23219f4f62b4ff7d6a890205e3127379d985f3bdcaf82909a9f2c3a17867495f98b4678bc2af8a458
+ languageName: node
+ linkType: hard
+
"memory-pager@npm:^1.0.2":
version: 1.5.0
resolution: "memory-pager@npm:1.5.0"
@@ -7178,13 +9074,6 @@ __metadata:
languageName: node
linkType: hard
-"meow@npm:^12.1.1":
- version: 12.1.1
- resolution: "meow@npm:12.1.1"
- checksum: 10/8594c319f4671a562c1fef584422902f1bbbad09ea49cdf9bb26dc92f730fa33398dd28a8cf34fcf14167f1d1148d05a867e50911fc4286751a4fb662fdd2dc2
- languageName: node
- linkType: hard
-
"meow@npm:^13.2.0":
version: 13.2.0
resolution: "meow@npm:13.2.0"
@@ -7192,29 +9081,17 @@ __metadata:
languageName: node
linkType: hard
-"meow@npm:^8.1.2":
- version: 8.1.2
- resolution: "meow@npm:8.1.2"
- dependencies:
- "@types/minimist": "npm:^1.2.0"
- camelcase-keys: "npm:^6.2.2"
- decamelize-keys: "npm:^1.1.0"
- hard-rejection: "npm:^2.1.0"
- minimist-options: "npm:4.1.0"
- normalize-package-data: "npm:^3.0.0"
- read-pkg-up: "npm:^7.0.1"
- redent: "npm:^3.0.0"
- trim-newlines: "npm:^3.0.0"
- type-fest: "npm:^0.18.0"
- yargs-parser: "npm:^20.2.3"
- checksum: 10/d4770f90135c0ef4d0f4fa4f4310a18c07bbbe408221fa79a68fda93944134001ffc24ed605e7668f61e920dd8db30936548e927d2331b0e30699d56247f9873
+"meow@npm:^14.1.0":
+ version: 14.1.0
+ resolution: "meow@npm:14.1.0"
+ checksum: 10/c6a22b3912a6bc849dee0d6475cd8bb63b9307e26919ca3ace28dc1aaf3d30257071de32bba496f7b5eec3e62b03a6b7731e3d04d18efb3c3103b829aad52ca5
languageName: node
linkType: hard
-"merge-descriptors@npm:^1.0.1":
- version: 1.0.1
- resolution: "merge-descriptors@npm:1.0.1"
- checksum: 10/5abc259d2ae25bb06d19ce2b94a21632583c74e2a9109ee1ba7fd147aa7362b380d971e0251069f8b3eb7d48c21ac839e21fa177b335e82c76ec172e30c31a26
+"merge-descriptors@npm:1.0.3, merge-descriptors@npm:^1.0.1":
+ version: 1.0.3
+ resolution: "merge-descriptors@npm:1.0.3"
+ checksum: 10/52117adbe0313d5defa771c9993fe081e2d2df9b840597e966aadafde04ae8d0e3da46bac7ca4efc37d4d2b839436582659cd49c6a43eacb3fe3050896a105d1
languageName: node
linkType: hard
@@ -7225,16 +9102,9 @@ __metadata:
languageName: node
linkType: hard
-"merge2@npm:^1.3.0":
- version: 1.4.1
- resolution: "merge2@npm:1.4.1"
- checksum: 10/7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2
- languageName: node
- linkType: hard
-
-"meteor-node-stubs@npm:^1.2.25":
- version: 1.2.25
- resolution: "meteor-node-stubs@npm:1.2.25"
+"meteor-node-stubs@npm:^1.2.27":
+ version: 1.2.27
+ resolution: "meteor-node-stubs@npm:1.2.27"
dependencies:
"@meteorjs/crypto-browserify": "npm:^3.12.1"
assert: "npm:^2.1.0"
@@ -7260,18 +9130,18 @@ __metadata:
url: "npm:^0.11.4"
util: "npm:^0.12.5"
vm-browserify: "npm:^1.1.2"
- checksum: 10/57390ff99f2fa775f8b46b0faabbbfbcab9f193d264f3cb1c2e250e24cfd211c3437ad3c7646d7c3965531155fc698383e5bd5d8f1504d93a4b1cc9cbc007b0f
+ checksum: 10/f6499c4dd0056320247ce38a06e666a90d74f7c09b891467738af70b600415a681727ed81a159ba6c9e2d3c3ca122d6bc789675aeb4805756f3cc1eae93c5a74
languageName: node
linkType: hard
-"methods@npm:^1.1.2":
+"methods@npm:^1.1.2, methods@npm:~1.1.2":
version: 1.1.2
resolution: "methods@npm:1.1.2"
checksum: 10/a385dd974faa34b5dd021b2bbf78c722881bf6f003bfe6d391d7da3ea1ed625d1ff10ddd13c57531f628b3e785be38d3eed10ad03cebd90b76932413df9a1820
languageName: node
linkType: hard
-"micromatch@npm:^4.0.8":
+"micromatch@npm:^4.0.2":
version: 4.0.8
resolution: "micromatch@npm:4.0.8"
dependencies:
@@ -7300,14 +9170,14 @@ __metadata:
languageName: node
linkType: hard
-"mime-db@npm:^1.54.0":
+"mime-db@npm:>= 1.43.0 < 2, mime-db@npm:^1.54.0":
version: 1.54.0
resolution: "mime-db@npm:1.54.0"
checksum: 10/9e7834be3d66ae7f10eaa69215732c6d389692b194f876198dca79b2b90cbf96688d9d5d05ef7987b20f749b769b11c01766564264ea5f919c88b32a29011311
languageName: node
linkType: hard
-"mime-types@npm:^2.1.12, mime-types@npm:^2.1.18, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34":
+"mime-types@npm:^2.1.18, mime-types@npm:^2.1.35, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34, mime-types@npm:~2.1.35":
version: 2.1.35
resolution: "mime-types@npm:2.1.35"
dependencies:
@@ -7325,7 +9195,7 @@ __metadata:
languageName: node
linkType: hard
-"mime@npm:^1.3.4":
+"mime@npm:1.6.0, mime@npm:^1.3.4":
version: 1.6.0
resolution: "mime@npm:1.6.0"
bin:
@@ -7341,10 +9211,10 @@ __metadata:
languageName: node
linkType: hard
-"min-indent@npm:^1.0.0":
- version: 1.0.1
- resolution: "min-indent@npm:1.0.1"
- checksum: 10/bfc6dd03c5eaf623a4963ebd94d087f6f4bbbfd8c41329a7f09706b0cb66969c4ddd336abeb587bc44bc6f08e13bf90f0b374f9d71f9f01e04adc2cd6f083ef1
+"mimic-function@npm:^5.0.0":
+ version: 5.0.1
+ resolution: "mimic-function@npm:5.0.1"
+ checksum: 10/eb5893c99e902ccebbc267c6c6b83092966af84682957f79313311edb95e8bb5f39fb048d77132b700474d1c86d90ccc211e99bae0935447a4834eb4c882982c
languageName: node
linkType: hard
@@ -7362,7 +9232,7 @@ __metadata:
languageName: node
linkType: hard
-"minimatch@npm:^10.1.2":
+"minimatch@npm:^10.2.2, minimatch@npm:^10.2.5":
version: 10.2.5
resolution: "minimatch@npm:10.2.5"
dependencies:
@@ -7371,7 +9241,7 @@ __metadata:
languageName: node
linkType: hard
-"minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2":
+"minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.5":
version: 3.1.5
resolution: "minimatch@npm:3.1.5"
dependencies:
@@ -7380,7 +9250,7 @@ __metadata:
languageName: node
linkType: hard
-"minimatch@npm:^9.0.4, minimatch@npm:^9.0.5":
+"minimatch@npm:^9.0.4":
version: 9.0.9
resolution: "minimatch@npm:9.0.9"
dependencies:
@@ -7389,17 +9259,6 @@ __metadata:
languageName: node
linkType: hard
-"minimist-options@npm:4.1.0":
- version: 4.1.0
- resolution: "minimist-options@npm:4.1.0"
- dependencies:
- arrify: "npm:^1.0.1"
- is-plain-obj: "npm:^1.1.0"
- kind-of: "npm:^6.0.3"
- checksum: 10/8c040b3068811e79de1140ca2b708d3e203c8003eb9a414c1ab3cd467fc5f17c9ca02a5aef23bedc51a7f8bfbe77f87e9a7e31ec81fba304cda675b019496f4e
- languageName: node
- linkType: hard
-
"minimist@npm:^1.2.5, minimist@npm:^1.2.6":
version: 1.2.8
resolution: "minimist@npm:1.2.8"
@@ -7467,10 +9326,10 @@ __metadata:
languageName: node
linkType: hard
-"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2":
- version: 7.1.2
- resolution: "minipass@npm:7.1.2"
- checksum: 10/c25f0ee8196d8e6036661104bacd743785b2599a21de5c516b32b3fa2b83113ac89a2358465bc04956baab37ffb956ae43be679b2262bf7be15fce467ccd7950
+"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2, minipass@npm:^7.1.3":
+ version: 7.1.3
+ resolution: "minipass@npm:7.1.3"
+ checksum: 10/175e4d5e20980c3cd316ae82d2c031c42f6c746467d8b1905b51060a0ba4461441a0c25bb67c025fd9617f9a3873e152c7b543c6b5ac83a1846be8ade80dffd6
languageName: node
linkType: hard
@@ -7494,22 +9353,6 @@ __metadata:
languageName: node
linkType: hard
-"mkdirp@npm:^1.0.4":
- version: 1.0.4
- resolution: "mkdirp@npm:1.0.4"
- bin:
- mkdirp: bin/cmd.js
- checksum: 10/d71b8dcd4b5af2fe13ecf3bd24070263489404fe216488c5ba7e38ece1f54daf219e72a833a3a2dc404331e870e9f44963a33399589490956bff003a3404d3b2
- languageName: node
- linkType: hard
-
-"modify-values@npm:^1.0.1":
- version: 1.0.1
- resolution: "modify-values@npm:1.0.1"
- checksum: 10/16fa93f7ddb2540a8e82c99738ae4ed0e8e8cae57c96e13a0db9d68dfad074fd2eec542929b62ebbb18b357bbb3e4680b92d3a4099baa7aeb32360cb1c8f0247
- languageName: node
- linkType: hard
-
"module-details-from-path@npm:^1.0.3":
version: 1.0.3
resolution: "module-details-from-path@npm:1.0.3"
@@ -7524,31 +9367,31 @@ __metadata:
languageName: node
linkType: hard
-"mongodb-connection-string-url@npm:^3.0.2":
- version: 3.0.2
- resolution: "mongodb-connection-string-url@npm:3.0.2"
+"mongodb-connection-string-url@npm:^7.0.0":
+ version: 7.0.1
+ resolution: "mongodb-connection-string-url@npm:7.0.1"
dependencies:
- "@types/whatwg-url": "npm:^11.0.2"
- whatwg-url: "npm:^14.1.0 || ^13.0.0"
- checksum: 10/99ac939a67cc963b90cfe70a8e45250a8386c531be7d22ffa5d1f3e5dd2406b149fb823b91ac161e4a4a29dfac754b49bca8f6dd786cfc66ae0ca80db5f5f23d
+ "@types/whatwg-url": "npm:^13.0.0"
+ whatwg-url: "npm:^14.1.0"
+ checksum: 10/6b48e3d0674d375163613617bdecbc18860bfaa8635873cef8a2eb41cb04a317b5f541b8f732664d03c098f9937c02c3eb013289e124f6473a44ed3aa6daceee
languageName: node
linkType: hard
-"mongodb@npm:^6.21.0":
- version: 6.21.0
- resolution: "mongodb@npm:6.21.0"
+"mongodb@npm:^7.1.1":
+ version: 7.1.1
+ resolution: "mongodb@npm:7.1.1"
dependencies:
"@mongodb-js/saslprep": "npm:^1.3.0"
- bson: "npm:^6.10.4"
- mongodb-connection-string-url: "npm:^3.0.2"
+ bson: "npm:^7.1.1"
+ mongodb-connection-string-url: "npm:^7.0.0"
peerDependencies:
- "@aws-sdk/credential-providers": ^3.188.0
- "@mongodb-js/zstd": ^1.1.0 || ^2.0.0
- gcp-metadata: ^5.2.0
- kerberos: ^2.0.1
- mongodb-client-encryption: ">=6.0.0 <7"
+ "@aws-sdk/credential-providers": ^3.806.0
+ "@mongodb-js/zstd": ^7.0.0
+ gcp-metadata: ^7.0.1
+ kerberos: ^7.0.0
+ mongodb-client-encryption: ">=7.0.0 <7.1.0"
snappy: ^7.3.2
- socks: ^2.7.1
+ socks: ^2.8.6
peerDependenciesMeta:
"@aws-sdk/credential-providers":
optional: true
@@ -7564,7 +9407,7 @@ __metadata:
optional: true
socks:
optional: true
- checksum: 10/28d2cab1c55c4cf58e410529ac6ae4c79a233adeb2147ba872d912819a0b496ee2dc5b9819ccbf0527618ced3b841e733b221fd1c627901e8e87ae60a8dc0553
+ checksum: 10/e6085e2815d70e86aca235f0445b63bcdb5a29584244bffdda1be96642982a044d15ab95874d514409f6097cc8f790f5aad75009c6c315bd382e81ec06d71c01
languageName: node
linkType: hard
@@ -7575,6 +9418,13 @@ __metadata:
languageName: node
linkType: hard
+"mrmime@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "mrmime@npm:2.0.1"
+ checksum: 10/1f966e2c05b7264209c4149ae50e8e830908eb64dd903535196f6ad72681fa109b794007288a3c2814f7a1ecf9ca192769909c0c374d974d604a8de5fc095d4a
+ languageName: node
+ linkType: hard
+
"ms@npm:2.0.0":
version: 2.0.0
resolution: "ms@npm:2.0.0"
@@ -7582,19 +9432,38 @@ __metadata:
languageName: node
linkType: hard
-"ms@npm:^2.0.0, ms@npm:^2.1.1, ms@npm:^2.1.3":
+"ms@npm:2.1.3, ms@npm:^2.0.0, ms@npm:^2.1.1, ms@npm:^2.1.3":
version: 2.1.3
resolution: "ms@npm:2.1.3"
checksum: 10/aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d
languageName: node
linkType: hard
-"nanoid@npm:^3.3.11":
- version: 3.3.11
- resolution: "nanoid@npm:3.3.11"
+"multicast-dns@npm:^7.2.5":
+ version: 7.2.5
+ resolution: "multicast-dns@npm:7.2.5"
+ dependencies:
+ dns-packet: "npm:^5.2.2"
+ thunky: "npm:^1.0.2"
+ bin:
+ multicast-dns: cli.js
+ checksum: 10/e9add8035fb7049ccbc87b1b069f05bb3b31e04fe057bf7d0116739d81295165afc2568291a4a962bee01a5074e475996816eed0f50c8110d652af5abb74f95a
+ languageName: node
+ linkType: hard
+
+"mute-stream@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "mute-stream@npm:3.0.0"
+ checksum: 10/bee5db5c996a4585dbffc49e51fea10f3582d7f65441db9bc63126f16269541713c6ccb5a6fe37e08f627967b6eb28dd6b35e54a8dce53cf3837d7e010917b43
+ languageName: node
+ linkType: hard
+
+"nanoid@npm:^3.3.16":
+ version: 3.3.16
+ resolution: "nanoid@npm:3.3.16"
bin:
nanoid: bin/nanoid.cjs
- checksum: 10/73b5afe5975a307aaa3c95dfe3334c52cdf9ae71518176895229b8d65ab0d1c0417dd081426134eb7571c055720428ea5d57c645138161e7d10df80815527c48
+ checksum: 10/8004af92b5541af1dbd23b69845b5026f777d5b7ef07163cea1837aae86e052ced8b383cecbf8a4f1b5e77ae207df96dc45e16b9e0fa3c4b761d085f1e42851b
languageName: node
linkType: hard
@@ -7628,6 +9497,13 @@ __metadata:
languageName: node
linkType: hard
+"negotiator@npm:~0.6.4":
+ version: 0.6.4
+ resolution: "negotiator@npm:0.6.4"
+ checksum: 10/d98c04a136583afd055746168f1067d58ce4bfe6e4c73ca1d339567f81ea1f7e665b5bd1e81f4771c67b6c2ea89b21cb2adaea2b16058c7dc31317778f931dab
+ languageName: node
+ linkType: hard
+
"neo-async@npm:^2.6.2":
version: 2.6.2
resolution: "neo-async@npm:2.6.2"
@@ -7651,12 +9527,10 @@ __metadata:
languageName: node
linkType: hard
-"node-gettext@npm:^3.0.0":
- version: 3.0.1
- resolution: "node-gettext@npm:3.0.1"
- dependencies:
- lodash.get: "npm:^4.4.2"
- checksum: 10/1387b048085f871a6466cfaebc3e695c30afa23c893fd4742ef9249bd4cca0e65ab5fae11356df5b5ff6dbc8d0f1903a45fb13571b3a7ce67f24d18a8262055e
+"node-forge@npm:^1":
+ version: 1.4.0
+ resolution: "node-forge@npm:1.4.0"
+ checksum: 10/d70fd769768e646eda73343d4d4105ccb6869315d975905a22117431c04ae5b6df6c488e34ed275b1a66b50195a09b84b5c8aeca3b8605c20605fcb8e9f109d9
languageName: node
linkType: hard
@@ -7716,10 +9590,57 @@ __metadata:
languageName: node
linkType: hard
-"node-releases@npm:^2.0.19":
- version: 2.0.19
- resolution: "node-releases@npm:2.0.19"
- checksum: 10/c2b33b4f0c40445aee56141f13ca692fa6805db88510e5bbb3baadb2da13e1293b738e638e15e4a8eb668bb9e97debb08e7a35409b477b5cc18f171d35a83045
+"node-polyfill-webpack-plugin@npm:^4.1.0":
+ version: 4.1.0
+ resolution: "node-polyfill-webpack-plugin@npm:4.1.0"
+ dependencies:
+ node-stdlib-browser: "npm:^1.3.0"
+ type-fest: "npm:^4.27.0"
+ peerDependencies:
+ webpack: ">=5"
+ checksum: 10/e6d76301e2fc081bf64d85a6451a7320e4c4a415fb1cd19bf27ef0cb6ae472de9cca449af4d5948890b84de0859217369dd66085db5fcecfe02af15de03767d7
+ languageName: node
+ linkType: hard
+
+"node-releases@npm:^2.0.36":
+ version: 2.0.44
+ resolution: "node-releases@npm:2.0.44"
+ checksum: 10/c6bc49ac7f0855820e3649e7a31386929f3a3b364e40ad9e9933a9ef0858f4e129a10316037482215dbfd2b1756b6e6759403687ad3d244cb14b442e34d3afb2
+ languageName: node
+ linkType: hard
+
+"node-stdlib-browser@npm:^1.3.0":
+ version: 1.3.1
+ resolution: "node-stdlib-browser@npm:1.3.1"
+ dependencies:
+ assert: "npm:^2.0.0"
+ browser-resolve: "npm:^2.0.0"
+ browserify-zlib: "npm:^0.2.0"
+ buffer: "npm:^5.7.1"
+ console-browserify: "npm:^1.1.0"
+ constants-browserify: "npm:^1.0.0"
+ create-require: "npm:^1.1.1"
+ crypto-browserify: "npm:^3.12.1"
+ domain-browser: "npm:4.22.0"
+ events: "npm:^3.0.0"
+ https-browserify: "npm:^1.0.0"
+ isomorphic-timers-promises: "npm:^1.0.1"
+ os-browserify: "npm:^0.3.0"
+ path-browserify: "npm:^1.0.1"
+ pkg-dir: "npm:^5.0.0"
+ process: "npm:^0.11.10"
+ punycode: "npm:^1.4.1"
+ querystring-es3: "npm:^0.2.1"
+ readable-stream: "npm:^3.6.0"
+ stream-browserify: "npm:^3.0.0"
+ stream-http: "npm:^3.2.0"
+ string_decoder: "npm:^1.0.0"
+ timers-browserify: "npm:^2.0.4"
+ tty-browserify: "npm:0.0.1"
+ url: "npm:^0.11.4"
+ util: "npm:^0.12.4"
+ vm-browserify: "npm:^1.0.1"
+ checksum: 10/5d5ace50868ef1a8ce9718a5fc64e4b6712f8be75bf6ab71f2eb7b5815f55f20507e427eac2fdb384e372f58891eb34089af3b55d3f9b5b60b547c8581a1c30e
languageName: node
linkType: hard
@@ -7746,7 +9667,7 @@ __metadata:
languageName: node
linkType: hard
-"normalize-package-data@npm:^2.0.0, normalize-package-data@npm:^2.3.2, normalize-package-data@npm:^2.5.0":
+"normalize-package-data@npm:^2.0.0":
version: 2.5.0
resolution: "normalize-package-data@npm:2.5.0"
dependencies:
@@ -7758,18 +9679,6 @@ __metadata:
languageName: node
linkType: hard
-"normalize-package-data@npm:^3.0.0, normalize-package-data@npm:^3.0.3":
- version: 3.0.3
- resolution: "normalize-package-data@npm:3.0.3"
- dependencies:
- hosted-git-info: "npm:^4.0.1"
- is-core-module: "npm:^2.5.0"
- semver: "npm:^7.3.4"
- validate-npm-package-license: "npm:^3.0.1"
- checksum: 10/3cd3b438c9c7b15d72ed2d1bbf0f8cc2d07bfe27702fc9e95d039f0af4e069dc75c0646e75068f9f9255a8aae64b59aa4fe2177e65787145fb996c3d38d48acb
- languageName: node
- linkType: hard
-
"normalize-package-data@npm:^6.0.0":
version: 6.0.2
resolution: "normalize-package-data@npm:6.0.2"
@@ -7781,22 +9690,13 @@ __metadata:
languageName: node
linkType: hard
-"normalize-path@npm:3.0.0, normalize-path@npm:^3.0.0":
+"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0":
version: 3.0.0
resolution: "normalize-path@npm:3.0.0"
checksum: 10/88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20
languageName: node
linkType: hard
-"now-and-later@npm:^3.0.0":
- version: 3.0.0
- resolution: "now-and-later@npm:3.0.0"
- dependencies:
- once: "npm:^1.4.0"
- checksum: 10/5300d42932bac5d4f8d19bf90ebb53c3474ba615eab912770d1b8de896baea6dc7ef3b95158aaf601acfb0cd6b573bceb5fe30cf0224cb06ea227ef3e8fc7f3d
- languageName: node
- linkType: hard
-
"npm-normalize-package-bin@npm:^1.0.0":
version: 1.0.1
resolution: "npm-normalize-package-bin@npm:1.0.1"
@@ -7813,6 +9713,16 @@ __metadata:
languageName: node
linkType: hard
+"npm-run-path@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "npm-run-path@npm:6.0.0"
+ dependencies:
+ path-key: "npm:^4.0.0"
+ unicorn-magic: "npm:^0.3.0"
+ checksum: 10/1a1b50aba6e6af7fd34a860ba2e252e245c4a59b316571a990356417c0cdf0414cabf735f7f52d9c330899cb56f0ab804a8e21fb12a66d53d7843e39ada4a3b6
+ languageName: node
+ linkType: hard
+
"ntp-client@npm:^0.5.3":
version: 0.5.3
resolution: "ntp-client@npm:0.5.3"
@@ -7822,6 +9732,13 @@ __metadata:
languageName: node
linkType: hard
+"object-assign@npm:^4":
+ version: 4.1.1
+ resolution: "object-assign@npm:4.1.1"
+ checksum: 10/fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f
+ languageName: node
+ linkType: hard
+
"object-filter-sequence@npm:^1.0.0":
version: 1.0.0
resolution: "object-filter-sequence@npm:1.0.0"
@@ -7892,6 +9809,13 @@ __metadata:
languageName: node
linkType: hard
+"obuf@npm:^1.0.0, obuf@npm:^1.1.2":
+ version: 1.1.2
+ resolution: "obuf@npm:1.1.2"
+ checksum: 10/53ff4ab3a13cc33ba6c856cf281f2965c0aec9720967af450e8fd06cfd50aceeefc791986a16bcefa14e7898b3ca9acdfcf15b9d9a1b9c7e1366581a8ad6e65e
+ languageName: node
+ linkType: hard
+
"on-exit-leak-free@npm:^2.1.0":
version: 2.1.2
resolution: "on-exit-leak-free@npm:2.1.2"
@@ -7908,6 +9832,13 @@ __metadata:
languageName: node
linkType: hard
+"on-headers@npm:~1.1.0":
+ version: 1.1.0
+ resolution: "on-headers@npm:1.1.0"
+ checksum: 10/98aa64629f986fb8cc4517dd8bede73c980e31208cba97f4442c330959f60ced3dc6214b83420491f5111fc7c4f4343abe2ea62c85f505cf041d67850f238776
+ languageName: node
+ linkType: hard
+
"once@npm:^1.3.0, once@npm:^1.4.0":
version: 1.4.0
resolution: "once@npm:1.4.0"
@@ -7935,6 +9866,15 @@ __metadata:
languageName: node
linkType: hard
+"onetime@npm:^7.0.0":
+ version: 7.0.0
+ resolution: "onetime@npm:7.0.0"
+ dependencies:
+ mimic-function: "npm:^5.0.0"
+ checksum: 10/eb08d2da9339819e2f9d52cab9caf2557d80e9af8c7d1ae86e1a0fef027d00a88e9f5bd67494d350df360f7c559fbb44e800b32f310fb989c860214eacbb561c
+ languageName: node
+ linkType: hard
+
"only@npm:~0.0.2":
version: 0.0.2
resolution: "only@npm:0.0.2"
@@ -7942,30 +9882,52 @@ __metadata:
languageName: node
linkType: hard
-"open-cli@npm:^8.0.0":
- version: 8.0.0
- resolution: "open-cli@npm:8.0.0"
+"open-cli@npm:^9.0.0":
+ version: 9.0.0
+ resolution: "open-cli@npm:9.0.0"
dependencies:
- file-type: "npm:^18.7.0"
- get-stdin: "npm:^9.0.0"
- meow: "npm:^12.1.1"
- open: "npm:^10.0.0"
- tempy: "npm:^3.1.0"
+ file-type: "npm:^21.3.4"
+ meow: "npm:^14.1.0"
+ open: "npm:^11.0.0"
+ tempy: "npm:^3.2.0"
bin:
open-cli: cli.js
- checksum: 10/2206724f05975c0a271c20e20de77877bc247cde89791a08e2bcc805766ae23a6eccf384dad7de20a44b285a164005decf4b16e3f9b91433be74d711ad207f7c
+ checksum: 10/a4b79287f20c87bdaf24d0add83c3a63d287cd157b7c5265e7d25be79bb448f341605bed9230e50df87ec4eb783ec1e2f756e4889a03e0dd19bb5ed5d221497b
languageName: node
linkType: hard
-"open@npm:^10.0.0":
- version: 10.1.0
- resolution: "open@npm:10.1.0"
+"open@npm:^10.0.3":
+ version: 10.2.0
+ resolution: "open@npm:10.2.0"
dependencies:
default-browser: "npm:^5.2.1"
define-lazy-prop: "npm:^3.0.0"
is-inside-container: "npm:^1.0.0"
- is-wsl: "npm:^3.1.0"
- checksum: 10/a9c4105243a1b3c5312bf2aeb678f78d31f00618b5100088ee01eed2769963ea1f2dd464ac8d93cef51bba2d911e1a9c0c34a753ec7b91d6b22795903ea6647a
+ wsl-utils: "npm:^0.1.0"
+ checksum: 10/e6ad9474734eac3549dcc7d85e952394856ccaee48107c453bd6a725b82e3b8ed5f427658935df27efa76b411aeef62888edea8a9e347e8e7c82632ec966b30e
+ languageName: node
+ linkType: hard
+
+"open@npm:^11.0.0":
+ version: 11.0.0
+ resolution: "open@npm:11.0.0"
+ dependencies:
+ default-browser: "npm:^5.4.0"
+ define-lazy-prop: "npm:^3.0.0"
+ is-in-ssh: "npm:^1.0.0"
+ is-inside-container: "npm:^1.0.0"
+ powershell-utils: "npm:^0.1.0"
+ wsl-utils: "npm:^0.3.0"
+ checksum: 10/d4572cd0c1f40fe1713edce9e3812367acbfaac0e909a68be0ee0b5acf4ee0a567d01d432dc2d708a55aab684002ab47fe13c679213fb749fe096b77a5d8e51b
+ languageName: node
+ linkType: hard
+
+"opener@npm:^1.5.2":
+ version: 1.5.2
+ resolution: "opener@npm:1.5.2"
+ bin:
+ opener: bin/opener-bin.js
+ checksum: 10/0504efcd6546e14c016a261f58a68acf9f2e5c23d84865d7d5470d5169788327ceaa5386253682f533b3fba4821748aa37ecb395f3dae7acb3261b9b22e36814
languageName: node
linkType: hard
@@ -7990,6 +9952,22 @@ __metadata:
languageName: node
linkType: hard
+"ora@npm:^9.4.0":
+ version: 9.4.0
+ resolution: "ora@npm:9.4.0"
+ dependencies:
+ chalk: "npm:^5.6.2"
+ cli-cursor: "npm:^5.0.0"
+ cli-spinners: "npm:^3.2.0"
+ is-interactive: "npm:^2.0.0"
+ is-unicode-supported: "npm:^2.1.0"
+ log-symbols: "npm:^7.0.1"
+ stdin-discarder: "npm:^0.3.2"
+ string-width: "npm:^8.1.0"
+ checksum: 10/48fe48f98764d1132a77d845862fab1b1f8d7aacd4c38c39ad42a874a55686c5949194eeb836a7ee4c43027a471ffb93937eff69f4db7353d6800b678073de55
+ languageName: node
+ linkType: hard
+
"original-url@npm:^1.2.3":
version: 1.2.3
resolution: "original-url@npm:1.2.3"
@@ -8030,6 +10008,13 @@ __metadata:
languageName: node
linkType: hard
+"p-from-callback@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "p-from-callback@npm:2.0.0"
+ checksum: 10/34adbfd0d5ddcb48244f18060180fa93c0248243d9b96d62b626ca788f41b99dca004502c6f0af8cb199ca368855836c94a8fabfbaaaa04e6087f06b60491442
+ languageName: node
+ linkType: hard
+
"p-lazy@npm:^3.1.0":
version: 3.1.0
resolution: "p-lazy@npm:3.1.0"
@@ -8037,15 +10022,6 @@ __metadata:
languageName: node
linkType: hard
-"p-limit@npm:^1.1.0":
- version: 1.3.0
- resolution: "p-limit@npm:1.3.0"
- dependencies:
- p-try: "npm:^1.0.0"
- checksum: 10/eb9d9bc378d48ab1998d2a2b2962a99eddd3e3726c82d3258ecc1a475f22907968edea4fec2736586d100366a001c6bb449a2abe6cd65e252e9597394f01e789
- languageName: node
- linkType: hard
-
"p-limit@npm:^2.0.0, p-limit@npm:^2.2.0":
version: 2.3.0
resolution: "p-limit@npm:2.3.0"
@@ -8064,15 +10040,6 @@ __metadata:
languageName: node
linkType: hard
-"p-locate@npm:^2.0.0":
- version: 2.0.0
- resolution: "p-locate@npm:2.0.0"
- dependencies:
- p-limit: "npm:^1.1.0"
- checksum: 10/e2dceb9b49b96d5513d90f715780f6f4972f46987dc32a0e18bc6c3fc74a1a5d73ec5f81b1398af5e58b99ea1ad03fd41e9181c01fa81b4af2833958696e3081
- languageName: node
- linkType: hard
-
"p-locate@npm:^3.0.0":
version: 3.0.0
resolution: "p-locate@npm:3.0.0"
@@ -8107,17 +10074,31 @@ __metadata:
languageName: node
linkType: hard
-"p-timeout@npm:^4.1.0":
- version: 4.1.0
- resolution: "p-timeout@npm:4.1.0"
- checksum: 10/321fec524c23a754e3f1487f2b0a5516fd32aba960d5610490eac56f8a0114b549a93f9919ffc05aa68956dc52e8330e0519f3ddf951d208d19c845f9cd778de
+"p-retry@npm:^4.6.2":
+ version: 4.6.2
+ resolution: "p-retry@npm:4.6.2"
+ dependencies:
+ "@types/retry": "npm:0.12.0"
+ retry: "npm:^0.13.1"
+ checksum: 10/45c270bfddaffb4a895cea16cb760dcc72bdecb6cb45fef1971fa6ea2e91ddeafddefe01e444ac73e33b1b3d5d29fb0dd18a7effb294262437221ddc03ce0f2e
languageName: node
linkType: hard
-"p-try@npm:^1.0.0":
- version: 1.0.0
- resolution: "p-try@npm:1.0.0"
- checksum: 10/20d9735f57258158df50249f172c77fe800d31e80f11a3413ac9e68ccbe6b11798acb3f48f2df8cea7ba2b56b753ce695a4fe2a2987c3c7691c44226b6d82b6f
+"p-retry@npm:^6.2.0":
+ version: 6.2.1
+ resolution: "p-retry@npm:6.2.1"
+ dependencies:
+ "@types/retry": "npm:0.12.2"
+ is-network-error: "npm:^1.0.0"
+ retry: "npm:^0.13.1"
+ checksum: 10/7104ef13703b155d70883b0d3654ecc03148407d2711a4516739cf93139e8bec383451e14925e25e3c1ae04dbace3ed53c26dc3853c1e9b9867fcbdde25f4cdc
+ languageName: node
+ linkType: hard
+
+"p-timeout@npm:^4.1.0":
+ version: 4.1.0
+ resolution: "p-timeout@npm:4.1.0"
+ checksum: 10/321fec524c23a754e3f1487f2b0a5516fd32aba960d5610490eac56f8a0114b549a93f9919ffc05aa68956dc52e8330e0519f3ddf951d208d19c845f9cd778de
languageName: node
linkType: hard
@@ -8151,31 +10132,20 @@ __metadata:
languageName: node
linkType: hard
-"parse-asn1@npm:^5.0.0, parse-asn1@npm:^5.1.7":
- version: 5.1.7
- resolution: "parse-asn1@npm:5.1.7"
+"parse-asn1@npm:^5.0.0, parse-asn1@npm:^5.1.7, parse-asn1@npm:^5.1.9":
+ version: 5.1.9
+ resolution: "parse-asn1@npm:5.1.9"
dependencies:
asn1.js: "npm:^4.10.1"
browserify-aes: "npm:^1.2.0"
evp_bytestokey: "npm:^1.0.3"
- hash-base: "npm:~3.0"
- pbkdf2: "npm:^3.1.2"
+ pbkdf2: "npm:^3.1.5"
safe-buffer: "npm:^5.2.1"
- checksum: 10/f82c079f4d9a4d33159c7682f9c516680f4d659fde8060697a6b3c1be4795976e826d53a1e5751a81ddc800e9c6d6fa4629b59f6d1f3241ac8447a00c89a67d3
- languageName: node
- linkType: hard
-
-"parse-json@npm:^4.0.0":
- version: 4.0.0
- resolution: "parse-json@npm:4.0.0"
- dependencies:
- error-ex: "npm:^1.3.1"
- json-parse-better-errors: "npm:^1.0.1"
- checksum: 10/0fe227d410a61090c247e34fa210552b834613c006c2c64d9a05cfe9e89cf8b4246d1246b1a99524b53b313e9ac024438d0680f67e33eaed7e6f38db64cfe7b5
+ checksum: 10/bc3d616a8076fa8a9a34cab8af6905859a1bafd0c49c98132acc7d29b779c2b81d4a8fc610f5bedc9770cc4bfc323f7c939ad7413e9df6ba60cb931010c42f52
languageName: node
linkType: hard
-"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0":
+"parse-json@npm:^5.2.0":
version: 5.2.0
resolution: "parse-json@npm:5.2.0"
dependencies:
@@ -8198,21 +10168,21 @@ __metadata:
languageName: node
linkType: hard
-"parse5@npm:^6.0.0":
- version: 6.0.1
- resolution: "parse5@npm:6.0.1"
- checksum: 10/dfb110581f62bd1425725a7c784ae022a24669bd0efc24b58c71fc731c4d868193e2ebd85b74cde2dbb965e4dcf07059b1e651adbec1b3b5267531bd132fdb75
+"parse-ms@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "parse-ms@npm:4.0.0"
+ checksum: 10/673c801d9f957ff79962d71ed5a24850163f4181a90dd30c4e3666b3a804f53b77f1f0556792e8b2adbb5d58757907d1aa51d7d7dc75997c2a56d72937cbc8b7
languageName: node
linkType: hard
-"parseurl@npm:^1.3.2, parseurl@npm:^1.3.3":
+"parseurl@npm:^1.3.2, parseurl@npm:^1.3.3, parseurl@npm:~1.3.3":
version: 1.3.3
resolution: "parseurl@npm:1.3.3"
checksum: 10/407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2
languageName: node
linkType: hard
-"path-browserify@npm:^1.0.1":
+"path-browserify@npm:1.0.1, path-browserify@npm:^1.0.1":
version: 1.0.1
resolution: "path-browserify@npm:1.0.1"
checksum: 10/7e7368a5207e7c6b9051ef045711d0dc3c2b6203e96057e408e6e74d09f383061010d2be95cb8593fe6258a767c3e9fc6b2bfc7ce8d48ae8c3d9f6994cca9ad8
@@ -8233,10 +10203,10 @@ __metadata:
languageName: node
linkType: hard
-"path-expression-matcher@npm:^1.1.3, path-expression-matcher@npm:^1.2.0":
- version: 1.2.0
- resolution: "path-expression-matcher@npm:1.2.0"
- checksum: 10/eab23babd9a97d6cf4841a99825c3e990b70b2b29ea6529df9fb6a1f3953befbc68e9e282a373d7a75aff5dc6542d05a09ee2df036ff9bfddf5e1627b769875b
+"path-expression-matcher@npm:^1.5.0":
+ version: 1.5.0
+ resolution: "path-expression-matcher@npm:1.5.0"
+ checksum: 10/28303bb9ee6831e6df14c10cd3f3f7b2d7c8d7f788d8bdb7440136fd696064c82a3e264999a0764d28e39f698275fc03a5493bec93c57ef4a22566280367dd64
languageName: node
linkType: hard
@@ -8254,6 +10224,13 @@ __metadata:
languageName: node
linkType: hard
+"path-key@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "path-key@npm:4.0.0"
+ checksum: 10/8e6c314ae6d16b83e93032c61020129f6f4484590a777eed709c4a01b50e498822b00f76ceaf94bc64dbd90b327df56ceadce27da3d83393790f1219e07721d7
+ languageName: node
+ linkType: hard
+
"path-parse@npm:^1.0.7":
version: 1.0.7
resolution: "path-parse@npm:1.0.7"
@@ -8271,33 +10248,31 @@ __metadata:
languageName: node
linkType: hard
-"path-scurry@npm:^2.0.0":
- version: 2.0.0
- resolution: "path-scurry@npm:2.0.0"
+"path-scurry@npm:^2.0.2":
+ version: 2.0.2
+ resolution: "path-scurry@npm:2.0.2"
dependencies:
lru-cache: "npm:^11.0.0"
minipass: "npm:^7.1.2"
- checksum: 10/285ae0c2d6c34ae91dc1d5378ede21981c9a2f6de1ea9ca5a88b5a270ce9763b83dbadc7a324d512211d8d36b0c540427d3d0817030849d97a60fa840a2c59ec
+ checksum: 10/2b4257422bcb870a4c2d205b3acdbb213a72f5e2250f61c80f79c9d014d010f82bdf8584441612c8e1fa4eb098678f5704a66fa8377d72646bad4be38e57a2c3
languageName: node
linkType: hard
-"path-to-regexp@npm:^8.3.0":
- version: 8.4.1
- resolution: "path-to-regexp@npm:8.4.1"
- checksum: 10/5a2ac56dfcd091ac90c2275e830e45e5967d6aae5c87ef7ca8c9b5ce30b7c7e0e38ca78a339b00a6d1d53b13a39538b22a910ae1999417c4334d058a8c57c3e2
+"path-to-regexp@npm:^8.4.2":
+ version: 8.4.2
+ resolution: "path-to-regexp@npm:8.4.2"
+ checksum: 10/70fd2cbce0b962cbcf4d312af07818bfce2bae11c09cf3bd86be99c0e30168238a1a7b02b18b452e73f075897df04597d30d63e56da7be41eecfc37998693389
languageName: node
linkType: hard
-"path-type@npm:^3.0.0":
- version: 3.0.0
- resolution: "path-type@npm:3.0.0"
- dependencies:
- pify: "npm:^3.0.0"
- checksum: 10/735b35e256bad181f38fa021033b1c33cfbe62ead42bb2222b56c210e42938eecb272ae1949f3b6db4ac39597a61b44edd8384623ec4d79bfdc9a9c0f12537a6
+"path-to-regexp@npm:~0.1.12":
+ version: 0.1.13
+ resolution: "path-to-regexp@npm:0.1.13"
+ checksum: 10/f1e4bdedc4fd41a3b8dd76e8b2e1183105348c6b205badc072581ca63dc6aa7976a8a67feaffcf0e505f51ac12cb1a2de7f3fef3e9085b6849e76232d73ddcba
languageName: node
linkType: hard
-"pbkdf2@npm:^3.1.2":
+"pbkdf2@npm:^3.1.2, pbkdf2@npm:^3.1.5":
version: 3.1.5
resolution: "pbkdf2@npm:3.1.5"
dependencies:
@@ -8311,48 +10286,27 @@ __metadata:
languageName: node
linkType: hard
-"peek-readable@npm:^5.0.0":
- version: 5.0.0
- resolution: "peek-readable@npm:5.0.0"
- checksum: 10/d342f02dd0c8a6b4bd0e7519a93d545b2b19375200e79a7431f0f1ec3f91e22b2217fa3a15cde95f6ab388ce6fce8aae75794d84b9b39c5836eb7c5f55e7ee9e
- languageName: node
- linkType: hard
-
-"picocolors@npm:^1.1.1":
+"picocolors@npm:^1.0.0, picocolors@npm:^1.1.1":
version: 1.1.1
resolution: "picocolors@npm:1.1.1"
checksum: 10/e1cf46bf84886c79055fdfa9dcb3e4711ad259949e3565154b004b260cd356c5d54b31a1437ce9782624bf766272fe6b0154f5f0c744fb7af5d454d2b60db045
languageName: node
linkType: hard
-"picomatch@npm:^2.0.4, picomatch@npm:^2.3.1":
+"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1":
version: 2.3.2
resolution: "picomatch@npm:2.3.2"
checksum: 10/b788ef8148a2415b9dec12f0bb350ae6a5830f8f1950e472abc2f5225494debf7d1b75eb031df0ceaea9e8ec3e7bad599e8dbf3c60d61b42be429ba41bff4426
languageName: node
linkType: hard
-"picomatch@npm:^4.0.2, picomatch@npm:^4.0.3":
+"picomatch@npm:^4.0.2, picomatch@npm:^4.0.3, picomatch@npm:^4.0.4":
version: 4.0.4
resolution: "picomatch@npm:4.0.4"
checksum: 10/f6ef80a3590827ce20378ae110ac78209cc4f74d39236370f1780f957b7ee41c12acde0e4651b90f39983506fd2f5e449994716f516db2e9752924aff8de93ce
languageName: node
linkType: hard
-"pify@npm:^2.3.0":
- version: 2.3.0
- resolution: "pify@npm:2.3.0"
- checksum: 10/9503aaeaf4577acc58642ad1d25c45c6d90288596238fb68f82811c08104c800e5a7870398e9f015d82b44ecbcbef3dc3d4251a1cbb582f6e5959fe09884b2ba
- languageName: node
- linkType: hard
-
-"pify@npm:^3.0.0":
- version: 3.0.0
- resolution: "pify@npm:3.0.0"
- checksum: 10/668c1dc8d9fc1b34b9ce3b16ba59deb39d4dc743527bf2ed908d2b914cb8ba40aa5ba6960b27c417c241531c5aafd0598feeac2d50cb15278cf9863fa6b02a77
- languageName: node
- linkType: hard
-
"pino-abstract-transport@npm:^1.2.0":
version: 1.2.0
resolution: "pino-abstract-transport@npm:1.2.0"
@@ -8407,6 +10361,15 @@ __metadata:
languageName: node
linkType: hard
+"pkg-dir@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "pkg-dir@npm:5.0.0"
+ dependencies:
+ find-up: "npm:^5.0.0"
+ checksum: 10/b167bb8dac7bbf22b1d5e30ec223e6b064b84b63010c9d49384619a36734caf95ed23ad23d4f9bd975e8e8082b60a83395f43a89bb192df53a7c25a38ecb57d9
+ languageName: node
+ linkType: hard
+
"possible-typed-array-names@npm:^1.0.0":
version: 1.1.0
resolution: "possible-typed-array-names@npm:1.1.0"
@@ -8414,6 +10377,13 @@ __metadata:
languageName: node
linkType: hard
+"powershell-utils@npm:^0.1.0":
+ version: 0.1.0
+ resolution: "powershell-utils@npm:0.1.0"
+ checksum: 10/4cc0846bc903ef9c8ac8cc9d178185d5972160a6c8776d44cf4c27ce31c0b614fc7cd20a53e8fcaf7f5296cdb34087a5d4396bdd863492972c84f76f3cadef67
+ languageName: node
+ linkType: hard
+
"prelude-ls@npm:^1.2.1":
version: 1.2.1
resolution: "prelude-ls@npm:1.2.1"
@@ -8421,32 +10391,42 @@ __metadata:
languageName: node
linkType: hard
-"prettier-linter-helpers@npm:^1.0.0":
- version: 1.0.0
- resolution: "prettier-linter-helpers@npm:1.0.0"
+"prettier-linter-helpers@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "prettier-linter-helpers@npm:1.0.1"
dependencies:
fast-diff: "npm:^1.1.2"
- checksum: 10/00ce8011cf6430158d27f9c92cfea0a7699405633f7f1d4a45f07e21bf78e99895911cbcdc3853db3a824201a7c745bd49bfea8abd5fb9883e765a90f74f8392
+ checksum: 10/2dc35f5036a35f4c4f5e645887edda1436acb63687a7f12b2383e0a6f3c1f76b8a0a4709fe4d82e19157210feb5984b159bb714d43290022911ab53d606474ec
languageName: node
linkType: hard
-"prettier@npm:^3.8.1":
- version: 3.8.1
- resolution: "prettier@npm:3.8.1"
+"prettier@npm:^3.8.4":
+ version: 3.8.4
+ resolution: "prettier@npm:3.8.4"
bin:
prettier: bin/prettier.cjs
- checksum: 10/3da1cf8c1ef9bea828aa618553696c312e951f810bee368f6887109b203f18ee869fe88f66e65f9cf60b7cb1f2eae859892c860a300c062ff8ec69c381fc8dbd
+ checksum: 10/54684a3cc6689238692b29fab541c01934af7677be94c02293ba49981a1ac121c8bebe2a865f0c3b963e99d208f847c53aed354cc0ce8750e2d45791d64506c5
languageName: node
linkType: hard
-"pretty-format@npm:30.2.0, pretty-format@npm:^30.0.0":
- version: 30.2.0
- resolution: "pretty-format@npm:30.2.0"
+"pretty-format@npm:30.4.1, pretty-format@npm:^30.0.0":
+ version: 30.4.1
+ resolution: "pretty-format@npm:30.4.1"
dependencies:
- "@jest/schemas": "npm:30.0.5"
+ "@jest/schemas": "npm:30.4.1"
ansi-styles: "npm:^5.2.0"
- react-is: "npm:^18.3.1"
- checksum: 10/725890d648e3400575eebc99a334a4cd1498e0d36746313913706bbeea20ada27e17c184a3cd45c50f705c16111afa829f3450233fc0fda5eed293c69757e926
+ react-is-18: "npm:react-is@^18.3.1"
+ react-is-19: "npm:react-is@^19.2.5"
+ checksum: 10/60311ef47a646eeaec0432efe66290cb6f0d2eccb123a28ad4ab6d7e53087bc62db91cfd54c3cc00c89d6875aefb2bf6264381b6c9411ce6bff3d6aa8280abad
+ languageName: node
+ linkType: hard
+
+"pretty-ms@npm:^9.2.0":
+ version: 9.3.0
+ resolution: "pretty-ms@npm:9.3.0"
+ dependencies:
+ parse-ms: "npm:^4.0.0"
+ checksum: 10/beb4e04dc17071885b827e3f33d36be279791f2f36a8c29a45c77e59979dad79a5d7e5211922c72a3f6f109bb64a707d70fcdba6746e077122afcd88ce202e98
languageName: node
linkType: hard
@@ -8498,10 +10478,20 @@ __metadata:
languageName: node
linkType: hard
-"proxy-from-env@npm:^1.1.0":
- version: 1.1.0
- resolution: "proxy-from-env@npm:1.1.0"
- checksum: 10/f0bb4a87cfd18f77bc2fba23ae49c3b378fb35143af16cc478171c623eebe181678f09439707ad80081d340d1593cd54a33a0113f3ccb3f4bc9451488780ee23
+"proxy-addr@npm:~2.0.7":
+ version: 2.0.7
+ resolution: "proxy-addr@npm:2.0.7"
+ dependencies:
+ forwarded: "npm:0.2.0"
+ ipaddr.js: "npm:1.9.1"
+ checksum: 10/f24a0c80af0e75d31e3451398670d73406ec642914da11a2965b80b1898ca6f66a0e3e091a11a4327079b2b268795f6fa06691923fef91887215c3d0e8ea3f68
+ languageName: node
+ linkType: hard
+
+"proxy-from-env@npm:^2.1.0":
+ version: 2.1.0
+ resolution: "proxy-from-env@npm:2.1.0"
+ checksum: 10/fbbaf4dab2a6231dc9e394903a5f66f20475e36b734335790b46feb9da07c37d6b32e2c02e3e2ea4d4b23774c53d8562e5b7cc73282cb43f4a597b7eacaee2ee
languageName: node
linkType: hard
@@ -8540,12 +10530,12 @@ __metadata:
languageName: node
linkType: hard
-"qs@npm:^6.12.3, qs@npm:^6.5.2, qs@npm:~6.14.0":
- version: 6.14.2
- resolution: "qs@npm:6.14.2"
+"qs@npm:^6.12.3, qs@npm:^6.5.2, qs@npm:~6.15.1":
+ version: 6.15.2
+ resolution: "qs@npm:6.15.2"
dependencies:
side-channel: "npm:^1.1.0"
- checksum: 10/682933a85bb4b7bd0d66e13c0a40d9e612b5e4bcc2cb9238f711a9368cd22d91654097a74fff93551e58146db282c56ac094957dfdc60ce64ea72c3c9d7779ac
+ checksum: 10/7a934b2dba40654cf9878dab7c1e7ad56c6186265509727fbece67dadc38fd5d67715b61b6ef938e5a0475faeee701d18ec0a7ce420ad64367caad7f1bdb66e2
languageName: node
linkType: hard
@@ -8563,20 +10553,6 @@ __metadata:
languageName: node
linkType: hard
-"queue-microtask@npm:^1.2.2":
- version: 1.2.3
- resolution: "queue-microtask@npm:1.2.3"
- checksum: 10/72900df0616e473e824202113c3df6abae59150dfb73ed13273503127235320e9c8ca4aaaaccfd58cf417c6ca92a6e68ee9a5c3182886ae949a768639b388a7b
- languageName: node
- linkType: hard
-
-"queue-tick@npm:^1.0.1":
- version: 1.0.1
- resolution: "queue-tick@npm:1.0.1"
- checksum: 10/f447926c513b64a857906f017a3b350f7d11277e3c8d2a21a42b7998fa1a613d7a829091e12d142bb668905c8f68d8103416c7197856efb0c72fa835b8e254b5
- languageName: node
- linkType: hard
-
"quick-format-unescaped@npm:^4.0.3":
version: 4.0.4
resolution: "quick-format-unescaped@npm:4.0.4"
@@ -8584,13 +10560,6 @@ __metadata:
languageName: node
linkType: hard
-"quick-lru@npm:^4.0.1":
- version: 4.0.1
- resolution: "quick-lru@npm:4.0.1"
- checksum: 10/5c7c75f1c696750f619b165cc9957382f919e4207dabf04597a64f0298861391cdc5ee91a1dde1a5d460ecf7ee1af7fc36fef6d155bef2be66f05d43fd63d4f0
- languageName: node
- linkType: hard
-
"randombytes@npm:^2.0.0, randombytes@npm:^2.0.1, randombytes@npm:^2.0.5, randombytes@npm:^2.1.0":
version: 2.1.0
resolution: "randombytes@npm:2.1.0"
@@ -8610,7 +10579,7 @@ __metadata:
languageName: node
linkType: hard
-"range-parser@npm:^1.2.0":
+"range-parser@npm:^1.2.0, range-parser@npm:^1.2.1, range-parser@npm:~1.2.1":
version: 1.2.1
resolution: "range-parser@npm:1.2.1"
checksum: 10/ce21ef2a2dd40506893157970dc76e835c78cf56437e26e19189c48d5291e7279314477b06ac38abd6a401b661a6840f7b03bd0b1249da9b691deeaa15872c26
@@ -8629,13 +10598,49 @@ __metadata:
languageName: node
linkType: hard
-"react-is@npm:^18.3.1":
+"react-i18next@npm:^17.0.8":
+ version: 17.0.8
+ resolution: "react-i18next@npm:17.0.8"
+ dependencies:
+ "@babel/runtime": "npm:^7.29.2"
+ html-parse-stringify: "npm:^3.0.1"
+ use-sync-external-store: "npm:^1.6.0"
+ peerDependencies:
+ i18next: ">= 26.2.0"
+ react: ">= 16.8.0"
+ typescript: ^5 || ^6
+ peerDependenciesMeta:
+ react-dom:
+ optional: true
+ react-native:
+ optional: true
+ typescript:
+ optional: true
+ checksum: 10/7ac39b9b38ae2e572b6ffcf1e2e3ef9479daef9cd4c51e2e16464b5e0e641a55d16b2a5988fc99da8f749a63c8bb21a6ebf810182c22fb63cc7a18fbbd6334dd
+ languageName: node
+ linkType: hard
+
+"react-is-18@npm:react-is@^18.3.1":
version: 18.3.1
resolution: "react-is@npm:18.3.1"
checksum: 10/d5f60c87d285af24b1e1e7eaeb123ec256c3c8bdea7061ab3932e3e14685708221bf234ec50b21e10dd07f008f1b966a2730a0ce4ff67905b3872ff2042aec22
languageName: node
linkType: hard
+"react-is-19@npm:react-is@^19.2.5":
+ version: 19.2.7
+ resolution: "react-is@npm:19.2.7"
+ checksum: 10/ae0d3ae7638aa2fa2a82a78a817daf2806e57fa0aef357d07e1e8d1e9a301902e5967168e9334b5816db0df8fa980a725cd57569ba5a9e6e76a71e117b18be04
+ languageName: node
+ linkType: hard
+
+"react@npm:^19.2.7":
+ version: 19.2.7
+ resolution: "react@npm:19.2.7"
+ checksum: 10/2939997e87d7f0ee0d9d2bb556866b616b999dfb7916283647034eda867a045a39c4f7a736c8ea6beffffcd78397fc30f63a7a3aaf8425b683c3060670859560
+ languageName: node
+ linkType: hard
+
"read-installed@npm:~4.0.3":
version: 4.0.3
resolution: "read-installed@npm:4.0.3"
@@ -8677,50 +10682,6 @@ __metadata:
languageName: node
linkType: hard
-"read-pkg-up@npm:^3.0.0":
- version: 3.0.0
- resolution: "read-pkg-up@npm:3.0.0"
- dependencies:
- find-up: "npm:^2.0.0"
- read-pkg: "npm:^3.0.0"
- checksum: 10/16175573f2914ab9788897bcbe2a62b5728d0075e62285b3680cebe97059e2911e0134a062cf6e51ebe3e3775312bc788ac2039ed6af38ec68d2c10c6f2b30fb
- languageName: node
- linkType: hard
-
-"read-pkg-up@npm:^7.0.1":
- version: 7.0.1
- resolution: "read-pkg-up@npm:7.0.1"
- dependencies:
- find-up: "npm:^4.1.0"
- read-pkg: "npm:^5.2.0"
- type-fest: "npm:^0.8.1"
- checksum: 10/e4e93ce70e5905b490ca8f883eb9e48b5d3cebc6cd4527c25a0d8f3ae2903bd4121c5ab9c5a3e217ada0141098eeb661313c86fa008524b089b8ed0b7f165e44
- languageName: node
- linkType: hard
-
-"read-pkg@npm:^3.0.0":
- version: 3.0.0
- resolution: "read-pkg@npm:3.0.0"
- dependencies:
- load-json-file: "npm:^4.0.0"
- normalize-package-data: "npm:^2.3.2"
- path-type: "npm:^3.0.0"
- checksum: 10/398903ebae6c7e9965419a1062924436cc0b6f516c42c4679a90290d2f87448ed8f977e7aa2dbba4aa1ac09248628c43e493ac25b2bc76640e946035200e34c6
- languageName: node
- linkType: hard
-
-"read-pkg@npm:^5.2.0":
- version: 5.2.0
- resolution: "read-pkg@npm:5.2.0"
- dependencies:
- "@types/normalize-package-data": "npm:^2.4.0"
- normalize-package-data: "npm:^2.5.0"
- parse-json: "npm:^5.0.0"
- type-fest: "npm:^0.6.0"
- checksum: 10/eb696e60528b29aebe10e499ba93f44991908c57d70f2d26f369e46b8b9afc208ef11b4ba64f67630f31df8b6872129e0a8933c8c53b7b4daf0eace536901222
- languageName: node
- linkType: hard
-
"read-pkg@npm:^9.0.0":
version: 9.0.1
resolution: "read-pkg@npm:9.0.1"
@@ -8734,18 +10695,7 @@ __metadata:
languageName: node
linkType: hard
-"readable-stream@npm:3, readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.2, readable-stream@npm:^3.0.6, readable-stream@npm:^3.4.0, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0, readable-stream@npm:^3.6.2":
- version: 3.6.2
- resolution: "readable-stream@npm:3.6.2"
- dependencies:
- inherits: "npm:^2.0.3"
- string_decoder: "npm:^1.1.1"
- util-deprecate: "npm:^1.0.1"
- checksum: 10/d9e3e53193adcdb79d8f10f2a1f6989bd4389f5936c6f8b870e77570853561c362bee69feca2bbb7b32368ce96a85504aa4cedf7cf80f36e6a9de30d64244048
- languageName: node
- linkType: hard
-
-"readable-stream@npm:^2.3.8, readable-stream@npm:~2.3.6":
+"readable-stream@npm:^2.0.1, readable-stream@npm:^2.3.8":
version: 2.3.8
resolution: "readable-stream@npm:2.3.8"
dependencies:
@@ -8760,25 +10710,27 @@ __metadata:
languageName: node
linkType: hard
-"readable-stream@npm:^4.0.0":
- version: 4.5.2
- resolution: "readable-stream@npm:4.5.2"
+"readable-stream@npm:^3.0.6, readable-stream@npm:^3.4.0, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0, readable-stream@npm:^3.6.2":
+ version: 3.6.2
+ resolution: "readable-stream@npm:3.6.2"
+ dependencies:
+ inherits: "npm:^2.0.3"
+ string_decoder: "npm:^1.1.1"
+ util-deprecate: "npm:^1.0.1"
+ checksum: 10/d9e3e53193adcdb79d8f10f2a1f6989bd4389f5936c6f8b870e77570853561c362bee69feca2bbb7b32368ce96a85504aa4cedf7cf80f36e6a9de30d64244048
+ languageName: node
+ linkType: hard
+
+"readable-stream@npm:^4.0.0, readable-stream@npm:^4.5.2":
+ version: 4.7.0
+ resolution: "readable-stream@npm:4.7.0"
dependencies:
abort-controller: "npm:^3.0.0"
buffer: "npm:^6.0.3"
events: "npm:^3.3.0"
process: "npm:^0.11.10"
string_decoder: "npm:^1.3.0"
- checksum: 10/01b128a559c5fd76a898495f858cf0a8839f135e6a69e3409f986e88460134791657eb46a2ff16826f331682a3c4d0c5a75cef5e52ef259711021ba52b1c2e82
- languageName: node
- linkType: hard
-
-"readable-web-to-node-stream@npm:^3.0.2":
- version: 3.0.2
- resolution: "readable-web-to-node-stream@npm:3.0.2"
- dependencies:
- readable-stream: "npm:^3.6.0"
- checksum: 10/d3a5bf9d707c01183d546a64864aa63df4d9cb835dfd2bf89ac8305e17389feef2170c4c14415a10d38f9b9bfddf829a57aaef7c53c8b40f11d499844bf8f1a4
+ checksum: 10/bdf096c8ff59452ce5d08f13da9597f9fcfe400b4facfaa88e74ec057e5ad1fdfa140ffe28e5ed806cf4d2055f0b812806e962bca91dce31bc4cef08e53be3a4
languageName: node
linkType: hard
@@ -8794,20 +10746,26 @@ __metadata:
languageName: node
linkType: hard
-"real-require@npm:^0.2.0":
- version: 0.2.0
- resolution: "real-require@npm:0.2.0"
- checksum: 10/ddf44ee76301c774e9c9f2826da8a3c5c9f8fc87310f4a364e803ef003aa1a43c378b4323051ced212097fff1af459070f4499338b36a7469df1d4f7e8c0ba4c
+"readdirp@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "readdirp@npm:5.0.0"
+ checksum: 10/a17a591b51d8b912083660df159e8bd17305dc1a9ef27c869c818bd95ff59e3a6496f97e91e724ef433e789d559d24e39496ea1698822eb5719606dc9c1a923d
languageName: node
linkType: hard
-"redent@npm:^3.0.0":
- version: 3.0.0
- resolution: "redent@npm:3.0.0"
+"readdirp@npm:~3.6.0":
+ version: 3.6.0
+ resolution: "readdirp@npm:3.6.0"
dependencies:
- indent-string: "npm:^4.0.0"
- strip-indent: "npm:^3.0.0"
- checksum: 10/fa1ef20404a2d399235e83cc80bd55a956642e37dd197b4b612ba7327bf87fa32745aeb4a1634b2bab25467164ab4ed9c15be2c307923dd08b0fe7c52431ae6b
+ picomatch: "npm:^2.2.1"
+ checksum: 10/196b30ef6ccf9b6e18c4e1724b7334f72a093d011a99f3b5920470f0b3406a51770867b3e1ae9711f227ef7a7065982f6ee2ce316746b2cb42c88efe44297fe7
+ languageName: node
+ linkType: hard
+
+"real-require@npm:^0.2.0":
+ version: 0.2.0
+ resolution: "real-require@npm:0.2.0"
+ checksum: 10/ddf44ee76301c774e9c9f2826da8a3c5c9f8fc87310f4a364e803ef003aa1a43c378b4323051ced212097fff1af459070f4499338b36a7469df1d4f7e8c0ba4c
languageName: node
linkType: hard
@@ -8829,20 +10787,6 @@ __metadata:
languageName: node
linkType: hard
-"remove-trailing-separator@npm:^1.1.0":
- version: 1.1.0
- resolution: "remove-trailing-separator@npm:1.1.0"
- checksum: 10/d3c20b5a2d987db13e1cca9385d56ecfa1641bae143b620835ac02a6b70ab88f68f117a0021838db826c57b31373d609d52e4f31aca75fc490c862732d595419
- languageName: node
- linkType: hard
-
-"replace-ext@npm:^2.0.0":
- version: 2.0.0
- resolution: "replace-ext@npm:2.0.0"
- checksum: 10/ed640ac90d24cce4be977642847d138908d430049cc097633be33b072143515cc7d29699675a0c35f6dc3c3c73cb529ed352d59649cf15931740eb31ae083c1e
- languageName: node
- linkType: hard
-
"require-directory@npm:^2.1.1":
version: 2.1.1
resolution: "require-directory@npm:2.1.1"
@@ -8850,6 +10794,13 @@ __metadata:
languageName: node
linkType: hard
+"require-from-string@npm:^2.0.2":
+ version: 2.0.2
+ resolution: "require-from-string@npm:2.0.2"
+ checksum: 10/839a3a890102a658f4cb3e7b2aa13a1f80a3a976b512020c3d1efc418491c48a886b6e481ea56afc6c4cb5eef678f23b2a4e70575e7534eccadf5e30ed2e56eb
+ languageName: node
+ linkType: hard
+
"require-in-the-middle@npm:^8.0.0":
version: 8.0.1
resolution: "require-in-the-middle@npm:8.0.1"
@@ -8890,15 +10841,6 @@ __metadata:
languageName: node
linkType: hard
-"resolve-options@npm:^2.0.0":
- version: 2.0.0
- resolution: "resolve-options@npm:2.0.0"
- dependencies:
- value-or-function: "npm:^4.0.0"
- checksum: 10/b28584cc089099af42e36292c32bd9af8bc9e28e3ca73c172c0a172d7ed5afb01c75cc2275268c327dceba77a5555b33fbd55617be138874040279fe6ff02fbf
- languageName: node
- linkType: hard
-
"resolve-path@npm:^1.4.0":
version: 1.4.0
resolution: "resolve-path@npm:1.4.0"
@@ -8916,29 +10858,41 @@ __metadata:
languageName: node
linkType: hard
-"resolve@npm:^1.10.0":
- version: 1.22.6
- resolution: "resolve@npm:1.22.6"
+"resolve@npm:^1.10.0, resolve@npm:^1.17.0":
+ version: 1.22.12
+ resolution: "resolve@npm:1.22.12"
dependencies:
- is-core-module: "npm:^2.13.0"
+ es-errors: "npm:^1.3.0"
+ is-core-module: "npm:^2.16.1"
path-parse: "npm:^1.0.7"
supports-preserve-symlinks-flag: "npm:^1.0.0"
bin:
resolve: bin/resolve
- checksum: 10/b57acf016c94aded442f3c92dda4c4e9370ebe5b337ca2dbada3c022ce7c75cd20d5e31a855f884321c7379d6f2c7e640852024ae83f976e15367a1c4cf14de5
+ checksum: 10/1d2a081e4b7198e2a70abd7bbbf8aea5380c2d074b6c870035aab50ebfb7312b6492b3588e752faef83a75147862a3d3e09b222bc9afd536804181fd3a515ef9
languageName: node
linkType: hard
-"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin":
- version: 1.22.6
- resolution: "resolve@patch:resolve@npm%3A1.22.6#optional!builtin::version=1.22.6&hash=c3c19d"
+"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.17.0#optional!builtin":
+ version: 1.22.12
+ resolution: "resolve@patch:resolve@npm%3A1.22.12#optional!builtin::version=1.22.12&hash=c3c19d"
dependencies:
- is-core-module: "npm:^2.13.0"
+ es-errors: "npm:^1.3.0"
+ is-core-module: "npm:^2.16.1"
path-parse: "npm:^1.0.7"
supports-preserve-symlinks-flag: "npm:^1.0.0"
bin:
resolve: bin/resolve
- checksum: 10/d63580488eaffef80d16930ed76ffc786d6f51ac02e5821a8fb54a9c7bef4d355472123abdd36fbc0c68704495e09581f0feba75dc4b0b946818f96ece5c3e2a
+ checksum: 10/f80ad2c2b6820331cbe079198a184ffce322cfeca140065118066276bc08b03d5fa2c1ce652aeb584ec74050d1f656f46f034cc0dd9300452c5ab7866907f8c0
+ languageName: node
+ linkType: hard
+
+"restore-cursor@npm:^5.0.0":
+ version: 5.1.0
+ resolution: "restore-cursor@npm:5.1.0"
+ dependencies:
+ onetime: "npm:^7.0.0"
+ signal-exit: "npm:^4.1.0"
+ checksum: 10/838dd54e458d89cfbc1a923b343c1b0f170a04100b4ce1733e97531842d7b440463967e521216e8ab6c6f8e89df877acc7b7f4c18ec76e99fb9bf5a60d358d2c
languageName: node
linkType: hard
@@ -8949,10 +10903,10 @@ __metadata:
languageName: node
linkType: hard
-"reusify@npm:^1.0.4":
- version: 1.0.4
- resolution: "reusify@npm:1.0.4"
- checksum: 10/14222c9e1d3f9ae01480c50d96057228a8524706db79cdeb5a2ce5bb7070dd9f409a6f84a02cbef8cdc80d39aef86f2dd03d155188a1300c599b05437dcd2ffb
+"retry@npm:^0.13.1":
+ version: 0.13.1
+ resolution: "retry@npm:0.13.1"
+ checksum: 10/6125ec2e06d6e47e9201539c887defba4e47f63471db304c59e4b82fc63c8e89ca06a77e9d34939a9a42a76f00774b2f46c0d4a4cbb3e287268bd018ed69426d
languageName: node
linkType: hard
@@ -8966,6 +10920,13 @@ __metadata:
languageName: node
linkType: hard
+"rslog@npm:^1.3.2":
+ version: 1.3.2
+ resolution: "rslog@npm:1.3.2"
+ checksum: 10/69f575564ac93be5e3a7f3b7dd086e93fcca96e25dbb2fbd19ff0db9d0f2ace50b782b06b03c6b3f351252e45a80df85caf0e1ecdcca694c41f937efd67ac6bd
+ languageName: node
+ linkType: hard
+
"run-applescript@npm:^7.0.0":
version: 7.0.0
resolution: "run-applescript@npm:7.0.0"
@@ -8973,12 +10934,10 @@ __metadata:
languageName: node
linkType: hard
-"run-parallel@npm:^1.1.9":
- version: 1.2.0
- resolution: "run-parallel@npm:1.2.0"
- dependencies:
- queue-microtask: "npm:^1.2.2"
- checksum: 10/cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d
+"run-async@npm:^4.0.6":
+ version: 4.0.6
+ resolution: "run-async@npm:4.0.6"
+ checksum: 10/d23929e36d0422b871a8964d5cfcb1b88295950ea5f72e1dfed458d4c3f3a33a7395e08167d8a4446f2110cfaac7d7653d9c804d2becab8afa8a63e16b97da81
languageName: node
linkType: hard
@@ -9001,7 +10960,7 @@ __metadata:
languageName: node
linkType: hard
-"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0":
+"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0":
version: 5.2.1
resolution: "safe-buffer@npm:5.2.1"
checksum: 10/32872cd0ff68a3ddade7a7617b8f4c2ae8764d8b7d884c651b74457967a9e0e886267d3ecc781220629c44a865167b61c375d2da6c720c840ecd73f45d5d9451
@@ -9026,7 +10985,7 @@ __metadata:
languageName: node
linkType: hard
-"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0":
+"safer-buffer@npm:2.1.2, safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0":
version: 2.1.2
resolution: "safer-buffer@npm:2.1.2"
checksum: 10/7eaf7a0cf37cc27b42fb3ef6a9b1df6e93a1c6d98c6c6702b02fe262d5fcbd89db63320793b99b21cb5348097d0a53de81bd5f4e8b86e20cc9412e3f1cfb4e83
@@ -9040,6 +10999,35 @@ __metadata:
languageName: node
linkType: hard
+"schema-utils@npm:^4.0.0, schema-utils@npm:^4.2.0":
+ version: 4.3.3
+ resolution: "schema-utils@npm:4.3.3"
+ dependencies:
+ "@types/json-schema": "npm:^7.0.9"
+ ajv: "npm:^8.9.0"
+ ajv-formats: "npm:^2.1.1"
+ ajv-keywords: "npm:^5.1.0"
+ checksum: 10/dba77a46ad7ff0c906f7f09a1a61109e6cb56388f15a68070b93c47a691f516c6a3eb454f81a8cceb0a0e55b87f8b05770a02bfb1f4e0a3143b5887488b2f900
+ languageName: node
+ linkType: hard
+
+"select-hose@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "select-hose@npm:2.0.0"
+ checksum: 10/08cdd629a394d20e9005e7956f0624307c702cf950cc0458953e9b87ea961d3b1b72ac02266bdb93ac1eec4fcf42b41db9cabe93aa2b7683d71513d133c44fb5
+ languageName: node
+ linkType: hard
+
+"selfsigned@npm:^2.4.1":
+ version: 2.4.1
+ resolution: "selfsigned@npm:2.4.1"
+ dependencies:
+ "@types/node-forge": "npm:^1.3.0"
+ node-forge: "npm:^1"
+ checksum: 10/52536623f1cfdeb2f8b9198377f2ce7931c677ea69421238d1dc1ea2983bbe258e56c19e7d1af87035cad7270f19b7e996eaab1212e724d887722502f68e17f2
+ languageName: node
+ linkType: hard
+
"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.5.0":
version: 5.7.2
resolution: "semver@npm:5.7.2"
@@ -9058,12 +11046,60 @@ __metadata:
languageName: node
linkType: hard
-"semver@npm:^7.0.0, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.3, semver@npm:^7.7.2, semver@npm:^7.7.3":
- version: 7.7.3
- resolution: "semver@npm:7.7.3"
+"semver@npm:^7.3.5, semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.3, semver@npm:^7.7.2, semver@npm:^7.7.3, semver@npm:^7.7.4, semver@npm:^7.8.5":
+ version: 7.8.5
+ resolution: "semver@npm:7.8.5"
bin:
semver: bin/semver.js
- checksum: 10/8dbc3168e057a38fc322af909c7f5617483c50caddba135439ff09a754b20bdd6482a5123ff543dad4affa488ecf46ec5fb56d61312ad20bb140199b88dfaea9
+ checksum: 10/9b01d2ff11e6e4a4539b7ca3c5f280c8704cb397a28504469f2ed4f00ad2194748d756647362a9712fff30984d15772ab7f083108c2fb508e2096ae9e708f22c
+ languageName: node
+ linkType: hard
+
+"send@npm:~0.19.0, send@npm:~0.19.1":
+ version: 0.19.2
+ resolution: "send@npm:0.19.2"
+ dependencies:
+ debug: "npm:2.6.9"
+ depd: "npm:2.0.0"
+ destroy: "npm:1.2.0"
+ encodeurl: "npm:~2.0.0"
+ escape-html: "npm:~1.0.3"
+ etag: "npm:~1.8.1"
+ fresh: "npm:~0.5.2"
+ http-errors: "npm:~2.0.1"
+ mime: "npm:1.6.0"
+ ms: "npm:2.1.3"
+ on-finished: "npm:~2.4.1"
+ range-parser: "npm:~1.2.1"
+ statuses: "npm:~2.0.2"
+ checksum: 10/e932a592f62c58560b608a402d52333a8ae98a5ada076feb5db1d03adaa77c3ca32a7befa1c4fd6dedc186e88f342725b0cb4b3d86835eaf834688b259bef18d
+ languageName: node
+ linkType: hard
+
+"serve-index@npm:^1.9.1":
+ version: 1.9.2
+ resolution: "serve-index@npm:1.9.2"
+ dependencies:
+ accepts: "npm:~1.3.8"
+ batch: "npm:0.6.1"
+ debug: "npm:2.6.9"
+ escape-html: "npm:~1.0.3"
+ http-errors: "npm:~1.8.0"
+ mime-types: "npm:~2.1.35"
+ parseurl: "npm:~1.3.3"
+ checksum: 10/fdfada071e795da265845acca05be9b498443cb5b84f8c9fd4632f01ea107ecca110725a7963a2b4b3146ec01f41c5f95df4405ff61eda13e6f229474a9ed5a6
+ languageName: node
+ linkType: hard
+
+"serve-static@npm:~1.16.2":
+ version: 1.16.3
+ resolution: "serve-static@npm:1.16.3"
+ dependencies:
+ encodeurl: "npm:~2.0.0"
+ escape-html: "npm:~1.0.3"
+ parseurl: "npm:~1.3.3"
+ send: "npm:~0.19.1"
+ checksum: 10/149d6718dd9e53166784d0a65535e21a7c01249d9c51f57224b786a7306354c6807e7811a9f6c143b45c863b1524721fca2f52b5c81a8b5194e3dde034a03b9c
languageName: node
linkType: hard
@@ -9158,6 +11194,13 @@ __metadata:
languageName: node
linkType: hard
+"shell-quote@npm:^1.8.4":
+ version: 1.10.0
+ resolution: "shell-quote@npm:1.10.0"
+ checksum: 10/d4a22aeefe64919290af753ac6098239d7ffee52a5db62c20edef69794bd10b5f86e298f68be26af9606ac435e890dd391994a5405a90bb8aebef1ff1dde839b
+ languageName: node
+ linkType: hard
+
"side-channel-list@npm:^1.0.0":
version: 1.0.0
resolution: "side-channel-list@npm:1.0.0"
@@ -9213,13 +11256,24 @@ __metadata:
languageName: node
linkType: hard
-"signal-exit@npm:^4.0.1":
+"signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0":
version: 4.1.0
resolution: "signal-exit@npm:4.1.0"
checksum: 10/c9fa63bbbd7431066174a48ba2dd9986dfd930c3a8b59de9c29d7b6854ec1c12a80d15310869ea5166d413b99f041bfa3dd80a7947bcd44ea8e6eb3ffeabfa1f
languageName: node
linkType: hard
+"sirv@npm:^2.0.3":
+ version: 2.0.4
+ resolution: "sirv@npm:2.0.4"
+ dependencies:
+ "@polka/url": "npm:^1.0.0-next.24"
+ mrmime: "npm:^2.0.0"
+ totalist: "npm:^3.0.0"
+ checksum: 10/24f42cf06895017e589c9d16fc3f1c6c07fe8b0dbafce8a8b46322cfba67b7f2498610183954cb0e9d089c8cb60002a7ee7e8bca6a91a0d7042bfbc3473c95c3
+ languageName: node
+ linkType: hard
+
"slash@npm:^3.0.0":
version: 3.0.0
resolution: "slash@npm:3.0.0"
@@ -9241,6 +11295,52 @@ __metadata:
languageName: node
linkType: hard
+"socket.io-adapter@npm:~2.5.2":
+ version: 2.5.8
+ resolution: "socket.io-adapter@npm:2.5.8"
+ dependencies:
+ debug: "npm:~4.4.1"
+ ws: "npm:~8.21.0"
+ checksum: 10/6d1d408916b000d4350d21720c6271cb075fc16ce5e3a37a3367136dad7dd2b24d734e1fb6561bdeaec2d4c30b0ae3792643beee39ee4eb2fd9166257bc29dfc
+ languageName: node
+ linkType: hard
+
+"socket.io-parser@npm:~4.2.4":
+ version: 4.2.6
+ resolution: "socket.io-parser@npm:4.2.6"
+ dependencies:
+ "@socket.io/component-emitter": "npm:~3.1.0"
+ debug: "npm:~4.4.1"
+ checksum: 10/cf8f3e9feee42b2405065bccef732894a0b07b7cb734c4954eb8876d7a0038e7df6e6d06fab3a25f816f5d996917391833d5f06136e8c8c6fbecf5da962c1c9e
+ languageName: node
+ linkType: hard
+
+"socket.io@npm:4.8.1":
+ version: 4.8.1
+ resolution: "socket.io@npm:4.8.1"
+ dependencies:
+ accepts: "npm:~1.3.4"
+ base64id: "npm:~2.0.0"
+ cors: "npm:~2.8.5"
+ debug: "npm:~4.3.2"
+ engine.io: "npm:~6.6.0"
+ socket.io-adapter: "npm:~2.5.2"
+ socket.io-parser: "npm:~4.2.4"
+ checksum: 10/b9b362b7f63fc7ebb58482b8a3ade6c971da7783b7611dfeebaa8b02be23cb948137ec218491ccda8be57e434e97d65b64edf1e9811e5245b23a888d41636f4a
+ languageName: node
+ linkType: hard
+
+"sockjs@npm:^0.3.24":
+ version: 0.3.24
+ resolution: "sockjs@npm:0.3.24"
+ dependencies:
+ faye-websocket: "npm:^0.11.3"
+ uuid: "npm:^8.3.2"
+ websocket-driver: "npm:^0.7.4"
+ checksum: 10/36312ec9772a0e536b69b72e9d1c76bd3d6ecf885c5d8fd6e59811485c916b8ce75f46ec57532f436975815ee14aa9a0e22ae3d9e5c0b18ea37b56d0aaaf439c
+ languageName: node
+ linkType: hard
+
"socks-proxy-agent@npm:^8.0.3":
version: 8.0.5
resolution: "socks-proxy-agent@npm:8.0.5"
@@ -9271,13 +11371,6 @@ __metadata:
languageName: node
linkType: hard
-"sortobject@npm:^4.0.0":
- version: 4.16.0
- resolution: "sortobject@npm:4.16.0"
- checksum: 10/58473d0fc46c06050eadc1e7c0ea8cc9444c627f8f5ac85f4aeb0236198999970dd731be9d88d1cbd0a8f9108eb6646727b488661eedfb21826c3a95d4531d36
- languageName: node
- linkType: hard
-
"source-map-support@npm:0.5.13":
version: 0.5.13
resolution: "source-map-support@npm:0.5.13"
@@ -9295,6 +11388,13 @@ __metadata:
languageName: node
linkType: hard
+"source-map@npm:^0.7.6":
+ version: 0.7.6
+ resolution: "source-map@npm:0.7.6"
+ checksum: 10/c8d2da7c57c14f3fd7568f764b39ad49bbf9dd7632b86df3542b31fed117d4af2fb74a4f886fc06baf7a510fee68e37998efc3080aacdac951c36211dc29a7a3
+ languageName: node
+ linkType: hard
+
"source-map@npm:^0.8.0-beta.0":
version: 0.8.0-beta.0
resolution: "source-map@npm:0.8.0-beta.0"
@@ -9376,28 +11476,37 @@ __metadata:
languageName: node
linkType: hard
-"split2@npm:^3.2.2":
- version: 3.2.2
- resolution: "split2@npm:3.2.2"
+"spdy-transport@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "spdy-transport@npm:3.0.0"
dependencies:
- readable-stream: "npm:^3.0.0"
- checksum: 10/a426e1e6718e2f7e50f102d5ec3525063d885e3d9cec021a81175fd3497fdb8b867a89c99e70bef4daeef4f2f5e544f7b92df8c1a30b4254e10a9cfdcc3dae87
+ debug: "npm:^4.1.0"
+ detect-node: "npm:^2.0.4"
+ hpack.js: "npm:^2.1.6"
+ obuf: "npm:^1.1.2"
+ readable-stream: "npm:^3.0.6"
+ wbuf: "npm:^1.7.3"
+ checksum: 10/b93b606b209ca785456bd850b8925f21a76522ee5b46701235ecff3eba17686560c27575f91863842dc843a39772f6d2f5a8755df9eaff0924d20598df18828d
languageName: node
linkType: hard
-"split2@npm:^4.0.0":
- version: 4.2.0
- resolution: "split2@npm:4.2.0"
- checksum: 10/09bbefc11bcf03f044584c9764cd31a252d8e52cea29130950b26161287c11f519807c5e54bd9e5804c713b79c02cefe6a98f4688630993386be353e03f534ab
+"spdy@npm:^4.0.2":
+ version: 4.0.2
+ resolution: "spdy@npm:4.0.2"
+ dependencies:
+ debug: "npm:^4.1.0"
+ handle-thing: "npm:^2.0.0"
+ http-deceiver: "npm:^1.2.7"
+ select-hose: "npm:^2.0.0"
+ spdy-transport: "npm:^3.0.0"
+ checksum: 10/d29b89e48e7d762e505a2f83b1bc2c92268bd518f1b411864ab42a9e032e387d10467bbce0d8dbf8647bf4914a063aa1d303dff85e248f7a57f81a7b18ac34ef
languageName: node
linkType: hard
-"split@npm:^1.0.1":
- version: 1.0.1
- resolution: "split@npm:1.0.1"
- dependencies:
- through: "npm:2"
- checksum: 10/12f4554a5792c7e98bb3e22b53c63bfa5ef89aa704353e1db608a55b51f5b12afaad6e4a8ecf7843c15f273f43cdadd67b3705cc43d48a75c2cf4641d51f7e7a
+"split2@npm:^4.0.0":
+ version: 4.2.0
+ resolution: "split2@npm:4.2.0"
+ checksum: 10/09bbefc11bcf03f044584c9764cd31a252d8e52cea29130950b26161287c11f519807c5e54bd9e5804c713b79c02cefe6a98f4688630993386be353e03f534ab
languageName: node
linkType: hard
@@ -9454,13 +11563,20 @@ __metadata:
languageName: node
linkType: hard
-"statuses@npm:^2.0.1, statuses@npm:~2.0.2":
+"statuses@npm:^2.0.1, statuses@npm:~2.0.1, statuses@npm:~2.0.2":
version: 2.0.2
resolution: "statuses@npm:2.0.2"
checksum: 10/6927feb50c2a75b2a4caab2c565491f7a93ad3d8dbad7b1398d52359e9243a20e2ebe35e33726dee945125ef7a515e9097d8a1b910ba2bbd818265a2f6c39879
languageName: node
linkType: hard
+"stdin-discarder@npm:^0.3.2":
+ version: 0.3.2
+ resolution: "stdin-discarder@npm:0.3.2"
+ checksum: 10/63c6912146efe079fd048ecc02e5c3bf5aaa4cb268ad4e365603d845444dd3048daa45868c2690c5fe2d020ba47273c8a20df684a8c424fb4bd7f359c795c2f5
+ languageName: node
+ linkType: hard
+
"stream-browserify@npm:^3.0.0":
version: 3.0.0
resolution: "stream-browserify@npm:3.0.0"
@@ -9480,15 +11596,6 @@ __metadata:
languageName: node
linkType: hard
-"stream-composer@npm:^1.0.2":
- version: 1.0.2
- resolution: "stream-composer@npm:1.0.2"
- dependencies:
- streamx: "npm:^2.13.2"
- checksum: 10/338b8e088f2eb2c91b0e06907db436525da3620991b13499e57441548e62d3585be185505901b0380cad425889572794e5fe178dd326f5efde654b3ab26df3d3
- languageName: node
- linkType: hard
-
"stream-http@npm:^3.2.0":
version: 3.2.0
resolution: "stream-http@npm:3.2.0"
@@ -9501,16 +11608,6 @@ __metadata:
languageName: node
linkType: hard
-"streamx@npm:^2.12.0, streamx@npm:^2.12.5, streamx@npm:^2.13.2, streamx@npm:^2.14.0":
- version: 2.15.1
- resolution: "streamx@npm:2.15.1"
- dependencies:
- fast-fifo: "npm:^1.1.0"
- queue-tick: "npm:^1.0.1"
- checksum: 10/5c5143d832b4d4c2cba09d3e77dcc099f62bfc44bffac38e7b196cdd7f17dcd46bc2012c614fad934c0d706712c2e9455e485435810504cf748906b2f1746837
- languageName: node
- linkType: hard
-
"string-length@npm:^4.0.2":
version: 4.0.2
resolution: "string-length@npm:4.0.2"
@@ -9543,6 +11640,16 @@ __metadata:
languageName: node
linkType: hard
+"string-width@npm:^8.1.0":
+ version: 8.2.0
+ resolution: "string-width@npm:8.2.0"
+ dependencies:
+ get-east-asian-width: "npm:^1.5.0"
+ strip-ansi: "npm:^7.1.2"
+ checksum: 10/c4f62877ec08fca155e84a260eb4f58f473cfe5169bd1c1e21ffb563d8e0b7f6d705cc3d250f2ed6bb4f30ee9732ad026f54afaac77aa487e3d1dc1b1969e51b
+ languageName: node
+ linkType: hard
+
"string.prototype.trim@npm:^1.2.8":
version: 1.2.8
resolution: "string.prototype.trim@npm:1.2.8"
@@ -9576,7 +11683,7 @@ __metadata:
languageName: node
linkType: hard
-"string_decoder@npm:^1.1.1, string_decoder@npm:^1.3.0":
+"string_decoder@npm:^1.0.0, string_decoder@npm:^1.1.1, string_decoder@npm:^1.3.0":
version: 1.3.0
resolution: "string_decoder@npm:1.3.0"
dependencies:
@@ -9603,19 +11710,12 @@ __metadata:
languageName: node
linkType: hard
-"strip-ansi@npm:^7.0.1":
- version: 7.1.2
- resolution: "strip-ansi@npm:7.1.2"
+"strip-ansi@npm:^7.0.1, strip-ansi@npm:^7.1.2":
+ version: 7.2.0
+ resolution: "strip-ansi@npm:7.2.0"
dependencies:
- ansi-regex: "npm:^6.0.1"
- checksum: 10/db0e3f9654e519c8a33c50fc9304d07df5649388e7da06d3aabf66d29e5ad65d5e6315d8519d409c15b32fa82c1df7e11ed6f8cd50b0e4404463f0c9d77c8d0b
- languageName: node
- linkType: hard
-
-"strip-bom@npm:^3.0.0":
- version: 3.0.0
- resolution: "strip-bom@npm:3.0.0"
- checksum: 10/8d50ff27b7ebe5ecc78f1fe1e00fcdff7af014e73cf724b46fb81ef889eeb1015fc5184b64e81a2efe002180f3ba431bdd77e300da5c6685d702780fbf0c8d5b
+ ansi-regex: "npm:^6.2.2"
+ checksum: 10/96da3bc6d73cfba1218625a3d66cf7d37a69bf0920d8735b28f9eeaafcdb6c1fe8440e1ae9eb1ba0ca355dbe8702da872e105e2e939fa93e7851b3cb5dd7d316
languageName: node
linkType: hard
@@ -9633,12 +11733,10 @@ __metadata:
languageName: node
linkType: hard
-"strip-indent@npm:^3.0.0":
- version: 3.0.0
- resolution: "strip-indent@npm:3.0.0"
- dependencies:
- min-indent: "npm:^1.0.0"
- checksum: 10/18f045d57d9d0d90cd16f72b2313d6364fd2cb4bf85b9f593523ad431c8720011a4d5f08b6591c9d580f446e78855c5334a30fb91aa1560f5d9f95ed1b4a0530
+"strip-final-newline@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "strip-final-newline@npm:4.0.0"
+ checksum: 10/b5fe48f695d74863153a3b3155220e6e9bf51f4447832998c8edec38e6559b3af87a9fe5ac0df95570a78a26f5fa91701358842eab3c15480e27980b154a145f
languageName: node
linkType: hard
@@ -9649,20 +11747,21 @@ __metadata:
languageName: node
linkType: hard
-"strnum@npm:^2.2.0":
- version: 2.2.2
- resolution: "strnum@npm:2.2.2"
- checksum: 10/c55813cfded750dc84556b4881ffc7cee91382ff15a48f1fba0ff7a678e1640ed96ca40806fbd55724940fd7d51cf752469b2d862e196e4adefb6c7d5d9cd73b
+"strnum@npm:^2.4.0":
+ version: 2.4.0
+ resolution: "strnum@npm:2.4.0"
+ dependencies:
+ anynum: "npm:^1.0.0"
+ checksum: 10/ce603543f8c8a8f0497ab554ea99bf7c8d6bef1eeb3d73feced8a291212dc675014b160e25f527c01e8b88106cc10b102094f0b9feb3e4527a84ad446b8cbf06
languageName: node
linkType: hard
-"strtok3@npm:^7.0.0":
- version: 7.0.0
- resolution: "strtok3@npm:7.0.0"
+"strtok3@npm:^10.3.4":
+ version: 10.3.5
+ resolution: "strtok3@npm:10.3.5"
dependencies:
"@tokenizer/token": "npm:^0.3.0"
- peek-readable: "npm:^5.0.0"
- checksum: 10/4f2269679fcfce1e9fe0600eff361ea4c687ae0a0e8d9dab6703811071cd92545cbcb32d4ace3d3aa591f777cec1a3e8aeecd5efd71ae216fd2962a7a238b4ab
+ checksum: 10/7279dc97a7207a5664ea07cf5304b94968db4f02d64d2732be8e7a3a31a876375126749cd36a00d0bd54c891875f3e47175f8194d40c64118f3265dbc241aaca
languageName: node
linkType: hard
@@ -9709,7 +11808,7 @@ __metadata:
languageName: node
linkType: hard
-"synckit@npm:^0.11.8":
+"synckit@npm:^0.11.12, synckit@npm:^0.11.8":
version: 0.11.12
resolution: "synckit@npm:0.11.12"
dependencies:
@@ -9718,33 +11817,30 @@ __metadata:
languageName: node
linkType: hard
-"synckit@npm:^0.9.1":
- version: 0.9.2
- resolution: "synckit@npm:0.9.2"
- dependencies:
- "@pkgr/core": "npm:^0.1.0"
- tslib: "npm:^2.6.2"
- checksum: 10/d45c4288be9c0232343650643892a7edafb79152c0c08d7ae5d33ca2c296b67a0e15f8cb5c9153969612c4ea5cd5686297542384aab977db23cfa6653fe02027
+"tapable@npm:2.3.0":
+ version: 2.3.0
+ resolution: "tapable@npm:2.3.0"
+ checksum: 10/496a841039960533bb6e44816a01fffc2a1eb428bb2051ecab9e87adf07f19e1f937566cbbbb09dceff31163c0ffd81baafcad84db900b601f0155dd0b37e9f2
languageName: node
linkType: hard
-"tapable@npm:^2.2.0":
- version: 2.2.1
- resolution: "tapable@npm:2.2.1"
- checksum: 10/1769336dd21481ae6347611ca5fca47add0962fd8e80466515032125eca0084a4f0ede11e65341b9c0018ef4e1cf1ad820adbb0fba7cc99865c6005734000b0a
+"tapable@npm:^2.2.0, tapable@npm:^2.3.0":
+ version: 2.3.3
+ resolution: "tapable@npm:2.3.3"
+ checksum: 10/21fb64a7ae1a0e11d855a6c33a22ae5ecf7e2f23170c942da673b44bf4c3aae8aa52451ef2792d0ce36c7feca13dceafa4f135105d66fc06912632488c0913fd
languageName: node
linkType: hard
"tar@npm:^7.5.4":
- version: 7.5.11
- resolution: "tar@npm:7.5.11"
+ version: 7.5.21
+ resolution: "tar@npm:7.5.21"
dependencies:
"@isaacs/fs-minipass": "npm:^4.0.0"
chownr: "npm:^3.0.0"
minipass: "npm:^7.1.2"
minizlib: "npm:^3.1.0"
yallist: "npm:^5.0.0"
- checksum: 10/fb2e77ee858a73936c68e066f4a602d428d6f812e6da0cc1e14a41f99498e4f7fd3535e355fa15157240a5538aa416026cfa6306bb0d1d1c1abf314b1f878e9a
+ checksum: 10/a1b7dcee15e4f7dbef7f07c3cf0fe946248efabd1cb029b54c698d817dfc2876c75bcaa164a12dd21191e385759ce3e37fea562cf4aabaa00984ef9ed3c48d17
languageName: node
linkType: hard
@@ -9757,15 +11853,6 @@ __metadata:
languageName: node
linkType: hard
-"teex@npm:^1.0.1":
- version: 1.0.1
- resolution: "teex@npm:1.0.1"
- dependencies:
- streamx: "npm:^2.12.5"
- checksum: 10/36bf7ce8bb5eb428ad7b14b695ee7fb0a02f09c1a9d8181cc42531208543a920b299d711bf78dad4ff9bcf36ac437ae8e138053734746076e3e0e7d6d76eef64
- languageName: node
- linkType: hard
-
"temp-dir@npm:^3.0.0":
version: 3.0.0
resolution: "temp-dir@npm:3.0.0"
@@ -9773,15 +11860,15 @@ __metadata:
languageName: node
linkType: hard
-"tempy@npm:^3.1.0":
- version: 3.1.0
- resolution: "tempy@npm:3.1.0"
+"tempy@npm:^3.2.0":
+ version: 3.2.0
+ resolution: "tempy@npm:3.2.0"
dependencies:
is-stream: "npm:^3.0.0"
temp-dir: "npm:^3.0.0"
type-fest: "npm:^2.12.2"
unique-string: "npm:^3.0.0"
- checksum: 10/f5540bc24dcd9d41ab0b31e9eed73c3ef825080f1c8b1e854e4b73059155c889f72f5f7c15e8cd462d59aa10c9726e423c81d6a365d614b538c6cc78a1209cc6
+ checksum: 10/02ed53acb75719924c83bdd04e99ceb5bbae009b68ab24934750f5bcf26d8da251d4ee19f24cea749206af4051a0fd1cab060f63264f384dc0aaae150bf72bf4
languageName: node
linkType: hard
@@ -9796,13 +11883,6 @@ __metadata:
languageName: node
linkType: hard
-"text-extensions@npm:^1.0.0":
- version: 1.9.0
- resolution: "text-extensions@npm:1.9.0"
- checksum: 10/56a9962c1b62d39b2bcb369b7558ca85c1b55e554b38dfd725edcc0a1babe5815782a60c17ff6b839093b163dfebb92b804208aaaea616ec7571c8059ae0cf44
- languageName: node
- linkType: hard
-
"text-hex@npm:1.0.x":
version: 1.0.0
resolution: "text-hex@npm:1.0.0"
@@ -9810,6 +11890,15 @@ __metadata:
languageName: node
linkType: hard
+"thingies@npm:^2.5.0":
+ version: 2.6.0
+ resolution: "thingies@npm:2.6.0"
+ peerDependencies:
+ tslib: ^2
+ checksum: 10/722ca22cb54b6071ca489731b092538448d7634dd6b17ec9b89e846bea40bf0111084bdda8403f0970d716f33703e188978596cce9cd331a93d5d37882b39d74
+ languageName: node
+ linkType: hard
+
"thread-stream@npm:^2.6.0":
version: 2.7.0
resolution: "thread-stream@npm:2.7.0"
@@ -9819,62 +11908,36 @@ __metadata:
languageName: node
linkType: hard
-"threadedclass@npm:^1.3.0":
- version: 1.3.0
- resolution: "threadedclass@npm:1.3.0"
+"threadedclass@npm:^1.4.0":
+ version: 1.4.0
+ resolution: "threadedclass@npm:1.4.0"
dependencies:
callsites: "npm:^3.1.0"
eventemitter3: "npm:^4.0.4"
is-running: "npm:^2.1.0"
tslib: "npm:^1.13.0"
- checksum: 10/9e048e82ee745ee2009dabb0015330fa9d4f4d83629c799c6059f77a6a1c6a8b0392e6e8c2a28834a88532be6b86ac276cf1f0133a855ea867b0217021350043
- languageName: node
- linkType: hard
-
-"through2@npm:^2.0.0, through2@npm:^2.0.1":
- version: 2.0.5
- resolution: "through2@npm:2.0.5"
- dependencies:
- readable-stream: "npm:~2.3.6"
- xtend: "npm:~4.0.1"
- checksum: 10/cd71f7dcdc7a8204fea003a14a433ef99384b7d4e31f5497e1f9f622b3cf3be3691f908455f98723bdc80922a53af7fa10c3b7abbe51c6fd3d536dbc7850e2c4
- languageName: node
- linkType: hard
-
-"through2@npm:^4.0.0":
- version: 4.0.2
- resolution: "through2@npm:4.0.2"
- dependencies:
- readable-stream: "npm:3"
- checksum: 10/72c246233d9a989bbebeb6b698ef0b7b9064cb1c47930f79b25d87b6c867e075432811f69b7b2ac8da00ca308191c507bdab913944be8019ac43b036ce88f6ba
- languageName: node
- linkType: hard
-
-"through@npm:2, through@npm:>=2.2.7 <3":
- version: 2.3.8
- resolution: "through@npm:2.3.8"
- checksum: 10/5da78346f70139a7d213b65a0106f3c398d6bc5301f9248b5275f420abc2c4b1e77c2abc72d218dedc28c41efb2e7c312cb76a7730d04f9c2d37d247da3f4198
+ checksum: 10/f99d94cbc41a5118e705a1a4ad0a5c5f2a91c7d3635fa45a04bc5e7d37749240f5034fe29b31025dcaa358be26e21a01f7a1bd13877a1435f015b05debd7bd5c
languageName: node
linkType: hard
-"timecode@npm:0.0.4":
- version: 0.0.4
- resolution: "timecode@npm:0.0.4"
- checksum: 10/decc0ed2a030b281a4ac2d812a881e9003ea2e86fa3c08796bd6e383524c31082caf01dbd348a3e1d877901f817b052cdcfb2a3c854d2bed3a4f0009c919b874
+"thunky@npm:^1.0.2":
+ version: 1.1.0
+ resolution: "thunky@npm:1.1.0"
+ checksum: 10/825e3bd07ab3c9fd6f753c457a60957c628cacba5dd0656fd93b037c445e2828b43cf0805a9f2b16b0c5f5a10fd561206271acddb568df4f867f0aea0eb2772f
languageName: node
linkType: hard
-"timeline-state-resolver-types@npm:10.0.0-nightly-chore-update-atem-state-20260309-091304-dea89c910.0":
- version: 10.0.0-nightly-chore-update-atem-state-20260309-091304-dea89c910.0
- resolution: "timeline-state-resolver-types@npm:10.0.0-nightly-chore-update-atem-state-20260309-091304-dea89c910.0"
+"timeline-state-resolver-types@npm:10.0.0-nightly-main-20260714-110908-7c702dedf.0":
+ version: 10.0.0-nightly-main-20260714-110908-7c702dedf.0
+ resolution: "timeline-state-resolver-types@npm:10.0.0-nightly-main-20260714-110908-7c702dedf.0"
dependencies:
- kairos-lib: "npm:0.2.3"
+ kairos-lib: "npm:1.0.0"
tslib: "npm:^2.8.1"
- checksum: 10/5558f4a80ebc60f3f86e76172965fce0f415cfd76fd109f0c84ad6873521a1dbe054a60e1c8d87535b2e16df3be25e637099742b38628be9c794f1701762903a
+ checksum: 10/e2ede547b5d8bb01bc209a8d48deeec50a6f690690f8be103de202f33e371dcaddd424e798d446b9be1ae1a098e24ab3150c3f2c003c8536807eba468b77a070
languageName: node
linkType: hard
-"timers-browserify@npm:^2.0.12":
+"timers-browserify@npm:^2.0.12, timers-browserify@npm:^2.0.4":
version: 2.0.12
resolution: "timers-browserify@npm:2.0.12"
dependencies:
@@ -9883,13 +11946,13 @@ __metadata:
languageName: node
linkType: hard
-"tinyglobby@npm:^0.2.12":
- version: 0.2.15
- resolution: "tinyglobby@npm:0.2.15"
+"tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.15":
+ version: 0.2.16
+ resolution: "tinyglobby@npm:0.2.16"
dependencies:
fdir: "npm:^6.5.0"
- picomatch: "npm:^4.0.3"
- checksum: 10/d72bd826a8b0fa5fa3929e7fe5ba48fceb2ae495df3a231b6c5408cd7d8c00b58ab5a9c2a76ba56a62ee9b5e083626f1f33599734bed1ffc4b792406408f0ca2
+ picomatch: "npm:^4.0.4"
+ checksum: 10/5c2c41b572ada38449e7c86a5fe034f204a1dbba577225a761a14f29f48dc3f2fc0d81a6c56fcc67c5a742cc3aa9fb5e2ca18dbf22b610b0bc0e549b34d5a0f8
languageName: node
linkType: hard
@@ -9920,15 +11983,6 @@ __metadata:
languageName: node
linkType: hard
-"to-through@npm:^3.0.0":
- version: 3.0.0
- resolution: "to-through@npm:3.0.0"
- dependencies:
- streamx: "npm:^2.12.5"
- checksum: 10/404ad1a346babab53d75d3b4deb779916760fc9e605f4e64ec789366edf08e75ad592a262ca566e7864f77c03375151dcfac4744ff7fd52417cb2a2e9fc60795
- languageName: node
- linkType: hard
-
"toidentifier@npm:1.0.1, toidentifier@npm:~1.0.1":
version: 1.0.1
resolution: "toidentifier@npm:1.0.1"
@@ -9936,13 +11990,21 @@ __metadata:
languageName: node
linkType: hard
-"token-types@npm:^5.0.1":
- version: 5.0.1
- resolution: "token-types@npm:5.0.1"
+"token-types@npm:^6.1.1":
+ version: 6.1.2
+ resolution: "token-types@npm:6.1.2"
dependencies:
+ "@borewit/text-codec": "npm:^0.2.1"
"@tokenizer/token": "npm:^0.3.0"
ieee754: "npm:^1.2.1"
- checksum: 10/0985369bbea9f53a5ccd79bb9899717b41401a813deb2c7fb1add5d0baf2f702aaf6da78f6e0ccf346d5a9f7acaa7cb5efed7d092d89d8c1e6962959e9509bc0
+ checksum: 10/0c7811a2da5a0ca474c795d883d871a184d1d54f67058d66084110f0b246fff66151885dbcb91d66533e776478bf57f3b4fac69ce03b805a0e1060def87947de
+ languageName: node
+ linkType: hard
+
+"totalist@npm:^3.0.0":
+ version: 3.0.1
+ resolution: "totalist@npm:3.0.1"
+ checksum: 10/5132d562cf88ff93fd710770a92f31dbe67cc19b5c6ccae2efc0da327f0954d211bbfd9456389655d726c624f284b4a23112f56d1da931ca7cfabbe1f45e778a
languageName: node
linkType: hard
@@ -9955,26 +12017,28 @@ __metadata:
languageName: node
linkType: hard
-"tr46@npm:^5.0.0":
- version: 5.0.0
- resolution: "tr46@npm:5.0.0"
+"tr46@npm:^5.1.0":
+ version: 5.1.1
+ resolution: "tr46@npm:5.1.1"
dependencies:
punycode: "npm:^2.3.1"
- checksum: 10/29155adb167d048d3c95d181f7cb5ac71948b4e8f3070ec455986e1f34634acae50ae02a3c8d448121c3afe35b76951cd46ed4c128fd80264280ca9502237a3e
+ checksum: 10/833a0e1044574da5790148fd17866d4ddaea89e022de50279967bcd6b28b4ce0d30d59eb3acf9702b60918975b3bad481400337e3a2e6326cffa5c77b874753d
languageName: node
linkType: hard
-"treeify@npm:^1.1.0":
+"tree-dump@npm:^1.0.3, tree-dump@npm:^1.1.0":
version: 1.1.0
- resolution: "treeify@npm:1.1.0"
- checksum: 10/5241976a751168fb9894a12d031299f1f6337b7f2cbd3eff22ee86e6777620352a69a1cab0d4709251317ff307eeda0dc45918850974fc44f4c7fc50e623b990
+ resolution: "tree-dump@npm:1.1.0"
+ peerDependencies:
+ tslib: 2
+ checksum: 10/2c20118d2671996aa6f1ba1310cef1404fb525bde5d989ab542013f62b23a3633c0f0b32cbd516ee6205051ec21912b2470dabca006d19c9eba0740b567e2b60
languageName: node
linkType: hard
-"trim-newlines@npm:^3.0.0":
- version: 3.0.1
- resolution: "trim-newlines@npm:3.0.1"
- checksum: 10/b530f3fadf78e570cf3c761fb74fef655beff6b0f84b29209bac6c9622db75ad1417f4a7b5d54c96605dcd72734ad44526fef9f396807b90839449eb543c6206
+"treeify@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "treeify@npm:1.1.0"
+ checksum: 10/5241976a751168fb9894a12d031299f1f6337b7f2cbd3eff22ee86e6777620352a69a1cab0d4709251317ff307eeda0dc45918850974fc44f4c7fc50e623b990
languageName: node
linkType: hard
@@ -9985,26 +12049,37 @@ __metadata:
languageName: node
linkType: hard
-"ts-api-utils@npm:^2.0.1":
- version: 2.0.1
- resolution: "ts-api-utils@npm:2.0.1"
+"ts-api-utils@npm:^2.5.0":
+ version: 2.5.0
+ resolution: "ts-api-utils@npm:2.5.0"
peerDependencies:
typescript: ">=4.8.4"
- checksum: 10/2e68938cd5acad6b5157744215ce10cd097f9f667fd36b5fdd5efdd4b0c51063e855459d835f94f6777bb8a0f334916b6eb5c1eedab8c325feb34baa39238898
+ checksum: 10/d5f1936f5618c6ab6942a97b78802217540ced00e7501862ae1f578d9a3aa189fc06050e64cb8951d21f7088e5fd35f53d2bf0d0370a883861c7b05e993ebc44
+ languageName: node
+ linkType: hard
+
+"ts-declaration-location@npm:^1.0.6":
+ version: 1.0.7
+ resolution: "ts-declaration-location@npm:1.0.7"
+ dependencies:
+ picomatch: "npm:^4.0.2"
+ peerDependencies:
+ typescript: ">=4.0.0"
+ checksum: 10/a7932fc75d41f10c16089f8f5a5c1ea49d6afca30f09c91c1df14d0a8510f72bcb9f8a395c04f060b66b855b6bd7ea4df81b335fb9d21bef402969a672a4afa7
languageName: node
linkType: hard
-"ts-jest@npm:^29.4.6":
- version: 29.4.6
- resolution: "ts-jest@npm:29.4.6"
+"ts-jest@npm:29.4.9":
+ version: 29.4.9
+ resolution: "ts-jest@npm:29.4.9"
dependencies:
bs-logger: "npm:^0.2.6"
fast-json-stable-stringify: "npm:^2.1.0"
- handlebars: "npm:^4.7.8"
+ handlebars: "npm:^4.7.9"
json5: "npm:^2.2.3"
lodash.memoize: "npm:^4.1.2"
make-error: "npm:^1.3.6"
- semver: "npm:^7.7.3"
+ semver: "npm:^7.7.4"
type-fest: "npm:^4.41.0"
yargs-parser: "npm:^21.1.1"
peerDependencies:
@@ -10014,7 +12089,7 @@ __metadata:
babel-jest: ^29.0.0 || ^30.0.0
jest: ^29.0.0 || ^30.0.0
jest-util: ^29.0.0 || ^30.0.0
- typescript: ">=4.3 <6"
+ typescript: ">=4.3 <7"
peerDependenciesMeta:
"@babel/core":
optional: true
@@ -10030,7 +12105,7 @@ __metadata:
optional: true
bin:
ts-jest: cli.js
- checksum: 10/e0ff9e13f684166d5331808b288043b8054f49a1c2970480a92ba3caec8d0ff20edd092f2a4e7a3ad8fcb9ba4d674bee10ec7ee75046d8066bbe43a7d16cf72e
+ checksum: 10/f5e81b1e13fff08da5b92d5a72f984f3393f40df73a1ae54473a780436b95dddb1452c78256e6d70a701c09ea427449657a5fbb3d142dc7e7a82eb192e80c3db
languageName: node
linkType: hard
@@ -10041,7 +12116,7 @@ __metadata:
languageName: node
linkType: hard
-"tslib@npm:^2.4.0, tslib@npm:^2.6.0, tslib@npm:^2.6.2, tslib@npm:^2.8.1":
+"tslib@npm:^2.0.0, tslib@npm:^2.4.0, tslib@npm:^2.6.0, tslib@npm:^2.8.0, tslib@npm:^2.8.1":
version: 2.8.1
resolution: "tslib@npm:2.8.1"
checksum: 10/3e2e043d5c2316461cb54e5c7fe02c30ef6dccb3384717ca22ae5c6b5bc95232a6241df19c622d9c73b809bea33b187f6dbc73030963e29950c2141bc32a79f7
@@ -10078,10 +12153,10 @@ __metadata:
languageName: node
linkType: hard
-"type-fest@npm:^0.18.0":
- version: 0.18.1
- resolution: "type-fest@npm:0.18.1"
- checksum: 10/08844377058435c2b0e633ba01bab6102dba0ed63d85417d8e18feff265eed6f5c9f8f9a25d405ea9db88a41a569be73a3c4c0d4e29150bf89fb145bb23114a2
+"type-detect@npm:^4.0.0":
+ version: 4.1.0
+ resolution: "type-detect@npm:4.1.0"
+ checksum: 10/e363bf0352427a79301f26a7795a27718624c49c576965076624eb5495d87515030b207217845f7018093adcbe169b2d119bb9b7f1a31a92bfbb1ab9639ca8dd
languageName: node
linkType: hard
@@ -10092,20 +12167,6 @@ __metadata:
languageName: node
linkType: hard
-"type-fest@npm:^0.6.0":
- version: 0.6.0
- resolution: "type-fest@npm:0.6.0"
- checksum: 10/9ecbf4ba279402b14c1a0614b6761bbe95626fab11377291fecd7e32b196109551e0350dcec6af74d97ced1b000ba8060a23eca33157091e642b409c2054ba82
- languageName: node
- linkType: hard
-
-"type-fest@npm:^0.8.1":
- version: 0.8.1
- resolution: "type-fest@npm:0.8.1"
- checksum: 10/fd4a91bfb706aeeb0d326ebd2e9a8ea5263979e5dec8d16c3e469a5bd3a946e014a062ef76c02e3086d3d1c7209a56a20a4caafd0e9f9a5c2ab975084ea3d388
- languageName: node
- linkType: hard
-
"type-fest@npm:^1.0.1":
version: 1.4.0
resolution: "type-fest@npm:1.4.0"
@@ -10120,7 +12181,7 @@ __metadata:
languageName: node
linkType: hard
-"type-fest@npm:^4.41.0, type-fest@npm:^4.6.0, type-fest@npm:^4.7.1":
+"type-fest@npm:^4.27.0, type-fest@npm:^4.41.0, type-fest@npm:^4.6.0, type-fest@npm:^4.7.1":
version: 4.41.0
resolution: "type-fest@npm:4.41.0"
checksum: 10/617ace794ac0893c2986912d28b3065ad1afb484cad59297835a0807dc63286c39e8675d65f7de08fafa339afcb8fe06a36e9a188b9857756ae1e92ee8bda212
@@ -10195,44 +12256,38 @@ __metadata:
languageName: node
linkType: hard
-"typedarray@npm:^0.0.6":
- version: 0.0.6
- resolution: "typedarray@npm:0.0.6"
- checksum: 10/2cc1bcf7d8c1237f6a16c04efc06637b2c5f2d74e58e84665445cf87668b85a21ab18dd751fa49eee6ae024b70326635d7b79ad37b1c370ed2fec6aeeeb52714
- languageName: node
- linkType: hard
-
-"typescript-eslint@npm:^8.21.0":
- version: 8.23.0
- resolution: "typescript-eslint@npm:8.23.0"
+"typescript-eslint@npm:^8.54.0":
+ version: 8.58.2
+ resolution: "typescript-eslint@npm:8.58.2"
dependencies:
- "@typescript-eslint/eslint-plugin": "npm:8.23.0"
- "@typescript-eslint/parser": "npm:8.23.0"
- "@typescript-eslint/utils": "npm:8.23.0"
+ "@typescript-eslint/eslint-plugin": "npm:8.58.2"
+ "@typescript-eslint/parser": "npm:8.58.2"
+ "@typescript-eslint/typescript-estree": "npm:8.58.2"
+ "@typescript-eslint/utils": "npm:8.58.2"
peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
- typescript: ">=4.8.4 <5.8.0"
- checksum: 10/c7a8b95129e944dd54a3f9312c14fbd9f589d863c30f45c8f3cf6001bb98398cf6ff41b5d51aa84d413853021d35ae703e8d0c067b409afa5acdc6bfc8bb1982
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: ">=4.8.4 <6.1.0"
+ checksum: 10/fd8b67208f6af32b78df004402e6de1324a64ec1429b707edf295a0257a1ca6ddab452c18494958461d0d86a74a81336ae7229fe430bd1092c0d2ceb00a9f61d
languageName: node
linkType: hard
-"typescript@npm:~5.7.3":
- version: 5.7.3
- resolution: "typescript@npm:5.7.3"
+"typescript@npm:~5.9.3":
+ version: 5.9.3
+ resolution: "typescript@npm:5.9.3"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
- checksum: 10/6a7e556de91db3d34dc51cd2600e8e91f4c312acd8e52792f243c7818dfadb27bae677175fad6947f9c81efb6c57eb6b2d0c736f196a6ee2f1f7d57b74fc92fa
+ checksum: 10/c089d9d3da2729fd4ac517f9b0e0485914c4b3c26f80dc0cffcb5de1719a17951e92425d55db59515c1a7ddab65808466debb864d0d56dcf43f27007d0709594
languageName: node
linkType: hard
-"typescript@patch:typescript@npm%3A~5.7.3#optional!builtin":
- version: 5.7.3
- resolution: "typescript@patch:typescript@npm%3A5.7.3#optional!builtin::version=5.7.3&hash=5786d5"
+"typescript@patch:typescript@npm%3A~5.9.3#optional!builtin":
+ version: 5.9.3
+ resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
- checksum: 10/dc58d777eb4c01973f7fbf1fd808aad49a0efdf545528dab9b07d94fdcb65b8751742804c3057e9619a4627f2d9cc85547fdd49d9f4326992ad0181b49e61d81
+ checksum: 10/696e1b017bc2635f4e0c94eb4435357701008e2f272f553d06e35b494b8ddc60aa221145e286c28ace0c89ee32827a28c2040e3a69bdc108b1a5dc8fb40b72e3
languageName: node
linkType: hard
@@ -10245,6 +12300,13 @@ __metadata:
languageName: node
linkType: hard
+"uint8array-extras@npm:^1.4.0":
+ version: 1.5.0
+ resolution: "uint8array-extras@npm:1.5.0"
+ checksum: 10/94fd56a2dda6a7445f5176f301f491814c87757d38e4b3c932299ab54d69ec504830e5d5c18ffa20cf694a69a210315be8b4a2c9952c6334da817ea2d2e1dce0
+ languageName: node
+ linkType: hard
+
"unbox-primitive@npm:^1.0.2":
version: 1.0.2
resolution: "unbox-primitive@npm:1.0.2"
@@ -10257,7 +12319,7 @@ __metadata:
languageName: node
linkType: hard
-"underscore@npm:^1.13.7":
+"underscore@npm:^1.13.8":
version: 1.13.8
resolution: "underscore@npm:1.13.8"
checksum: 10/b50ac5806d059cc180b1bd9adea6f7ed500021f4dc782dfc75d66a90337f6f0506623c1b37863f4a9bf64ffbeb5769b638a54b7f2f5966816189955815953139
@@ -10271,6 +12333,13 @@ __metadata:
languageName: node
linkType: hard
+"undici-types@npm:~7.21.0":
+ version: 7.21.0
+ resolution: "undici-types@npm:7.21.0"
+ checksum: 10/e38c0efbeaeabeb84f5d8a49d127fcae1626af09785b04fde4915e8312b47c5f81106c61e655cb63c59e429522460a313183168913e55b485a36e06d67689798
+ languageName: node
+ linkType: hard
+
"unicode-byte-truncate@npm:^1.0.0":
version: 1.0.0
resolution: "unicode-byte-truncate@npm:1.0.0"
@@ -10295,6 +12364,13 @@ __metadata:
languageName: node
linkType: hard
+"unicorn-magic@npm:^0.3.0":
+ version: 0.3.0
+ resolution: "unicorn-magic@npm:0.3.0"
+ checksum: 10/bdd7d7c522f9456f32a0b77af23f8854f9a7db846088c3868ec213f9550683ab6a2bdf3803577eacbafddb4e06900974385841ccb75338d17346ccef45f9cb01
+ languageName: node
+ linkType: hard
+
"unique-filename@npm:^5.0.0":
version: 5.0.0
resolution: "unique-filename@npm:5.0.0"
@@ -10322,6 +12398,13 @@ __metadata:
languageName: node
linkType: hard
+"universalify@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "universalify@npm:2.0.1"
+ checksum: 10/ecd8469fe0db28e7de9e5289d32bd1b6ba8f7183db34f3bfc4ca53c49891c2d6aa05f3fb3936a81285a905cc509fb641a0c3fc131ec786167eff41236ae32e60
+ languageName: node
+ linkType: hard
+
"unpipe@npm:~1.0.0":
version: 1.0.0
resolution: "unpipe@npm:1.0.0"
@@ -10396,9 +12479,9 @@ __metadata:
languageName: node
linkType: hard
-"update-browserslist-db@npm:^1.1.1":
- version: 1.1.2
- resolution: "update-browserslist-db@npm:1.1.2"
+"update-browserslist-db@npm:^1.2.3":
+ version: 1.2.3
+ resolution: "update-browserslist-db@npm:1.2.3"
dependencies:
escalade: "npm:^3.2.0"
picocolors: "npm:^1.1.1"
@@ -10406,7 +12489,7 @@ __metadata:
browserslist: ">= 4.21.0"
bin:
update-browserslist-db: cli.js
- checksum: 10/e7bf8221dfb21eba4a770cd803df94625bb04f65a706aa94c567de9600fe4eb6133fda016ec471dad43b9e7959c1bffb6580b5e20a87808d2e8a13e3892699a9
+ checksum: 10/059f774300efb4b084a49293143c511f3ae946d40397b5c30914e900cd5691a12b8e61b41dd54ed73d3b56c8204165a0333107dd784ccf8f8c81790bcc423175
languageName: node
linkType: hard
@@ -10439,6 +12522,15 @@ __metadata:
languageName: node
linkType: hard
+"use-sync-external-store@npm:^1.6.0":
+ version: 1.6.0
+ resolution: "use-sync-external-store@npm:1.6.0"
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ checksum: 10/b40ad2847ba220695bff2d4ba4f4d60391c0fb4fb012faa7a4c18eb38b69181936f5edc55a522c4d20a788d1a879b73c3810952c9d0fd128d01cb3f22042c09e
+ languageName: node
+ linkType: hard
+
"util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1":
version: 1.0.2
resolution: "util-deprecate@npm:1.0.2"
@@ -10453,7 +12545,7 @@ __metadata:
languageName: node
linkType: hard
-"util@npm:^0.12.5":
+"util@npm:^0.12.4, util@npm:^0.12.5":
version: 0.12.5
resolution: "util@npm:0.12.5"
dependencies:
@@ -10466,6 +12558,22 @@ __metadata:
languageName: node
linkType: hard
+"utils-merge@npm:1.0.1":
+ version: 1.0.1
+ resolution: "utils-merge@npm:1.0.1"
+ checksum: 10/5d6949693d58cb2e636a84f3ee1c6e7b2f9c16cb1d42d0ecb386d8c025c69e327205aa1c69e2868cc06a01e5e20681fbba55a4e0ed0cce913d60334024eae798
+ languageName: node
+ linkType: hard
+
+"uuid@npm:^8.3.2":
+ version: 8.3.2
+ resolution: "uuid@npm:8.3.2"
+ bin:
+ uuid: dist/bin/uuid
+ checksum: 10/9a5f7aa1d6f56dd1e8d5f2478f855f25c645e64e26e347a98e98d95781d5ed20062d6cca2eecb58ba7c84bc3910be95c0451ef4161906abaab44f9cb68ffbdd1
+ languageName: node
+ linkType: hard
+
"v8-to-istanbul@npm:^9.0.1":
version: 9.1.0
resolution: "v8-to-istanbul@npm:9.1.0"
@@ -10487,83 +12595,31 @@ __metadata:
languageName: node
linkType: hard
-"value-or-function@npm:^4.0.0":
- version: 4.0.0
- resolution: "value-or-function@npm:4.0.0"
- checksum: 10/16b6aed84b8f9732a7eb7a5035a1480be3689d097a73b1154fb827caf021d5f2b6f60c0dfe694bfc8c9605f06cfc093dc428efdc3d24cb2768fbe202ffd42ae1
- languageName: node
- linkType: hard
-
-"vary@npm:^1.1.2":
+"vary@npm:^1, vary@npm:^1.1.2, vary@npm:~1.1.2":
version: 1.1.2
resolution: "vary@npm:1.1.2"
checksum: 10/31389debef15a480849b8331b220782230b9815a8e0dbb7b9a8369559aed2e9a7800cd904d4371ea74f4c3527db456dc8e7ac5befce5f0d289014dbdf47b2242
languageName: node
linkType: hard
-"vinyl-contents@npm:^2.0.0":
- version: 2.0.0
- resolution: "vinyl-contents@npm:2.0.0"
- dependencies:
- bl: "npm:^5.0.0"
- vinyl: "npm:^3.0.0"
- checksum: 10/10d72a032e6317bf89713565d616df8726ee41601a41c48c7d778e61ab557c0a5fdee883ceecbfb33da4a5e11ea80e76e5ae63c1d13fda61edbb5ef50445c8b2
- languageName: node
- linkType: hard
-
-"vinyl-fs@npm:^4.0.0":
- version: 4.0.0
- resolution: "vinyl-fs@npm:4.0.0"
- dependencies:
- fs-mkdirp-stream: "npm:^2.0.1"
- glob-stream: "npm:^8.0.0"
- graceful-fs: "npm:^4.2.11"
- iconv-lite: "npm:^0.6.3"
- is-valid-glob: "npm:^1.0.0"
- lead: "npm:^4.0.0"
- normalize-path: "npm:3.0.0"
- resolve-options: "npm:^2.0.0"
- stream-composer: "npm:^1.0.2"
- streamx: "npm:^2.14.0"
- to-through: "npm:^3.0.0"
- value-or-function: "npm:^4.0.0"
- vinyl: "npm:^3.0.0"
- vinyl-sourcemap: "npm:^2.0.0"
- checksum: 10/22ae47c018600e6973b8a0a0c098927b09f60c4963cc5f717be04e774215774aa15ea97400803483d3dadafc5cff1a6744c3a2ab0322528234dc4e93ae1a55aa
- languageName: node
- linkType: hard
-
-"vinyl-sourcemap@npm:^2.0.0":
- version: 2.0.0
- resolution: "vinyl-sourcemap@npm:2.0.0"
- dependencies:
- convert-source-map: "npm:^2.0.0"
- graceful-fs: "npm:^4.2.10"
- now-and-later: "npm:^3.0.0"
- streamx: "npm:^2.12.5"
- vinyl: "npm:^3.0.0"
- vinyl-contents: "npm:^2.0.0"
- checksum: 10/f23fc251a3eb72100690e5e93685ef776d8fee20e076f29655536a31b5235426b9404eea76b6b268fa00648437acc98aad54a7e76661b97305706c487a54afdb
+"vm-browserify@npm:^1.0.1, vm-browserify@npm:^1.1.2":
+ version: 1.1.2
+ resolution: "vm-browserify@npm:1.1.2"
+ checksum: 10/ad5b17c9f7a9d9f1ed0e24c897782ab7a587c1fd40f370152482e1af154c7cf0b0bacc45c5ae76a44289881e083ae4ae127808fdff864aa9b562192aae8b5c3b
languageName: node
linkType: hard
-"vinyl@npm:^3.0.0":
- version: 3.0.0
- resolution: "vinyl@npm:3.0.0"
- dependencies:
- clone: "npm:^2.1.2"
- clone-stats: "npm:^1.0.0"
- remove-trailing-separator: "npm:^1.1.0"
- replace-ext: "npm:^2.0.0"
- teex: "npm:^1.0.1"
- checksum: 10/3371947a92c4b65c7adb944b22586480ffc723ec62347d09b64e593193cb523ce5f472d52549f0e0bbfa82db6c320cae46739461594b0602bba0419d0d7800fb
+"void-elements@npm:3.1.0":
+ version: 3.1.0
+ resolution: "void-elements@npm:3.1.0"
+ checksum: 10/0390f818107fa8fce55bb0a5c3f661056001c1d5a2a48c28d582d4d847347c2ab5b7f8272314cac58acf62345126b6b09bea623a185935f6b1c3bbce0dfd7f7f
languageName: node
linkType: hard
-"vm-browserify@npm:^1.1.2":
- version: 1.1.2
- resolution: "vm-browserify@npm:1.1.2"
- checksum: 10/ad5b17c9f7a9d9f1ed0e24c897782ab7a587c1fd40f370152482e1af154c7cf0b0bacc45c5ae76a44289881e083ae4ae127808fdff864aa9b562192aae8b5c3b
+"walk-up-path@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "walk-up-path@npm:4.0.0"
+ checksum: 10/6a230b20e5de296895116dc12b09dafaec1f72b8060c089533d296e241aff059dfaebe0d015c77467f857e4b40c78e08f7481add76f340233a1f34fa8af9ed63
languageName: node
linkType: hard
@@ -10576,6 +12632,15 @@ __metadata:
languageName: node
linkType: hard
+"wbuf@npm:^1.1.0, wbuf@npm:^1.7.3":
+ version: 1.7.3
+ resolution: "wbuf@npm:1.7.3"
+ dependencies:
+ minimalistic-assert: "npm:^1.0.0"
+ checksum: 10/c18b51c4e1fb19705c94b93c0cf093ba014606abceee949399d56074ef1863bf4897a8d884be24e8d224d18c9ce411cf6924006d0a5430492729af51256e067a
+ languageName: node
+ linkType: hard
+
"webidl-conversions@npm:^4.0.2":
version: 4.0.2
resolution: "webidl-conversions@npm:4.0.2"
@@ -10590,13 +12655,128 @@ __metadata:
languageName: node
linkType: hard
-"whatwg-url@npm:^14.1.0 || ^13.0.0":
- version: 14.1.0
- resolution: "whatwg-url@npm:14.1.0"
+"webpack-bundle-analyzer@npm:4.10.2":
+ version: 4.10.2
+ resolution: "webpack-bundle-analyzer@npm:4.10.2"
+ dependencies:
+ "@discoveryjs/json-ext": "npm:0.5.7"
+ acorn: "npm:^8.0.4"
+ acorn-walk: "npm:^8.0.0"
+ commander: "npm:^7.2.0"
+ debounce: "npm:^1.2.1"
+ escape-string-regexp: "npm:^4.0.0"
+ gzip-size: "npm:^6.0.0"
+ html-escaper: "npm:^2.0.2"
+ opener: "npm:^1.5.2"
+ picocolors: "npm:^1.0.0"
+ sirv: "npm:^2.0.3"
+ ws: "npm:^7.3.1"
+ bin:
+ webpack-bundle-analyzer: lib/bin/analyzer.js
+ checksum: 10/cb7ff9d01dc04ef23634f439ab9fe739e022cce5595cb340e01d106ed474605ce4ef50b11b47e444507d341b16650dcb3610e88944020ca6c1c38e88072d43ba
+ languageName: node
+ linkType: hard
+
+"webpack-dev-middleware@npm:^7.4.2":
+ version: 7.4.5
+ resolution: "webpack-dev-middleware@npm:7.4.5"
+ dependencies:
+ colorette: "npm:^2.0.10"
+ memfs: "npm:^4.43.1"
+ mime-types: "npm:^3.0.1"
+ on-finished: "npm:^2.4.1"
+ range-parser: "npm:^1.2.1"
+ schema-utils: "npm:^4.0.0"
+ peerDependencies:
+ webpack: ^5.0.0
+ peerDependenciesMeta:
+ webpack:
+ optional: true
+ checksum: 10/50e9b162d740b81f14c0926beb5fa01fc6d2ae16740bab709320dd5ea1a52ebcc48b66f3db5a7262fc4dc31a7e18590db766cef5da90e77a39e3a26d3b5b1001
+ languageName: node
+ linkType: hard
+
+"webpack-dev-server@npm:5.2.2":
+ version: 5.2.2
+ resolution: "webpack-dev-server@npm:5.2.2"
+ dependencies:
+ "@types/bonjour": "npm:^3.5.13"
+ "@types/connect-history-api-fallback": "npm:^1.5.4"
+ "@types/express": "npm:^4.17.21"
+ "@types/express-serve-static-core": "npm:^4.17.21"
+ "@types/serve-index": "npm:^1.9.4"
+ "@types/serve-static": "npm:^1.15.5"
+ "@types/sockjs": "npm:^0.3.36"
+ "@types/ws": "npm:^8.5.10"
+ ansi-html-community: "npm:^0.0.8"
+ bonjour-service: "npm:^1.2.1"
+ chokidar: "npm:^3.6.0"
+ colorette: "npm:^2.0.10"
+ compression: "npm:^1.7.4"
+ connect-history-api-fallback: "npm:^2.0.0"
+ express: "npm:^4.21.2"
+ graceful-fs: "npm:^4.2.6"
+ http-proxy-middleware: "npm:^2.0.9"
+ ipaddr.js: "npm:^2.1.0"
+ launch-editor: "npm:^2.6.1"
+ open: "npm:^10.0.3"
+ p-retry: "npm:^6.2.0"
+ schema-utils: "npm:^4.2.0"
+ selfsigned: "npm:^2.4.1"
+ serve-index: "npm:^1.9.1"
+ sockjs: "npm:^0.3.24"
+ spdy: "npm:^4.0.2"
+ webpack-dev-middleware: "npm:^7.4.2"
+ ws: "npm:^8.18.0"
+ peerDependencies:
+ webpack: ^5.0.0
+ peerDependenciesMeta:
+ webpack:
+ optional: true
+ webpack-cli:
+ optional: true
+ bin:
+ webpack-dev-server: bin/webpack-dev-server.js
+ checksum: 10/59517409cd38c01a875a03b9658f3d20d492b5b8bead9ded4a0f3d33e6857daf2d352fe89f0181dcaea6d0fbe84b0494cb4750a87120fe81cdbb3c32b499451c
+ languageName: node
+ linkType: hard
+
+"webpack-merge@npm:^6.0.1":
+ version: 6.0.1
+ resolution: "webpack-merge@npm:6.0.1"
+ dependencies:
+ clone-deep: "npm:^4.0.1"
+ flat: "npm:^5.0.2"
+ wildcard: "npm:^2.0.1"
+ checksum: 10/39ab911c26237922295d9b3d0617c8ea0c438c35a3b21b05506616a10423f5ece1962bccbedec932c5db61af57999b6d055d56d1f1755c63e2701bd4a55c3887
+ languageName: node
+ linkType: hard
+
+"websocket-driver@npm:>=0.5.1, websocket-driver@npm:^0.7.4":
+ version: 0.7.5
+ resolution: "websocket-driver@npm:0.7.5"
+ dependencies:
+ http-parser-js: "npm:>=0.5.1"
+ safe-buffer: "npm:>=5.1.0"
+ websocket-extensions: "npm:>=0.1.1"
+ checksum: 10/0671fef8c79ba1b1b2fa6b7d95cb034d059410e7c4cfd7ef42063a254e12ca2917806c3a5026206b33abf25a5d44a651c547b8f74d9ec94c9fe4df6fa1bc63f7
+ languageName: node
+ linkType: hard
+
+"websocket-extensions@npm:>=0.1.1":
+ version: 0.1.4
+ resolution: "websocket-extensions@npm:0.1.4"
+ checksum: 10/b5399b487d277c78cdd2aef63764b67764aa9899431e3a2fa272c6ad7236a0fb4549b411d89afa76d5afd664c39d62fc19118582dc937e5bb17deb694f42a0d1
+ languageName: node
+ linkType: hard
+
+"whatwg-url@npm:^14.1.0":
+ version: 14.2.0
+ resolution: "whatwg-url@npm:14.2.0"
dependencies:
- tr46: "npm:^5.0.0"
+ tr46: "npm:^5.1.0"
webidl-conversions: "npm:^7.0.0"
- checksum: 10/3afd325de6cf3a367820ce7c3566a1f78eb1409c4f27b1867c74c76dab096d26acedf49a8b9b71db53df7d806ec2e9ae9ed96990b2f7d1abe6ecf1fe753af6eb
+ checksum: 10/f0a95b0601c64f417c471536a2d828b4c16fe37c13662483a32f02f183ed0f441616609b0663fb791e524e8cd56d9a86dd7366b1fc5356048ccb09b576495e7c
languageName: node
linkType: hard
@@ -10661,6 +12841,13 @@ __metadata:
languageName: node
linkType: hard
+"wildcard@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "wildcard@npm:2.0.1"
+ checksum: 10/e0c60a12a219e4b12065d1199802d81c27b841ed6ad6d9d28240980c73ceec6f856771d575af367cbec2982d9ae7838759168b551776577f155044f5a5ba843c
+ languageName: node
+ linkType: hard
+
"winston-transport@npm:^4.9.0":
version: 4.9.0
resolution: "winston-transport@npm:4.9.0"
@@ -10737,6 +12924,55 @@ __metadata:
languageName: node
linkType: hard
+"ws@npm:^7.3.1":
+ version: 7.5.13
+ resolution: "ws@npm:7.5.13"
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+ checksum: 10/0873c813ce75c466b026ce0a4ce9a8b5b5f1dc9ef0dd7ae9690fa4025c66afb165d3a45550357080b29d66a0e3028cd13c72ccefc83ce10723b4822a574ebc99
+ languageName: node
+ linkType: hard
+
+"ws@npm:^8.18.0, ws@npm:~8.21.0":
+ version: 8.21.1
+ resolution: "ws@npm:8.21.1"
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ">=5.0.2"
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+ checksum: 10/8493bc543072763d7bacffb2282c9d7954dc5c599c9df4c2d15f91c217f63e293a33ffc70756e3f2bf8c5d85bc6069ad7d9983c382d4713c807b083ffb1b1719
+ languageName: node
+ linkType: hard
+
+"wsl-utils@npm:^0.1.0":
+ version: 0.1.0
+ resolution: "wsl-utils@npm:0.1.0"
+ dependencies:
+ is-wsl: "npm:^3.1.0"
+ checksum: 10/de4c92187e04c3c27b4478f410a02e81c351dc85efa3447bf1666f34fc80baacd890a6698ec91995631714086992036013286aea3d77e6974020d40a08e00aec
+ languageName: node
+ linkType: hard
+
+"wsl-utils@npm:^0.3.0":
+ version: 0.3.1
+ resolution: "wsl-utils@npm:0.3.1"
+ dependencies:
+ is-wsl: "npm:^3.1.0"
+ powershell-utils: "npm:^0.1.0"
+ checksum: 10/46800b92fa4974f2a846a93f0b8c409a455c35897d001a7599b5524766b603c8fb0945d2b21ad6ad27d4b0ae7e72ca2e58d832ccfcaabf659399921c6448b1d0
+ languageName: node
+ linkType: hard
+
"xml-js@npm:^1.6.11":
version: 1.6.11
resolution: "xml-js@npm:1.6.11"
@@ -10748,6 +12984,13 @@ __metadata:
languageName: node
linkType: hard
+"xml-naming@npm:^0.1.0":
+ version: 0.1.0
+ resolution: "xml-naming@npm:0.1.0"
+ checksum: 10/45abd94ba64a508bda3f4d0b70e49811a3c3542596252c213caf47c858bbe9bba365ebba8eeff68e2a876e22a1bf6855d90cd2019b2f28012cebb167a4df2293
+ languageName: node
+ linkType: hard
+
"xmlbuilder@npm:^15.1.1":
version: 15.1.1
resolution: "xmlbuilder@npm:15.1.1"
@@ -10755,7 +12998,7 @@ __metadata:
languageName: node
linkType: hard
-"xtend@npm:^4.0.2, xtend@npm:~4.0.1":
+"xtend@npm:^4.0.2":
version: 4.0.2
resolution: "xtend@npm:4.0.2"
checksum: 10/ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a
@@ -10790,19 +13033,12 @@ __metadata:
languageName: node
linkType: hard
-"yaml@npm:^2.6.0":
- version: 2.8.3
- resolution: "yaml@npm:2.8.3"
+"yaml@npm:^2.6.0, yaml@npm:^2.8.2, yaml@npm:^2.9.0":
+ version: 2.9.0
+ resolution: "yaml@npm:2.9.0"
bin:
yaml: bin.mjs
- checksum: 10/ecad41d39d34fae5cc17ea2d4b7f7f55faacd45cbce8983ba22d48d1ed1a92ed242ea49ea813a79ac39a69f75f9c5a03e7b5395fd954d55476f25e21a47c141d
- languageName: node
- linkType: hard
-
-"yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3":
- version: 20.2.9
- resolution: "yargs-parser@npm:20.2.9"
- checksum: 10/0188f430a0f496551d09df6719a9132a3469e47fe2747208b1dd0ab2bb0c512a95d0b081628bbca5400fb20dbf2fabe63d22badb346cecadffdd948b049f3fcc
+ checksum: 10/9a95e8e08651c3d292ab6a5befeb5f57b76801caa097c75bb45c9a70ce19c1b11f57e87a6ef84a579ea070ed2c2c8ac541c88c0ae684d544d5f42c7e77d11b7b
languageName: node
linkType: hard
@@ -10813,21 +13049,6 @@ __metadata:
languageName: node
linkType: hard
-"yargs@npm:^16.2.0":
- version: 16.2.0
- resolution: "yargs@npm:16.2.0"
- dependencies:
- cliui: "npm:^7.0.2"
- escalade: "npm:^3.1.1"
- get-caller-file: "npm:^2.0.5"
- require-directory: "npm:^2.1.1"
- string-width: "npm:^4.2.0"
- y18n: "npm:^5.0.5"
- yargs-parser: "npm:^20.2.2"
- checksum: 10/807fa21211d2117135d557f95fcd3c3d390530cda2eca0c840f1d95f0f40209dcfeb5ec18c785a1f3425896e623e3b2681e8bb7b6600060eda1c3f4804e7957e
- languageName: node
- linkType: hard
-
"yargs@npm:^17.7.2":
version: 17.7.2
resolution: "yargs@npm:17.7.2"
@@ -10856,3 +13077,10 @@ __metadata:
checksum: 10/f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700
languageName: node
linkType: hard
+
+"yoctocolors@npm:^2.1.1":
+ version: 2.1.2
+ resolution: "yoctocolors@npm:2.1.2"
+ checksum: 10/6ee42d665a4cc161c7de3f015b2a65d6c65d2808bfe3b99e228bd2b1b784ef1e54d1907415c025fc12b400f26f372bfc1b71966c6c738d998325ca422eb39363
+ languageName: node
+ linkType: hard
diff --git a/package.json b/package.json
index f929601411d..e70d9a36747 100644
--- a/package.json
+++ b/package.json
@@ -37,12 +37,12 @@
"test-all": "yarn install && run install-and-build && run check-types && run lint:packages && run lint:meteor && run test:packages && run test:meteor"
},
"devDependencies": {
- "concurrently": "^9.2.1",
+ "concurrently": "^10.0.3",
"husky": "^9.1.7",
- "lint-staged": "^15.5.2",
+ "lint-staged": "^17.1.1",
"rimraf": "^6.1.3",
- "semver": "^7.7.4",
- "snyk-nodejs-lockfile-parser": "^2.6.0"
+ "semver": "^7.8.5",
+ "snyk-nodejs-lockfile-parser": "^2.10.0"
},
- "packageManager": "yarn@4.12.0"
+ "packageManager": "yarn@4.17.0"
}
diff --git a/packages/blueprints-integration/jest.config.js b/packages/blueprints-integration/jest.config.js
index 4b068877330..0d69f4ed7cc 100644
--- a/packages/blueprints-integration/jest.config.js
+++ b/packages/blueprints-integration/jest.config.js
@@ -9,16 +9,19 @@ module.exports = {
diagnostics: {
ignoreCodes: [
151002, // hybrid module kind (Node16/18/Next)
+ 2823, // Import attributes not supported in CJS mode (ts-jest forces CJS, emits require() anyway)
],
},
},
],
},
moduleNameMapper: {
+ '^@sofie-automation/shared-lib/dist/(.+)\\.js$': '/../shared-lib/src/$1',
+ '^@sofie-automation/shared-lib/dist/(.+)$': '/../shared-lib/src/$1',
'(.+)\\.js$': '$1',
},
testMatch: ['**/__tests__/**/*.spec.(ts|js)'],
- testPathIgnorePatterns: ['integrationTests'],
+ testPathIgnorePatterns: ['integrationTests', 'dist'],
testEnvironment: 'node',
coverageThreshold: {
global: {
diff --git a/packages/blueprints-integration/package.json b/packages/blueprints-integration/package.json
index 06172465c6b..e3d506916a4 100644
--- a/packages/blueprints-integration/package.json
+++ b/packages/blueprints-integration/package.json
@@ -42,5 +42,5 @@
"publishConfig": {
"access": "public"
},
- "packageManager": "yarn@4.12.0"
+ "packageManager": "yarn@4.17.0"
}
diff --git a/packages/blueprints-integration/src/api/showStyle.ts b/packages/blueprints-integration/src/api/showStyle.ts
index 63a527b8e4c..5935853dd35 100644
--- a/packages/blueprints-integration/src/api/showStyle.ts
+++ b/packages/blueprints-integration/src/api/showStyle.ts
@@ -18,6 +18,9 @@ import type {
IFixUpConfigContext,
IOnTakeContext,
IOnSetAsNextContext,
+ IExternalEventContext,
+ IPlaylistSnapshotCreatedContext,
+ IBlueprintPlaylistSnapshotInfo,
} from '../context/index.js'
import type { IngestAdlib, ExtendedIngestRundown, IngestRundown } from '../ingest.js'
import type { IBlueprintExternalMessageQueueObj } from '../message.js'
@@ -41,7 +44,7 @@ import type { IBlueprintShowStyleVariant, IOutputLayer, ISourceLayer } from '../
import type { SourceLayerType } from '../content.js'
import type { TSR, OnGenerateTimelineObj, TimelineObjectCoreExt } from '../timeline.js'
import type { IBlueprintConfig } from '../common.js'
-import type { ReadonlyDeep } from 'type-fest'
+import type { JsonValue, ReadonlyDeep } from 'type-fest'
import type { JSONSchema } from '@sofie-automation/shared-lib/dist/lib/JSONSchemaTypes'
import type { JSONBlob } from '@sofie-automation/shared-lib/dist/lib/JSONBlob'
import type { BlueprintConfigCoreConfig, BlueprintManifestBase, BlueprintManifestType, IConfigMessage } from './base.js'
@@ -51,6 +54,8 @@ import type { ABResolverConfiguration } from '../abPlayback.js'
import type { SofieIngestSegment } from '../ingest-types.js'
import { PackageStatusMessage } from '@sofie-automation/shared-lib/dist/packageStatusMessages'
import { BlueprintPlayoutPersistentStore } from '../context/playoutStore.js'
+import type { ITranslatableMessage } from '../translations.js'
+import type { BlueprintExternalEvent, BlueprintExternalEventSubscription } from '../externalEvent.js'
export { PackageStatusMessage }
@@ -116,7 +121,8 @@ export interface ShowStyleBlueprintManifest<
context: ISyncIngestUpdateToPartInstanceContext,
existingPartInstance: BlueprintSyncIngestPartInstance,
newData: BlueprintSyncIngestNewData,
- playoutStatus: 'previous' | 'current' | 'next'
+ playoutStatus: 'previous' | 'current' | 'next',
+ playoutPersistentState: BlueprintPlayoutPersistentStore
) => void
/**
@@ -131,6 +137,17 @@ export interface ShowStyleBlueprintManifest<
triggerMode?: string
) => Promise
+ /**
+ * Handle a batch of external events (e.g. TSR device state changes).
+ * Called when one or more events matching the rundown's {@link BlueprintResultRundown.externalEventSubscriptions} are received.
+ * Events are batched to avoid queuing a handler per event during bursts.
+ */
+ onExternalEvent?: (
+ context: IExternalEventContext,
+ playoutPersistentState: BlueprintPlayoutPersistentStore,
+ events: BlueprintExternalEvent[]
+ ) => Promise
+
/** Execute an action defined by an IBlueprintActionManifest */
executeAction?: (
context: IActionExecutionContext,
@@ -141,12 +158,7 @@ export interface ShowStyleBlueprintManifest<
privateData: unknown | undefined,
publicData: unknown | undefined,
actionOptions: { [key: string]: any } | undefined
- ) => Promise<{
- /**
- * To be set if the payload sent by the user is invalid. When set, a 409 `ValidationFailed` message will be displayed to the User.
- */
- validationErrors: any
- } | void>
+ ) => Promise
/** Generate adlib piece from ingest data */
getAdlibItem?: (
@@ -204,6 +216,25 @@ export interface ShowStyleBlueprintManifest<
// Events
+ /**
+ * Called after a rundown playlist snapshot has been generated, before Meteor persists the snapshot file.
+ *
+ * Use this to run show-specific side effects (e.g. TSR actions) when a playlist snapshot is taken.
+ * The callback receives {@link IPlaylistSnapshotCreatedContext} with `listPlayoutDevices` and `executeTSRAction`.
+ *
+ * For playlists containing multiple rundowns, only one show-style blueprint is invoked per snapshot:
+ * current part, then next part, then first rundown by name.
+ *
+ * Errors are logged by Core and do not fail snapshot generation or storage.
+ *
+ * @param context Show-style and studio context with TSR actions for the studio worker job.
+ * @param info Metadata about the snapshot (not the snapshot JSON).
+ */
+ onPlaylistSnapshotCreated?: (
+ context: IPlaylistSnapshotCreatedContext,
+ info: IBlueprintPlaylistSnapshotInfo
+ ) => Promise
+
/**
* Called at the final stage of RundownPlaylist activation, before the updated timeline is submitted to the Playout Gateway,
* This is a good place to prepare any external systems for the rundown going live.
@@ -289,6 +320,8 @@ export interface BlueprintResultRundown {
globalActions: IBlueprintActionManifest[]
globalPieces?: IBlueprintRundownPiece[]
baseline: BlueprintResultBaseline
+ /** Subscriptions to external events (e.g. TSR device state changes) for this rundown */
+ externalEventSubscriptions?: BlueprintExternalEventSubscription[]
}
export interface BlueprintResultSegment {
segment: IBlueprintSegment
@@ -381,3 +414,20 @@ export interface IShowStyleVariantConfigPreset {
config: Partial
}
+
+export interface BlueprintExecuteActionResult {
+ /**
+ * User friendly error message to return to the caller if the action was rejected.
+ */
+ message: ITranslatableMessage
+
+ /**
+ * HTTP error code for the action. If set, must be in the range 400-499
+ */
+ errorCode?: number
+
+ /**
+ * Additional details payload to provide to the caller
+ */
+ details?: JsonValue
+}
diff --git a/packages/blueprints-integration/src/api/studio.ts b/packages/blueprints-integration/src/api/studio.ts
index bd988641de5..acc01e9c429 100644
--- a/packages/blueprints-integration/src/api/studio.ts
+++ b/packages/blueprints-integration/src/api/studio.ts
@@ -9,6 +9,9 @@ import type {
IStudioBaselineContext,
IStudioUserContext,
IProcessIngestDataContext,
+ ISystemSnapshotCreatedContext,
+ IBlueprintSystemSnapshotInfo,
+ BlueprintSnapshotType as _BlueprintSnapshotType,
} from '../context/index.js'
import type { IBlueprintShowStyleBase } from '../showStyle.js'
import type {
@@ -41,6 +44,26 @@ import type { MosGatewayConfig } from '@sofie-automation/shared-lib/dist/generat
import type { PlayoutGatewayConfig } from '@sofie-automation/shared-lib/dist/generated/PlayoutGatewayConfigTypes'
import type { LiveStatusGatewayConfig } from '@sofie-automation/shared-lib/dist/generated/LiveStatusGatewayOptionsTypes'
+/**
+ * Context provided to device status message functions.
+ * Contains the device name, device ID, and any additional context from the TSR status detail.
+ */
+export interface DeviceStatusContext {
+ /** Human-readable name of the device */
+ deviceName: string
+ /** Internal device ID */
+ deviceId?: string
+ /** Additional context values from the TSR error (e.g., host, port, channel, etc.) */
+ [key: string]: unknown
+}
+
+/**
+ * A function that receives device status context and returns a custom status message.
+ * Return `undefined` to fall back to the default TSR message.
+ * Return an empty string `''` to suppress the message entirely.
+ */
+export type DeviceStatusMessageFunction = (context: DeviceStatusContext) => string | undefined
+
export interface StudioBlueprintManifest<
TRawConfig = IBlueprintConfig,
TProcessedConfig = unknown,
@@ -56,6 +79,64 @@ export interface StudioBlueprintManifest<
/** Translations connected to the studio (as stringified JSON) */
translations?: string
+ /**
+ * Alternate device status messages, to override the default messages from TSR devices.
+ * Keys are status code strings from TSR devices (e.g., 'DEVICE_ATEM_DISCONNECTED').
+ *
+ * Import status codes from 'timeline-state-resolver-types' for type safety.
+ * Values can be:
+ * - String templates using {{variable}} syntax for interpolation with context values
+ * - Functions that receive DeviceStatusContext and return a custom message string
+ * - Empty string to suppress the status message entirely
+ *
+ * @example
+ * ```typescript
+ * import { AtemStatusCode, CasparCGStatusCode } from 'timeline-state-resolver-types'
+ *
+ * deviceStatusMessages: {
+ * // String template with placeholders
+ * [AtemStatusCode.DISCONNECTED]: 'Vision mixer offline - check network to {{host}}',
+ * [AtemStatusCode.PSU_FAULT]: 'PSU {{psuNumber}} needs attention',
+ *
+ * // Function for complex conditional logic
+ * [CasparCGStatusCode.CHANNEL_ERROR]: (context) => {
+ * const channel = context.channel as number
+ * if (channel === 1) return 'Primary graphics output failed!'
+ * return `Graphics channel ${channel} error on ${context.deviceName}`
+ * },
+ *
+ * // Suppress a noisy message
+ * [SomeStatusCode.NOISY_STATUS]: '',
+ * }
+ * ```
+ */
+ deviceStatusMessages?: Record
+
+ /**
+ * Alternate device action error messages, to override the default messages from TSR devices.
+ * Keys are action error code strings from TSR devices (e.g., 'ACTION_HTTPSEND_REQUEST_FAILED').
+ *
+ * Similar to deviceStatusMessages but applies to device action execution failures
+ * (e.g., HTTP Send failures, device restart failures) rather than ongoing status errors.
+ *
+ * Import action error codes from 'timeline-state-resolver-types' for type safety.
+ * Values can be:
+ * - String templates using {{variable}} syntax for interpolation with context values
+ * - Functions that receive DeviceStatusContext and return a custom message string
+ * - Empty string to suppress the message entirely (action result will show as generic error)
+ *
+ * @example
+ * ```typescript
+ * import { HttpSendActionErrorCode } from 'timeline-state-resolver-types'
+ *
+ * deviceActionMessages: {
+ * [HttpSendActionErrorCode.REQUEST_FAILED]: 'Failed to trigger graphics: {{errorMessage}}',
+ * [HttpSendActionErrorCode.MISSING_URL]: 'HTTP action not configured - missing URL',
+ * }
+ * ```
+ */
+ deviceActionMessages?: Record
+
/** Returns the items used to build the baseline (default state) of a studio, this is the baseline used when there's no active rundown */
getBaseline: (context: IStudioBaselineContext) => BlueprintResultStudioBaseline
@@ -140,6 +221,27 @@ export interface StudioBlueprintManifest<
previousNrcsIngestRundown: IngestRundown | undefined,
changes: NrcsIngestChangeDetails | UserOperationChange | PlayoutOperationChange
) => Promise
+
+ /**
+ * Called after a system snapshot has been stored to disk.
+ *
+ * Use this to run studio-level side effects (e.g. TSR actions on playout devices) at snapshot time.
+ * The callback receives {@link ISystemSnapshotCreatedContext} with `listPlayoutDevices` and `executeTSRAction`.
+ *
+ * Invoked once per studio:
+ * - Studio-scoped snapshots (`studioId` in snapshot options): once for that studio.
+ * - Full-system snapshots (no `studioId`): once per studio included in the snapshot.
+ * - Debug snapshots: once for the target studio when `info.type` is `'debug'` ({@link _BlueprintSnapshotType}).
+ *
+ * Errors are logged by Core and do not fail snapshot storage.
+ *
+ * @param context Studio context and TSR actions for the studio worker job.
+ * @param info Metadata about the snapshot (not the snapshot JSON).
+ */
+ onSystemSnapshotCreated?: (
+ context: ISystemSnapshotCreatedContext,
+ info: IBlueprintSystemSnapshotInfo
+ ) => Promise
}
export interface BlueprintResultStudioBaseline {
diff --git a/packages/blueprints-integration/src/api/system.ts b/packages/blueprints-integration/src/api/system.ts
index 3d905ac7cc2..9e7a9069d88 100644
--- a/packages/blueprints-integration/src/api/system.ts
+++ b/packages/blueprints-integration/src/api/system.ts
@@ -2,6 +2,10 @@ import type { IBlueprintTriggeredActions } from '../triggers.js'
import type { BlueprintManifestBase, BlueprintManifestType } from './base.js'
import type { ICoreSystemApplyConfigContext } from '../context/systemApplyConfigContext.js'
import type { ICoreSystemSettings } from '@sofie-automation/shared-lib/dist/core/model/CoreSystemSettings'
+import type { SystemErrorCode } from '@sofie-automation/shared-lib/dist/systemErrorMessages'
+
+// Re-export so blueprints can import from blueprints-integration
+export { SystemErrorCode } from '@sofie-automation/shared-lib/dist/systemErrorMessages'
export interface SystemBlueprintManifest extends BlueprintManifestBase {
blueprintType: BlueprintManifestType.SYSTEM
@@ -9,6 +13,24 @@ export interface SystemBlueprintManifest extends BlueprintManifestBase {
/** Translations connected to the studio (as stringified JSON) */
translations?: string
+ /**
+ * Alternate system error messages, to override the builtin ones produced by Sofie.
+ * Keys are SystemErrorCode values (e.g., 'DATABASE_CONNECTION_LOST').
+ *
+ * Templates use {{variable}} syntax for interpolation with context values.
+ *
+ * @example
+ * ```typescript
+ * import { SystemErrorCode } from '@sofie-automation/blueprints-integration'
+ *
+ * systemErrorMessages: {
+ * [SystemErrorCode.DATABASE_CONNECTION_LOST]: 'Database offline - contact IT support',
+ * [SystemErrorCode.SERVICE_UNAVAILABLE]: 'Service {{serviceName}} is not responding',
+ * }
+ * ```
+ */
+ systemErrorMessages?: Partial>
+
/**
* Apply the config by generating the data to be saved into the db.
* This should be written to give a predictable and stable result, it can be called with the same config multiple times
diff --git a/packages/blueprints-integration/src/context/adlibActionContext.ts b/packages/blueprints-integration/src/context/adlibActionContext.ts
index 00da91558df..836d3daae2e 100644
--- a/packages/blueprints-integration/src/context/adlibActionContext.ts
+++ b/packages/blueprints-integration/src/context/adlibActionContext.ts
@@ -1,11 +1,11 @@
-import type { DatastorePersistenceMode, Time } from '../common.js'
+import type { DatastorePersistenceMode } from '../common.js'
import type { IEventContext } from './index.js'
import type { IShowStyleUserContext } from './showStyleContext.js'
import { IPartAndPieceActionContext } from './partsAndPieceActionContext.js'
import { IExecuteTSRActionsContext, ITriggerIngestChangeContext } from './executeTsrActionContext.js'
-import { IBlueprintPart, IBlueprintPartInstance, IBlueprintPiece } from '../index.js'
import { IRouteSetMethods } from './routeSetContext.js'
import { ITTimersContext } from './tTimersContext.js'
+import type { IPlayoutActionContext } from './playoutActionContext.js'
/** Actions */
export interface IDataStoreMethods {
@@ -30,23 +30,10 @@ export interface IActionExecutionContext
IExecuteTSRActionsContext,
ITriggerIngestChangeContext,
IRouteSetMethods,
- ITTimersContext {
+ ITTimersContext,
+ IPlayoutActionContext {
/** Fetch the showstyle config for the specified part */
// getNextShowStyleConfig(): Readonly<{ [key: string]: ConfigItemValue }>
-
- /** Move the next part through the rundown. Can move by either a number of parts, or segments in either direction. */
- moveNextPart(partDelta: number, segmentDelta: number, ignoreQuickloop?: boolean): Promise
- /** Set flag to perform take after executing the current action. Returns state of the flag after each call. */
- takeAfterExecuteAction(take: boolean): Promise
- /** Inform core that a take out of the current partinstance should be blocked until the specified time */
- blockTakeUntil(time: Time | null): Promise
-
- /** Insert a queued part to follow the current part */
- queuePart(part: IBlueprintPart, pieces: IBlueprintPiece[]): Promise
-
- /** Insert a queued part to follow the taken part */
- queuePartAfterTake(part: IBlueprintPart, pieces: IBlueprintPiece[]): void
-
/** Misc actions */
// updateAction(newManifest: Pick): void // only updates itself. to allow for the next one to do something different
// executePeripheralDeviceAction(deviceId: string, functionName: string, args: any[]): Promise
diff --git a/packages/blueprints-integration/src/context/executeTsrActionContext.ts b/packages/blueprints-integration/src/context/executeTsrActionContext.ts
index a8efe08ca41..36774a38112 100644
--- a/packages/blueprints-integration/src/context/executeTsrActionContext.ts
+++ b/packages/blueprints-integration/src/context/executeTsrActionContext.ts
@@ -2,7 +2,7 @@ import { PeripheralDeviceId } from '@sofie-automation/shared-lib/dist/core/model
import { IBlueprintPlayoutDevice, TSR } from '../index.js'
export interface IExecuteTSRActionsContext {
- /** Returns a list of the PeripheralDevices */
+ /** Returns playout-gateway subdevices for the studio, or an empty list if none are configured. */
listPlayoutDevices(): Promise
/** Execute an action on a certain PeripheralDevice */
executeTSRAction(
diff --git a/packages/blueprints-integration/src/context/externalEventContext.ts b/packages/blueprints-integration/src/context/externalEventContext.ts
new file mode 100644
index 00000000000..527f3cb24f5
--- /dev/null
+++ b/packages/blueprints-integration/src/context/externalEventContext.ts
@@ -0,0 +1,19 @@
+import type { IEventContext } from './index.js'
+import type { IShowStyleUserContext } from './showStyleContext.js'
+import type { IPartAndPieceActionContext } from './partsAndPieceActionContext.js'
+import type { IExecuteTSRActionsContext, ITriggerIngestChangeContext } from './executeTsrActionContext.js'
+import type { IRouteSetMethods } from './routeSetContext.js'
+import type { IDataStoreMethods } from './adlibActionContext.js'
+import type { IPlayoutActionContext } from './playoutActionContext.js'
+
+/** Context provided to the blueprint's `onExternalEvent` handler. */
+export interface IExternalEventContext
+ extends
+ IShowStyleUserContext,
+ IEventContext,
+ IDataStoreMethods,
+ IPartAndPieceActionContext,
+ IExecuteTSRActionsContext,
+ ITriggerIngestChangeContext,
+ IRouteSetMethods,
+ IPlayoutActionContext {}
diff --git a/packages/blueprints-integration/src/context/index.ts b/packages/blueprints-integration/src/context/index.ts
index a1cba0ab9fe..78fe281ccdd 100644
--- a/packages/blueprints-integration/src/context/index.ts
+++ b/packages/blueprints-integration/src/context/index.ts
@@ -1,7 +1,9 @@
export * from './adlibActionContext.js'
export * from './baseContext.js'
export * from './eventContext.js'
+export * from './externalEventContext.js'
export * from './fixUpConfigContext.js'
+export * from './playoutActionContext.js'
export * from './onSetAsNextContext.js'
export * from './onTakeContext.js'
export * from './packageInfoContext.js'
@@ -9,5 +11,7 @@ export * from './playoutStore.js'
export * from './processIngestDataContext.js'
export * from './rundownContext.js'
export * from './showStyleContext.js'
+export * from './snapshotContext.js'
export * from './studioContext.js'
export * from './syncIngestChangesContext.js'
+export * from './tTimersContext.js'
diff --git a/packages/blueprints-integration/src/context/onSetAsNextContext.ts b/packages/blueprints-integration/src/context/onSetAsNextContext.ts
index 114ef0f47ca..88ff19d6b23 100644
--- a/packages/blueprints-integration/src/context/onSetAsNextContext.ts
+++ b/packages/blueprints-integration/src/context/onSetAsNextContext.ts
@@ -1,5 +1,6 @@
import {
IBlueprintMutatablePart,
+ IBlueprintMutatablePartInstance,
IBlueprintPart,
IBlueprintPartInstance,
IBlueprintPiece,
@@ -75,10 +76,16 @@ export interface IOnSetAsNextContext
/** Update a piecesInstance */
updatePieceInstance(pieceInstanceId: string, piece: Partial): Promise
- /** Update a partInstance */
+ /**
+ * Update a partInstance
+ * @param part Which part to update
+ * @param props Properties of the Part itself
+ * @param instanceProps Properties of the PartInstance (runtime state)
+ */
updatePartInstance(
part: 'current' | 'next',
- props: Partial
+ props: Partial,
+ instanceProps?: Partial
): Promise
/**
diff --git a/packages/blueprints-integration/src/context/partsAndPieceActionContext.ts b/packages/blueprints-integration/src/context/partsAndPieceActionContext.ts
index a5a2b9c998c..cf7f570fa2b 100644
--- a/packages/blueprints-integration/src/context/partsAndPieceActionContext.ts
+++ b/packages/blueprints-integration/src/context/partsAndPieceActionContext.ts
@@ -1,6 +1,7 @@
import { ReadonlyDeep } from 'type-fest'
import {
IBlueprintMutatablePart,
+ IBlueprintMutatablePartInstance,
IBlueprintPart,
IBlueprintPartInstance,
IBlueprintPiece,
@@ -67,10 +68,16 @@ export interface IPartAndPieceActionContext {
/** Update a piecesInstance */
updatePieceInstance(pieceInstanceId: string, piece: Partial): Promise
- /** Update a partInstance */
+ /**
+ * Update a partInstance
+ * @param part Which part to update
+ * @param props Properties of the Part itself
+ * @param instanceProps Properties of the PartInstance (runtime state)
+ */
updatePartInstance(
part: 'current' | 'next',
- props: Partial
+ props: Partial,
+ instanceProps?: Partial
): Promise
/** Inform core that a take out of the partinstance should be blocked until the specified time */
blockTakeUntil(time: Time | null): Promise
diff --git a/packages/blueprints-integration/src/context/playoutActionContext.ts b/packages/blueprints-integration/src/context/playoutActionContext.ts
new file mode 100644
index 00000000000..a6bf3d974e3
--- /dev/null
+++ b/packages/blueprints-integration/src/context/playoutActionContext.ts
@@ -0,0 +1,18 @@
+import type { IBlueprintPart, IBlueprintPartInstance, IBlueprintPiece } from '../index.js'
+
+/**
+ * The playout-action methods shared between {@link IActionExecutionContext} and {@link IExternalEventContext}.
+ */
+export interface IPlayoutActionContext {
+ /**
+ * Move the next part through the rundown. Can move by either a number of parts, or segments in either direction.
+ * @returns Whether a new Part was found using the provided offset
+ **/
+ moveNextPart(partDelta: number, segmentDelta: number, ignoreQuickloop?: boolean): Promise
+ /** Set flag to perform a take after the current handler completes. Returns state of the flag after each call. */
+ takeAfterExecuteAction(take: boolean): Promise
+ /** Insert a queued part to follow the current part */
+ queuePart(part: IBlueprintPart, pieces: IBlueprintPiece[]): Promise
+ /** Insert a queued part to follow the taken part */
+ queuePartAfterTake(part: IBlueprintPart, pieces: IBlueprintPiece[]): void
+}
diff --git a/packages/blueprints-integration/src/context/rundownContext.ts b/packages/blueprints-integration/src/context/rundownContext.ts
index cb57cbd5692..25e3f762d96 100644
--- a/packages/blueprints-integration/src/context/rundownContext.ts
+++ b/packages/blueprints-integration/src/context/rundownContext.ts
@@ -5,11 +5,15 @@ import type { IShowStyleContext } from './showStyleContext.js'
import type { IExecuteTSRActionsContext } from './executeTsrActionContext.js'
import type { IDataStoreMethods } from './adlibActionContext.js'
import { ITTimersContext } from './tTimersContext.js'
+import type { Time } from '../common.js'
export interface IRundownContext extends IShowStyleContext {
readonly rundownId: string
readonly playlistId: string
readonly rundown: Readonly
+
+ /** Actual time of playback starting for the playlist (undefined if not started) */
+ readonly startedPlayback: Time | undefined
}
export interface IRundownUserContext extends IUserNotesContext, IRundownContext {}
diff --git a/packages/blueprints-integration/src/context/snapshotContext.ts b/packages/blueprints-integration/src/context/snapshotContext.ts
new file mode 100644
index 00000000000..b563b360ad7
--- /dev/null
+++ b/packages/blueprints-integration/src/context/snapshotContext.ts
@@ -0,0 +1,88 @@
+import type { IExecuteTSRActionsContext } from './executeTsrActionContext.js'
+import type { IShowStyleContext } from './showStyleContext.js'
+import type { IStudioContext } from './studioContext.js'
+
+/**
+ * How the system snapshot hook was triggered.
+ * - `system` — system snapshot (settings, REST, automatic snapshot before migration)
+ * - `debug` — debug snapshot capture from the rundown UI
+ */
+export type BlueprintSnapshotType = 'system' | 'debug'
+
+/** Options that were used when the system snapshot was created. */
+export interface IBlueprintSystemSnapshotOptions {
+ /** Studio this hook invocation runs for (same as context; use `fullSystem` for snapshot scope). */
+ studioId?: string
+ /** Whether peripheral device state snapshots were included in the stored snapshot file. */
+ withDeviceSnapshots?: boolean
+ /**
+ * `true` when the stored snapshot is a full-system snapshot (all studios).
+ * `false` when the snapshot was filtered to a single studio.
+ */
+ fullSystem?: boolean
+}
+
+/**
+ * Metadata passed to {@link StudioBlueprintManifest.onSystemSnapshotCreated}.
+ * Does not include the snapshot file contents.
+ */
+export interface IBlueprintSystemSnapshotInfo {
+ /** Id of the stored snapshot (same value for every studio when `fullSystem` is true). */
+ snapshotId: string
+ /** Human-readable reason provided when the snapshot was requested (e.g. UI label, cron message). */
+ reason: string
+ type: BlueprintSnapshotType
+ /** Snapshot creation options relevant to this hook invocation. */
+ options: IBlueprintSystemSnapshotOptions
+}
+
+/**
+ * Context for {@link StudioBlueprintManifest.onSystemSnapshotCreated}.
+ * Provides studio config, mappings, and TSR device actions for the studio worker job.
+ */
+export interface ISystemSnapshotCreatedContext extends IStudioContext, IExecuteTSRActionsContext {}
+
+/** Options that were used when the playlist snapshot was generated. */
+export interface IBlueprintPlaylistSnapshotOptions {
+ /** When true, all part/piece instances are included; when false, only recent/non-reset instances. */
+ full: boolean
+ /** When true and the playlist is activated, the timeline is included in the snapshot data. */
+ withTimeline: boolean
+}
+
+/** Minimal playlist state exposed to the blueprint (not the full DB document). */
+export interface IBlueprintPlaylistSnapshotPlaylistInfo {
+ /** Playlist display name. */
+ name: string
+ /** Whether the playlist had an active activation at snapshot time. */
+ active: boolean
+ /** Whether the playlist was in rehearsal mode at snapshot time. */
+ rehearsal: boolean
+}
+
+/**
+ * Metadata passed to {@link ShowStyleBlueprintManifest.onPlaylistSnapshotCreated}.
+ * Does not include the snapshot file contents.
+ */
+export interface IBlueprintPlaylistSnapshotInfo {
+ /** Id assigned to this snapshot before generation completes. */
+ snapshotId: string
+ /** Id of the rundown playlist that was snapshotted. */
+ playlistId: string
+ /** Human-readable reason provided when the snapshot was requested. */
+ reason: string
+ /** Snapshot generation options. */
+ options: IBlueprintPlaylistSnapshotOptions
+ /** Summary of playlist state at snapshot time. */
+ playlist: IBlueprintPlaylistSnapshotPlaylistInfo
+}
+
+/**
+ * Context for {@link ShowStyleBlueprintManifest.onPlaylistSnapshotCreated}.
+ * Provides show-style and studio config, and TSR device actions.
+ *
+ * For playlists with multiple rundowns/show styles, only one show-style blueprint is invoked per snapshot.
+ * Rundown selection order: current part, then next part, then first rundown by name (see job-worker
+ * `pickRundownForPlaylistSnapshot`).
+ */
+export interface IPlaylistSnapshotCreatedContext extends IShowStyleContext, IExecuteTSRActionsContext {}
diff --git a/packages/blueprints-integration/src/context/syncIngestChangesContext.ts b/packages/blueprints-integration/src/context/syncIngestChangesContext.ts
index 668e5bfd3e1..4545c03956a 100644
--- a/packages/blueprints-integration/src/context/syncIngestChangesContext.ts
+++ b/packages/blueprints-integration/src/context/syncIngestChangesContext.ts
@@ -1,6 +1,7 @@
import type { IRundownUserContext } from './rundownContext.js'
import type {
IBlueprintMutatablePart,
+ IBlueprintMutatablePartInstance,
IBlueprintPartInstance,
IBlueprintPiece,
IBlueprintPieceInstance,
@@ -38,8 +39,15 @@ export interface ISyncIngestUpdateToPartInstanceContext extends IRundownUserCont
// /** Remove a ActionInstance */
// removeActionInstances(...actionInstanceIds: string[]): string[]
- /** Update a partInstance */
- updatePartInstance(props: Partial): IBlueprintPartInstance
+ /**
+ * Update a partInstance
+ * @param props Properties of the Part itself
+ * @param instanceProps Properties of the PartInstance (runtime state)
+ */
+ updatePartInstance(
+ props: Partial,
+ instanceProps?: Partial
+ ): IBlueprintPartInstance
/** Remove the partInstance. This is only valid when `playstatus: 'next'` */
removePartInstance(): void
diff --git a/packages/blueprints-integration/src/context/tTimersContext.ts b/packages/blueprints-integration/src/context/tTimersContext.ts
index 7b00d9258a1..39da73f0719 100644
--- a/packages/blueprints-integration/src/context/tTimersContext.ts
+++ b/packages/blueprints-integration/src/context/tTimersContext.ts
@@ -1,5 +1,75 @@
export type IPlaylistTTimerIndex = 1 | 2 | 3
+export type RundownTTimerMode = RundownTTimerModeFreeRun | RundownTTimerModeCountdown | RundownTTimerModeTimeOfDay
+
+export interface RundownTTimerModeFreeRun {
+ readonly type: 'freeRun'
+}
+export interface RundownTTimerModeCountdown {
+ readonly type: 'countdown'
+ /**
+ * The original duration of the countdown in milliseconds, so that we know what value to reset to
+ */
+ readonly duration: number
+
+ /**
+ * If the countdown should stop at zero, or continue into negative values
+ */
+ readonly stopAtZero: boolean
+}
+export interface RundownTTimerModeTimeOfDay {
+ readonly type: 'timeOfDay'
+
+ /**
+ * The raw target string of the timer, as provided when setting the timer
+ * (e.g. "14:30", "2023-12-31T23:59:59Z", or a timestamp number)
+ */
+ readonly targetRaw: string | number
+
+ /**
+ * If the countdown should stop at zero, or continue into negative values
+ */
+ readonly stopAtZero: boolean
+}
+
+/**
+ * Timing state for a timer, optimized for efficient client rendering.
+ * When running, the client calculates current time from zeroTime.
+ * When paused, the duration is frozen and sent directly.
+ * pauseTime indicates when the timer should automatically pause (when current part ends and overrun begins).
+ *
+ * Client rendering logic:
+ * ```typescript
+ * if (state.paused === true) {
+ * // Manually paused by user or already pushing/overrun
+ * duration = state.duration
+ * } else if (state.pauseTime && now >= state.pauseTime) {
+ * // Auto-pause at overrun (current part ended)
+ * duration = state.zeroTime - state.pauseTime
+ * } else {
+ * // Running normally
+ * duration = state.zeroTime - now
+ * }
+ * ```
+ */
+export type TimerState =
+ | {
+ /** Whether the timer is paused */
+ paused: false
+ /** The absolute timestamp (ms) when the timer reaches/reached zero */
+ zeroTime: number
+ /** Optional timestamp when the timer should pause (when current part ends) */
+ pauseTime?: number | null
+ }
+ | {
+ /** Whether the timer is paused */
+ paused: true
+ /** The frozen duration value in milliseconds */
+ duration: number
+ /** Optional timestamp when the timer should pause (null when already paused/pushing) */
+ pauseTime?: number | null
+ }
+
export interface ITTimersContext {
/**
* Get a T-timer by its index
@@ -20,11 +90,19 @@ export interface IPlaylistTTimer {
/** The label of the T-timer */
readonly label: string
+ /**
+ * The current mode of the T-timer
+ * Null if the T-timer is not initialized
+ * This defines how the timer behaves
+ */
+ readonly mode: RundownTTimerMode | null
+
/**
* The current state of the T-timer
* Null if the T-timer is not initialized
+ * This contains the timing information needed to calculate the current time of the timer
*/
- readonly state: IPlaylistTTimerState | null
+ readonly state: TimerState | null
/** Set the label of the T-timer */
setLabel(label: string): void
@@ -67,11 +145,34 @@ export interface IPlaylistTTimer {
/**
* If the timer can be restarted, restore it to its initial/restarted state
- * Note: This is supported by the countdown and timeOfDay modes
+ * Note: This is supported by the countdown, freeRun, and timeOfDay modes
* @returns True if the timer was restarted, false if it could not be restarted
*/
restart(): boolean
+ /**
+ * Set the duration of a countdown timer
+ * This resets both the original duration (what restart() resets to) and the current countdown value.
+ * @param duration New duration in milliseconds
+ * @throws If timer is not in countdown mode or not initialized
+ */
+ setDuration(duration: number): void
+
+ /**
+ * Update the original duration (reset-to value) and/or current duration of a countdown timer
+ * This allows you to independently update:
+ * - `original`: The duration the timer resets to when restart() is called
+ * - `current`: The current countdown value (what's displayed now)
+ *
+ * If only `original` is provided, the current duration is recalculated to preserve elapsed time.
+ * If only `current` is provided, just the current countdown is updated.
+ * If both are provided, both values are updated independently.
+ *
+ * @param options Object with optional `original` and/or `current` duration in milliseconds
+ * @throws If timer is not in countdown mode or not initialized
+ */
+ setDuration(options: { original?: number; current?: number }): void
+
/**
* Clear any projection (manual or anchor-based) for this timer
* This removes both manual projections set via setProjectedTime/setProjectedDuration
@@ -116,49 +217,41 @@ export interface IPlaylistTTimer {
* If false (default), we're progressing normally (projection counts down in real-time).
*/
setProjectedDuration(duration: number, paused?: boolean): void
-}
-export type IPlaylistTTimerState =
- | IPlaylistTTimerStateCountdown
- | IPlaylistTTimerStateFreeRun
- | IPlaylistTTimerStateTimeOfDay
-
-export interface IPlaylistTTimerStateCountdown {
- /** The mode of the T-timer */
- readonly mode: 'countdown'
- /** The current time of the countdown, in milliseconds */
- readonly currentTime: number
- /** The total duration of the countdown, in milliseconds */
- readonly duration: number
- /** Whether the timer is currently paused */
- readonly paused: boolean
-
- /** If the countdown is set to stop at zero, or continue into negative values */
- readonly stopAtZero: boolean
-}
-export interface IPlaylistTTimerStateFreeRun {
- /** The mode of the T-timer */
- readonly mode: 'freeRun'
- /** The current time of the freerun, in milliseconds */
- readonly currentTime: number
- /** Whether the timer is currently paused */
- readonly paused: boolean
-}
+ /**
+ * Get the current value of the timer in milliseconds.
+ *
+ * Sign convention — **positive = time remaining / not yet elapsed; negative = overrun / elapsed past zero**:
+ * - **countdown**: positive while counting down, negative once past zero (overrunning)
+ * - **timeOfDay**: positive while counting down to the target time, negative once past it
+ * - **freeRun**: negative (elapsed time, counting upward from zero into negative territory)
+ *
+ * @returns Timer value in milliseconds, or null if the timer has not been started
+ */
+ getDuration(): number | null
-export interface IPlaylistTTimerStateTimeOfDay {
- /** The mode of the T-timer */
- readonly mode: 'timeOfDay'
- /** The current remaining time of the timer, in milliseconds */
- readonly currentTime: number
- /** The target timestamp of the timer, in milliseconds */
- readonly targetTime: number
+ /**
+ * Get the zero time (reference point) for the timer
+ * - For countdown/timeOfDay timers: the absolute timestamp when the timer reaches zero
+ * - For freeRun timers: the absolute timestamp when the timer started (what it counts from)
+ * For paused timers, calculates when zero would be if resumed now.
+ * @returns Unix timestamp in milliseconds, or null if timer is not initialized
+ */
+ getZeroTime(): number | null
/**
- * The raw target string of the timer, as provided when setting the timer
- * (e.g. "14:30", "2023-12-31T23:59:59Z", or a timestamp number)
+ * Get the projected duration in milliseconds
+ * This returns the projected timer value when we expect to reach the anchor part.
+ * Used to calculate over/under (how far ahead or behind schedule we are).
+ * @returns Projected duration in milliseconds, or null if no projection is set
*/
- readonly targetRaw: string | number
+ getProjectedDuration(): number | null
- /** If the countdown is set to stop at zero, or continue into negative values */
- readonly stopAtZero: boolean
+ /**
+ * Get the projected zero time (reference point)
+ * This returns when we project the timer will reach zero based on scheduled durations.
+ * For paused projections (when pushing/delayed), calculates when zero would be if resumed now.
+ * @returns Unix timestamp in milliseconds, or null if no projection is set
+ */
+ getProjectedZeroTime(): number | null
}
diff --git a/packages/blueprints-integration/src/documents/part.ts b/packages/blueprints-integration/src/documents/part.ts
index 42283ac3609..c27de0381df 100644
--- a/packages/blueprints-integration/src/documents/part.ts
+++ b/packages/blueprints-integration/src/documents/part.ts
@@ -56,6 +56,13 @@ export interface IBlueprintMutatablePart {
+export interface IBlueprintPartInstance<
+ TPrivateData = unknown,
+ TPublicData = unknown,
+> extends IBlueprintMutatablePartInstance {
_id: string
/** The segment ("Title") this line belongs to */
segmentId: string
diff --git a/packages/blueprints-integration/src/documents/playlistTiming.ts b/packages/blueprints-integration/src/documents/playlistTiming.ts
index 672701d2ba8..41ae942dfa0 100644
--- a/packages/blueprints-integration/src/documents/playlistTiming.ts
+++ b/packages/blueprints-integration/src/documents/playlistTiming.ts
@@ -4,6 +4,7 @@ export enum PlaylistTimingType {
None = 'none',
ForwardTime = 'forward-time',
BackTime = 'back-time',
+ Duration = 'duration',
}
export interface PlaylistTimingBase {
@@ -49,4 +50,29 @@ export interface PlaylistTimingBackTime extends PlaylistTimingBase {
expectedEnd: Time
}
-export type RundownPlaylistTiming = PlaylistTimingNone | PlaylistTimingForwardTime | PlaylistTimingBackTime
+/**
+ * This mode is intended for shows with a "floating start",
+ * meaning they will start based on when the show before them on the channel ends.
+ * In this mode, we will preserve the Duration and automatically calculate the expectedEnd
+ * based on the _actual_ start of the show (playlist.startedPlayback).
+ *
+ * The optional expectedStart property allows setting a start property of the show that will not affect
+ * timing calculations, only purpose is to drive UI and inform the users about the preliminary plan as
+ * planned in the editorial planning tool.
+ */
+export interface PlaylistTimingDuration extends PlaylistTimingBase {
+ type: PlaylistTimingType.Duration
+ /** A stipulated start time, to drive UIs pre-show, but not affecting calculations during the show.
+ */
+ expectedStart?: Time
+ /** Planned duration of the rundown playlist
+ * When the show starts, an expectedEnd gets automatically calculated with this as an offset from that starting point
+ */
+ expectedDuration: number
+}
+
+export type RundownPlaylistTiming =
+ | PlaylistTimingNone
+ | PlaylistTimingForwardTime
+ | PlaylistTimingBackTime
+ | PlaylistTimingDuration
diff --git a/packages/blueprints-integration/src/documents/rundown.ts b/packages/blueprints-integration/src/documents/rundown.ts
index 9daa30383a6..f6994645c0f 100644
--- a/packages/blueprints-integration/src/documents/rundown.ts
+++ b/packages/blueprints-integration/src/documents/rundown.ts
@@ -22,12 +22,6 @@ export interface IBlueprintRundown {
externalId: string
+ /** Rundown timing information */
+ timing: RundownPlaylistTiming
+
/** Arbitraty data storage for internal use in the blueprints */
privateData?: TPrivateData
/** Arbitraty data relevant for other systems, made available to them through APIs */
diff --git a/packages/blueprints-integration/src/documents/segment.ts b/packages/blueprints-integration/src/documents/segment.ts
index a0308e8027c..f8b2564a967 100644
--- a/packages/blueprints-integration/src/documents/segment.ts
+++ b/packages/blueprints-integration/src/documents/segment.ts
@@ -1,4 +1,5 @@
import { UserEditingDefinition, UserEditingProperties } from '../userEditing.js'
+import { ShelfButtonSize } from '@sofie-automation/shared-lib/dist/core/model/StudioSettings'
export enum SegmentDisplayMode {
Timeline = 'timeline',
@@ -14,12 +15,6 @@ export enum CountdownType {
}
export interface SegmentTimingInfo {
- /** A unix timestamp of when the segment is expected to begin. Affects rundown timing. */
- expectedStart?: number
-
- /** A unix timestamp of when the segment is expected to end. Affects rundown timing. */
- expectedEnd?: number
-
/** Budget duration of this segment, in milliseconds */
budgetDuration?: number
@@ -40,7 +35,19 @@ export interface IBlueprintSegment = {
+ type: 'tsr'
+ /** The id of the playout device, e.g. `'atem0'` */
+ deviceId: string
+ /** The type of the playout device */
+ deviceType: TDevice
+ /** The event key to subscribe to, e.g. `'me.0.programInput'` */
+ event: keyof TSR.TSREventTypesMap[TDevice]
+}
+
+/**
+ * A subscription to a named event on any TSR playout device.
+ *
+ * This is a discriminated union over all known device types, so `deviceType` and `event`
+ * are always correlated — the compiler will reject an ATEM event key on an Abstract device, etc.
+ */
+export type BlueprintExternalEventSubscription = {
+ [TDevice in TSREventDeviceType]: TSRExternalEventSubscription
+}[TSREventDeviceType]
diff --git a/packages/blueprints-integration/src/index.ts b/packages/blueprints-integration/src/index.ts
index ac46527404c..c73d6280872 100644
--- a/packages/blueprints-integration/src/index.ts
+++ b/packages/blueprints-integration/src/index.ts
@@ -5,6 +5,7 @@ export * from './common.js'
export * from './content.js'
export * from './context/index.js'
export * from './documents/index.js'
+export * from './externalEvent.js'
export * from './ingest.js'
export * from './ingest-types.js'
export * from './lib.js'
diff --git a/packages/blueprints-integration/src/userEditing.ts b/packages/blueprints-integration/src/userEditing.ts
index 0d301659504..54dac5d6d91 100644
--- a/packages/blueprints-integration/src/userEditing.ts
+++ b/packages/blueprints-integration/src/userEditing.ts
@@ -8,10 +8,35 @@ import { DefaultUserOperationsTypes } from './ingest.js'
* Description of a user performed editing operation allowed on an document
*/
export type UserEditingDefinition =
+ | UserEditingDefinitionState
| UserEditingDefinitionAction
| UserEditingDefinitionForm
| UserEditingDefinitionSofieDefault
+/**
+ * A simple 'state' that can be signlaled to the user, but has no associated action. This is useful for indicating
+ * things like "This piece is being held" or "This piece is being affected by a global action"
+ */
+export interface UserEditingDefinitionState {
+ type: UserEditingType.STATE
+ /** Id of this operation */
+ id: string
+ /** Label to show to the user for this operation */
+ label: ITranslatableMessage
+ /** Icon to show when this action is 'active'
+ *
+ * This can either be a relative URL to an image in the Blueprints assets or a `data:` URL
+ */
+ icon?: string
+ /** Icon to show when this action is 'disabled'
+ *
+ * This can either be a relative URL to an image in the Blueprints assets or a `data:` URL
+ */
+ iconInactive?: string
+ /** Whether this action should be indicated as being active */
+ isActive?: boolean
+}
+
/**
* A simple 'action' that can be performed
*/
@@ -65,6 +90,8 @@ export interface UserEditingDefinitionSofieDefault {
}
export enum UserEditingType {
+ /** State */
+ STATE = 'state',
/** Action */
ACTION = 'action',
/** Form */
diff --git a/packages/blueprints-integration/tsconfig.build.json b/packages/blueprints-integration/tsconfig.build.json
index 7d4b98c2b9b..e781b5ba26d 100755
--- a/packages/blueprints-integration/tsconfig.build.json
+++ b/packages/blueprints-integration/tsconfig.build.json
@@ -12,7 +12,9 @@
},
"resolveJsonModule": true,
"types": ["node"],
- "composite": true
+ "composite": true,
+ "module": "node20",
+ "esModuleInterop": true
},
"references": [
{
diff --git a/packages/corelib/jest.config.js b/packages/corelib/jest.config.js
index 04b8ea8dd1c..a992fb8e2d2 100644
--- a/packages/corelib/jest.config.js
+++ b/packages/corelib/jest.config.js
@@ -9,12 +9,15 @@ module.exports = {
diagnostics: {
ignoreCodes: [
151002, // hybrid module kind (Node16/18/Next)
+ 2823, // Import attributes not supported in CJS mode (ts-jest forces CJS, emits require() anyway)
],
},
},
],
},
moduleNameMapper: {
+ '^@sofie-automation/shared-lib/dist/(.+)\\.js$': '/../shared-lib/src/$1',
+ '^@sofie-automation/shared-lib/dist/(.+)$': '/../shared-lib/src/$1',
'(.+)\\.js$': '$1',
},
testMatch: ['**/__tests__/**/*.(spec|test).(ts|js)'],
diff --git a/packages/corelib/package.json b/packages/corelib/package.json
index 8dfba527482..46fbfe40beb 100644
--- a/packages/corelib/package.json
+++ b/packages/corelib/package.json
@@ -39,19 +39,18 @@
"@sofie-automation/blueprints-integration": "26.3.0-2",
"@sofie-automation/shared-lib": "26.3.0-2",
"fast-clone": "^1.5.13",
- "i18next": "^21.10.0",
+ "i18next": "^26.3.6",
"influx": "^5.12.0",
- "nanoid": "^3.3.11",
+ "nanoid": "^3.3.16",
"object-path": "^0.11.8",
"prom-client": "^15.1.3",
- "timecode": "0.0.4",
"tslib": "^2.8.1",
"type-fest": "^4.41.0",
- "underscore": "^1.13.7"
+ "underscore": "^1.13.8"
},
"peerDependencies": {
- "mongodb": "^6.12.0"
+ "mongodb": "^7.1.1"
},
"prettier": "@sofie-automation/code-standard-preset/.prettierrc.json",
- "packageManager": "yarn@4.12.0"
+ "packageManager": "yarn@4.17.0"
}
diff --git a/packages/corelib/src/StatusMessageResolver.ts b/packages/corelib/src/StatusMessageResolver.ts
new file mode 100644
index 00000000000..f1c22b7eca9
--- /dev/null
+++ b/packages/corelib/src/StatusMessageResolver.ts
@@ -0,0 +1,159 @@
+import { BlueprintId } from './dataModel/Ids.js'
+import { generateTranslation } from './lib.js'
+import { ITranslatableMessage, wrapTranslatableMessageFromBlueprints } from './TranslatableMessage.js'
+import { SystemErrorCode } from '@sofie-automation/shared-lib/dist/systemErrorMessages'
+import type { DeviceStatusContext, DeviceStatusMessageFunction } from '@sofie-automation/blueprints-integration'
+
+// Re-export for consumers of corelib
+export type { DeviceStatusContext, DeviceStatusMessageFunction }
+
+/**
+ * Default error messages for system errors
+ */
+const DEFAULT_SYSTEM_ERROR_MESSAGES: Record