Skip to content

Commit

Permalink
Merge pull request #10 from retejs/new-linter
Browse files Browse the repository at this point in the history
fix: update cli and fix linting errors
  • Loading branch information
Ni55aN authored Aug 30, 2024
2 parents dbce796 + aab7695 commit 9d94e41
Show file tree
Hide file tree
Showing 27 changed files with 2,198 additions and 1,796 deletions.
8 changes: 0 additions & 8 deletions .eslintrc

This file was deleted.

3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,6 @@ node_modules
npm-debug.log
dist
docs
/coverage
.rete-cli
.sonar
17 changes: 17 additions & 0 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import tseslint from 'typescript-eslint';
import configs from 'rete-cli/configs/eslint.mjs';
import gloals from 'globals'

export default tseslint.config(
...configs,
{
languageOptions: {
globals: {
...gloals.browser
}
},
rules: {
'no-undefined': 'off'
}
}
)
3,781 changes: 2,067 additions & 1,714 deletions package-lock.json

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,11 @@
"@rollup/plugin-alias": "^5.0.0",
"@rollup/plugin-commonjs": "^25.0.0",
"@types/three": "^0.156.0",
"globals": "^15.9.0",
"parse-svg-path": "^0.1.2",
"rete": "^2.0.1",
"rete-area-plugin": "^2.0.0",
"rete-cli": "^1.0.2",
"rete-cli": "~2.0.1",
"rete-render-utils": "^2.0.0",
"svg-path-contours": "^2.0.0",
"three": "^0.156.1"
Expand Down
3 changes: 2 additions & 1 deletion src/area.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { Object3D } from 'three'

import { Content } from './content'
import { HybridScene } from './scene'
import { orbitControlsRestrictor } from './scene/OrbitControls'
Expand All @@ -16,7 +17,7 @@ type Events = {
reordered: (element: HTMLElement) => Promise<unknown>
}
type Guards = {
transform: (params: TransformEventParams) => Promise<unknown | boolean>
transform: (params: TransformEventParams) => Promise<unknown>
}

/**
Expand Down
22 changes: 13 additions & 9 deletions src/connection-view.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,21 @@ export class ConnectionView {
this.element.style.position = 'absolute'
this.element.style.left = '0'
this.element.style.top = '0'
this.element.addEventListener('contextmenu', event => events.contextmenu(event))
this.element.addEventListener('contextmenu', event => {
events.contextmenu(event)
})

this.object = new ObjectHTML(this.element)
}

// public update(params?: HTML3DOptions) {
// setHTMLElement(this.object, this.element, {
// materials: {
// front: params?.materials?.front || createMaterial(false),
// back: params?.materials?.back || createBackMaterial()
// }
// })
// }
/*
* public update(params?: HTML3DOptions) {
* setHTMLElement(this.object, this.element, {
* materials: {
* front: params?.materials?.front || createMaterial(false),
* back: params?.materials?.back || createBackMaterial()
* }
* })
* }
*/
}
6 changes: 4 additions & 2 deletions src/content.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ export class Content<Scope> {
* @param next HTML element to insert before
* @throws if `target` or `next` are not in the scene
*/
// eslint-disable-next-line no-undef

async reorder(target: HTMLElement, next: ChildNode | null) {
if (!this.holder.contains(target)) {
throw new Error(`content doesn't have 'target' for reordering`)
Expand Down Expand Up @@ -77,7 +77,9 @@ export class Content<Scope> {
const object = this.objects.get(element)

if (object) {
object.updateGeometry(typeof geometry === 'function' ? geometry(object.front.geometry) : geometry)
object.updateGeometry(typeof geometry === 'function'
? geometry(object.front.geometry)
: geometry)
}
}

Expand Down
4 changes: 3 additions & 1 deletion src/extensions/animate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ export function animate<S extends ExpectSchemes, K>(area: Area3DPlugin<S, K>, ti
if (tick) tick(time)

area.area.scene.render()
requestAnimationFrame((t) => render(t))
requestAnimationFrame(t => {
render(t)
})
}

render(performance.now())
Expand Down
4 changes: 3 additions & 1 deletion src/extensions/bounding-box.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@ export type NodeRef<Schemes extends BaseSchemes> = Schemes['Node'] | Schemes['No

export function getBoundingBox<Schemes extends ExpectSchemes, K>(plugin: Area3DPlugin<Schemes, K>, nodes: NodeRef<Schemes>[]) {

Check warning on line 10 in src/extensions/bounding-box.ts

View workflow job for this annotation

GitHub Actions / release / publish

This line has a length of 127. Maximum allowed is 120

Check warning on line 10 in src/extensions/bounding-box.ts

View workflow job for this annotation

GitHub Actions / release / publish

This line has a length of 127. Maximum allowed is 120
const editor = plugin.parentScope<NodeEditor<Schemes>>(NodeEditor)
const list = nodes.map(node => typeof node === 'object' ? node : editor.getNode(node))
const list = nodes.map(node => typeof node === 'object'
? node
: editor.getNode(node))
const rects = getNodesRect(list, plugin.nodeViews)

return getBBox(rects)
Expand Down
2 changes: 1 addition & 1 deletion src/extensions/forms/comment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ function commentGeometry(width: number, height: number, x: number, y: number) {

function updateCommentGeometry(area: Area3DPlugin<ExpectSchemes, any>, c: Comment) {
area.area.content.updateGeometry(c.element, existing => {
const meta = (existing as CommentGeometry)?.__commentGeometry
const meta = (existing as CommentGeometry).__commentGeometry

if (meta) {
if (meta.width !== c.width || meta.height !== c.height) {
Expand Down
3 changes: 2 additions & 1 deletion src/extensions/forms/connection/geometry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ export function createClassicConnectionGeometry(path: string, width: number): Bu
const prevPoint = new Vector2(points[i - 1].x, points[i - 1].y)
const nextPoint = new Vector2(points[i + 1].x, points[i + 1].y)
const vectorBetweenPoints = nextPoint.clone().sub(prevPoint)
const normalBetweenPoints = new Vector2(-vectorBetweenPoints.y, vectorBetweenPoints.x).clone().normalize()
const normalBetweenPoints = new Vector2(-vectorBetweenPoints.y, vectorBetweenPoints.x).clone()
.normalize()

normal.set(normalBetweenPoints.x, normalBetweenPoints.y).multiplyScalar(width / 2)
}
Expand Down
4 changes: 3 additions & 1 deletion src/extensions/forms/connection/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,9 @@ export function connection<S extends ExpectSchemes, K, E>(scope: ScopeAsParamete

if (view) {
const path = context.data.path || classicConnectionPath(context.data.points as [Position, Position], 0.3)
const geometry = props?.customize ? props.customize(path) : createClassicConnectionGeometry(path, 4.6)
const geometry = props?.customize
? props.customize(path)
: createClassicConnectionGeometry(path, 4.6)

if (geometry) {
area.area.content.updateGeometry(view.element, geometry)
Expand Down
8 changes: 4 additions & 4 deletions src/extensions/forms/node/geometry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,15 @@ export type Params = {
* @param params Geometry parameters
* @returns Node geometry
*/
// eslint-disable-next-line max-statements
// eslint-disable-next-line max-statements, complexity
export function createClassicNodeGeometry(size: Size, params?: Params): BufferGeometry {
const {
borderRadius = 10,
inputsOffset = 15.5,
outputsOffset = 44.5,
socketRadius = 12.3,
socketMargin = 11.5
} = params || {}
} = params ?? {}
const fixWidth = size.width - 1 // hide border artifact
const fixHeight = size.height - 1 // hide border artifact
const shape = getRoundedShape(fixWidth, fixHeight, borderRadius * 1.05)
Expand All @@ -49,7 +49,7 @@ export function createClassicNodeGeometry(size: Size, params?: Params): BufferGe
for (let index = 0; index < inputs; index++) {
const geom = circle.clone()
const x = 1.5
const y = size.height - socketRadius - inputsOffset - ((socketRadius * 2 + socketMargin) * index)
const y = size.height - socketRadius - inputsOffset - (socketRadius * 2 + socketMargin) * index

geom.translate(x, y, 0)

Expand All @@ -62,7 +62,7 @@ export function createClassicNodeGeometry(size: Size, params?: Params): BufferGe
for (let index = 0; index < outputs; index++) {
const geom = circle.clone()
const x = size.width - 1.5
const y = socketRadius + outputsOffset + ((socketRadius * 2 + socketMargin) * index)
const y = socketRadius + outputsOffset + (socketRadius * 2 + socketMargin) * index

geom.translate(x, y, 0)

Expand Down
4 changes: 3 additions & 1 deletion src/extensions/forms/node/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@ export function node<S extends ExpectSchemes, K>(area: Area3DPlugin<S, K>, props
if (context.type === 'render' && context.data.type === 'node') {
const id = context.data.payload.id
const currentNode = editor.getNode(id)
const geometry = props?.customize ? props.customize(currentNode) : createClassicNodeGeometry(currentNode)
const geometry = props?.customize
? props.customize(currentNode)
: createClassicNodeGeometry(currentNode)

area.area.content.updateGeometry(context.data.element, geometry)
}
Expand Down
7 changes: 4 additions & 3 deletions src/extensions/forms/reroute.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ type Requires =
* @param scope Area3DPlugin instance
*/
export function reroute<S extends ExpectSchemes, K>(scope: ScopeAsParameter<Scope<K, [Root<S>]>, [Requires]>) {
if (!(scope instanceof Area3DPlugin<S, Requires>)) throw new Error('')
if (!(scope instanceof Area3DPlugin)) throw new Error('')
const area = scope as Area3DPlugin<S, Requires>

area.addPipe(context => {
Expand All @@ -35,8 +35,9 @@ export function reroute<S extends ExpectSchemes, K>(scope: ScopeAsParameter<Scop
return pinGeometry.clone().translate(pin.position.x, pin.position.y, 0)
})

// eslint-disable-next-line no-undefined
area.area.content.updateGeometry(context.data.element, pins.length ? mergeGeometries(pins) : undefined)
area.area.content.updateGeometry(context.data.element, pins.length
? mergeGeometries(pins)
: undefined)
}
return context
})
Expand Down
45 changes: 27 additions & 18 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,22 +44,27 @@ export class Area3DPlugin<Schemes extends ExpectSchemes, ExtraSignals = never> e
* @param container HTML element to render area in
*/
constructor(container: HTMLElement)
// eslint-disable-next-line @typescript-eslint/unified-signatures
constructor(shared: Area3DPlugin<Schemes, ExtraSignals>)
constructor(argument: HTMLElement | Area3DPlugin<Schemes, ExtraSignals>) {
super('area-3d')
this.container = argument instanceof Area3DPlugin ? argument.container : argument
this.container = argument instanceof Area3DPlugin
? argument.container
: argument
this.container.style.overflow = 'hidden'
this.container.addEventListener('contextmenu', this.onContextMenu)

this.area = new Area(
this.container,
argument instanceof Area3DPlugin ? argument.area.scene : null,
argument instanceof Area3DPlugin
? argument.area.scene
: null,
this,
{
pointerDown: (position, event) => this.emit({ type: 'pointerdown', data: { position, event } }),
pointerMove: (position, event) => this.emit({ type: 'pointermove', data: { position, event } }),
pointerUp: (position, event) => this.emit({ type: 'pointerup', data: { position, event } }),
resize: event => this.emit({ type: 'resized', data: { event } }),
pointerDown: (position, event) => void this.emit({ type: 'pointerdown', data: { position, event } }),
pointerMove: (position, event) => void this.emit({ type: 'pointermove', data: { position, event } }),
pointerUp: (position, event) => void this.emit({ type: 'pointerup', data: { position, event } }),
resize: event => void this.emit({ type: 'resized', data: { event } }),
transformed: params => this.emit({ type: 'transformed', data: params }),
reordered: element => this.emit({ type: 'reordered', data: { element } })
},
Expand All @@ -78,7 +83,7 @@ export class Area3DPlugin<Schemes extends ExpectSchemes, ExtraSignals = never> e
return new Area3DPlugin<Schemes, ExtraSignals>(this)
}

setParent(scope: Scope<Root<Schemes>, []>) {
setParent(scope: Scope<Root<Schemes>>) {
super.setParent(scope)

this.addPipe(context => {
Expand Down Expand Up @@ -106,17 +111,17 @@ export class Area3DPlugin<Schemes extends ExpectSchemes, ExtraSignals = never> e
}

private onContextMenu = (event: MouseEvent) => {
this.emit({ type: 'contextmenu', data: { event, context: 'root' } })
void this.emit({ type: 'contextmenu', data: { event, context: 'root' } })
}

public addNodeView(node: Schemes['Node']) {
const { id } = node
const view = new NodeView(
{
picked: () => this.emit({ type: 'nodepicked', data: { id } }),
picked: () => void this.emit({ type: 'nodepicked', data: { id } }),
translated: data => this.emit({ type: 'nodetranslated', data: { id, ...data } }),
dragged: () => this.emit({ type: 'nodedragged', data: node }),
contextmenu: event => this.emit({ type: 'contextmenu', data: { event, context: node } }),
dragged: () => void this.emit({ type: 'nodedragged', data: node }),
contextmenu: event => void this.emit({ type: 'contextmenu', data: { event, context: node } }),
resized: ({ size }) => this.emit({ type: 'noderesized', data: { id: node.id, size } })
},
{
Expand All @@ -128,7 +133,7 @@ export class Area3DPlugin<Schemes extends ExpectSchemes, ExtraSignals = never> e
this.nodeViews.set(id, view)
this.area.content.add(view.element, view.object)

this.emit({
void this.emit({
type: 'render',
data: { element: view.element, type: 'node', payload: node }
})
Expand All @@ -140,21 +145,21 @@ export class Area3DPlugin<Schemes extends ExpectSchemes, ExtraSignals = never> e
const view = this.nodeViews.get(id)

if (view) {
this.emit({ type: 'unmount', data: { element: view.element } })
void this.emit({ type: 'unmount', data: { element: view.element } })
this.nodeViews.delete(id)
this.area.content.remove(view.element)
}
}

public addConnectionView(connection: Schemes['Connection']) {
const view = new ConnectionView({
contextmenu: event => this.emit({ type: 'contextmenu', data: { event, context: connection } })
contextmenu: event => void this.emit({ type: 'contextmenu', data: { event, context: connection } })
})

this.connectionViews.set(connection.id, view)
this.area.content.add(view.element, view.object)

this.emit({
void this.emit({
type: 'render',
data: { element: view.element, type: 'connection', payload: connection }
})
Expand All @@ -166,7 +171,7 @@ export class Area3DPlugin<Schemes extends ExpectSchemes, ExtraSignals = never> e
const view = this.connectionViews.get(id)

if (view) {
this.emit({ type: 'unmount', data: { element: view.element } })
void this.emit({ type: 'unmount', data: { element: view.element } })
this.connectionViews.delete(id)
this.area.content.remove(view.element)
}
Expand Down Expand Up @@ -212,8 +217,12 @@ export class Area3DPlugin<Schemes extends ExpectSchemes, ExtraSignals = never> e
*/
destroy() {
this.container.removeEventListener('contextmenu', this.onContextMenu)
Array.from(this.connectionViews.keys()).forEach(id => this.removeConnectionView(id))
Array.from(this.nodeViews.keys()).forEach(id => this.removeNodeView(id))
Array.from(this.connectionViews.keys()).forEach(id => {
this.removeConnectionView(id)
})
Array.from(this.nodeViews.keys()).forEach(id => {
this.removeNodeView(id)
})
this.area.destroy()
}
}
Loading

0 comments on commit 9d94e41

Please sign in to comment.