From 455fd39c582c37beedf97b1239c695edabf36adc Mon Sep 17 00:00:00 2001 From: Phillip Rak Date: Wed, 10 Jan 2024 09:05:01 -0700 Subject: [PATCH] Update tsconfig paths and add `vue-shim.d.ts` Update paths in `shell/tsconfig.paths.json` to include "@components/*" alias that maps to "../pkg/rancher-components/src/components/*". Typescript was unable to properly locate components using the `@components` alias because this path was not defined. Add declarations to support our i18n plugin to `shell/types/vue-shim.d.ts` so that `this.t()` and the `t` component can be recognized in components utilizing `defineComponent`. Signed-off-by: Phillip Rak --- shell/tsconfig.paths.json | 5 ++++- shell/types/vue-shim.d.ts | 42 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 shell/types/vue-shim.d.ts diff --git a/shell/tsconfig.paths.json b/shell/tsconfig.paths.json index 759c1c28f51..72ef53d32c0 100644 --- a/shell/tsconfig.paths.json +++ b/shell/tsconfig.paths.json @@ -12,7 +12,10 @@ ], "@pkg/*": [ "../shell/pkg/*" + ], + "@components/*": [ + "../pkg/rancher-components/src/components/*" ] }, }, -} \ No newline at end of file +} diff --git a/shell/types/vue-shim.d.ts b/shell/types/vue-shim.d.ts new file mode 100644 index 00000000000..31176020da9 --- /dev/null +++ b/shell/types/vue-shim.d.ts @@ -0,0 +1,42 @@ +// eslint-disable-next-line no-unused-vars +import Vue, { ComponentCustomProperties } from 'vue'; +declare module '*.vue' { + export default Vue; +} + +// This is required to keep typescript from complaining. It is required for +// our i18n plugin. For more info see: +// https://v2.vuejs.org/v2/guide/typescript.html?redirect=true#Augmenting-Types-for-Use-with-Plugins +declare module 'vue/types/vue' { + // eslint-disable-next-line no-unused-vars + interface Vue { + /** + * Lookup a given string with the given arguments + * @param raw if set, do not do HTML escaping. + */ + t: { + (key: string, args?: Record, raw?: boolean): string; + (options: { k: string; raw?: boolean; tag?: string | Record; escapehtml?: boolean }): string; + }; + } +} + +declare module '@vue/runtime-core' { + // eslint-disable-next-line no-unused-vars + interface Vue { + t: { + (key: string, args?: Record, raw?: boolean): string; + (options: { k: string; raw?: boolean; tag?: string | Record; escapehtml?: boolean }): string; + } + } + + // eslint-disable-next-line no-unused-vars + interface ComponentCustomProperties { + $t: { + (key: string, args?: Record, raw?: boolean): string; + (options: { k: string; raw?: boolean; tag?: string | Record; escapehtml?: boolean }): string; + } + } +} + +declare module 'js-yaml';