Include desktop in monorepo

This commit is contained in:
Hakan Shehu
2024-11-06 09:03:08 +01:00
parent 992066912e
commit 00f6ac971e
561 changed files with 8586 additions and 15179 deletions

View File

@@ -1,4 +1,7 @@
dist
out
/tsconfig.base.json
tsconfig.base.json
tsconfig.json
pnpm-lock.yaml
.env
LICENSE.md

View File

@@ -0,0 +1,4 @@
node_modules
dist
out
.gitignore

View File

@@ -0,0 +1,9 @@
module.exports = {
extends: [
'eslint:recommended',
'plugin:react/recommended',
'plugin:react/jsx-runtime',
'@electron-toolkit/eslint-config-ts/recommended',
'@electron-toolkit/eslint-config-prettier'
]
}

3
apps/desktop/.npmrc Normal file
View File

@@ -0,0 +1,3 @@
electron_mirror=https://npmmirror.com/mirrors/electron/
electron_builder_binaries_mirror=https://npmmirror.com/mirrors/electron-builder-binaries/
shamefully-hoist=true

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.allow-jit</key>
<true/>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
<true/>
</dict>
</plist>

Binary file not shown.

BIN
apps/desktop/build/icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

BIN
apps/desktop/build/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

View File

@@ -0,0 +1,3 @@
provider: generic
url: https://example.com/auto-updates
updaterCacheDirName: colanode-updater

View File

@@ -0,0 +1,45 @@
appId: com.colanode.desktop
productName: Colanode
directories:
buildResources: build
files:
- '!**/.vscode/*'
- '!src/*'
- '!electron.vite.config.{js,ts,mjs,cjs}'
- '!{.eslintignore,.eslintrc.cjs,.prettierignore,.prettierrc.yaml,dev-app-update.yml,CHANGELOG.md,README.md}'
- '!{.env,.env.*,.npmrc,pnpm-lock.yaml}'
- '!{tsconfig.json,tsconfig.node.json,tsconfig.web.json}'
asarUnpack:
- resources/**
win:
executableName: Colanode
nsis:
artifactName: ${name}-${version}-setup.${ext}
shortcutName: ${productName}
uninstallDisplayName: ${productName}
createDesktopShortcut: always
mac:
entitlementsInherit: build/entitlements.mac.plist
extendInfo:
- NSCameraUsageDescription: Application requests access to the device's camera.
- NSMicrophoneUsageDescription: Application requests access to the device's microphone.
- NSDocumentsFolderUsageDescription: Application requests access to the user's Documents folder.
- NSDownloadsFolderUsageDescription: Application requests access to the user's Downloads folder.
notarize: false
dmg:
artifactName: ${name}-${version}.${ext}
linux:
target:
- AppImage
- snap
- deb
maintainer: electronjs.org
category: Utility
appImage:
artifactName: ${name}-${version}.${ext}
npmRebuild: false
publish:
provider: generic
url: https://example.com/auto-updates
electronDownload:
mirror: https://npmmirror.com/mirrors/electron/

View File

@@ -0,0 +1,41 @@
import { resolve } from 'path';
import { defineConfig, externalizeDepsPlugin } from 'electron-vite';
import react from '@vitejs/plugin-react';
export default defineConfig({
main: {
plugins: [externalizeDepsPlugin()],
resolve: {
alias: {
'@/main': resolve('src/main'),
'@/lib': resolve('src/lib'),
'@/types': resolve('src/types'),
'@/operations': resolve('src/operations'),
'@/registry': resolve('src/registry'),
},
},
},
preload: {
plugins: [externalizeDepsPlugin()],
resolve: {
alias: {
'@/lib': resolve('src/lib'),
'@/types': resolve('src/types'),
'@/operations': resolve('src/operations'),
'@/registry': resolve('src/registry'),
},
},
},
renderer: {
resolve: {
alias: {
'@/renderer': resolve('src/renderer'),
'@/lib': resolve('src/lib'),
'@/operations': resolve('src/operations'),
'@/types': resolve('src/types'),
'@/registry': resolve('src/registry'),
},
},
plugins: [react()],
},
});

View File

@@ -1,58 +1,28 @@
{
"name": "neuron-desktop",
"productName": "neuron-desktop",
"name": "@colanode/desktop",
"version": "1.0.0",
"description": "Neuron Desktop",
"main": ".vite/build/main.js",
"description": "Colanode desktop application",
"main": "./out/main/index.js",
"author": "Hakan Shehu",
"scripts": {
"dev": "electron-forge start",
"package": "electron-forge package",
"make": "electron-forge make",
"publish": "electron-forge publish",
"lint": "eslint --ext .ts,.tsx .",
"format": "prettier --write \"{src,test}/**/*.{js,ts}\""
"format": "prettier --write .",
"lint": "eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix",
"typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false",
"typecheck:web": "tsc --noEmit -p tsconfig.web.json --composite false",
"typecheck": "npm run typecheck:node && npm run typecheck:web",
"start": "electron-vite preview",
"dev": "electron-vite dev",
"build": "npm run typecheck && electron-vite build",
"postinstall": "electron-builder install-app-deps",
"build:unpack": "npm run build && electron-builder --dir",
"build:win": "npm run build && electron-builder --win",
"build:mac": "electron-vite build && electron-builder --mac",
"build:linux": "electron-vite build && electron-builder --linux"
},
"devDependencies": {
"@electron-forge/cli": "^7.5.0",
"@electron-forge/maker-deb": "^7.5.0",
"@electron-forge/maker-rpm": "^7.5.0",
"@electron-forge/maker-squirrel": "^7.5.0",
"@electron-forge/maker-zip": "^7.5.0",
"@electron-forge/plugin-auto-unpack-natives": "^7.5.0",
"@electron-forge/plugin-fuses": "^7.5.0",
"@electron-forge/plugin-vite": "^7.5.0",
"@electron/fuses": "^1.8.0",
"@types/better-sqlite3": "^7.6.11",
"@types/diff": "^5.2.3",
"@types/is-hotkey": "^0.1.10",
"@types/lodash": "^4.17.12",
"@types/mime-types": "^2.1.4",
"@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1",
"@types/react-window": "^1.8.8",
"@types/ws": "^8.5.12",
"@typescript-eslint/eslint-plugin": "^5.62.0",
"@typescript-eslint/parser": "^5.62.0",
"autoprefixer": "^10.4.20",
"electron": "^33.0.2",
"eslint": "^8.57.1",
"eslint-plugin-import": "^2.31.0",
"node-abi": "^3.71.0",
"postcss": "^8.4.47",
"prettier": "^3.3.3",
"prettier-plugin-tailwindcss": "^0.6.8",
"tailwindcss": "^3.4.14",
"ts-node": "^10.9.2",
"typescript": "^5.6.3",
"vite": "^5.4.10"
},
"keywords": [],
"author": {
"name": "Hakan Shehu",
"email": "hakan@neuronapp.io"
},
"license": "MIT",
"dependencies": {
"@electron-toolkit/preload": "^3.0.1",
"@electron-toolkit/utils": "^3.0.0",
"electron-updater": "^6.1.7",
"@hookform/resolvers": "^3.9.0",
"@radix-ui/react-alert-dialog": "^1.1.2",
"@radix-ui/react-checkbox": "^1.1.2",
@@ -109,7 +79,6 @@
"cmdk": "^1.0.0",
"date-fns": "^3.6.0",
"diff": "^7.0.0",
"electron-squirrel-startup": "^1.0.1",
"form-data": "^4.0.1",
"fractional-indexing-jittered": "^0.9.1",
"is-hotkey": "^0.2.0",
@@ -138,5 +107,48 @@
"ws": "^8.18.0",
"yjs": "^13.6.20",
"zod": "^3.23.8"
},
"devDependencies": {
"@electron-toolkit/eslint-config-prettier": "^2.0.0",
"@electron-toolkit/eslint-config-ts": "^2.0.0",
"@electron-toolkit/tsconfig": "^1.0.1",
"@types/node": "^20.14.8",
"@types/react": "^18.3.3",
"@types/react-dom": "^18.3.0",
"@vitejs/plugin-react": "^4.3.1",
"electron": "^31.0.2",
"electron-builder": "^24.13.3",
"electron-vite": "^2.3.0",
"eslint": "^8.57.0",
"eslint-plugin-react": "^7.34.3",
"prettier": "^3.3.2",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"vite": "^5.3.1",
"@electron-forge/cli": "^7.5.0",
"@electron-forge/maker-deb": "^7.5.0",
"@electron-forge/maker-rpm": "^7.5.0",
"@electron-forge/maker-squirrel": "^7.5.0",
"@electron-forge/maker-zip": "^7.5.0",
"@electron-forge/plugin-auto-unpack-natives": "^7.5.0",
"@electron-forge/plugin-fuses": "^7.5.0",
"@electron-forge/plugin-vite": "^7.5.0",
"@electron/fuses": "^1.8.0",
"@types/better-sqlite3": "^7.6.11",
"@types/diff": "^5.2.3",
"@types/is-hotkey": "^0.1.10",
"@types/lodash": "^4.17.12",
"@types/mime-types": "^2.1.4",
"@types/react-window": "^1.8.8",
"@types/ws": "^8.5.12",
"@typescript-eslint/eslint-plugin": "^5.62.0",
"@typescript-eslint/parser": "^5.62.0",
"autoprefixer": "^10.4.20",
"eslint-plugin-import": "^2.31.0",
"node-abi": "^3.71.0",
"postcss": "^8.4.47",
"prettier-plugin-tailwindcss": "^0.6.8",
"tailwindcss": "^3.4.14",
"ts-node": "^10.9.2"
}
}

View File

@@ -3,4 +3,4 @@ module.exports = {
tailwindcss: {},
autoprefixer: {},
},
}
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

View File

@@ -462,7 +462,7 @@ export const urlFieldFilterOperators: FieldFilterOperator[] = [
];
export const getFieldFilterOperators = (
type: FieldType,
type: FieldType
): FieldFilterOperator[] => {
if (!type) return [];
@@ -502,10 +502,10 @@ export const filterRecords = (
records: RecordNode[],
filter: ViewFilterAttributes,
field: FieldAttributes,
currentUserId: string,
currentUserId: string
): RecordNode[] => {
return records.filter((record) =>
recordMatchesFilter(record, filter, field, currentUserId),
recordMatchesFilter(record, filter, field, currentUserId)
);
};
@@ -513,7 +513,7 @@ const recordMatchesFilter = (
record: RecordNode,
filter: ViewFilterAttributes,
field: FieldAttributes,
currentUserId: string,
currentUserId: string
) => {
if (filter.type === 'group') {
return false;
@@ -554,7 +554,7 @@ const recordMatchesFilter = (
const recordMatchesBooleanFilter = (
record: RecordNode,
filter: ViewFieldFilterAttributes,
field: FieldAttributes,
field: FieldAttributes
) => {
const fieldValue = record.attributes.fields[field.id];
if (filter.operator === 'is_true') {
@@ -578,14 +578,14 @@ const recordMatchesBooleanFilter = (
const recordMatchesCollaboratorFilter = (
record: RecordNode,
filter: ViewFieldFilterAttributes,
field: FieldAttributes,
field: FieldAttributes
) => {
return false;
};
const recordMatchesCreatedAtFilter = (
record: RecordNode,
filter: ViewFieldFilterAttributes,
filter: ViewFieldFilterAttributes
) => {
if (!filter.value) return false;
@@ -620,7 +620,7 @@ const recordMatchesCreatedAtFilter = (
const recordMatchesCreatedByFilter = (
record: RecordNode,
filter: ViewFieldFilterAttributes,
currentUserId: string,
currentUserId: string
) => {
const createdBy = record.createdBy;
if (!createdBy) {
@@ -653,7 +653,7 @@ const recordMatchesCreatedByFilter = (
const recordMatchesDateFilter = (
record: RecordNode,
filter: ViewFieldFilterAttributes,
field: FieldAttributes,
field: FieldAttributes
) => {
const fieldValue = record.attributes.fields[field.id];
if (filter.operator === 'is_empty') {
@@ -699,7 +699,7 @@ const recordMatchesDateFilter = (
const recordMatchesEmailFilter = (
record: RecordNode,
filter: ViewFieldFilterAttributes,
field: FieldAttributes,
field: FieldAttributes
) => {
const fieldValue = record.attributes.fields[field.id];
@@ -741,7 +741,7 @@ const recordMatchesEmailFilter = (
const recordMatchesFileFilter = (
record: RecordNode,
filter: ViewFieldFilterAttributes,
field: FieldAttributes,
field: FieldAttributes
) => {
return false;
};
@@ -749,7 +749,7 @@ const recordMatchesFileFilter = (
const recordMatchesMultiSelectFilter = (
record: RecordNode,
filter: ViewFieldFilterAttributes,
field: FieldAttributes,
field: FieldAttributes
) => {
const fieldValue = record.attributes.fields[field.id];
const selectValues =
@@ -780,7 +780,7 @@ const recordMatchesMultiSelectFilter = (
const recordMatchesNumberFilter = (
record: RecordNode,
filter: ViewFieldFilterAttributes,
field: FieldAttributes,
field: FieldAttributes
) => {
const fieldValue = record.attributes.fields[field.id];
@@ -826,7 +826,7 @@ const recordMatchesNumberFilter = (
const recordMatchesPhoneFilter = (
record: RecordNode,
filter: ViewFieldFilterAttributes,
field: FieldAttributes,
field: FieldAttributes
) => {
const fieldValue = record.attributes.fields[field.id];
@@ -868,7 +868,7 @@ const recordMatchesPhoneFilter = (
const recordMatchesSelectFilter = (
record: RecordNode,
filter: ViewFieldFilterAttributes,
field: FieldAttributes,
field: FieldAttributes
) => {
const fieldValue = record.attributes.fields[field.id];
@@ -903,7 +903,7 @@ const recordMatchesSelectFilter = (
const recordMatchesTextFilter = (
record: RecordNode,
filter: ViewFieldFilterAttributes,
field: FieldAttributes,
field: FieldAttributes
) => {
const fieldValue = record.attributes.fields[field.id];
@@ -945,7 +945,7 @@ const recordMatchesTextFilter = (
const recordMatchesUrlFilter = (
record: RecordNode,
filter: ViewFieldFilterAttributes,
field: FieldAttributes,
field: FieldAttributes
) => {
const fieldValue = record.attributes.fields[field.id];
@@ -1001,7 +1001,7 @@ export const generateViewFieldIndex = (
databaseFields: FieldAttributes[],
viewFields: ViewFieldAttributes[],
fieldId: string,
after: string,
after: string
): string | null => {
const field = databaseFields.find((f) => f.id === fieldId);
if (!field) {
@@ -1024,8 +1024,8 @@ export const generateViewFieldIndex = (
.sort((a, b) =>
compareString(
a.viewIndex ?? a.databaseIndex,
b.viewIndex ?? b.databaseIndex,
),
b.viewIndex ?? b.databaseIndex
)
);
let previousIndex: string | null = null;
@@ -1053,12 +1053,12 @@ export const generateViewFieldIndex = (
let newIndex = generateNodeIndex(previousIndex, nextIndex);
const lastDatabaseField = mergedIndexes.sort((a, b) =>
compareString(a.databaseIndex, b.databaseIndex),
compareString(a.databaseIndex, b.databaseIndex)
)[mergedIndexes.length - 1];
const newPotentialFieldIndex = generateNodeIndex(
lastDatabaseField.databaseIndex,
null,
null
);
if (newPotentialFieldIndex === newIndex) {

Some files were not shown because too many files have changed in this diff Show More