securemark 0.240.1 → 0.240.2

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/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.240.2
4
+
5
+ - Refactoring.
6
+
3
7
  ## 0.240.1
4
8
 
5
9
  - Refactoring.
package/design.md CHANGED
@@ -102,14 +102,14 @@
102
102
  ##### インプットサイズ
103
103
 
104
104
  パーサーは上限を超えるサイズの入力をパースしない。
105
- またこれを超えない入力は1秒以下でセグメントに分割され非同期で逐次パースすることが可能となる。
105
+ また上限を超えない入力は1秒以下でセグメントに分割され非同期での逐次パースが可能である。
106
106
 
107
107
  ゆえに入力はパーサーの実行環境を応答不能にすることはない。
108
108
 
109
109
  ##### セグメントサイズ
110
110
 
111
111
  パーサーは上限を超えるサイズのセグメントをパースしない。
112
- またこれを超えないセグメントのパースも規定のパースコストの上限を超えない。
112
+ また上限を超えないセグメントのパースも規定のパースコストの上限を超えない。
113
113
 
114
114
  ゆえに入力はパーサーの実行環境を応答不能にすることはない。
115
115
  なお1セグメントは1ブロックに対応する。
@@ -1,4 +1,4 @@
1
- /*! securemark v0.240.1 https://github.com/falsandtru/securemark | (c) 2017, falsandtru | UNLICENSED */
1
+ /*! securemark v0.240.2 https://github.com/falsandtru/securemark | (c) 2017, falsandtru | UNLICENSED */
2
2
  require = function () {
3
3
  function r(e, n, t) {
4
4
  function o(i, f) {
@@ -500,7 +500,7 @@ require = function () {
500
500
  case LFU.length > this.capacity * this.ratio / 100:
501
501
  target = LFU.last !== skip ? LFU.last : LFU.length >= 2 ? LFU.last.prev : skip;
502
502
  if (target !== skip) {
503
- if (this.ratio > 50)
503
+ if (this.ratio >= 50)
504
504
  break;
505
505
  LRU.unshiftNode(target);
506
506
  LRU.head.value.node = LRU.head;
@@ -697,17 +697,16 @@ require = function () {
697
697
  const global_1 = _dereq_('./global');
698
698
  const alias_1 = _dereq_('./alias');
699
699
  const exception_1 = _dereq_('./exception');
700
- let now_;
700
+ let mem;
701
701
  let count = 0;
702
- function now() {
703
- if (now_ === void 0) {
704
- tick(() => now_ = void 0);
705
- } else {
706
- if (++count !== 100)
707
- return now_;
708
- count = 0;
702
+ function now(nocache = false) {
703
+ if (mem === void 0) {
704
+ tick(() => mem = void 0);
705
+ } else if (!nocache && ++count !== 100) {
706
+ return mem;
709
707
  }
710
- return now_ = global_1.Date.now();
708
+ count = 0;
709
+ return mem = global_1.Date.now();
711
710
  }
712
711
  exports.now = now;
713
712
  exports.clock = Promise.resolve(void 0);
@@ -1112,12 +1111,29 @@ require = function () {
1112
1111
  Object.defineProperty(exports, '__esModule', { value: true });
1113
1112
  exports.reduce = exports.memoize = void 0;
1114
1113
  const global_1 = _dereq_('./global');
1114
+ const alias_1 = _dereq_('./alias');
1115
1115
  const compare_1 = _dereq_('./compare');
1116
1116
  function memoize(f, identify = (...as) => as[0], memory) {
1117
1117
  if (typeof identify === 'object')
1118
1118
  return memoize(f, void 0, identify);
1119
1119
  if (memory === void 0)
1120
1120
  return memoize(f, identify, new global_1.Map());
1121
+ if ((0, alias_1.isArray)(memory))
1122
+ return memoize(f, identify, {
1123
+ has(key) {
1124
+ return memory[key] !== void 0;
1125
+ },
1126
+ get(key) {
1127
+ return memory[key];
1128
+ },
1129
+ set(key, value) {
1130
+ memory[key] = value;
1131
+ return this;
1132
+ },
1133
+ delete() {
1134
+ throw 0;
1135
+ }
1136
+ });
1121
1137
  let nullish = false;
1122
1138
  return (...as) => {
1123
1139
  const b = identify(...as);
@@ -1146,6 +1162,7 @@ require = function () {
1146
1162
  exports.reduce = reduce;
1147
1163
  },
1148
1164
  {
1165
+ './alias': 5,
1149
1166
  './compare': 12,
1150
1167
  './global': 15
1151
1168
  }
@@ -1196,12 +1213,14 @@ require = function () {
1196
1213
  function (_dereq_, module, exports) {
1197
1214
  'use strict';
1198
1215
  Object.defineProperty(exports, '__esModule', { value: true });
1199
- exports.unique = exports.rnd0Z = exports.rnd0z = exports.rnd0f = exports.rnd64 = exports.rnd62 = exports.rnd36 = exports.rnd32 = exports.rnd16 = void 0;
1216
+ exports.unique = exports.rnd0_ = exports.rnd0Z = exports.rnd0z = exports.rnd0f = exports.rnd64 = exports.rnd62 = exports.rnd36 = exports.rnd32 = exports.rnd16 = void 0;
1200
1217
  const global_1 = _dereq_('./global');
1201
1218
  const bases = [...Array(7)].map((_, i) => 1 << i);
1202
1219
  const dict = [
1203
1220
  ...[...Array(36)].map((_, i) => i.toString(36)),
1204
- ...[...Array(36)].map((_, i) => i.toString(36).toUpperCase()).slice(-26)
1221
+ ...[...Array(36)].map((_, i) => i.toString(36).toUpperCase()).slice(-26),
1222
+ '-',
1223
+ '_'
1205
1224
  ];
1206
1225
  exports.rnd16 = cons(16);
1207
1226
  exports.rnd32 = cons(32);
@@ -1211,6 +1230,7 @@ require = function () {
1211
1230
  exports.rnd0f = conv(exports.rnd16);
1212
1231
  exports.rnd0z = conv(exports.rnd36);
1213
1232
  exports.rnd0Z = conv(exports.rnd62);
1233
+ exports.rnd0_ = conv(exports.rnd64);
1214
1234
  function unique(rnd, len, mem) {
1215
1235
  const clear = !mem;
1216
1236
  mem !== null && mem !== void 0 ? mem : mem = new global_1.Set();
@@ -3830,29 +3850,30 @@ require = function () {
3830
3850
  exports.check = exports.exec = exports.eval = exports.Delimiters = void 0;
3831
3851
  class Delimiters {
3832
3852
  constructor() {
3833
- this.stack = [];
3834
- this.matchers = {};
3853
+ this.matchers = [];
3854
+ this.record = {};
3835
3855
  }
3836
3856
  push(delimiter) {
3837
- var _a;
3838
- var _b;
3839
- const {signature, matcher} = delimiter;
3840
- this.stack.push(signature);
3841
- (_a = (_b = this.matchers)[signature]) !== null && _a !== void 0 ? _a : _b[signature] = matcher;
3857
+ const {signature, matcher, escape} = delimiter;
3858
+ if (this.record[signature] === !escape) {
3859
+ this.matchers.unshift(() => undefined);
3860
+ } else {
3861
+ this.matchers.unshift(matcher);
3862
+ this.record[signature] = !escape;
3863
+ }
3842
3864
  }
3843
3865
  pop() {
3844
- this.stack.pop();
3866
+ this.matchers.shift();
3845
3867
  }
3846
3868
  match(source) {
3847
- const {stack, matchers} = this;
3848
- const log = {};
3849
- for (let i = 0; i < stack.length; ++i) {
3850
- const sig = stack[i];
3851
- if (sig in log)
3852
- continue;
3853
- if (matchers[sig](source))
3869
+ const {matchers} = this;
3870
+ for (let i = 0; i < matchers.length; ++i) {
3871
+ switch (matchers[i](source)) {
3872
+ case true:
3854
3873
  return true;
3855
- log[sig] = false;
3874
+ case false:
3875
+ return false;
3876
+ }
3856
3877
  }
3857
3878
  return false;
3858
3879
  }
@@ -3953,7 +3974,7 @@ require = function () {
3953
3974
  function (_dereq_, module, exports) {
3954
3975
  'use strict';
3955
3976
  Object.defineProperty(exports, '__esModule', { value: true });
3956
- exports.some = void 0;
3977
+ exports.escape = exports.some = void 0;
3957
3978
  const global_1 = _dereq_('spica/global');
3958
3979
  const parser_1 = _dereq_('../parser');
3959
3980
  const memoize_1 = _dereq_('spica/memoize');
@@ -3971,11 +3992,11 @@ require = function () {
3971
3992
  const matcher = (0, memoize_1.memoize)(pattern => {
3972
3993
  switch (typeof pattern) {
3973
3994
  case 'undefined':
3974
- return () => false;
3995
+ return () => global_1.undefined;
3975
3996
  case 'string':
3976
- return source => source.slice(0, pattern.length) === pattern;
3997
+ return source => source.slice(0, pattern.length) === pattern || global_1.undefined;
3977
3998
  case 'object':
3978
- return (0, memoize_1.reduce)(source => pattern.test(source));
3999
+ return (0, memoize_1.reduce)(source => pattern.test(source) || global_1.undefined);
3979
4000
  }
3980
4001
  }, signature);
3981
4002
  function some(parser, until, deep, limit = -1) {
@@ -4021,6 +4042,28 @@ require = function () {
4021
4042
  };
4022
4043
  }
4023
4044
  exports.some = some;
4045
+ function escape(parser, delim) {
4046
+ const delimiter = {
4047
+ signature: signature(delim),
4048
+ matcher: source => source.slice(0, delim.length) !== delim && global_1.undefined,
4049
+ escape: true
4050
+ };
4051
+ return (source, context) => {
4052
+ var _a;
4053
+ if (source === '')
4054
+ return;
4055
+ if (context) {
4056
+ (_a = context.delimiters) !== null && _a !== void 0 ? _a : context.delimiters = new parser_1.Delimiters();
4057
+ context.delimiters.push(delimiter);
4058
+ }
4059
+ const result = parser(source, context);
4060
+ if (context.delimiters) {
4061
+ context.delimiters.pop();
4062
+ }
4063
+ return result;
4064
+ };
4065
+ }
4066
+ exports.escape = escape;
4024
4067
  },
4025
4068
  {
4026
4069
  '../parser': 47,
@@ -5124,7 +5167,7 @@ require = function () {
5124
5167
  (0, combinator_1.some)(source_1.contentline, closer)
5125
5168
  ])
5126
5169
  ])
5127
- ]), closer), ([, fence]) => fence.length)));
5170
+ ]), closer), ([, fence]) => fence.length, [])));
5128
5171
  exports.figure = (0, combinator_1.block)((0, combinator_1.rewrite)(exports.segment, (0, combinator_1.fmap)((0, combinator_1.convert)(source => source.slice(source.search(/[[$]/), source.trimEnd().lastIndexOf('\n')), (0, combinator_1.sequence)([
5129
5172
  (0, combinator_1.line)((0, combinator_1.sequence)([
5130
5173
  label_1.label,
@@ -5780,8 +5823,8 @@ require = function () {
5780
5823
  /^\(([0-9]+|[a-z]+)\)(?:-[0-9]+)*(?=[^\S\n]|\n[^\S\n]*\S)/
5781
5824
  ], (0, combinator_1.context)({ syntax: { inline: { media: false } } }, exports.olist_))));
5782
5825
  exports.olist_ = (0, combinator_1.lazy)(() => (0, combinator_1.block)((0, combinator_1.union)([
5783
- (0, combinator_1.match)(new RegExp(`^(?=${ openers['.'].source.replace('?:', '') })`), (0, memoize_1.memoize)(ms => list(type(ms[1]), '.'), ms => type(ms[1]))),
5784
- (0, combinator_1.match)(new RegExp(`^(?=${ openers['('].source.replace('?:', '') })`), (0, memoize_1.memoize)(ms => list(type(ms[1]), '('), ms => type(ms[1])))
5826
+ (0, combinator_1.match)(new RegExp(`^(?=${ openers['.'].source.replace('?:', '') })`), (0, memoize_1.memoize)(ms => list(type(ms[1]), '.'), ms => type(ms[1]).charCodeAt(0) || 0, [])),
5827
+ (0, combinator_1.match)(new RegExp(`^(?=${ openers['('].source.replace('?:', '') })`), (0, memoize_1.memoize)(ms => list(type(ms[1]), '('), ms => type(ms[1]).charCodeAt(0) || 0, []))
5785
5828
  ])));
5786
5829
  const list = (type, delim) => (0, combinator_1.fmap)((0, combinator_1.some)((0, combinator_1.creator)((0, combinator_1.union)([(0, inline_1.indexee)((0, combinator_1.fmap)((0, combinator_1.fallback)((0, combinator_1.inits)([
5787
5830
  (0, combinator_1.line)((0, combinator_1.open)(heads[delim], (0, combinator_1.trim)((0, combinator_1.subsequence)([
@@ -6395,7 +6438,8 @@ require = function () {
6395
6438
  media: false
6396
6439
  }
6397
6440
  },
6398
- state: global_1.undefined
6441
+ state: global_1.undefined,
6442
+ delimiters: global_1.undefined
6399
6443
  }, (0, util_1.trimSpaceStart)((0, combinator_1.union)([(0, combinator_1.some)(inline_1.inline, ')', /^\\?\n/)]))))), '))'), ns => [(0, typed_dom_1.html)('sup', { class: 'annotation' }, (0, util_1.trimNodeEnd)((0, typed_dom_1.defrag)(ns)))]))));
6400
6444
  },
6401
6445
  {
@@ -6754,7 +6798,7 @@ require = function () {
6754
6798
  ], ([as, bs = []], rest) => [
6755
6799
  (0, array_1.unshift)(as, bs),
6756
6800
  rest
6757
- ]), ([, fence]) => fence.length)))));
6801
+ ]), ([, fence]) => fence.length, [])))));
6758
6802
  },
6759
6803
  {
6760
6804
  '../../combinator': 27,
@@ -7846,7 +7890,8 @@ require = function () {
7846
7890
  media: false
7847
7891
  }
7848
7892
  },
7849
- state: global_1.undefined
7893
+ state: global_1.undefined,
7894
+ delimiters: global_1.undefined
7850
7895
  }, (0, combinator_1.subsequence)([
7851
7896
  abbr,
7852
7897
  (0, combinator_1.focus)(/^\^[^\S\n]*/, source => [
package/gulpfile.js CHANGED
@@ -128,7 +128,7 @@ gulp.task('ts:dist', () =>
128
128
  .pipe(gulp.dest(config.ts.dist.dest)));
129
129
 
130
130
  gulp.task('ts:view', () =>
131
- gulp.watch(config.ts.dist.src, { ignoreInitial: false }, () =>
131
+ gulp.watch(config.ts.test.src, { ignoreInitial: false }, () =>
132
132
  compile(config.ts.dist.src, true)
133
133
  .pipe($.unassert())
134
134
  .pipe($.header(config.banner))
package/package-lock.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "securemark",
3
- "version": "0.240.1",
3
+ "version": "0.240.2",
4
4
  "lockfileVersion": 1,
5
5
  "requires": true,
6
6
  "dependencies": {
@@ -376,9 +376,9 @@
376
376
  "dev": true
377
377
  },
378
378
  "@jridgewell/trace-mapping": {
379
- "version": "0.3.4",
380
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz",
381
- "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==",
379
+ "version": "0.3.7",
380
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.7.tgz",
381
+ "integrity": "sha512-8XC0l0PwCbdg2Uc8zIIf6djNX3lYiz9GqQlC1LJ9WQvTYvcfP8IA9K2IKRnPm5tAX6X/+orF+WwKZ0doGcgJlg==",
382
382
  "dev": true,
383
383
  "requires": {
384
384
  "@jridgewell/resolve-uri": "^3.0.3",
@@ -602,9 +602,9 @@
602
602
  "dev": true
603
603
  },
604
604
  "@types/node": {
605
- "version": "17.0.23",
606
- "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.23.tgz",
607
- "integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==",
605
+ "version": "17.0.25",
606
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.25.tgz",
607
+ "integrity": "sha512-wANk6fBrUwdpY4isjWrKTufkrXdu1D2YHCot2fD/DfWxF5sMrVSA+KN7ydckvaTCh0HiqX9IVl0L5/ZoXg5M7w==",
608
608
  "dev": true
609
609
  },
610
610
  "@types/power-assert": {
@@ -1752,9 +1752,9 @@
1752
1752
  "dev": true
1753
1753
  },
1754
1754
  "builtins": {
1755
- "version": "5.0.0",
1756
- "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.0.tgz",
1757
- "integrity": "sha512-aizhtbxgT1Udg0Fj6GssXshAVK+nxbtCV+1OtTrMNy67jffDFBY6CUBAkhO4owbleAx6fdbnWdpsmmcXydbzNw==",
1755
+ "version": "5.0.1",
1756
+ "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz",
1757
+ "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==",
1758
1758
  "dev": true,
1759
1759
  "requires": {
1760
1760
  "semver": "^7.0.0"
@@ -1913,9 +1913,9 @@
1913
1913
  "dev": true
1914
1914
  },
1915
1915
  "caniuse-lite": {
1916
- "version": "1.0.30001327",
1917
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001327.tgz",
1918
- "integrity": "sha512-1/Cg4jlD9qjZzhbzkzEaAC2JHsP0WrOc8Rd/3a3LuajGzGWR/hD7TVyvq99VqmTy99eVh8Zkmdq213OgvgXx7w==",
1916
+ "version": "1.0.30001332",
1917
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz",
1918
+ "integrity": "sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==",
1919
1919
  "dev": true
1920
1920
  },
1921
1921
  "chalk": {
@@ -2258,9 +2258,9 @@
2258
2258
  }
2259
2259
  },
2260
2260
  "commander": {
2261
- "version": "9.1.0",
2262
- "resolved": "https://registry.npmjs.org/commander/-/commander-9.1.0.tgz",
2263
- "integrity": "sha512-i0/MaqBtdbnJ4XQs4Pmyb+oFQl+q0lsAmokVUH92SlSw4fkeAcG3bVon+Qt7hmtF+u3Het6o4VgrcY3qAoEB6w==",
2261
+ "version": "9.2.0",
2262
+ "resolved": "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz",
2263
+ "integrity": "sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==",
2264
2264
  "dev": true
2265
2265
  },
2266
2266
  "component-emitter": {
@@ -2554,9 +2554,9 @@
2554
2554
  "dev": true
2555
2555
  },
2556
2556
  "date-format": {
2557
- "version": "4.0.6",
2558
- "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.6.tgz",
2559
- "integrity": "sha512-B9vvg5rHuQ8cbUXE/RMWMyX2YA5TecT3jKF5fLtGNlzPlU7zblSPmAm2OImDbWL+LDOQ6pUm+4LOFz+ywS41Zw==",
2557
+ "version": "4.0.7",
2558
+ "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.7.tgz",
2559
+ "integrity": "sha512-k5xqlzDGIfv2N/DHR/BR8Kc4N9CRy9ReuDkmdxeX/jNfit94QXd36emWMm40ZOEDKNm/c91yV9EO3uGPkR7wWQ==",
2560
2560
  "dev": true
2561
2561
  },
2562
2562
  "debug": {
@@ -2645,12 +2645,13 @@
2645
2645
  "dev": true
2646
2646
  },
2647
2647
  "define-properties": {
2648
- "version": "1.1.3",
2649
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
2650
- "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
2648
+ "version": "1.1.4",
2649
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
2650
+ "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
2651
2651
  "dev": true,
2652
2652
  "requires": {
2653
- "object-keys": "^1.0.12"
2653
+ "has-property-descriptors": "^1.0.0",
2654
+ "object-keys": "^1.1.1"
2654
2655
  }
2655
2656
  },
2656
2657
  "define-property": {
@@ -3025,9 +3026,9 @@
3025
3026
  "dev": true
3026
3027
  },
3027
3028
  "electron-to-chromium": {
3028
- "version": "1.4.106",
3029
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.106.tgz",
3030
- "integrity": "sha512-ZYfpVLULm67K7CaaGP7DmjyeMY4naxsbTy+syVVxT6QHI1Ww8XbJjmr9fDckrhq44WzCrcC5kH3zGpdusxwwqg==",
3029
+ "version": "1.4.114",
3030
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.114.tgz",
3031
+ "integrity": "sha512-gRwLpVYWHGbERPU6o8pKfR168V6enWEXzZc6zQNNXbgJ7UJna+9qzAIHY94+9KOv71D/CH+QebLA9pChD2q8zA==",
3031
3032
  "dev": true
3032
3033
  },
3033
3034
  "elliptic": {
@@ -3205,9 +3206,9 @@
3205
3206
  }
3206
3207
  },
3207
3208
  "es-abstract": {
3208
- "version": "1.19.2",
3209
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.2.tgz",
3210
- "integrity": "sha512-gfSBJoZdlL2xRiOCy0g8gLMryhoe1TlimjzU99L/31Z8QEGIhVQI+EWwt5lT+AuU9SnorVupXFqqOGqGfsyO6w==",
3209
+ "version": "1.19.5",
3210
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.5.tgz",
3211
+ "integrity": "sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==",
3211
3212
  "dev": true,
3212
3213
  "requires": {
3213
3214
  "call-bind": "^1.0.2",
@@ -3221,7 +3222,7 @@
3221
3222
  "is-callable": "^1.2.4",
3222
3223
  "is-negative-zero": "^2.0.2",
3223
3224
  "is-regex": "^1.1.4",
3224
- "is-shared-array-buffer": "^1.0.1",
3225
+ "is-shared-array-buffer": "^1.0.2",
3225
3226
  "is-string": "^1.0.7",
3226
3227
  "is-weakref": "^1.0.2",
3227
3228
  "object-inspect": "^1.12.0",
@@ -4561,9 +4562,9 @@
4561
4562
  }
4562
4563
  },
4563
4564
  "fs-extra": {
4564
- "version": "10.0.1",
4565
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz",
4566
- "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==",
4565
+ "version": "10.1.0",
4566
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
4567
+ "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
4567
4568
  "dev": true,
4568
4569
  "requires": {
4569
4570
  "graceful-fs": "^4.2.0",
@@ -4619,6 +4620,12 @@
4619
4620
  "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
4620
4621
  "dev": true
4621
4622
  },
4623
+ "functions-have-names": {
4624
+ "version": "1.2.3",
4625
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
4626
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
4627
+ "dev": true
4628
+ },
4622
4629
  "gauge": {
4623
4630
  "version": "4.0.4",
4624
4631
  "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz",
@@ -5490,9 +5497,9 @@
5490
5497
  }
5491
5498
  },
5492
5499
  "has-bigints": {
5493
- "version": "1.0.1",
5494
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
5495
- "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==",
5500
+ "version": "1.0.2",
5501
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
5502
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
5496
5503
  "dev": true
5497
5504
  },
5498
5505
  "has-flag": {
@@ -5510,6 +5517,15 @@
5510
5517
  "sparkles": "^1.0.0"
5511
5518
  }
5512
5519
  },
5520
+ "has-property-descriptors": {
5521
+ "version": "1.0.0",
5522
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
5523
+ "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
5524
+ "dev": true,
5525
+ "requires": {
5526
+ "get-intrinsic": "^1.1.1"
5527
+ }
5528
+ },
5513
5529
  "has-require": {
5514
5530
  "version": "1.2.2",
5515
5531
  "resolved": "https://registry.npmjs.org/has-require/-/has-require-1.2.2.tgz",
@@ -5741,9 +5757,9 @@
5741
5757
  "dev": true
5742
5758
  },
5743
5759
  "https-proxy-agent": {
5744
- "version": "5.0.0",
5745
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
5746
- "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
5760
+ "version": "5.0.1",
5761
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
5762
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
5747
5763
  "dev": true,
5748
5764
  "requires": {
5749
5765
  "agent-base": "6",
@@ -6067,9 +6083,9 @@
6067
6083
  }
6068
6084
  },
6069
6085
  "is-core-module": {
6070
- "version": "2.8.1",
6071
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
6072
- "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
6086
+ "version": "2.9.0",
6087
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
6088
+ "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
6073
6089
  "dev": true,
6074
6090
  "requires": {
6075
6091
  "has": "^1.0.3"
@@ -6646,9 +6662,9 @@
6646
6662
  "dev": true
6647
6663
  },
6648
6664
  "karma": {
6649
- "version": "6.3.17",
6650
- "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.17.tgz",
6651
- "integrity": "sha512-2TfjHwrRExC8yHoWlPBULyaLwAFmXmxQrcuFImt/JsAsSZu1uOWTZ1ZsWjqQtWpHLiatJOHL5jFjXSJIgCd01g==",
6665
+ "version": "6.3.19",
6666
+ "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.19.tgz",
6667
+ "integrity": "sha512-NDhWckzES/Y9xMiddyU1RzaKL76/scCsu8Mp0vR0Z3lQRvC3p72+Ab4ppoxs36S9tyPNX5V48yvaV++RNEBPZw==",
6652
6668
  "dev": true,
6653
6669
  "requires": {
6654
6670
  "@colors/colors": "1.5.0",
@@ -6670,7 +6686,7 @@
6670
6686
  "qjobs": "^1.2.0",
6671
6687
  "range-parser": "^1.2.1",
6672
6688
  "rimraf": "^3.0.2",
6673
- "socket.io": "^4.2.0",
6689
+ "socket.io": "^4.4.1",
6674
6690
  "source-map": "^0.6.1",
6675
6691
  "tmp": "^0.2.1",
6676
6692
  "ua-parser-js": "^0.7.30",
@@ -7059,16 +7075,16 @@
7059
7075
  }
7060
7076
  },
7061
7077
  "log4js": {
7062
- "version": "6.4.4",
7063
- "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.4.tgz",
7064
- "integrity": "sha512-ncaWPsuw9Vl1CKA406hVnJLGQKy1OHx6buk8J4rE2lVW+NW5Y82G5/DIloO7NkqLOUtNPEANaWC1kZYVjXssPw==",
7078
+ "version": "6.4.5",
7079
+ "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.5.tgz",
7080
+ "integrity": "sha512-43RJcYZ7nfUxpPO2woTl8CJ0t5+gucLJZ43mtp2PlInT+LygCp/bl6hNJtKulCJ+++fQsjIv4EO3Mp611PfeLQ==",
7065
7081
  "dev": true,
7066
7082
  "requires": {
7067
- "date-format": "^4.0.6",
7083
+ "date-format": "^4.0.7",
7068
7084
  "debug": "^4.3.4",
7069
7085
  "flatted": "^3.2.5",
7070
7086
  "rfdc": "^1.3.0",
7071
- "streamroller": "^3.0.6"
7087
+ "streamroller": "^3.0.7"
7072
7088
  },
7073
7089
  "dependencies": {
7074
7090
  "debug": {
@@ -7101,9 +7117,9 @@
7101
7117
  "dev": true
7102
7118
  },
7103
7119
  "lru-cache": {
7104
- "version": "7.8.0",
7105
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.0.tgz",
7106
- "integrity": "sha512-AmXqneQZL3KZMIgBpaPTeI6pfwh+xQ2vutMsyqOu1TBdEXFZgpG/80wuJ531w2ZN7TI0/oc8CPxzh/DKQudZqg==",
7120
+ "version": "7.8.1",
7121
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz",
7122
+ "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==",
7107
7123
  "dev": true
7108
7124
  },
7109
7125
  "make-dir": {
@@ -7963,9 +7979,9 @@
7963
7979
  }
7964
7980
  },
7965
7981
  "node-releases": {
7966
- "version": "2.0.2",
7967
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz",
7968
- "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==",
7982
+ "version": "2.0.3",
7983
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.3.tgz",
7984
+ "integrity": "sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==",
7969
7985
  "dev": true
7970
7986
  },
7971
7987
  "nopt": {
@@ -8028,9 +8044,9 @@
8028
8044
  }
8029
8045
  },
8030
8046
  "npm-check-updates": {
8031
- "version": "12.5.8",
8032
- "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-12.5.8.tgz",
8033
- "integrity": "sha512-8SDZ6qYXI0aKf63zSbByqB9QmK8ygrZ+UVcXg9kGQyvH7dGIcFauFF0ksC0NdThHkU/5QhowJVSHXva9zujkJg==",
8047
+ "version": "12.5.9",
8048
+ "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-12.5.9.tgz",
8049
+ "integrity": "sha512-l9iOvD7EsQb96gFJL45V01YG6bP8+dmobYnSguvehPuNwgdWNMrE8RC8bSfURX5iUmX4bkobN4T8XMHXN9GMHA==",
8034
8050
  "dev": true,
8035
8051
  "requires": {
8036
8052
  "chalk": "^4.1.2",
@@ -8198,9 +8214,9 @@
8198
8214
  }
8199
8215
  },
8200
8216
  "npm-registry-fetch": {
8201
- "version": "13.1.0",
8202
- "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.0.tgz",
8203
- "integrity": "sha512-TIYL5X8CcwDhbFMXFDShNcpG6OMCYK6VzvSr6MUWP20tCU2DJ4ao2qQg3DT+3Pet8mO6/cgbZpon4LMh3duYLg==",
8217
+ "version": "13.1.1",
8218
+ "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.1.tgz",
8219
+ "integrity": "sha512-5p8rwe6wQPLJ8dMqeTnA57Dp9Ox6GH9H60xkyJup07FmVlu3Mk7pf/kIIpl9gaN5bM8NM+UUx3emUWvDNTt39w==",
8204
8220
  "dev": true,
8205
8221
  "requires": {
8206
8222
  "make-fetch-happen": "^10.0.6",
@@ -9187,17 +9203,40 @@
9187
9203
  }
9188
9204
  },
9189
9205
  "read-package-json": {
9190
- "version": "5.0.0",
9191
- "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.0.tgz",
9192
- "integrity": "sha512-1cjk2MV5ONDMn34uxSID3X8NY7VKsXfJnjbcVdFMvHEnJOBzU6MJ7/3yg6QFVZDq5/1yFNrKBUK9kGnonyGP2Q==",
9206
+ "version": "5.0.1",
9207
+ "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz",
9208
+ "integrity": "sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg==",
9193
9209
  "dev": true,
9194
9210
  "requires": {
9195
- "glob": "^7.2.0",
9211
+ "glob": "^8.0.1",
9196
9212
  "json-parse-even-better-errors": "^2.3.1",
9197
9213
  "normalize-package-data": "^4.0.0",
9198
9214
  "npm-normalize-package-bin": "^1.0.1"
9199
9215
  },
9200
9216
  "dependencies": {
9217
+ "brace-expansion": {
9218
+ "version": "2.0.1",
9219
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
9220
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
9221
+ "dev": true,
9222
+ "requires": {
9223
+ "balanced-match": "^1.0.0"
9224
+ }
9225
+ },
9226
+ "glob": {
9227
+ "version": "8.0.1",
9228
+ "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.1.tgz",
9229
+ "integrity": "sha512-cF7FYZZ47YzmCu7dDy50xSRRfO3ErRfrXuLZcNIuyiJEco0XSrGtuilG19L5xp3NcwTx7Gn+X6Tv3fmsUPTbow==",
9230
+ "dev": true,
9231
+ "requires": {
9232
+ "fs.realpath": "^1.0.0",
9233
+ "inflight": "^1.0.4",
9234
+ "inherits": "2",
9235
+ "minimatch": "^5.0.1",
9236
+ "once": "^1.3.0",
9237
+ "path-is-absolute": "^1.0.0"
9238
+ }
9239
+ },
9201
9240
  "hosted-git-info": {
9202
9241
  "version": "5.0.0",
9203
9242
  "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz",
@@ -9207,6 +9246,15 @@
9207
9246
  "lru-cache": "^7.5.1"
9208
9247
  }
9209
9248
  },
9249
+ "minimatch": {
9250
+ "version": "5.0.1",
9251
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
9252
+ "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
9253
+ "dev": true,
9254
+ "requires": {
9255
+ "brace-expansion": "^2.0.1"
9256
+ }
9257
+ },
9210
9258
  "normalize-package-data": {
9211
9259
  "version": "4.0.0",
9212
9260
  "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz",
@@ -9473,13 +9521,14 @@
9473
9521
  }
9474
9522
  },
9475
9523
  "regexp.prototype.flags": {
9476
- "version": "1.4.1",
9477
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz",
9478
- "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==",
9524
+ "version": "1.4.3",
9525
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
9526
+ "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
9479
9527
  "dev": true,
9480
9528
  "requires": {
9481
9529
  "call-bind": "^1.0.2",
9482
- "define-properties": "^1.1.3"
9530
+ "define-properties": "^1.1.3",
9531
+ "functions-have-names": "^1.2.2"
9483
9532
  }
9484
9533
  },
9485
9534
  "regexpp": {
@@ -9793,12 +9842,23 @@
9793
9842
  "dev": true
9794
9843
  },
9795
9844
  "semver": {
9796
- "version": "7.3.6",
9797
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz",
9798
- "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==",
9845
+ "version": "7.3.7",
9846
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
9847
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
9799
9848
  "dev": true,
9800
9849
  "requires": {
9801
- "lru-cache": "^7.4.0"
9850
+ "lru-cache": "^6.0.0"
9851
+ },
9852
+ "dependencies": {
9853
+ "lru-cache": {
9854
+ "version": "6.0.0",
9855
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
9856
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
9857
+ "dev": true,
9858
+ "requires": {
9859
+ "yallist": "^4.0.0"
9860
+ }
9861
+ }
9802
9862
  }
9803
9863
  },
9804
9864
  "semver-diff": {
@@ -10184,14 +10244,14 @@
10184
10244
  }
10185
10245
  },
10186
10246
  "socks-proxy-agent": {
10187
- "version": "6.1.1",
10188
- "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz",
10189
- "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==",
10247
+ "version": "6.2.0",
10248
+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.0.tgz",
10249
+ "integrity": "sha512-wWqJhjb32Q6GsrUqzuFkukxb/zzide5quXYcMVpIjxalDBBYy2nqKCFQ/9+Ie4dvOYSQdOk3hUlZSdzZOd3zMQ==",
10190
10250
  "dev": true,
10191
10251
  "requires": {
10192
10252
  "agent-base": "^6.0.2",
10193
- "debug": "^4.3.1",
10194
- "socks": "^2.6.1"
10253
+ "debug": "^4.3.3",
10254
+ "socks": "^2.6.2"
10195
10255
  },
10196
10256
  "dependencies": {
10197
10257
  "debug": {
@@ -10305,9 +10365,9 @@
10305
10365
  "dev": true
10306
10366
  },
10307
10367
  "spica": {
10308
- "version": "0.0.515",
10309
- "resolved": "https://registry.npmjs.org/spica/-/spica-0.0.515.tgz",
10310
- "integrity": "sha512-74tl59FAVUAz2LTmzxF3XexrYkj7hGCX5C8ped+Nf/zje6KdpexvuYXBNsZlujxX8LuU71R9Wqa32lRaqXrUpA==",
10368
+ "version": "0.0.518",
10369
+ "resolved": "https://registry.npmjs.org/spica/-/spica-0.0.518.tgz",
10370
+ "integrity": "sha512-DOaGrLnzccxFTRaVqhBVENaDWvUTlD7ZTEERCc8vLsTqdnd63LuI53iJiXXq39NgYHnjBkihp2RvJymGymMlAw==",
10311
10371
  "dev": true
10312
10372
  },
10313
10373
  "split-string": {
@@ -10448,12 +10508,12 @@
10448
10508
  }
10449
10509
  },
10450
10510
  "streamroller": {
10451
- "version": "3.0.6",
10452
- "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.6.tgz",
10453
- "integrity": "sha512-Qz32plKq/MZywYyhEatxyYc8vs994Gz0Hu2MSYXXLD233UyPeIeRBZARIIGwFer4Mdb8r3Y2UqKkgyDghM6QCg==",
10511
+ "version": "3.0.7",
10512
+ "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.7.tgz",
10513
+ "integrity": "sha512-kh68kwiDGuIPiPDWwRbEC5us+kfARP1e9AsQiaLaSqGrctOvMn0mtL8iNY3r4/o5nIoYi3gPI1jexguZsXDlxw==",
10454
10514
  "dev": true,
10455
10515
  "requires": {
10456
- "date-format": "^4.0.6",
10516
+ "date-format": "^4.0.7",
10457
10517
  "debug": "^4.3.4",
10458
10518
  "fs-extra": "^10.0.1"
10459
10519
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "securemark",
3
- "version": "0.240.1",
3
+ "version": "0.240.2",
4
4
  "description": "Secure markdown renderer working on browsers for user input data.",
5
5
  "private": false,
6
6
  "homepage": "https://github.com/falsandtru/securemark",
@@ -38,7 +38,7 @@
38
38
  "@types/prismjs": "1.26.0",
39
39
  "browserify": "^17.0.0",
40
40
  "browserify-shim": "^3.8.14",
41
- "concurrently": "^7.0.0",
41
+ "concurrently": "^7.1.0",
42
42
  "del": "^6.0.0",
43
43
  "eslint-plugin-redos": "^4.3.0",
44
44
  "gulp": "^4.0.2",
@@ -50,7 +50,7 @@
50
50
  "gulp-mocha": "^8.0.0",
51
51
  "gulp-rename": "^2.0.0",
52
52
  "gulp-unassert": "^2.0.0",
53
- "karma": "^6.3.17",
53
+ "karma": "^6.3.19",
54
54
  "karma-chrome-launcher": "^3.1.1",
55
55
  "karma-coverage-istanbul-instrumenter": "^1.0.4",
56
56
  "karma-coverage-istanbul-reporter": "^3.0.3",
@@ -58,10 +58,10 @@
58
58
  "karma-firefox-launcher": "^2.1.2",
59
59
  "karma-mocha": "^2.0.1",
60
60
  "mocha": "^9.2.2",
61
- "npm-check-updates": "^12.5.4",
61
+ "npm-check-updates": "^12.5.9",
62
62
  "power-assert": "^1.6.1",
63
- "semver": "^7.3.5",
64
- "spica": "0.0.515",
63
+ "semver": "^7.3.7",
64
+ "spica": "0.0.518",
65
65
  "tsify": "^5.0.4",
66
66
  "typed-dom": "0.0.250",
67
67
  "typescript": "4.6.3",
@@ -14,14 +14,14 @@ const signature = (pattern: string | RegExp | undefined): string => {
14
14
  }
15
15
  };
16
16
  const matcher = memoize(
17
- (pattern: string | RegExp | undefined): (source: string) => boolean => {
17
+ (pattern: string | RegExp | undefined): (source: string) => true | undefined => {
18
18
  switch (typeof pattern) {
19
19
  case 'undefined':
20
- return () => false;
20
+ return () => undefined;
21
21
  case 'string':
22
- return source => source.slice(0, pattern.length) === pattern;
22
+ return source => source.slice(0, pattern.length) === pattern || undefined;
23
23
  case 'object':
24
- return reduce(source => pattern.test(source));
24
+ return reduce(source => pattern.test(source) || undefined);
25
25
  }
26
26
  },
27
27
  signature);
@@ -42,8 +42,8 @@ export function some<T>(parser: Parser<T>, until?: string | RegExp | number, dee
42
42
  let rest = source;
43
43
  let nodes: T[] | undefined;
44
44
  if (deep && context) {
45
- // bracket > annotation > bracket > reference > bracket > link > media | bracket
46
- // bracket > annotation > bracket > reference > bracket > index > bracket
45
+ // bracket > link > media | bracket
46
+ // bracket > index > bracket
47
47
  context.delimiters ??= new Delimiters();
48
48
  context.delimiters.push(delimiter);
49
49
  }
@@ -69,3 +69,25 @@ export function some<T>(parser: Parser<T>, until?: string | RegExp | number, dee
69
69
  : undefined;
70
70
  };
71
71
  }
72
+
73
+ export function escape<P extends Parser<unknown>>(parser: P, delim: string): P;
74
+ export function escape<T>(parser: Parser<T>, delim: string): Parser<T> {
75
+ assert(parser);
76
+ const delimiter = {
77
+ signature: signature(delim),
78
+ matcher: (source: string) => source.slice(0, delim.length) !== delim && undefined,
79
+ escape: true,
80
+ } as const;
81
+ return (source, context) => {
82
+ if (source === '') return;
83
+ if (context) {
84
+ context.delimiters ??= new Delimiters();
85
+ context.delimiters.push(delimiter);
86
+ }
87
+ const result = parser(source, context);
88
+ if (context.delimiters) {
89
+ context.delimiters.pop();
90
+ }
91
+ return result;
92
+ };
93
+ }
@@ -20,26 +20,31 @@ type ExtractSubTree<D extends Parser<unknown>[]> = ExtractSubParser<D> extends i
20
20
  type ExtractSubParser<D extends Parser<unknown>[]> = D extends (infer P)[] ? P extends Parser<unknown> ? P : never : never;
21
21
 
22
22
  export class Delimiters {
23
- private readonly stack: string[] = [];
24
- private readonly matchers: Record<string, (source: string) => boolean> = {};
25
- public push(delimiter: { readonly signature: string; readonly matcher: (source: string) => boolean; }): void {
26
- const { signature, matcher } = delimiter;
27
- this.stack.push(signature);
28
- this.matchers[signature] ??= matcher;
29
- assert(this.matchers[signature] === matcher);
23
+ private readonly matchers: ((source: string) => boolean | undefined)[] = [];
24
+ private readonly record: Record<string, boolean> = {};
25
+ public push(delimiter: { readonly signature: string; readonly matcher: (source: string) => boolean | undefined; readonly escape?: boolean; }): void {
26
+ const { signature, matcher, escape } = delimiter;
27
+ if (this.record[signature] === !escape) {
28
+ this.matchers.unshift(() => undefined);
29
+ }
30
+ else {
31
+ this.matchers.unshift(matcher);
32
+ this.record[signature] = !escape;
33
+ }
30
34
  }
31
35
  public pop(): void {
32
- assert(this.stack.length > 0);
33
- this.stack.pop();
36
+ assert(this.matchers.length > 0);
37
+ this.matchers.shift();
34
38
  }
35
39
  public match(source: string): boolean {
36
- const { stack, matchers } = this;
37
- const log = {};
38
- for (let i = 0; i < stack.length; ++i) {
39
- const sig = stack[i];
40
- if (sig in log) continue;
41
- if (matchers[sig](source)) return true;
42
- log[sig] = false;
40
+ const { matchers } = this;
41
+ for (let i = 0; i < matchers.length; ++i) {
42
+ switch (matchers[i](source)) {
43
+ case true:
44
+ return true;
45
+ case false:
46
+ return false;
47
+ }
43
48
  }
44
49
  return false;
45
50
  }
@@ -218,6 +218,12 @@ describe('Unit: parser/api/parse', () => {
218
218
  ['<p>a<span class="linebreak"> </span>b</p>']);
219
219
  });
220
220
 
221
+ it('creation', () => {
222
+ assert.deepStrictEqual(
223
+ [...parse('"[# '.repeat(100)).children].map(el => el.outerHTML),
224
+ [`<p>${'"[# '.repeat(100).trim()}</p>`]);
225
+ });
226
+
221
227
  it('recursion', () => {
222
228
  assert.deepStrictEqual(
223
229
  [...parse('('.repeat(199)).children].map(el => el.outerHTML),
@@ -46,7 +46,7 @@ export const segment: FigureParser.SegmentParser = block(match(
46
46
  ]),
47
47
  ]),
48
48
  closer),
49
- ([, fence]) => fence.length)));
49
+ ([, fence]) => fence.length, [])));
50
50
 
51
51
  export const figure: FigureParser = block(rewrite(segment, fmap(
52
52
  convert(source => source.slice(source.search(/[[$]/), source.trimEnd().lastIndexOf('\n')),
@@ -25,10 +25,10 @@ export const olist: OListParser = lazy(() => block(validate(
25
25
  export const olist_: OListParser = lazy(() => block(union([
26
26
  match(
27
27
  new RegExp(`^(?=${openers['.'].source.replace('?:', '')})`),
28
- memoize(ms => list(type(ms[1]), '.'), ms => type(ms[1]))),
28
+ memoize(ms => list(type(ms[1]), '.'), ms => type(ms[1]).charCodeAt(0) || 0, [])),
29
29
  match(
30
30
  new RegExp(`^(?=${openers['('].source.replace('?:', '')})`),
31
- memoize(ms => list(type(ms[1]), '('), ms => type(ms[1]))),
31
+ memoize(ms => list(type(ms[1]), '('), ms => type(ms[1]).charCodeAt(0) || 0, [])),
32
32
  ])));
33
33
 
34
34
  const list = (type: string, delim: string): OListParser.ListParser => fmap(
@@ -19,7 +19,7 @@ export const annotation: AnnotationParser = lazy(() => creator(validate('((', ')
19
19
  //label: true,
20
20
  //link: true,
21
21
  //autolink: true,
22
- }}, state: undefined },
22
+ }}, state: undefined, delimiters: undefined },
23
23
  trimSpaceStart(union([some(inline, ')', /^\\?\n/)]))))),
24
24
  '))'),
25
25
  ns => [html('sup', { class: 'annotation' }, trimNodeEnd(defrag(ns)))]))));
@@ -21,4 +21,4 @@ export const comment: CommentParser = lazy(() => creator(validate('[#', match(
21
21
  ]),
22
22
  ], rest],
23
23
  ([as, bs = []], rest) => [unshift(as, bs), rest]),
24
- ([, fence]) => fence.length)))));
24
+ ([, fence]) => fence.length, [])))));
@@ -19,7 +19,7 @@ export const reference: ReferenceParser = lazy(() => creator(validate('[[', ']]'
19
19
  //label: true,
20
20
  //link: true,
21
21
  //autolink: true,
22
- }}, state: undefined },
22
+ }}, state: undefined, delimiters: undefined },
23
23
  subsequence([
24
24
  abbr,
25
25
  focus(/^\^[^\S\n]*/, source => [['', source], '']),
@@ -144,6 +144,7 @@ describe('Unit: parser/inline', () => {
144
144
  assert.deepStrictEqual(inspect(parser('(((a))')), [['(', '<sup class="annotation">a</sup>'], '']);
145
145
  assert.deepStrictEqual(inspect(parser('((((a))')), [['(', '(', '<sup class="annotation">a</sup>'], '']);
146
146
  assert.deepStrictEqual(inspect(parser('((((a))))')), [['<sup class="annotation"><span class="paren">((a))</span></sup>'], '']);
147
+ assert.deepStrictEqual(inspect(parser('"((""))')), [['"', '<sup class="annotation">""</sup>'], '']);
147
148
  assert.deepStrictEqual(inspect(parser('[[[a]]')), [['[', '<sup class="reference">a</sup>'], '']);
148
149
  assert.deepStrictEqual(inspect(parser('[[[[a]]')), [['[', '[', '<sup class="reference">a</sup>'], '']);
149
150
  assert.deepStrictEqual(inspect(parser('[[[[a]]]]')), [['<sup class="reference">[[a]]</sup>'], '']);
@@ -151,6 +152,7 @@ describe('Unit: parser/inline', () => {
151
152
  assert.deepStrictEqual(inspect(parser('[[[]{a}]]')), [['<sup class="reference"><a href="a">a</a></sup>'], '']);
152
153
  assert.deepStrictEqual(inspect(parser('[[[a]{b}]]')), [['<sup class="reference"><a href="b">a</a></sup>'], '']);
153
154
  assert.deepStrictEqual(inspect(parser('[(([a]{#}))]{#}')), [['<a href="#"><span class="paren">(<span class="paren">([a]{#})</span>)</span></a>'], '']);
155
+ assert.deepStrictEqual(inspect(parser('"[[""]]')), [['"', '<sup class="reference">""</sup>'], '']);
154
156
  assert.deepStrictEqual(inspect(parser('<http://host>')), [['<', '<a href="http://host" target="_blank">http://host</a>', '>'], '']);
155
157
  assert.deepStrictEqual(inspect(parser('<<small>a<</small>')), [['<', '<small>a&lt;</small>'], '']);
156
158
  assert.deepStrictEqual(inspect(parser('<sup><sub>a</sub>')), [['<', 'sup', '>', '<sub>a</sub>'], '']);
@@ -162,6 +164,8 @@ describe('Unit: parser/inline', () => {
162
164
  assert.deepStrictEqual(inspect(parser('[#a*b\nc*]')), [['[', '<a href="/hashtags/a" class="hashtag">#a</a>', '<em>b<br>c</em>', ']'], '']);
163
165
  assert.deepStrictEqual(inspect(parser('[*a\nb*]{/}')), [['[', '<em>a<br>b</em>', ']', '<a href="/">/</a>'], '']);
164
166
  assert.deepStrictEqual(inspect(parser('[[*a\nb*]]')), [['[', '[', '<em>a<br>b</em>', ']', ']'], '']);
167
+ assert.deepStrictEqual(inspect(parser('"[# *"*"*')), [['"', '[#', ' ', '*', '"', '*', '"', '*'], '']);
168
+ assert.deepStrictEqual(inspect(parser('"[# "*"* #]')), [['"', '[#', ' ', '"', '*', '"', '*', ' ', '#', ']'], '']);
165
169
  });
166
170
 
167
171
  it('uri', () => {