pfwr 0.11.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,12 +2,12 @@
2
2
 
3
3
  [![CI](https://github.com/nikku/pfwr/actions/workflows/CI.yml/badge.svg)](https://github.com/nikku/pfwr/actions/workflows/CI.yml)
4
4
 
5
- Turns your [Markdown file](https://github.com/nikku/pfwr/blob/main/README.md#example) into [a beautiful HTML slide deck](https://cdn.statically.io/gh/nikku/pfwr/v0.11.0/example/presentation.html). Batteries included.
5
+ Turns your [Markdown file](https://github.com/nikku/pfwr/blob/main/README.md#example) into [a beautiful HTML slide deck](https://cdn.statically.io/gh/nikku/pfwr/v0.13.0/example/presentation.html). Batteries included.
6
6
 
7
7
 
8
8
  ## Introduction
9
9
 
10
- [![Slide deck generated from Markdown via pfwr](https://raw.githubusercontent.com/nikku/pfwr/main/docs/screenshot.png)](https://cdn.statically.io/gh/nikku/pfwr/v0.11.0/example/presentation.html)
10
+ [![Slide deck generated from Markdown via pfwr](https://raw.githubusercontent.com/nikku/pfwr/main/docs/screenshot.png)](https://cdn.statically.io/gh/nikku/pfwr/v0.13.0/example/presentation.html)
11
11
 
12
12
 
13
13
  ## Usage
@@ -74,7 +74,7 @@ Convert the file to an HTML file:
74
74
  pfwr presentation.md presentation.html
75
75
  ```
76
76
 
77
- Open [the slide deck](https://cdn.statically.io/gh/nikku/pfwr/v0.11.0/example/presentation.html) in your favorite browser.
77
+ Open [the slide deck](https://cdn.statically.io/gh/nikku/pfwr/v0.13.0/example/presentation.html) in your favorite browser.
78
78
 
79
79
 
80
80
  ## Security Considerations
package/bin/cli.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { pfwr } from '../dist/index.js';
3
+ import { pfwr } from 'pfwr';
4
4
 
5
5
  import path from 'node:path';
6
6
  import fs from 'node:fs';
package/dist/index.js CHANGED
@@ -16067,8 +16067,7 @@ function color$1(d) {
16067
16067
  }
16068
16068
 
16069
16069
  /**
16070
- * @typedef {import('unist').Node} UnistNode
16071
- * @typedef {import('unist').Parent} UnistParent
16070
+ * @import {Node as UnistNode, Parent as UnistParent} from 'unist'
16072
16071
  */
16073
16072
 
16074
16073
 
@@ -16171,9 +16170,9 @@ function visitParents$1(tree, test, visitor, reverse) {
16171
16170
  typeof value.tagName === 'string'
16172
16171
  ? value.tagName
16173
16172
  : // `xast`
16174
- typeof value.name === 'string'
16175
- ? value.name
16176
- : undefined;
16173
+ typeof value.name === 'string'
16174
+ ? value.name
16175
+ : undefined;
16177
16176
 
16178
16177
  Object.defineProperty(visit, 'name', {
16179
16178
  value:
@@ -18343,7 +18342,7 @@ function visit$3(tree, testOrVisitor, visitorOrReverse, maybeReverse) {
18343
18342
 
18344
18343
  if (
18345
18344
  typeof testOrVisitor === 'function' &&
18346
- "undefined" !== 'function'
18345
+ typeof visitorOrReverse !== 'function'
18347
18346
  ) {
18348
18347
  test = undefined;
18349
18348
  visitor = testOrVisitor;
@@ -24693,7 +24692,7 @@ function visit$2(tree, testOrVisitor, visitorOrReverse, maybeReverse) {
24693
24692
 
24694
24693
  if (
24695
24694
  typeof testOrVisitor === 'function' &&
24696
- "undefined" !== 'function'
24695
+ typeof visitorOrReverse !== 'function'
24697
24696
  ) {
24698
24697
  test = undefined;
24699
24698
  visitor = testOrVisitor;
@@ -25134,8 +25133,13 @@ function toHast(tree, options) {
25134
25133
  return result
25135
25134
  }
25136
25135
 
25137
- // Include `data` fields in mdast and `raw` nodes in hast.
25138
- /// <reference types="mdast-util-to-hast" />
25136
+ /**
25137
+ * @import {Root as HastRoot} from 'hast'
25138
+ * @import {Root as MdastRoot} from 'mdast'
25139
+ * @import {Options as ToHastOptions} from 'mdast-util-to-hast'
25140
+ * @import {Processor} from 'unified'
25141
+ * @import {VFile} from 'vfile'
25142
+ */
25139
25143
 
25140
25144
 
25141
25145
  /**
@@ -25145,12 +25149,15 @@ function toHast(tree, options) {
25145
25149
  *
25146
25150
  * ###### Signature
25147
25151
  *
25148
- * * if a processor is given, runs the (rehype) plugins used on it with a
25149
- * hast tree, then discards the result (*bridge mode*)
25150
- * * otherwise, returns a hast tree, the plugins used after `remarkRehype`
25151
- * are rehype plugins (*mutate mode*)
25152
+ * * if a processor is given,
25153
+ * runs the (rehype) plugins used on it with a hast tree,
25154
+ * then discards the result (*bridge mode*)
25155
+ * * otherwise,
25156
+ * returns a hast tree,
25157
+ * the plugins used after `remarkRehype` are rehype plugins (*mutate mode*)
25152
25158
  *
25153
- * > 👉 **Note**: It’s highly unlikely that you want to pass a `processor`.
25159
+ * > 👉 **Note**:
25160
+ * > It’s highly unlikely that you want to pass a `processor`.
25154
25161
  *
25155
25162
  * ###### HTML
25156
25163
  *
@@ -25158,36 +25165,40 @@ function toHast(tree, options) {
25158
25165
  * as semistandard `raw` nodes.
25159
25166
  * Most plugins ignore `raw` nodes but two notable ones don’t:
25160
25167
  *
25161
- * * `rehype-stringify` also has an option `allowDangerousHtml` which will
25162
- * output the raw HTML.
25163
- * This is typically discouraged as noted by the option name but is useful if
25164
- * you completely trust authors
25165
- * * `rehype-raw` can handle the raw embedded HTML strings by parsing them
25166
- * into standard hast nodes (`element`, `text`, etc).
25167
- * This is a heavy task as it needs a full HTML parser, but it is the only way
25168
- * to support untrusted content
25168
+ * * `rehype-stringify` also has an option `allowDangerousHtml` which will
25169
+ * output the raw HTML.
25170
+ * This is typically discouraged as noted by the option name but is useful if
25171
+ * you completely trust authors
25172
+ * * `rehype-raw` can handle the raw embedded HTML strings by parsing them
25173
+ * into standard hast nodes (`element`, `text`, etc);
25174
+ * this is a heavy task as it needs a full HTML parser,
25175
+ * but it is the only way to support untrusted content
25169
25176
  *
25170
25177
  * ###### Footnotes
25171
25178
  *
25172
25179
  * Many options supported here relate to footnotes.
25173
- * Footnotes are not specified by CommonMark, which we follow by default.
25174
- * They are supported by GitHub, so footnotes can be enabled in markdown with
25175
- * `remark-gfm`.
25180
+ * Footnotes are not specified by CommonMark,
25181
+ * which we follow by default.
25182
+ * They are supported by GitHub,
25183
+ * so footnotes can be enabled in markdown with `remark-gfm`.
25176
25184
  *
25177
25185
  * The options `footnoteBackLabel` and `footnoteLabel` define natural language
25178
- * that explains footnotes, which is hidden for sighted users but shown to
25179
- * assistive technology.
25180
- * When your page is not in English, you must define translated values.
25186
+ * that explains footnotes,
25187
+ * which is hidden for sighted users but shown to assistive technology.
25188
+ * When your page is not in English,
25189
+ * you must define translated values.
25181
25190
  *
25182
- * Back references use ARIA attributes, but the section label itself uses a
25183
- * heading that is hidden with an `sr-only` class.
25184
- * To show it to sighted users, define different attributes in
25185
- * `footnoteLabelProperties`.
25191
+ * Back references use ARIA attributes,
25192
+ * but the section label itself uses a heading that is hidden with an
25193
+ * `sr-only` class.
25194
+ * To show it to sighted users,
25195
+ * define different attributes in `footnoteLabelProperties`.
25186
25196
  *
25187
25197
  * ###### Clobbering
25188
25198
  *
25189
- * Footnotes introduces a problem, as it links footnote calls to footnote
25190
- * definitions on the page through `id` attributes generated from user content,
25199
+ * Footnotes introduces a problem,
25200
+ * as it links footnote calls to footnote definitions on the page through `id`
25201
+ * attributes generated from user content,
25191
25202
  * which results in DOM clobbering.
25192
25203
  *
25193
25204
  * DOM clobbering is this:
@@ -25209,11 +25220,13 @@ function toHast(tree, options) {
25209
25220
  * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.
25210
25221
  * The default behavior for unknown nodes is:
25211
25222
  *
25212
- * * when the node has a `value` (and doesn’t have `data.hName`,
25213
- * `data.hProperties`, or `data.hChildren`, see later), create a hast `text`
25214
- * node
25215
- * * otherwise, create a `<div>` element (which could be changed with
25216
- * `data.hName`), with its children mapped from mdast to hast as well
25223
+ * * when the node has a `value`
25224
+ * (and doesn’t have `data.hName`, `data.hProperties`, or `data.hChildren`,
25225
+ * see later),
25226
+ * create a hast `text` node
25227
+ * * otherwise,
25228
+ * create a `<div>` element (which could be changed with `data.hName`),
25229
+ * with its children mapped from mdast to hast as well
25217
25230
  *
25218
25231
  * This behavior can be changed by passing an `unknownHandler`.
25219
25232
  *
@@ -25226,10 +25239,16 @@ function toHast(tree, options) {
25226
25239
  * @param {Readonly<Options> | null | undefined} [options]
25227
25240
  * @returns {TransformMutate}
25228
25241
  *
25242
+ * @overload
25243
+ * @param {Readonly<Options> | Processor | null | undefined} [destination]
25244
+ * @param {Readonly<Options> | null | undefined} [options]
25245
+ * @returns {TransformBridge | TransformMutate}
25246
+ *
25229
25247
  * @param {Readonly<Options> | Processor | null | undefined} [destination]
25230
25248
  * Processor or configuration (optional).
25231
25249
  * @param {Readonly<Options> | null | undefined} [options]
25232
- * When a processor was given, configuration (optional).
25250
+ * When a processor was given,
25251
+ * configuration (optional).
25233
25252
  * @returns {TransformBridge | TransformMutate}
25234
25253
  * Transform.
25235
25254
  */
@@ -25847,11 +25866,11 @@ var hasRequiredDist;
25847
25866
  function requireDist () {
25848
25867
  if (hasRequiredDist) return dist.exports;
25849
25868
  hasRequiredDist = 1;
25850
- (function (module, exports) {
25869
+ (function (module, exports$1) {
25851
25870
  /// <reference lib="es2018"/>
25852
25871
  /// <reference lib="dom"/>
25853
25872
  /// <reference types="node"/>
25854
- Object.defineProperty(exports, "__esModule", { value: true });
25873
+ Object.defineProperty(exports$1, "__esModule", { value: true });
25855
25874
  const typedArrayTypeNames = [
25856
25875
  'Int8Array',
25857
25876
  'Uint8Array',
@@ -26151,7 +26170,7 @@ function requireDist () {
26151
26170
  throw new TypeError(`Expected value which is \`${description}\`, ${valuesMessage}.`);
26152
26171
  }
26153
26172
  };
26154
- exports.assert = {
26173
+ exports$1.assert = {
26155
26174
  // Unknowns.
26156
26175
  undefined: (value) => assertType(is.undefined(value), 'undefined', value),
26157
26176
  string: (value) => assertType(is.string(value), 'string', value),
@@ -26264,22 +26283,22 @@ function requireDist () {
26264
26283
  value: is.null_
26265
26284
  }
26266
26285
  });
26267
- Object.defineProperties(exports.assert, {
26286
+ Object.defineProperties(exports$1.assert, {
26268
26287
  class: {
26269
- value: exports.assert.class_
26288
+ value: exports$1.assert.class_
26270
26289
  },
26271
26290
  function: {
26272
- value: exports.assert.function_
26291
+ value: exports$1.assert.function_
26273
26292
  },
26274
26293
  null: {
26275
- value: exports.assert.null_
26294
+ value: exports$1.assert.null_
26276
26295
  }
26277
26296
  });
26278
- exports.default = is;
26297
+ exports$1.default = is;
26279
26298
  // For CommonJS default export support
26280
26299
  module.exports = is;
26281
26300
  module.exports.default = is;
26282
- module.exports.assert = exports.assert;
26301
+ module.exports.assert = exports$1.assert;
26283
26302
  } (dist, dist.exports));
26284
26303
  return dist.exports;
26285
26304
  }
@@ -47412,7 +47431,7 @@ const emoticon = [
47412
47431
  ];
47413
47432
 
47414
47433
  const RE_EMOJI = /:\+1:|:-1:|:[\w-]+:/g;
47415
- const RE_SHORT = /[$@|*'",;.=:\-)([\]\\/<>038BOopPsSdDxXzZ]{2,5}/g;
47434
+ const RE_SHORT = /(^|\s)[@$|*'",;.=:\-)([\]\\/<>038BOopPsSdDxXzZ]{2,5}/g;
47416
47435
  const RE_PUNCT = /(?:_|-(?!1))/g;
47417
47436
  const DEFAULT_SETTINGS = {
47418
47437
  padSpaceAfter: false,
@@ -47443,14 +47462,17 @@ const plugin = options => {
47443
47462
  function replaceEmoticon(match) {
47444
47463
  // find emoji by shortcode - full match or with-out last char as it could be from text e.g. :-),
47445
47464
  const iconFull = emoticon.find(e => e.emoticons.includes(match)); // full match
47446
- const iconPart = emoticon.find(e => e.emoticons.includes(match.slice(0, -1))); // second search pattern
47447
- const icon = iconFull || iconPart;
47465
+ const iconPartStart = emoticon.find(e => e.emoticons.includes(match.slice(0, -1))); // second search pattern
47466
+ const iconPartEnd = emoticon.find(e => e.emoticons.includes(match.slice(1)));
47467
+ const iconPart = emoticon.find(e => e.emoticons.includes(match.slice(1, -1)));
47468
+ const icon = iconFull || iconPartStart || iconPartEnd || iconPart;
47448
47469
  if (!icon) {
47449
47470
  return false;
47450
47471
  }
47451
- const trimmedChar = !iconFull && iconPart ? match.slice(-1) : '';
47472
+ const trimmedChar = !(iconFull || iconPartEnd) && (iconPart || iconPartStart) ? match.slice(-1) : '';
47473
+ const startTrimmedChar = !(iconFull || iconPartStart) && (iconPart || iconPartEnd) ? match.slice(0, 1) : '';
47452
47474
  const addPad = pad ? ' ' : '';
47453
- const replaced = icon.emoji + addPad + trimmedChar;
47475
+ const replaced = startTrimmedChar + icon.emoji + addPad + trimmedChar;
47454
47476
  if (accessible) {
47455
47477
  return aria(replaced, icon.name + ' emoticon');
47456
47478
  }
@@ -61257,7 +61279,7 @@ function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {
61257
61279
 
61258
61280
  if (
61259
61281
  typeof testOrVisitor === 'function' &&
61260
- "undefined" !== 'function'
61282
+ typeof visitorOrReverse !== 'function'
61261
61283
  ) {
61262
61284
  test = undefined;
61263
61285
  visitor = testOrVisitor;
@@ -67052,27 +67074,27 @@ var hasRequiredUtils;
67052
67074
  function requireUtils () {
67053
67075
  if (hasRequiredUtils) return utils;
67054
67076
  hasRequiredUtils = 1;
67055
- (function (exports) {
67056
- Object.defineProperty(exports, "__esModule", { value: true });
67077
+ (function (exports$1) {
67078
+ Object.defineProperty(exports$1, "__esModule", { value: true });
67057
67079
  function isIdentStart(c) {
67058
67080
  return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c === '-') || (c === '_');
67059
67081
  }
67060
- exports.isIdentStart = isIdentStart;
67082
+ exports$1.isIdentStart = isIdentStart;
67061
67083
  function isIdent(c) {
67062
67084
  return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c === '-' || c === '_';
67063
67085
  }
67064
- exports.isIdent = isIdent;
67086
+ exports$1.isIdent = isIdent;
67065
67087
  function isHex(c) {
67066
67088
  return (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') || (c >= '0' && c <= '9');
67067
67089
  }
67068
- exports.isHex = isHex;
67090
+ exports$1.isHex = isHex;
67069
67091
  function escapeIdentifier(s) {
67070
67092
  var len = s.length;
67071
67093
  var result = '';
67072
67094
  var i = 0;
67073
67095
  while (i < len) {
67074
67096
  var chr = s.charAt(i);
67075
- if (exports.identSpecialChars[chr]) {
67097
+ if (exports$1.identSpecialChars[chr]) {
67076
67098
  result += '\\' + chr;
67077
67099
  }
67078
67100
  else {
@@ -67098,7 +67120,7 @@ function requireUtils () {
67098
67120
  }
67099
67121
  return result;
67100
67122
  }
67101
- exports.escapeIdentifier = escapeIdentifier;
67123
+ exports$1.escapeIdentifier = escapeIdentifier;
67102
67124
  function escapeStr(s) {
67103
67125
  var len = s.length;
67104
67126
  var result = '';
@@ -67112,7 +67134,7 @@ function requireUtils () {
67112
67134
  else if (chr === '\\') {
67113
67135
  chr = '\\\\';
67114
67136
  }
67115
- else if ((replacement = exports.strReplacementsRev[chr]) !== undefined) {
67137
+ else if ((replacement = exports$1.strReplacementsRev[chr]) !== undefined) {
67116
67138
  chr = replacement;
67117
67139
  }
67118
67140
  result += chr;
@@ -67120,8 +67142,8 @@ function requireUtils () {
67120
67142
  }
67121
67143
  return "\"" + result + "\"";
67122
67144
  }
67123
- exports.escapeStr = escapeStr;
67124
- exports.identSpecialChars = {
67145
+ exports$1.escapeStr = escapeStr;
67146
+ exports$1.identSpecialChars = {
67125
67147
  '!': true,
67126
67148
  '"': true,
67127
67149
  '#': true,
@@ -67152,14 +67174,14 @@ function requireUtils () {
67152
67174
  '}': true,
67153
67175
  '~': true
67154
67176
  };
67155
- exports.strReplacementsRev = {
67177
+ exports$1.strReplacementsRev = {
67156
67178
  '\n': '\\n',
67157
67179
  '\r': '\\r',
67158
67180
  '\t': '\\t',
67159
67181
  '\f': '\\f',
67160
67182
  '\v': '\\v'
67161
67183
  };
67162
- exports.singleQuoteEscapeChars = {
67184
+ exports$1.singleQuoteEscapeChars = {
67163
67185
  n: '\n',
67164
67186
  r: '\r',
67165
67187
  t: '\t',
@@ -67167,7 +67189,7 @@ function requireUtils () {
67167
67189
  '\\': '\\',
67168
67190
  '\'': '\''
67169
67191
  };
67170
- exports.doubleQuotesEscapeChars = {
67192
+ exports$1.doubleQuotesEscapeChars = {
67171
67193
  n: '\n',
67172
67194
  r: '\r',
67173
67195
  t: '\t',
@@ -67952,14 +67974,14 @@ var hasRequiredLib;
67952
67974
  function requireLib () {
67953
67975
  if (hasRequiredLib) return lib;
67954
67976
  hasRequiredLib = 1;
67955
- (function (exports) {
67956
- Object.defineProperty(exports, "__esModule", { value: true });
67957
- exports.sequence = exports.generate = exports.compile = exports.parse = void 0;
67977
+ (function (exports$1) {
67978
+ Object.defineProperty(exports$1, "__esModule", { value: true });
67979
+ exports$1.sequence = exports$1.generate = exports$1.compile = exports$1.parse = void 0;
67958
67980
  var parse_js_1 = /*@__PURE__*/ requireParse$1();
67959
- Object.defineProperty(exports, "parse", { enumerable: true, get: function () { return parse_js_1.parse; } });
67981
+ Object.defineProperty(exports$1, "parse", { enumerable: true, get: function () { return parse_js_1.parse; } });
67960
67982
  var compile_js_1 = /*@__PURE__*/ requireCompile();
67961
- Object.defineProperty(exports, "compile", { enumerable: true, get: function () { return compile_js_1.compile; } });
67962
- Object.defineProperty(exports, "generate", { enumerable: true, get: function () { return compile_js_1.generate; } });
67983
+ Object.defineProperty(exports$1, "compile", { enumerable: true, get: function () { return compile_js_1.compile; } });
67984
+ Object.defineProperty(exports$1, "generate", { enumerable: true, get: function () { return compile_js_1.generate; } });
67963
67985
  /**
67964
67986
  * Parses and compiles a formula to a highly optimized function.
67965
67987
  * Combination of {@link parse} and {@link compile}.
@@ -67986,7 +68008,7 @@ function requireLib () {
67986
68008
  function nthCheck(formula) {
67987
68009
  return (0, compile_js_1.compile)((0, parse_js_1.parse)(formula));
67988
68010
  }
67989
- exports.default = nthCheck;
68011
+ exports$1.default = nthCheck;
67990
68012
  /**
67991
68013
  * Parses and compiles a formula to a generator that produces a sequence of indices.
67992
68014
  * Combination of {@link parse} and {@link generate}.
@@ -68020,7 +68042,7 @@ function requireLib () {
68020
68042
  function sequence(formula) {
68021
68043
  return (0, compile_js_1.generate)((0, parse_js_1.parse)(formula));
68022
68044
  }
68023
- exports.sequence = sequence;
68045
+ exports$1.sequence = sequence;
68024
68046
 
68025
68047
  } (lib));
68026
68048
  return lib;
@@ -68439,7 +68461,7 @@ function transform$1(tree) {
68439
68461
 
68440
68462
  }
68441
68463
 
68442
- /*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */
68464
+ /*! js-yaml 4.1.1 https://github.com/nodeca/js-yaml @license MIT */
68443
68465
  function isNothing(subject) {
68444
68466
  return (typeof subject === 'undefined') || (subject === null);
68445
68467
  }
@@ -69650,6 +69672,22 @@ function charFromCodepoint(c) {
69650
69672
  );
69651
69673
  }
69652
69674
 
69675
+ // set a property of a literal object, while protecting against prototype pollution,
69676
+ // see https://github.com/nodeca/js-yaml/issues/164 for more details
69677
+ function setProperty(object, key, value) {
69678
+ // used for this specific key only because Object.defineProperty is slow
69679
+ if (key === '__proto__') {
69680
+ Object.defineProperty(object, key, {
69681
+ configurable: true,
69682
+ enumerable: true,
69683
+ writable: true,
69684
+ value: value
69685
+ });
69686
+ } else {
69687
+ object[key] = value;
69688
+ }
69689
+ }
69690
+
69653
69691
  var simpleEscapeCheck = new Array(256); // integer, for fast access
69654
69692
  var simpleEscapeMap = new Array(256);
69655
69693
  for (var i = 0; i < 256; i++) {
@@ -69828,7 +69866,7 @@ function mergeMappings(state, destination, source, overridableKeys) {
69828
69866
  key = sourceKeys[index];
69829
69867
 
69830
69868
  if (!_hasOwnProperty$1.call(destination, key)) {
69831
- destination[key] = source[key];
69869
+ setProperty(destination, key, source[key]);
69832
69870
  overridableKeys[key] = true;
69833
69871
  }
69834
69872
  }
@@ -69888,17 +69926,7 @@ function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valu
69888
69926
  throwError(state, 'duplicated mapping key');
69889
69927
  }
69890
69928
 
69891
- // used for this specific key only because Object.defineProperty is slow
69892
- if (keyNode === '__proto__') {
69893
- Object.defineProperty(_result, keyNode, {
69894
- configurable: true,
69895
- enumerable: true,
69896
- writable: true,
69897
- value: valueNode
69898
- });
69899
- } else {
69900
- _result[keyNode] = valueNode;
69901
- }
69929
+ setProperty(_result, keyNode, valueNode);
69902
69930
  delete overridableKeys[keyNode];
69903
69931
  }
69904
69932
 
@@ -72372,7 +72400,7 @@ function tagSlide(node) {
72372
72400
 
72373
72401
  var pfwrStyle = "html,\nbody {\n margin: 0;\n padding: 0;\n height: 100%;\n box-sizing: border-box;\n}\n\n:root {\n\n --font-size-h1: 3em;\n --font-size-h2: 1.8em;\n --font-size-h3: 1.4em;\n --font-size-h4: 1.1em;\n --font-size-default: 3.5em;\n --font-size-small: .4em;\n --font-size-smaller: .7em;\n\n --font-size-default-print: 2.5em;\n\n --slide-margin: 2rem;\n\n --font-family-body: 'Montserrat', sans-serif;\n --font-family-heading: 'Roboto Slab', serif;\n --font-family-code: 'Roboto Mono', monospace;\n\n --list-margin: .5em;\n\n --color-navy: #001F3F;\n --color-blue: #0074D9;\n --color-aqua: #7FDBFF;\n --color-teal: #39CCCC;\n --color-olive: #3D9970;\n --color-green: #2ECC40;\n --color-lime: #01FF70;\n --color-yellow: #FFDC00;\n --color-orange: #FF851B;\n --color-red: #FF4136;\n --color-fuchsia: #F012BE;\n --color-purple: #B10DC9;\n --color-maroon: #85144B;\n --color-white: #FFFFFF;\n --color-gray-7: #FCFCFC;\n --color-gray-6: #F0F0F0;\n --color-gray-5: #DDDDDD;\n --color-gray-4: #AAAAAA;\n --color-gray-3: #888;\n --color-gray-2: #666;\n --color-gray-1: #333;\n --color-black: #111;\n\n --color-default: var(--color-gray-1);\n --color-bg: var(--color-white);\n\n --color-highlight: var(--color-gray-7);\n --color-highlight-bg: var(--color-fuchsia);\n\n --color-slide-number: var(--color-gray-3);\n\n --color-code-bg: #cfcaca59;\n --color-code: var(--color-gray-7);\n\n --color-link: var(--color-blue);\n\n --color-table-head: var(--color-gray-7);\n --color-table-head-bg: var(--color-orange);\n --color-table: var(--color-default);\n --color-table-bg: var(--color-gray-6);\n --color-table-border: var(--color-gray-5);\n}\n\n.slide[data-theme='funky'] {\n\n --color-default: var(--color-gray-7);\n --color-bg: var(--color-fuchsia);\n\n --color-slide-number: var(--color-gray-5);\n\n --color-code: var(--color-gray-7);\n --color-code-bg: #cfcaca59;\n\n --color-highlight: var(--color-gray-7);\n --color-highlight-bg: var(--color-orange);\n\n --color-link: var(--color-gray-7);\n\n --color-table-head: var(--color-gray-1);\n --color-table-head-bg: var(--color-yellow);\n --color-table-bg: var(--color-gray-7);\n --color-table-border: var(--color-gray-4);\n}\n\n.slide[data-theme='eco'] {\n\n --color-default: var(--color-gray-7);\n --color-bg: var(--color-olive);\n\n --color-slide-number: var(--color-gray-5);\n\n --color-code: var(--color-gray-7);\n --color-code-bg: #cfcaca59;\n\n --color-highlight: var(--color-gray-6);\n --color-highlight-bg: var(--color-red);\n\n --color-link: var(--color-gray-7);\n\n --color-table-head: var(--color-gray-7);\n --color-table-head-bg: var(--color-orange);\n --color-table-bg: var(--color-gray-7);\n --color-table-border: var(--color-gray-4);\n}\n\ncode:not([class*=\"language-\"]) {\n padding: .2em .4em;\n margin: 0;\n font-size: 85%;\n border-radius: .1em;\n\n background-color: var(--color-code-bg);\n font-family: var(--font-family-code);\n}\n\nh1, h2, h3, h4 {\n font-family: var(--font-family-heading);\n\n margin: 1rem;\n}\n\nh1 {\n font-size: var(--font-size-h1);\n}\n\nh2 {\n font-size: var(--font-size-h2);\n}\n\nh3 {\n font-size: var(--font-size-h3);\n}\n\nh4 {\n font-size: var(--font-size-h4);\n}\n\nli + li {\n margin-top: var(--list-margin);\n}\n\na {\n color: var(--color-link);\n}\n\nsmall {\n font-size: var(--font-size-smaller);\n}\n\nem {\n background: var(--color-highlight-bg);\n font-style: normal;\n color: var(--color-highlight);\n}\n\ntable, pre {\n width: fit-content;\n min-width: 50%;\n}\n\n.slide-container {\n font-family: var(--font-family-body);\n font-size: var(--font-size-default);\n}\n\n.slide > *,\n.slide > pre[class*=\"language-\"] {\n margin: 0 var(--slide-margin);\n}\n\n.slide > ul,\n.slide > ol {\n margin: 0 calc(var(--slide-margin) * 2);\n}\n\n.slide > * + *,\n.slide > * + pre[class*=\"language-\"],\n.slide > * + ul,\n.slide > * + ol {\n margin-top: calc(var(--slide-margin) * 1.5);\n}\n\n.slide-container {\n width: 100vw;\n height: 100vh;\n}\n\n.slide {\n position: relative;\n\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: flex-start;\n\n background: var(--color-bg);\n color: var(--color-default);\n}\n\n.slide[data-align='center'] {\n align-items: center;\n text-align: center;\n}\n\n.slide[data-align='left'] {\n align-items: flex-start;\n}\n\n.slide[data-align='right'] {\n align-items: flex-end;\n}\n\ntable {\n border-radius: 1rem;\n overflow: hidden;\n border-collapse: collapse;\n\n color: var(--color-table);\n background: var(--color-table-bg);\n\n font-size: .7em;\n}\n\nthead {\n color: var(--color-table-head);\n background: var(--color-table-head-bg);\n}\n\ntbody tr + tr {\n border-top: solid 1px var(--color-table-border);\n}\n\ntable td,\ntable th {\n padding: .7em .8em;\n}\n\ntable th:first-child,\ntable td:first-child {\n padding-left: 1.5em;\n}\n\ntable th:last-child,\ntable td:last-child {\n padding-right: 1.5em;\n}\n\n.slide-number {\n position: absolute;\n bottom: calc(var(--slide-margin) / 2);\n right: calc(var(--slide-margin) / 2);\n color: var(--color-slide-number);\n font-size: var(--font-size-small);\n margin: 0;\n}\n\nimg.emoji {\n height: 1em;\n width: 1em;\n margin: 0 .05em 0 .1em;\n vertical-align: -0.1em;\n}\n\nimg {\n object-fit: contain;\n}\n\n.slide > img:not(.emoji) {\n max-width: calc(100% - var(--slide-margin));\n max-height: calc(100% - var(--slide-margin));\n}\n\n.slide p > img:not(.emoji) {\n max-width: 100%;\n max-height: 100%;\n}\n\n.slide > pre[class*=\"language-\"] {\n font-size: .5em;\n}\n\n.slide-navigation {\n position: fixed;\n top: 20px;\n right: 20px;\n}\n\n.slide-navigation:not(.shown) {\n display: none;\n}\n\n.slide-navigation a {\n text-decoration: none;\n display: inline-block;\n margin: .05em;\n padding: .2em;\n\n background: var(--color-gray-5);\n color: var(--color-gray-1);\n opacity: .4;\n border-radius: .1em;\n}\n\n.slide-navigation a svg {\n display: block;\n}\n\n.slide-navigation a:hover {\n opacity: 1;\n}\n\n@media print {\n\n .slide-navigation {\n display: none;\n }\n\n .slide-container {\n font-size: var(--font-size-default-print);\n }\n\n .slide {\n page-break-after: always;\n }\n}\n\n@media screen {\n .slide-container {\n overflow: hidden;\n }\n\n .slide {\n position: absolute;\n transform: translate(-100%, -100%);\n }\n\n .slide.current {\n top: 0;\n left: 0;\n transform: translate(0, 0);\n }\n}";
72374
72402
 
72375
- var pfwrScript = "function addPage(index, slide) {\n\n if (!index) {\n return;\n }\n\n const el = document.createElement('div');\n el.classList.add('slide-number');\n el.textContent = index + 1;\n\n slide.appendChild(el);\n}\n\nfunction addNavigationControls(container, goto) {\n\n const html = `<nav class=\"slide-navigation shown\">\n <a class=\"navigation-button\" data-navigate=\"first\" title=\"First slide\" href>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M12 16.5a4.5 4.5 0 100-9 4.5 4.5 0 000 9zm0 1.5a6 6 0 100-12 6 6 0 000 12z\"></path></svg>\n </a>\n <a class=\"navigation-button\" data-navigate=\"previous\" title=\"Previous slide (Left Arrow)\" href>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\"><path d=\"M8.854 11.646l5.792-5.792a.5.5 0 01.854.353v11.586a.5.5 0 01-.854.353l-5.792-5.792a.5.5 0 010-.708z\"></path></svg>\n </a>\n <a class=\"navigation-button\" data-navigate=\"next\" title=\"Next slide (Enter/Spacebar/Right Arrow)\" href>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\"><path d=\"M15.146 12.354l-5.792 5.792a.5.5 0 01-.854-.353V6.207a.5.5 0 01.854-.353l5.792 5.792a.5.5 0 010 .708z\"></path></svg>\n </a>\n <a class=\"navigation-button\" data-navigate=\"last\" title=\"Last slide\" href>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\"><path d=\"M12 18a6 6 0 100-12 6 6 0 000 12z\"></path></svg>\n </a>\n </nav>`;\n\n const tmp = document.createElement('div');\n\n tmp.innerHTML = html;\n\n const nav = tmp.removeChild(tmp.lastChild);\n\n nav.addEventListener('mouseenter', function(event) {\n nav.classList.add('hovered');\n });\n\n nav.addEventListener('mouseleave', function(event) {\n nav.classList.remove('hovered');\n });\n\n nav.addEventListener('click', function(event) {\n\n event.preventDefault();\n\n let target = event.target;\n\n while (!target.matches('[data-navigate]')) {\n target = target.parentNode;\n }\n\n if (!target) {\n return;\n }\n\n goto(target.dataset.navigate);\n });\n\n container.appendChild(nav);\n\n return nav;\n}\n\n// eslint-disable-next-line no-unused-vars\nfunction pfwr(options) {\n\n const {\n container\n } = options;\n\n // slide numbers\n const slides = Array.from(container.querySelectorAll('.slide'));\n\n for (const idx in slides) {\n addPage(+idx, slides[+idx]);\n }\n\n // mouse navigation controls\n const nav = addNavigationControls(container, goto);\n\n // event listeners ////////////////////////\n\n const listeners = [];\n\n function on(event, fn) {\n listeners.push([ event, fn ]);\n }\n\n function emit(event, data) {\n\n for (const [ eventType, fn ] of listeners) {\n if (event === eventType) {\n fn(data);\n }\n }\n }\n\n // slide life cycle ////////////////\n\n let slideIndex = -1;\n\n function goto(next) {\n\n const slide = slides[slideIndex] || slides.find(s => s.dataset.name === slideIndex);\n\n const nextIndex = ((next, currentIndex, numberOfSlides) => {\n\n if (next === 'next') {\n return currentIndex + 1;\n }\n\n if (next === 'previous') {\n return currentIndex - 1;\n }\n\n if (next === 'first') {\n return 0;\n }\n\n if (next === 'last') {\n return numberOfSlides - 1;\n }\n\n if (next < 0) {\n return numberOfSlides + next;\n }\n\n return next;\n })(next, slides.indexOf(slide), slides.length);\n\n if (slideIndex === nextIndex) {\n return;\n }\n\n const nextSlide = slides[nextIndex] || slides.find(s => s.dataset.name === nextIndex);\n\n if (!nextSlide) {\n return;\n }\n\n slide && slide.classList.remove('current');\n nextSlide.classList.add('current');\n\n slideIndex = nextIndex;\n\n emit('slideChanged', {\n slideIndex\n });\n }\n\n // slide navigation\n\n function showNav() {\n nav && nav.classList.toggle('shown', true);\n }\n\n function hideNav() {\n nav && !nav.matches('.hovered') && nav.classList.toggle('shown', false);\n }\n\n let hideTimer;\n\n container.addEventListener('mousemove', function() {\n\n showNav();\n\n clearTimeout(hideTimer);\n\n hideTimer = setTimeout(hideNav, 2000);\n });\n\n\n function handleKey(event) {\n\n const key = event.key;\n\n if (event.altKey || event.metaKey || event.ctrlKey) {\n return;\n }\n\n if (key === 'Home') {\n hideNav();\n goto('first');\n\n return false;\n }\n\n if (key === 'End') {\n hideNav();\n goto('last');\n\n return false;\n }\n\n if (key === 'ArrowRight' || key === 'Enter' || key === ' ') {\n hideNav();\n goto('next');\n\n return false;\n }\n\n if (key === 'ArrowLeft') {\n hideNav();\n goto('previous');\n\n return false;\n }\n }\n\n function destroy() {\n document.removeEventListener('keydown', handleKey);\n }\n\n document.addEventListener('keydown', handleKey);\n\n return {\n on,\n goto,\n destroy\n };\n}";
72403
+ var pfwrScript = "function addPage(index, slide) {\n\n if (!index) {\n return;\n }\n\n const el = document.createElement('div');\n el.classList.add('slide-number');\n el.textContent = index + 1;\n\n slide.appendChild(el);\n}\n\nfunction addNavigationControls(container, goto) {\n\n const html = `<nav class=\"slide-navigation shown\">\n <a class=\"navigation-button\" data-navigate=\"first\" title=\"First slide\" href>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M12 16.5a4.5 4.5 0 100-9 4.5 4.5 0 000 9zm0 1.5a6 6 0 100-12 6 6 0 000 12z\"></path></svg>\n </a>\n <a class=\"navigation-button\" data-navigate=\"previous\" title=\"Previous slide (Left Arrow)\" href>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\"><path d=\"M8.854 11.646l5.792-5.792a.5.5 0 01.854.353v11.586a.5.5 0 01-.854.353l-5.792-5.792a.5.5 0 010-.708z\"></path></svg>\n </a>\n <a class=\"navigation-button\" data-navigate=\"next\" title=\"Next slide (Enter/Spacebar/Right Arrow)\" href>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\"><path d=\"M15.146 12.354l-5.792 5.792a.5.5 0 01-.854-.353V6.207a.5.5 0 01.854-.353l5.792 5.792a.5.5 0 010 .708z\"></path></svg>\n </a>\n <a class=\"navigation-button\" data-navigate=\"last\" title=\"Last slide\" href>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\"><path d=\"M12 18a6 6 0 100-12 6 6 0 000 12z\"></path></svg>\n </a>\n </nav>`;\n\n const tmp = document.createElement('div');\n\n tmp.innerHTML = html;\n\n const nav = tmp.removeChild(tmp.lastChild);\n\n nav.addEventListener('mouseenter', function(event) {\n nav.classList.add('hovered');\n });\n\n nav.addEventListener('mouseleave', function(event) {\n nav.classList.remove('hovered');\n });\n\n nav.addEventListener('click', function(event) {\n\n event.preventDefault();\n\n let target = event.target;\n\n while (!target.matches('[data-navigate]')) {\n target = target.parentNode;\n }\n\n if (!target) {\n return;\n }\n\n goto(target.dataset.navigate);\n });\n\n container.appendChild(nav);\n\n return nav;\n}\n\n// eslint-disable-next-line no-unused-vars\nfunction pfwr(options) {\n\n const {\n container\n } = options;\n\n // slide numbers\n const slides = Array.from(container.querySelectorAll('.slide'));\n\n for (const idx in slides) {\n addPage(+idx, slides[+idx]);\n }\n\n // mouse navigation controls\n const nav = addNavigationControls(container, goto);\n\n // event listeners ////////////////////////\n\n const listeners = [];\n\n function on(event, fn) {\n listeners.push([ event, fn ]);\n }\n\n function emit(event, data) {\n\n for (const [ eventType, fn ] of listeners) {\n if (event === eventType) {\n fn(data);\n }\n }\n }\n\n // slide life cycle ////////////////\n\n let slideIndex = -1;\n\n function goto(next) {\n\n const slide = slides[slideIndex] || slides.find(s => s.dataset.name === slideIndex);\n\n const nextIndex = ((next, currentIndex, numberOfSlides) => {\n\n if (next === 'next') {\n return currentIndex + 1;\n }\n\n if (next === 'previous') {\n return currentIndex - 1;\n }\n\n if (next === 'first') {\n return 0;\n }\n\n if (next === 'last') {\n return numberOfSlides - 1;\n }\n\n if (next < 0) {\n return numberOfSlides + next;\n }\n\n return next;\n })(next, slides.indexOf(slide), slides.length);\n\n if (slideIndex === nextIndex) {\n return;\n }\n\n const nextSlide = slides[nextIndex] || slides.find(s => s.dataset.name === nextIndex);\n\n if (!nextSlide) {\n return;\n }\n\n slide && slide.classList.remove('current');\n nextSlide.classList.add('current');\n\n slideIndex = nextSlide.dataset.name || nextIndex;\n\n emit('slideChanged', {\n slideIndex\n });\n }\n\n // slide navigation\n\n function showNav() {\n nav && nav.classList.toggle('shown', true);\n }\n\n function hideNav() {\n nav && !nav.matches('.hovered') && nav.classList.toggle('shown', false);\n }\n\n let hideTimer;\n\n container.addEventListener('mousemove', function() {\n\n showNav();\n\n clearTimeout(hideTimer);\n\n hideTimer = setTimeout(hideNav, 2000);\n });\n\n\n function handleKey(event) {\n\n const key = event.key;\n\n if (event.altKey || event.metaKey || event.ctrlKey) {\n return;\n }\n\n if (key === 'Home') {\n hideNav();\n goto('first');\n\n return false;\n }\n\n if (key === 'End') {\n hideNav();\n goto('last');\n\n return false;\n }\n\n if (key === 'ArrowRight' || key === 'Enter' || key === ' ') {\n hideNav();\n goto('next');\n\n return false;\n }\n\n if (key === 'ArrowLeft') {\n hideNav();\n goto('previous');\n\n return false;\n }\n }\n\n function destroy() {\n document.removeEventListener('keydown', handleKey);\n }\n\n document.addEventListener('keydown', handleKey);\n\n return {\n on,\n goto,\n destroy\n };\n}";
72376
72404
 
72377
72405
  var prismScript = "/* PrismJS 1.23.0\nhttps://prismjs.com/download.html#themes=prism-okaidia&languages=markup+css+clike+javascript */\nvar _self=\"undefined\"!=typeof window?window:\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(u){var c=/\\blang(?:uage)?-([\\w-]+)\\b/i,n=0,_={manual:u.Prism&&u.Prism.manual,disableWorkerMessageHandler:u.Prism&&u.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof M?new M(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/\\u00a0/g,\" \")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,\"__id\",{value:++n}),e.__id},clone:function t(e,r){var a,n;switch(r=r||{},_.util.type(e)){case\"Object\":if(n=_.util.objId(e),r[n])return r[n];for(var i in a={},r[n]=a,e)e.hasOwnProperty(i)&&(a[i]=t(e[i],r));return a;case\"Array\":return n=_.util.objId(e),r[n]?r[n]:(a=[],r[n]=a,e.forEach(function(e,n){a[n]=t(e,r)}),a);default:return e}},getLanguage:function(e){for(;e&&!c.test(e.className);)e=e.parentElement;return e?(e.className.match(c)||[,\"none\"])[1].toLowerCase():\"none\"},currentScript:function(){if(\"undefined\"==typeof document)return null;if(\"currentScript\"in document)return document.currentScript;try{throw new Error}catch(e){var n=(/at [^(\\r\\n]*\\((.*):.+:.+\\)$/i.exec(e.stack)||[])[1];if(n){var t=document.getElementsByTagName(\"script\");for(var r in t)if(t[r].src==n)return t[r]}return null}},isActive:function(e,n,t){for(var r=\"no-\"+n;e;){var a=e.classList;if(a.contains(n))return!0;if(a.contains(r))return!1;e=e.parentElement}return!!t}},languages:{extend:function(e,n){var t=_.util.clone(_.languages[e]);for(var r in n)t[r]=n[r];return t},insertBefore:function(t,e,n,r){var a=(r=r||_.languages)[t],i={};for(var l in a)if(a.hasOwnProperty(l)){if(l==e)for(var o in n)n.hasOwnProperty(o)&&(i[o]=n[o]);n.hasOwnProperty(l)||(i[l]=a[l])}var s=r[t];return r[t]=i,_.languages.DFS(_.languages,function(e,n){n===s&&e!=t&&(this[e]=i)}),i},DFS:function e(n,t,r,a){a=a||{};var i=_.util.objId;for(var l in n)if(n.hasOwnProperty(l)){t.call(n,l,n[l],r||l);var o=n[l],s=_.util.type(o);\"Object\"!==s||a[i(o)]?\"Array\"!==s||a[i(o)]||(a[i(o)]=!0,e(o,t,l,a)):(a[i(o)]=!0,e(o,t,null,a))}}},plugins:{},highlightAll:function(e,n){_.highlightAllUnder(document,e,n)},highlightAllUnder:function(e,n,t){var r={callback:t,container:e,selector:'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'};_.hooks.run(\"before-highlightall\",r),r.elements=Array.prototype.slice.apply(r.container.querySelectorAll(r.selector)),_.hooks.run(\"before-all-elements-highlight\",r);for(var a,i=0;a=r.elements[i++];)_.highlightElement(a,!0===n,r.callback)},highlightElement:function(e,n,t){var r=_.util.getLanguage(e),a=_.languages[r];e.className=e.className.replace(c,\"\").replace(/\\s+/g,\" \")+\" language-\"+r;var i=e.parentElement;i&&\"pre\"===i.nodeName.toLowerCase()&&(i.className=i.className.replace(c,\"\").replace(/\\s+/g,\" \")+\" language-\"+r);var l={element:e,language:r,grammar:a,code:e.textContent};function o(e){l.highlightedCode=e,_.hooks.run(\"before-insert\",l),l.element.innerHTML=l.highlightedCode,_.hooks.run(\"after-highlight\",l),_.hooks.run(\"complete\",l),t&&t.call(l.element)}if(_.hooks.run(\"before-sanity-check\",l),!l.code)return _.hooks.run(\"complete\",l),void(t&&t.call(l.element));if(_.hooks.run(\"before-highlight\",l),l.grammar)if(n&&u.Worker){var s=new Worker(_.filename);s.onmessage=function(e){o(e.data)},s.postMessage(JSON.stringify({language:l.language,code:l.code,immediateClose:!0}))}else o(_.highlight(l.code,l.grammar,l.language));else o(_.util.encode(l.code))},highlight:function(e,n,t){var r={code:e,grammar:n,language:t};return _.hooks.run(\"before-tokenize\",r),r.tokens=_.tokenize(r.code,r.grammar),_.hooks.run(\"after-tokenize\",r),M.stringify(_.util.encode(r.tokens),r.language)},tokenize:function(e,n){var t=n.rest;if(t){for(var r in t)n[r]=t[r];delete n.rest}var a=new i;return z(a,a.head,e),function e(n,t,r,a,i,l){for(var o in r)if(r.hasOwnProperty(o)&&r[o]){var s=r[o];s=Array.isArray(s)?s:[s];for(var u=0;u<s.length;++u){if(l&&l.cause==o+\",\"+u)return;var c=s[u],g=c.inside,f=!!c.lookbehind,h=!!c.greedy,d=c.alias;if(h&&!c.pattern.global){var v=c.pattern.toString().match(/[imsuy]*$/)[0];c.pattern=RegExp(c.pattern.source,v+\"g\")}for(var p=c.pattern||c,m=a.next,y=i;m!==t.tail&&!(l&&y>=l.reach);y+=m.value.length,m=m.next){var k=m.value;if(t.length>n.length)return;if(!(k instanceof M)){var b,x=1;if(h){if(!(b=W(p,y,n,f)))break;var w=b.index,A=b.index+b[0].length,P=y;for(P+=m.value.length;P<=w;)m=m.next,P+=m.value.length;if(P-=m.value.length,y=P,m.value instanceof M)continue;for(var S=m;S!==t.tail&&(P<A||\"string\"==typeof S.value);S=S.next)x++,P+=S.value.length;x--,k=n.slice(y,P),b.index-=y}else if(!(b=W(p,0,k,f)))continue;var w=b.index,E=b[0],O=k.slice(0,w),L=k.slice(w+E.length),N=y+k.length;l&&N>l.reach&&(l.reach=N);var j=m.prev;O&&(j=z(t,j,O),y+=O.length),I(t,j,x);var C=new M(o,g?_.tokenize(E,g):E,d,E);m=z(t,j,C),L&&z(t,m,L),1<x&&e(n,t,r,m.prev,y,{cause:o+\",\"+u,reach:N})}}}}}(e,a,n,a.head,0),function(e){var n=[],t=e.head.next;for(;t!==e.tail;)n.push(t.value),t=t.next;return n}(a)},hooks:{all:{},add:function(e,n){var t=_.hooks.all;t[e]=t[e]||[],t[e].push(n)},run:function(e,n){var t=_.hooks.all[e];if(t&&t.length)for(var r,a=0;r=t[a++];)r(n)}},Token:M};function M(e,n,t,r){this.type=e,this.content=n,this.alias=t,this.length=0|(r||\"\").length}function W(e,n,t,r){e.lastIndex=n;var a=e.exec(t);if(a&&r&&a[1]){var i=a[1].length;a.index+=i,a[0]=a[0].slice(i)}return a}function i(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function z(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a,r.prev=a,e.length++,a}function I(e,n,t){for(var r=n.next,a=0;a<t&&r!==e.tail;a++)r=r.next;(n.next=r).prev=n,e.length-=a}if(u.Prism=_,M.stringify=function n(e,t){if(\"string\"==typeof e)return e;if(Array.isArray(e)){var r=\"\";return e.forEach(function(e){r+=n(e,t)}),r}var a={type:e.type,content:n(e.content,t),tag:\"span\",classes:[\"token\",e.type],attributes:{},language:t},i=e.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(a.classes,i):a.classes.push(i)),_.hooks.run(\"wrap\",a);var l=\"\";for(var o in a.attributes)l+=\" \"+o+'=\"'+(a.attributes[o]||\"\").replace(/\"/g,\"&quot;\")+'\"';return\"<\"+a.tag+' class=\"'+a.classes.join(\" \")+'\"'+l+\">\"+a.content+\"</\"+a.tag+\">\"},!u.document)return u.addEventListener&&(_.disableWorkerMessageHandler||u.addEventListener(\"message\",function(e){var n=JSON.parse(e.data),t=n.language,r=n.code,a=n.immediateClose;u.postMessage(_.highlight(r,_.languages[t],t)),a&&u.close()},!1)),_;var e=_.util.currentScript();function t(){_.manual||_.highlightAll()}if(e&&(_.filename=e.src,e.hasAttribute(\"data-manual\")&&(_.manual=!0)),!_.manual){var r=document.readyState;\"loading\"===r||\"interactive\"===r&&e&&e.defer?document.addEventListener(\"DOMContentLoaded\",t):window.requestAnimationFrame?window.requestAnimationFrame(t):window.setTimeout(t,16)}return _}(_self);\"undefined\"!=typeof module&&module.exports&&(module.exports=Prism),\"undefined\"!=typeof global&&(global.Prism=Prism);\nPrism.languages.markup={comment:/<!--[\\s\\S]*?-->/,prolog:/<\\?[\\s\\S]+?\\?>/,doctype:{pattern:/<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,greedy:!0,inside:{\"internal-subset\":{pattern:/(\\[)[\\s\\S]+(?=\\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/\"[^\"]*\"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\\]]/,\"doctype-tag\":/^DOCTYPE/,name:/[^\\s<>'\"]+/}},cdata:/<!\\[CDATA\\[[\\s\\S]*?]]>/i,tag:{pattern:/<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,greedy:!0,inside:{tag:{pattern:/^<\\/?[^\\s>\\/]+/,inside:{punctuation:/^<\\/?/,namespace:/^[^\\s>\\/:]+:/}},\"attr-value\":{pattern:/=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:\"attr-equals\"},/\"|'/]}},punctuation:/\\/?>/,\"attr-name\":{pattern:/[^\\s>\\/]+/,inside:{namespace:/^[^\\s>\\/:]+:/}}}},entity:[{pattern:/&[\\da-z]{1,8};/i,alias:\"named-entity\"},/&#x?[\\da-f]{1,8};/i]},Prism.languages.markup.tag.inside[\"attr-value\"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside[\"internal-subset\"].inside=Prism.languages.markup,Prism.hooks.add(\"wrap\",function(a){\"entity\"===a.type&&(a.attributes.title=a.content.replace(/&amp;/,\"&\"))}),Object.defineProperty(Prism.languages.markup.tag,\"addInlined\",{value:function(a,e){var s={};s[\"language-\"+e]={pattern:/(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^<!\\[CDATA\\[|\\]\\]>$/i;var n={\"included-cdata\":{pattern:/<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,inside:s}};n[\"language-\"+e]={pattern:/[\\s\\S]+/,inside:Prism.languages[e]};var t={};t[a]={pattern:RegExp(\"(<__[^>]*>)(?:<!\\\\[CDATA\\\\[(?:[^\\\\]]|\\\\](?!\\\\]>))*\\\\]\\\\]>|(?!<!\\\\[CDATA\\\\[)[^])*?(?=</__>)\".replace(/__/g,function(){return a}),\"i\"),lookbehind:!0,greedy:!0,inside:n},Prism.languages.insertBefore(\"markup\",\"cdata\",t)}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend(\"markup\",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml;\n!function(s){var e=/(\"|')(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/;s.languages.css={comment:/\\/\\*[\\s\\S]*?\\*\\//,atrule:{pattern:/@[\\w-](?:[^;{\\s]|\\s+(?![\\s{]))*(?:;|(?=\\s*\\{))/,inside:{rule:/^@[\\w-]+/,\"selector-function-argument\":{pattern:/(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,lookbehind:!0,alias:\"selector\"},keyword:{pattern:/(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,lookbehind:!0}}},url:{pattern:RegExp(\"\\\\burl\\\\((?:\"+e.source+\"|(?:[^\\\\\\\\\\r\\n()\\\"']|\\\\\\\\[^])*)\\\\)\",\"i\"),greedy:!0,inside:{function:/^url/i,punctuation:/^\\(|\\)$/,string:{pattern:RegExp(\"^\"+e.source+\"$\"),alias:\"url\"}}},selector:RegExp(\"[^{}\\\\s](?:[^{};\\\"'\\\\s]|\\\\s+(?![\\\\s{])|\"+e.source+\")*(?=\\\\s*\\\\{)\"),string:{pattern:e,greedy:!0},property:/(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,important:/!important\\b/i,function:/[-a-z0-9]+(?=\\()/i,punctuation:/[(){};:,]/},s.languages.css.atrule.inside.rest=s.languages.css;var t=s.languages.markup;t&&(t.tag.addInlined(\"style\",\"css\"),s.languages.insertBefore(\"inside\",\"attr-value\",{\"style-attr\":{pattern:/(^|[\"'\\s])style\\s*=\\s*(?:\"[^\"]*\"|'[^']*')/i,lookbehind:!0,inside:{\"attr-value\":{pattern:/=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,inside:{style:{pattern:/([\"'])[\\s\\S]+(?=[\"']$)/,lookbehind:!0,alias:\"language-css\",inside:s.languages.css},punctuation:[{pattern:/^=/,alias:\"attr-equals\"},/\"|'/]}},\"attr-name\":/^style/i}}},t.tag))}(Prism);\nPrism.languages.clike={comment:[{pattern:/(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\\\:])\\/\\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,greedy:!0},\"class-name\":{pattern:/(\\b(?:class|interface|extends|implements|trait|instanceof|new)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\\\]/}},keyword:/\\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\\b/,boolean:/\\b(?:true|false)\\b/,function:/\\w+(?=\\()/,number:/\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,punctuation:/[{}[\\];(),.:]/};\nPrism.languages.javascript=Prism.languages.extend(\"clike\",{\"class-name\":[Prism.languages.clike[\"class-name\"],{pattern:/(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\\s*)(?:catch|finally)\\b/,lookbehind:!0},{pattern:/(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|(?:get|set)(?=\\s*[\\[$\\w\\xA0-\\uFFFF])|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,lookbehind:!0}],function:/#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,number:/\\b(?:(?:0[xX](?:[\\dA-Fa-f](?:_[\\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\\d(?:_\\d)?)+n|NaN|Infinity)\\b|(?:\\b(?:\\d(?:_\\d)?)+\\.?(?:\\d(?:_\\d)?)*|\\B\\.(?:\\d(?:_\\d)?)+)(?:[Ee][+-]?(?:\\d(?:_\\d)?)+)?/,operator:/--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/}),Prism.languages.javascript[\"class-name\"][0].pattern=/(\\b(?:class|interface|extends|implements|instanceof|new)\\s+)[\\w.\\\\]+/,Prism.languages.insertBefore(\"javascript\",\"keyword\",{regex:{pattern:/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)\\/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[gimyus]{0,6}(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/,lookbehind:!0,greedy:!0,inside:{\"regex-source\":{pattern:/^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,lookbehind:!0,alias:\"language-regex\",inside:Prism.languages.regex},\"regex-flags\":/[a-z]+$/,\"regex-delimiter\":/^\\/|\\/$/}},\"function-variable\":{pattern:/#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,alias:\"function\"},parameter:[{pattern:/(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,inside:Prism.languages.javascript},{pattern:/(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/}),Prism.languages.insertBefore(\"javascript\",\"string\",{\"template-string\":{pattern:/`(?:\\\\[\\s\\S]|\\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\\${)[^\\\\`])*`/,greedy:!0,inside:{\"template-punctuation\":{pattern:/^`|`$/,alias:\"string\"},interpolation:{pattern:/((?:^|[^\\\\])(?:\\\\{2})*)\\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,lookbehind:!0,inside:{\"interpolation-punctuation\":{pattern:/^\\${|}$/,alias:\"punctuation\"},rest:Prism.languages.javascript}},string:/[\\s\\S]+/}}}),Prism.languages.markup&&Prism.languages.markup.tag.addInlined(\"script\",\"javascript\"),Prism.languages.js=Prism.languages.javascript;\n";
72378
72406
 
package/package.json CHANGED
@@ -1,10 +1,14 @@
1
1
  {
2
2
  "name": "pfwr",
3
- "version": "0.11.0",
3
+ "version": "0.13.0",
4
4
  "description": "The last markdown to HTML slide show generator you need",
5
- "module": "dist/index.js",
5
+ "main": "./dist/index.js",
6
6
  "bin": "./bin/cli.js",
7
7
  "type": "module",
8
+ "exports": {
9
+ ".": "./dist/index.js",
10
+ "./package.json": "./package.json"
11
+ },
8
12
  "scripts": {
9
13
  "all": "run-s lint bundle test",
10
14
  "bundle": "rollup -c",
@@ -30,40 +34,40 @@
30
34
  "bin"
31
35
  ],
32
36
  "devDependencies": {
33
- "@rollup/plugin-commonjs": "^28.0.3",
37
+ "@rollup/plugin-commonjs": "^29.0.0",
34
38
  "@rollup/plugin-json": "^6.1.0",
35
- "@rollup/plugin-node-resolve": "^16.0.1",
36
- "@types/node": "^20.17.32",
39
+ "@rollup/plugin-node-resolve": "^16.0.3",
40
+ "@types/node": "^24.10.4",
37
41
  "chokidar-cli": "^3.0.0",
38
- "eslint": "^9.22.0",
42
+ "eslint": "^9.39.2",
39
43
  "eslint-plugin-bpmn-io": "^2.2.0",
40
- "js-yaml": "^4.1.0",
44
+ "js-yaml": "^4.1.1",
41
45
  "mdast-comment-marker": "^3.0.0",
42
- "npm-run-all2": "^7.0.2",
46
+ "npm-run-all2": "^8.0.4",
43
47
  "rehype-document": "^7.0.3",
44
48
  "rehype-format": "^5.0.1",
45
49
  "rehype-meta": "^4.0.1",
46
50
  "rehype-stringify": "^10.0.1",
47
51
  "rehype-wrap": "^1.0.10",
48
52
  "remark-breaks": "^4.0.0",
49
- "remark-emoji": "^5.0.1",
53
+ "remark-emoji": "^5.0.2",
50
54
  "remark-external-links": "^9.0.1",
51
55
  "remark-frontmatter": "^5.0.0",
52
56
  "remark-gfm": "^4.0.1",
53
57
  "remark-parse": "^11.0.0",
54
- "remark-rehype": "^11.1.1",
55
- "rollup": "^4.40.1",
58
+ "remark-rehype": "^11.1.2",
59
+ "rollup": "^4.53.5",
56
60
  "rollup-plugin-string": "^3.0.0",
57
61
  "twemoji": "^14.0.2",
58
62
  "unified": "^11.0.5",
59
- "unist-util-visit-parents": "^6.0.1",
63
+ "unist-util-visit-parents": "^6.0.2",
60
64
  "vfile": "^6.0.3"
61
65
  },
62
66
  "engines": {
63
- "node": ">= 20"
67
+ "node": ">= 20.12"
64
68
  },
65
69
  "dependencies": {
66
- "min-dash": "^4.2.3",
70
+ "min-dash": "^5.0.0",
67
71
  "mri": "^1.1.6",
68
72
  "opener": "^1.5.2"
69
73
  }