Skip to content

Commit

Permalink
Start removing circular deps
Browse files Browse the repository at this point in the history
  • Loading branch information
benmerckx committed Feb 8, 2024
1 parent dc5d06c commit 7e3f67a
Show file tree
Hide file tree
Showing 35 changed files with 128 additions and 101 deletions.
7 changes: 7 additions & 0 deletions .madgerc
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"detectiveOptions": {
"ts": {
"skipTypeImports": true
}
}
}
4 changes: 3 additions & 1 deletion apps/web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
"dev:test": "alinea dev -- next dev",
"build": "yarn build:alinea && alinea build -- next build",
"start": "next start",
"lint": "next lint"
"lint": "next lint",
"seed": "alinea build -- tsx src/seed.ts"
},
"dependencies": {
"@monaco-editor/react": "^4.4.5",
Expand All @@ -32,6 +33,7 @@
"eslint": "8.39.0",
"eslint-config-next": "13.4.0",
"raw-loader": "^4.0.2",
"tsx": "^4.7.0",
"typescript": "^5.3.3"
},
"exports": {
Expand Down
8 changes: 3 additions & 5 deletions apps/web/src/schema/Home.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@ import {IcRoundLink} from 'alinea/ui/icons/IcRoundLink'
export const Home = Config.document('Home', {
fields: {
title: Field.text('Title'),
path: Field.path('Path', {
hidden: true
}),
path: Field.path('Path', {hidden: true}),
...Field.tabs(
Field.tab('Homepage', {
icon: IcRoundInsertDriveFile,
Expand Down Expand Up @@ -50,9 +48,9 @@ export const Home = Config.document('Home', {
fields: {
label: Field.text('Label'),
links: Field.link.multiple('Links', {
fields: Config.type('Fields', {
fields: {
label: Field.text('Label')
})
}
})
}
})
Expand Down
11 changes: 11 additions & 0 deletions apps/web/src/seed.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import {cms} from '@/cms'
import {Query} from 'alinea'
import {Home} from './schema/Home'

console.log(cms)

async function seed() {
console.log(await cms.get(Query(Home)))
}

seed().catch(console.error)
3 changes: 2 additions & 1 deletion src/backend/Database.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import {JsonLoader, Media} from 'alinea/backend'
import {
Config,
EntryUrlMeta,
Expand All @@ -25,12 +24,14 @@ import {Driver, Expr, Select, alias, create} from 'rado'
import {exists} from 'rado/sqlite'
import xxhash from 'xxhash-wasm'
import {EntryPhase, EntryRow} from '../core/EntryRow.js'
import {Media} from './Media.js'
import {Source} from './Source.js'
import {Store} from './Store.js'
import {Target} from './Target.js'
import {ChangeSetCreator} from './data/ChangeSet.js'
import {AlineaMeta} from './db/AlineaMeta.js'
import {createEntrySearch} from './db/CreateEntrySearch.js'
import {JsonLoader} from './loader/JsonLoader.js'

interface Seed {
type: string
Expand Down
5 changes: 3 additions & 2 deletions src/backend/Handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import {
EntryRow,
PreviewUpdate,
ResolveDefaults,
ResolveParams,
Resolver,
SyncResponse,
parseYDoc
Expand Down Expand Up @@ -71,7 +72,7 @@ export class Handler implements Resolver {
this.router = createRouter(auth, this.connect)
}

resolve = async (params: Connection.ResolveParams) => {
resolve = async (params: ResolveParams) => {
const {resolveDefaults} = this.options
const resolveParams = {...resolveDefaults, ...params}
const {syncInterval} = resolveParams
Expand Down Expand Up @@ -267,7 +268,7 @@ function respond<T>({result, logger}: LoggerResult<T>) {
})
}

const ResolveBody: Type<Connection.ResolveParams> = object({
const ResolveBody: Type<ResolveParams> = object({
selection: Selection.adt,
locale: string.optional,
realm: enums(Realm),
Expand Down
12 changes: 8 additions & 4 deletions src/backend/data/MemoryHandler.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
import {Database, Handler, JWTPreviews, Media, Target} from 'alinea/backend'
import {Drafts} from 'alinea/backend/Drafts'
import {History, Revision} from 'alinea/backend/History'
import {Pending} from 'alinea/backend/Pending'
import {Config, Connection, Draft, createId} from 'alinea/core'
import {EntryRecord} from 'alinea/core/EntryRecord'
import {Mutation} from 'alinea/core/Mutation'
import {Database} from '../Database.js'
import {Drafts} from '../Drafts.js'
import {Handler} from '../Handler.js'
import {History, Revision} from '../History.js'
import {Media} from '../Media.js'
import {Pending} from '../Pending.js'
import {Target} from '../Target.js'
import {JWTPreviews} from '../util/JWTPreviews.js'

class MemoryApi implements Media, Target, History, Drafts, Pending {
drafts = new Map<string, Draft>()
Expand Down
4 changes: 2 additions & 2 deletions src/backend/resolver/EntryResolver.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import {
Connection,
Field,
PreviewUpdate,
ResolveDefaults,
ResolveParams,
Schema,
Type,
unreachable
Expand Down Expand Up @@ -624,7 +624,7 @@ export class EntryResolver {
locale,
realm = this.defaults?.realm ?? Realm.Published,
preview = this.defaults?.preview
}: Connection.ResolveParams): Promise<T> => {
}: ResolveParams): Promise<T> => {
const ctx = new ResolveContext({realm, location, locale})
const queryData = this.query(ctx, selection)
const query = new Query<Interim>(queryData)
Expand Down
16 changes: 7 additions & 9 deletions src/core/Client.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
import {AbortController, fetch, Response} from '@alinea/iso'
import {DraftTransport} from 'alinea/backend/Drafts'
import {Revision} from 'alinea/backend/History'
import {
Config,
Connection,
Draft,
HttpError,
ResolveDefaults
} from 'alinea/core'
import {SyncResponse} from './Connection.js'

import {Config} from './Config.js'
import {Connection, SyncResponse} from './Connection.js'
import {Draft} from './Draft.js'
import {EntryRecord} from './EntryRecord.js'
import {HttpError} from './HttpError.js'
import {Mutation} from './Mutation.js'
import {ResolveDefaults, ResolveParams} from './Resolver.js'
import {base64} from './util/Encoding.js'

async function failOnHttpError<T>(
Expand Down Expand Up @@ -48,7 +46,7 @@ export class Client implements Connection {
}).then<Connection.UploadResponse>(failOnHttpError)
}

resolve(params: Connection.ResolveParams): Promise<unknown> {
resolve(params: ResolveParams): Promise<unknown> {
const {resolveDefaults} = this.options
const body = JSON.stringify({...resolveDefaults, ...params})
return this.requestJson(Connection.routes.resolve(), {
Expand Down
10 changes: 2 additions & 8 deletions src/core/Connection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@ import {Draft} from './Draft.js'
import {EntryRecord} from './EntryRecord.js'
import {EntryRow} from './EntryRow.js'
import {Mutation} from './Mutation.js'
import {ResolveDefaults, Resolver} from './Resolver.js'
import {Resolver} from './Resolver.js'
import {User} from './User.js'
import {Selection} from './pages/Selection.js'
import {Logger} from './util/Logger.js'

export interface SyncResponse {
Expand Down Expand Up @@ -52,12 +51,7 @@ export namespace Connection {
method?: string
}
}
export interface ResolveParams extends ResolveDefaults {
selection: Selection
location?: Array<string>
locale?: string
syncInterval?: number
}

export type MediaUploadParams = {
buffer: ArrayBuffer
fileLocation: string
Expand Down
15 changes: 6 additions & 9 deletions src/core/Edit.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
import {File} from '@alinea/iso'
import {
FieldOptions,
ListEditor,
ListField,
ListRow,
RichTextEditor,
RichTextField,
TextDoc
} from 'alinea/core'

import {ListEditor, ListField} from 'alinea/core/field/ListField'
import {RichTextEditor, RichTextField} from 'alinea/core/field/RichTextField'
import {ListRow} from 'alinea/field/list'
import {FieldOptions} from './Field.js'
import {TextDoc} from './TextDoc.js'
import {
CreateOperation,
DeleteOp,
Expand Down
2 changes: 1 addition & 1 deletion src/core/Entry.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {Expand} from 'alinea/core'
import {EntryPhase, EntryRow} from './EntryRow.js'
import {Target} from './pages/Target.js'
import {Expand} from './util/Types.js'

export interface Entry {
entryId: string
Expand Down
6 changes: 3 additions & 3 deletions src/core/Graph.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {Config} from './Config.js'
import {Connection} from './Connection.js'
import {PageSeed} from './Page.js'
import {ResolveParams} from './Resolver.js'
import {Root} from './Root.js'
import {Schema} from './Schema.js'
import {Type} from './Type.js'
Expand Down Expand Up @@ -45,7 +45,7 @@ export class GraphRealm implements GraphRealmApi {

constructor(
protected config: Config,
private resolve: (params: Connection.ResolveParams) => Promise<unknown>,
private resolve: (params: ResolveParams) => Promise<unknown>,
private origin: GraphOrigin = {}
) {
this.targets = Schema.targets(config.schema)
Expand Down Expand Up @@ -144,7 +144,7 @@ export class Graph {

constructor(
public config: Config,
public resolve: (params: Connection.ResolveParams) => Promise<unknown>
public resolve: (params: ResolveParams) => Promise<unknown>
) {
this.drafts = new GraphRealm(this.config, params => {
return this.resolve({
Expand Down
11 changes: 9 additions & 2 deletions src/core/Resolver.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
import {Connection} from './Connection.js'
import {EntryPhase} from './EntryRow.js'
import {Realm} from './pages/Realm.js'
import {Selection} from './pages/Selection.js'

export interface ResolveParams extends ResolveDefaults {
selection: Selection
location?: Array<string>
locale?: string
syncInterval?: number
}

export interface PreviewUpdate {
entryId: string
Expand All @@ -15,5 +22,5 @@ export interface ResolveDefaults {
}

export interface Resolver {
resolve(params: Connection.ResolveParams): Promise<unknown>
resolve(params: ResolveParams): Promise<unknown>
}
2 changes: 1 addition & 1 deletion src/core/TextDoc.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import {TypesOf} from 'alinea/core'
import {TypesOf} from './util/Types.js'

export namespace TextNode {
export type Mark = {
Expand Down
2 changes: 1 addition & 1 deletion src/core/Tracker.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import {Mutation} from 'alinea/core/Mutation'
import {Field, FieldOptions} from './Field.js'
import {Mutation} from './Mutation.js'

export interface FieldGetter {
<Value>(field: Field<Value>): Value
Expand Down
9 changes: 5 additions & 4 deletions src/core/Type.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import {EntryPhase, Expand} from 'alinea/core'
import {Cursor} from 'alinea/core/pages/Cursor'
import {Expr} from 'alinea/core/pages/Expr'
import {EntryEditProps} from 'alinea/dashboard/view/EntryEdit'
import type {EntryEditProps} from 'alinea/dashboard/view/EntryEdit'
import {Callable} from 'rado/util/Callable'
import type {ComponentType} from 'react'
import {EntryPhase} from './EntryRow.js'
import {Field} from './Field.js'
import {Hint} from './Hint.js'
import {Label} from './Label.js'
import {Meta, StripMeta} from './Meta.js'
import {Section, section} from './Section.js'
import type {View} from './View.js'
import {createExprData} from './pages/CreateExprData.js'
import {Cursor} from './pages/Cursor.js'
import {Expr} from './pages/Expr.js'
import {BinaryOp, ExprData} from './pages/ExprData.js'
import {RecordShape} from './shape/RecordShape.js'
import {
Expand All @@ -20,6 +20,7 @@ import {
fromEntries,
keys
} from './util/Objects.js'
import {Expand} from './util/Types.js'

export interface EntryUrlMeta {
phase: EntryPhase
Expand Down
2 changes: 1 addition & 1 deletion src/core/driver/DefaultDriver.server.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@ import {Database} from 'alinea/backend'
import {createStore} from 'alinea/backend/Store'
import {EntryResolver} from 'alinea/backend/resolver/EntryResolver'
import {createCloudHandler} from 'alinea/cloud/server/CloudHandler'
import {base64} from 'alinea/core/util/Encoding'
import PLazy from 'p-lazy'
import {CMS} from '../CMS.js'
import {Client} from '../Client.js'
import {Config} from '../Config.js'
import {Connection} from '../Connection.js'
import {Resolver} from '../Resolver.js'
import {Realm} from '../pages/Realm.js'
import {base64} from '../util/Encoding.js'
import {Logger} from '../util/Logger.js'

const store = PLazy.from(async () => {
Expand Down
2 changes: 1 addition & 1 deletion src/core/field/RichTextField.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import {RichTextMutator, RichTextShape} from 'alinea/core'
import {Parser} from 'htmlparser2'
import {Field, FieldMeta, FieldOptions} from '../Field.js'
import {TextDoc, TextNode} from '../TextDoc.js'
import {RecordShape} from '../shape/RecordShape.js'
import {RichTextMutator, RichTextShape} from '../shape/RichTextShape.js'

export class RichTextField<
Blocks,
Expand Down
2 changes: 1 addition & 1 deletion src/core/media/CreatePreview.browser.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {base64} from 'alinea/core/util/Encoding'
import {rgba, toHex} from 'color2k'
import smartcrop from 'smartcrop'
import {rgbaToThumbHash, thumbHashToAverageRGBA} from 'thumbhash'
import {base64} from '../util/Encoding.js'
import type {ImagePreviewDetails} from './CreatePreview.js'

export {ImagePreviewDetails}
Expand Down
2 changes: 1 addition & 1 deletion src/core/media/CreatePreview.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {base64} from 'alinea/core/util/Encoding'
import {rgba, toHex} from 'color2k'
import {rgbaToThumbHash, thumbHashToAverageRGBA} from 'thumbhash'
import {base64} from '../util/Encoding.js'

export interface ImagePreviewDetails {
width: number
Expand Down
Loading

0 comments on commit 7e3f67a

Please sign in to comment.