rebuilt with correct sdk

This commit is contained in:
or-else
2024-05-18 18:07:14 -07:00
parent 944cf32bb9
commit ba81261ee8
9 changed files with 166 additions and 80 deletions
+79 -51
View File
@@ -15,7 +15,7 @@
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-intl": "^6.4.4", "react-intl": "^6.4.4",
"tinode-sdk": "^0.22.12", "tinode-sdk": "^0.22.13",
"webm-duration-fix": "^1.0.4" "webm-duration-fix": "^1.0.4"
}, },
"devDependencies": { "devDependencies": {
@@ -2322,9 +2322,9 @@
"integrity": "sha512-EnfRJvrnzkHwN3BPMCayCFT5lCqInzg3RdlRsDjDvB1EJli6Usj26T6lJ67BU2UcYXBS5xcp1Wj4+zRzj2NaZg==" "integrity": "sha512-EnfRJvrnzkHwN3BPMCayCFT5lCqInzg3RdlRsDjDvB1EJli6Usj26T6lJ67BU2UcYXBS5xcp1Wj4+zRzj2NaZg=="
}, },
"node_modules/@formatjs/cli": { "node_modules/@formatjs/cli": {
"version": "6.2.9", "version": "6.2.10",
"resolved": "https://registry.npmjs.org/@formatjs/cli/-/cli-6.2.9.tgz", "resolved": "https://registry.npmjs.org/@formatjs/cli/-/cli-6.2.10.tgz",
"integrity": "sha512-YH09kY6oufPdNDIwva/rC7wyg/ptJG6hRZ768eJEafiBR5R1VV1pKFmx106FV5WT7nzBm8Xf4Td+8+Mu+DtQsg==", "integrity": "sha512-JdFw5oqPNB4qahie2Mcg6yXxyUJouN60OaEaejjMtGsgoPbFjS7X/9/Nj5vW+rAUTi0UNbOW+JPW9XNx6EuoHw==",
"dev": true, "dev": true,
"bin": { "bin": {
"formatjs": "bin/formatjs" "formatjs": "bin/formatjs"
@@ -2333,9 +2333,37 @@
"node": ">= 16" "node": ">= 16"
}, },
"peerDependencies": { "peerDependencies": {
"@glimmer/env": "^0.1.7",
"@glimmer/reference": "^0.91.1",
"@glimmer/syntax": "^0.91.1",
"@glimmer/validator": "^0.91.1",
"@vue/compiler-core": "^3.4.0",
"content-tag": "^2.0.1",
"ember-template-recast": "^6.1.4",
"vue": "^3.4.0" "vue": "^3.4.0"
}, },
"peerDependenciesMeta": { "peerDependenciesMeta": {
"@glimmer/env": {
"optional": true
},
"@glimmer/reference": {
"optional": true
},
"@glimmer/syntax": {
"optional": true
},
"@glimmer/validator": {
"optional": true
},
"@vue/compiler-core": {
"optional": true
},
"content-tag": {
"optional": true
},
"ember-template-recast": {
"optional": true
},
"vue": { "vue": {
"optional": true "optional": true
} }
@@ -2378,16 +2406,16 @@
} }
}, },
"node_modules/@formatjs/intl": { "node_modules/@formatjs/intl": {
"version": "2.10.1", "version": "2.10.2",
"resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.10.1.tgz", "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.10.2.tgz",
"integrity": "sha512-dsLG15U7xDi8yzKf4hcAWSsCaez3XrjTO2oaRHPyHtXLm1aEzYbDw6bClo/HMHu+iwS5GbDqT3DV+hYP2ylScg==", "integrity": "sha512-raPGWr3JRv3neXV78SqPFrGC05fIbhhNzVghHNxFde27ls2KkXiMhtP7HBybjGpikVSjjhdhaZto+4p1vmm9bQ==",
"dependencies": { "dependencies": {
"@formatjs/ecma402-abstract": "1.18.2", "@formatjs/ecma402-abstract": "1.18.2",
"@formatjs/fast-memoize": "2.2.0", "@formatjs/fast-memoize": "2.2.0",
"@formatjs/icu-messageformat-parser": "2.7.6", "@formatjs/icu-messageformat-parser": "2.7.6",
"@formatjs/intl-displaynames": "6.6.6", "@formatjs/intl-displaynames": "6.6.6",
"@formatjs/intl-listformat": "7.5.5", "@formatjs/intl-listformat": "7.5.5",
"intl-messageformat": "10.5.11", "intl-messageformat": "10.5.12",
"tslib": "^2.4.0" "tslib": "^2.4.0"
}, },
"peerDependencies": { "peerDependencies": {
@@ -2533,13 +2561,13 @@
} }
}, },
"node_modules/@grpc/proto-loader": { "node_modules/@grpc/proto-loader": {
"version": "0.7.12", "version": "0.7.13",
"resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.12.tgz", "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz",
"integrity": "sha512-DCVwMxqYzpUCiDMl7hQ384FqP4T3DbNpXU8pt681l3UWCip1WUiD5JrkImUwCB9a7f2cq4CUTmi5r/xIMRPY1Q==", "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==",
"dependencies": { "dependencies": {
"lodash.camelcase": "^4.3.0", "lodash.camelcase": "^4.3.0",
"long": "^5.0.0", "long": "^5.0.0",
"protobufjs": "^7.2.4", "protobufjs": "^7.2.5",
"yargs": "^17.7.2" "yargs": "^17.7.2"
}, },
"bin": { "bin": {
@@ -3072,15 +3100,15 @@
} }
}, },
"node_modules/ajv": { "node_modules/ajv": {
"version": "8.12.0", "version": "8.13.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz",
"integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"fast-deep-equal": "^3.1.1", "fast-deep-equal": "^3.1.3",
"json-schema-traverse": "^1.0.0", "json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2", "require-from-string": "^2.0.2",
"uri-js": "^4.2.2" "uri-js": "^4.4.1"
}, },
"funding": { "funding": {
"type": "github", "type": "github",
@@ -3385,9 +3413,9 @@
} }
}, },
"node_modules/caniuse-lite": { "node_modules/caniuse-lite": {
"version": "1.0.30001614", "version": "1.0.30001616",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001614.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001616.tgz",
"integrity": "sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog==", "integrity": "sha512-RHVYKov7IcdNjVHJFNY/78RdG4oGVjbayxv8u5IO74Wv7Hlq4PnJE6mo/OjFijjVFNy5ijnCt6H3IIo4t+wfEw==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@@ -3973,9 +4001,9 @@
"integrity": "sha512-HgNlIsRFP6D9VKU5atCeHRJY7XkJP8bOe8yEhd8NB7B3b4++VWTyauz6g650iiPmLfPLGlVpoJmGSgMfXDYusg==" "integrity": "sha512-HgNlIsRFP6D9VKU5atCeHRJY7XkJP8bOe8yEhd8NB7B3b4++VWTyauz6g650iiPmLfPLGlVpoJmGSgMfXDYusg=="
}, },
"node_modules/electron-to-chromium": { "node_modules/electron-to-chromium": {
"version": "1.4.751", "version": "1.4.759",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.751.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.759.tgz",
"integrity": "sha512-2DEPi++qa89SMGRhufWTiLmzqyuGmNF3SK4+PQetW1JKiZdEpF4XQonJXJCzyuYSA6mauiMhbyVhqYAP45Hvfw==", "integrity": "sha512-qZJc+zsuI+/5UjOSFnpkJBwwLMH1AZgyKqJ7LUNnRsB7v/cDjMu9DvXgp9kH6PTTZxjnPXGp2Uhurw+2Ll4Hjg==",
"dev": true "dev": true
}, },
"node_modules/emoji-regex": { "node_modules/emoji-regex": {
@@ -3985,9 +4013,9 @@
"dev": true "dev": true
}, },
"node_modules/enhanced-resolve": { "node_modules/enhanced-resolve": {
"version": "5.16.0", "version": "5.16.1",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz",
"integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"graceful-fs": "^4.2.4", "graceful-fs": "^4.2.4",
@@ -4701,9 +4729,9 @@
} }
}, },
"node_modules/intl-messageformat": { "node_modules/intl-messageformat": {
"version": "10.5.11", "version": "10.5.12",
"resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.5.11.tgz", "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.5.12.tgz",
"integrity": "sha512-eYq5fkFBVxc7GIFDzpFQkDOZgNayNTQn4Oufe8jw6YY6OHVw70/4pA3FyCsQ0Gb2DnvEJEMmN2tOaXUGByM+kg==", "integrity": "sha512-izl0uxhy/melhw8gP2r8pGiVieviZmM4v5Oqx3c1/R7g9cwER2smmGfSjcIsp8Y3Q53bfciL/gkxacJRx/dUvg==",
"dependencies": { "dependencies": {
"@formatjs/ecma402-abstract": "1.18.2", "@formatjs/ecma402-abstract": "1.18.2",
"@formatjs/fast-memoize": "2.2.0", "@formatjs/fast-memoize": "2.2.0",
@@ -4952,9 +4980,9 @@
} }
}, },
"node_modules/libphonenumber-js": { "node_modules/libphonenumber-js": {
"version": "1.10.61", "version": "1.11.1",
"resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.61.tgz", "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.11.1.tgz",
"integrity": "sha512-TsQsyzDttDvvzWNkbp/i0fVbzTGJIG0mUu/uNalIaRQEYeJxVQ/FPg+EJgSqfSXezREjM0V3RZ8cLVsKYhhw0Q==" "integrity": "sha512-Wze1LPwcnzvcKGcRHFGFECTaLzxOtujwpf924difr5zniyYv1C2PiW0419qDR7m8lKDxsImu5mwxFuXhXpjmvw=="
}, },
"node_modules/lilconfig": { "node_modules/lilconfig": {
"version": "3.1.1", "version": "3.1.1",
@@ -5111,9 +5139,9 @@
} }
}, },
"node_modules/minipass": { "node_modules/minipass": {
"version": "7.0.4", "version": "7.1.0",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.0.tgz",
"integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "integrity": "sha512-oGZRv2OT1lO2UF1zUcwdTb3wqUwI0kBGTgt/T7OdSj6M6N5m3o5uPf0AIW6lVxGGoiWUR7e2AwTE+xiwK8WQig==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": ">=16 || 14 >=14.17" "node": ">=16 || 14 >=14.17"
@@ -5979,19 +6007,19 @@
} }
}, },
"node_modules/react-intl": { "node_modules/react-intl": {
"version": "6.6.5", "version": "6.6.6",
"resolved": "https://registry.npmjs.org/react-intl/-/react-intl-6.6.5.tgz", "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-6.6.6.tgz",
"integrity": "sha512-OErDPbGqus0QKVj77MGCC9Plbnys3CDQrq6Lw41c60pmeTdn41AhoS1SIzXG6SUlyF7qNN2AVqfrrIvHUgSyLQ==", "integrity": "sha512-dKXQNUrhZTlCp8uelYW8PHiM4saNKyLmHCfsJYWK0N/kZ/Ien35wjPHB8x9yQcTJbeN/hBOmb4x16iKUrdL9MA==",
"dependencies": { "dependencies": {
"@formatjs/ecma402-abstract": "1.18.2", "@formatjs/ecma402-abstract": "1.18.2",
"@formatjs/icu-messageformat-parser": "2.7.6", "@formatjs/icu-messageformat-parser": "2.7.6",
"@formatjs/intl": "2.10.1", "@formatjs/intl": "2.10.2",
"@formatjs/intl-displaynames": "6.6.6", "@formatjs/intl-displaynames": "6.6.6",
"@formatjs/intl-listformat": "7.5.5", "@formatjs/intl-listformat": "7.5.5",
"@types/hoist-non-react-statics": "^3.3.1", "@types/hoist-non-react-statics": "^3.3.1",
"@types/react": "16 || 17 || 18", "@types/react": "16 || 17 || 18",
"hoist-non-react-statics": "^3.3.2", "hoist-non-react-statics": "^3.3.2",
"intl-messageformat": "10.5.11", "intl-messageformat": "10.5.12",
"tslib": "^2.4.0" "tslib": "^2.4.0"
}, },
"peerDependencies": { "peerDependencies": {
@@ -6504,9 +6532,9 @@
} }
}, },
"node_modules/svgo": { "node_modules/svgo": {
"version": "3.2.0", "version": "3.3.0",
"resolved": "https://registry.npmjs.org/svgo/-/svgo-3.2.0.tgz", "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.0.tgz",
"integrity": "sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ==", "integrity": "sha512-y350OL6eAmhDbWcASdukXoG0MbpdfJQPHwEUAaTW1HBNSO2VErJ35fs7uNLSWjzFDhfua517RcouBzjZoO1JFg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@trysound/sax": "0.2.0", "@trysound/sax": "0.2.0",
@@ -6518,7 +6546,7 @@
"picocolors": "^1.0.0" "picocolors": "^1.0.0"
}, },
"bin": { "bin": {
"svgo": "bin/svgo" "svgo": "bin/svgo.js"
}, },
"engines": { "engines": {
"node": ">=14.0.0" "node": ">=14.0.0"
@@ -6651,9 +6679,9 @@
"dev": true "dev": true
}, },
"node_modules/tinode-sdk": { "node_modules/tinode-sdk": {
"version": "0.22.12", "version": "0.22.13",
"resolved": "https://registry.npmjs.org/tinode-sdk/-/tinode-sdk-0.22.12.tgz", "resolved": "https://registry.npmjs.org/tinode-sdk/-/tinode-sdk-0.22.13.tgz",
"integrity": "sha512-Rj9W1JIk3Qzv90oNXSHWgWgtXpZIe+o0yWRq/Fistirs9DOtMZpVgDkfLJ+G/vosVO01fc8PClEMNLYpQH1x+Q==" "integrity": "sha512-LdWs61yc4Xe7sGW1cZUmpkyVY8WUMuam4yYxBePWgE4zE+Ed8H+Le7LK9iw7fKrypY1krAwPplNicrpFFict0w=="
}, },
"node_modules/to-fast-properties": { "node_modules/to-fast-properties": {
"version": "2.0.0", "version": "2.0.0",
@@ -6755,9 +6783,9 @@
} }
}, },
"node_modules/update-browserslist-db": { "node_modules/update-browserslist-db": {
"version": "1.0.13", "version": "1.0.15",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.15.tgz",
"integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "integrity": "sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@@ -6774,7 +6802,7 @@
} }
], ],
"dependencies": { "dependencies": {
"escalade": "^3.1.1", "escalade": "^3.1.2",
"picocolors": "^1.0.0" "picocolors": "^1.0.0"
}, },
"bin": { "bin": {
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+80 -22
View File
@@ -1220,7 +1220,7 @@ class DB {
/***/ ((module) => { /***/ ((module) => {
/** /**
* @copyright 2015-2022 Tinode LLC. * @copyright 2015-2024 Tinode LLC.
* @summary Minimally rich text representation and formatting for Tinode. * @summary Minimally rich text representation and formatting for Tinode.
* @license Apache 2.0 * @license Apache 2.0
* *
@@ -1280,6 +1280,7 @@ const MAX_PREVIEW_DATA_SIZE = 64;
const JSON_MIME_TYPE = 'application/json'; const JSON_MIME_TYPE = 'application/json';
const DRAFTY_MIME_TYPE = 'text/x-drafty'; const DRAFTY_MIME_TYPE = 'text/x-drafty';
const ALLOWED_ENT_FIELDS = ['act', 'height', 'duration', 'incoming', 'mime', 'name', 'premime', 'preref', 'preview', 'ref', 'size', 'state', 'url', 'val', 'width']; const ALLOWED_ENT_FIELDS = ['act', 'height', 'duration', 'incoming', 'mime', 'name', 'premime', 'preref', 'preview', 'ref', 'size', 'state', 'url', 'val', 'width'];
const segmenter = new Intl.Segmenter();
const INLINE_STYLES = [{ const INLINE_STYLES = [{
name: 'ST', name: 'ST',
start: /(?:^|[\W_])(\*)[^\s*]/, start: /(?:^|[\W_])(\*)[^\s*]/,
@@ -1700,24 +1701,48 @@ Drafty.parse = function (content) {
if (blx.length > 0) { if (blx.length > 0) {
result.txt = blx[0].txt; result.txt = blx[0].txt;
result.fmt = (blx[0].fmt || []).concat(blx[0].ent || []); result.fmt = (blx[0].fmt || []).concat(blx[0].ent || []);
if (result.fmt.length) {
const segments = segmenter.segment(result.txt);
for (const ele of result.fmt) {
({
at: ele.at,
len: ele.len
} = toGraphemeValues(ele, segments, result.txt));
}
}
for (let i = 1; i < blx.length; i++) { for (let i = 1; i < blx.length; i++) {
const block = blx[i]; const block = blx[i];
const offset = result.txt.length + 1; const offset = stringToGraphemes(result.txt).length + 1;
result.fmt.push({ result.fmt.push({
tp: 'BR', tp: 'BR',
len: 1, len: 1,
at: offset - 1 at: offset - 1
}); });
let segments = {};
result.txt += ' ' + block.txt; result.txt += ' ' + block.txt;
if (block.fmt) { if (block.fmt) {
segments = segmenter.segment(block.txt);
result.fmt = result.fmt.concat(block.fmt.map(s => { result.fmt = result.fmt.concat(block.fmt.map(s => {
s.at += offset; const {
at: correctAt,
len: correctLen
} = toGraphemeValues(s, segments, block.txt);
s.at = correctAt + offset;
s.len = correctLen;
return s; return s;
})); }));
} }
if (block.ent) { if (block.ent) {
if (isEmptyObject(segments)) {
segments = segmenter.segment(block.txt);
}
result.fmt = result.fmt.concat(block.ent.map(s => { result.fmt = result.fmt.concat(block.ent.map(s => {
s.at += offset; const {
at: correctAt,
len: correctLen
} = toGraphemeValues(s, segments, block.txt);
s.at = correctAt + offset;
s.len = correctLen;
return s; return s;
})); }));
} }
@@ -1739,7 +1764,7 @@ Drafty.append = function (first, second) {
return first; return first;
} }
first.txt = first.txt || ''; first.txt = first.txt || '';
const len = first.txt.length; const len = stringToGraphemes(first.txt).length;
if (typeof second == 'string') { if (typeof second == 'string') {
first.txt += second; first.txt += second;
} else if (second.txt) { } else if (second.txt) {
@@ -1927,7 +1952,7 @@ Drafty.quote = function (header, uid, body) {
const quote = Drafty.append(Drafty.appendLineBreak(Drafty.mention(header, uid)), body); const quote = Drafty.append(Drafty.appendLineBreak(Drafty.mention(header, uid)), body);
quote.fmt.push({ quote.fmt.push({
at: 0, at: 0,
len: quote.txt.length, len: stringToGraphemes(quote.txt).length,
tp: 'QQ' tp: 'QQ'
}); });
return quote; return quote;
@@ -1937,7 +1962,7 @@ Drafty.mention = function (name, uid) {
txt: name || '', txt: name || '',
fmt: [{ fmt: [{
at: 0, at: 0,
len: (name || '').length, len: stringToGraphemes(name || '').length,
key: 0 key: 0
}], }],
ent: [{ ent: [{
@@ -2101,7 +2126,7 @@ Drafty.appendLineBreak = function (content) {
}; };
content.fmt = content.fmt || []; content.fmt = content.fmt || [];
content.fmt.push({ content.fmt.push({
at: content.txt.length, at: stringToGraphemes(content.txt).length,
len: 1, len: 1,
tp: 'BR' tp: 'BR'
}); });
@@ -2504,7 +2529,7 @@ function draftyToTree(doc) {
key: key key: key
}); });
return; return;
} else if (at + len > txt.length) { } else if (at + len > stringToGraphemes(txt).length) {
return; return;
} }
if (!span.tp) { if (!span.tp) {
@@ -2546,7 +2571,8 @@ function draftyToTree(doc) {
span.type = 'HD'; span.type = 'HD';
} }
}); });
let tree = spansToTree({}, txt, 0, txt.length, spans); const graphemes = stringToGraphemes(txt);
let tree = spansToTree({}, graphemes, 0, graphemes.length, spans);
const flatten = function (node) { const flatten = function (node) {
if (Array.isArray(node.children) && node.children.length == 1) { if (Array.isArray(node.children) && node.children.length == 1) {
const child = node.children[0]; const child = node.children[0];
@@ -2582,11 +2608,11 @@ function addNode(parent, n) {
parent.children.push(n); parent.children.push(n);
return parent; return parent;
} }
function spansToTree(parent, text, start, end, spans) { function spansToTree(parent, graphemes, start, end, spans) {
if (!spans || spans.length == 0) { if (!spans || spans.length == 0) {
if (start < end) { if (start < end) {
addNode(parent, { addNode(parent, {
text: text.substring(start, end) text: graphemes.slice(start, end).map(segment => segment.segment).join('')
}); });
} }
return parent; return parent;
@@ -2604,7 +2630,7 @@ function spansToTree(parent, text, start, end, spans) {
} }
if (start < span.start) { if (start < span.start) {
addNode(parent, { addNode(parent, {
text: text.substring(start, span.start) text: graphemes.slice(start, span.start).map(segment => segment.segment).join('')
}); });
start = span.start; start = span.start;
} }
@@ -2629,12 +2655,12 @@ function spansToTree(parent, text, start, end, spans) {
type: span.type, type: span.type,
data: span.data, data: span.data,
key: span.key key: span.key
}, text, start, span.end, subspans)); }, graphemes, start, span.end, subspans));
start = span.end; start = span.end;
} }
if (start < end) { if (start < end) {
addNode(parent, { addNode(parent, {
text: text.substring(start, end) text: graphemes.slice(start, end).map(segment => segment.segment).join('')
}); });
} }
return parent; return parent;
@@ -2644,7 +2670,7 @@ function treeToDrafty(doc, tree, keymap) {
return doc; return doc;
} }
doc.txt = doc.txt || ''; doc.txt = doc.txt || '';
const start = doc.txt.length; const start = stringToGraphemes(doc.txt).length;
if (tree.text) { if (tree.text) {
doc.txt += tree.text; doc.txt += tree.text;
} else if (Array.isArray(tree.children)) { } else if (Array.isArray(tree.children)) {
@@ -2653,7 +2679,7 @@ function treeToDrafty(doc, tree, keymap) {
}); });
} }
if (tree.type) { if (tree.type) {
const len = doc.txt.length - start; const len = stringToGraphemes(doc.txt).length - start;
doc.fmt = doc.fmt || []; doc.fmt = doc.fmt || [];
if (Object.keys(tree.data || {}).length > 0) { if (Object.keys(tree.data || {}).length > 0) {
doc.ent = doc.ent || []; doc.ent = doc.ent || [];
@@ -2755,12 +2781,12 @@ function shortenTree(tree, limit, tail) {
node.text = tail; node.text = tail;
limit = -1; limit = -1;
} else if (node.text) { } else if (node.text) {
const len = node.text.length; const graphemes = stringToGraphemes(node.text);
if (len > limit) { if (graphemes.length > limit) {
node.text = node.text.substring(0, limit) + tail; node.text = graphemes.slice(0, limit).map(segment => segment.segment).join('') + tail;
limit = -1; limit = -1;
} else { } else {
limit -= len; limit -= graphemes.length;
} }
} }
return node; return node;
@@ -2907,6 +2933,38 @@ function copyEntData(data, light, allow) {
} }
return null; return null;
} }
function isEmptyObject(obj) {
return Object.keys(obj ?? {}).length == 0;
}
;
function graphemeIndices(graphemes) {
const result = [];
let graphemeIndex = 0;
let charIndex = 0;
for (const {
segment
} of graphemes) {
for (let i = 0; i < segment.length; i++) {
result[charIndex + i] = graphemeIndex;
}
charIndex += segment.length;
graphemeIndex++;
}
return result;
}
function toGraphemeValues(fmt, segments, txt) {
segments = segments ?? segmenter.segment(txt);
const indices = graphemeIndices(segments);
const correctAt = indices[fmt.at];
const correctLen = fmt.at + fmt.len <= txt.length ? indices[fmt.at + fmt.len - 1] - correctAt : fmt.len;
return {
at: correctAt,
len: correctLen + 1
};
}
function stringToGraphemes(str) {
return Array.from(segmenter.segment(str));
}
if (true) { if (true) {
module.exports = Drafty; module.exports = Drafty;
} }
@@ -4857,7 +4915,7 @@ __webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ PACKAGE_VERSION: () => (/* binding */ PACKAGE_VERSION) /* harmony export */ PACKAGE_VERSION: () => (/* binding */ PACKAGE_VERSION)
/* harmony export */ }); /* harmony export */ });
const PACKAGE_VERSION = "0.22.12"; const PACKAGE_VERSION = "0.22.13";
/***/ }) /***/ })
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long