diff --git a/dev/storage/package.json b/dev/storage/package.json index 6534873110..754a4effba 100644 --- a/dev/storage/package.json +++ b/dev/storage/package.json @@ -20,7 +20,6 @@ "dependencies": { "@anticrm/core": "~0.6.10", "@anticrm/platform": "~0.6.5", - "@anticrm/server-core": "~0.6.0", - "@anticrm/server": "~0.6.0" + "@anticrm/server-core": "~0.6.0" } } diff --git a/dev/storage/src/storage.ts b/dev/storage/src/storage.ts index 50def9c36c..4dd65992d4 100644 --- a/dev/storage/src/storage.ts +++ b/dev/storage/src/storage.ts @@ -15,7 +15,7 @@ import type { Tx, Ref, Doc, Class, DocumentQuery, FindResult, FindOptions } from '@anticrm/core' import core, { ModelDb, TxDb, Hierarchy, DOMAIN_TX, TxFactory, ServerStorage } from '@anticrm/core' -import { Triggers } from '@anticrm/server' +import { Triggers } from '@anticrm/server-core' import * as txJson from './model.tx.json' diff --git a/server/core/src/index.ts b/server/core/src/index.ts index bf22c1ad43..8f75611bf2 100644 --- a/server/core/src/index.ts +++ b/server/core/src/index.ts @@ -14,9 +14,11 @@ // limitations under the License. // +import type { Doc, Tx, TxCreateDoc, TxFactory, Ref, Class } from '@anticrm/core' import type { Resource, Plugin } from '@anticrm/platform' -import { plugin } from '@anticrm/platform' -import type { Doc, Tx, TxFactory, Class, Ref } from '@anticrm/core' +import { getResource, plugin } from '@anticrm/platform' + +import core from '@anticrm/core' /** * @public @@ -24,12 +26,40 @@ import type { Doc, Tx, TxFactory, Class, Ref } from '@anticrm/core' export type TriggerFunc = (tx: Tx, txFactory: TxFactory) => Promise /** - * @public - */ + * @public + */ export interface Trigger extends Doc { trigger: Resource } +/** + * @public + */ +export class Triggers { + private readonly triggers: TriggerFunc[] = [] + + constructor (private readonly txFactory: TxFactory) { + + } + + async tx (tx: Tx): Promise { + if (tx._class === core.class.TxCreateDoc) { + const createTx = tx as TxCreateDoc + if (createTx.objectClass === serverCore.class.Trigger) { + const trigger = (createTx as TxCreateDoc).attributes.trigger + const func = await getResource(trigger) + this.triggers.push(func) + } + } + } + + async apply (tx: Tx): Promise { + const derived = this.triggers.map(trigger => trigger(tx, this.txFactory)) + const result = await Promise.all(derived) + return result.flatMap(x => x) + } +} + /** * @public */ @@ -38,8 +68,10 @@ export const serverCoreId = 'server-core' as Plugin /** * @public */ -export default plugin(serverCoreId, { +const serverCore = plugin(serverCoreId, { class: { Trigger: '' as Ref> } }) + +export default serverCore diff --git a/server/server/src/index.ts b/server/server/src/index.ts index 9a85f8c85a..fc92c02ec1 100644 --- a/server/server/src/index.ts +++ b/server/server/src/index.ts @@ -14,4 +14,4 @@ // limitations under the License. // -export * from './triggers' +export const x = 42 diff --git a/server/server/src/triggers.ts b/server/server/src/triggers.ts deleted file mode 100644 index 6b86de13cb..0000000000 --- a/server/server/src/triggers.ts +++ /dev/null @@ -1,49 +0,0 @@ -// -// Copyright © 2020, 2021 Anticrm Platform Contributors. -// Copyright © 2021 Hardcore Engineering Inc. -// -// Licensed under the Eclipse Public License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. You may -// obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import type { Doc, Tx, TxCreateDoc, TxFactory } from '@anticrm/core' -import { getResource } from '@anticrm/platform' - -import core from '@anticrm/core' -import serverCore, { Trigger, TriggerFunc } from '@anticrm/server-core' - -/** - * @public - */ -export class Triggers { - private readonly triggers: TriggerFunc[] = [] - - constructor (private readonly txFactory: TxFactory) { - - } - - async tx (tx: Tx): Promise { - if (tx._class === core.class.TxCreateDoc) { - const createTx = tx as TxCreateDoc - if (createTx.objectClass === serverCore.class.Trigger) { - const trigger = (createTx as TxCreateDoc).attributes.trigger - const func = await getResource(trigger) - this.triggers.push(func) - } - } - } - - async apply (tx: Tx): Promise { - const derived = this.triggers.map(trigger => trigger(tx, this.txFactory)) - const result = await Promise.all(derived) - return result.flatMap(x => x) - } -}