From d17e11c623095d12c08c7a01c232eb302908b7fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20BERARD?= Date: Fri, 10 Jan 2025 23:19:59 +0100 Subject: [PATCH] refactor: refactor all code (#16) --- .github/workflows/test.yml | 3 ++ build-readme.ts | 2 +- package.json | 2 +- pnpm-lock.yaml | 10 +++--- src/lib/client-side/index.ts | 31 +++++++++++++++++++ src/{common => lib/client-side}/list.ts | 30 ++---------------- .../server-side}/fns/array-utilities.ts | 0 src/lib/server-side/fns/async-utilities.ts | 8 +++++ .../server-side}/fns/date-utilities.ts | 2 +- .../server-side}/fns/math-utilities.ts | 0 .../server-side}/fns/network-utilities.ts | 0 src/lib/server-side/fns/object-utilities.ts | 5 +++ .../server-side}/fns/predicates.ts | 0 .../server-side}/fns/string-utilities.ts | 0 .../server-side/fns/utility-functions.ts} | 0 .../server-side/index.ts} | 27 ++++++---------- src/nodes/main/controller.ts | 8 ++--- src/nodes/main/editor/index.ts | 4 +-- src/nodes/main/helpers/outputs.ts | 12 ------- .../main/types.ts => types/NodeMainProps.ts} | 0 src/{common/types.ts => types/UtilityList.ts} | 1 + src/{common => utils}/docs.ts | 0 22 files changed, 74 insertions(+), 71 deletions(-) create mode 100644 src/lib/client-side/index.ts rename src/{common => lib/client-side}/list.ts (87%) rename src/{common => lib/server-side}/fns/array-utilities.ts (100%) create mode 100644 src/lib/server-side/fns/async-utilities.ts rename src/{common => lib/server-side}/fns/date-utilities.ts (96%) rename src/{common => lib/server-side}/fns/math-utilities.ts (100%) rename src/{common => lib/server-side}/fns/network-utilities.ts (100%) create mode 100644 src/lib/server-side/fns/object-utilities.ts rename src/{common => lib/server-side}/fns/predicates.ts (100%) rename src/{common => lib/server-side}/fns/string-utilities.ts (100%) rename src/{common/fns/utilityFunctions.ts => lib/server-side/fns/utility-functions.ts} (100%) rename src/{common/list-functions.ts => lib/server-side/index.ts} (64%) delete mode 100644 src/nodes/main/helpers/outputs.ts rename src/{nodes/main/types.ts => types/NodeMainProps.ts} (100%) rename src/{common/types.ts => types/UtilityList.ts} (95%) rename src/{common => utils}/docs.ts (100%) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e075f98..988cf5d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -39,3 +39,6 @@ jobs: - name: Lint run: pnpm lint:check + + - name: Build + run: pnpm build diff --git a/build-readme.ts b/build-readme.ts index 7c19f1f..77629bd 100644 --- a/build-readme.ts +++ b/build-readme.ts @@ -1,6 +1,6 @@ import * as fs from 'node:fs'; import { alphabetical, title } from 'radash'; -import { list } from './src/common/list'; +import { list } from './src/lib/client-side/list'; const sortByKey = (obj) => { return Object.fromEntries(Object.entries(obj).sort((a, b) => a[0].localeCompare(b[0]))); diff --git a/package.json b/package.json index 77a5843..4c683c1 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@biomejs/biome": "1.9.4", "@formkit/tempo": "^0.1.2", - "@keload/node-red-dxp": "1.19.0", + "@keload/node-red-dxp": "1.20.0", "@release-it/conventional-changelog": "9.0.4", "@types/jquery": "3.5.32", "@types/jqueryui": "1.12.23", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9fd439d..0e3652d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,8 +15,8 @@ importers: specifier: ^0.1.2 version: 0.1.2 '@keload/node-red-dxp': - specifier: 1.19.0 - version: 1.19.0(typescript@5.7.2) + specifier: 1.20.0 + version: 1.20.0(typescript@5.7.2) '@release-it/conventional-changelog': specifier: 9.0.4 version: 9.0.4(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0)(release-it@17.11.0(typescript@5.7.2)) @@ -490,8 +490,8 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@keload/node-red-dxp@1.19.0': - resolution: {integrity: sha512-W0jjkkdZMiSkPw+EVTPwBWSdVdjhgEDPKzdV0AWuz8eukjPmduVaOUVLvzsR/uIQqvKIh8Xj/mpcfSsCTSYwVQ==} + '@keload/node-red-dxp@1.20.0': + resolution: {integrity: sha512-3UW9ANkS2KsdIzpcI1JpLoWqvR5DDF7NBpEyMXFssEFuO8FLtalk4dioxeCodfOJ5brK6kEb3RjJ7tKgwRg0fA==} hasBin: true '@mdx-js/esbuild@2.3.0': @@ -3824,7 +3824,7 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@keload/node-red-dxp@1.19.0(typescript@5.7.2)': + '@keload/node-red-dxp@1.20.0(typescript@5.7.2)': dependencies: '@fullhuman/postcss-purgecss': 7.0.2(postcss@8.4.49) '@types/html-minifier-terser': 7.0.2 diff --git a/src/lib/client-side/index.ts b/src/lib/client-side/index.ts new file mode 100644 index 0000000..51b1ba3 --- /dev/null +++ b/src/lib/client-side/index.ts @@ -0,0 +1,31 @@ +import { alphabetical, title } from 'radash'; +import { list } from './list'; + +export const getCategories = alphabetical(Object.keys(list), (f) => f); + +export function getFunctionsFromCategory(category: string) { + const all = Object.keys(list[category]) + .map((v) => { + const fn = list[category][v]; + return { + key: v, + label: fn.label || title(v), + enabled: fn?.enabled ?? true, + }; + }) + .filter((v) => v.enabled); + + return alphabetical(all, (f) => f.label); +} + +export function getFunctionDetails(category: string, fn: string) { + const foundFn = list?.[category]?.[fn]; + return { + ...foundFn, + nodeDocs: ` + ${foundFn?.description || ''} +

+ ${foundFn?.docs || ''} + `.trim(), + }; +} diff --git a/src/common/list.ts b/src/lib/client-side/list.ts similarity index 87% rename from src/common/list.ts rename to src/lib/client-side/list.ts index 90781d5..84fdb39 100644 --- a/src/common/list.ts +++ b/src/lib/client-side/list.ts @@ -1,6 +1,5 @@ -import { alphabetical, title } from 'radash'; -import * as docsHelper from './docs'; -import type { UtilityList } from './types'; +import type { UtilityList } from '../../types/UtilityList'; +import * as docsHelper from '../../utils/docs'; export const list: UtilityList = { array_utilities: { @@ -219,28 +218,3 @@ export const list: UtilityList = { }, }, }; - -export const getCategories = alphabetical(Object.keys(list), (f) => f); - -export function getFunctionsFromCategory(category: string) { - const all = Object.keys(list[category]).map((v) => { - return { - key: v, - label: list[category][v].label || title(v), - }; - }); - - return alphabetical(all, (f) => f.label); -} - -export function getFunctionDetails(category: string, fn: string) { - const foundFn = list?.[category]?.[fn]; - return { - ...foundFn, - nodeDocs: ` - ${foundFn?.description || ''} -

- ${foundFn?.docs || ''} - `.trim(), - }; -} diff --git a/src/common/fns/array-utilities.ts b/src/lib/server-side/fns/array-utilities.ts similarity index 100% rename from src/common/fns/array-utilities.ts rename to src/lib/server-side/fns/array-utilities.ts diff --git a/src/lib/server-side/fns/async-utilities.ts b/src/lib/server-side/fns/async-utilities.ts new file mode 100644 index 0000000..52095d4 --- /dev/null +++ b/src/lib/server-side/fns/async-utilities.ts @@ -0,0 +1,8 @@ +import { sleep } from 'radash'; + +export const asyncUtilities = { + delay: (_, inputProp: unknown) => { + const realProp = inputProp as number; + return sleep(realProp); + }, +}; diff --git a/src/common/fns/date-utilities.ts b/src/lib/server-side/fns/date-utilities.ts similarity index 96% rename from src/common/fns/date-utilities.ts rename to src/lib/server-side/fns/date-utilities.ts index 0abeae2..5b13bfa 100644 --- a/src/common/fns/date-utilities.ts +++ b/src/lib/server-side/fns/date-utilities.ts @@ -1,5 +1,5 @@ import { date, format } from '@formkit/tempo'; -import type { NodeMainProps } from '../../nodes/main/types'; +import type { NodeMainProps } from '../../../types/NodeMainProps'; function getCurrentTimezone() { const timezoneDefault = Intl.DateTimeFormat().resolvedOptions().timeZone; // @ts-ignore diff --git a/src/common/fns/math-utilities.ts b/src/lib/server-side/fns/math-utilities.ts similarity index 100% rename from src/common/fns/math-utilities.ts rename to src/lib/server-side/fns/math-utilities.ts diff --git a/src/common/fns/network-utilities.ts b/src/lib/server-side/fns/network-utilities.ts similarity index 100% rename from src/common/fns/network-utilities.ts rename to src/lib/server-side/fns/network-utilities.ts diff --git a/src/lib/server-side/fns/object-utilities.ts b/src/lib/server-side/fns/object-utilities.ts new file mode 100644 index 0000000..ae2cbc3 --- /dev/null +++ b/src/lib/server-side/fns/object-utilities.ts @@ -0,0 +1,5 @@ +import { keys } from 'radash'; + +export const objectUtilities = { + getKeys: keys, +}; diff --git a/src/common/fns/predicates.ts b/src/lib/server-side/fns/predicates.ts similarity index 100% rename from src/common/fns/predicates.ts rename to src/lib/server-side/fns/predicates.ts diff --git a/src/common/fns/string-utilities.ts b/src/lib/server-side/fns/string-utilities.ts similarity index 100% rename from src/common/fns/string-utilities.ts rename to src/lib/server-side/fns/string-utilities.ts diff --git a/src/common/fns/utilityFunctions.ts b/src/lib/server-side/fns/utility-functions.ts similarity index 100% rename from src/common/fns/utilityFunctions.ts rename to src/lib/server-side/fns/utility-functions.ts diff --git a/src/common/list-functions.ts b/src/lib/server-side/index.ts similarity index 64% rename from src/common/list-functions.ts rename to src/lib/server-side/index.ts index e7d277e..dcca1b8 100644 --- a/src/common/list-functions.ts +++ b/src/lib/server-side/index.ts @@ -1,28 +1,21 @@ -import { takeRight } from 'es-toolkit'; -import { keys, sleep } from 'radash'; import { arrayUtilities } from './fns/array-utilities'; +import { asyncUtilities } from './fns/async-utilities'; import { dateUtilities } from './fns/date-utilities'; import { mathUtilities } from './fns/math-utilities'; import { networkUtilities } from './fns/network-utilities'; +import { objectUtilities } from './fns/object-utilities'; import { predicates } from './fns/predicates'; import { stringUtilities } from './fns/string-utilities'; -import { utilityFunctions } from './fns/utilityFunctions'; +import { utilityFunctions } from './fns/utility-functions'; export const listFunctions = { - utility_functions: utilityFunctions, - string_utilities: stringUtilities, - date_utilities: dateUtilities, - predicates, - object_utilities: { - getKeys: keys, - }, array_utilities: arrayUtilities, - network_utilities: networkUtilities, + async_utilities: asyncUtilities, + date_utilities: dateUtilities, math_utilities: mathUtilities, - async_utilities: { - delay: (_, inputProp: unknown) => { - const realProp = inputProp as number; - return sleep(realProp); - }, - }, + network_utilities: networkUtilities, + object_utilities: objectUtilities, + predicates, + string_utilities: stringUtilities, + utility_functions: utilityFunctions, }; diff --git a/src/nodes/main/controller.ts b/src/nodes/main/controller.ts index 55ce26d..a612c0c 100644 --- a/src/nodes/main/controller.ts +++ b/src/nodes/main/controller.ts @@ -1,9 +1,9 @@ import type { NodeControllerConfig, NodeControllerInst } from '@keload/node-red-dxp/editor'; +import { splitBooleanOutputs } from '@keload/node-red-dxp/utils/controller'; import { tryit } from 'radash'; -import { getFunctionDetails } from '../../common/list'; -import { listFunctions } from '../../common/list-functions'; -import { splitBooleanOutputs } from './helpers/outputs'; -import type { NodeMainProps } from './types'; +import { getFunctionDetails } from '../../lib/client-side'; +import { listFunctions } from '../../lib/server-side'; +import type { NodeMainProps } from '../../types/NodeMainProps'; // Main Node-RED node controller // Handles the node's initialization and message processing diff --git a/src/nodes/main/editor/index.ts b/src/nodes/main/editor/index.ts index b62399d..6f3c599 100644 --- a/src/nodes/main/editor/index.ts +++ b/src/nodes/main/editor/index.ts @@ -9,8 +9,8 @@ import { watchInput, } from '@keload/node-red-dxp/editor/dom-helper'; import { title } from 'radash'; -import { getCategories, getFunctionDetails, getFunctionsFromCategory } from '../../../common/list'; -import type { NodeMainProps } from '../types'; +import { getCategories, getFunctionDetails, getFunctionsFromCategory } from '../../../lib/client-side'; +import type { NodeMainProps } from '../../../types/NodeMainProps'; const Main: NodeEditorDefinition = { category: 'toolkit', diff --git a/src/nodes/main/helpers/outputs.ts b/src/nodes/main/helpers/outputs.ts deleted file mode 100644 index 9501ae9..0000000 --- a/src/nodes/main/helpers/outputs.ts +++ /dev/null @@ -1,12 +0,0 @@ -export function splitBooleanOutputs(conditionTerm: unknown, msg: unknown): object[] { - const outputs = [null, null]; - if (conditionTerm === true) { - outputs[0] = msg; - } else if (conditionTerm === false) { - outputs[1] = msg; - } else { - console.warn('Payload must be true or false.'); - } - - return outputs; -} diff --git a/src/nodes/main/types.ts b/src/types/NodeMainProps.ts similarity index 100% rename from src/nodes/main/types.ts rename to src/types/NodeMainProps.ts diff --git a/src/common/types.ts b/src/types/UtilityList.ts similarity index 95% rename from src/common/types.ts rename to src/types/UtilityList.ts index 71043f6..23825b3 100644 --- a/src/common/types.ts +++ b/src/types/UtilityList.ts @@ -8,6 +8,7 @@ export type UtilityItem = { label?: string; }; label?: string; + enabled?: boolean; revealClasses?: string[]; configArgs?: string; }; diff --git a/src/common/docs.ts b/src/utils/docs.ts similarity index 100% rename from src/common/docs.ts rename to src/utils/docs.ts