Skip to content

Commit

Permalink
Typescriptify Phase VI 🥃🧉 (#749)
Browse files Browse the repository at this point in the history
* MIGRATES TESTS!!! 🤯

* Don’t need these 🎲
  • Loading branch information
ZeeJab committed Nov 3, 2020
1 parent 49238cd commit 3170b48
Show file tree
Hide file tree
Showing 54 changed files with 2,989 additions and 2,910 deletions.
3 changes: 1 addition & 2 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ module.exports = {
],
"globals": {
"Atomics": "readonly",
"SharedArrayBuffer": "readonly"
"SharedArrayBuffer": "readonly",
},
"plugins": ["@typescript-eslint"],
"parser": "@typescript-eslint/parser",
Expand Down Expand Up @@ -62,7 +62,6 @@ module.exports = {
"error",
"last"
],
"complexity": "error",
"computed-property-spacing": [
"error",
"never"
Expand Down
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@
"@rollup/plugin-commonjs": "^15.0.0",
"@rollup/plugin-node-resolve": "^9.0.0",
"@rollup/plugin-typescript": "^5.0.2",
"@types/jquery": "^3.5.2",
"@types/qunit": "^2.9.5",
"@typescript-eslint/eslint-plugin": "^3.6.1",
"@typescript-eslint/parser": "^3.6.1",
"conventional-changelog-cli": "^2.0.34",
Expand Down
38 changes: 19 additions & 19 deletions src/js/editor/editor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import Card, { CardMode, CardPayload } from '../models/card'
import assert from '../utils/assert'
import MutationHandler from '../editor/mutation-handler'
import EditHistory from '../editor/edit-history'
import EventManager, { EventType, EventForType } from '../editor/event-manager'
import EventManager, { DOMEventType, DOMEventForType } from '../editor/event-manager'
import EditState from '../editor/edit-state'
import DOMRenderer from 'mobiledoc-dom-renderer'
import TextRenderer from 'mobiledoc-text-renderer'
Expand All @@ -56,27 +56,27 @@ import { TextInputHandlerListener } from './text-input-handler'
export { EDITOR_ELEMENT_CLASS_NAME } from '../renderers/editor-dom'

export interface EditorOptions {
parserPlugins: SectionParserPlugin[]
placeholder: string
spellcheck: boolean
autofocus: boolean
showLinkTooltips: boolean
undoDepth: number
undoBlockTimeout: number
cards: CardData[]
atoms: AtomData[]
cardOptions: {}
unknownCardHandler: CardRenderHook
unknownAtomHandler: CardRenderHook
mobiledoc: Option<Mobiledoc>
html: Option<string>
tooltipPlugin: TooltipPlugin
parserPlugins?: SectionParserPlugin[]
placeholder?: string
spellcheck?: boolean
autofocus?: boolean
showLinkTooltips?: boolean
undoDepth?: number
undoBlockTimeout?: number
cards?: CardData[]
atoms?: AtomData[]
cardOptions?: {}
unknownCardHandler?: CardRenderHook
unknownAtomHandler?: CardRenderHook
mobiledoc?: Option<Mobiledoc>
html?: Option<string>
tooltipPlugin?: TooltipPlugin

/** @internal */
nodeType?: number
}

const defaults: Partial<EditorOptions> = {
const defaults: EditorOptions = {
placeholder: 'Write here...',
spellcheck: true,
autofocus: true,
Expand Down Expand Up @@ -239,7 +239,7 @@ export default class Editor implements EditorOptions {
* Set to 0 to disable undo/redo functionality.
* @public
*/
constructor(options: Partial<EditorOptions> = {}) {
constructor(options: EditorOptions = {}) {
assert(
'editor create accepts an options object. For legacy usage passing an element for the first argument, consider the `html` option for loading DOM or HTML posts. For other cases call `editor.render(domNode)` after editor creation',
options && !options.nodeType
Expand Down Expand Up @@ -1304,7 +1304,7 @@ export default class Editor implements EditorOptions {
}
}

triggerEvent(context: HTMLElement, eventName: EventType, event: EventForType<typeof eventName>) {
triggerEvent(context: HTMLElement, eventName: DOMEventType, event: DOMEventForType<typeof eventName>) {
this._eventManager._trigger(context, eventName, event)
}

Expand Down
15 changes: 8 additions & 7 deletions src/js/editor/event-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,17 @@ declare global {
}
}

export type EventType = typeof ELEMENT_EVENT_TYPES[number]
export type EventForType<T extends EventType> = HTMLElementEventMap[T]
export type DOMEventType = typeof ELEMENT_EVENT_TYPES[number]
export type DOMEventForType<T extends DOMEventType> = HTMLElementEventMap[T]
export type DOMEvent = HTMLElementEventMap[DOMEventType]

interface ModifierKeys {
shift: boolean
}

type EventManagerListener = [
HTMLElement,
EventType,
DOMEventType,
(event: CompositionEvent | KeyboardEvent | ClipboardEvent | DragEvent) => void
]

Expand Down Expand Up @@ -100,10 +101,10 @@ export default class EventManager {
this._textInputHandler = new TextInputHandler(this.editor)
}

_addListener(context: HTMLElement, type: EventType) {
_addListener(context: HTMLElement, type: DOMEventType) {
assert(`Missing listener for ${type}`, !!this[type])

let listener: (event: EventForType<typeof type>) => void = event => this._handleEvent(type, event)
let listener: (event: DOMEventForType<typeof type>) => void = event => this._handleEvent(type, event)
context.addEventListener(type, listener)
this._listeners.push([context, type, listener])
}
Expand All @@ -117,7 +118,7 @@ export default class EventManager {

// This is primarily useful for programmatically simulating events on the
// editor from the tests.
_trigger(context: HTMLElement, type: EventType, event: EventForType<typeof type>) {
_trigger(context: HTMLElement, type: DOMEventType, event: DOMEventForType<typeof type>) {
forEach(
filter(this._listeners, ([_context, _type]) => {
return _context === context && _type === type
Expand All @@ -134,7 +135,7 @@ export default class EventManager {
this._removeListeners()
}

_handleEvent(type: EventType, event: EventForType<typeof type>) {
_handleEvent(type: DOMEventType, event: DOMEventForType<typeof type>) {
let { target: element } = event
if (!this.started) {
// abort handling this event
Expand Down
11 changes: 6 additions & 5 deletions src/js/models/atom-node.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
import assert from '../utils/assert'
import Atom from './atom'
import assert from '../utils/assert'
import { JsonData, Dict, Maybe } from '../utils/types'

export interface AtomOptions {}
export type AtomOptions = Dict<unknown>

export type TeardownCallback = () => void
export interface AtomRenderOptions {
options: AtomOptions
env: any
value: unknown
payload: {}
payload: JsonData
}

export type AtomRenderHook = (options: AtomRenderOptions) => Element
export type AtomRenderHook = (options: AtomRenderOptions) => Maybe<Element>

export type AtomData = {
name: string
Expand All @@ -27,7 +28,7 @@ export default class AtomNode {
atomOptions: AtomOptions

_teardownCallback: TeardownCallback | null = null
_rendered: Node | null = null
_rendered: Maybe<Node>

constructor(editor: any, atom: AtomData, model: Atom, element: Element, atomOptions: AtomOptions) {
this.editor = editor
Expand Down
13 changes: 7 additions & 6 deletions src/js/models/card-node.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import assert from '../utils/assert'
import Card, { CardMode } from './card'
import assert from '../utils/assert'
import { Dict, Maybe } from '../utils/types'

export interface CardNodeOptions {}
export type CardNodeOptions = Dict<unknown>

export type CardRenderHook = (...args: any[]) => Element
export type CardRenderHook = (...args: any[]) => Maybe<Element>

type DidRenderCallback = null | (() => void)
type TeardownCallback = null | (() => void)
Expand All @@ -25,14 +26,14 @@ export default class CardNode {
card: CardData
section: Card
element: Element
options: CardNodeOptions
options?: CardNodeOptions

mode!: CardMode
_rendered: Element | null = null
_teardownCallback: TeardownCallback = null
_didRenderCallback: DidRenderCallback = null

constructor(editor: any, card: CardData, section: Card, element: Element, options: CardNodeOptions) {
constructor(editor: any, card: CardData, section: Card, element: Element, options?: CardNodeOptions) {
this.editor = editor
this.card = card
this.section = section
Expand Down Expand Up @@ -112,7 +113,7 @@ export default class CardNode {
this.editor.run((postEditor: any) => postEditor.removeSection(this.section))
}

_validateAndAppendRenderResult(rendered: Element | null) {
_validateAndAppendRenderResult(rendered: Maybe<Element>) {
if (!rendered) {
return
}
Expand Down
6 changes: 3 additions & 3 deletions src/js/renderers/editor-dom.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import { Attributable } from '../models/_attributable'
import { TagNameable } from '../models/_tag-nameable'
import ListSection from '../models/list-section'
import RenderNode from '../models/render-node'
import { Option, Maybe } from '../utils/types'
import { Option, Maybe, Dict } from '../utils/types'
import Atom from '../models/atom'
import Editor from '../editor/editor'
import { hasChildSections } from '../models/_has-child-sections'
Expand Down Expand Up @@ -306,15 +306,15 @@ class Visitor {
unknownCardHandler: CardRenderHook
unknownAtomHandler: AtomRenderHook

options: {}
options: Dict<unknown>

constructor(
editor: Editor,
cards: CardData[],
atoms: AtomData[],
unknownCardHandler: CardRenderHook,
unknownAtomHandler: AtomRenderHook,
options: {}
options: Dict<unknown>
) {
this.editor = editor
this.cards = validateCards(cards)
Expand Down
2 changes: 1 addition & 1 deletion src/js/utils/keycodes.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export default {
export default <const>{
BACKSPACE: 8,
SPACE: 32,
ENTER: 13,
Expand Down
4 changes: 4 additions & 0 deletions src/js/utils/object-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,7 @@ export function entries<T extends { [key: string]: unknown }, K extends Extract<

return resArray
}

export function keys<T extends { [key: string]: unknown }>(obj: T): (keyof T)[] {
return Object.keys(obj)
}
7 changes: 7 additions & 0 deletions src/js/utils/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,10 @@ export type Option<T> = T | null
export type Maybe<T> = T | null | undefined

export type Dict<T> = { [key: string]: T }

export type ValueOf<T> = T[keyof T]

export type JsonPrimitive = string | number | boolean | null
export type JsonArray = JsonData[]
export type JsonObject = { [key: string]: JsonData }
export type JsonData = JsonPrimitive | JsonArray | JsonObject
4 changes: 4 additions & 0 deletions tests/.eslintrc.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
module.exports = {
"globals": {
"$": "readonly"
},
"rules": {
"dot-location": "off",
"no-new": "off",
"no-use-before-define": "off",
"no-unused-vars": "off"
}

};
Loading

0 comments on commit 3170b48

Please sign in to comment.