From dea25b091eb33c72da426cbdd902133d097e6fbc Mon Sep 17 00:00:00 2001 From: Simon Ihmig Date: Tue, 28 Mar 2023 11:39:45 +0200 Subject: [PATCH] Fix types, cleanup --- .../src/components/headless-form.gts | 13 +++++-- .../src/{index.gts => index.ts} | 0 ...late-registry.gts => template-registry.ts} | 0 .../unpublished-development-types/index.d.ts | 37 ++++++++++--------- 4 files changed, 29 insertions(+), 21 deletions(-) rename packages/ember-headless-form/src/{index.gts => index.ts} (100%) rename packages/ember-headless-form/src/{template-registry.gts => template-registry.ts} (100%) diff --git a/packages/ember-headless-form/src/components/headless-form.gts b/packages/ember-headless-form/src/components/headless-form.gts index f6c243703..98516fdfd 100644 --- a/packages/ember-headless-form/src/components/headless-form.gts +++ b/packages/ember-headless-form/src/components/headless-form.gts @@ -7,12 +7,13 @@ import { assert, warn } from '@ember/debug'; import { hash, modifier } from '@ember/helper'; import { on } from '@ember/modifier'; import { action, set } from '@ember/object'; +import { EnsureSafeComponentHelper } from '@embroider/util'; import { TrackedAsyncData } from 'ember-async-data'; import { modifier as elementModifier } from 'ember-modifier'; import { TrackedObject } from 'tracked-built-ins'; -import HeadlessFormFieldComponent from '../-private/components/field'; +import FieldComponent from '../-private/components/field'; import { mergeErrorRecord } from '../-private/utils'; import type { @@ -25,10 +26,14 @@ import type { UserData, ValidationError, } from '../-private/types'; +import type { EnsureSafeComponentHelperFixed } from '@embroider/util'; import type { ModifierLike, WithBoundArgs } from '@glint/template'; type ValidateOn = 'change' | 'focusout' | 'submit' | 'input'; +const ensureSafeComponent = + EnsureSafeComponentHelper as typeof EnsureSafeComponentHelperFixed; + export interface HeadlessFormComponentSignature< DATA extends UserData, SUBMISSION_VALUE @@ -95,7 +100,7 @@ export interface HeadlessFormComponentSignature< * Field component to define the fields of your form. It yields the further components for the form control, label and validation error. */ Field: WithBoundArgs< - typeof HeadlessFormFieldComponent, + typeof FieldComponent, | 'data' | 'set' | 'errors' @@ -190,6 +195,8 @@ export default class HeadlessFormComponent< DATA extends UserData, SUBMISSION_VALUE > extends Component> { + FieldComponent = FieldComponent; + // we cannot use (modifier "on") directly in the template due to https://github.com/emberjs/ember.js/issues/19869 on = on; formElement?: HTMLFormElement; @@ -520,7 +527,7 @@ export default class HeadlessFormComponent< {{yield (hash Field=(component - HeadlessFormFieldComponent + (ensureSafeComponent this.FieldComponent) data=this.internalData set=this.set errors=this.visibleErrors diff --git a/packages/ember-headless-form/src/index.gts b/packages/ember-headless-form/src/index.ts similarity index 100% rename from packages/ember-headless-form/src/index.gts rename to packages/ember-headless-form/src/index.ts diff --git a/packages/ember-headless-form/src/template-registry.gts b/packages/ember-headless-form/src/template-registry.ts similarity index 100% rename from packages/ember-headless-form/src/template-registry.gts rename to packages/ember-headless-form/src/template-registry.ts diff --git a/packages/ember-headless-form/unpublished-development-types/index.d.ts b/packages/ember-headless-form/unpublished-development-types/index.d.ts index db884b903..8967b0ac2 100644 --- a/packages/ember-headless-form/unpublished-development-types/index.d.ts +++ b/packages/ember-headless-form/unpublished-development-types/index.d.ts @@ -8,32 +8,33 @@ import Helper from '@ember/component/helper'; import { ComponentLike } from '@glint/template'; import type HeadlessFormRegistry from '../src/template-registry'; +import type { EnsureSafeComponentHelperFixed } from '@embroider/util'; import type TemplateRegistry from '@glint/environment-ember-loose/registry'; -// importing this directly from the published types (https://github.com/embroider-build/embroider/blob/main/packages/util/index.d.ts) does not work, -// see point 3 in Dan's comment here: https://github.com/typed-ember/glint/issues/518#issuecomment-1400306133 -declare class EnsureSafeComponentHelper< - // eslint-disable-next-line @typescript-eslint/no-explicit-any - C extends string | ComponentLike -> extends Helper<{ - Args: { - Positional: [component: C]; - }; - Return: C extends keyof TemplateRegistry - ? TemplateRegistry[C] - : C extends string - ? ComponentLike - : C; -}> {} +declare module '@embroider/util' { + // importing this directly from the published types (https://github.com/embroider-build/embroider/blob/main/packages/util/index.d.ts) does not work, + // see point 3 in Dan's comment here: https://github.com/typed-ember/glint/issues/518#issuecomment-1400306133 + export class EnsureSafeComponentHelperFixed< + // eslint-disable-next-line @typescript-eslint/no-explicit-any + C extends string | ComponentLike + > extends Helper<{ + Args: { + Positional: [component: C]; + }; + Return: C extends keyof TemplateRegistry + ? TemplateRegistry[C] + : C extends string + ? ComponentLike + : C; + }> {} +} declare module '@glint/environment-ember-loose/registry' { - // Remove this once entries have been added! 👇 - // eslint-disable-next-line @typescript-eslint/no-empty-interface export default interface Registry extends HeadlessFormRegistry { // Add any registry entries from other addons here that your addon itself uses (in non-strict mode templates) // See https://typed-ember.gitbook.io/glint/using-glint/ember/using-addons - 'ensure-safe-component': typeof EnsureSafeComponentHelper; + 'ensure-safe-component': typeof EnsureSafeComponentHelperFixed; // eslint-disable-next-line @typescript-eslint/no-explicit-any -- effectively skipping type checks until https://github.com/typed-ember/glint/issues/410 is resolved modifier: any;