Skip to content
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
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'
8 changes: 8 additions & 0 deletions packages/core/eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,14 @@ export default [
],
ignoreTypeImport: true,
}],
// @todo: remove when we setup eslint to correctly handle the types
'n/no-missing-import': 'off',
'@typescript-eslint/no-unsafe-call': 'off',
'@typescript-eslint/no-unsafe-member-access': 'off',
'@typescript-eslint/no-unsafe-assignment': 'off',
'@typescript-eslint/no-unsafe-argument': 'off',
'@typescript-eslint/no-missing-import': 'off',
'@typescript-eslint/no-unsafe-return': 'off',
},
},
];
2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"build": "yarn clear && tsc --build tsconfig.build.json",
"dev": "yarn build --watch",
"lint": "eslint ./src",
"lint:ci": "yarn lint --max-warnings 0",
"lint:ci": "eslint --config ./eslint.config.mjs ./src --max-warnings 0",
"lint:fix": "yarn lint --fix",
"clear": "rm -rf ./dist && rm -rf ./tsconfig.build.tsbuildinfo"
},
Expand Down
6 changes: 3 additions & 3 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 Expand Up @@ -58,7 +59,6 @@ export class BlocksAPI {
): void {
this.#blocksManager.insert({
type,
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
data,
index,
replace,
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
5 changes: 1 addition & 4 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 Expand Up @@ -121,7 +119,6 @@ export class BlocksManager {
newIndex = this.#model.length + (replace ? 0 : 1);
}

// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
this.#model.addBlock(this.#config.userId, {
...data,
name: type,
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.

6 changes: 2 additions & 4 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 Expand Up @@ -61,7 +59,7 @@ export class SelectionManager {
this.#eventBus.addEventListener(`core:${CoreEventType.ToolLoaded}`, (event: ToolLoadedCoreEvent) => {
const { tool } = event.detail;

if (!tool.isInline()) {
if ('isInline' in tool && tool.isInline() === false) {
return;
}

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.

19 changes: 4 additions & 15 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 @@ -163,7 +160,7 @@ export default class Core {
/**
* Get all registered plugin types from the container
*/
const pluginTypes = Object.values(UiComponentType) as string[];
const pluginTypes = Object.values(UiComponentType);

for (const pluginType of pluginTypes) {
const plugin = this.#iocContainer.get<EditorjsPluginConstructor>(pluginType);
Expand Down Expand Up @@ -204,7 +201,7 @@ export default class Core {
}
}

if (config.data) {
if (config.data !== undefined) {
if (config.data.blocks === undefined) {
throw new Error('Editor configuration should contain blocks');
}
Expand All @@ -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,18 +1,20 @@
/* 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';

// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
type ToolConstructor = typeof InlineToolFacade | typeof BlockToolFacade | typeof BlockTuneFacade;

/**
Expand All @@ -27,8 +29,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 All @@ -47,7 +49,6 @@ export class ToolsFactory {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
api: any
) {
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
this.api = api;
this.config = config;
this.editorConfig = editorConfig;
Expand All @@ -57,13 +58,13 @@ export class ToolsFactory {
* Returns Tool object based on it's type
* @param name - tool name
*/
// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
public get(name: string): InlineToolFacade | BlockToolFacade | BlockTuneFacade {
const { class: constructable, isInternal = false, ...config } = this.config[name];

const Constructor = this.getConstructor(constructable);
// const isTune = constructable[InternalTuneSettings.IsTune];

// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
return new Constructor({
name,
constructable,
Expand All @@ -84,6 +85,7 @@ export class ToolsFactory {
* Find appropriate Tool object constructor for Tool constructable
* @param constructable - Tools constructable
*/
// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
private getConstructor(constructable: ToolConstructable | BlockToolConstructor | InlineToolConstructor): ToolConstructor {
switch (true) {
case (constructable as InlineToolConstructable)[InternalInlineToolSettings.IsInline]:
Expand Down
31 changes: 17 additions & 14 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 Expand Up @@ -146,14 +149,14 @@ export default class ToolsManager {

const tool = this.#factory.get(toolName);

if (tool.isInline()) {
if ('isInline' in tool && tool.isInline() === true) {
/**
* Some Tools validation
*/
const inlineToolRequiredMethods = ['render'];
const notImplementedMethods = inlineToolRequiredMethods.filter(method => tool.create()[method as keyof InlineTool] !== undefined);

if (notImplementedMethods.length) {
if (notImplementedMethods.length > 0) {
/**
* @todo implement logger
*/
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/core/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,15 @@
"references": [
{
"path": "../model/tsconfig.build.json"
},
{
"path": "../sdk/tsconfig.build.json"
},
{
"path": "../dom-adapters/tsconfig.build.json"
},
{
"path": "../collaboration-manager/tsconfig.build.json"
}
]
}
Loading