diff --git a/.github/workflows/ygg-registry-release.yml b/.github/workflows/ygg-registry-release.yml new file mode 100644 index 0000000000..f21184733d --- /dev/null +++ b/.github/workflows/ygg-registry-release.yml @@ -0,0 +1,21 @@ +name: Release on registry.ygg.tools +on: [push] + +env: + NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }} + +jobs: + Release-on-Registry: + runs-on: ubuntu-latest + steps: + - name: Check out repository code + uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: "18.x" + - name: Install dependencies + run: npm install + - name: Release to the registry + run: |- + echo '//registry.ygg.tools/:_authToken="${NODE_AUTH_TOKEN}"' >> .npmrc + npm run release:ci diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000000..ecdb665e41 --- /dev/null +++ b/.npmrc @@ -0,0 +1,3 @@ +allow-same-version=true +publish-branch=ygg +registry=https://registry.ygg.tools/ diff --git a/README.md b/README.md index bdb653434e..04ad34d959 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ +This is the [Ygg](https://ygg.tools) soft-fork of BlockNote (means we're tracking [the upstream](https://github.com/TypeCellOS/BlockNote)), implementing a Markdown-like editor for inline blocks. + +--- +

TypeCell diff --git a/examples/editor/package.json b/examples/editor/package.json index 81c2054ab7..5a5bb2a70f 100644 --- a/examples/editor/package.json +++ b/examples/editor/package.json @@ -9,7 +9,7 @@ "lint": "eslint src --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.9.4", + "@blocknote/core": "npm:@ygg.tools/blocknote-core@*", "@blocknote/react": "^0.9.4", "react": "^18.2.0", "react-dom": "^18.2.0" diff --git a/examples/editor/tsconfig.json b/examples/editor/tsconfig.json index 4f17a5d5b9..9541b40bb4 100644 --- a/examples/editor/tsconfig.json +++ b/examples/editor/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@blocknote/core": ["../../packages/core/src"] + } }, "include": ["src"], "references": [ diff --git a/examples/editor/vite.config.ts b/examples/editor/vite.config.ts index d135de28dc..8be370a9f8 100644 --- a/examples/editor/vite.config.ts +++ b/examples/editor/vite.config.ts @@ -12,20 +12,18 @@ export default defineConfig((conf) => ({ sourcemap: true, }, resolve: { - alias: - conf.command === "build" + alias: { + "@blocknote/core": path.resolve(__dirname, "../../packages/core/src/"), + ...(conf.command === "build" ? {} : { // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working - "@blocknote/core": path.resolve( - __dirname, - "../../packages/core/src/" - ), "@blocknote/react": path.resolve( __dirname, "../../packages/react/src/" ), - }, + }), + }, }, })); diff --git a/examples/vanilla/package.json b/examples/vanilla/package.json index 270aeec1b3..ede07537c6 100644 --- a/examples/vanilla/package.json +++ b/examples/vanilla/package.json @@ -9,7 +9,7 @@ "lint": "eslint src --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.9.4" + "@blocknote/core": "npm:@ygg.tools/blocknote-core@*" }, "devDependencies": { "eslint": "^8.10.0", diff --git a/examples/vanilla/tsconfig.json b/examples/vanilla/tsconfig.json index c221b93d22..9541b40bb4 100644 --- a/examples/vanilla/tsconfig.json +++ b/examples/vanilla/tsconfig.json @@ -15,10 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true - // "paths": { - // "@blocknote/core": ["../../packages/core/src"] - // } + "composite": true, + "paths": { + "@blocknote/core": ["../../packages/core/src"] + } }, "include": ["src"], "references": [ diff --git a/examples/vanilla/vite.config.ts b/examples/vanilla/vite.config.ts index fc8bd4a83d..b8436217e0 100644 --- a/examples/vanilla/vite.config.ts +++ b/examples/vanilla/vite.config.ts @@ -11,16 +11,8 @@ export default defineConfig((conf) => ({ sourcemap: true, }, resolve: { - alias: - conf.command === "build" - ? {} - : { - // Comment out the lines below to load a built version of blocknote - // or, keep as is to load live from sources with live reload working - "@blocknote/core": path.resolve( - __dirname, - "../../packages/core/src/" - ), - }, + alias: { + "@blocknote/core": path.resolve(__dirname, "../../packages/core/src/"), + }, }, })); diff --git a/package-lock.json b/package-lock.json index d3ca107398..280c69283b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,7 @@ "eslint-plugin-import": "^2.28.0", "lerna": "^5.4.0", "patch-package": "^6.4.7", + "semver": "^7.5.4", "typescript": "^5.0.4" } }, @@ -26,7 +27,7 @@ "name": "@blocknote/example-editor", "version": "0.9.4", "dependencies": { - "@blocknote/core": "^0.9.4", + "@blocknote/core": "npm:@ygg.tools/blocknote-core@*", "@blocknote/react": "^0.9.4", "react": "^18.2.0", "react-dom": "^18.2.0" @@ -40,6 +41,9 @@ "vite-plugin-eslint": "^1.8.1" } }, + "examples/editor/@ygg.tools/blocknote-core": { + "extraneous": true + }, "examples/editor/node_modules/@babel/code-frame": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", @@ -548,6 +552,15 @@ "fsevents": "~2.3.2" } }, + "examples/editor/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.ygg.tools/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "examples/editor/node_modules/vite": { "version": "4.4.8", "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.8.tgz", @@ -607,7 +620,7 @@ "name": "@blocknote/example-vanilla", "version": "0.9.4", "dependencies": { - "@blocknote/core": "^0.9.4" + "@blocknote/core": "npm:@ygg.tools/blocknote-core@*" }, "devDependencies": { "eslint": "^8.10.0", @@ -964,6 +977,14 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.ygg.tools/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/eslint-parser": { "version": "7.21.8", "dev": true, @@ -989,6 +1010,15 @@ "node": ">=10" } }, + "node_modules/@babel/eslint-parser/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.ygg.tools/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/generator": { "version": "7.22.3", "license": "MIT", @@ -1041,6 +1071,14 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.ygg.tools/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.22.1", "dev": true, @@ -1063,6 +1101,15 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.ygg.tools/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.22.1", "dev": true, @@ -1079,6 +1126,15 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.ygg.tools/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-define-polyfill-provider": { "version": "0.4.0", "dev": true, @@ -1095,6 +1151,15 @@ "@babel/core": "^7.4.0-0" } }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.ygg.tools/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-environment-visitor": { "version": "7.22.1", "license": "MIT", @@ -2469,6 +2534,15 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.ygg.tools/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.18.6", "dev": true, @@ -2709,6 +2783,15 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.ygg.tools/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/preset-modules": { "version": "0.1.5", "dev": true, @@ -2820,7 +2903,7 @@ } }, "node_modules/@blocknote/core": { - "resolved": "packages/core", + "resolved": "packages/core-shim", "link": true }, "node_modules/@blocknote/example-editor": { @@ -3674,36 +3757,6 @@ "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/@lerna/add/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/add/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/add/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/@lerna/bootstrap": { "version": "5.6.2", "dev": true, @@ -3736,36 +3789,6 @@ "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/@lerna/bootstrap/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/bootstrap/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/bootstrap/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/@lerna/changed": { "version": "5.6.2", "dev": true, @@ -4034,36 +4057,6 @@ "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/@lerna/conventional-commits/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/conventional-commits/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/conventional-commits/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/@lerna/create": { "version": "5.6.2", "dev": true, @@ -4103,36 +4096,6 @@ "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/@lerna/create/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/create/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/create/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/@lerna/describe-ref": { "version": "5.6.2", "dev": true, @@ -4274,36 +4237,6 @@ "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/@lerna/has-npm-version/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/has-npm-version/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/has-npm-version/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/@lerna/import": { "version": "5.6.2", "dev": true, @@ -4613,36 +4546,6 @@ "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/@lerna/package-graph/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/package-graph/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/package-graph/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/@lerna/prerelease-id-from-version": { "version": "5.6.2", "dev": true, @@ -4654,36 +4557,6 @@ "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/@lerna/prerelease-id-from-version/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/prerelease-id-from-version/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/prerelease-id-from-version/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/@lerna/profiler": { "version": "5.6.2", "dev": true, @@ -4789,36 +4662,6 @@ "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/@lerna/publish/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/publish/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/publish/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/@lerna/pulse-till-done": { "version": "5.6.2", "dev": true, @@ -5065,31 +4908,6 @@ "node": ">=8" } }, - "node_modules/@lerna/version/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/version/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@lerna/version/node_modules/supports-color": { "version": "7.2.0", "dev": true, @@ -5101,11 +4919,6 @@ "node": ">=8" } }, - "node_modules/@lerna/version/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/@lerna/write-log-file": { "version": "5.6.2", "dev": true, @@ -5413,36 +5226,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@npmcli/arborist/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/arborist/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/arborist/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/@npmcli/fs": { "version": "2.1.2", "dev": true, @@ -5455,36 +5238,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@npmcli/fs/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/fs/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/fs/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/@npmcli/git": { "version": "3.0.2", "dev": true, @@ -5508,39 +5261,9 @@ "version": "7.18.3", "dev": true, "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/@npmcli/git/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/git/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/git/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" + "engines": { + "node": ">=12" + } }, "node_modules/@npmcli/installed-package-contents": { "version": "1.0.7", @@ -5604,36 +5327,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@npmcli/metavuln-calculator/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/metavuln-calculator/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/metavuln-calculator/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/@npmcli/move-file": { "version": "2.0.1", "dev": true, @@ -6694,36 +6387,6 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/@typescript-eslint/experimental-utils": { "version": "5.59.8", "dev": true, @@ -6848,36 +6511,6 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/@typescript-eslint/utils": { "version": "5.59.8", "dev": true, @@ -6923,36 +6556,6 @@ "node": ">=4.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/@typescript-eslint/visitor-keys": { "version": "5.59.8", "dev": true, @@ -7434,6 +7037,10 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/@ygg.tools/blocknote-core": { + "resolved": "packages/core", + "link": true + }, "node_modules/@zkochan/js-yaml": { "version": "0.0.6", "dev": true, @@ -7906,6 +7513,15 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.ygg.tools/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.8.1", "dev": true, @@ -8142,36 +7758,6 @@ "semver": "^7.0.0" } }, - "node_modules/builtins/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/builtins/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/builtins/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/byte-size": { "version": "7.0.1", "dev": true, @@ -8749,6 +8335,15 @@ "node": ">=10" } }, + "node_modules/conventional-changelog-writer/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.ygg.tools/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/conventional-commits-filter": { "version": "2.0.7", "dev": true, @@ -10126,6 +9721,15 @@ "node": ">=0.10.0" } }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.ygg.tools/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-plugin-jest": { "version": "25.7.0", "dev": true, @@ -10178,6 +9782,15 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.ygg.tools/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-plugin-react": { "version": "7.32.2", "dev": true, @@ -10244,6 +9857,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.ygg.tools/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-plugin-testing-library": { "version": "5.11.0", "dev": true, @@ -11002,6 +10624,15 @@ "node": ">=10" } }, + "node_modules/git-semver-tags/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.ygg.tools/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/git-up": { "version": "7.0.0", "dev": true, @@ -11785,36 +11416,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/init-package-json/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/init-package-json/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/init-package-json/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/inquirer": { "version": "8.2.5", "dev": true, @@ -12861,36 +12462,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/libnpmaccess/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/libnpmaccess/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/libnpmaccess/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/libnpmpublish": { "version": "6.0.5", "dev": true, @@ -12930,59 +12501,29 @@ "dev": true, "license": "BSD-2-Clause", "dependencies": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/libnpmpublish/node_modules/npm-package-arg": { - "version": "9.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/libnpmpublish/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/libnpmpublish/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", + "node_modules/libnpmpublish/node_modules/npm-package-arg": { + "version": "9.1.2", "dev": true, "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/libnpmpublish/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/linebreak": { "version": "1.1.0", "license": "MIT", @@ -13232,6 +12773,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.ygg.tools/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/make-error": { "version": "1.3.6", "license": "ISC" @@ -14583,17 +14133,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/node-gyp/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/node-gyp/node_modules/nopt": { "version": "6.0.0", "dev": true, @@ -14608,25 +14147,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/node-gyp/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-gyp/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/node-releases": { "version": "2.0.12", "license": "MIT" @@ -14659,36 +14179,6 @@ "node": ">=10" } }, - "node_modules/normalize-package-data/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/normalize-path": { "version": "3.0.0", "dev": true, @@ -14716,36 +14206,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/npm-install-checks/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-install-checks/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-install-checks/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/npm-normalize-package-bin": { "version": "1.0.1", "dev": true, @@ -14791,20 +14251,6 @@ "node": ">=10" } }, - "node_modules/npm-package-arg/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/npm-package-arg/node_modules/validate-npm-package-name": { "version": "3.0.0", "dev": true, @@ -14909,36 +14355,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/npm-pick-manifest/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-pick-manifest/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-pick-manifest/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/npm-registry-fetch": { "version": "13.3.1", "dev": true, @@ -14989,36 +14405,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/npm-registry-fetch/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-registry-fetch/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-registry-fetch/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/npm-run-path": { "version": "4.0.1", "dev": true, @@ -15826,36 +15212,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/pacote/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/pacote/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/pacote/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/pako": { "version": "0.2.9", "license": "MIT" @@ -16906,36 +16262,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/read-package-json/node_modules/semver": { - "version": "7.5.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/read-package-json/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/read-package-json/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/read-pkg": { "version": "3.0.0", "dev": true, @@ -17725,13 +17051,38 @@ } }, "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "version": "7.5.4", + "resolved": "https://registry.ygg.tools/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.ygg.tools/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.ygg.tools/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/set-blocking": { "version": "2.0.0", "dev": true, @@ -19756,7 +19107,7 @@ } }, "packages/core": { - "name": "@blocknote/core", + "name": "@ygg.tools/blocknote-core", "version": "0.9.4", "license": "MPL-2.0", "dependencies": { @@ -19812,6 +19163,12 @@ "vitest": "^0.34.1" } }, + "packages/core-shim": { + "name": "@blocknote/core-shim", + "dependencies": { + "@ygg.tools/blocknote-core": "*" + } + }, "packages/core/node_modules/@esbuild/darwin-arm64": { "version": "0.18.17", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.17.tgz", @@ -19969,7 +19326,7 @@ "version": "0.9.4", "license": "MPL-2.0", "dependencies": { - "@blocknote/core": "^0.9.4", + "@blocknote/core": "npm:@ygg.tools/blocknote-core@*", "@emotion/react": "^11.10.5", "@mantine/core": "^5.6.1", "@mantine/hooks": "^5.6.1", @@ -20507,6 +19864,15 @@ "fsevents": "~2.3.2" } }, + "packages/react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.ygg.tools/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "packages/react/node_modules/vite": { "version": "4.4.8", "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.8.tgz", diff --git a/package.json b/package.json index 74b0a5febe..c8039f2fef 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "examples/*" ], "devDependencies": { + "semver": "^7.5.4", "@playwright/experimental-ct-react": "^1.38.1", "@playwright/test": "^1.38.1", "eslint": "^8.22.0", @@ -18,10 +19,11 @@ "@typescript-eslint/eslint-plugin": "^5.5.0" }, "scripts": { + "release:ci": "node ygg/release.mjs --type=ci", "start": "lerna run --stream --scope @blocknote/example-editor dev", "start:built": "npx serve examples/editor/dist", "test:updateSnaps": "docker run --rm -e RUN_IN_DOCKER=true --network host -v $(pwd):/work/ -w /work/ -it mcr.microsoft.com/playwright:v1.38.1-focal npx playwright test -u", - "build": "lerna run --stream build --concurrency 1", + "build": "npm run build --workspaces", "build:site": "lerna run --stream docs:build --concurrency 1", "lint": "lerna run --stream lint", "bootstrap": "lerna bootstrap --ci -- --force && patch-package", diff --git a/packages/core/package.json b/packages/core/package.json index b436d4db5f..9c84b56adc 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { - "name": "@blocknote/core", - "homepage": "https://github.com/TypeCellOS/BlockNote", + "name": "@ygg.tools/blocknote-core", + "homepage": "https://github.com/YggTools/BlockNote", "private": false, "license": "MPL-2.0", "version": "0.9.4", @@ -22,7 +22,7 @@ "block-based", "tiptap" ], - "description": "A \"Notion-style\" block-based extensible text editor built on top of Prosemirror and Tiptap.", + "description": "Ygg.tools soft-fork of @blocknote/core: A \"Notion-style\" block-based extensible text editor built on top of Prosemirror and Tiptap.", "type": "module", "source": "src/index.ts", "types": "./types/src/index.d.ts", @@ -107,7 +107,7 @@ }, "publishConfig": { "access": "public", - "registry": "https://registry.npmjs.org/" + "registry": "https://registry.ygg.tools/" }, - "gitHead": "37614ab348dcc7faa830a9a88437b37197a2162d" + "gitHead": "57c86e896c2ff4ea252d6f4c2b0421360d69aa21" } diff --git a/packages/core/src/BlockNoteEditor.ts b/packages/core/src/BlockNoteEditor.ts index 343c4d631a..a85d37f092 100644 --- a/packages/core/src/BlockNoteEditor.ts +++ b/packages/core/src/BlockNoteEditor.ts @@ -1,9 +1,12 @@ -import { Editor, EditorOptions, Extension } from "@tiptap/core"; +import { Extensions, Editor, EditorOptions } from "@tiptap/core"; import { Node } from "prosemirror-model"; // import "./blocknote.css"; import { Editor as TiptapEditor } from "@tiptap/core/dist/packages/core/src/Editor"; import * as Y from "yjs"; -import { getBlockNoteExtensions } from "./BlockNoteExtensions"; +import { + GetExtensionsOptions, + getBlockNoteExtensions, +} from "./BlockNoteExtensions"; import { insertBlocks, removeBlocks, @@ -54,7 +57,25 @@ import { mergeCSSClasses } from "./shared/utils"; export type BlockNoteEditorOptions = { // TODO: Figure out if enableBlockNoteExtensions/disableHistoryExtension are needed and document them. + /** + * @deprecated Use `getExtensions()` that returns an empty array instead. + */ enableBlockNoteExtensions: boolean; + + /** + * A callback function that is used to obtain the list of extensions to load. + * + * @default: `_tipTapOptions.extensions` + (if `enableBlockNoteExtensions` is set) all BlockNote extensions + * + * @param extensionOptions Parameters needed for initialization of some extensions. Can be passed directly to `getBlockNoteExtensions`. + * @param options The options object passed to the editor on construction. + * @returns An array of extensions to load. Note that `_tipTapOptions.extensions` must be manually returned! + */ + getExtensions: ( + extensionOptions: GetExtensionsOptions, + options: Partial> + ) => Extensions; + /** * * (couldn't fix any type, see https://github.com/TypeCellOS/BlockNote/pull/191#discussion_r1210708771) @@ -191,27 +212,30 @@ export class BlockNoteEditor { this.hyperlinkToolbar = new HyperlinkToolbarProsemirrorPlugin(this); this.imageToolbar = new ImageToolbarProsemirrorPlugin(this); - const extensions = getBlockNoteExtensions({ + const extensionOptions: GetExtensionsOptions = { editor: this, domAttributes: newOptions.domAttributes || {}, blockSchema: newOptions.blockSchema, collaboration: newOptions.collaboration, - }); + }; - const blockNoteUIExtension = Extension.create({ - name: "BlockNoteUIExtension", - - addProseMirrorPlugins: () => { - return [ - this.sideMenu.plugin, - this.formattingToolbar.plugin, - this.slashMenu.plugin, - this.hyperlinkToolbar.plugin, - this.imageToolbar.plugin, - ]; - }, - }); - extensions.push(blockNoteUIExtension); + let extensions: Extensions; + if (newOptions.getExtensions) { + if (newOptions.enableBlockNoteExtensions === false) { + throw new Error( + "enableBlockNoteExtensions must not be 'false' if getExtensions() is implemented" + ); + } + extensions = newOptions.getExtensions(extensionOptions, options); + } else { + extensions = []; + if (newOptions._tiptapOptions?.extensions) { + extensions.push(...newOptions._tiptapOptions.extensions); + } + if (newOptions.enableBlockNoteExtensions !== false) { + extensions.push(...getBlockNoteExtensions(extensionOptions)); + } + } this.schema = newOptions.blockSchema; @@ -280,10 +304,7 @@ export class BlockNoteEditor { newOptions.onTextCursorPositionChange?.(this); }, editable: options.editable === undefined ? true : options.editable, - extensions: - newOptions.enableBlockNoteExtensions === false - ? newOptions._tiptapOptions?.extensions - : [...(newOptions._tiptapOptions?.extensions || []), ...extensions], + extensions, editorProps: { attributes: { ...newOptions.domAttributes?.editor, diff --git a/packages/core/src/BlockNoteExtensions.ts b/packages/core/src/BlockNoteExtensions.ts index d328c329b7..3da33460f8 100644 --- a/packages/core/src/BlockNoteExtensions.ts +++ b/packages/core/src/BlockNoteExtensions.ts @@ -1,4 +1,4 @@ -import { Extensions, extensions } from "@tiptap/core"; +import { Extensions, extensions, Extension } from "@tiptap/core"; import { BlockNoteEditor } from "./BlockNoteEditor"; @@ -33,10 +33,7 @@ import { TextColorMark } from "./extensions/TextColor/TextColorMark"; import { TrailingNode } from "./extensions/TrailingNode/TrailingNodeExtension"; import UniqueID from "./extensions/UniqueID/UniqueID"; -/** - * Get all the Tiptap extensions BlockNote is configured with by default - */ -export const getBlockNoteExtensions = (opts: { +export interface GetExtensionsOptions { editor: BlockNoteEditor; domAttributes: Partial; blockSchema: BSchema; @@ -49,71 +46,117 @@ export const getBlockNoteExtensions = (opts: { provider: any; renderCursor?: (user: any) => HTMLElement; }; -}) => { - const ret: Extensions = [ - extensions.ClipboardTextSerializer, - extensions.Commands, - extensions.Editable, - extensions.FocusEvents, - extensions.Tabindex, - - // DevTools, - Gapcursor, - - // DropCursor, - Placeholder.configure({ - emptyNodeClass: blockStyles.isEmpty, - hasAnchorClass: blockStyles.hasAnchor, - isFilterClass: blockStyles.isFilter, - includeChildren: true, - showOnlyCurrent: false, - }), - UniqueID.configure({ - types: ["blockContainer"], - }), - HardBreak, - // Comments, - - // basics: - Text, - - // marks: - Bold, - Code, - Italic, - Strike, - Underline, - Link, - TextColorMark, - TextColorExtension, - BackgroundColorMark, - BackgroundColorExtension, - TextAlignmentExtension, - - // nodes - Doc, - BlockContainer.configure({ - domAttributes: opts.domAttributes, - }), - BlockGroup.configure({ - domAttributes: opts.domAttributes, - }), - ...Object.values(opts.blockSchema).map((blockSpec) => - blockSpec.node.configure({ - editor: opts.editor, - domAttributes: opts.domAttributes, - }) - ), - CustomBlockSerializerExtension, +} + +export interface BlockNoteExtensionGroup { + group: string; // not using `name` to avoid confusion with $extension.name + required: boolean; + extensions: Extensions; +} - Dropcursor.configure({ width: 5, color: "#ddeeff" }), - // This needs to be at the bottom of this list, because Key events (such as enter, when selecting a /command), - // should be handled before Enter handlers in other components like splitListItem - TrailingNode, +/** + * Get all the Tiptap extensions BlockNote is configured with by default, split into rough groups. + */ +export const getBlockNoteExtensionGroups = ( + opts: GetExtensionsOptions +) => { + const ret: BlockNoteExtensionGroup[] = [ + { + group: "Core", + required: true, + extensions: [ + extensions.ClipboardTextSerializer, + extensions.Commands, + extensions.Editable, + extensions.FocusEvents, + extensions.Tabindex, + ], + }, + { + group: "DevTools", + required: true, // ? + extensions: [Gapcursor], + }, + { + group: "DropCursor", + required: true, + extensions: [ + Placeholder.configure({ + emptyNodeClass: blockStyles.isEmpty, + hasAnchorClass: blockStyles.hasAnchor, + isFilterClass: blockStyles.isFilter, + includeChildren: true, + showOnlyCurrent: false, + }), + UniqueID.configure({ + types: ["blockContainer"], + }), + HardBreak, + // Comments, + ], + }, + { + group: "Basics", + required: true, + extensions: [Text], + }, + { + group: "Marks", + required: false, + extensions: [ + Bold, + Code, + Italic, + Strike, + Underline, + Link, + TextColorMark, + TextColorExtension, + BackgroundColorMark, + BackgroundColorExtension, + TextAlignmentExtension, + ], + }, + { + group: "Nodes", + required: true, + extensions: [ + Doc, + BlockContainer.configure({ + domAttributes: opts.domAttributes, + }), + BlockGroup.configure({ + domAttributes: opts.domAttributes, + }), + ...Object.values(opts.blockSchema).map((blockSpec) => + blockSpec.node.configure({ + editor: opts.editor, + domAttributes: opts.domAttributes, + }) + ), + CustomBlockSerializerExtension, + ], + }, + { + group: "Core", // note that we have *two* core groups! + required: true, + extensions: [ + Dropcursor.configure({ width: 5, color: "#ddeeff" }), + // This needs to be at the bottom of this list, because Key events (such as enter, when selecting a /command), + // should be handled before Enter handlers in other components like splitListItem + TrailingNode, + ], + }, ]; if (opts.collaboration) { - ret.push( + const group: BlockNoteExtensionGroup = { + group: "Collaboration", + required: true, + extensions: [], + }; + + group.extensions.push( Collaboration.configure({ fragment: opts.collaboration.fragment, }) @@ -138,7 +181,7 @@ export const getBlockNoteExtensions = (opts: { cursor.insertBefore(nonbreakingSpace2, null); return cursor; }; - ret.push( + group.extensions.push( CollaborationCursor.configure({ user: opts.collaboration.user, render: opts.collaboration.renderCursor || defaultRender, @@ -146,10 +189,48 @@ export const getBlockNoteExtensions = (opts: { }) ); } + + ret.push(group); } else { // disable history extension when collaboration is enabled as Yjs takes care of undo / redo - ret.push(History); + ret.push({ + group: "History", + required: false, + extensions: [History], + }); } + // Editor extensions are always very last (for compatibility with old behaviour) + ret.push({ + group: "Editor", + required: true, + extensions: [ + Extension.create({ + name: "BlockNoteUIExtension", + + addProseMirrorPlugins: () => { + return [ + opts.editor.sideMenu.plugin, + opts.editor.formattingToolbar.plugin, + opts.editor.slashMenu.plugin, + opts.editor.hyperlinkToolbar.plugin, + opts.editor.imageToolbar.plugin, + ]; + }, + }), + ], + }); + return ret; }; + +/** + * Get all the Tiptap extensions BlockNote is configured with by default + */ +export const getBlockNoteExtensions = ( + opts: GetExtensionsOptions +) => { + return getBlockNoteExtensionGroups(opts).flatMap( + (group) => group.extensions + ); +}; diff --git a/packages/react/package.json b/packages/react/package.json index be314c540a..88522427ed 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -47,7 +47,7 @@ "lint": "eslint src --max-warnings 0" }, "dependencies": { - "@blocknote/core": "^0.9.4", + "@blocknote/core": "npm:@ygg.tools/blocknote-core@*", "@emotion/react": "^11.10.5", "@mantine/core": "^5.6.1", "@mantine/hooks": "^5.6.1", diff --git a/packages/react/tsconfig.json b/packages/react/tsconfig.json index 96e3112014..6336a55e07 100644 --- a/packages/react/tsconfig.json +++ b/packages/react/tsconfig.json @@ -18,7 +18,10 @@ "declaration": true, "declarationDir": "types", "composite": true, - "skipLibCheck": true + "skipLibCheck": true, + "paths": { + "@blocknote/core": ["../core/src"] + } }, "include": ["src"], "references": [ diff --git a/ygg/release.mjs b/ygg/release.mjs new file mode 100644 index 0000000000..1f32bc7d9f --- /dev/null +++ b/ygg/release.mjs @@ -0,0 +1,237 @@ +import process from "node:process"; +import fsp from "node:fs/promises"; +import path from "node:path"; +import child_process from "node:child_process"; +import util from "node:util"; + +import semver from "semver"; + +/** + * @param {string} command Command to execute + * @param {string[]} args Command arguments + * @param {Pick&{stdout?: 'pipe', stderr?: 'pipe'}} [options] Additional options + * @returns {Promise<{ code: number, stdout: string, stderr: string }>} Program output + */ +function exec(command, args, options = undefined) { + const stdoutArr = []; + const stderrArr = []; + + const { + cwd = undefined, + stdout = undefined, + stderr = undefined, + } = options ?? {}; + + const p = child_process.spawn(command, args, { + shell: true, + windowsVerbatimArguments: false, + cwd, + }); + return new Promise((resolve, reject) => { + if (stdout === "pipe") p.stdout.pipe(process.stdout); + else p.stdout.on("data", (data) => stdoutArr.push(data)); + if (stderr === "pipe") p.stderr.pipe(process.stderr); + else p.stderr.on("data", (data) => stderrArr.push(data)); + p.on("close", (code) => + resolve({ + code: code ?? -1, + stdout: stdoutArr.join(""), + stderr: stderrArr.join(""), + }) + ); + }); +} + +/** + * Same as `exec`, but pipes stdout & stderr, and throws on error. + * @param {string} command Command to execute + * @param {string[]} args Command arguments + * @param {Pick} [options] Additional options + * @returns {void} + */ +async function execPipe(command, args, options = undefined) { + const { code } = await exec(command, args, { + stdout: "pipe", + stderr: "pipe", + ...(options ?? {}), + }); + if (code !== 0) throw new Error(`${command} command failed`); +} + +/** + * Same as above, but + * + * @param {string[]} args Npm arguments. `--json` will be added to the list. + * @param {Parameters[2]} options Options to pass to `exec` + * @returns {any} Resulting JSON + */ +async function npm(args, options) { + const { code, stdout, stderr } = await exec( + "npm", + [...args, "--json"], + options + ); + if (code !== 0) throw new Error(`npm command failed:\n${stderr}`); + return JSON.parse(stdout); +} + +const { values: args } = util.parseArgs({ + allowPositionals: false, + strict: true, + options: { + type: { + type: "string", + }, + }, +}); + +const cwd = process.cwd(); +const packages = (await npm(["query", ".workspace"])).filter( + (pkg) => + !pkg.private && pkg.path !== cwd && pkg.name.startsWith("@ygg.tools/") +); + +// --dirty & --broken are intentionally omitted +const gitDescribe = await exec("git", ["describe", "--always", "--tags"]); +if (gitDescribe.code !== 0) + throw new Error(`git command failed:\n${gitDescribe.stderr}`); +const gitVersion = gitDescribe.stdout.trim(); + +const gitRevParse = await exec("git", ["rev-parse", "HEAD"]); +if (gitRevParse.code !== 0) + throw new Error(`git command failed:\n${gitRevParse.stderr}`); +const gitHead = gitRevParse.stdout.trim(); + +//const dateStamp = new Date().toISOString().split("T", 1)[0].replaceAll("-", ""); + +async function changePackageOptions(pkg, optionsNew) { + // this is a bit hacky, but alas `npm version` is broken because we've renamed the package + const packageFName = path.join(pkg.path, "package.json"); + const packageJSON = JSON.parse( + await fsp.readFile(packageFName, { encoding: "utf-8" }) + ); + const optionsOld = Object.fromEntries( + [...Object.keys(optionsNew)].map((k) => [k, pkg[k]]) + ); + + // we only write the file if there was a mismatch + if ( + [...Object.keys(optionsNew)].findIndex( + (k) => packageJSON[k] !== optionsNew[k] + ) !== -1 + ) { + Object.assign(packageJSON, optionsNew); + await fsp.writeFile( + packageFName, + JSON.stringify(packageJSON, null, 2) + "\n", + { encoding: "utf-8" } + ); + return optionsOld; + } + + return null; +} + +/** + * @type {Map} + */ +const packagesToRelease = new Map(); + +try { + switch (args.type) { + case "ci": + console.log("Updating package versions:"); + // run version updates in parallel + await Promise.all( + packages.map(async (pkg) => { + const vold = pkg.version; + const vnew = semver.inc( + vold, + "prerelease", + `git.${gitVersion}`, + false + ); + console.log( + `\t${pkg.name}: ${vold} ${vnew ? `-> ${vnew}` : "[no change]"}` + ); + if (vnew) { + await changePackageOptions(pkg, { + version: vnew, + gitHead, + }); + + // check if package version exists online; if it doesn't, schedule submission + const pkgFullName = `${pkg.name}@${vnew}`; + // we don't (necessarily) want to error out on fail, hence manual `npm` call + const { code, stdout, stderr } = await exec("npm", [ + "view", + pkgFullName, + "name", + "--json", + ]); + if (code !== 0) { + const json = JSON.parse(stdout); + if (json?.error?.code !== "E404") + // this is the only error we expect + throw new Error(`npm command failed:\n${stderr}`); + // E404 => no package@version found, so we'll release this one + packagesToRelease.set(pkgFullName, pkg); + } + } + }) + ); + + console.log(); + console.log("Submitting:"); + + // we need to run prepublishOnly/postpublish manually + await execPipe("npm", ["run", "prepublishOnly"]); + try { + await execPipe("npm", [ + ...packages.flatMap((pkg) => ["--workspace", pkg.location]), + "publish", + "--no-git-checks", + "--tag", + "ci", + ]); + } finally { + await execPipe("npm", ["run", "postpublish"]); + } + + break; + default: + throw new Error(`--type is required and must be one of: {ci}`); + } + + // set `edge` tag, which is set unconditionally on all builds + + // for consistency with above and consistency between runs, sort packageKeys + const packageKeys = [...packagesToRelease.keys()].sort(); + + console.log(); + console.log("Updating dist-tags (`edge`):"); + await Promise.all( + packageKeys.map(async (pkgFullName) => { + //console.log(`\t${pkgFullName}`); + await execPipe("npm", ["dist-tag", "add", pkgFullName, "edge"]); + }) + ); +} finally { + console.log(); + console.log("Restoring old package versions:"); + await Promise.all( + packages.map(async (pkg) => { + const vold = + ( + await changePackageOptions(pkg, { + version: pkg.version, + gitHead: pkg.gitHead, + }) + )?.version ?? pkg.version; + const vnew = vold !== pkg.version ? pkg.version : null; + console.log( + `\t${pkg.name}: ${vold} ${vnew ? `-> ${vnew}` : "[no change]"}` + ); + }) + ); +}