2 hours ago
electron

electron v43.8.2

Release Notes for v43.8.2

2 hours ago
electron

electron v42.11.17

Release Notes for v42.11.17

[!WARNING] Electron 42.x.y has reached end-of-support as per the project's support policy. Developers and applications are encouraged to upgrade to a newer version of Electron.

2 hours ago
electron

electron v44.9.2

Release Notes for v44.9.2

2 hours ago
slate

slate-react@0.147.1

Patch Changes

  • #6340 ca37117 Thanks @dylans! - Report an element whose renderElement didn't render its children through editor.onDOMError when it mounts, naming the element's type and path. Before, nothing was reported, and lookups into the element returned null with no hint why.
4 hours ago
mobx

eslint-plugin-mobx@0.1.1

Patch Changes

4 hours ago
mobx

mobx@7.1.0

Minor Changes

  • 457ea8f952f0d37681dbe4033670eea7f25a7c4d #4728 Thanks @kubk! - computed(fn) without a set option now returns IComputedValue<T> with only get(), so calling .set() on it is a type error instead of a runtime throw. computed(fn, { set }) returns the new IWritableComputedValue<T>, which also has set().

Patch Changes

  • 129a01f8581d3b30d5722e7685a639541b7b929f #4743 Thanks @APX403! - Fix makeAutoObservable(this, overrides), observable(object, annotations) and extendObservable throwing "Invalid annotation" when the object has a member that also exists on Object.prototype, such as a toString() method. Only own keys of the overrides or annotations object are used as annotations now, as makeObservable already does.

  • 01e299b9f811de46df78ddcd6f044b396ba9bd09 #4738 Thanks @lavrton! - getAtom checks for observable objects first: it is faster on them and no longer subscribes the running derivation to the internal set/map marker keys.

  • 51c51658ce63895d40dc60a5e0eb0d5b7ac5ec2c #4723 Thanks @giaBaoJS! - Release the internal key subscriptions of observable objects once they are no longer observed. Reading a missing property or checking key in obj inside a reaction created an entry that was kept for the lifetime of the object, so objects used as dynamic dictionaries grew with every key ever looked up. ObservableMap already cleaned up its equivalent has entries.

  • ef270d16ff49e19ebd34fac5724efbaf5c4bb18d #4726 Thanks @sergioperezcheco! - Fix ObservableSet.delete (and therefore clear/replace) bypassing the enforceActions action diagnostics. Deleting observed values outside an action now warns/throws just like insertion already does, instead of silently allowing the mutation.

  • c71198629959cacbfa3582a72a43dc51294360cb #4741 Thanks @Om-singhaI! - toJS now includes fields declared with @observable accessor. These fields live on the prototype, so they are neither own nor enumerable properties, and toJS returned an object without them (often just {}). Computed values are still left out. Spread, Object.keys and JSON.stringify are unchanged.

4 hours ago
slate

slate-react@0.147.0

Minor Changes

  • #6338 6c4cab5 Thanks @dylans! - Add resolveDOMNode, resolveSlateNode, resolveSlatePoint and resolveSlateRange, which return null instead of throwing, like resolveDOMPoint and resolveDOMRange. Unlike suppressThrow: true, resolveSlatePoint and resolveSlateRange also return null before Editable mounts and for a selection with no range. The to lookups and suppressThrow are unchanged.
4 hours ago
slate

slate-dom@0.147.0

Minor Changes

  • #6338 6c4cab5 Thanks @dylans! - Add resolveDOMNode, resolveSlateNode, resolveSlatePoint and resolveSlateRange, which return null instead of throwing, like resolveDOMPoint and resolveDOMRange. Unlike suppressThrow: true, resolveSlatePoint and resolveSlateRange also return null before Editable mounts and for a selection with no range. The to lookups and suppressThrow are unchanged.
4 hours ago
astro

@astrojs/cloudflare@15.0.0-beta.3

Patch Changes

  • #18462 f170236 Thanks @ematipico! - Updates the @cloudflare/vite-plugin to the latest. The dependency isn't pinned anymore.
4 hours ago
officeParser

v8.2.0

v8.2.0: 🧩 Template Conditions, Loops & Formatting, Fonts in the Native PDF Engine

I am pleased to announce the release of officeParser v8.2.0! Word templates grow from fill-in fields into real documents: conditions, loops over paragraphs and table rows, and Word's own number and date formats. The native PDF engine now draws in fonts you give it, so any script converts, and writes a bookmark outline. PDF parsing can keep to the headings a document tags, Excel date and time cells read as the sheet shows them, and allowRemoteAssets: false makes sure a parse fetches nothing from a CDN.

Thanks to @MasaGon and @L4XB, whose reports and fixes drove this release.

A huge shoutout to Raymond Camden (@cfjedimaster), whose ideas shaped this release's template work: conditions, loops and Word's number and date formats grew out of his suggestions.

[!WARNING] Behavior changes

  • Excel date and time cells are text. A cell formatted as a date, a time or a duration reads as ISO text (2024-09-30, 14:05:00, 36:00:00), where it read as the number Excel stores (45565, 0.25, 1.5). If you converted serial numbers yourself, drop that step.
  • Templates read tags they left as typed before. {{ if paid }} and {{ for line in lines }} are now blocks, so one without its closing tag rejects with TEMPLATE_SYNTAX, and {{ name | upper }} or {{ total | format "0.00" }} is now filled. {{else}}, {{endif}} and {{endfor}} are block tags: a field with one of those names is no longer filled, and one with no block to belong to rejects. {{if}} and {{for}} alone, which were filled as fields named if and for, are now left as text. A block keyword spelt as other template languages spell it (elseif, elif, end if) rejects, naming the spelling to use. With custom delimiters made of letters or digits, a tag is the shortest stretch between a start and an end delimiter.
  • A template is held to decompressionLimits.maxXmlElements, as a parse is: a template whose elements, tags and the tokens in its tags together number more than that rejects with XML_ELEMENT_LIMIT_EXCEEDED.
  • A template field whose value is a list, an object or a function rejects with TEMPLATE_DATA_INVALID, where it was written as [object Object], its items joined by commas, or the function's source. Loop over a list, or name the field you want ({{ customer.name }}).
  • A Markdown table's header row is a header, and no longer bold. It is written as <th> in a <thead>, and in DOCX, ODT, RTF and LaTeX as a repeating header row without added bold, as a header row from HTML or Word already was. Bold an author typed in a header cell is kept. RTF now writes every header row with \trhdr and reads a \trhdr row as the header.
  • HTML output loads Chart.js only for a page that draws a chart. With no chart script to draw with (htmlConfig.chartJsSrc: '', or a parse under allowRemoteAssets: false), a chart is written as a table of its values, with a CONTENT_NOT_REPRESENTABLE warning.
  • The native PDF engine's CONTENT_NOT_REPRESENTABLE warnings carry details.reason, and the one for text that could not be drawn comes once, when the conversion ends, with a count and a sample. A chart raises it too.
  • An embed size or video id that is not one is not read. A Markdown or HTML width or height must be a CSS length, and a video id an id; a ::youtube directive with an id that is not one stays text.

🌟 Key Highlights

1. Template Conditions and Loops

OfficeTemplate.render now keeps or drops content with {{ if }} and repeats it with {{ for }}. Where the tags sit decides what they cover, so a template needs no special markup:

Where the tags are What repeats or is kept
In one paragraph The text between them
In paragraphs of their own The paragraphs between them (the tag paragraphs go too, leaving no blank line)
In different cells of one table Whole table rows
{{ for line in lines }}  {{ line.item }}  {{ line.qty }}  {{ line.price | format "$#,##0.00" }}  {{ endfor }}
{{ if total > 1000 }}Free shipping.{{ else }}Shipping: $15.{{ endif }}

Conditions compare and combine fields, numbers, strings, dates, true, false and null. Inside a loop, loop.index, loop.number, loop.first, loop.last and loop.length describe the pass. Each copy of a picture, bookmark, paragraph, content control, footnote or comment gets ids of its own, so the output opens in Word without repair, and a footnote in a loop reads that pass's item. Two new errors name the tag and the part when something does not fit: TEMPLATE_SYNTAX and TEMPLATE_DATA_INVALID. decompressionLimits.maxRepeatedContent bounds what loops can add.

2. Word's Number and Date Formats

{{ total | format "$#,##0.00" }}       ->  $1,250.50
{{ due | format "MMMM d, yyyy" }}      ->  November 1, 2026
{{ name | upper }}                     ->  ACME CORP

The pictures are Word's own (its \# and \@ switches), with sections for negative numbers and zero, percentages and quoted text. Formatting is done by officeParser, not the runtime's Intl, so a template renders the same in every Node version and browser. numberSeparators, dateNames and utcOffsetMinutes set what it writes, and formatters adds filters of your own.

3. Fonts and Outlines in the Native PDF Engine

pdfConfig.fonts and pdfConfig.fallbackFonts take .ttf/.otf files. Each character is drawn in the first font that has it, words are shaped (ligatures, Arabic joining, Indic conjuncts), and a right-to-left line is laid out from the right edge. A Greek, Hindi, Arabic or CJK document no longer converts to question marks. Fonts are subset to the glyphs used. Embedding needs the optional peer @pdf-lib/fontkit; without fonts nothing changes. pdfConfig.outline: true now writes a bookmark outline in the native engine too.

4. PDF Headings from Tags Only (#117)

pdfParserConfig.headingDetection: 'tags' gives only the headings a PDF's structure tree tags, and HeadingMetadata.levelSource says what decided each heading ('tags' or 'font-size').

5. Excel Dates and Times (#115)

A cell whose number format shows a date, a time or a duration reads as the sheet shows it, in ISO form, in 1900 and 1904 workbooks alike, as ODS cells already read. Contributed by @L4XB in #116.

6. No Request You Did Not Ask For

With allowRemoteAssets: false, a parse that would load the pdf.js worker or Tesseract's files from a CDN rejects with the new REMOTE_ASSET_BLOCKED error, naming the option to set. ocrConfig.cacheMethod controls Tesseract's language-data cache, and maxPasswordAttempts sets how often onPassword is asked.


🔧 Also Fixed

  • Markdown tables keep a line break alone in a cell, and quoted directive and attribute values (::youtube{id="..."}, {width="50%"}) lose their quotes.
  • OCR runs each image on a worker created with that parse's options, not one another parse created with other paths.
  • A config naming some ocrConfig options gets the defaults for the rest: one giving both language and workerPath was taken as complete, its other options left unset and unchecked.
  • An invalid headingDetection value is reported with INVALID_CONFIG_VALUE, and the default is used.
  • OfficeTemplate.render reports a misspelt option, and an onMissing value it does not take, using 'keep'.
  • A decompressionLimits value that is not a number of 0 or more is reported, and its default used: one such as NaN or 'x' used to turn its bound off without a word.
  • HTML under hundreds of nested wrappers is read in linear time.
  • The native PDF engine wraps header cells at their bold width, and draws em spaces, thin spaces and other spaces as spaces.

🛠 Getting Started

npm install officeparser@8.2.0

🔗 Full Changelog: View v8.2.0 details 🔗 Documentation & Visualizer: officeparser.harshankur.com