37908114fc
Followup https://github.com/twentyhq/twenty/pull/19010 ## Dependency diagram ``` ┌─────────────────────┐ │ twenty-front │ │ (React frontend) │ └─────────┬───────────┘ │ imports runtime: │ FrontComponentRenderer │ FrontComponentRendererWithSdkClient │ useFrontComponentExecutionContext ▼ ┌──────────────────────────────────┐ ┌─────────────────────────┐ │ twenty-front-component-renderer │────────▶│ twenty-sdk │ │ (remote-dom host + worker) │ │ (app developer SDK) │ │ │ │ │ │ imports from twenty-sdk: │ │ Public API: │ │ • types only: │ │ defineFrontComponent │ │ FrontComponentExecutionContext│ │ navigate, closeSide… │ │ NavigateFunction │ │ useFrontComponent… │ │ CloseSidePanelFunction │ │ Command components │ │ CommandConfirmation… │ │ conditional avail. │ │ OpenCommandConfirmation… │ │ │ │ EnqueueSnackbarFunction │ │ Internal only: │ │ etc. │ │ frontComponentHost… │ │ │ │ front-component-build │ │ owns locally: │ │ esbuild plugins │ │ • ALLOWED_HTML_ELEMENTS │ │ │ │ • EVENT_TO_REACT │ └────────────┬────────────┘ │ • HTML_TAG_TO_CUSTOM_ELEMENT… │ │ │ • SerializedEventData │ │ types │ • PropertySchema │ ▼ │ • frontComponentHostComm… │ ┌─────────────────────────┐ │ (local ref to globalThis) │ │ twenty-shared │ │ • setFrontComponentExecution… │ │ (common types/utils) │ │ (local impl, same keys) │ │ AppPath, SidePanelP… │ │ │ │ EnqueueSnackbarParams │ └──────────────────────────────────┘ │ isDefined, … │ │ └─────────────────────────┘ │ also depends on ▼ twenty-shared (types) @remote-dom/* (runtime) @quilted/threads (runtime) react (runtime) ``` **Key points:** - **`twenty-front`** depends on the renderer, **not** on `twenty-sdk` directly (for rendering) - **`twenty-front-component-renderer`** depends on `twenty-sdk` for **types only** (function signatures, `FrontComponentExecutionContext`). The runtime bridge (`frontComponentHostCommunicationApi`) is shared via `globalThis` keys, not module imports - **`twenty-sdk`** has no dependency on the renderer — clean one-way dependency - The renderer owns all remote-dom infrastructure (element schemas, event mappings, custom element tags) that was previously leaking through the SDK's public API - The SDK's `./build` entry point was removed entirely (unused)
58 lines
1.7 KiB
JSON
58 lines
1.7 KiB
JSON
{
|
|
"$schema": "./node_modules/oxlint/configuration_schema.json",
|
|
"plugins": ["react", "typescript", "import", "unicorn"],
|
|
"categories": {
|
|
"correctness": "off"
|
|
},
|
|
"ignorePatterns": ["node_modules", "dist"],
|
|
"rules": {
|
|
"func-style": ["error", "declaration", { "allowArrowFunctions": true }],
|
|
"no-console": "off",
|
|
"no-control-regex": "off",
|
|
"no-debugger": "error",
|
|
"no-duplicate-imports": "error",
|
|
"no-undef": "off",
|
|
"no-unused-vars": "off",
|
|
"no-redeclare": "off",
|
|
"import/no-duplicates": "error",
|
|
"typescript/no-redeclare": "error",
|
|
"typescript/ban-ts-comment": "error",
|
|
"typescript/consistent-type-imports": [
|
|
"error",
|
|
{
|
|
"prefer": "type-imports",
|
|
"fixStyle": "inline-type-imports"
|
|
}
|
|
],
|
|
"typescript/explicit-function-return-type": "off",
|
|
"typescript/explicit-module-boundary-types": "off",
|
|
"typescript/no-empty-object-type": [
|
|
"error",
|
|
{
|
|
"allowInterfaces": "with-single-extends"
|
|
}
|
|
],
|
|
"typescript/no-empty-function": "off",
|
|
"typescript/no-explicit-any": "off",
|
|
"typescript/no-unused-vars": [
|
|
"warn",
|
|
{
|
|
"vars": "all",
|
|
"varsIgnorePattern": "^_",
|
|
"args": "after-used",
|
|
"argsIgnorePattern": "^_"
|
|
}
|
|
],
|
|
"react/no-unescaped-entities": "off",
|
|
"react/prop-types": "off",
|
|
"react/jsx-key": "off",
|
|
"react/display-name": "off",
|
|
"react/jsx-uses-react": "off",
|
|
"react/react-in-jsx-scope": "off",
|
|
"react/jsx-no-useless-fragment": "off",
|
|
"react/jsx-props-no-spreading": ["error", { "explicitSpread": "ignore" }],
|
|
"react-hooks/rules-of-hooks": "error",
|
|
"react-hooks/exhaustive-deps": "warn"
|
|
}
|
|
}
|