diff --git a/.eslintrc.yml b/.eslintrc.yml
index 3a08547c53d3f670233448b935d976c99ddee6c2..d29af93319e1d5de2f7f2cc829c36068c667af98 100644
--- a/.eslintrc.yml
+++ b/.eslintrc.yml
@@ -38,6 +38,15 @@ rules:
   promise/always-return: off
   promise/no-callback-in-promise: off
   '@gitlab/no-global-event-off': error
+  '@gitlab/vue-no-new-non-primitive-in-template':
+    - error
+    - allowNames:
+      - 'class(es)?$'
+      - '^style$'
+      - '^to$'
+      - '^$'
+      - '^variables$'
+      - 'attrs?$'
   no-param-reassign:
     - error
     - props: true
diff --git a/app/assets/javascripts/alert_management/components/alert_management_table.vue b/app/assets/javascripts/alert_management/components/alert_management_table.vue
index 929f5d1095672ed9d77deaf6329d93aa86c3c0a6..8de793bc798c17ca91855e885b9e08789d6fb871 100644
--- a/app/assets/javascripts/alert_management/components/alert_management_table.vue
+++ b/app/assets/javascripts/alert_management/components/alert_management_table.vue
@@ -283,13 +283,17 @@ export default {
     <paginated-table-with-search-and-tabs
       :show-error-msg="showErrorMsg"
       :i18n="$options.i18n"
-      :items="alerts.list || []"
+      :items="
+        alerts.list || [] /* eslint-disable-line @gitlab/vue-no-new-non-primitive-in-template */
+      "
       :page-info="alerts.pageInfo"
       :items-count="alertsCount"
       :status-tabs="$options.statusTabs"
       :track-views-options="$options.trackAlertListViewsOptions"
       :server-error-message="serverErrorMessage"
-      :filter-search-tokens="['assignee_username']"
+      :filter-search-tokens="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ [
+        'assignee_username',
+      ] /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
       filter-search-key="alerts"
       @page-changed="pageChanged"
       @tabs-changed="statusChanged"
@@ -305,7 +309,11 @@ export default {
       <template #table>
         <gl-table
           class="alert-management-table"
-          :items="alerts ? alerts.list : []"
+          :items="
+            alerts
+              ? alerts.list
+              : [] /* eslint-disable-line @gitlab/vue-no-new-non-primitive-in-template */
+          "
           :fields="$options.fields"
           :show-empty="true"
           :busy="loading"
diff --git a/app/assets/javascripts/analytics/usage_trends/components/users_chart.vue b/app/assets/javascripts/analytics/usage_trends/components/users_chart.vue
index 728b4f08aa2ae75c00c097be399a8f349b84a122..dfe94aeb8843b998ed1540f40f29a889fa29d8cf 100644
--- a/app/assets/javascripts/analytics/usage_trends/components/users_chart.vue
+++ b/app/assets/javascripts/analytics/usage_trends/components/users_chart.vue
@@ -132,12 +132,12 @@ export default {
       v-else
       :option="options"
       :include-legend-avg-max="true"
-      :data="[
+      :data="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ [
         {
           name: $options.i18n.yAxisTitle,
           data: chartUserData,
         },
-      ]"
+      ] /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
     />
   </div>
 </template>
diff --git a/app/assets/javascripts/boards/components/board_settings_sidebar.vue b/app/assets/javascripts/boards/components/board_settings_sidebar.vue
index 24071c6f0b4e3c047fc88cab8e1017a4acb79111..c559e4cdbd3b2357af16fffc8b8846222b3f75e4 100644
--- a/app/assets/javascripts/boards/components/board_settings_sidebar.vue
+++ b/app/assets/javascripts/boards/components/board_settings_sidebar.vue
@@ -135,14 +135,14 @@ export default {
       :modal-id="$options.modalId"
       :title="$options.i18n.modalAction"
       size="sm"
-      :action-primary="{
+      :action-primary="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
         text: $options.i18n.modalAction,
         attributes: [{ variant: 'danger' }],
-      }"
-      :action-secondary="{
+      } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
+      :action-secondary="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
         text: $options.i18n.modalCancel,
         attributes: [{ variant: 'default' }],
-      }"
+      } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
       @primary="handleModalPrimary"
     >
       <p>{{ $options.i18n.modalCopy }}</p>
diff --git a/app/assets/javascripts/captcha/captcha_modal.vue b/app/assets/javascripts/captcha/captcha_modal.vue
index b8b90b04bebdb96117a9e57a55501a24dcb6ff65..36aa098d5ffe9c4574b7b8104880688a4af5886e 100644
--- a/app/assets/javascripts/captcha/captcha_modal.vue
+++ b/app/assets/javascripts/captcha/captcha_modal.vue
@@ -107,7 +107,9 @@ export default {
     ref="modal"
     :modal-id="modalId"
     :title="__('Please solve the captcha')"
-    :action-cancel="{ text: __('Cancel') }"
+    :action-cancel="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+      text: __('Cancel'),
+    } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
     @shown="shown"
     @hide="hide"
     @hidden="$emit('hidden')"
diff --git a/app/assets/javascripts/content_editor/components/bubble_menus/code_block.vue b/app/assets/javascripts/content_editor/components/bubble_menus/code_block.vue
index c42f06664cc768398091cce0a386263fd13efb9a..210f259b20ff4e517c781c5a1d15d6745182b4b6 100644
--- a/app/assets/javascripts/content_editor/components/bubble_menus/code_block.vue
+++ b/app/assets/javascripts/content_editor/components/bubble_menus/code_block.vue
@@ -97,7 +97,9 @@ export default {
     :editor="tiptapEditor"
     plugin-key="bubbleMenuCodeBlock"
     :should-show="shouldShow"
-    :tippy-options="{ getReferenceClientRect }"
+    :tippy-options="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+      getReferenceClientRect,
+    } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
   >
     <editor-state-observer @transaction="updateSelectedLanguage">
       <gl-button-group>
diff --git a/app/assets/javascripts/content_editor/components/bubble_menus/formatting.vue b/app/assets/javascripts/content_editor/components/bubble_menus/formatting.vue
index 2971a1e40ba974b149ffb297cfe0db973bf724fa..46c15de6b2c6c4ca209f967207f184f7edc79d3d 100644
--- a/app/assets/javascripts/content_editor/components/bubble_menus/formatting.vue
+++ b/app/assets/javascripts/content_editor/components/bubble_menus/formatting.vue
@@ -84,7 +84,9 @@ export default {
         content-type="link"
         icon-name="link"
         editor-command="toggleLink"
-        :editor-command-params="{ href: '' }"
+        :editor-command-params="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+          href: '',
+        } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
         category="tertiary"
         size="medium"
         :label="__('Insert link')"
diff --git a/app/assets/javascripts/content_editor/components/bubble_menus/link.vue b/app/assets/javascripts/content_editor/components/bubble_menus/link.vue
index 87853fda7b877cd755add9c647939b7fa8fad70f..2f4468325163584d7fd7b037b9cd154fece63958 100644
--- a/app/assets/javascripts/content_editor/components/bubble_menus/link.vue
+++ b/app/assets/javascripts/content_editor/components/bubble_menus/link.vue
@@ -116,7 +116,9 @@ export default {
     :editor="tiptapEditor"
     plugin-key="bubbleMenuLink"
     :should-show="() => shouldShow()"
-    :tippy-options="{ placement: 'bottom' }"
+    :tippy-options="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+      placement: 'bottom',
+    } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
   >
     <editor-state-observer @transaction="updateLinkToState">
       <gl-button-group v-if="!isEditing" class="gl-display-flex gl-align-items-center">
diff --git a/app/assets/javascripts/content_editor/components/wrappers/table_cell_base.vue b/app/assets/javascripts/content_editor/components/wrappers/table_cell_base.vue
index 41c083111c5ec6aeb99913b8f5f74369f27b693d..209e46298302a633713d1df89bcdf803b41850b7 100644
--- a/app/assets/javascripts/content_editor/components/wrappers/table_cell_base.vue
+++ b/app/assets/javascripts/content_editor/components/wrappers/table_cell_base.vue
@@ -124,7 +124,9 @@ export default {
         no-caret
         text-sr-only
         :text="$options.i18n.editTableActions"
-        :popper-opts="{ positionFixed: true }"
+        :popper-opts="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+          positionFixed: true,
+        } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
         @hide="handleHide($event)"
       >
         <gl-dropdown-item @click="runCommand('addColumnBefore')">
diff --git a/app/assets/javascripts/design_management/pages/design/index.vue b/app/assets/javascripts/design_management/pages/design/index.vue
index 837320b9423ff3f3850ac68b129e2c3d17371662..2b395921ee11f9734ac3929fcdb3e467a9de014e 100644
--- a/app/assets/javascripts/design_management/pages/design/index.vue
+++ b/app/assets/javascripts/design_management/pages/design/index.vue
@@ -349,7 +349,9 @@ export default {
         class="gl-display-flex gl-overflow-hidden gl-flex-grow-1 gl-flex-direction-column gl-relative"
       >
         <design-destroyer
-          :filenames="[design.filename]"
+          :filenames="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ [
+            design.filename,
+          ] /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
           :project-path="projectPath"
           :iid="issueIid"
           @done="$router.push({ name: $options.DESIGNS_ROUTE_NAME })"
diff --git a/app/assets/javascripts/diffs/components/hidden_files_warning.vue b/app/assets/javascripts/diffs/components/hidden_files_warning.vue
index b9962682848209a1683f5a0d639f0ad49eac54cb..f6a8c679f3b4136dfc0919b66f1d205469a7f92d 100644
--- a/app/assets/javascripts/diffs/components/hidden_files_warning.vue
+++ b/app/assets/javascripts/diffs/components/hidden_files_warning.vue
@@ -51,7 +51,7 @@ export default {
           __(
             'To preserve performance only %{strongStart}%{visible} of %{total}%{strongEnd} files are displayed.',
           ),
-          { visible, total },
+          { visible, total } /* eslint-disable-line @gitlab/vue-no-new-non-primitive-in-template */,
         )
       "
     >
diff --git a/app/assets/javascripts/diffs/components/image_diff_overlay.vue b/app/assets/javascripts/diffs/components/image_diff_overlay.vue
index 8871be1f9af77aa6262678379e633804470f584c..bd040cd1ba116f7840d786635eaa587d5a5a86e8 100644
--- a/app/assets/javascripts/diffs/components/image_diff_overlay.vue
+++ b/app/assets/javascripts/diffs/components/image_diff_overlay.vue
@@ -132,10 +132,10 @@ export default {
 
     <design-note-pin
       v-if="canComment && currentCommentForm"
-      :position="{
+      :position="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
         left: `${currentCommentForm.xPercent}%`,
         top: `${currentCommentForm.yPercent}%`,
-      }"
+      } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
     />
   </div>
 </template>
diff --git a/app/assets/javascripts/environments/folder/environments_folder_view.vue b/app/assets/javascripts/environments/folder/environments_folder_view.vue
index 3c608ad0ba987fa9c25cd4ce2acfa860422c2464..adb14ce3d6fb2f0b543d73cf8da1b1f801e75884 100644
--- a/app/assets/javascripts/environments/folder/environments_folder_view.vue
+++ b/app/assets/javascripts/environments/folder/environments_folder_view.vue
@@ -54,7 +54,9 @@ export default {
         :key="`${tab.name}-${i}`"
         :active="tab.isActive"
         :title-item-class="tab.isActive ? 'gl-outline-none' : ''"
-        :title-link-attributes="{ 'data-testid': `environments-tab-${tab.scope}` }"
+        :title-link-attributes="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+          'data-testid': `environments-tab-${tab.scope}`,
+        } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
         @click="onChangeTab(tab.scope)"
       >
         <template #title>
diff --git a/app/assets/javascripts/ide/components/commit_sidebar/form.vue b/app/assets/javascripts/ide/components/commit_sidebar/form.vue
index 38f3b094b7cc359dc0cdb9b67d891043aa739629..cb906374fe10c9d68782ea6ab519c81c039c6ec8 100644
--- a/app/assets/javascripts/ide/components/commit_sidebar/form.vue
+++ b/app/assets/javascripts/ide/components/commit_sidebar/form.vue
@@ -216,7 +216,9 @@ export default {
           modal-id="ide-commit-error-modal"
           :title="lastCommitError.title"
           :action-primary="commitErrorPrimaryAction.button"
-          :action-cancel="{ text: __('Cancel') }"
+          :action-cancel="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+            text: __('Cancel'),
+          } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
           @ok="commitErrorPrimaryAction.callback"
         >
           <div v-safe-html="lastCommitError.messageHTML"></div>
diff --git a/app/assets/javascripts/incidents/components/incidents_list.vue b/app/assets/javascripts/incidents/components/incidents_list.vue
index bfc5bd823a2c3509b00b8862a8d74208ac77f17f..922e870caa7f5204d473f4500f09e275f98437a1 100644
--- a/app/assets/javascripts/incidents/components/incidents_list.vue
+++ b/app/assets/javascripts/incidents/components/incidents_list.vue
@@ -338,7 +338,9 @@ export default {
       :show-items="showList"
       :show-error-msg="showErrorMsg"
       :i18n="$options.i18n"
-      :items="incidents.list || []"
+      :items="
+        incidents.list || [] /* eslint-disable-line @gitlab/vue-no-new-non-primitive-in-template */
+      "
       :page-info="incidents.pageInfo"
       :items-count="incidentsCount"
       :status-tabs="$options.statusTabs"
@@ -372,7 +374,10 @@ export default {
 
       <template #table>
         <gl-table
-          :items="incidents.list || []"
+          :items="
+            incidents.list ||
+            [] /* eslint-disable-line @gitlab/vue-no-new-non-primitive-in-template */
+          "
           :fields="availableFields"
           :busy="loading"
           stacked="md"
diff --git a/app/assets/javascripts/invite_members/components/members_token_select.vue b/app/assets/javascripts/invite_members/components/members_token_select.vue
index 0a191f6d4069cbd62b81957d4672d10347ea84d4..30c9294344ecbaae161e7f6c362af2ecce9ce802 100644
--- a/app/assets/javascripts/invite_members/components/members_token_select.vue
+++ b/app/assets/javascripts/invite_members/components/members_token_select.vue
@@ -134,10 +134,10 @@ export default {
     :hide-dropdown-with-no-items="hideDropdownWithNoItems"
     :placeholder="placeholderText"
     :aria-labelledby="ariaLabelledby"
-    :text-input-attrs="{
+    :text-input-attrs="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
       'data-testid': 'members-token-select-input',
       'data-qa-selector': 'members_token_select_input',
-    }"
+    } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
     @blur="handleBlur"
     @text-input="handleTextInput"
     @input="handleInput"
diff --git a/app/assets/javascripts/jira_import/components/jira_import_form.vue b/app/assets/javascripts/jira_import/components/jira_import_form.vue
index af4a26a7352811a4204f4b774b83f909d07c0953..8a36a4d24668a6c750533ea47dc5d22abbeceedf 100644
--- a/app/assets/javascripts/jira_import/components/jira_import_form.vue
+++ b/app/assets/javascripts/jira_import/components/jira_import_form.vue
@@ -304,7 +304,10 @@ export default {
             :text="data.value || $options.currentUsername"
             class="w-100"
             :aria-label="
-              sprintf($options.dropdownLabel, { jiraDisplayName: data.item.jiraDisplayName })
+              /* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */
+              sprintf($options.dropdownLabel, {
+                jiraDisplayName: data.item.jiraDisplayName,
+              }) /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */
             "
             @hide="resetDropdown"
           >
diff --git a/app/assets/javascripts/jobs/components/table/jobs_table_tabs.vue b/app/assets/javascripts/jobs/components/table/jobs_table_tabs.vue
index 0a25dc5bea5a32acefcb0f47e455bf70aa91f37b..27e3b8028b731d5d1bb19fe7e0c07e2908c8d457 100644
--- a/app/assets/javascripts/jobs/components/table/jobs_table_tabs.vue
+++ b/app/assets/javascripts/jobs/components/table/jobs_table_tabs.vue
@@ -54,7 +54,9 @@ export default {
     <gl-tab
       v-for="tab in tabs"
       :key="tab.text"
-      :title-link-attributes="{ 'data-testid': tab.testId }"
+      :title-link-attributes="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+        'data-testid': tab.testId,
+      } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
       @click="$emit('fetchJobsByStatus', tab.scope)"
     >
       <template #title>
diff --git a/app/assets/javascripts/monitoring/components/dashboard.vue b/app/assets/javascripts/monitoring/components/dashboard.vue
index c4392dd37488e8133dd20fa2e1ec71a2b50ae4a9..6a85833db27b9e7d825137e7291f0dc3e2087d72 100644
--- a/app/assets/javascripts/monitoring/components/dashboard.vue
+++ b/app/assets/javascripts/monitoring/components/dashboard.vue
@@ -492,7 +492,9 @@ export default {
             v-if="!groupSingleEmptyState(groupData.key)"
             :value="groupData.panels"
             group="metrics-dashboard"
-            :component-data="{ attrs: { class: 'row mx-0 w-100' } }"
+            :component-data="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+              attrs: { class: 'row mx-0 w-100' },
+            } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
             :disabled="!isRearrangingPanels"
             @input="updatePanels(groupData.key, $event)"
           >
diff --git a/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/details_page/delete_modal.vue b/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/details_page/delete_modal.vue
index 7a8a1bbcf092722a613dbea869c5bb15d0aeefc9..2da8ca2d8a8de0641a2f90ba32b260c9b33c71c0 100644
--- a/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/details_page/delete_modal.vue
+++ b/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/details_page/delete_modal.vue
@@ -83,11 +83,13 @@ export default {
     modal-id="delete-tag-modal"
     ok-variant="danger"
     size="sm"
-    :action-primary="{
+    :action-primary="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
       text: __('Delete'),
       attributes: [{ variant: 'danger' }, { disabled: disablePrimaryButton }],
-    }"
-    :action-cancel="{ text: __('Cancel') }"
+    } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
+    :action-cancel="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+      text: __('Cancel'),
+    } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
     @primary="$emit('confirmDelete')"
     @cancel="$emit('cancelDelete')"
     @change="projectPath = ''"
diff --git a/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/details_page/tags_list.vue b/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/details_page/tags_list.vue
index 7659ba5f9ea23d366cc5c28574d89d2d4286311a..9e8eb92d87ac07fa2780c4e30539eeb500f6bae4 100644
--- a/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/details_page/tags_list.vue
+++ b/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/details_page/tags_list.vue
@@ -168,7 +168,9 @@ export default {
   <div>
     <persisted-search
       class="gl-mb-5"
-      :sortable-fields="[$options.searchConfig.NAME_SORT_FIELD]"
+      :sortable-fields="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ [
+        $options.searchConfig.NAME_SORT_FIELD,
+      ] /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
       :default-order="$options.searchConfig.NAME_SORT_FIELD.orderBy"
       default-sort="asc"
       @update="handleSearchUpdate"
diff --git a/app/assets/javascripts/packages_and_registries/container_registry/explorer/pages/list.vue b/app/assets/javascripts/packages_and_registries/container_registry/explorer/pages/list.vue
index d1cab40698498fc4ca220809e011a7cff52384b4..bb116d5f842bae3041e81dd23efb7cd20e8c8c72 100644
--- a/app/assets/javascripts/packages_and_registries/container_registry/explorer/pages/list.vue
+++ b/app/assets/javascripts/packages_and_registries/container_registry/explorer/pages/list.vue
@@ -370,7 +370,10 @@ export default {
             ref="deleteModal"
             size="sm"
             modal-id="delete-image-modal"
-            :action-primary="{ text: __('Remove'), attributes: { variant: 'danger' } }"
+            :action-primary="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+              text: __('Remove'),
+              attributes: { variant: 'danger' },
+            } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
             @primary="doDelete"
             @cancel="track('cancel_delete')"
           >
diff --git a/app/assets/javascripts/packages_and_registries/infrastructure_registry/details/components/app.vue b/app/assets/javascripts/packages_and_registries/infrastructure_registry/details/components/app.vue
index f198d2e1bfa6b5efa321e9216bc30f74dfe3b2de..425fb4596fd4a815f98c6089c8e06e5158e2b4ec 100644
--- a/app/assets/javascripts/packages_and_registries/infrastructure_registry/details/components/app.vue
+++ b/app/assets/javascripts/packages_and_registries/infrastructure_registry/details/components/app.vue
@@ -191,7 +191,10 @@ export default {
           <package-list-row
             v-for="v in packageEntity.versions"
             :key="v.id"
-            :package-entity="{ name: packageEntity.name, ...v }"
+            :package-entity="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+              name: packageEntity.name,
+              ...v,
+            } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
             :package-link="v.id.toString()"
             :disable-delete="true"
             :show-package-type="false"
diff --git a/app/assets/javascripts/packages_and_registries/infrastructure_registry/list/components/infrastructure_search.vue b/app/assets/javascripts/packages_and_registries/infrastructure_registry/list/components/infrastructure_search.vue
index c611f92036dfb3115cd85088df70bb6ca460dd01..d3c38da15313d0b94d3604c4c637ccca128b113f 100644
--- a/app/assets/javascripts/packages_and_registries/infrastructure_registry/list/components/infrastructure_search.vue
+++ b/app/assets/javascripts/packages_and_registries/infrastructure_registry/list/components/infrastructure_search.vue
@@ -33,7 +33,7 @@ export default {
       <registry-search
         :filter="filter"
         :sorting="sorting"
-        :tokens="[]"
+        :tokens="[] /* eslint-disable-line @gitlab/vue-no-new-non-primitive-in-template */"
         :sortable-fields="sortableFields"
         @sorting:changed="updateSorting"
         @filter:changed="setFilter"
diff --git a/app/assets/javascripts/pipeline_editor/components/editor/ci_config_merged_preview.vue b/app/assets/javascripts/pipeline_editor/components/editor/ci_config_merged_preview.vue
index 853e839a7abbd54730afd6dedb8e806efc328680..42e2d34fa3a0af3d5e2e481f4ed67a37ca874496 100644
--- a/app/assets/javascripts/pipeline_editor/components/editor/ci_config_merged_preview.vue
+++ b/app/assets/javascripts/pipeline_editor/components/editor/ci_config_merged_preview.vue
@@ -46,7 +46,9 @@ export default {
         :value="mergedYaml"
         :file-name="ciConfigPath"
         :file-global-id="fileGlobalId"
-        :editor-options="{ readOnly: true }"
+        :editor-options="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+          readOnly: true,
+        } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
         v-on="$listeners"
       />
     </div>
diff --git a/app/assets/javascripts/pipeline_editor/components/header/pipeline_editor_mini_graph.vue b/app/assets/javascripts/pipeline_editor/components/header/pipeline_editor_mini_graph.vue
index 25a78aab93359936ca54cb87f3381a94e2fc84c6..1f2fdb7ce36110faa25f2e3ccfa21d4195cca14f 100644
--- a/app/assets/javascripts/pipeline_editor/components/header/pipeline_editor_mini_graph.vue
+++ b/app/assets/javascripts/pipeline_editor/components/header/pipeline_editor_mini_graph.vue
@@ -87,7 +87,9 @@ export default {
   <div v-if="pipelineStages.length > 0" class="stage-cell gl-mr-5">
     <linked-pipelines-mini-list
       v-if="upstreamPipeline"
-      :triggered-by="[upstreamPipeline]"
+      :triggered-by="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ [
+        upstreamPipeline,
+      ] /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
       data-testid="pipeline-editor-mini-graph-upstream"
     />
     <pipeline-mini-graph class="gl-display-inline" :stages="pipelineStages" />
diff --git a/app/assets/javascripts/pipelines/components/pipelines_list/empty_state/ios_templates.vue b/app/assets/javascripts/pipelines/components/pipelines_list/empty_state/ios_templates.vue
index b0f5b26367e413fa92c00cdf9ff57bade60efc47..8ff311e90e7c5f51ef4bbb6ca3ebc7c8353667f3 100644
--- a/app/assets/javascripts/pipelines/components/pipelines_list/empty_state/ios_templates.vue
+++ b/app/assets/javascripts/pipelines/components/pipelines_list/empty_state/ios_templates.vue
@@ -204,7 +204,9 @@ export default {
     <h3 class="gl-font-lg gl-text-gray-900 gl-mt-5">{{ $options.i18n.noWalkthroughTitle }}</h3>
     <p>{{ $options.i18n.noWalkthroughExplanation }}</p>
     <ci-templates
-      :filter-templates="[$options.iOSTemplateName]"
+      :filter-templates="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ [
+        $options.iOSTemplateName,
+      ] /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
       :disabled="!isRunnerSetupFinished"
     />
     <p>
diff --git a/app/assets/javascripts/pipelines/components/pipelines_list/pipeline_stage.vue b/app/assets/javascripts/pipelines/components/pipelines_list/pipeline_stage.vue
index afcb04cd7eb9ca6687f65a074074e02d17ee3da8..23e2a36ddeb1f978f02353e176f6e4f78f2bdf50 100644
--- a/app/assets/javascripts/pipelines/components/pipelines_list/pipeline_stage.vue
+++ b/app/assets/javascripts/pipelines/components/pipelines_list/pipeline_stage.vue
@@ -114,7 +114,9 @@ export default {
     variant="link"
     :aria-label="stageAriaLabel(stage.title)"
     :lazy="true"
-    :popper-opts="{ placement: 'bottom' }"
+    :popper-opts="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+      placement: 'bottom',
+    } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
     :toggle-class="['mini-pipeline-graph-dropdown-toggle', triggerButtonClass]"
     menu-class="mini-pipeline-graph-dropdown-menu"
     @show="onShowDropdown"
diff --git a/app/assets/javascripts/pipelines/components/pipelines_list/pipelines_table.vue b/app/assets/javascripts/pipelines/components/pipelines_list/pipelines_table.vue
index 77b9c2b52039711cfe06e0b94978514ff9ade75d..d77c0a39bea3bc61a9f0e6c08afca6a8476d5364 100644
--- a/app/assets/javascripts/pipelines/components/pipelines_list/pipelines_table.vue
+++ b/app/assets/javascripts/pipelines/components/pipelines_list/pipelines_table.vue
@@ -174,7 +174,9 @@ export default {
           <div></div>
           <linked-pipelines-mini-list
             v-if="item.triggered_by"
-            :triggered-by="[item.triggered_by]"
+            :triggered-by="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ [
+              item.triggered_by,
+            ] /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
             data-testid="mini-graph-upstream"
           />
           <pipeline-mini-graph
diff --git a/app/assets/javascripts/projects/commit_box/info/components/commit_box_pipeline_mini_graph.vue b/app/assets/javascripts/projects/commit_box/info/components/commit_box_pipeline_mini_graph.vue
index 8511f9bdb0f393e48253baa1a2cd53fb83fe3109..efac9f3044a32bfeed4139cf1529d965a25de5b2 100644
--- a/app/assets/javascripts/projects/commit_box/info/components/commit_box_pipeline_mini_graph.vue
+++ b/app/assets/javascripts/projects/commit_box/info/components/commit_box_pipeline_mini_graph.vue
@@ -126,7 +126,9 @@ export default {
     <div v-else>
       <linked-pipelines-mini-list
         v-if="upstreamPipeline"
-        :triggered-by="[upstreamPipeline]"
+        :triggered-by="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ [
+          upstreamPipeline,
+        ] /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
         data-testid="commit-box-mini-graph-upstream"
       />
 
diff --git a/app/assets/javascripts/related_issues/components/add_issuable_form.vue b/app/assets/javascripts/related_issues/components/add_issuable_form.vue
index 9ee2e7a4ffd69d3d12217a884bc354f1bebc65d3..42de419aec4f6f0a1a598af9f75b50c5df57275c 100644
--- a/app/assets/javascripts/related_issues/components/add_issuable_form.vue
+++ b/app/assets/javascripts/related_issues/components/add_issuable_form.vue
@@ -195,7 +195,10 @@ export default {
       :path-id-separator="pathIdSeparator"
       :input-value="inputValue"
       :auto-complete-sources="transformedAutocompleteSources"
-      :auto-complete-options="{ issues: autoCompleteIssues, epics: autoCompleteEpics }"
+      :auto-complete-options="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+        issues: autoCompleteIssues,
+        epics: autoCompleteEpics,
+      } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
       :issuable-type="issuableType"
       @pendingIssuableRemoveRequest="onPendingIssuableRemoveRequest"
       @formCancel="onFormCancel"
diff --git a/app/assets/javascripts/runner/components/registration/registration_token_reset_dropdown_item.vue b/app/assets/javascripts/runner/components/registration/registration_token_reset_dropdown_item.vue
index 1234054c6606bab2265c3b59230a984b1b4aee0c..09d46ce3e66fb846bcf404d8f84ba41bb27c2735 100644
--- a/app/assets/javascripts/runner/components/registration/registration_token_reset_dropdown_item.vue
+++ b/app/assets/javascripts/runner/components/registration/registration_token_reset_dropdown_item.vue
@@ -115,14 +115,14 @@ export default {
     <gl-modal
       size="sm"
       :modal-id="$options.modalId"
-      :action-primary="{
+      :action-primary="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
         text: $options.i18n.modalAction,
         attributes: [{ variant: 'danger' }],
-      }"
-      :action-secondary="{
+      } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
+      :action-secondary="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
         text: $options.i18n.modalCancel,
         attributes: [{ variant: 'default' }],
-      }"
+      } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
       :title="$options.i18n.modalTitle"
       @primary="handleModalPrimary"
     >
diff --git a/app/assets/javascripts/serverless/components/area.vue b/app/assets/javascripts/serverless/components/area.vue
index a9584c070fea4e3bf04c267d7b9c47f3dd4d00fb..0b158ff3e95ed8ff7d1f532b8f04797e5033bbe5 100644
--- a/app/assets/javascripts/serverless/components/area.vue
+++ b/app/assets/javascripts/serverless/components/area.vue
@@ -132,7 +132,7 @@ export default {
     <gl-area-chart
       ref="areaChart"
       v-bind="$attrs"
-      :data="[]"
+      :data="[] /* eslint-disable-line @gitlab/vue-no-new-non-primitive-in-template */"
       :option="chartOptions"
       :format-tooltip-text="formatTooltipText"
       :width="width"
diff --git a/app/assets/javascripts/static_site_editor/components/edit_area.vue b/app/assets/javascripts/static_site_editor/components/edit_area.vue
index ea775eff358ffb932a5c02b8a7063290153a6abe..2f2efe290ec8699df35954b98455fdba2e81612c 100644
--- a/app/assets/javascripts/static_site_editor/components/edit_area.vue
+++ b/app/assets/javascripts/static_site_editor/components/edit_area.vue
@@ -167,7 +167,9 @@ export default {
       :content="editableContent"
       :initial-edit-type="editorMode"
       :image-root="imageRoot"
-      :options="{ customRenderers }"
+      :options="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+        customRenderers,
+      } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
       class="mb-9 pb-6 h-100"
       @modeChange="onModeChange"
       @input="onInputChange"
diff --git a/app/assets/javascripts/vue_merge_request_widget/components/extensions/base.vue b/app/assets/javascripts/vue_merge_request_widget/components/extensions/base.vue
index efd277c1756606c106618f9b58cce447aed48de2..bbe15f659f5f6d4774418557180c65f367cc57f5 100644
--- a/app/assets/javascripts/vue_merge_request_widget/components/extensions/base.vue
+++ b/app/assets/javascripts/vue_merge_request_widget/components/extensions/base.vue
@@ -311,7 +311,10 @@ export default {
               data-testid="extension-list-item"
             >
               <gl-intersection-observer
-                :options="{ rootMargin: '100px', thresholds: 0.1 }"
+                :options="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+                  rootMargin: '100px',
+                  thresholds: 0.1,
+                } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
                 class="gl-w-full"
                 @appear="appear(index)"
                 @disappear="disappear(index)"
diff --git a/app/assets/javascripts/vue_shared/components/filtered_search_bar/tokens/base_token.vue b/app/assets/javascripts/vue_shared/components/filtered_search_bar/tokens/base_token.vue
index e7923e0b55e1baebb9c3f1dd6402c574aa98ff11..c3a0a97a7badebde54cf59cbef9ced31cf0466f6 100644
--- a/app/assets/javascripts/vue_shared/components/filtered_search_bar/tokens/base_token.vue
+++ b/app/assets/javascripts/vue_shared/components/filtered_search_bar/tokens/base_token.vue
@@ -211,10 +211,22 @@ export default {
     @select="handleTokenValueSelected"
   >
     <template #view-token="viewTokenProps">
-      <slot name="view-token" :view-token-props="{ ...viewTokenProps, activeTokenValue }"></slot>
+      <slot
+        name="view-token"
+        :view-token-props="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+          ...viewTokenProps,
+          activeTokenValue,
+        } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
+      ></slot>
     </template>
     <template #view="viewTokenProps">
-      <slot name="view" :view-token-props="{ ...viewTokenProps, activeTokenValue }"></slot>
+      <slot
+        name="view"
+        :view-token-props="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+          ...viewTokenProps,
+          activeTokenValue,
+        } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
+      ></slot>
     </template>
     <template v-if="suggestionsEnabled" #suggestions>
       <template v-if="showDefaultSuggestions">
diff --git a/app/assets/javascripts/vue_shared/components/markdown/header.vue b/app/assets/javascripts/vue_shared/components/markdown/header.vue
index 7993910ec1264deb137dbd8a6185ff72a13b3291..ba2b5eaa4f94aa49cf70f3e12d7f4a9a8d3056f1 100644
--- a/app/assets/javascripts/vue_shared/components/markdown/header.vue
+++ b/app/assets/javascripts/vue_shared/components/markdown/header.vue
@@ -198,7 +198,10 @@ export default {
           <toolbar-button
             tag="**"
             :button-title="
-              sprintf(s__('MarkdownEditor|Add bold text (%{modifierKey}B)'), { modifierKey })
+              /* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */
+              sprintf(s__('MarkdownEditor|Add bold text (%{modifierKey}B)'), {
+                modifierKey,
+              }) /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */
             "
             :shortcuts="$options.shortcuts.bold"
             icon="bold"
@@ -206,7 +209,10 @@ export default {
           <toolbar-button
             tag="_"
             :button-title="
-              sprintf(s__('MarkdownEditor|Add italic text (%{modifierKey}I)'), { modifierKey })
+              /* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */
+              sprintf(s__('MarkdownEditor|Add italic text (%{modifierKey}I)'), {
+                modifierKey,
+              }) /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */
             "
             :shortcuts="$options.shortcuts.italic"
             icon="italic"
@@ -215,8 +221,9 @@ export default {
             v-if="!restrictedToolBarItems.includes('strikethrough')"
             tag="~~"
             :button-title="
+              /* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */
               sprintf(s__('MarkdownEditor|Add strikethrough text (%{modifierKey}⇧X)'), {
-                modifierKey,
+                modifierKey /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */,
               })
             "
             :shortcuts="$options.shortcuts.strikethrough"
@@ -273,7 +280,10 @@ export default {
             tag="[{text}](url)"
             tag-select="url"
             :button-title="
-              sprintf(s__('MarkdownEditor|Add a link (%{modifierKey}K)'), { modifierKey })
+              /* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */
+              sprintf(s__('MarkdownEditor|Add a link (%{modifierKey}K)'), {
+                modifierKey,
+              }) /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */
             "
             :shortcuts="$options.shortcuts.link"
             icon="link"
diff --git a/app/assets/javascripts/vue_shared/components/metric_images/metric_images_tab.vue b/app/assets/javascripts/vue_shared/components/metric_images/metric_images_tab.vue
index 3e796a73f720cba3174d626d5025847b0820e6a3..e23721da22393127667278cd2480073e6b2dbe43 100644
--- a/app/assets/javascripts/vue_shared/components/metric_images/metric_images_tab.vue
+++ b/app/assets/javascripts/vue_shared/components/metric_images/metric_images_tab.vue
@@ -90,7 +90,9 @@ export default {
       modal-id="upload-metric-modal"
       size="sm"
       :action-primary="actionPrimaryProps"
-      :action-cancel="{ text: $options.i18n.modalCancel }"
+      :action-cancel="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+        text: $options.i18n.modalCancel,
+      } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
       :title="$options.i18n.modalTitle"
       :visible="modalVisible"
       @hidden="clearInputs"
diff --git a/app/assets/javascripts/vue_shared/components/metric_images/metric_images_table.vue b/app/assets/javascripts/vue_shared/components/metric_images/metric_images_table.vue
index 8eb8e52728dc624e6c3de28258679470ce9c685f..bbbaaeb8a9e943efd6fa6fa37466c983ea38b69f 100644
--- a/app/assets/javascripts/vue_shared/components/metric_images/metric_images_table.vue
+++ b/app/assets/javascripts/vue_shared/components/metric_images/metric_images_table.vue
@@ -159,7 +159,9 @@ export default {
       size="sm"
       :visible="modalVisible"
       :action-primary="deleteActionPrimaryProps"
-      :action-cancel="{ text: $options.i18n.modalCancel }"
+      :action-cancel="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+        text: $options.i18n.modalCancel,
+      } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
       @primary.prevent="onDelete"
       @hidden="resetEditFields"
     >
@@ -177,7 +179,9 @@ export default {
       modal-id="edit-metric-modal"
       size="sm"
       :action-primary="updateActionPrimaryProps"
-      :action-cancel="{ text: $options.i18n.modalCancel }"
+      :action-cancel="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+        text: $options.i18n.modalCancel,
+      } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
       :visible="editModalVisible"
       data-testid="metric-image-edit-modal"
       @hidden="resetEditFields"
diff --git a/app/assets/javascripts/vue_shared/components/navigation_tabs.vue b/app/assets/javascripts/vue_shared/components/navigation_tabs.vue
index a069d1cd756208c405f79457a8b9c6c44f612ef3..21212e82de41302f4a8aae3f3014334f9e89472c 100644
--- a/app/assets/javascripts/vue_shared/components/navigation_tabs.vue
+++ b/app/assets/javascripts/vue_shared/components/navigation_tabs.vue
@@ -61,7 +61,9 @@ export default {
       v-for="(tab, i) in tabs"
       :key="i"
       :title-link-class="`js-${scope}-tab-${tab.scope} gl-display-inline-flex`"
-      :title-link-attributes="{ 'data-testid': `${scope}-tab-${tab.scope}` }"
+      :title-link-attributes="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+        'data-testid': `${scope}-tab-${tab.scope}`,
+      } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
       :active="tab.isActive"
       @click="onTabClick(tab)"
     >
diff --git a/ee/app/assets/javascripts/access_tokens/components/max_expiration_date_message.vue b/ee/app/assets/javascripts/access_tokens/components/max_expiration_date_message.vue
index a73fa6fa01dc3fa087fe622f6eb55dd6ab16110c..fcf59e14994b7117fce5081ef1a922a423b3f643 100644
--- a/ee/app/assets/javascripts/access_tokens/components/max_expiration_date_message.vue
+++ b/ee/app/assets/javascripts/access_tokens/components/max_expiration_date_message.vue
@@ -39,9 +39,10 @@ export default {
       <template #helpLink="{ content }"
         ><gl-link
           :href="
+            /* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */
             helpPagePath('user/admin_area/settings/account_and_limit_settings', {
               anchor: 'limit-the-lifetime-of-access-tokens',
-            })
+            }) /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */
           "
           target="_blank"
           >{{ content }}</gl-link
diff --git a/ee/app/assets/javascripts/analytics/code_review_analytics/components/merge_request_table.vue b/ee/app/assets/javascripts/analytics/code_review_analytics/components/merge_request_table.vue
index 8bf0d166a165dcfe7231147838e425954be51d7d..1089ff786128b4f0ca546ea7e6989fb7c8fa962e 100644
--- a/ee/app/assets/javascripts/analytics/code_review_analytics/components/merge_request_table.vue
+++ b/ee/app/assets/javascripts/analytics/code_review_analytics/components/merge_request_table.vue
@@ -136,7 +136,13 @@ export default {
     </template>
 
     <template #cell(approved_by)="{ value }">
-      <approvers-column :approvers="value && value.length ? value : []" />
+      <approvers-column
+        :approvers="
+          value && value.length
+            ? value
+            : [] /* eslint-disable-line @gitlab/vue-no-new-non-primitive-in-template */
+        "
+      />
     </template>
 
     <template #cell(diff_stats)="{ value }">
diff --git a/ee/app/assets/javascripts/analytics/cycle_analytics/components/create_value_stream_form/custom_stage_fields.vue b/ee/app/assets/javascripts/analytics/cycle_analytics/components/create_value_stream_form/custom_stage_fields.vue
index eb8bc8c10c40da3947fa5b50175513c03c760a08..9813516dc36a2d8a14ede6aa56bce4be88633ac3 100644
--- a/ee/app/assets/javascripts/analytics/cycle_analytics/components/create_value_stream_form/custom_stage_fields.vue
+++ b/ee/app/assets/javascripts/analytics/cycle_analytics/components/create_value_stream_form/custom_stage_fields.vue
@@ -155,7 +155,9 @@ export default {
         :requires-label="startEventRequiresLabel"
         :label-error="fieldErrorMessage('startEventLabelId')"
         :has-label-error="hasFieldErrors('startEventLabelId')"
-        :selected-label-ids="[stage.startEventLabelId]"
+        :selected-label-ids="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ [
+          stage.startEventLabelId,
+        ] /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
         @update-label="$emit('input', { field: 'startEventLabelId', value: $event })"
       />
     </div>
@@ -179,7 +181,9 @@ export default {
         :requires-label="endEventRequiresLabel"
         :label-error="fieldErrorMessage('endEventLabelId')"
         :has-label-error="hasFieldErrors('endEventLabelId')"
-        :selected-label-ids="[stage.endEventLabelId]"
+        :selected-label-ids="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ [
+          stage.endEventLabelId,
+        ] /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
         @update-label="$emit('input', { field: 'endEventLabelId', value: $event })"
       />
     </div>
diff --git a/ee/app/assets/javascripts/analytics/cycle_analytics/components/value_stream_form_content.vue b/ee/app/assets/javascripts/analytics/cycle_analytics/components/value_stream_form_content.vue
index 48eba16bcb088060b6ff22b73f926052120980c1..0291c8ca8ed540121c980fcd5ac553018f7da20d 100644
--- a/ee/app/assets/javascripts/analytics/cycle_analytics/components/value_stream_form_content.vue
+++ b/ee/app/assets/javascripts/analytics/cycle_analytics/components/value_stream_form_content.vue
@@ -336,7 +336,9 @@ export default {
     :title="formTitle"
     :action-primary="primaryProps"
     :action-secondary="secondaryProps"
-    :action-cancel="{ text: $options.i18n.BTN_CANCEL }"
+    :action-cancel="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+      text: $options.i18n.BTN_CANCEL,
+    } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
     @hidden.prevent="$emit('hidden')"
     @secondary.prevent="onAddStage"
     @primary.prevent="onSubmit"
diff --git a/ee/app/assets/javascripts/analytics/cycle_analytics/components/value_stream_select.vue b/ee/app/assets/javascripts/analytics/cycle_analytics/components/value_stream_select.vue
index 2d00ce11adc8cc7cd557cbfcaee68b26a0ec3fe8..ef91b29548e41cc0eac4b204d29cc886bca90af0 100644
--- a/ee/app/assets/javascripts/analytics/cycle_analytics/components/value_stream_select.vue
+++ b/ee/app/assets/javascripts/analytics/cycle_analytics/components/value_stream_select.vue
@@ -170,11 +170,13 @@ export default {
       data-testid="delete-value-stream-modal"
       modal-id="delete-value-stream-modal"
       :title="__('Delete Value Stream')"
-      :action-primary="{
+      :action-primary="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
         text: $options.i18n.DELETE,
         attributes: [{ variant: 'danger' }, { loading: isDeleting }],
-      }"
-      :action-cancel="{ text: $options.i18n.CANCEL }"
+      } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
+      :action-cancel="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+        text: $options.i18n.CANCEL,
+      } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
       @primary.prevent="onDelete"
     >
       <gl-alert v-if="deleteValueStreamError" variant="danger">{{
diff --git a/ee/app/assets/javascripts/analytics/productivity_analytics/components/app.vue b/ee/app/assets/javascripts/analytics/productivity_analytics/components/app.vue
index c71c897a6c98cff86411a1c8e295cf2c0a529219..d1d73d225fecb8f9269a8a8ff948f1d512400a83 100644
--- a/ee/app/assets/javascripts/analytics/productivity_analytics/components/app.vue
+++ b/ee/app/assets/javascripts/analytics/productivity_analytics/components/app.vue
@@ -204,7 +204,9 @@ export default {
         :chart-data="getColumnChartData(chartKeys.main)"
       >
         <gl-column-chart
-          :bars="[{ name: 'full', data: getColumnChartData(chartKeys.main) }]"
+          :bars="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ [
+            { name: 'full', data: getColumnChartData(chartKeys.main) },
+          ] /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
           :option="getColumnChartOption(chartKeys.main)"
           :y-axis-title="__('Merge requests')"
           :x-axis-title="__('Days')"
@@ -255,7 +257,9 @@ export default {
               "
             >
               <gl-column-chart
-                :bars="[{ name: 'full', data: getColumnChartData(chartKeys.timeBasedHistogram) }]"
+                :bars="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ [
+                  { name: 'full', data: getColumnChartData(chartKeys.timeBasedHistogram) },
+                ] /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
                 :option="getColumnChartOption(chartKeys.timeBasedHistogram)"
                 :y-axis-title="s__('ProductivityAnalytics|Merge requests')"
                 :x-axis-title="s__('ProductivityAnalytics|Hours')"
@@ -281,7 +285,9 @@ export default {
               "
             >
               <gl-column-chart
-                :bars="[{ name: 'full', data: getColumnChartData(chartKeys.commitBasedHistogram) }]"
+                :bars="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ [
+                  { name: 'full', data: getColumnChartData(chartKeys.commitBasedHistogram) },
+                ] /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
                 :option="getColumnChartOption(chartKeys.commitBasedHistogram)"
                 :y-axis-title="s__('ProductivityAanalytics|Merge requests')"
                 :x-axis-title="getMetricLabel(chartKeys.commitBasedHistogram)"
diff --git a/ee/app/assets/javascripts/codequality_report/codequality_report.vue b/ee/app/assets/javascripts/codequality_report/codequality_report.vue
index 0f67ec88f5dbc4f01f75f54cdbcd6652611805ff..5e6f0edcd598d02b9a6cc6f2a2337561d161358e 100644
--- a/ee/app/assets/javascripts/codequality_report/codequality_report.vue
+++ b/ee/app/assets/javascripts/codequality_report/codequality_report.vue
@@ -69,7 +69,7 @@ export default {
       :error-text="translateText('Code Quality').error"
       :success-text="codequalityText"
       :unresolved-issues="codequalityIssues"
-      :resolved-issues="[]"
+      :resolved-issues="[] /* eslint-disable-line @gitlab/vue-no-new-non-primitive-in-template */"
       :has-issues="hasCodequalityIssues"
       :component="$options.componentNames.CodequalityIssueBody"
       class="codequality-report"
diff --git a/ee/app/assets/javascripts/codequality_report/codequality_report_graphql.vue b/ee/app/assets/javascripts/codequality_report/codequality_report_graphql.vue
index a91eb96893acebf7bbee7b802eaff4ae49499a08..bea43ead68275469685e7e3c379f5625d453f698 100644
--- a/ee/app/assets/javascripts/codequality_report/codequality_report_graphql.vue
+++ b/ee/app/assets/javascripts/codequality_report/codequality_report_graphql.vue
@@ -137,7 +137,7 @@ export default {
       :error-text="$options.i18n.errorText"
       :success-text="codequalityText"
       :unresolved-issues="codequalityViolations.parsedList"
-      :resolved-issues="[]"
+      :resolved-issues="[] /* eslint-disable-line @gitlab/vue-no-new-non-primitive-in-template */"
       :has-issues="hasCodequalityViolations"
       :component="$options.componentNames.CodequalityIssueBody"
       class="codequality-report"
diff --git a/ee/app/assets/javascripts/compliance_dashboard/components/drawer_sections/branch_path.vue b/ee/app/assets/javascripts/compliance_dashboard/components/drawer_sections/branch_path.vue
index 823f486d23d143faf602723a4a76d66f1d55e256..ed0de1654c73621eca86efa67d0d7d8551c8bea8 100644
--- a/ee/app/assets/javascripts/compliance_dashboard/components/drawer_sections/branch_path.vue
+++ b/ee/app/assets/javascripts/compliance_dashboard/components/drawer_sections/branch_path.vue
@@ -40,14 +40,14 @@ export default {
     <drawer-section-header>{{ $options.i18n.header }}</drawer-section-header>
     <branch-details
       class="gl-justify-content-start gl-text-gray-500"
-      :source-branch="{
+      :source-branch="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
         name: sourceBranch,
         uri: sourceBranchUri,
-      }"
-      :target-branch="{
+      } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
+      :target-branch="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
         name: targetBranch,
         uri: targetBranchUri,
-      }"
+      } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
     />
   </div>
 </template>
diff --git a/ee/app/assets/javascripts/contextual_sidebar/components/trial_status_popover.vue b/ee/app/assets/javascripts/contextual_sidebar/components/trial_status_popover.vue
index d47e5cd0a0b6d67d27ceb4c781e53fe9bf814532..e2eedf27f0c614d94f973049b240e455fa34373c 100644
--- a/ee/app/assets/javascripts/contextual_sidebar/components/trial_status_popover.vue
+++ b/ee/app/assets/javascripts/contextual_sidebar/components/trial_status_popover.vue
@@ -99,7 +99,7 @@ export default {
     :container="containerId"
     :target="targetId"
     :disabled="disabled"
-    :delay="{ hide: 400 }"
+    :delay="{ hide: 400 } /* eslint-disable-line @gitlab/vue-no-new-non-primitive-in-template */"
     @shown="onShown"
   >
     <template #title>
diff --git a/ee/app/assets/javascripts/epics_list/components/epics_list_root.vue b/ee/app/assets/javascripts/epics_list/components/epics_list_root.vue
index 7edfd1846b1a6312d04bbcc39e0f43c7a2ab3061..1d136167b6569c906e63d7ee181f89854e4d81fc 100644
--- a/ee/app/assets/javascripts/epics_list/components/epics_list_root.vue
+++ b/ee/app/assets/javascripts/epics_list/components/epics_list_root.vue
@@ -240,7 +240,12 @@ export default {
     :current-tab="currentState"
     :tab-counts="epicsCount"
     :search-input-placeholder="__('Search or filter results...')"
-    :search-tokens="getFilteredSearchTokens({ supportsEpic: false })"
+    :search-tokens="
+      /* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */
+      getFilteredSearchTokens({
+        supportsEpic: false,
+      }) /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */
+    "
     :sort-options="$options.EpicsSortOptions"
     :initial-filter-value="getFilteredSearchValue()"
     :initial-sort-by="sortedBy"
diff --git a/ee/app/assets/javascripts/geo_nodes/components/details/primary_node/geo_node_verification_info.vue b/ee/app/assets/javascripts/geo_nodes/components/details/primary_node/geo_node_verification_info.vue
index 4d878e3a34e7a9ccd155ed741a6441b43abaceaf..0dd7c5ae62e69997f768f82faa5de5fd424db5ae 100644
--- a/ee/app/assets/javascripts/geo_nodes/components/details/primary_node/geo_node_verification_info.vue
+++ b/ee/app/assets/javascripts/geo_nodes/components/details/primary_node/geo_node_verification_info.vue
@@ -64,7 +64,12 @@ export default {
       }}</span>
       <geo-node-progress-bar
         class="gl-mt-3"
-        :title="sprintf($options.i18n.progressBarTitle, { title: bar.title })"
+        :title="
+          /* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */
+          sprintf($options.i18n.progressBarTitle, {
+            title: bar.title,
+          }) /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */
+        "
         :values="bar.values"
         :success-label="$options.i18n.checksummed"
         :unavailable-label="$options.i18n.nothingToChecksum"
diff --git a/ee/app/assets/javascripts/geo_nodes/components/details/secondary_node/geo_node_replication_details_responsive.vue b/ee/app/assets/javascripts/geo_nodes/components/details/secondary_node/geo_node_replication_details_responsive.vue
index e0a9eecd6d73969fb3a1915140658a473955dc86..4647a833dc994830ccb0c7fdf92f6bdc938e9739 100644
--- a/ee/app/assets/javascripts/geo_nodes/components/details/secondary_node/geo_node_replication_details_responsive.vue
+++ b/ee/app/assets/javascripts/geo_nodes/components/details/secondary_node/geo_node_replication_details_responsive.vue
@@ -63,7 +63,12 @@ export default {
         <div class="gl-mr-5" data-testid="sync-status">
           <geo-node-progress-bar
             v-if="item.syncValues"
-            :title="sprintf($options.i18n.progressBarSyncTitle, { component: item.component })"
+            :title="
+              /* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ sprintf(
+                $options.i18n.progressBarSyncTitle,
+                { component: item.component },
+              ) /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */
+            "
             :target="`sync-progress-${nodeId}-${item.component}`"
             :values="item.syncValues"
           />
@@ -72,7 +77,12 @@ export default {
         <div data-testid="verification-status">
           <geo-node-progress-bar
             v-if="item.verificationValues"
-            :title="sprintf($options.i18n.progressBarVerifTitle, { component: item.component })"
+            :title="
+              /* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ sprintf(
+                $options.i18n.progressBarVerifTitle,
+                { component: item.component },
+              ) /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */
+            "
             :target="`verification-progress-${nodeId}-${item.component}`"
             :values="item.verificationValues"
             :success-label="$options.i18n.verified"
diff --git a/ee/app/assets/javascripts/geo_nodes/components/details/secondary_node/geo_node_replication_status_mobile.vue b/ee/app/assets/javascripts/geo_nodes/components/details/secondary_node/geo_node_replication_status_mobile.vue
index c4fe714db41ce2333f664511a36a3e37504bc0f6..a016c635f0cae6e0da81c1f8fb6a81e68e2a8920 100644
--- a/ee/app/assets/javascripts/geo_nodes/components/details/secondary_node/geo_node_replication_status_mobile.vue
+++ b/ee/app/assets/javascripts/geo_nodes/components/details/secondary_node/geo_node_replication_status_mobile.vue
@@ -25,7 +25,12 @@ export default {
       <span class="gl-font-sm gl-mb-3">{{ translations.syncStatus }}</span>
       <geo-node-progress-bar
         v-if="item.syncValues"
-        :title="sprintf(translations.progressBarSyncTitle, { component: item.component })"
+        :title="
+          /* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */
+          sprintf(translations.progressBarSyncTitle, {
+            component: item.component,
+          }) /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */
+        "
         :target="`mobile-sync-progress-${item.component}`"
         :values="item.syncValues"
       />
@@ -35,7 +40,12 @@ export default {
       <span class="gl-font-sm gl-mb-3">{{ translations.verifStatus }}</span>
       <geo-node-progress-bar
         v-if="item.verificationValues"
-        :title="sprintf(translations.progressBarVerifTitle, { component: item.component })"
+        :title="
+          /* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */
+          sprintf(translations.progressBarVerifTitle, {
+            component: item.component,
+          }) /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */
+        "
         :target="`mobile-verification-progress-${item.component}`"
         :values="item.verificationValues"
         :success-label="translations.verified"
diff --git a/ee/app/assets/javascripts/geo_nodes/components/header/geo_node_actions_desktop.vue b/ee/app/assets/javascripts/geo_nodes/components/header/geo_node_actions_desktop.vue
index 2f0df30352542a13103ff22781e7d53cfba1d1bc..a02234f9a9181d9146443212bac1d7314e087866 100644
--- a/ee/app/assets/javascripts/geo_nodes/components/header/geo_node_actions_desktop.vue
+++ b/ee/app/assets/javascripts/geo_nodes/components/header/geo_node_actions_desktop.vue
@@ -34,8 +34,18 @@ export default {
   <div>
     <gl-button
       v-gl-tooltip
-      :title="sprintf($options.i18n.editButtonTooltip, { nodeType })"
-      :aria-label="sprintf($options.i18n.editButtonTooltip, { nodeType })"
+      :title="
+        /* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ sprintf(
+          $options.i18n.editButtonTooltip,
+          { nodeType },
+        ) /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */
+      "
+      :aria-label="
+        /* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ sprintf(
+          $options.i18n.editButtonTooltip,
+          { nodeType },
+        ) /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */
+      "
       icon="pencil"
       class="gl-mr-3"
       data-testid="geo-desktop-edit-action"
@@ -43,8 +53,18 @@ export default {
     />
     <gl-button
       v-gl-tooltip
-      :title="sprintf($options.i18n.removeButtonTooltip, { nodeType })"
-      :aria-label="sprintf($options.i18n.removeButtonTooltip, { nodeType })"
+      :title="
+        /* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ sprintf(
+          $options.i18n.removeButtonTooltip,
+          { nodeType },
+        ) /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */
+      "
+      :aria-label="
+        /* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ sprintf(
+          $options.i18n.removeButtonTooltip,
+          { nodeType },
+        ) /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */
+      "
       icon="remove"
       :disabled="!canRemoveNode(node.id)"
       data-testid="geo-desktop-remove-action"
diff --git a/ee/app/assets/javascripts/geo_replicable/components/geo_replicable_empty_state.vue b/ee/app/assets/javascripts/geo_replicable/components/geo_replicable_empty_state.vue
index fec66658d89b67552c7290de9483ccc6dd127782..67696480d2b5abec66204c8781826e0c3f42b1a3 100644
--- a/ee/app/assets/javascripts/geo_replicable/components/geo_replicable_empty_state.vue
+++ b/ee/app/assets/javascripts/geo_replicable/components/geo_replicable_empty_state.vue
@@ -27,7 +27,12 @@ export default {
 
 <template>
   <gl-empty-state
-    :title="sprintf(__('There are no %{replicableTypeName} to show'), { replicableTypeName })"
+    :title="
+      /* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */
+      sprintf(__('There are no %{replicableTypeName} to show'), {
+        replicableTypeName,
+      }) /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */
+    "
     :svg-path="geoReplicableEmptySvgPath"
   >
     <template #description>
diff --git a/ee/app/assets/javascripts/issues_analytics/components/issues_analytics.vue b/ee/app/assets/javascripts/issues_analytics/components/issues_analytics.vue
index 1181a978839854085aa01d88faf3cccc8b1d1b2f..bee7628c20f362bb80415636f41dd669d05738ce 100644
--- a/ee/app/assets/javascripts/issues_analytics/components/issues_analytics.vue
+++ b/ee/app/assets/javascripts/issues_analytics/components/issues_analytics.vue
@@ -182,7 +182,9 @@ export default {
 
       <gl-column-chart
         data-qa-selector="issues_analytics_graph"
-        :bars="[{ name: 'Full', data }]"
+        :bars="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ [
+          { name: 'Full', data },
+        ] /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
         :option="chartOptions"
         :y-axis-title="s__('IssuesAnalytics|Issues created')"
         :x-axis-title="s__('IssuesAnalytics|Last 12 months') + ' (' + chartDateRange + ')'"
diff --git a/ee/app/assets/javascripts/namespaces/verification/components/credit_card_verification.vue b/ee/app/assets/javascripts/namespaces/verification/components/credit_card_verification.vue
index 1441388e069b14caafa8a07091f5375ba2b43ba3..19882a4119194bcf9919f8d2a425a390bfb5269f 100644
--- a/ee/app/assets/javascripts/namespaces/verification/components/credit_card_verification.vue
+++ b/ee/app/assets/javascripts/namespaces/verification/components/credit_card_verification.vue
@@ -54,7 +54,9 @@ export default {
       <create-group-description-details />
     </div>
     <div class="col-lg-9">
-      <gl-breadcrumb :items="[]" />
+      <gl-breadcrumb
+        :items="[] /* eslint-disable-line @gitlab/vue-no-new-non-primitive-in-template */"
+      />
       <label class="gl-mt-3">{{ $options.I18N_FORM_TITLE }}</label>
       <p>{{ $options.I18N_FORM_EXPLANATION }}</p>
       <zuora
diff --git a/ee/app/assets/javascripts/on_demand_scans_form/components/on_demand_scans_form.vue b/ee/app/assets/javascripts/on_demand_scans_form/components/on_demand_scans_form.vue
index 596a96f44fc630bbfaea9e1149f24c2ed8af7e99..baa456c30dd61a3d6a3af5fed730dc8f5f77ecf6 100644
--- a/ee/app/assets/javascripts/on_demand_scans_form/components/on_demand_scans_form.vue
+++ b/ee/app/assets/javascripts/on_demand_scans_form/components/on_demand_scans_form.vue
@@ -453,12 +453,12 @@ export default {
               no-flip
               :enabled-ref-types="$options.enabledRefTypes"
               :project-id="projectPath"
-              :translations="{
+              :translations="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
                 dropdownHeader: __('Select a branch'),
                 searchPlaceholder: __('Search'),
                 noRefSelected: __('No available branches'),
                 noResults: __('No available branches'),
-              }"
+              } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
             />
             <div v-if="!defaultBranch" class="gl-text-red-500 gl-mt-3">
               {{ $options.i18n.scanConfigurationDefaultBranchLabel }}
diff --git a/ee/app/assets/javascripts/related_items_tree/components/related_items_tree_app.vue b/ee/app/assets/javascripts/related_items_tree/components/related_items_tree_app.vue
index 1e0ac2997865a69079d39b89ec5253bccf7867fb..16404f9fe798885752d9633666a27349418e9885 100644
--- a/ee/app/assets/javascripts/related_items_tree/components/related_items_tree_app.vue
+++ b/ee/app/assets/javascripts/related_items_tree/components/related_items_tree_app.vue
@@ -188,10 +188,11 @@ export default {
       }"
     >
       <related-items-tree-header :class="{ 'border-bottom-0': itemsFetchResultEmpty }" />
-
       <slot-switch
         v-if="visibleForm && parentItem.confidential"
-        :active-slot-names="[visibleForm]"
+        :active-slot-names="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ [
+          visibleForm,
+        ] /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
         class="gl-p-5 gl-pb-0"
       >
         <template v-for="slot in formSlots" #[slot.name]>
@@ -212,7 +213,9 @@ export default {
       </slot-switch>
       <slot-switch
         v-if="visibleForm"
-        :active-slot-names="[visibleForm]"
+        :active-slot-names="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ [
+          visibleForm,
+        ] /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
         class="card-body add-item-form-container"
         :class="{
           'border-bottom-0': itemsFetchResultEmpty,
diff --git a/ee/app/assets/javascripts/related_items_tree/components/tree_item.vue b/ee/app/assets/javascripts/related_items_tree/components/tree_item.vue
index 9613e0ef0186bd8df71e1822c74d518f31e714ae..c3d09d0b80b5b07f74acc22285a2872e50bd49a5 100644
--- a/ee/app/assets/javascripts/related_items_tree/components/tree_item.vue
+++ b/ee/app/assets/javascripts/related_items_tree/components/tree_item.vue
@@ -108,7 +108,10 @@ export default {
     <tree-root
       v-if="itemExpanded || showEpicDropzone"
       :parent-item="item"
-      :children="children[itemReference] || []"
+      :children="
+        children[itemReference] ||
+        [] /* eslint-disable-line @gitlab/vue-no-new-non-primitive-in-template */
+      "
       class="sub-tree-root"
     />
   </li>
diff --git a/ee/app/assets/javascripts/repository/components/lock_button.vue b/ee/app/assets/javascripts/repository/components/lock_button.vue
index f94422de73e6e8f325b03ff8bad292edc9306f44..e8132d0109c086e36bbbf1c64629b8be1108d646 100644
--- a/ee/app/assets/javascripts/repository/components/lock_button.vue
+++ b/ee/app/assets/javascripts/repository/components/lock_button.vue
@@ -96,11 +96,13 @@ export default {
       modal-id="lock-file-modal"
       :visible="isModalVisible"
       :title="$options.i18n.modalTitle"
-      :action-primary="{
+      :action-primary="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
         text: $options.i18n.actionPrimary,
         attributes: { variant: 'confirm', 'data-qa-selector': 'confirm_ok_button' },
-      }"
-      :action-cancel="{ text: $options.i18n.actionCancel }"
+      } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
+      :action-cancel="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+        text: $options.i18n.actionCancel,
+      } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
       @primary="handleModalPrimary"
       @hide="hideModal"
     >
diff --git a/ee/app/assets/javascripts/requirements/components/requirements_tabs.vue b/ee/app/assets/javascripts/requirements/components/requirements_tabs.vue
index 1953002fd3383b8d51f1e086f07fe1c92d49ebe1..0df49d5d002ff5bf6b1584a28ec57005c9c6b36c 100644
--- a/ee/app/assets/javascripts/requirements/components/requirements_tabs.vue
+++ b/ee/app/assets/javascripts/requirements/components/requirements_tabs.vue
@@ -55,7 +55,9 @@ export default {
   <div class="gl-display-flex gl-align-items-center gl-justify-content-space-between">
     <gl-tabs content-class="gl-p-0">
       <gl-tab
-        :title-link-attributes="{ 'data-testid': 'state-opened' }"
+        :title-link-attributes="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+          'data-testid': 'state-opened',
+        } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
         :active="isOpenTab"
         @click="$emit('click-tab', { filterBy: $options.FilterState.opened })"
       >
@@ -65,7 +67,9 @@ export default {
         </template>
       </gl-tab>
       <gl-tab
-        :title-link-attributes="{ 'data-testid': 'state-archived' }"
+        :title-link-attributes="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+          'data-testid': 'state-archived',
+        } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
         :active="isArchivedTab"
         @click="$emit('click-tab', { filterBy: $options.FilterState.archived })"
       >
@@ -77,7 +81,9 @@ export default {
         </template>
       </gl-tab>
       <gl-tab
-        :title-link-attributes="{ 'data-testid': 'state-all' }"
+        :title-link-attributes="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+          'data-testid': 'state-all',
+        } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
         :active="isAllTab"
         @click="$emit('click-tab', { filterBy: $options.FilterState.all })"
       >
diff --git a/ee/app/assets/javascripts/roadmap/components/epic_item.vue b/ee/app/assets/javascripts/roadmap/components/epic_item.vue
index 9ff89a970bf1700b551baea62d7e91417ba61923..60b823d0785e26d8f39ef40e36bd58f914be847c 100644
--- a/ee/app/assets/javascripts/roadmap/components/epic_item.vue
+++ b/ee/app/assets/javascripts/roadmap/components/epic_item.vue
@@ -170,7 +170,10 @@ export default {
       :timeframe="timeframe"
       :current-group-id="currentGroupId"
       :client-width="clientWidth"
-      :children="childrenEpics[epic.id] || []"
+      :children="
+        childrenEpics[epic.id] ||
+        [] /* eslint-disable-line @gitlab/vue-no-new-non-primitive-in-template */
+      "
       :child-level="childLevel + 1"
       :children-epics="childrenEpics"
       :children-flags="childrenFlags"
diff --git a/ee/app/assets/javascripts/security_configuration/components/configuration_snippet_modal.vue b/ee/app/assets/javascripts/security_configuration/components/configuration_snippet_modal.vue
index 9624de622d1ad311795f5c69dde2c297a0e5fe9b..922b2e248416bf88d08f8f0612b01f24ed1d0e56 100644
--- a/ee/app/assets/javascripts/security_configuration/components/configuration_snippet_modal.vue
+++ b/ee/app/assets/javascripts/security_configuration/components/configuration_snippet_modal.vue
@@ -98,17 +98,17 @@ export default {
 <template>
   <gl-modal
     ref="modal"
-    :action-primary="{
+    :action-primary="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
       text: $options.i18n.primaryText,
       attributes: [{ variant: 'confirm' }, { id: 'copy-yaml-snippet-and-edit-button' }],
-    }"
-    :action-secondary="{
+    } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
+    :action-secondary="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
       text: $options.i18n.secondaryText,
       attributes: [{ variant: 'default' }, { id: 'copy-yaml-snippet-button' }],
-    }"
-    :action-cancel="{
+    } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
+    :action-cancel="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
       text: $options.i18n.cancelText,
-    }"
+    } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
     :modal-id="$options.CONFIGURATION_SNIPPET_MODAL_ID"
     :title="modalTitle"
     @hide="onHide"
diff --git a/ee/app/assets/javascripts/security_configuration/dast_profiles/dast_scanner_profiles/components/dast_scanner_profile_form.vue b/ee/app/assets/javascripts/security_configuration/dast_profiles/dast_scanner_profiles/components/dast_scanner_profile_form.vue
index 635be217e553cc35c954490434d00da11654472c..5a250263704650952187624af9683878c1a51326 100644
--- a/ee/app/assets/javascripts/security_configuration/dast_profiles/dast_scanner_profiles/components/dast_scanner_profile_form.vue
+++ b/ee/app/assets/javascripts/security_configuration/dast_profiles/dast_scanner_profiles/components/dast_scanner_profile_form.vue
@@ -138,11 +138,11 @@ export default {
     :form-touched="formTouched"
     :is-policy-profile="isPolicyProfile"
     :block-submit="!form.state"
-    :modal-props="{
+    :modal-props="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
       title: i18n.modal.title,
       okTitle: i18n.modal.okTitle,
       cancelTitle: i18n.modal.cancelTitle,
-    }"
+    } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
     @submit="form.showValidation = true"
     v-on="$listeners"
   >
diff --git a/ee/app/assets/javascripts/security_configuration/dast_profiles/dast_site_profiles/components/dast_site_profile_form.vue b/ee/app/assets/javascripts/security_configuration/dast_profiles/dast_site_profiles/components/dast_site_profile_form.vue
index dd1e319907a864671c2cc609a6647020fac7a352..0188372309b370fd92a20ee0dc540a52232035db 100644
--- a/ee/app/assets/javascripts/security_configuration/dast_profiles/dast_site_profiles/components/dast_site_profile_form.vue
+++ b/ee/app/assets/javascripts/security_configuration/dast_profiles/dast_site_profiles/components/dast_site_profile_form.vue
@@ -227,11 +227,11 @@ export default {
     :form-touched="formTouched"
     :is-policy-profile="isPolicyProfile"
     :block-submit="isSubmitBlocked"
-    :modal-props="{
+    :modal-props="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
       title: i18n.modal.title,
       okTitle: i18n.modal.okTitle,
       cancelTitle: i18n.modal.cancelTitle,
-    }"
+    } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
     @submit="form.showValidation = true"
     v-on="$listeners"
   >
diff --git a/ee/app/assets/javascripts/security_dashboard/components/pipeline/pipeline_security_dashboard.vue b/ee/app/assets/javascripts/security_dashboard/components/pipeline/pipeline_security_dashboard.vue
index 37b8b836de2143b49932ff2ff819091d85a7ff6e..af9cb73b400462e88c90404f00848bb38f9740f4 100644
--- a/ee/app/assets/javascripts/security_dashboard/components/pipeline/pipeline_security_dashboard.vue
+++ b/ee/app/assets/javascripts/security_dashboard/components/pipeline/pipeline_security_dashboard.vue
@@ -160,7 +160,9 @@ export default {
     <security-dashboard
       v-if="!shouldShowGraphqlVulnerabilityReport"
       :vulnerabilities-endpoint="vulnerabilitiesEndpoint"
-      :lock-to-project="{ id: projectId }"
+      :lock-to-project="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+        id: projectId,
+      } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
       :pipeline-id="pipeline.id"
       :loading-error-illustrations="loadingErrorIllustrations"
       :security-report-summary="reportSummary"
diff --git a/ee/app/assets/javascripts/usage_quotas/seats/components/subscription_seats.vue b/ee/app/assets/javascripts/usage_quotas/seats/components/subscription_seats.vue
index b106bdbb489484f5f48df8256b43e9ddf63a54f3..4e619948832fe339f410d61fea6cb2102e5422f1 100644
--- a/ee/app/assets/javascripts/usage_quotas/seats/components/subscription_seats.vue
+++ b/ee/app/assets/javascripts/usage_quotas/seats/components/subscription_seats.vue
@@ -243,7 +243,7 @@ export default {
     <div class="gl-bg-gray-10 gl-p-5 gl-display-flex">
       <filter-sort-container-root
         :namespace="namespaceId"
-        :tokens="[]"
+        :tokens="[] /* eslint-disable-line @gitlab/vue-no-new-non-primitive-in-template */"
         :search-input-placeholder="$options.i18n.filterUsersPlaceholder"
         :sort-options="$options.sortOptions"
         initial-sort-by="last_activity_on_desc"
@@ -361,7 +361,9 @@ export default {
       ref="cannotRemoveModal"
       :modal-id="$options.cannotRemoveModalId"
       :title="$options.cannotRemoveModalTitle"
-      :action-primary="{ text: __('Okay') }"
+      :action-primary="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
+        text: __('Okay'),
+      } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
       static
     >
       <p>