Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 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
22 changes: 22 additions & 0 deletions .github/workflows/core.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: Core check
on:
pull_request:

jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run ESLint check
uses: ./.github/actions/lint
with:
package-name: '@editorjs/core'

build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build the package
uses: ./.github/actions/build
with:
package-name: '@editorjs/core'
22 changes: 22 additions & 0 deletions .github/workflows/sdk.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: SDK check
on:
pull_request:

jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run ESLint check
uses: ./.github/actions/lint
with:
package-name: '@editorjs/sdk'

build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build the package
uses: ./.github/actions/build
with:
package-name: '@editorjs/sdk'
5 changes: 3 additions & 2 deletions packages/core/src/api/BlocksAPI.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@ import 'reflect-metadata';
import { Inject, Service } from 'typedi';
import { BlocksManager } from '../components/BlockManager.js';
import { BlockToolData, ToolConfig } from '@editorjs/editorjs';
import { CoreConfigValidated } from '../entities/index.js';
import { CoreConfigValidated } from '@editorjs/sdk';
import { BlocksAPI as BlocksApiInterface } from '@editorjs/sdk';

/**
* Blocks API
* - provides methods to work with blocks
*/
@Service()
export class BlocksAPI {
export class BlocksAPI implements BlocksApiInterface {
/**
* BlocksManager instance to work with blocks
*/
Expand Down
3 changes: 2 additions & 1 deletion packages/core/src/api/SelectionAPI.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@ import { Service } from 'typedi';
import { SelectionManager } from '../components/SelectionManager.js';
import { createInlineToolName } from '@editorjs/model';
import { InlineToolFormatData } from '@editorjs/sdk';
import { SelectionAPI as SelectionApiInterface } from '@editorjs/sdk';

/**
* Selection API class
* - provides methods to work with selection
*/
@Service()
export class SelectionAPI {
export class SelectionAPI implements SelectionApiInterface {
#selectionManager: SelectionManager;

/**
Expand Down
3 changes: 2 additions & 1 deletion packages/core/src/api/index.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import 'reflect-metadata';
import { Inject, Service } from 'typedi';
import { EditorAPI as EditorApiInterface } from '@editorjs/sdk';
import { BlocksAPI } from './BlocksAPI.js';
import { SelectionAPI } from './SelectionAPI.js';

/**
* Class gathers all Editor's APIs
*/
@Service()
export class EditorAPI {
export class EditorAPI implements EditorApiInterface {
/**
* Blocks API instance to work with blocks
*/
Expand Down
4 changes: 1 addition & 3 deletions packages/core/src/components/BlockManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,7 @@ import { Inject, Service } from 'typedi';
import { BlockToolAdapter, CaretAdapter, FormattingAdapter } from '@editorjs/dom-adapters';
import ToolsManager from '../tools/ToolsManager.js';
import { BlockAPI, BlockToolData } from '@editorjs/editorjs';
import { CoreConfigValidated } from '../entities/Config.js';
import { BlockAddedCoreEvent, BlockRemovedCoreEvent } from './EventBus/index.js';
import { EventBus } from '@editorjs/sdk';
import { CoreConfigValidated, EventBus, BlockAddedCoreEvent, BlockRemovedCoreEvent } from '@editorjs/sdk';
/**
* Parameters for the BlocksManager.insert() method
*/
Expand Down
6 changes: 0 additions & 6 deletions packages/core/src/components/EventBus/index.ts

This file was deleted.

1 change: 0 additions & 1 deletion packages/core/src/components/EventBus/ui-events/index.ts

This file was deleted.

4 changes: 1 addition & 3 deletions packages/core/src/components/SelectionManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,8 @@ import { FormattingAdapter } from '@editorjs/dom-adapters';
import type { CaretManagerEvents, InlineFragment, InlineToolName } from '@editorjs/model';
import { CaretManagerCaretUpdatedEvent, Index, EditorJSModel, createInlineToolData, createInlineToolName } from '@editorjs/model';
import { EventType } from '@editorjs/model';
import { CoreEventType, ToolLoadedCoreEvent } from './EventBus/index.js';
import { EventBus } from '@editorjs/sdk';
import { CoreEventType, ToolLoadedCoreEvent, EventBus, SelectionChangedCoreEvent } from '@editorjs/sdk';
import { Inject, Service } from 'typedi';
import { SelectionChangedCoreEvent } from './EventBus/core-events/SelectionChangedCoreEvent.js';
import { type CoreConfig, InlineTool, InlineToolFormatData } from '@editorjs/sdk';

/**
Expand Down
6 changes: 0 additions & 6 deletions packages/core/src/entities/Config.ts

This file was deleted.

3 changes: 0 additions & 3 deletions packages/core/src/entities/index.ts

This file was deleted.

15 changes: 2 additions & 13 deletions packages/core/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,13 @@ import { CollaborationManager } from '@editorjs/collaboration-manager';
import { type DocumentId, EditorJSModel, EventType } from '@editorjs/model';
import type { ContainerInstance } from 'typedi';
import { Container } from 'typedi';
import { CoreEventType } from './components/EventBus/index.js';
import { EventBus, UiComponentType } from '@editorjs/sdk';
import { CoreEventType, EventBus, UiComponentType } from '@editorjs/sdk';
import { composeDataFromVersion2 } from './utils/composeDataFromVersion2.js';
import ToolsManager from './tools/ToolsManager.js';
import { CaretAdapter, FormattingAdapter } from '@editorjs/dom-adapters';
import type { CoreConfigValidated } from './entities/Config.js';
import type { CoreConfig } from '@editorjs/sdk';
import type { CoreConfigValidated, CoreConfig, EditorjsPluginConstructor } from '@editorjs/sdk';
import { BlocksManager } from './components/BlockManager.js';
import { SelectionManager } from './components/SelectionManager.js';
import type { EditorjsPluginConstructor } from './entities/EditorjsPlugin.js';
import { EditorAPI } from './api/index.js';
import { generateId } from './utils/uid.js';

Expand Down Expand Up @@ -219,11 +216,3 @@ export default class Core {
}
}
}

/**
* @todo move to "sdk" package
*/
export type * from './entities/index.js';
export * from './components/EventBus/index.js';
export * from './api/index.js';
export * from './tools/facades/index.js';
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
/* eslint-disable jsdoc/informative-docs */
import type { BlockToolConstructor, InlineToolConstructor } from '@editorjs/sdk';
import { InternalInlineToolSettings, InternalTuneSettings } from './BaseToolFacade.js';
import { InlineToolFacade } from './InlineToolFacade.js';
import { BlockTuneFacade } from './BlockTuneFacade.js';
import { BlockToolFacade } from './BlockToolFacade.js';
// import type ApiModule from '../modules/api';
import type { BlockToolConstructor, EditorAPI, InlineToolConstructor, UnifiedToolConfig } from '@editorjs/sdk';
import {
InternalInlineToolSettings,
InternalTuneSettings,
InlineToolFacade,
BlockTuneFacade,
BlockToolFacade
} from '@editorjs/sdk'; ;
import type {
ToolConstructable,
EditorConfig,
InlineToolConstructable,
BlockTuneConstructable
} from '@editorjs/editorjs';
import type { UnifiedToolConfig } from '../../entities/UnifiedToolConfig.js';

type ToolConstructor = typeof InlineToolFacade | typeof BlockToolFacade | typeof BlockTuneFacade;

Expand All @@ -27,8 +28,8 @@ export class ToolsFactory {
/**
* EditorJS API Module
*/
// eslint-disable-next-line @typescript-eslint/no-explicit-any
private api: any;

private api: EditorAPI;

/**
* EditorJS configuration
Expand Down
27 changes: 15 additions & 12 deletions packages/core/src/tools/ToolsManager.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,30 @@
import type { BlockToolConstructor } from '@editorjs/sdk';
import type {
BlockToolConstructor,
UnifiedToolConfig
} from '@editorjs/sdk';
import 'reflect-metadata';
import { deepMerge, isFunction, isObject, PromiseQueue } from '@editorjs/helpers';
import { Inject, Service } from 'typedi';
import {
BlockToolFacade, BlockTuneFacade,
InlineToolFacade,
ToolFacadeClass,
ToolsCollection,
ToolsFactory
} from './facades/index.js';
import { ToolsFactory } from './ToolsFactory.js';
import { Paragraph } from './internal/block-tools/paragraph/index.js';
import type {
EditorConfig,
ToolConstructable,
ToolSettings
} from '@editorjs/editorjs';
import { InlineTool, InlineToolConstructor } from '@editorjs/sdk';
import type { UnifiedToolConfig } from '../entities/index.js';
import {
InlineTool,
InlineToolConstructor,
ToolLoadedCoreEvent,
BlockToolFacade, BlockTuneFacade,
InlineToolFacade,
ToolFacadeClass,
ToolsCollection,
EventBus
} from '@editorjs/sdk';
import BoldInlineTool from './internal/inline-tools/bold/index.js';
import ItalicInlineTool from './internal/inline-tools/italic/index.js';
import LinkInlineTool from './internal/inline-tools/link/index.js';
import { ToolLoadedCoreEvent } from '../components/EventBus/index.js';
import { EventBus } from '@editorjs/sdk';

/**
* Works with tools
Expand Down
6 changes: 0 additions & 6 deletions packages/core/src/tools/facades/index.ts

This file was deleted.

9 changes: 9 additions & 0 deletions packages/dom-adapters/.eslintrc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,15 @@ rules:
- always
'@typescript-eslint/no-unsafe-declaration-merging':
- 0
# @todo: remove when we setup eslint to correctly handle the types
'@typescript-eslint/no-unsafe-call':
- 0
'@typescript-eslint/no-unsafe-member-access':
- 0
'@typescript-eslint/no-unsafe-assignment':
- 0
'@typescript-eslint/no-unsafe-argument':
- 0
env:
browser: true

Expand Down
8 changes: 6 additions & 2 deletions packages/dom-adapters/src/BlockToolAdapter/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ import {
isNonTextInput
} from '../utils/index.js';
import { InputType } from './types/InputType.js';
import type { BlockToolAdapter as BlockToolAdapterInterface, CoreConfig } from '@editorjs/sdk';
import { BeforeInputUIEventName, type BlockToolAdapter as BlockToolAdapterInterface, type CoreConfig } from '@editorjs/sdk';
import type { FormattingAdapter } from '../FormattingAdapter/index.js';
import type { EventBus } from '@editorjs/sdk';
import type { BeforeInputUIEvent, EventBus } from '@editorjs/sdk';

/**
* BlockToolAdapter is using inside Block tools to connect browser DOM elements to the model
Expand Down Expand Up @@ -86,6 +86,10 @@ export class BlockToolAdapter implements BlockToolAdapterInterface {
this.#caretAdapter = caretAdapter;
this.#formattingAdapter = formattingAdapter;
this.#toolName = toolName;

// eventBus.addEventListener(BeforeInputUIEventName, (event: BeforeInputUIEvent) => {
// console.log('BeforeInputUIEventName', event);
// });
}

/**
Expand Down
7 changes: 4 additions & 3 deletions packages/sdk/package.json
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
{
"name": "@editorjs/sdk",
"version": "0.0.0",
"version": "0.1.0",
"packageManager": "[email protected]",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"type": "module",
"scripts": {
"build": "tsc",
"build": "yarn clear && tsc --build tsconfig.build.json",
"lint": "eslint",
"lint:ci": "yarn lint --max-warnings 0",
"lint:fix": "yarn lint --fix"
"lint:fix": "yarn lint --fix",
"clear": "rm -rf dist && rm -f tsconfig.build.tsbuildinfo && rm -f tsconfig.tsbuildinfo"
},
"devDependencies": {
"@types/eslint": "^8",
Expand Down
27 changes: 27 additions & 0 deletions packages/sdk/src/api/BlocksAPI.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import type { BlockToolData, ToolConfig } from '@editorjs/editorjs';

/**
* Blocks API interface
* Provides methods to work with blocks
*/
export interface BlocksAPI {
/**
* Inserts a new block to the editor
* @param type - Block tool name to insert
* @param data - Block's initial data
* @param _config - not used but left for compatibility
* @param index - index to insert block at
* @param needToFocus - flag indicates if new block should be focused @todo implement
* @param replace - flag indicates if block at index should be replaced @todo implement
* @param id - id of the inserted block @todo implement
*/
insert(
type?: string,
data?: BlockToolData,
_config?: ToolConfig,
index?: number,
needToFocus?: boolean,
replace?: boolean,
id?: string
): void;
}
18 changes: 18 additions & 0 deletions packages/sdk/src/api/EditorAPI.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import type { BlocksAPI } from './BlocksAPI.js';
import type { SelectionAPI } from './SelectionAPI.js';

/**
* Editor API interface
* Gathers all Editor's APIs
*/
export interface EditorAPI {
/**
* Blocks API instance to work with blocks
*/
blocks: BlocksAPI;

/**
* Selection API instance to work with selection and inline formatting
*/
selection: SelectionAPI;
}
14 changes: 14 additions & 0 deletions packages/sdk/src/api/SelectionAPI.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import type { InlineToolName } from '@editorjs/model';

/**
* Selection API interface
* Provides methods to work with text selection and inline tools
*/
export interface SelectionAPI {
/**
* Applies inline tool for the current selection
* @param tool - name of the inline tool to apply
* @param data - optional data for the inline tool
*/
applyInlineToolForCurrentSelection(tool: InlineToolName, data?: Record<string, unknown>): void;
}
3 changes: 3 additions & 0 deletions packages/sdk/src/api/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export * from './EditorAPI.js';
export * from './BlocksAPI.js';
export * from './SelectionAPI.js';
6 changes: 6 additions & 0 deletions packages/sdk/src/entities/Config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,9 @@ export interface CoreConfig extends EditorConfig {
*/
collaborationServer?: string;
}

/**
* After validation we can be sure that all required fields are set
*/
export type CoreConfigValidated = Required<CoreConfig>;

Loading