Skip to Content

@stesura/core/guards

Transaction guards: attr bounds, the view/review mode gate, nested-table and inline-image checks, and load-time healing.

Numeric attr bounds are enforced by one transaction modifier, guardTransactionModifier. Schema validate can’t do it: it can only throw, and only runs on fromJSON/createChecked, not on .create(), DOM parsing or AttrStep.apply. Per-command clamps would miss paste and import. Coverage by source:

  • Local transactions: the modifier runs in dispatch, before track changes, so the clamped steps are what collab sends.
  • Remote and history transactions: skipped. They were clamped at their origin, and rewriting a remote op breaks convergence.
  • Doc load: snapshots load verbatim. Dispatch createNormalizeTransaction(state) once after creating the state; it returns null for a clean doc.
  • parseDOM: its own normalizers use the same bounds.

Functions

applyInlineImageCorrections

Parameters:
NameTypeDefault
trTransaction
Returns:
void

applyNestedTableCorrections

Parameters:
NameTypeDefault
trTransaction
Returns:
void

clampAspectRatio

Parameters:
NameTypeDefault
valueunknown
Returns:
number | null

clampAttrValue

Parameters:
NameTypeDefault
nodeTypeNamestring
attrNamestring
valueunknown
allAttrsAttrsLike
Returns:
unknown

clampBorderSide

Parameters:
NameTypeDefault
sideunknown
Returns:
unknown

clampFontSize

Parameters:
NameTypeDefault
valueunknown
Returns:
number | null

clampImageDim

Parameters:
NameTypeDefault
valueunknown
Returns:
number | null

clampLineNumbers

Parameters:
NameTypeDefault
attrsLineNumbersAttrs
Returns:
LineNumbersAttrs

clampMarkAttrs

Parameters:
NameTypeDefault
markTypeNamestring
attrsAttrsLike
Returns:
AttrsLike

clampMarks

Parameters:
NameTypeDefault
marksreadonly Mark[]
Returns:
readonly Mark[]

clampNodeAttrs

Parameters:
NameTypeDefault
nodeTypeNamestring
attrsAttrsLike
Returns:
AttrsLike

clampStep

Parameters:
NameTypeDefault
stepStep
docBeforeNode
Returns:
Step | null

collectContextualCorrections

Parameters:
NameTypeDefault
docNode
schemaSchema<any, any>
rangesGuardRange[]
Returns:
AttrCorrection[]

commitStepsContainInlineSrc

Parameters:
NameTypeDefault
schemaSchema<any, any>
stepsJSONunknown[]
Returns:
boolean

createNormalizeTransaction

Parameters:
NameTypeDefault
stateEditorState
options{ removeInlineImages?: boolean; }
Returns:
Transaction | null

fragmentContainsInlineSrc

Parameters:
NameTypeDefault
fragmentFragment
Returns:
boolean

guardTransactionModifier

Parameters:
NameTypeDefault
stateEditorState
trTransaction
Returns:
Transaction

isBlockedByMode

Parameters:
NameTypeDefault
stateEditorState
trTransaction
Returns:
boolean

isForcedTrackChanges

Parameters:
NameTypeDefault
stateEditorState
trTransaction
Returns:
boolean

isInForbiddenTableAncestor

Parameters:
NameTypeDefault
$posResolvedPos
Returns:
boolean

maxMarginFor

Parameters:
NameTypeDefault
pageExtentnumber
oppositeMarginnumber
Returns:
number

nodeContainsTable

Parameters:
NameTypeDefault
nodeNode
Returns:
boolean

privilegedDispatch

Parameters:
NameTypeDefault
viewEditorView
Returns:
(tr: Transaction) => void

stepContainsInlineSrc

Parameters:
NameTypeDefault
stepStep
Returns:
boolean

Bounds

ConstantValueApplies to
ASPECT_RATIO_MIN / ASPECT_RATIO_MAX0.1 / 10Image aspect ratio
BORDER_SPACE_MIN / BORDER_SPACE_MAX0 / 31 ptBorder padding (Word’s maximum)
BORDER_WIDTH_MIN / BORDER_WIDTH_MAX0.5 / 6 pxBorder width
COLSPAN_MAX / ROWSPAN_MAX1000 / 65534Table cell spans (HTML’s own caps)
COLWIDTH_MIN25 pxTable column width
FONT_SIZE_MIN / FONT_SIZE_MAX1 / 144 ptFont size
IMAGE_DIM_MIN / IMAGE_DIM_MAX8 / 5000 pxImage width and height
MAX_ABS_LENGTH10000 pxAny length-like value (indents, margins, offsets)
NUMBERING_LEVEL_MIN / NUMBERING_LEVEL_MAX1 / 9List level (1-based; OOXML is 0-based)
PAGE_SIZE_MIN96 pxPage width and height
SPACING_MIN / SPACING_MAX0 / 600 pxParagraph space before/after
TAB_STOP_MIN / TAB_STOP_MAX0 / 480 pxNumbering tab stop

Types

AttrCorrection

NameTypeDefault
posnumber
attrstring
valueunknown

GuardRange

NameTypeDefault
fromnumber
tonumber
Last updated on