diff --git a/.gitignore b/.gitignore index 8c4004c..a1df1c9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,19 +1,19 @@ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies -/node_modules -/.pnp +node_modules/ +.pnp/ .pnp.js # testing -/coverage +coverage/ # next.js -/.next/ -/out/ +.next/ +out/ # production -/build +build/ # misc .DS_Store diff --git a/.babelrc b/packages/app/.babelrc similarity index 100% rename from .babelrc rename to packages/app/.babelrc diff --git a/.sequelizerc b/packages/app/.sequelizerc similarity index 100% rename from .sequelizerc rename to packages/app/.sequelizerc diff --git a/README.md b/packages/app/README.md similarity index 100% rename from README.md rename to packages/app/README.md diff --git a/config/config.js b/packages/app/config/config.js similarity index 100% rename from config/config.js rename to packages/app/config/config.js diff --git a/migrate.ts b/packages/app/migrate.ts similarity index 100% rename from migrate.ts rename to packages/app/migrate.ts diff --git a/next-env.d.ts b/packages/app/next-env.d.ts similarity index 100% rename from next-env.d.ts rename to packages/app/next-env.d.ts diff --git a/next.config.js b/packages/app/next.config.js similarity index 100% rename from next.config.js rename to packages/app/next.config.js diff --git a/package.json b/packages/app/package.json similarity index 97% rename from package.json rename to packages/app/package.json index d85479a..e29aac0 100644 --- a/package.json +++ b/packages/app/package.json @@ -1,5 +1,5 @@ { - "name": "note.modal.sh", + "name": "zeichen-app", "version": "0.1.0", "private": true, "scripts": { diff --git a/public/favicon.ico b/packages/app/public/favicon.ico similarity index 100% rename from public/favicon.ico rename to packages/app/public/favicon.ico diff --git a/public/vercel.svg b/packages/app/public/vercel.svg similarity index 100% rename from public/vercel.svg rename to packages/app/public/vercel.svg diff --git a/src/assets/global.css b/packages/app/src/assets/global.css similarity index 100% rename from src/assets/global.css rename to packages/app/src/assets/global.css diff --git a/src/assets/mobiledoc.css b/packages/app/src/assets/mobiledoc.css similarity index 100% rename from src/assets/mobiledoc.css rename to packages/app/src/assets/mobiledoc.css diff --git a/src/assets/theme.css b/packages/app/src/assets/theme.css similarity index 100% rename from src/assets/theme.css rename to packages/app/src/assets/theme.css diff --git a/src/components/Editor/Editor.tsx b/packages/app/src/components/Editor/Editor.tsx similarity index 100% rename from src/components/Editor/Editor.tsx rename to packages/app/src/components/Editor/Editor.tsx diff --git a/src/components/Icon/Icon.tsx b/packages/app/src/components/Icon/Icon.tsx similarity index 100% rename from src/components/Icon/Icon.tsx rename to packages/app/src/components/Icon/Icon.tsx diff --git a/src/components/Navbar/Navbar.tsx b/packages/app/src/components/Navbar/Navbar.tsx similarity index 100% rename from src/components/Navbar/Navbar.tsx rename to packages/app/src/components/Navbar/Navbar.tsx diff --git a/src/components/PrimaryNavItem/PrimaryNavItem.tsx b/packages/app/src/components/PrimaryNavItem/PrimaryNavItem.tsx similarity index 100% rename from src/components/PrimaryNavItem/PrimaryNavItem.tsx rename to packages/app/src/components/PrimaryNavItem/PrimaryNavItem.tsx diff --git a/src/components/SecondaryNavItem/SecondaryNavItem.tsx b/packages/app/src/components/SecondaryNavItem/SecondaryNavItem.tsx similarity index 100% rename from src/components/SecondaryNavItem/SecondaryNavItem.tsx rename to packages/app/src/components/SecondaryNavItem/SecondaryNavItem.tsx diff --git a/src/controllers/Folder.ts b/packages/app/src/controllers/Folder.ts similarity index 100% rename from src/controllers/Folder.ts rename to packages/app/src/controllers/Folder.ts diff --git a/src/controllers/Note.ts b/packages/app/src/controllers/Note.ts similarity index 100% rename from src/controllers/Note.ts rename to packages/app/src/controllers/Note.ts diff --git a/src/models.ts b/packages/app/src/models.ts similarity index 100% rename from src/models.ts rename to packages/app/src/models.ts diff --git a/src/models/Folder.ts b/packages/app/src/models/Folder.ts similarity index 100% rename from src/models/Folder.ts rename to packages/app/src/models/Folder.ts diff --git a/src/models/Note.ts b/packages/app/src/models/Note.ts similarity index 100% rename from src/models/Note.ts rename to packages/app/src/models/Note.ts diff --git a/src/models/Operation.ts b/packages/app/src/models/Operation.ts similarity index 100% rename from src/models/Operation.ts rename to packages/app/src/models/Operation.ts diff --git a/src/models/Tag.ts b/packages/app/src/models/Tag.ts similarity index 100% rename from src/models/Tag.ts rename to packages/app/src/models/Tag.ts diff --git a/src/models/Transaction.ts b/packages/app/src/models/Transaction.ts similarity index 100% rename from src/models/Transaction.ts rename to packages/app/src/models/Transaction.ts diff --git a/src/pages/_app.tsx b/packages/app/src/pages/_app.tsx similarity index 100% rename from src/pages/_app.tsx rename to packages/app/src/pages/_app.tsx diff --git a/src/pages/_document.tsx b/packages/app/src/pages/_document.tsx similarity index 100% rename from src/pages/_document.tsx rename to packages/app/src/pages/_document.tsx diff --git a/src/pages/api/folders.ts b/packages/app/src/pages/api/folders.ts similarity index 100% rename from src/pages/api/folders.ts rename to packages/app/src/pages/api/folders.ts diff --git a/src/pages/api/folders/[id].ts b/packages/app/src/pages/api/folders/[id].ts similarity index 100% rename from src/pages/api/folders/[id].ts rename to packages/app/src/pages/api/folders/[id].ts diff --git a/src/pages/api/notes.ts b/packages/app/src/pages/api/notes.ts similarity index 100% rename from src/pages/api/notes.ts rename to packages/app/src/pages/api/notes.ts diff --git a/src/pages/api/notes/[id].ts b/packages/app/src/pages/api/notes/[id].ts similarity index 100% rename from src/pages/api/notes/[id].ts rename to packages/app/src/pages/api/notes/[id].ts diff --git a/src/pages/notes.tsx b/packages/app/src/pages/notes.tsx similarity index 100% rename from src/pages/notes.tsx rename to packages/app/src/pages/notes.tsx diff --git a/src/pages/notes/[id].tsx b/packages/app/src/pages/notes/[id].tsx similarity index 100% rename from src/pages/notes/[id].tsx rename to packages/app/src/pages/notes/[id].tsx diff --git a/src/seeds.ts b/packages/app/src/seeds.ts similarity index 100% rename from src/seeds.ts rename to packages/app/src/seeds.ts diff --git a/src/services/LocalStorage.ts b/packages/app/src/services/LocalStorage.ts similarity index 100% rename from src/services/LocalStorage.ts rename to packages/app/src/services/LocalStorage.ts diff --git a/src/services/Operation.ts b/packages/app/src/services/Operation.ts similarity index 100% rename from src/services/Operation.ts rename to packages/app/src/services/Operation.ts diff --git a/src/services/Storage.ts b/packages/app/src/services/Storage.ts similarity index 100% rename from src/services/Storage.ts rename to packages/app/src/services/Storage.ts diff --git a/src/services/entities/Folder.ts b/packages/app/src/services/entities/Folder.ts similarity index 100% rename from src/services/entities/Folder.ts rename to packages/app/src/services/entities/Folder.ts diff --git a/src/services/entities/Note.ts b/packages/app/src/services/entities/Note.ts similarity index 100% rename from src/services/entities/Note.ts rename to packages/app/src/services/entities/Note.ts diff --git a/src/utilities/ColumnTypes.ts b/packages/app/src/utilities/ColumnTypes.ts similarity index 100% rename from src/utilities/ColumnTypes.ts rename to packages/app/src/utilities/ColumnTypes.ts diff --git a/src/utilities/Date.ts b/packages/app/src/utilities/Date.ts similarity index 100% rename from src/utilities/Date.ts rename to packages/app/src/utilities/Date.ts diff --git a/src/utilities/Id.ts b/packages/app/src/utilities/Id.ts similarity index 100% rename from src/utilities/Id.ts rename to packages/app/src/utilities/Id.ts diff --git a/src/utilities/ORM.ts b/packages/app/src/utilities/ORM.ts similarity index 100% rename from src/utilities/ORM.ts rename to packages/app/src/utilities/ORM.ts diff --git a/src/utilities/Response.ts b/packages/app/src/utilities/Response.ts similarity index 100% rename from src/utilities/Response.ts rename to packages/app/src/utilities/Response.ts diff --git a/src/utilities/Serialization.ts b/packages/app/src/utilities/Serialization.ts similarity index 100% rename from src/utilities/Serialization.ts rename to packages/app/src/utilities/Serialization.ts diff --git a/tsconfig.json b/packages/app/tsconfig.json similarity index 100% rename from tsconfig.json rename to packages/app/tsconfig.json diff --git a/yarn.lock b/packages/app/yarn.lock similarity index 100% rename from yarn.lock rename to packages/app/yarn.lock diff --git a/zeichen.config.ts b/packages/app/zeichen.config.ts similarity index 51% rename from zeichen.config.ts rename to packages/app/zeichen.config.ts index d3b94a2..8fbd779 100644 --- a/zeichen.config.ts +++ b/packages/app/zeichen.config.ts @@ -1,5 +1,5 @@ -import LocalStorage from './src/plugins/local-storage' -import RemoteStorage from './src/plugins/remote-storage' +import LocalStorage from '../plugin-local-storage' +import RemoteStorage from '../plugin-remote-storage' export default { plugins: [ diff --git a/packages/core/plugin.ts b/packages/core/plugin.ts new file mode 100644 index 0000000..0e7ef4a --- /dev/null +++ b/packages/core/plugin.ts @@ -0,0 +1,5 @@ +export type State = { + currentUserId: string, +} + +export type Plugin = (config: T) => (state: State) => void diff --git a/src/services/storages/Storage.ts b/packages/core/storage.ts similarity index 91% rename from src/services/storages/Storage.ts rename to packages/core/storage.ts index 94f2bd9..fbb7d40 100644 --- a/src/services/storages/Storage.ts +++ b/packages/core/storage.ts @@ -4,7 +4,7 @@ export default interface Storage { deleteItem(item: T): Promise } -export interface StorageMeta { +export interface Collection { items: T[], lastModifiedBy: string, lastModifiedAt: Date, diff --git a/src/plugins/local-storage/Engine.ts b/packages/plugin-local-storage/Engine.ts similarity index 100% rename from src/plugins/local-storage/Engine.ts rename to packages/plugin-local-storage/Engine.ts diff --git a/src/plugins/local-storage/Storage.ts b/packages/plugin-local-storage/Storage.ts similarity index 83% rename from src/plugins/local-storage/Storage.ts rename to packages/plugin-local-storage/Storage.ts index 1cae26e..ae254a5 100644 --- a/src/plugins/local-storage/Storage.ts +++ b/packages/plugin-local-storage/Storage.ts @@ -1,15 +1,15 @@ -import Storage, { StorageMeta, OutOfSyncError } from '../../services/storages/Storage' +import Storage, { Collection, OutOfSyncError } from '../core/storage' import Engine from './Engine' export default class LocalStorage implements Storage { - private readonly engine: Engine> + private readonly engine: Engine> constructor( private readonly ownerId: string, private readonly storageId: string, private readonly getItemId = item => item['id'], ) { - this.engine = new Engine>(window.localStorage) + this.engine = new Engine>(window.localStorage) } private getMeta() { @@ -31,7 +31,7 @@ export default class LocalStorage implements Storage { async saveItem(newItem: T) { const oldMeta = this.getMeta() const isExistingItem = oldMeta.items.some(this.existenceCheck(newItem)) - const newMeta: StorageMeta = { + const newMeta: Collection = { items: isExistingItem ? oldMeta.items.map(oldItem => this.existenceCheck(newItem)(oldItem) ? newItem : oldItem) : [...oldMeta.items, newItem], @@ -44,7 +44,7 @@ export default class LocalStorage implements Storage { async deleteItem(newItem: T) { const oldMeta = this.getMeta() const newItems = oldMeta.items.filter(oldItem => !this.existenceCheck(newItem)(oldItem)) - const newMeta: StorageMeta = { + const newMeta: Collection = { items: newItems, lastModifiedBy: this.ownerId, lastModifiedAt: new Date(), diff --git a/packages/plugin-local-storage/index.ts b/packages/plugin-local-storage/index.ts new file mode 100644 index 0000000..dabc2b5 --- /dev/null +++ b/packages/plugin-local-storage/index.ts @@ -0,0 +1,13 @@ +import { Plugin } from '../core/plugin' +import Storage from './Storage' + +type PluginConfig = {} + +const LocalStoragePlugin: Plugin = config => ({ + currentUserId, +}) => { + new Storage(currentUserId, 'notes') + new Storage(currentUserId, 'folders') +} + +export default LocalStoragePlugin diff --git a/packages/plugin-local-storage/package.json b/packages/plugin-local-storage/package.json new file mode 100644 index 0000000..3fdf087 --- /dev/null +++ b/packages/plugin-local-storage/package.json @@ -0,0 +1,12 @@ +{ + "name": "zeichen-plugin-local-storage", + "author": "TheoryOfNekomata ", + "version": "0.1.0", + "description": "Save and load notes using the browser's local storage.", + "keywords": [ + "zeichen", + "plugin", + "storage", + "local" + ] +} diff --git a/packages/plugin-local-storage/tsconfig.json b/packages/plugin-local-storage/tsconfig.json new file mode 100644 index 0000000..fd7783c --- /dev/null +++ b/packages/plugin-local-storage/tsconfig.json @@ -0,0 +1,35 @@ +{ + "compilerOptions": { + "target": "es6", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "preserve", + "declaration": true, + "declarationDir": "./dist", + "sourceMap": true, + "strict": false + }, + "exclude": [ + "node_modules", + "**/*.test.ts", + "**/*.test.tsx" + ], + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx" + ] +} diff --git a/src/plugins/remote-storage/Engine.ts b/packages/plugin-remote-storage/Engine.ts similarity index 96% rename from src/plugins/remote-storage/Engine.ts rename to packages/plugin-remote-storage/Engine.ts index 9b3800e..13124b6 100644 --- a/src/plugins/remote-storage/Engine.ts +++ b/packages/plugin-remote-storage/Engine.ts @@ -1,4 +1,4 @@ -import { Deserializer, Serializer } from '../../services/storages/Storage' +import { Deserializer, Serializer } from '../core/storage' const CREATED = 201 const NO_CONTENT = 204 diff --git a/src/plugins/remote-storage/Storage.ts b/packages/plugin-remote-storage/Storage.ts similarity index 78% rename from src/plugins/remote-storage/Storage.ts rename to packages/plugin-remote-storage/Storage.ts index d10b144..c02f0cf 100644 --- a/src/plugins/remote-storage/Storage.ts +++ b/packages/plugin-remote-storage/Storage.ts @@ -1,8 +1,8 @@ -import Storage, { StorageMeta } from '../../services/storages/Storage' +import Storage, { Collection } from '../core/storage' import Engine from './Engine' export default class RemoteStorage implements Storage { - private readonly engine: Engine> + private readonly engine: Engine> constructor( private ownerId: string, @@ -17,7 +17,7 @@ export default class RemoteStorage implements Storage { } async queryItems() { - const response = await this.engine.getCollection(this.collectionId) as StorageMeta; + const response = await this.engine.getCollection(this.collectionId) as Collection; return response.items; } diff --git a/src/plugins/remote-storage/index.ts b/packages/plugin-remote-storage/index.ts similarity index 58% rename from src/plugins/remote-storage/index.ts rename to packages/plugin-remote-storage/index.ts index 17726ef..d2d3dcf 100644 --- a/src/plugins/remote-storage/index.ts +++ b/packages/plugin-remote-storage/index.ts @@ -1,18 +1,15 @@ +import { Plugin } from '../core/plugin' import Storage from './Storage' type PluginConfig = { baseUrl: string, } -type State = { - currentUserId: string, -} - -type Plugin = (config: PluginConfig) => (state: State) => void - -const RemoteStoragePlugin: Plugin = config => ({ +const RemoteStoragePlugin: Plugin = config => ({ currentUserId, }) => { new Storage(currentUserId, config.baseUrl, 'notes') new Storage(currentUserId, config.baseUrl, 'folders') } + +export default RemoteStoragePlugin diff --git a/packages/plugin-remote-storage/package.json b/packages/plugin-remote-storage/package.json new file mode 100644 index 0000000..5236581 --- /dev/null +++ b/packages/plugin-remote-storage/package.json @@ -0,0 +1,12 @@ +{ + "name": "zeichen-plugin-remote-storage", + "author": "TheoryOfNekomata ", + "version": "0.1.0", + "description": "Save and load notes using an external API.", + "keywords": [ + "zeichen", + "plugin", + "storage", + "API" + ] +} diff --git a/packages/plugin-remote-storage/tsconfig.json b/packages/plugin-remote-storage/tsconfig.json new file mode 100644 index 0000000..fd7783c --- /dev/null +++ b/packages/plugin-remote-storage/tsconfig.json @@ -0,0 +1,35 @@ +{ + "compilerOptions": { + "target": "es6", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "preserve", + "declaration": true, + "declarationDir": "./dist", + "sourceMap": true, + "strict": false + }, + "exclude": [ + "node_modules", + "**/*.test.ts", + "**/*.test.tsx" + ], + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx" + ] +} diff --git a/src/plugins/local-storage/index.ts b/src/plugins/local-storage/index.ts deleted file mode 100644 index 5ff07a0..0000000 --- a/src/plugins/local-storage/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -import Storage from './Storage' - -type PluginConfig = { - -} - -type State = { - currentUserId: string, -} - -type Plugin = (config: PluginConfig) => (state: State) => void - -const LocalStoragePlugin: Plugin = config => ({ - currentUserId, -}) => { - new Storage(currentUserId, 'notes') - new Storage(currentUserId, 'folders') -}