diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index cc700ee01b..39acd3418e 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -1057,7 +1057,7 @@ dependencies: version: file:projects/tests-sanity.tgz '@rush-temp/text': specifier: file:./projects/text.tgz - version: file:projects/text.tgz(@types/node@20.11.19)(bufferutil@4.0.8)(esbuild@0.20.1)(ts-node@10.9.2)(utf-8-validate@6.0.4)(y-protocols@1.0.6) + version: file:projects/text.tgz(@types/node@20.11.19)(bufferutil@4.0.8)(esbuild@0.20.1)(ts-node@10.9.2)(utf-8-validate@6.0.4) '@rush-temp/text-editor': specifier: file:./projects/text-editor.tgz version: file:projects/text-editor.tgz(@types/node@20.11.19)(esbuild@0.20.1)(ts-node@10.9.2) @@ -1067,6 +1067,9 @@ dependencies: '@rush-temp/text-editor-resources': specifier: file:./projects/text-editor-resources.tgz version: file:projects/text-editor-resources.tgz(@types/node@20.11.19)(bufferutil@4.0.8)(esbuild@0.20.1)(highlight.js@11.8.0)(postcss-load-config@4.0.2)(postcss@8.4.35)(ts-node@10.9.2)(utf-8-validate@6.0.4) + '@rush-temp/text-ydoc': + specifier: file:./projects/text-ydoc.tgz + version: file:projects/text-ydoc.tgz(@types/node@20.11.19)(bufferutil@4.0.8)(esbuild@0.20.1)(ts-node@10.9.2)(utf-8-validate@6.0.4)(y-protocols@1.0.6) '@rush-temp/theme': specifier: file:./projects/theme.tgz version: file:projects/theme.tgz(@types/node@20.11.19)(esbuild@0.20.1)(postcss-load-config@4.0.2)(postcss@8.4.35)(ts-node@10.9.2) @@ -23276,7 +23279,7 @@ packages: dev: false file:projects/collaboration.tgz(esbuild@0.20.1)(ts-node@10.9.2): - resolution: {integrity: sha512-aJ4uMSpM7IB3wgrjVKYm4jR3IeBYSaFvYZZFjxkriMD1fAxvjr/WpKUWxQy0q2x3gZb4SoGLoiX2d2qj2/hdhA==, tarball: file:projects/collaboration.tgz} + resolution: {integrity: sha512-B70DJafULFsOhFaCV+w3xbc389eny17N1XFVHtIrO0/lulB3Rdrts/2AjDFasTxF6DrRrN0g8WSKbS3ZiGBn+w==, tarball: file:projects/collaboration.tgz} id: file:projects/collaboration.tgz name: '@rush-temp/collaboration' version: 0.0.0 @@ -23341,7 +23344,7 @@ packages: dev: false file:projects/collaborator.tgz(@tiptap/pm@2.6.6)(bufferutil@4.0.8)(utf-8-validate@6.0.4)(y-protocols@1.0.6): - resolution: {integrity: sha512-rOYtzJUY5RFs6cOkn2LNEgL5qqf7QdYUeJamlAnB+u2nIJKUf6Db+wJckK+0fCnujFGWAaDyqSidEIMnPkmvAg==, tarball: file:projects/collaborator.tgz} + resolution: {integrity: sha512-IfReKxVgch+Vfy/kKHkRRNE0N7svP5c5NCHBhC+DiXMjVXNhkMvUYyhGv1RUTmJUzUWvHo3K75m/23c9yAuylw==, tarball: file:projects/collaborator.tgz} id: file:projects/collaborator.tgz name: '@rush-temp/collaborator' version: 0.0.0 @@ -29473,7 +29476,7 @@ packages: dev: false file:projects/server-activity-resources.tgz(@types/node@20.11.19)(esbuild@0.20.1)(ts-node@10.9.2): - resolution: {integrity: sha512-MK/u1/C+WybVSjINrL8/N5ogkV/W/yrR0wU+1Dn7RQHjTjcv1wckawhhkpyWvV/GOHmJ/9sk52DRNN0aT38Iig==, tarball: file:projects/server-activity-resources.tgz} + resolution: {integrity: sha512-+UU7f65uCYtxuk56pj1bJ2ZaE6YHxVubtTfbsrLa8ZAGUOvWjrxY37B8j8GfcgGioL6PESsB12uEZIvghnNNaQ==, tarball: file:projects/server-activity-resources.tgz} id: file:projects/server-activity-resources.tgz name: '@rush-temp/server-activity-resources' version: 0.0.0 @@ -29815,7 +29818,7 @@ packages: dev: false file:projects/server-chunter-resources.tgz(@types/node@20.11.19)(esbuild@0.20.1)(ts-node@10.9.2): - resolution: {integrity: sha512-G0zXtnTJR8PNNv3VVnuOStJs8fXpPFJDsxtRQ2EwwG3YocszzYRXyer8zgC15pS8wMUee0qVPcnz6lRUW7YNPQ==, tarball: file:projects/server-chunter-resources.tgz} + resolution: {integrity: sha512-Kpp8RTEJ+z5d8Rq7HbOhui8ZyV8OvKEXVkAXT80Ju/qhVnZ5Mnw/jk33dgwur1NPVjCWOK2SPECHf+eqzwXpBg==, tarball: file:projects/server-chunter-resources.tgz} id: file:projects/server-chunter-resources.tgz name: '@rush-temp/server-chunter-resources' version: 0.0.0 @@ -29912,7 +29915,7 @@ packages: dev: false file:projects/server-collaboration-resources.tgz(@types/node@20.11.19)(esbuild@0.20.1)(ts-node@10.9.2): - resolution: {integrity: sha512-CpLsMZJoj1GsG2/RgbvlCzlIIOe0q1bht2uXzJQ5B6vJQvsHJ3nEt1xxe4GNb6HEPwgvty8LmC1pf7FjLE05RQ==, tarball: file:projects/server-collaboration-resources.tgz} + resolution: {integrity: sha512-z+hQWA3nzogICLGtbTeKk2up7a3hAj4cRwJOc4IrNZiXBWHWEJM9iPp0Mf99qud3YmkHMdOWV0CEFPXMCBGYLQ==, tarball: file:projects/server-collaboration-resources.tgz} id: file:projects/server-collaboration-resources.tgz name: '@rush-temp/server-collaboration-resources' version: 0.0.0 @@ -30098,7 +30101,7 @@ packages: dev: false file:projects/server-core.tgz(esbuild@0.20.1)(ts-node@10.9.2): - resolution: {integrity: sha512-NJlQNbZS7co2qKOPf/GLPbc0VgghD4JenfX92uaXNCPM50WDKcnnxrgelP7LJmkK01ZU7oZKd6WfoCMWr06u5w==, tarball: file:projects/server-core.tgz} + resolution: {integrity: sha512-efEJe6H7TcdTsX7qOhOhM2p9bjx9Mh3FHsb/0um4pSdK83jZwAXLtjX592UBr6WbOz0saPEOftlkthzQQzKd0A==, tarball: file:projects/server-core.tgz} id: file:projects/server-core.tgz name: '@rush-temp/server-core' version: 0.0.0 @@ -30867,7 +30870,7 @@ packages: dev: false file:projects/server-pipeline.tgz: - resolution: {integrity: sha512-RoaltZjKRFs7Db3hC8MclyWwIBSHD1lnIK88Cy/tRSj2F3eYUMq3NJCeg3FWz9kPVvCL+F5noOIAmOTaVvwbGQ==, tarball: file:projects/server-pipeline.tgz} + resolution: {integrity: sha512-Ku/Tzho2UClqB6pAmRTCNrl2Sr/vgT5EP2jVlrTdQrHeA+DRFuipXTSaov8ILtV8K2DMwyKuUWhirRS42d9RCQ==, tarball: file:projects/server-pipeline.tgz} name: '@rush-temp/server-pipeline' version: 0.0.0 dependencies: @@ -32836,7 +32839,7 @@ packages: dev: false file:projects/text-editor.tgz(@types/node@20.11.19)(esbuild@0.20.1)(ts-node@10.9.2): - resolution: {integrity: sha512-FOR0ZEJqGjY5MZ/pk2VdcXhtEmyOJhqfi9DEGiGKAqdqnBO05WZTba6BHmacrRI1u50jMRM7RKRRI2Fnv72skA==, tarball: file:projects/text-editor.tgz} + resolution: {integrity: sha512-ZGE7p4Fr6/FjCfTJbDxCrBW/ZWTCTHxJECiSDxz3dZ3rom7Bx0c90k14lhUE2gMTyZitfzUEBlCp3suQsN16Fg==, tarball: file:projects/text-editor.tgz} id: file:projects/text-editor.tgz name: '@rush-temp/text-editor' version: 0.0.0 @@ -32870,8 +32873,52 @@ packages: - ts-node dev: false - file:projects/text.tgz(@types/node@20.11.19)(bufferutil@4.0.8)(esbuild@0.20.1)(ts-node@10.9.2)(utf-8-validate@6.0.4)(y-protocols@1.0.6): - resolution: {integrity: sha512-krv6M+6hKhpAuRanIAZPdRq+Cxxn7sIxmq443+UrSNHL2zp1gxWbivmsG89t+n8B19PRbUNhmhRk77Uc78gmxg==, tarball: file:projects/text.tgz} + file:projects/text-ydoc.tgz(@types/node@20.11.19)(bufferutil@4.0.8)(esbuild@0.20.1)(ts-node@10.9.2)(utf-8-validate@6.0.4)(y-protocols@1.0.6): + resolution: {integrity: sha512-aDhGcvxtmn53efGxEksX6CTMQWjDpmO/x0bkO4k3OA+GUHHNrlGQAkyun0lGP+iDcfb/rHVKR8odJVrUnMx1DA==, tarball: file:projects/text-ydoc.tgz} + id: file:projects/text-ydoc.tgz + name: '@rush-temp/text-ydoc' + version: 0.0.0 + dependencies: + '@tiptap/core': 2.6.6(@tiptap/pm@2.6.6) + '@tiptap/pm': 2.6.6 + '@types/jest': 29.5.12 + '@types/markdown-it': 13.0.8 + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.6.2) + '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.6.2) + eslint: 8.56.0 + eslint-config-standard-with-typescript: 40.0.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint-plugin-import@2.29.1)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0)(typescript@5.6.2) + eslint-plugin-import: 2.29.1(eslint@8.56.0) + eslint-plugin-n: 15.7.0(eslint@8.56.0) + eslint-plugin-promise: 6.1.1(eslint@8.56.0) + fast-equals: 5.0.1 + jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2) + jest-environment-jsdom: 29.7.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) + prettier: 3.2.5 + ts-jest: 29.1.2(esbuild@0.20.1)(jest@29.7.0)(typescript@5.6.2) + typescript: 5.6.2 + y-prosemirror: 1.2.12(y-protocols@1.0.6)(yjs@13.6.19) + yjs: 13.6.19 + transitivePeerDependencies: + - '@babel/core' + - '@jest/types' + - '@types/node' + - babel-jest + - babel-plugin-macros + - bufferutil + - canvas + - esbuild + - node-notifier + - prosemirror-model + - prosemirror-state + - prosemirror-view + - supports-color + - ts-node + - utf-8-validate + - y-protocols + dev: false + + file:projects/text.tgz(@types/node@20.11.19)(bufferutil@4.0.8)(esbuild@0.20.1)(ts-node@10.9.2)(utf-8-validate@6.0.4): + resolution: {integrity: sha512-1V1MwGEZv1UxhJ4js4mIMG6U87MbA6jlzPZyE6EmtNpYbQ12DfVTp2XpiK3JlZKs95itkJcFCSTQIMsYSrw4yw==, tarball: file:projects/text.tgz} id: file:projects/text.tgz name: '@rush-temp/text' version: 0.0.0 @@ -32914,8 +32961,6 @@ packages: prosemirror-codemark: 0.4.2 ts-jest: 29.1.2(esbuild@0.20.1)(jest@29.7.0)(typescript@5.3.3) typescript: 5.3.3 - y-prosemirror: 1.2.12(y-protocols@1.0.6)(yjs@13.6.19) - yjs: 13.6.19 transitivePeerDependencies: - '@babel/core' - '@jest/types' @@ -32933,7 +32978,6 @@ packages: - supports-color - ts-node - utf-8-validate - - y-protocols dev: false file:projects/theme.tgz(@types/node@20.11.19)(esbuild@0.20.1)(postcss-load-config@4.0.2)(postcss@8.4.35)(ts-node@10.9.2): @@ -33094,7 +33138,7 @@ packages: dev: false file:projects/tool.tgz: - resolution: {integrity: sha512-zkSB9q8nmOq4m/hf5dMfcseJjWHYhOExf+qcO3+81JqRLl5vVnZagl0kPGJn/0xkj36e9HiRqyqqesJS0hLDWg==, tarball: file:projects/tool.tgz} + resolution: {integrity: sha512-dTUYN+mKApDwcRRCIBOVFxHmmZGkGJ8UjtEmvyMb/HgcsWUXDuzygkJlGqYTa0LirObNqRqH6J3AbUCeiokdmg==, tarball: file:projects/tool.tgz} name: '@rush-temp/tool' version: 0.0.0 dependencies: diff --git a/dev/tool/package.json b/dev/tool/package.json index 935c93f993..185b3c00eb 100644 --- a/dev/tool/package.json +++ b/dev/tool/package.json @@ -150,6 +150,7 @@ "@hcengineering/tags": "^0.6.16", "@hcengineering/task": "^0.6.20", "@hcengineering/text": "^0.6.5", + "@hcengineering/text-ydoc": "^0.6.0", "@hcengineering/telegram": "^0.6.21", "@hcengineering/tracker": "^0.6.24", "@hcengineering/collaboration": "^0.6.0", diff --git a/dev/tool/src/clean.ts b/dev/tool/src/clean.ts index 6d9d94b5b2..254bec0352 100644 --- a/dev/tool/src/clean.ts +++ b/dev/tool/src/clean.ts @@ -72,7 +72,7 @@ import { generateToken } from '@hcengineering/server-token' import { connect } from '@hcengineering/server-tool' import tags, { type TagCategory, type TagElement, type TagReference } from '@hcengineering/tags' import task, { type ProjectType, type Task, type TaskType } from '@hcengineering/task' -import { updateYDocContent } from '@hcengineering/text' +import { updateYDocContent } from '@hcengineering/text-ydoc' import tracker from '@hcengineering/tracker' import { deepEqual } from 'fast-equals' import { type Db } from 'mongodb' diff --git a/packages/text-ydoc/.eslintrc.js b/packages/text-ydoc/.eslintrc.js new file mode 100644 index 0000000000..72235dc283 --- /dev/null +++ b/packages/text-ydoc/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: ['./node_modules/@hcengineering/platform-rig/profiles/default/eslint.config.json'], + parserOptions: { + tsconfigRootDir: __dirname, + project: './tsconfig.json' + } +} diff --git a/packages/text-ydoc/config/rig.json b/packages/text-ydoc/config/rig.json new file mode 100644 index 0000000000..0110930f55 --- /dev/null +++ b/packages/text-ydoc/config/rig.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/rig-package/rig.schema.json", + "rigPackageName": "@hcengineering/platform-rig" +} diff --git a/packages/text-ydoc/jest.config.js b/packages/text-ydoc/jest.config.js new file mode 100644 index 0000000000..2cfd408b67 --- /dev/null +++ b/packages/text-ydoc/jest.config.js @@ -0,0 +1,7 @@ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'node', + testMatch: ['**/?(*.)+(spec|test).[jt]s?(x)'], + roots: ["./src"], + coverageReporters: ["text-summary", "html"] +} diff --git a/packages/text-ydoc/package.json b/packages/text-ydoc/package.json new file mode 100644 index 0000000000..8798873e51 --- /dev/null +++ b/packages/text-ydoc/package.json @@ -0,0 +1,54 @@ +{ + "name": "@hcengineering/text-ydoc", + "version": "0.6.0", + "main": "lib/index.js", + "svelte": "src/index.ts", + "types": "types/index.d.ts", + "files": [ + "lib/**/*", + "types/**/*", + "tsconfig.json" + ], + "author": "Anticrm Platform Contributors", + "license": "EPL-2.0", + "scripts": { + "build": "compile", + "test": "jest --passWithNoTests --silent", + "build:watch": "compile", + "format": "format src", + "_phase:build": "compile transpile src", + "_phase:test": "jest --passWithNoTests --silent", + "_phase:format": "format src", + "_phase:validate": "compile validate" + }, + "devDependencies": { + "@hcengineering/platform-rig": "^0.6.0", + "@typescript-eslint/eslint-plugin": "^6.11.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-promise": "^6.1.1", + "eslint-plugin-n": "^15.4.0", + "eslint": "^8.54.0", + "@typescript-eslint/parser": "^6.11.0", + "eslint-config-standard-with-typescript": "^40.0.0", + "prettier": "^3.1.0", + "typescript": "^5.3.3", + "jest": "^29.7.0", + "ts-jest": "^29.1.1", + "@types/jest": "^29.5.5", + "@types/markdown-it": "~13.0.0", + "jest-environment-jsdom": "^29.7.0" + }, + "dependencies": { + "@hcengineering/core": "^0.6.32", + "@hcengineering/text": "^0.6.5", + "@tiptap/core": "^2.6.6", + "@tiptap/pm": "^2.6.6", + "fast-equals": "^5.0.1", + "yjs": "^13.6.19", + "y-prosemirror": "^1.2.12" + }, + "repository": "https://github.com/hcengineering/platform", + "publishConfig": { + "registry": "https://npm.pkg.github.com" + } +} diff --git a/packages/text/src/__tests__/ydoc.test.ts b/packages/text-ydoc/src/__tests__/ydoc.test.ts similarity index 100% rename from packages/text/src/__tests__/ydoc.test.ts rename to packages/text-ydoc/src/__tests__/ydoc.test.ts diff --git a/packages/text-ydoc/src/index.ts b/packages/text-ydoc/src/index.ts new file mode 100644 index 0000000000..d6dbacbc50 --- /dev/null +++ b/packages/text-ydoc/src/index.ts @@ -0,0 +1,16 @@ +// +// Copyright © 2023 Hardcore Engineering Inc. +// +// Licensed under the Eclipse Public License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. You may +// obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// +// See the License for the specific language governing permissions and +// limitations under the License. +// + +export * from './ydoc' diff --git a/packages/text/src/ydoc.ts b/packages/text-ydoc/src/ydoc.ts similarity index 96% rename from packages/text/src/ydoc.ts rename to packages/text-ydoc/src/ydoc.ts index 0661f2fc55..1fb83c3a83 100644 --- a/packages/text/src/ydoc.ts +++ b/packages/text-ydoc/src/ydoc.ts @@ -18,9 +18,7 @@ import { Extensions, getSchema } from '@tiptap/core' import { Node, Schema } from '@tiptap/pm/model' import { prosemirrorJSONToYDoc, prosemirrorToYDoc, yDocToProsemirrorJSON } from 'y-prosemirror' import { Doc as YDoc, applyUpdate, encodeStateAsUpdate, XmlElement as YXmlElement, XmlText as YXmlText } from 'yjs' -import { defaultExtensions } from './extensions' -import { MarkupNode } from './markup/model' -import { jsonToMarkup, markupToJSON, markupToPmNode } from './markup/utils' +import { defaultExtensions, jsonToMarkup, markupToJSON, markupToPmNode, type MarkupNode } from '@hcengineering/text' const defaultSchema = getSchema(defaultExtensions) diff --git a/packages/text-ydoc/tsconfig.json b/packages/text-ydoc/tsconfig.json new file mode 100644 index 0000000000..59e4fd4297 --- /dev/null +++ b/packages/text-ydoc/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "./node_modules/@hcengineering/platform-rig/profiles/default/tsconfig.json", + + "compilerOptions": { + "rootDir": "./src", + "outDir": "./lib", + "declarationDir": "./types", + "tsBuildInfoFile": ".build/build.tsbuildinfo" + } +} \ No newline at end of file diff --git a/packages/text/package.json b/packages/text/package.json index 32089907c9..5343a89b3a 100644 --- a/packages/text/package.json +++ b/packages/text/package.json @@ -63,9 +63,7 @@ "@tiptap/suggestion": "^2.6.6", "prosemirror-codemark": "^0.4.2", "markdown-it": "^14.0.0", - "fast-equals": "^5.0.1", - "yjs": "^13.6.19", - "y-prosemirror": "^1.2.12" + "fast-equals": "^5.0.1" }, "repository": "https://github.com/hcengineering/platform", "publishConfig": { diff --git a/packages/text/src/index.ts b/packages/text/src/index.ts index 7f859d5017..dfcdc7e589 100644 --- a/packages/text/src/index.ts +++ b/packages/text/src/index.ts @@ -19,7 +19,7 @@ export * from './markup/model' export * from './markup/traverse' export * from './markup/utils' export * from './nodes' -export * from './ydoc' +// export * from './ydoc' export * from './marks/code' export * from './marks/noteBase' export * from './markdown' diff --git a/plugins/contact/src/utils.ts b/plugins/contact/src/utils.ts index 7f17ba82a8..3879d77cee 100644 --- a/plugins/contact/src/utils.ts +++ b/plugins/contact/src/utils.ts @@ -16,7 +16,7 @@ import { AttachedData, Class, Client, Doc, FindResult, Hierarchy, Ref } from '@hcengineering/core' import { getMetadata } from '@hcengineering/platform' import { ColorDefinition } from '@hcengineering/ui' -import { MD5 } from 'crypto-js' +import MD5 from 'crypto-js/md5' import { AvatarProvider, AvatarType, Channel, Contact, Person, contactPlugin } from '.' import { AVATAR_COLORS, GravatarPlaceholderType } from './types' diff --git a/plugins/controlled-documents-resources/src/components/document/DocumentDiffViewer.svelte b/plugins/controlled-documents-resources/src/components/document/DocumentDiffViewer.svelte index af125cfc9f..cb1586a28d 100644 --- a/plugins/controlled-documents-resources/src/components/document/DocumentDiffViewer.svelte +++ b/plugins/controlled-documents-resources/src/components/document/DocumentDiffViewer.svelte @@ -2,7 +2,7 @@ import { getContext, onDestroy } from 'svelte' import { getClient } from '@hcengineering/presentation' import { makeDocCollabId, type Doc } from '@hcengineering/core' - import { CollaborationIds, type Ydoc } from '@hcengineering/text-editor' + import { CollaborationIds } from '@hcengineering/text-editor' import { CollaborationDiffViewer, Provider, @@ -29,9 +29,9 @@ const client = getClient() const hierarchy = client.getHierarchy() - const ydoc = getContext(CollaborationIds.Doc) + const ydoc: any = getContext(CollaborationIds.Doc) - let comparedYdoc: Ydoc | undefined = undefined + let comparedYdoc: any | undefined = undefined let comparedProvider: Provider | undefined = undefined let loading = true diff --git a/plugins/text-editor/package.json b/plugins/text-editor/package.json index 628da54d98..5799db503a 100644 --- a/plugins/text-editor/package.json +++ b/plugins/text-editor/package.json @@ -36,8 +36,7 @@ "@types/diff": "~5.0.2", "jest": "^29.7.0", "ts-jest": "^29.1.1", - "@types/jest": "^29.5.5", - "yjs": "^13.6.19" + "@types/jest": "^29.5.5" }, "dependencies": { "@hcengineering/presentation": "^0.6.3", diff --git a/plugins/text-editor/src/index.ts b/plugins/text-editor/src/index.ts index 148a6a3b67..1cbca920f5 100644 --- a/plugins/text-editor/src/index.ts +++ b/plugins/text-editor/src/index.ts @@ -20,4 +20,3 @@ export { default } from './plugin' export * from '@hcengineering/presentation/src/types' export * from './types' export { textEditorId } -export { Doc as Ydoc } from 'yjs' diff --git a/plugins/text-editor/src/types.ts b/plugins/text-editor/src/types.ts index 709ea56ac9..fb10f04a13 100644 --- a/plugins/text-editor/src/types.ts +++ b/plugins/text-editor/src/types.ts @@ -1,7 +1,6 @@ import { type Asset, type IntlString, type Resource } from '@hcengineering/platform' import { type Class, type Space, type Account, type Doc, type Markup, type Ref } from '@hcengineering/core' import type { AnySvelteComponent } from '@hcengineering/ui/src/types' -import { type RelativePosition } from 'yjs' import { type AnyExtension, type Content, type Editor, type SingleCommands } from '@tiptap/core' import { type ParseOptions } from '@tiptap/pm/model' @@ -131,8 +130,8 @@ export interface CollaborationUser { export interface AwarenessState { user: CollaborationUser cursor?: { - anchor: RelativePosition - head: RelativePosition + anchor: any + head: any } | null lastUpdate?: number } diff --git a/rush.json b/rush.json index 1693c6a377..e36f8d9403 100644 --- a/rush.json +++ b/rush.json @@ -480,6 +480,11 @@ "projectFolder": "packages/text", "shouldPublish": true }, + { + "packageName": "@hcengineering/text-ydoc", + "projectFolder": "packages/text-ydoc", + "shouldPublish": true + }, { "packageName": "@hcengineering/ui", "projectFolder": "packages/ui", diff --git a/server-plugins/activity-resources/package.json b/server-plugins/activity-resources/package.json index 7e4eeb96bc..ccd197abd5 100644 --- a/server-plugins/activity-resources/package.json +++ b/server-plugins/activity-resources/package.json @@ -45,7 +45,6 @@ "@hcengineering/server-core": "^0.6.1", "@hcengineering/server-notification-resources": "^0.6.0", "@hcengineering/text": "^0.6.5", - "@hcengineering/collaboration": "^0.6.0", "@hcengineering/contact": "^0.6.24" } } diff --git a/server-plugins/activity-resources/src/references.ts b/server-plugins/activity-resources/src/references.ts index f97426cb8a..e67ed3cf1a 100644 --- a/server-plugins/activity-resources/src/references.ts +++ b/server-plugins/activity-resources/src/references.ts @@ -14,7 +14,6 @@ // import activity, { ActivityMessage, ActivityReference, UserMentionInfo } from '@hcengineering/activity' -import { loadCollabJson } from '@hcengineering/collaboration' import contact, { Employee, Person, PersonAccount } from '@hcengineering/contact' import core, { Account, @@ -51,26 +50,13 @@ import { toReceiverInfo, type NotificationProviderControl } from '@hcengineering/server-notification-resources' -import { - areEqualJson, - extractReferences, - markupToPmNode, - pmNodeToMarkup, - yDocContentToNodes -} from '@hcengineering/text' +import { areEqualJson, extractReferences, markupToPmNode, pmNodeToMarkup } from '@hcengineering/text' -export function isDocMentioned (doc: Ref, content: string | Buffer): boolean { +export function isDocMentioned (doc: Ref, content: string): boolean { const references = [] - if (content instanceof Buffer) { - const nodes = yDocContentToNodes(content) - for (const node of nodes) { - references.push(...extractReferences(node)) - } - } else { - const doc = markupToPmNode(content) - references.push(...extractReferences(doc)) - } + const node = markupToPmNode(content) + references.push(...extractReferences(node)) for (const ref of references) { if (ref.objectId === doc) { @@ -411,7 +397,7 @@ async function getCreateReferencesTxes ( for (const attr of attributes.values()) { if (isMarkupType(attr.type._class)) { - const content = (createdDoc as any)[attr.name]?.toString() ?? '' + const content: string = (createdDoc as any)[attr.name]?.toString() ?? '' const attrReferences = getReferencesData(srcDocId, srcDocClass, attachedDocId, attachedDocClass, content) refs.push(...attrReferences) @@ -419,11 +405,10 @@ async function getCreateReferencesTxes ( const blobId = (createdDoc as any)[attr.name] as Ref if (blobId != null) { try { - const markup = await loadCollabJson(ctx, storage, control.workspace, blobId) - if (markup !== undefined) { - const attrReferences = getReferencesData(srcDocId, srcDocClass, attachedDocId, attachedDocClass, markup) - refs.push(...attrReferences) - } + const buffer = await storage.read(ctx, control.workspace, blobId) + const markup = Buffer.concat(buffer as any).toString() + const attrReferences = getReferencesData(srcDocId, srcDocClass, attachedDocId, attachedDocClass, markup) + refs.push(...attrReferences) } catch { // do nothing, the collaborative doc does not sem to exist yet } @@ -459,7 +444,7 @@ async function getUpdateReferencesTxes ( for (const attr of attributes.values()) { if (isMarkupType(attr.type._class)) { hasReferenceAttrs = true - const content = (updatedDoc as any)[attr.name]?.toString() ?? '' + const content: string = (updatedDoc as any)[attr.name]?.toString() ?? '' const attrReferences = getReferencesData(srcDocId, srcDocClass, attachedDocId, attachedDocClass, content) references.push(...attrReferences) } else if (attr.type._class === core.class.TypeCollaborativeDoc) { @@ -467,11 +452,10 @@ async function getUpdateReferencesTxes ( try { const blobId = (updatedDoc as any)[attr.name] as Ref if (blobId != null) { - const markup = await loadCollabJson(ctx, storage, control.workspace, blobId) - if (markup !== undefined) { - const attrReferences = getReferencesData(srcDocId, srcDocClass, attachedDocId, attachedDocClass, markup) - references.push(...attrReferences) - } + const buffer = await storage.read(ctx, control.workspace, blobId) + const markup = Buffer.concat(buffer as any).toString() + const attrReferences = getReferencesData(srcDocId, srcDocClass, attachedDocId, attachedDocClass, markup) + references.push(...attrReferences) } } catch { // do nothing, the collaborative doc does not sem to exist yet @@ -507,20 +491,13 @@ export function getReferencesData ( srcDocClass: Ref>, attachedDocId: Ref | undefined, attachedDocClass: Ref> | undefined, - content: string | Buffer + content: string ): Array> { const result: Array> = [] const references = [] - if (content instanceof Buffer) { - const nodes = yDocContentToNodes(content) - for (const node of nodes) { - references.push(...extractReferences(node)) - } - } else { - const doc = markupToPmNode(content) - references.push(...extractReferences(doc)) - } + const doc = markupToPmNode(content) + references.push(...extractReferences(doc)) for (const ref of references) { if (ref.objectId !== attachedDocId && ref.objectId !== srcDocId) { diff --git a/server-plugins/chunter-resources/package.json b/server-plugins/chunter-resources/package.json index d5976c504f..7b37200614 100644 --- a/server-plugins/chunter-resources/package.json +++ b/server-plugins/chunter-resources/package.json @@ -46,7 +46,6 @@ "@hcengineering/view": "^0.6.13", "@hcengineering/login": "^0.6.12", "@hcengineering/workbench": "^0.6.16", - "@hcengineering/collaboration": "^0.6.0", "@hcengineering/notification": "^0.6.23", "@hcengineering/server-notification": "^0.6.1", "@hcengineering/server-notification-resources": "^0.6.0", diff --git a/server-plugins/collaboration-resources/package.json b/server-plugins/collaboration-resources/package.json index 9e0aaa04ed..c19df419cf 100644 --- a/server-plugins/collaboration-resources/package.json +++ b/server-plugins/collaboration-resources/package.json @@ -39,7 +39,6 @@ "dependencies": { "@hcengineering/core": "^0.6.32", "@hcengineering/platform": "^0.6.11", - "@hcengineering/server-core": "^0.6.1", - "@hcengineering/collaboration": "^0.6.0" + "@hcengineering/server-core": "^0.6.1" } } diff --git a/server-plugins/collaboration-resources/src/index.ts b/server-plugins/collaboration-resources/src/index.ts index 18cc1c7ce0..215ea8b478 100644 --- a/server-plugins/collaboration-resources/src/index.ts +++ b/server-plugins/collaboration-resources/src/index.ts @@ -14,8 +14,7 @@ // import type { CollaborativeDoc, Doc, Tx, TxRemoveDoc } from '@hcengineering/core' -import core, { makeCollabId } from '@hcengineering/core' -import { removeCollabYdoc } from '@hcengineering/collaboration' +import core, { makeCollabId, makeCollabYdocId } from '@hcengineering/core' import { type TriggerControl } from '@hcengineering/server-core' /** @@ -47,7 +46,12 @@ export async function OnDelete ( // Even though we are deleting it here, the document can be currently in use by someone else // and when editing session ends, the collborator service will recreate the document again if (toDelete.length > 0) { - await removeCollabYdoc(storageAdapter, workspace, toDelete, ctx) + const toRemove: string[] = toDelete.map(makeCollabYdocId) + if (toRemove.length > 0) { + await ctx.with('remove', {}, async () => { + await storageAdapter.remove(ctx, workspace, toRemove) + }) + } } } return [] diff --git a/server/backup/src/backup.ts b/server/backup/src/backup.ts index b58b620679..845d6b7469 100644 --- a/server/backup/src/backup.ts +++ b/server/backup/src/backup.ts @@ -52,6 +52,7 @@ import { createWriteStream, existsSync, mkdirSync, + mkdtempSync, readFileSync, statSync, writeFileSync @@ -729,6 +730,8 @@ export async function backup ( let connection!: CoreClient & BackupClient let printEnd = true + const tmpRoot = mkdtempSync('huly') + try { let backupInfo: BackupInfo = { workspace: workspaceId.name, @@ -741,7 +744,7 @@ export async function backup ( const infoFile = 'backup.json.gz' if (await storage.exists(infoFile)) { - backupInfo = JSON.parse(gunzipSync(await storage.loadFile(infoFile)).toString()) + backupInfo = JSON.parse(gunzipSync((await storage.loadFile(infoFile)) as any).toString()) } backupInfo.version = '0.6.2' @@ -1106,7 +1109,7 @@ export async function backup ( const storageFile = join(backupIndex, `${domain}-data-${snapshot.date}-${stIndex}.tar.gz`) ctx.info('storing from domain', { domain, storageFile, workspace: workspaceId.name }) domainInfo.storage = [...(domainInfo.storage ?? []), storageFile] - const tmpFile = basename(storageFile) + '.tmp' + const tmpFile = join(tmpRoot, basename(storageFile) + '.tmp') const tempFile = createWriteStream(tmpFile) // const dataStream = await storage.write(storageFile) @@ -1333,7 +1336,7 @@ export async function backup ( let sizeInfo: Record = {} if (await storage.exists(sizeFile)) { - sizeInfo = JSON.parse(gunzipSync(await storage.loadFile(sizeFile)).toString()) + sizeInfo = JSON.parse(gunzipSync((await storage.loadFile(sizeFile)) as any).toString()) } let processed = 0 @@ -1408,6 +1411,7 @@ export async function backup ( ctx.error('backup error', { err, workspace: workspaceId.name }) return result } finally { + await rm(tmpRoot, { recursive: true }) if (printEnd) { ctx.info('end backup', { workspace: workspaceId.name, totalTime: Date.now() - st }) } diff --git a/server/collaboration/package.json b/server/collaboration/package.json index b591ce67a3..399eff7063 100644 --- a/server/collaboration/package.json +++ b/server/collaboration/package.json @@ -41,6 +41,7 @@ "@hcengineering/core": "^0.6.32", "@hcengineering/server-core": "^0.6.1", "@hcengineering/text": "^0.6.5", + "@hcengineering/text-ydoc": "^0.6.0", "base64-js": "^1.5.1", "yjs": "^13.6.19" } diff --git a/server/collaboration/src/storage.ts b/server/collaboration/src/storage.ts index 529577b3db..d93743b78b 100644 --- a/server/collaboration/src/storage.ts +++ b/server/collaboration/src/storage.ts @@ -26,7 +26,7 @@ import { makeCollabYdocId } from '@hcengineering/core' import { StorageAdapter } from '@hcengineering/server-core' -import { yDocToMarkup } from '@hcengineering/text' +import { yDocToMarkup } from '@hcengineering/text-ydoc' import { Doc as YDoc } from 'yjs' import { yDocFromBuffer, yDocToBuffer } from './ydoc' diff --git a/server/collaborator/package.json b/server/collaborator/package.json index ecc10bc4e3..8f67264e18 100644 --- a/server/collaborator/package.json +++ b/server/collaborator/package.json @@ -61,6 +61,7 @@ "@hcengineering/collaboration": "^0.6.0", "@hcengineering/collaborator-client": "^0.6.4", "@hcengineering/text": "^0.6.5", + "@hcengineering/text-ydoc": "^0.6.0", "@hcengineering/mongo": "^0.6.1", "@hocuspocus/server": "^2.13.5", "@hocuspocus/transformer": "^2.13.5", diff --git a/server/collaborator/src/storage/platform.ts b/server/collaborator/src/storage/platform.ts index 9855f62f31..8a1bd25c96 100644 --- a/server/collaborator/src/storage/platform.ts +++ b/server/collaborator/src/storage/platform.ts @@ -18,7 +18,8 @@ import { loadCollabJson, loadCollabYdoc, saveCollabJson, saveCollabYdoc } from ' import { decodeDocumentId } from '@hcengineering/collaborator-client' import core, { AttachedData, MeasureContext, Ref, Space, TxOperations } from '@hcengineering/core' import { StorageAdapter } from '@hcengineering/server-core' -import { markupToYDocNoSchema, areEqualMarkups } from '@hcengineering/text' +import { areEqualMarkups } from '@hcengineering/text' +import { markupToYDocNoSchema } from '@hcengineering/text-ydoc' import { Doc as YDoc } from 'yjs' import { Context } from '../context' diff --git a/server/collaborator/src/transformers/markup.ts b/server/collaborator/src/transformers/markup.ts index 2ff42f2401..3f311858dc 100644 --- a/server/collaborator/src/transformers/markup.ts +++ b/server/collaborator/src/transformers/markup.ts @@ -13,7 +13,7 @@ // limitations under the License. // -import { markupToYDocNoSchema, yDocToMarkup } from '@hcengineering/text' +import { markupToYDocNoSchema, yDocToMarkup } from '@hcengineering/text-ydoc' import { Transformer } from '@hocuspocus/transformer' import { Doc } from 'yjs' diff --git a/server/core/package.json b/server/core/package.json index 9459e3c826..c1e5fed289 100644 --- a/server/core/package.json +++ b/server/core/package.json @@ -37,7 +37,6 @@ "dependencies": { "@hcengineering/core": "^0.6.32", "@hcengineering/platform": "^0.6.11", - "@hcengineering/text": "^0.6.5", "@hcengineering/rpc": "^0.6.5", "@hcengineering/analytics": "^0.6.0", "@hcengineering/server-token": "^0.6.11", diff --git a/server/server-pipeline/package.json b/server/server-pipeline/package.json index 5e33a80ac6..4a906c9c6f 100644 --- a/server/server-pipeline/package.json +++ b/server/server-pipeline/package.json @@ -119,7 +119,6 @@ "@hcengineering/tracker-assets": "^0.6.0", "@hcengineering/board-assets": "^0.6.19", "@hcengineering/hr-assets": "^0.6.19", - "@hcengineering/bitrix-assets": "^0.6.0", "@hcengineering/request-assets": "^0.6.0", "@hcengineering/document-assets": "^0.6.0", "@hcengineering/controlled-documents-assets": "^0.1.0", @@ -151,7 +150,6 @@ "@hcengineering/tracker": "^0.6.24", "@hcengineering/board": "^0.6.19", "@hcengineering/hr": "^0.6.19", - "@hcengineering/bitrix": "^0.6.52", "@hcengineering/request": "^0.6.14", "@hcengineering/support": "^0.6.5", "@hcengineering/document": "^0.6.0", @@ -171,7 +169,6 @@ "@hcengineering/server-fulltext": "^0.6.0", "@hcengineering/server-fulltext-resources": "^0.6.0", "@hcengineering/survey": "^0.6.0", - "@hcengineering/survey-assets": "^0.6.0", - "@hcengineering/survey-resources": "^0.6.0" + "@hcengineering/survey-assets": "^0.6.0" } } diff --git a/server/server-pipeline/src/internationalization.ts b/server/server-pipeline/src/internationalization.ts index c2931f510c..8db8e35e50 100644 --- a/server/server-pipeline/src/internationalization.ts +++ b/server/server-pipeline/src/internationalization.ts @@ -2,7 +2,6 @@ import { coreId } from '@hcengineering/core' import { addStringsLoader, platformId } from '@hcengineering/platform' import { activityId } from '@hcengineering/activity' import { attachmentId } from '@hcengineering/attachment' -import { bitrixId } from '@hcengineering/bitrix' import { boardId } from '@hcengineering/board' import { calendarId } from '@hcengineering/calendar' import { chunterId } from '@hcengineering/chunter' @@ -40,7 +39,6 @@ import loginEng from '@hcengineering/login-assets/lang/en.json' import platformEng from '@hcengineering/platform/lang/en.json' import activityEn from '@hcengineering/activity-assets/lang/en.json' import attachmentEn from '@hcengineering/attachment-assets/lang/en.json' -import bitrixEn from '@hcengineering/bitrix-assets/lang/en.json' import boardEn from '@hcengineering/board-assets/lang/en.json' import calendarEn from '@hcengineering/calendar-assets/lang/en.json' import chunterEn from '@hcengineering/chunter-assets/lang/en.json' @@ -102,7 +100,6 @@ export function registerStringLoaders (): void { addStringsLoader(preferenceId, async (lang: string) => preferenceEn) addStringsLoader(hrId, async (lang: string) => hrEn) addStringsLoader(documentId, async (lang: string) => documentEn) - addStringsLoader(bitrixId, async (lang: string) => bitrixEn) addStringsLoader(requestId, async (lang: string) => requestEn) addStringsLoader(loveId, async (lang: string) => loveEn) addStringsLoader(driveId, async (lang: string) => driveEn) diff --git a/workers/transactor/calc.sh b/workers/transactor/calc.sh new file mode 100755 index 0000000000..2297ddf15a --- /dev/null +++ b/workers/transactor/calc.sh @@ -0,0 +1,21 @@ +#!/bin/bash +files=$(cat ./dist/index.js|grep node_modules | grep //) + +declare -a file_info + +# Iterate over each line in $files +while IFS= read -r line; do + file=${line##*//} + size=$(ls -l $file 2>/dev/null | awk '{print $5}') + # echo "Processing: $file $size" + + if [ ! -z "$size" ]; then + # Store size and path together + file_info+=("$size:$file") + fi +done <<< "$files" + +# Sort the array by size (numerically, in descending order) and print +printf '%s\n' "${file_info[@]}" | sort -t: -k1,1nr | while IFS=: read -r size path; do + echo "Size: $(($size/1024)) KB - $path" +done \ No newline at end of file