Skip to content

refactor: update directory structure and imports #447

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
const typeScriptExtensions = [".ts", ".cts", ".mts", ".tsx"];

const allExtensions = [...typeScriptExtensions, ".js", ".jsx"];

module.exports = {
root: true,
extends: [
Expand All @@ -8,6 +12,18 @@ module.exports = {
],
parser: "@typescript-eslint/parser",
plugins: ["import", "@typescript-eslint"],
settings: {
"import/extensions": allExtensions,
"import/external-module-folders": ["node_modules", "node_modules/@types"],
"import/parsers": {
"@typescript-eslint/parser": typeScriptExtensions,
},
"import/resolver": {
node: {
extensions: allExtensions,
},
},
},
rules: {
curly: 1,
"import/no-extraneous-dependencies": [
Expand All @@ -23,5 +39,19 @@ module.exports = {
"@typescript-eslint/no-non-null-assertion": "off",
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/ban-ts-comment": "off",
"import/no-cycle": "error",
// doesn't work:
// "import/no-restricted-paths": [
// "error",
// {
// zones: [
// {
// target: "./src/**/*",
// from: "./types/**/*",
// message: "Import from this module to types is not allowed.",
// },
// ],
// },
// ],
},
};
8 changes: 8 additions & 0 deletions packages/core/src/api/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
### @blocknote/core/src/api

Implements the BlockNote API surface

- `blockManipulation`: API to insert / update / remove blocks
- `exporters`: exporting to HTML / markdown / other formats
- `nodeConversions`: internal API for converting between BlockNote Schema (Blocks) and Prosemirror (Nodes)
- `parsers`: importing from HTML / markdown / other formats
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { afterEach, beforeEach, describe, expect, it } from "vitest";
import { BlockNoteEditor } from "../../BlockNoteEditor";
import { Block, PartialBlock } from "../../extensions/Blocks/api/blocks/types";
import {
DefaultBlockSchema,
DefaultInlineContentSchema,
DefaultStyleSchema,
} from "../../extensions/Blocks/api/defaultBlocks";
} from "../../blocks/defaultBlocks";
import { BlockNoteEditor } from "../../editor/BlockNoteEditor";
import { Block, PartialBlock } from "../../schema/blocks/types";

let editor: BlockNoteEditor;

Expand Down
10 changes: 5 additions & 5 deletions packages/core/src/api/blockManipulation/blockManipulation.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import { Editor } from "@tiptap/core";
import { Node } from "prosemirror-model";

import { BlockNoteEditor } from "../../BlockNoteEditor";
import type { BlockNoteEditor } from "../../editor/BlockNoteEditor";
import {
BlockIdentifier,
BlockSchema,
InlineContentSchema,
PartialBlock,
} from "../../extensions/Blocks/api/blocks/types";
import { InlineContentSchema } from "../../extensions/Blocks/api/inlineContent/types";
import { StyleSchema } from "../../extensions/Blocks/api/styles/types";
StyleSchema,
} from "../../schema";
import { blockToNode } from "../nodeConversions/nodeConversions";
import { getNodeById } from "../util/nodeUtil";
import { getNodeById } from "../nodeUtil";

export function insertBlocks<
BSchema extends BlockSchema,
Expand Down
6 changes: 2 additions & 4 deletions packages/core/src/api/exporters/copyExtension.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
import { Extension } from "@tiptap/core";
import { Plugin } from "prosemirror-state";

import { BlockNoteEditor } from "../../BlockNoteEditor";
import { BlockSchema } from "../../extensions/Blocks/api/blocks/types";
import { InlineContentSchema } from "../../extensions/Blocks/api/inlineContent/types";
import { StyleSchema } from "../../extensions/Blocks/api/styles/types";
import type { BlockNoteEditor } from "../../editor/BlockNoteEditor";
import { BlockSchema, InlineContentSchema, StyleSchema } from "../../schema";
import { createExternalHTMLExporter } from "./html/externalHTMLExporter";
import { createInternalHTMLSerializer } from "./html/internalHTMLSerializer";
import { cleanHTMLToMarkdown } from "./markdown/markdownExporter";
Expand Down
8 changes: 4 additions & 4 deletions packages/core/src/api/exporters/html/externalHTMLExporter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ import rehypeParse from "rehype-parse";
import rehypeStringify from "rehype-stringify";
import { unified } from "unified";

import { BlockNoteEditor } from "../../../BlockNoteEditor";
import type { BlockNoteEditor } from "../../../editor/BlockNoteEditor";
import {
BlockSchema,
InlineContentSchema,
PartialBlock,
} from "../../../extensions/Blocks/api/blocks/types";
import { InlineContentSchema } from "../../../extensions/Blocks/api/inlineContent/types";
import { StyleSchema } from "../../../extensions/Blocks/api/styles/types";
StyleSchema,
} from "../../../schema";
import { blockToNode } from "../../nodeConversions/nodeConversions";
import {
serializeNodeInner,
Expand Down
19 changes: 8 additions & 11 deletions packages/core/src/api/exporters/html/htmlConversion.test.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@
import { afterEach, beforeEach, describe, expect, it } from "vitest";
import { BlockNoteEditor } from "../../../BlockNoteEditor";
import { BlockNoteEditor } from "../../../editor/BlockNoteEditor";

import { addIdsToBlocks, partialBlocksToBlocksForTesting } from "../../..";
import {
BlockSchema,
PartialBlock,
} from "../../../extensions/Blocks/api/blocks/types";
import { InlineContentSchema } from "../../../extensions/Blocks/api/inlineContent/types";
import { StyleSchema } from "../../../extensions/Blocks/api/styles/types";
import { customBlocksTestCases } from "../../testCases/cases/customBlocks";
import { customInlineContentTestCases } from "../../testCases/cases/customInlineContent";
import { customStylesTestCases } from "../../testCases/cases/customStyles";
import { defaultSchemaTestCases } from "../../testCases/cases/defaultSchema";
import { BlockSchema, PartialBlock } from "../../../schema/blocks/types";
import { InlineContentSchema } from "../../../schema/inlineContent/types";
import { StyleSchema } from "../../../schema/styles/types";
import { customBlocksTestCases } from "../../testUtil/cases/customBlocks";
import { customInlineContentTestCases } from "../../testUtil/cases/customInlineContent";
import { customStylesTestCases } from "../../testUtil/cases/customStyles";
import { defaultSchemaTestCases } from "../../testUtil/cases/defaultSchema";
import { createExternalHTMLExporter } from "./externalHTMLExporter";
import { createInternalHTMLSerializer } from "./internalHTMLSerializer";

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { DOMSerializer, Fragment, Node, Schema } from "prosemirror-model";
import { BlockNoteEditor } from "../../../BlockNoteEditor";
import type { BlockNoteEditor } from "../../../editor/BlockNoteEditor";
import {
BlockSchema,
InlineContentSchema,
PartialBlock,
} from "../../../extensions/Blocks/api/blocks/types";
import { InlineContentSchema } from "../../../extensions/Blocks/api/inlineContent/types";
import { StyleSchema } from "../../../extensions/Blocks/api/styles/types";
StyleSchema,
} from "../../../schema";
import { blockToNode } from "../../nodeConversions/nodeConversions";
import {
serializeNodeInner,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import { DOMSerializer, Fragment, Node } from "prosemirror-model";

import { BlockNoteEditor } from "../../../../BlockNoteEditor";
import { BlockSchema } from "../../../../extensions/Blocks/api/blocks/types";
import { InlineContentSchema } from "../../../../extensions/Blocks/api/inlineContent/types";
import { StyleSchema } from "../../../../extensions/Blocks/api/styles/types";
import type { BlockNoteEditor } from "../../../../editor/BlockNoteEditor";
import {
BlockSchema,
InlineContentSchema,
StyleSchema,
} from "../../../../schema";
import { nodeToBlock } from "../../../nodeConversions/nodeConversions";

function doc(options: { document?: Document }) {
Expand Down
21 changes: 9 additions & 12 deletions packages/core/src/api/exporters/markdown/markdownExporter.test.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,15 @@
import fs from "node:fs";
import path from "node:path";
import { afterEach, beforeEach, describe, expect, it } from "vitest";
import { BlockNoteEditor } from "../../../BlockNoteEditor";
import {
BlockSchema,
PartialBlock,
} from "../../../extensions/Blocks/api/blocks/types";
import { InlineContentSchema } from "../../../extensions/Blocks/api/inlineContent/types";
import { StyleSchema } from "../../../extensions/Blocks/api/styles/types";
import { partialBlocksToBlocksForTesting } from "../../nodeConversions/testUtil";
import { customBlocksTestCases } from "../../testCases/cases/customBlocks";
import { customInlineContentTestCases } from "../../testCases/cases/customInlineContent";
import { customStylesTestCases } from "../../testCases/cases/customStyles";
import { defaultSchemaTestCases } from "../../testCases/cases/defaultSchema";
import { BlockNoteEditor } from "../../../editor/BlockNoteEditor";
import { BlockSchema, PartialBlock } from "../../../schema/blocks/types";
import { InlineContentSchema } from "../../../schema/inlineContent/types";
import { StyleSchema } from "../../../schema/styles/types";
import { partialBlocksToBlocksForTesting } from "../../testUtil/partialBlockTestUtil";
import { customBlocksTestCases } from "../../testUtil/cases/customBlocks";
import { customInlineContentTestCases } from "../../testUtil/cases/customInlineContent";
import { customStylesTestCases } from "../../testUtil/cases/customStyles";
import { defaultSchemaTestCases } from "../../testUtil/cases/defaultSchema";

async function convertToMarkdownAndCompareSnapshots<
B extends BlockSchema,
Expand Down
6 changes: 3 additions & 3 deletions packages/core/src/api/exporters/markdown/markdownExporter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ import rehypeRemark from "rehype-remark";
import remarkGfm from "remark-gfm";
import remarkStringify from "remark-stringify";
import { unified } from "unified";
import type { BlockNoteEditor } from "../../../editor/BlockNoteEditor";
import {
Block,
BlockNoteEditor,
BlockSchema,
InlineContentSchema,
StyleSchema,
createExternalHTMLExporter,
} from "../../..";
} from "../../../schema";
import { createExternalHTMLExporter } from "../html/externalHTMLExporter";
import { removeUnderlines } from "./removeUnderlinesRehypePlugin";

export function cleanHTMLToMarkdown(cleanHTMLString: string) {
Expand Down
12 changes: 6 additions & 6 deletions packages/core/src/api/nodeConversions/nodeConversions.test.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { afterEach, beforeEach, describe, expect, it } from "vitest";

import { BlockNoteEditor } from "../../BlockNoteEditor";
import { PartialBlock } from "../../extensions/Blocks/api/blocks/types";
import { customInlineContentTestCases } from "../testCases/cases/customInlineContent";
import { customStylesTestCases } from "../testCases/cases/customStyles";
import { defaultSchemaTestCases } from "../testCases/cases/defaultSchema";
import { BlockNoteEditor } from "../../editor/BlockNoteEditor";
import { PartialBlock } from "../../schema/blocks/types";
import { customInlineContentTestCases } from "../testUtil/cases/customInlineContent";
import { customStylesTestCases } from "../testUtil/cases/customStyles";
import { defaultSchemaTestCases } from "../testUtil/cases/defaultSchema";
import { blockToNode, nodeToBlock } from "./nodeConversions";
import { addIdsToBlock, partialBlockToBlockForTesting } from "./testUtil";
import { addIdsToBlock, partialBlockToBlockForTesting } from "../testUtil/partialBlockTestUtil";

function validateConversion(
block: PartialBlock<any, any, any>,
Expand Down
28 changes: 15 additions & 13 deletions packages/core/src/api/nodeConversions/nodeConversions.ts
Original file line number Diff line number Diff line change
@@ -1,30 +1,32 @@
import { Mark } from "@tiptap/pm/model";
import { Node, Schema } from "prosemirror-model";
import {
import { Mark, Node, Schema } from "@tiptap/pm/model";

import UniqueID from "../../extensions/UniqueID/UniqueID";
import type {
Block,
BlockSchema,
PartialBlock,
PartialTableContent,
TableContent,
} from "../../extensions/Blocks/api/blocks/types";
import {
CustomInlineContentConfig,
CustomInlineContentFromConfig,
InlineContent,
InlineContentFromConfig,
InlineContentSchema,
PartialBlock,
PartialCustomInlineContentFromConfig,
PartialInlineContent,
PartialLink,
PartialTableContent,
StyleSchema,
StyledText,
Styles,
TableContent,
} from "../../schema";
import { getBlockInfo } from "../getBlockInfoFromPos";

import {
isLinkInlineContent,
isPartialLinkInlineContent,
isStyledTextInlineContent,
} from "../../extensions/Blocks/api/inlineContent/types";
import { StyleSchema, Styles } from "../../extensions/Blocks/api/styles/types";
import { getBlockInfo } from "../../extensions/Blocks/helpers/getBlockInfoFromPos";
import UniqueID from "../../extensions/UniqueID/UniqueID";
import { UnreachableCaseError } from "../../shared/utils";
} from "../../schema/inlineContent/types";
import { UnreachableCaseError } from "../../util/typescript";

/**
* Convert a StyledText inline element to a
Expand Down
12 changes: 8 additions & 4 deletions packages/core/src/api/parsers/html/parseHTML.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
import { DOMParser, Schema } from "prosemirror-model";
import { Block, BlockSchema, nodeToBlock } from "../../..";
import { InlineContentSchema } from "../../../extensions/Blocks/api/inlineContent/types";
import { StyleSchema } from "../../../extensions/Blocks/api/styles/types";
import { nestedListsToBlockNoteStructure } from "./util/nestedLists";
import {
Block,
BlockSchema,
InlineContentSchema,
StyleSchema,
} from "../../../schema";

import { nodeToBlock } from "../../nodeConversions/nodeConversions";
import { nestedListsToBlockNoteStructure } from "./util/nestedLists";
export async function HTMLToBlocks<
BSchema extends BlockSchema,
I extends InlineContentSchema,
Expand Down
7 changes: 6 additions & 1 deletion packages/core/src/api/parsers/markdown/parseMarkdown.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,12 @@ import remarkGfm from "remark-gfm";
import remarkParse from "remark-parse";
import remarkRehype, { defaultHandlers } from "remark-rehype";
import { unified } from "unified";
import { Block, BlockSchema, InlineContentSchema, StyleSchema } from "../../..";
import {
Block,
BlockSchema,
InlineContentSchema,
StyleSchema,
} from "../../../schema";
import { HTMLToBlocks } from "../html/parseHTML";

// modified version of https://github.com/syntax-tree/mdast-util-to-hast/blob/main/lib/handlers/code.js
Expand Down
6 changes: 2 additions & 4 deletions packages/core/src/api/parsers/pasteExtension.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
import { Extension } from "@tiptap/core";
import { Plugin } from "prosemirror-state";

import { BlockNoteEditor } from "../../BlockNoteEditor";
import { BlockSchema } from "../../extensions/Blocks/api/blocks/types";
import { InlineContentSchema } from "../../extensions/Blocks/api/inlineContent/types";
import { StyleSchema } from "../../extensions/Blocks/api/styles/types";
import type { BlockNoteEditor } from "../../editor/BlockNoteEditor";
import { BlockSchema, InlineContentSchema, StyleSchema } from "../../schema";
import { nestedListsToBlockNoteStructure } from "./html/util/nestedLists";

const acceptedMIMETypes = [
Expand Down
20 changes: 0 additions & 20 deletions packages/core/src/api/testCases/index.ts

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,22 +1,19 @@
import { EditorTestCases } from "..";
import { EditorTestCases } from "../index";

import { BlockNoteEditor } from "../../../BlockNoteEditor";
import { createBlockSpec } from "../../../extensions/Blocks/api/blocks/createSpec";
import {
BlockSchemaFromSpecs,
BlockSpecs,
} from "../../../extensions/Blocks/api/blocks/types";
import { BlockNoteEditor } from "../../../editor/BlockNoteEditor";
import {
DefaultInlineContentSchema,
DefaultStyleSchema,
defaultBlockSpecs,
} from "../../../extensions/Blocks/api/defaultBlocks";
import { defaultProps } from "../../../extensions/Blocks/api/defaultProps";
} from "../../../blocks/defaultBlocks";
import { defaultProps } from "../../../blocks/defaultProps";
import {
imagePropSchema,
renderImage,
} from "../../../extensions/Blocks/nodes/BlockContent/ImageBlockContent/ImageBlockContent";
import { uploadToTmpFilesDotOrg_DEV_ONLY } from "../../../extensions/Blocks/nodes/BlockContent/ImageBlockContent/uploadToTmpFilesDotOrg_DEV_ONLY";
} from "../../../blocks/ImageBlockContent/ImageBlockContent";
import { uploadToTmpFilesDotOrg_DEV_ONLY } from "../../../blocks/ImageBlockContent/uploadToTmpFilesDotOrg_DEV_ONLY";
import { createBlockSpec } from "../../../schema/blocks/createSpec";
import { BlockSchemaFromSpecs, BlockSpecs } from "../../../schema/blocks/types";

// This is a modified version of the default image block that does not implement
// a `serialize` function. It's used to test if the custom serializer by default
Expand Down
Loading