@ephox/polaris
Advanced tools
Comparing version 3.0.48 to 3.0.50
@@ -1,8 +0,5 @@ | ||
declare type LinkApi = () => RegExp; | ||
declare const link: LinkApi; | ||
declare type AutolinkApi = () => RegExp; | ||
declare const autolink: AutolinkApi; | ||
declare type TokensApi = (value: string, parameters: string[]) => string; | ||
declare const tokens: TokensApi; | ||
declare const link: () => RegExp; | ||
declare const autolink: () => RegExp; | ||
declare const tokens: (value: string, parameters: string[]) => string; | ||
export { tokens, link, autolink }; | ||
//# sourceMappingURL=Regexes.d.ts.map |
@@ -0,55 +1,55 @@ | ||
/* | ||
The RegEx parses the following components (https://www.rfc-editor.org/rfc/rfc3986.txt): | ||
scheme:[//[user:password@]host[:port]][/]path[?query][#fragment] | ||
foo://example.com:8042/over/there?name=ferret#nose | ||
\_/ \______________/\_________/ \_________/ \__/ | ||
| | | | | | ||
scheme authority path query fragment | ||
Originally from: | ||
http://blog.mattheworiordan.com/post/13174566389/url-regular-expression-for-links-with-or-without-the | ||
Modified to: | ||
- include port numbers | ||
- allow full stops in email addresses | ||
- allow [-.~*+=!&;:'%@?^${}(),\/\w] after the # | ||
- allow [-.~*+=!&;:'%@?^${}(),\/\w] after the ? | ||
- move allow -_.~*+=!&;:'%@?^${}() in email usernames to the first @ match (TBIO-4809) | ||
- enforce domains to be [A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)* so they can't end in a period (TBIO-4809) | ||
- removed a bunch of escaping, made every group non-capturing (during TBIO-4809) | ||
- colons are only valid when followed directly by // or some text and then @ (TBIO-4867) | ||
- only include the fragment '#' if it has 1 or more trailing matches | ||
- only include the query '?' if it has 1 or more trailing matches | ||
(?: | ||
(?:[A-Za-z]{3,9}:(?:\/\/)) | ||
(?:[-.~*+=!&;:'%@?^${}(),\w]+@)? | ||
[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)* | ||
| | ||
(?:www\. | ||
| | ||
[-;:&=+$,.\w]+@ | ||
) | ||
[A-Za-z0-9-]+ | ||
(?:\.[A-Za-z0-9-]+)* | ||
) | ||
(?::[0-9]+)? | ||
(?:\/[-+~=%.()\/\w]*)? | ||
(?: | ||
\? | ||
(?: | ||
[-.~*+=!&;:'%@?^${}(),\/\w]+ | ||
) | ||
)? | ||
(?: | ||
# | ||
(?: | ||
[-.~*+=!&;:'%@?^${}(),\/\w]+ | ||
) | ||
)? | ||
*/ | ||
var link = function () { | ||
/* | ||
The RegEx parses the following components (https://www.rfc-editor.org/rfc/rfc3986.txt): | ||
scheme:[//[user:password@]host[:port]][/]path[?query][#fragment] | ||
foo://example.com:8042/over/there?name=ferret#nose | ||
\_/ \______________/\_________/ \_________/ \__/ | ||
| | | | | | ||
scheme authority path query fragment | ||
Originally from: | ||
http://blog.mattheworiordan.com/post/13174566389/url-regular-expression-for-links-with-or-without-the | ||
Modified to: | ||
- include port numbers | ||
- allow full stops in email addresses | ||
- allow [-.~*+=!&;:'%@?^${}(),\/\w] after the # | ||
- allow [-.~*+=!&;:'%@?^${}(),\/\w] after the ? | ||
- move allow -_.~*+=!&;:'%@?^${}() in email usernames to the first @ match (TBIO-4809) | ||
- enforce domains to be [A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)* so they can't end in a period (TBIO-4809) | ||
- removed a bunch of escaping, made every group non-capturing (during TBIO-4809) | ||
- colons are only valid when followed directly by // or some text and then @ (TBIO-4867) | ||
- only include the fragment '#' if it has 1 or more trailing matches | ||
- only include the query '?' if it has 1 or more trailing matches | ||
(?: | ||
(?:[A-Za-z]{3,9}:(?:\/\/)) | ||
(?:[-.~*+=!&;:'%@?^${}(),\w]+@)? | ||
[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)* | ||
| | ||
(?:www\. | ||
| | ||
[-;:&=+$,.\w]+@ | ||
) | ||
[A-Za-z0-9-]+ | ||
(?:\.[A-Za-z0-9-]+)* | ||
) | ||
(?::[0-9]+)? | ||
(?:\/[-+~=%.()\/\w]*)? | ||
(?: | ||
\? | ||
(?: | ||
[-.~*+=!&;:'%@?^${}(),\/\w]+ | ||
) | ||
)? | ||
(?: | ||
# | ||
(?: | ||
[-.~*+=!&;:'%@?^${}(),\/\w]+ | ||
) | ||
)? | ||
*/ | ||
// eslint-disable-next-line max-len | ||
return /(?:(?:[A-Za-z]{3,9}:(?:\/\/))(?:[-.~*+=!&;:'%@?^${}(),\w]+@)?[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)*|(?:www\.|[-;:&=+$,.\w]+@)[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)*)(?::[0-9]+)?(?:\/[-+~=%.()\/\w]*)?(?:\?(?:[-.~*+=!&;:'%@?^${}(),\/\w]+))?(?:#(?:[-.~*+=!&;:'%@?^${}(),\/\w]+))?/g; | ||
@@ -64,3 +64,5 @@ }; | ||
* | ||
* We may need to inline the link regex if this refactoring technique causes performance issues; we're assuming browsers can optimise the above regex but not this style. | ||
* We may need to inline the link regex if this refactoring technique causes | ||
* performance issues; we're assuming browsers can optimise the above regex | ||
* but not this style. | ||
* TBIO calls this method every time space or enter is pressed. | ||
@@ -67,0 +69,0 @@ */ |
@@ -1,5 +0,5 @@ | ||
import { WordOptions } from '../words/Words'; | ||
declare type GetWordsApi = <T>(chars: T[], extract: (char: T) => string, options?: WordOptions) => T[][]; | ||
import * as WordOptions from '../words/Words'; | ||
declare type GetWordsApi = <T>(chars: T[], extract: (char: T) => string, options?: WordOptions.WordOptions) => T[][]; | ||
declare const getWords: GetWordsApi; | ||
export { getWords }; | ||
//# sourceMappingURL=Words.d.ts.map |
@@ -1,4 +0,4 @@ | ||
import { getWords as getWordsBase } from '../words/Words'; | ||
var getWords = getWordsBase; | ||
import * as WordOptions from '../words/Words'; | ||
var getWords = WordOptions.getWords; | ||
export { getWords }; | ||
//# sourceMappingURL=Words.js.map |
@@ -14,5 +14,5 @@ import { Arr, Option } from '@ephox/katamari'; | ||
*/ | ||
declare const sublist: <T extends PRange>(parray: T[], start: number, finish: number) => T[]; | ||
declare const sublist: <T extends PRange>(parray: T[], start: number, finish: number) => never[] | T[]; | ||
declare const find: typeof Arr.find; | ||
export { get, find, inUnit, sublist }; | ||
//# sourceMappingURL=Query.d.ts.map |
import { Fun, Unicode } from '@ephox/katamari'; | ||
import { punctuationStr } from '../words/UnicodeData'; | ||
// \w is a word character | ||
// \' is an apostrophe | ||
// "'" is an apostrophe | ||
// '-' is a hyphen | ||
@@ -10,3 +10,3 @@ // (https://en.wikipedia.org/wiki/List_of_Unicode_characters#Latin_Extended-A) | ||
// \u2018 and \u2019 are the smart quote characters | ||
var charsStr = '\\w' + '\'' + '\\-' + '\\u0100-\\u017F\\u00C0-\\u00FF' + Unicode.zeroWidth + '\\u2018\\u2019'; | ||
var charsStr = '\\w' + "'" + '\\-' + '\\u0100-\\u017F\\u00C0-\\u00FF' + Unicode.zeroWidth + '\\u2018\\u2019'; | ||
var wordbreakStr = '[^' + charsStr + ']'; | ||
@@ -13,0 +13,0 @@ var wordcharStr = '[' + charsStr + ']'; |
export interface PRegExp { | ||
term: () => RegExp; | ||
prefix: (match: RegExpExecArray) => number; | ||
suffix: (match: RegExpExecArray) => number; | ||
readonly term: () => RegExp; | ||
readonly prefix: (match: RegExpExecArray) => number; | ||
readonly suffix: (match: RegExpExecArray) => number; | ||
} | ||
export interface PRange { | ||
start: () => number; | ||
finish: () => number; | ||
readonly start: () => number; | ||
readonly finish: () => number; | ||
} | ||
//# sourceMappingURL=Types.d.ts.map |
@@ -16,3 +16,3 @@ import { Fun, Option } from '@ephox/katamari'; | ||
var word = function (input) { | ||
var regex = '((?:^\'?)|(?:' + Chars.wordbreak() + '+\'?))' + input + '((?:\'?$)|(?:\'?' + Chars.wordbreak() + '+))'; | ||
var regex = "((?:^'?)|(?:" + Chars.wordbreak() + "+'?))" + input + "((?:'?$)|(?:'?" + Chars.wordbreak() + '+))'; | ||
// ASSUMPTION: There are no groups in their input | ||
@@ -19,0 +19,0 @@ var prefix = function (match) { |
@@ -0,5 +1,6 @@ | ||
/* eslint-disable max-len */ | ||
var punctuationStr = '[!-#%-*,-\\/:;?@\\[-\\]_{}\u00A1\u00AB\u00B7\u00BB\u00BF;\u00B7\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1361-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u3008\u3009\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30\u2E31\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]'; | ||
var regExps = { | ||
aletter: '[A-Za-z\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F3\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u10A0-\u10C5\u10D0-\u10FA\u10FC\u1100-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1A00-\u1A16\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BC0-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u24B6-\u24E9\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2D00-\u2D25\u2D30-\u2D65\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u303B\u303C\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790\uA791\uA7A0-\uA7A9\uA7FA-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]', | ||
midnumlet: '[-\'\\.\u2018\u2019\u2024\uFE52\uFF07\uFF0E]', | ||
midnumlet: "[-'\\.\u2018\u2019\u2024\uFE52\uFF07\uFF0E]", | ||
midletter: '[:\u00B7\u00B7\u05F4\u2027\uFE13\uFE55\uFF1A]', | ||
@@ -17,2 +18,3 @@ midnum: '[±+*/,;;\u0589\u060C\u060D\u066C\u07F8\u2044\uFE10\uFE14\uFE50\uFE54\uFF0C\uFF1B]', | ||
}; | ||
/* eslint-enable max-len */ | ||
var characterIndices = { | ||
@@ -19,0 +21,0 @@ ALETTER: 0, |
@@ -9,5 +9,3 @@ import { __assign } from "tslib"; | ||
var PUNCTUATION = UnicodeData.PUNCTUATION; | ||
var isProtocol = function (str) { | ||
return str === 'http' || str === 'https'; | ||
}; | ||
var isProtocol = function (str) { return str === 'http' || str === 'https'; }; | ||
var findWordEnd = function (characters, startIndex) { | ||
@@ -57,8 +55,6 @@ var i; | ||
}; | ||
var getDefaultOptions = function () { | ||
return { | ||
includeWhitespace: false, | ||
includePunctuation: false, | ||
}; | ||
}; | ||
var getDefaultOptions = function () { return ({ | ||
includeWhitespace: false, | ||
includePunctuation: false, | ||
}); }; | ||
var getWords = function (chars, extract, options) { | ||
@@ -65,0 +61,0 @@ options = __assign(__assign({}, getDefaultOptions()), options); |
@@ -20,4 +20,4 @@ import { assert, UnitTest } from '@ephox/bedrock-client'; | ||
'https://icmobile4.rtp.raleigh.ibm.com/files/app#/file/d0f8ed3e-f6d2-4577-8989-fa21ac332a20', | ||
'https://www.google.com.aa/test.htm?$-_.+!*\'()test,test;test:test@=&', | ||
'http://-.~_!$&\'()*+,;=:%40:80%2f::::::@example.com?-.~_!$&\'()*+,;=:%40:80%2f::::::@e#-.~_!$&\'()*+,;=:%40:80%2f::::::@e', | ||
"https://www.google.com.aa/test.htm?$-_.+!*'()test,test;test:test@=&", | ||
"http://-.~_!$&'()*+,;=:%40:80%2f::::::@example.com?-.~_!$&'()*+,;=:%40:80%2f::::::@e#-.~_!$&'()*+,;=:%40:80%2f::::::@e", | ||
'http://xn--domain.com', | ||
@@ -52,3 +52,3 @@ 'www.google.ca/index.htm?id=/bla/bla', | ||
'http://foo.bar/?q=Test%20URL-encoded%20stuff', | ||
'http://-.~_!$&\'()*+,;=:%40:80%2f::::::@example.com', | ||
"http://-.~_!$&'()*+,;=:%40:80%2f::::::@example.com", | ||
'http://1337.net', | ||
@@ -55,0 +55,0 @@ 'http://a.b-c.de', |
@@ -30,4 +30,4 @@ import { assert, UnitTest } from '@ephox/bedrock-client'; | ||
checkAll([], Unicode.zeroWidth + 'dog ', Pattern.safeword('dog')); | ||
checkAll([[3, 7], [10, 14]], 'no it\'s i it\'s done.', Pattern.unsafetoken('it\'s')); | ||
checkAll([[0, 12]], 'catastrophe\'', Pattern.unsafetoken('catastrophe\'')); | ||
checkAll([[3, 7], [10, 14]], "no it's i it's done.", Pattern.unsafetoken("it's")); | ||
checkAll([[0, 12]], "catastrophe'", Pattern.unsafetoken("catastrophe'")); | ||
checkAll([[0, 3]], 'sre', Pattern.unsafeword('sre')); | ||
@@ -34,0 +34,0 @@ checkAll([[0, 3]], 'sre ', Pattern.unsafeword('sre')); |
@@ -5,13 +5,5 @@ import { UnitTest, assert } from '@ephox/bedrock-client'; | ||
UnitTest.test('api.Words.words', function () { | ||
var parseString = function (str) { | ||
return Arr.map(str.split(''), function (char) { | ||
return { char: char }; | ||
}); | ||
}; | ||
var parseString = function (str) { return Arr.map(str.split(''), function (char) { return ({ char: char }); }); }; | ||
// In order to simplify the assertions | ||
var simplifySets = function (charSets) { | ||
return Arr.map(charSets, function (set) { | ||
return Arr.map(set, function (char) { return char.char; }).join(''); | ||
}); | ||
}; | ||
var simplifySets = function (charSets) { return Arr.map(charSets, function (set) { return Arr.map(set, function (char) { return char.char; }).join(''); }); }; | ||
var assertWords = function (expected, input, options) { | ||
@@ -18,0 +10,0 @@ var chars = parseString(input); |
@@ -25,3 +25,3 @@ import { assert, UnitTest } from '@ephox/bedrock-client'; | ||
assert.eq([ALETTER, NUMERIC, ALETTER], classify('a2c'.split(''))); | ||
assert.eq([ALETTER, MIDNUMLET, ALETTER, ALETTER, OTHER, ALETTER, ALETTER, ALETTER, ALETTER, ALETTER], classify('a\'la carte'.split(''))); | ||
assert.eq([ALETTER, MIDNUMLET, ALETTER, ALETTER, OTHER, ALETTER, ALETTER, ALETTER, ALETTER, ALETTER], classify("a'la carte".split(''))); | ||
assert.eq([ALETTER, ALETTER, ALETTER, OTHER, LF, OTHER, ALETTER, ALETTER, ALETTER], classify('one \n two'.split(''))); | ||
@@ -28,0 +28,0 @@ assert.eq([NUMERIC, MIDNUM, NUMERIC, NUMERIC, NUMERIC, MIDNUMLET, NUMERIC, NUMERIC], classify('3,500.10'.split(''))); |
@@ -14,3 +14,3 @@ import { assert, UnitTest } from '@ephox/bedrock-client'; | ||
// should not break some punctuation | ||
assert.eq(false, iwb('can\'t', 2)); | ||
assert.eq(false, iwb("can't", 2)); | ||
assert.eq(false, iwb('can’t', 2)); | ||
@@ -17,0 +17,0 @@ assert.eq(false, iwb('foo.bar', 2)); |
{ | ||
"name": "@ephox/polaris", | ||
"description": "This project does data manipulation on arrays and strings.", | ||
"version": "3.0.48", | ||
"version": "3.0.50", | ||
"repository": { | ||
@@ -22,7 +22,7 @@ "type": "git", | ||
"@ephox/dom-globals": "^1.1.2", | ||
"@ephox/katamari": "^5.0.2", | ||
"@ephox/katamari": "^6.0.1", | ||
"tslib": "^1.9.3" | ||
}, | ||
"devDependencies": { | ||
"@ephox/katamari-assertions": "^1.0.4" | ||
"@ephox/katamari-assertions": "^1.0.6" | ||
}, | ||
@@ -32,3 +32,4 @@ "scripts": { | ||
"test": "bedrock-auto -b phantomjs -d src/test/ts", | ||
"test-manual": "bedrock -d src/test/ts" | ||
"test-manual": "bedrock -d src/test/ts", | ||
"lint": "eslint --config ../../.eslintrc.json src/**/*.ts" | ||
}, | ||
@@ -40,3 +41,3 @@ "author": "Ephox Corporation", | ||
"types": "./lib/main/ts/ephox/polaris/api/Main.d.ts", | ||
"gitHead": "9dc143431fca55ba00d89c7db76bd3ca0167e810" | ||
"gitHead": "ea55538783127ba465b968d89dbf7087c80882a7" | ||
} |
@@ -8,3 +8,3 @@ import { Arr, Option } from '@ephox/katamari'; | ||
type GenerateApi = <T, R extends { finish: () => number; }>(xs: T[], f: (x: T, offset: number) => Option<R>, start?: number) => R[]; | ||
type GenerateApi = <T, R extends { finish: () => number }>(xs: T[], f: (x: T, offset: number) => Option<R>, start?: number) => R[]; | ||
const generate: GenerateApi = Generator.make; | ||
@@ -11,0 +11,0 @@ |
@@ -1,62 +0,60 @@ | ||
type LinkApi = () => RegExp; | ||
const link: LinkApi = function () { | ||
/* | ||
The RegEx parses the following components (https://www.rfc-editor.org/rfc/rfc3986.txt): | ||
scheme:[//[user:password@]host[:port]][/]path[?query][#fragment] | ||
/* | ||
The RegEx parses the following components (https://www.rfc-editor.org/rfc/rfc3986.txt): | ||
foo://example.com:8042/over/there?name=ferret#nose | ||
\_/ \______________/\_________/ \_________/ \__/ | ||
| | | | | | ||
scheme authority path query fragment | ||
scheme:[//[user:password@]host[:port]][/]path[?query][#fragment] | ||
Originally from: | ||
http://blog.mattheworiordan.com/post/13174566389/url-regular-expression-for-links-with-or-without-the | ||
foo://example.com:8042/over/there?name=ferret#nose | ||
\_/ \______________/\_________/ \_________/ \__/ | ||
| | | | | | ||
scheme authority path query fragment | ||
Modified to: | ||
- include port numbers | ||
- allow full stops in email addresses | ||
- allow [-.~*+=!&;:'%@?^${}(),\/\w] after the # | ||
- allow [-.~*+=!&;:'%@?^${}(),\/\w] after the ? | ||
- move allow -_.~*+=!&;:'%@?^${}() in email usernames to the first @ match (TBIO-4809) | ||
- enforce domains to be [A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)* so they can't end in a period (TBIO-4809) | ||
- removed a bunch of escaping, made every group non-capturing (during TBIO-4809) | ||
- colons are only valid when followed directly by // or some text and then @ (TBIO-4867) | ||
- only include the fragment '#' if it has 1 or more trailing matches | ||
- only include the query '?' if it has 1 or more trailing matches | ||
Originally from: | ||
http://blog.mattheworiordan.com/post/13174566389/url-regular-expression-for-links-with-or-without-the | ||
Modified to: | ||
- include port numbers | ||
- allow full stops in email addresses | ||
- allow [-.~*+=!&;:'%@?^${}(),\/\w] after the # | ||
- allow [-.~*+=!&;:'%@?^${}(),\/\w] after the ? | ||
- move allow -_.~*+=!&;:'%@?^${}() in email usernames to the first @ match (TBIO-4809) | ||
- enforce domains to be [A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)* so they can't end in a period (TBIO-4809) | ||
- removed a bunch of escaping, made every group non-capturing (during TBIO-4809) | ||
- colons are only valid when followed directly by // or some text and then @ (TBIO-4867) | ||
- only include the fragment '#' if it has 1 or more trailing matches | ||
- only include the query '?' if it has 1 or more trailing matches | ||
(?: | ||
(?:[A-Za-z]{3,9}:(?:\/\/)) | ||
(?:[-.~*+=!&;:'%@?^${}(),\w]+@)? | ||
[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)* | ||
| | ||
(?:www\. | ||
| | ||
[-;:&=+$,.\w]+@ | ||
) | ||
[A-Za-z0-9-]+ | ||
(?:\.[A-Za-z0-9-]+)* | ||
) | ||
(?::[0-9]+)? | ||
(?:\/[-+~=%.()\/\w]*)? | ||
(?: | ||
\? | ||
(?: | ||
(?:[A-Za-z]{3,9}:(?:\/\/)) | ||
(?:[-.~*+=!&;:'%@?^${}(),\w]+@)? | ||
[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)* | ||
| | ||
(?:www\. | ||
| | ||
[-;:&=+$,.\w]+@ | ||
) | ||
[A-Za-z0-9-]+ | ||
(?:\.[A-Za-z0-9-]+)* | ||
[-.~*+=!&;:'%@?^${}(),\/\w]+ | ||
) | ||
(?::[0-9]+)? | ||
(?:\/[-+~=%.()\/\w]*)? | ||
)? | ||
(?: | ||
# | ||
(?: | ||
\? | ||
(?: | ||
[-.~*+=!&;:'%@?^${}(),\/\w]+ | ||
) | ||
)? | ||
(?: | ||
# | ||
(?: | ||
[-.~*+=!&;:'%@?^${}(),\/\w]+ | ||
) | ||
)? | ||
[-.~*+=!&;:'%@?^${}(),\/\w]+ | ||
) | ||
)? | ||
*/ | ||
const link = (): RegExp => | ||
// eslint-disable-next-line max-len | ||
/(?:(?:[A-Za-z]{3,9}:(?:\/\/))(?:[-.~*+=!&;:'%@?^${}(),\w]+@)?[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)*|(?:www\.|[-;:&=+$,.\w]+@)[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)*)(?::[0-9]+)?(?:\/[-+~=%.()\/\w]*)?(?:\?(?:[-.~*+=!&;:'%@?^${}(),\/\w]+))?(?:#(?:[-.~*+=!&;:'%@?^${}(),\/\w]+))?/g; | ||
*/ | ||
return /(?:(?:[A-Za-z]{3,9}:(?:\/\/))(?:[-.~*+=!&;:'%@?^${}(),\w]+@)?[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)*|(?:www\.|[-;:&=+$,.\w]+@)[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)*)(?::[0-9]+)?(?:\/[-+~=%.()\/\w]*)?(?:\?(?:[-.~*+=!&;:'%@?^${}(),\/\w]+))?(?:#(?:[-.~*+=!&;:'%@?^${}(),\/\w]+))?/g; | ||
}; | ||
type AutolinkApi = () => RegExp; | ||
const autolink: AutolinkApi = function () { | ||
const autolink = (): RegExp => { | ||
/* | ||
@@ -68,3 +66,5 @@ * Takes the link regex, and makes two additions: | ||
* | ||
* We may need to inline the link regex if this refactoring technique causes performance issues; we're assuming browsers can optimise the above regex but not this style. | ||
* We may need to inline the link regex if this refactoring technique causes | ||
* performance issues; we're assuming browsers can optimise the above regex | ||
* but not this style. | ||
* TBIO calls this method every time space or enter is pressed. | ||
@@ -76,5 +76,4 @@ */ | ||
type TokensApi = (value: string, parameters: string[]) => string; | ||
const tokens: TokensApi = function (value: string, parameters: string[]) { | ||
return value.replace(/\{(\d+)\}/g, function (match, contents: string) { | ||
const tokens = (value: string, parameters: string[]): string => | ||
value.replace(/\{(\d+)\}/g, (match, contents: string) => { | ||
const index = parseInt(contents, 10); | ||
@@ -86,4 +85,4 @@ if (parameters[index] === undefined) { | ||
}); | ||
}; | ||
export { | ||
@@ -90,0 +89,0 @@ tokens, |
@@ -8,3 +8,3 @@ import { PRange, PRegExp } from '../pattern/Types'; | ||
type FindmanyApi = <T extends { pattern: () => PRegExp; }>(text: string, targets: T[]) => (T & PRange)[]; | ||
type FindmanyApi = <T extends { pattern: () => PRegExp }>(text: string, targets: T[]) => (T & PRange)[]; | ||
const findmany: FindmanyApi = Sleuth.search; | ||
@@ -11,0 +11,0 @@ |
@@ -12,5 +12,5 @@ import { Adt } from '@ephox/katamari'; | ||
match: <U> (branches: { | ||
include: SplittingHandler<T, U>, | ||
excludeWith: SplittingHandler<T, U>, | ||
excludeWithout: SplittingHandler<T, U>, | ||
include: SplittingHandler<T, U>; | ||
excludeWith: SplittingHandler<T, U>; | ||
excludeWithout: SplittingHandler<T, U>; | ||
}) => U; | ||
@@ -17,0 +17,0 @@ log: (label: string) => void; |
@@ -1,8 +0,8 @@ | ||
import { getWords as getWordsBase, WordOptions } from '../words/Words'; | ||
import * as WordOptions from '../words/Words'; | ||
type GetWordsApi = <T>(chars: T[], extract: (char: T) => string, options?: WordOptions) => T[][]; | ||
const getWords: GetWordsApi = getWordsBase; | ||
type GetWordsApi = <T>(chars: T[], extract: (char: T) => string, options?: WordOptions.WordOptions) => T[][]; | ||
const getWords: GetWordsApi = WordOptions.getWords; | ||
export { | ||
getWords | ||
}; | ||
}; |
@@ -22,3 +22,3 @@ import { Arr, Fun, Option } from '@ephox/katamari'; | ||
len: v.finish(), | ||
list: acc.list.concat([v]) | ||
list: acc.list.concat([ v ]) | ||
}; | ||
@@ -25,0 +25,0 @@ }); |
@@ -5,3 +5,3 @@ import { Fun, Unicode } from '@ephox/katamari'; | ||
// \w is a word character | ||
// \' is an apostrophe | ||
// "'" is an apostrophe | ||
// '-' is a hyphen | ||
@@ -13,3 +13,3 @@ | ||
// \u2018 and \u2019 are the smart quote characters | ||
const charsStr = '\\w' + '\'' + '\\-' + '\\u0100-\\u017F\\u00C0-\\u00FF' + Unicode.zeroWidth + '\\u2018\\u2019'; | ||
const charsStr = '\\w' + `'` + '\\-' + '\\u0100-\\u017F\\u00C0-\\u00FF' + Unicode.zeroWidth + '\\u2018\\u2019'; | ||
const wordbreakStr = '[^' + charsStr + ']'; | ||
@@ -16,0 +16,0 @@ const wordcharStr = '[' + charsStr + ']'; |
export interface PRegExp { | ||
term: () => RegExp; | ||
prefix: (match: RegExpExecArray) => number; | ||
suffix: (match: RegExpExecArray) => number; | ||
readonly term: () => RegExp; | ||
readonly prefix: (match: RegExpExecArray) => number; | ||
readonly suffix: (match: RegExpExecArray) => number; | ||
} | ||
export interface PRange { | ||
start: () => number; | ||
finish: () => number; | ||
} | ||
readonly start: () => number; | ||
readonly finish: () => number; | ||
} |
@@ -18,3 +18,3 @@ import { Fun, Option } from '@ephox/katamari'; | ||
const word = function (input: string) { | ||
const regex = '((?:^\'?)|(?:' + Chars.wordbreak() + '+\'?))' + input + '((?:\'?$)|(?:\'?' + Chars.wordbreak() + '+))'; | ||
const regex = `((?:^'?)|(?:` + Chars.wordbreak() + `+'?))` + input + `((?:'?$)|(?:'?` + Chars.wordbreak() + '+))'; | ||
@@ -21,0 +21,0 @@ // ASSUMPTION: There are no groups in their input |
@@ -7,3 +7,3 @@ import { Arr } from '@ephox/katamari'; | ||
const splits = function (value: string, indices: number[]): string[] { | ||
if (indices.length === 0) { return [value]; } | ||
if (indices.length === 0) { return [ value ]; } | ||
@@ -16,3 +16,3 @@ const divisions = Arr.foldl(indices, function (acc, x) { | ||
prev: x, | ||
values: acc.values.concat([part]) | ||
values: acc.values.concat([ part ]) | ||
}; | ||
@@ -19,0 +19,0 @@ }, { prev: 0, values: [] as string[] }); |
/* eslint-disable max-len */ | ||
const punctuationStr = '[!-#%-*,-\\/:;?@\\[-\\]_{}\u00A1\u00AB\u00B7\u00BB\u00BF;\u00B7\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1361-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u3008\u3009\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30\u2E31\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]'; | ||
@@ -6,3 +7,3 @@ | ||
aletter: '[A-Za-z\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F3\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u10A0-\u10C5\u10D0-\u10FA\u10FC\u1100-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1A00-\u1A16\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BC0-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u24B6-\u24E9\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2D00-\u2D25\u2D30-\u2D65\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u303B\u303C\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790\uA791\uA7A0-\uA7A9\uA7FA-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]', | ||
midnumlet: '[-\'\\.\u2018\u2019\u2024\uFE52\uFF07\uFF0E]', | ||
midnumlet: `[-'\\.\u2018\u2019\u2024\uFE52\uFF07\uFF0E]`, | ||
midletter: '[:\u00B7\u00B7\u05F4\u2027\uFE13\uFE55\uFF1A]', | ||
@@ -20,2 +21,3 @@ midnum: '[±+*/,;;\u0589\u060C\u060D\u066C\u07F8\u2044\uFE10\uFE14\uFE50\uFE54\uFF0C\uFF1B]', | ||
}; | ||
/* eslint-enable max-len */ | ||
@@ -22,0 +24,0 @@ const characterIndices = { |
@@ -10,5 +10,3 @@ import { CharacterMap, classify } from './StringMapper'; | ||
const isProtocol = (str: string): boolean => { | ||
return str === 'http' || str === 'https'; | ||
}; | ||
const isProtocol = (str: string): boolean => str === 'http' || str === 'https'; | ||
@@ -76,8 +74,6 @@ const findWordEnd = (characters: string[], startIndex: number) => { | ||
const getDefaultOptions = (): WordOptions => { | ||
return { | ||
includeWhitespace: false, | ||
includePunctuation: false, | ||
}; | ||
}; | ||
const getDefaultOptions = (): WordOptions => ({ | ||
includeWhitespace: false, | ||
includePunctuation: false, | ||
}); | ||
@@ -84,0 +80,0 @@ const getWords = <T>(chars: T[], extract: (char: T) => string, options?: WordOptions): T[][] => { |
@@ -13,10 +13,10 @@ import { assert, UnitTest } from '@ephox/bedrock-client'; | ||
check(['a', 'b', 'c', 'd', 'e'], 'b', 'd', comparator, ['b', 'c', 'd']); | ||
check(['a', 'b', 'c', 'd', 'e'], 'a', 'e', comparator, ['a', 'b', 'c', 'd', 'e']); | ||
check(['a'], 'a', 'a', comparator, ['a']); | ||
check([ 'a', 'b', 'c', 'd', 'e' ], 'b', 'd', comparator, [ 'b', 'c', 'd' ]); | ||
check([ 'a', 'b', 'c', 'd', 'e' ], 'a', 'e', comparator, [ 'a', 'b', 'c', 'd', 'e' ]); | ||
check([ 'a' ], 'a', 'a', comparator, [ 'a' ]); | ||
check([], '1', '3', comparator, []); | ||
check(['a', 'b', 'c'], 'd', 'e', comparator, ['a', 'b', 'c']); | ||
check(['a', 'b', 'c'], 'd', 'b', comparator, ['a', 'b']); | ||
check(['a', 'b', 'c'], 'b', 'g', comparator, ['b', 'c']); | ||
check(['a', 'b', 'c'], 'b', 'b', comparator, ['b']); | ||
check([ 'a', 'b', 'c' ], 'd', 'e', comparator, [ 'a', 'b', 'c' ]); | ||
check([ 'a', 'b', 'c' ], 'd', 'b', comparator, [ 'a', 'b' ]); | ||
check([ 'a', 'b', 'c' ], 'b', 'g', comparator, [ 'b', 'c' ]); | ||
check([ 'a', 'b', 'c' ], 'b', 'b', comparator, [ 'b' ]); | ||
}); |
@@ -18,5 +18,5 @@ import { Assert, UnitTest } from '@ephox/bedrock-client'; | ||
check([], [], is(0)); | ||
check([], [1], is(1)); | ||
check([1], [1, 2], is(2)); | ||
check([1, 2, 3], [1, 2, 3, 4], is(4)); | ||
check([], [ 1 ], is(1)); | ||
check([ 1 ], [ 1, 2 ], is(2)); | ||
check([ 1, 2, 3 ], [ 1, 2, 3, 4 ], is(4)); | ||
}); | ||
@@ -30,3 +30,3 @@ | ||
(a1, a2) => { | ||
const input = a1.concat([-1]).concat(a2); | ||
const input = a1.concat([ -1 ]).concat(a2); | ||
Assert.eq('sliceby', | ||
@@ -33,0 +33,0 @@ a1, |
@@ -13,5 +13,5 @@ import { assert, UnitTest } from '@ephox/bedrock-client'; | ||
check([], [], Fun.always); | ||
check([[1]], [1], Fun.never); | ||
check([[1, 2, 3]], [1, 2, 3], Fun.never); | ||
check([[1], [2, 3], [4, 5, 6], [7], [8]], [1, '|', 2, 3, '|', 4, 5, 6, '|', 7, '|', '|', 8], function (x) { | ||
check([[ 1 ]], [ 1 ], Fun.never); | ||
check([[ 1, 2, 3 ]], [ 1, 2, 3 ], Fun.never); | ||
check([[ 1 ], [ 2, 3 ], [ 4, 5, 6 ], [ 7 ], [ 8 ]], [ 1, '|', 2, 3, '|', 4, 5, 6, '|', 7, '|', '|', 8 ], function (x) { | ||
return x === '|'; | ||
@@ -18,0 +18,0 @@ }); |
@@ -19,9 +19,9 @@ import { UnitTest } from '@ephox/bedrock-client'; | ||
check(Option.none(), [], null); | ||
check(Option.some('a'), ['a'], 'a'); | ||
check(Option.some('a'), ['a'], 'a'); | ||
check(Option.none(), ['a'], 'b'); | ||
check(Option.some('cat'), ['this', 'was', 'a', 'cat', 'today', 'and', 'tomorrow'], 'cat'); | ||
check(Option.some('tomorrow'), ['this', 'was', 'a', 'cat', 'today', 'and', 'tomorrow'], 'tomorrow'); | ||
check(Option.none(), ['this', 'was', 'a', 'cat', 'today', 'and', 'tomorrow'], 'yesterday'); | ||
check(Option.some('this'), ['this', 'was', 'a', 'cat', 'today', 'and', 'tomorrow'], 'this'); | ||
check(Option.some('a'), [ 'a' ], 'a'); | ||
check(Option.some('a'), [ 'a' ], 'a'); | ||
check(Option.none(), [ 'a' ], 'b'); | ||
check(Option.some('cat'), [ 'this', 'was', 'a', 'cat', 'today', 'and', 'tomorrow' ], 'cat'); | ||
check(Option.some('tomorrow'), [ 'this', 'was', 'a', 'cat', 'today', 'and', 'tomorrow' ], 'tomorrow'); | ||
check(Option.none(), [ 'this', 'was', 'a', 'cat', 'today', 'and', 'tomorrow' ], 'yesterday'); | ||
check(Option.some('this'), [ 'this', 'was', 'a', 'cat', 'today', 'and', 'tomorrow' ], 'this'); | ||
}); |
@@ -15,8 +15,8 @@ import { UnitTest } from '@ephox/bedrock-client'; | ||
check(Option.none(), [], 0); | ||
check(Option.some('a'), ['a'], 0); | ||
check(Option.some('a'), ['a'], 1); | ||
check(Option.none(), ['a'], 2); | ||
check(Option.some('cat'), ['this', 'was', 'a', 'cat', 'today', 'and', 'tomorrow'], 'thiswasaca'.length); | ||
check(Option.some('tomorrow'), ['this', 'was', 'a', 'cat', 'today', 'and', 'tomorrow'], 'thiswasacattodayandto'.length); | ||
check(Option.none(), ['this', 'was', 'a', 'cat', 'today', 'and', 'tomorrow'], 'thiswasacattodayandtomorrow-'.length); | ||
check(Option.some('a'), [ 'a' ], 0); | ||
check(Option.some('a'), [ 'a' ], 1); | ||
check(Option.none(), [ 'a' ], 2); | ||
check(Option.some('cat'), [ 'this', 'was', 'a', 'cat', 'today', 'and', 'tomorrow' ], 'thiswasaca'.length); | ||
check(Option.some('tomorrow'), [ 'this', 'was', 'a', 'cat', 'today', 'and', 'tomorrow' ], 'thiswasacattodayandto'.length); | ||
check(Option.none(), [ 'this', 'was', 'a', 'cat', 'today', 'and', 'tomorrow' ], 'thiswasacattodayandtomorrow-'.length); | ||
}); |
@@ -21,4 +21,4 @@ import { assert, UnitTest } from '@ephox/bedrock-client'; | ||
'https://icmobile4.rtp.raleigh.ibm.com/files/app#/file/d0f8ed3e-f6d2-4577-8989-fa21ac332a20', | ||
'https://www.google.com.aa/test.htm?$-_.+!*\'()test,test;test:test@=&', | ||
'http://-.~_!$&\'()*+,;=:%40:80%2f::::::@example.com?-.~_!$&\'()*+,;=:%40:80%2f::::::@e#-.~_!$&\'()*+,;=:%40:80%2f::::::@e', | ||
`https://www.google.com.aa/test.htm?$-_.+!*'()test,test;test:test@=&`, | ||
`http://-.~_!$&'()*+,;=:%40:80%2f::::::@example.com?-.~_!$&'()*+,;=:%40:80%2f::::::@e#-.~_!$&'()*+,;=:%40:80%2f::::::@e`, | ||
'http://xn--domain.com', | ||
@@ -54,3 +54,3 @@ 'www.google.ca/index.htm?id=/bla/bla', | ||
'http://foo.bar/?q=Test%20URL-encoded%20stuff', | ||
'http://-.~_!$&\'()*+,;=:%40:80%2f::::::@example.com', | ||
`http://-.~_!$&'()*+,;=:%40:80%2f::::::@example.com`, | ||
'http://1337.net', | ||
@@ -153,3 +153,3 @@ 'http://a.b-c.de', | ||
const autolinks = {// Ignore trailing: \-_.~*+=!&;:\'%@?#^${}(), | ||
const autolinks = { // Ignore trailing: \-_.~*+=!&;:\'%@?#^${}(), | ||
'http://google.com\\': 'http://google.com', | ||
@@ -156,0 +156,0 @@ // 'http://google.com-': 'http://google.com', // TODO: change Regexes so domain cant end in '-' |
@@ -17,3 +17,3 @@ import { assert, UnitTest } from '@ephox/bedrock-client'; | ||
}; | ||
const testData: (pattern: PRegExp, name: string) => { pattern: () => PRegExp, name: () => string } = Struct.immutable('pattern', 'name'); | ||
const testData: (pattern: PRegExp, name: string) => { pattern: () => PRegExp; name: () => string } = Struct.immutable('pattern', 'name'); | ||
@@ -31,29 +31,29 @@ const checkMany = function (expected: [number, number, string][], text: string, targets: ReturnType<typeof testData>[]) { | ||
checkAll([], 'eskimo', Pattern.unsafetoken('hi')); | ||
checkAll([[1, 7]], ' cattle', Pattern.unsafetoken('cattle')); | ||
checkAll([[ 1, 7 ]], ' cattle', Pattern.unsafetoken('cattle')); | ||
checkAll([], 'acattle', Pattern.unsafeword('cattle')); | ||
checkAll([[1, 7]], ' cattle', Pattern.unsafeword('cattle')); | ||
checkAll([[ 1, 7 ]], ' cattle', Pattern.unsafeword('cattle')); | ||
checkAll([], Unicode.zeroWidth + 'dog ', Pattern.safeword('dog')); | ||
checkAll([[3, 7], [10, 14]], 'no it\'s i it\'s done.', Pattern.unsafetoken('it\'s')); | ||
checkAll([[0, 12]], 'catastrophe\'', Pattern.unsafetoken('catastrophe\'')); | ||
checkAll([[ 3, 7 ], [ 10, 14 ]], `no it's i it's done.`, Pattern.unsafetoken(`it's`)); | ||
checkAll([[ 0, 12 ]], `catastrophe'`, Pattern.unsafetoken(`catastrophe'`)); | ||
checkAll([[0, 3]], 'sre', Pattern.unsafeword('sre')); | ||
checkAll([[0, 3]], 'sre ', Pattern.unsafeword('sre')); | ||
checkAll([[1, 4]], ' sre', Pattern.unsafeword('sre')); | ||
checkAll([[1, 4]], ' sre ', Pattern.unsafeword('sre')); | ||
checkAll([[0, 3], [4, 7]], 'sre sre', Pattern.unsafeword('sre')); | ||
checkAll([[1, 4], [5, 8]], ' sre sre', Pattern.unsafeword('sre')); | ||
checkAll([[1, 4], [5, 8], [9, 12]], ' sre sre sre', Pattern.unsafeword('sre')); | ||
checkAll([[0, 3], [4, 7], [8, 11]], 'sre sre sre ', Pattern.unsafeword('sre')); | ||
checkAll([[1, 4], [5, 8], [9, 12]], ' sre sre sre ', Pattern.unsafeword('sre')); | ||
checkAll([[ 0, 3 ]], 'sre', Pattern.unsafeword('sre')); | ||
checkAll([[ 0, 3 ]], 'sre ', Pattern.unsafeword('sre')); | ||
checkAll([[ 1, 4 ]], ' sre', Pattern.unsafeword('sre')); | ||
checkAll([[ 1, 4 ]], ' sre ', Pattern.unsafeword('sre')); | ||
checkAll([[ 0, 3 ], [ 4, 7 ]], 'sre sre', Pattern.unsafeword('sre')); | ||
checkAll([[ 1, 4 ], [ 5, 8 ]], ' sre sre', Pattern.unsafeword('sre')); | ||
checkAll([[ 1, 4 ], [ 5, 8 ], [ 9, 12 ]], ' sre sre sre', Pattern.unsafeword('sre')); | ||
checkAll([[ 0, 3 ], [ 4, 7 ], [ 8, 11 ]], 'sre sre sre ', Pattern.unsafeword('sre')); | ||
checkAll([[ 1, 4 ], [ 5, 8 ], [ 9, 12 ]], ' sre sre sre ', Pattern.unsafeword('sre')); | ||
checkAll([['this '.length, 'this e'.length + Unicode.zeroWidth.length + 'nds'.length]], 'this e' + Unicode.zeroWidth + 'nds here', Pattern.unsafeword('e' + Unicode.zeroWidth + 'nds')); | ||
checkAll([[ 'this '.length, 'this e'.length + Unicode.zeroWidth.length + 'nds'.length ]], 'this e' + Unicode.zeroWidth + 'nds here', Pattern.unsafeword('e' + Unicode.zeroWidth + 'nds')); | ||
const prefix = Safe.sanitise('['); | ||
const suffix = Safe.sanitise(']'); | ||
checkAll([[1, 5]], ' [wo] and more', Pattern.unsafetoken(prefix + '[^' + suffix + ']*' + suffix)); | ||
checkAll([[ 1, 5 ]], ' [wo] and more', Pattern.unsafetoken(prefix + '[^' + suffix + ']*' + suffix)); | ||
checkMany([], '', []); | ||
checkMany([ | ||
[1, 3, 'alpha'] | ||
[ 1, 3, 'alpha' ] | ||
], ' aa bb cc', [ | ||
@@ -64,5 +64,5 @@ testData(Pattern.safeword('aa'), 'alpha') | ||
checkMany([ | ||
[0, 2, 'alpha'], | ||
[3, 6, 'beta'], | ||
[8, 18, 'gamma'] | ||
[ 0, 2, 'alpha' ], | ||
[ 3, 6, 'beta' ], | ||
[ 8, 18, 'gamma' ] | ||
], 'aa bbb abcdefghij', [ | ||
@@ -69,0 +69,0 @@ testData(Pattern.safeword('bbb'), 'beta'), |
@@ -10,14 +10,6 @@ import { UnitTest, assert } from '@ephox/bedrock-client'; | ||
const parseString = (str: string): Char[] => { | ||
return Arr.map(str.split(''), (char) => { | ||
return { char }; | ||
}); | ||
}; | ||
const parseString = (str: string): Char[] => Arr.map(str.split(''), (char) => ({ char })); | ||
// In order to simplify the assertions | ||
const simplifySets = (charSets: Char[][]): string[] => { | ||
return Arr.map(charSets, (set) => { | ||
return Arr.map(set, (char) => char.char).join(''); | ||
}); | ||
}; | ||
const simplifySets = (charSets: Char[][]): string[] => Arr.map(charSets, (set) => Arr.map(set, (char) => char.char).join('')); | ||
@@ -33,33 +25,33 @@ const assertWords = (expected: string[], input: string, options?: WordOptions) => { | ||
// splits words on whitespace | ||
assertWords(['hello', 'world'], 'hello world'); | ||
assertWords([ 'hello', 'world' ], 'hello world'); | ||
// keeps whitespace with setting | ||
assertWords(['a', ' ', ' ', ' ', 'b'], 'a b', { includeWhitespace: true }); | ||
assertWords([ 'a', ' ', ' ', ' ', 'b' ], 'a b', { includeWhitespace: true }); | ||
// removes punctuation by default | ||
assertWords(['a', 'b'], 'a .... b'); | ||
assertWords([ 'a', 'b' ], 'a .... b'); | ||
// but keeps with setting | ||
assertWords(['a', '.', '.', '.', '.', 'b'], 'a .... b', { includePunctuation: true }); | ||
assertWords([ 'a', '.', '.', '.', '.', 'b' ], 'a .... b', { includePunctuation: true }); | ||
// does not split on katakana words | ||
assertWords(['僕', 'の', '名', '前', 'は', 'マティアス'], '僕の名前はマティアス'); | ||
assertWords([ '僕', 'の', '名', '前', 'は', 'マティアス' ], '僕の名前はマティアス'); | ||
// does not split on numeric separators | ||
assertWords(['the', 'price', 'is', '3,500.50'], 'the price is 3,500.50'); | ||
assertWords([ 'the', 'price', 'is', '3,500.50' ], 'the price is 3,500.50'); | ||
assertWords(['http://www.google.com'], 'http://www.google.com'); | ||
assertWords(['https://www.google.com'], 'https://www.google.com'); | ||
assertWords(['http://www.google.com', 'abc'], 'http://www.google.com abc'); | ||
assertWords(['bengt@mail.se'], 'bengt@mail.se'); | ||
assertWords(['bengt@mail.se', 'abc'], 'bengt@mail.se abc'); | ||
assertWords(['1+1*1/1⋉1=1'], '1+1*1/1⋉1=1'); | ||
assertWords(['50-10'], '50-10'); | ||
assertWords(['jack-in-the-box'], 'jack-in-the-box'); | ||
assertWords(['n=13'], 'n=13'); | ||
assertWords(['n<13'], 'n<13'); | ||
assertWords(['1<13'], '1<13'); | ||
assertWords(['n>13'], 'n>13'); | ||
assertWords(['1>13'], '1>13'); | ||
assertWords(['n≥13'], 'n≥13'); | ||
assertWords(['1≥13'], '1≥13'); | ||
assertWords(['n≤13'], 'n≤13'); | ||
assertWords(['1≤13'], '1≤13'); | ||
assertWords(['42.6±4.2'], '42.6±4.2'); | ||
assertWords(['ab'], 'a\ufeffb'); | ||
assertWords([ 'http://www.google.com' ], 'http://www.google.com'); | ||
assertWords([ 'https://www.google.com' ], 'https://www.google.com'); | ||
assertWords([ 'http://www.google.com', 'abc' ], 'http://www.google.com abc'); | ||
assertWords([ 'bengt@mail.se' ], 'bengt@mail.se'); | ||
assertWords([ 'bengt@mail.se', 'abc' ], 'bengt@mail.se abc'); | ||
assertWords([ '1+1*1/1⋉1=1' ], '1+1*1/1⋉1=1'); | ||
assertWords([ '50-10' ], '50-10'); | ||
assertWords([ 'jack-in-the-box' ], 'jack-in-the-box'); | ||
assertWords([ 'n=13' ], 'n=13'); | ||
assertWords([ 'n<13' ], 'n<13'); | ||
assertWords([ '1<13' ], '1<13'); | ||
assertWords([ 'n>13' ], 'n>13'); | ||
assertWords([ '1>13' ], '1>13'); | ||
assertWords([ 'n≥13' ], 'n≥13'); | ||
assertWords([ '1≥13' ], '1≥13'); | ||
assertWords([ 'n≤13' ], 'n≤13'); | ||
assertWords([ '1≤13' ], '1≤13'); | ||
assertWords([ '42.6±4.2' ], '42.6±4.2'); | ||
assertWords([ 'ab' ], 'a\ufeffb'); | ||
}); |
@@ -26,18 +26,18 @@ import { assert, UnitTest } from '@ephox/bedrock-client'; | ||
const testClassify = function () { | ||
assert.eq([ALETTER, ALETTER, ALETTER], classify('abc'.split(''))); | ||
assert.eq([ALETTER, ALETTER, ALETTER], classify('åäö'.split(''))); | ||
assert.eq([ALETTER, NUMERIC, ALETTER], classify('a2c'.split(''))); | ||
assert.eq([ALETTER, MIDNUMLET, ALETTER, ALETTER, OTHER, ALETTER, ALETTER, ALETTER, ALETTER, ALETTER], classify('a\'la carte'.split(''))); | ||
assert.eq([ALETTER, ALETTER, ALETTER, OTHER, LF, OTHER, ALETTER, ALETTER, ALETTER], classify('one \n two'.split(''))); | ||
assert.eq([NUMERIC, MIDNUM, NUMERIC, NUMERIC, NUMERIC, MIDNUMLET, NUMERIC, NUMERIC], classify('3,500.10'.split(''))); | ||
assert.eq([OTHER, KATAKANA, KATAKANA], classify('愛ラブ'.split(''))); | ||
assert.eq([OTHER, OTHER], classify('ねこ'.split(''))); | ||
assert.eq([MIDLETTER], classify('·'.split(''))); | ||
assert.eq([EXTENDNUMLET, MIDNUMLET, MIDNUM, MIDNUM, MIDNUM, MIDNUM, EXTENDNUMLET, EXTENDNUMLET], classify('=-+±*/⋉≥'.split(''))); | ||
assert.eq([CR], classify('\r'.split(''))); | ||
assert.eq([EXTEND], classify('̀'.split(''))); | ||
assert.eq([NEWLINE], classify('\x0B'.split(''))); | ||
assert.eq([FORMAT], classify(''.split(''))); | ||
assert.eq([EXTENDNUMLET], classify('︴'.split(''))); | ||
assert.eq([AT], classify('@'.split(''))); | ||
assert.eq([ ALETTER, ALETTER, ALETTER ], classify('abc'.split(''))); | ||
assert.eq([ ALETTER, ALETTER, ALETTER ], classify('åäö'.split(''))); | ||
assert.eq([ ALETTER, NUMERIC, ALETTER ], classify('a2c'.split(''))); | ||
assert.eq([ ALETTER, MIDNUMLET, ALETTER, ALETTER, OTHER, ALETTER, ALETTER, ALETTER, ALETTER, ALETTER ], classify(`a'la carte`.split(''))); | ||
assert.eq([ ALETTER, ALETTER, ALETTER, OTHER, LF, OTHER, ALETTER, ALETTER, ALETTER ], classify('one \n two'.split(''))); | ||
assert.eq([ NUMERIC, MIDNUM, NUMERIC, NUMERIC, NUMERIC, MIDNUMLET, NUMERIC, NUMERIC ], classify('3,500.10'.split(''))); | ||
assert.eq([ OTHER, KATAKANA, KATAKANA ], classify('愛ラブ'.split(''))); | ||
assert.eq([ OTHER, OTHER ], classify('ねこ'.split(''))); | ||
assert.eq([ MIDLETTER ], classify('·'.split(''))); | ||
assert.eq([ EXTENDNUMLET, MIDNUMLET, MIDNUM, MIDNUM, MIDNUM, MIDNUM, EXTENDNUMLET, EXTENDNUMLET ], classify('=-+±*/⋉≥'.split(''))); | ||
assert.eq([ CR ], classify('\r'.split(''))); | ||
assert.eq([ EXTEND ], classify('̀'.split(''))); | ||
assert.eq([ NEWLINE ], classify('\x0B'.split(''))); | ||
assert.eq([ FORMAT ], classify(''.split(''))); | ||
assert.eq([ EXTENDNUMLET ], classify('︴'.split(''))); | ||
assert.eq([ AT ], classify('@'.split(''))); | ||
}; | ||
@@ -44,0 +44,0 @@ |
@@ -17,3 +17,3 @@ import { assert, UnitTest } from '@ephox/bedrock-client'; | ||
// should not break some punctuation | ||
assert.eq(false, iwb('can\'t', 2)); | ||
assert.eq(false, iwb(`can't`, 2)); | ||
assert.eq(false, iwb('can’t', 2)); | ||
@@ -20,0 +20,0 @@ assert.eq(false, iwb('foo.bar', 2)); |
@@ -18,5 +18,4 @@ import { Arr, Fun, Option } from '@ephox/katamari'; | ||
const make = function (values: string[]) { | ||
return PositionArray.generate(values, generator); | ||
}; | ||
const make = (values: string[]): PArrayTestItem[] => | ||
PositionArray.generate(values, generator); | ||
@@ -32,2 +31,2 @@ const dump = function (parray: PArrayTestItem[]) { | ||
dump | ||
}; | ||
}; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
261679
3576
+ Added@ephox/katamari@6.1.2(transitive)
- Removed@ephox/katamari@5.0.2(transitive)
Updated@ephox/katamari@^6.0.1