mirror of
https://github.com/hcengineering/platform.git
synced 2025-04-11 02:38:49 +00:00
461 lines
17 KiB
TypeScript
461 lines
17 KiB
TypeScript
//
|
|
// Copyright © 2022 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 core, { coreId, type Data, type PluginConfiguration, type Ref, type Tx, type Version } from '@hcengineering/core'
|
|
|
|
import { Builder } from '@hcengineering/model'
|
|
import { activityId, createModel as activityModel } from '@hcengineering/model-activity'
|
|
import { attachmentId, createModel as attachmentModel } from '@hcengineering/model-attachment'
|
|
import bitrix, { bitrixId, createModel as bitrixModel } from '@hcengineering/model-bitrix'
|
|
import board, { boardId, createModel as boardModel } from '@hcengineering/model-board'
|
|
import calendar, { calendarId, createModel as calendarModel } from '@hcengineering/model-calendar'
|
|
import chunter, { chunterId, createModel as chunterModel } from '@hcengineering/model-chunter'
|
|
import contact, { contactId, createModel as contactModel } from '@hcengineering/model-contact'
|
|
import { createModel as coreModel } from '@hcengineering/model-core'
|
|
import gmail, { gmailId, createModel as gmailModel } from '@hcengineering/model-gmail'
|
|
import { guestId, createModel as guestModel } from '@hcengineering/model-guest'
|
|
import hr, { hrId, createModel as hrModel } from '@hcengineering/model-hr'
|
|
import inventory, { inventoryId, createModel as inventoryModel } from '@hcengineering/model-inventory'
|
|
import lead, { leadId, createModel as leadModel } from '@hcengineering/model-lead'
|
|
import notification, { notificationId, createModel as notificationModel } from '@hcengineering/model-notification'
|
|
import { preferenceId, createModel as preferenceModel } from '@hcengineering/model-preference'
|
|
import presentation, { presentationId, createModel as presentationModel } from '@hcengineering/model-presentation'
|
|
import recruit, { recruitId, createModel as recruitModel } from '@hcengineering/model-recruit'
|
|
import { requestId, createModel as requestModel } from '@hcengineering/model-request'
|
|
import { serverActivityId, createModel as serverActivityModel } from '@hcengineering/model-server-activity'
|
|
import { serverAttachmentId, createModel as serverAttachmentModel } from '@hcengineering/model-server-attachment'
|
|
import { serverCalendarId, createModel as serverCalendarModel } from '@hcengineering/model-server-calendar'
|
|
import { serverChunterId, createModel as serverChunterModel } from '@hcengineering/model-server-chunter'
|
|
import {
|
|
serverCollaborationId,
|
|
createModel as serverCollaborationModel
|
|
} from '@hcengineering/model-server-collaboration'
|
|
import { serverContactId, createModel as serverContactModel } from '@hcengineering/model-server-contact'
|
|
import { serverCoreId, createModel as serverCoreModel } from '@hcengineering/model-server-core'
|
|
import { serverDriveId, createModel as serverDriveModel } from '@hcengineering/model-server-drive'
|
|
import { serverGmailId, createModel as serverGmailModel } from '@hcengineering/model-server-gmail'
|
|
import { serverGuestId, createModel as serverGuestModel } from '@hcengineering/model-server-guest'
|
|
import { serverHrId, createModel as serverHrModel } from '@hcengineering/model-server-hr'
|
|
import { serverInventoryId, createModel as serverInventoryModel } from '@hcengineering/model-server-inventory'
|
|
import { serverLeadId, createModel as serverLeadModel } from '@hcengineering/model-server-lead'
|
|
import { serverNotificationId, createModel as serverNotificationModel } from '@hcengineering/model-server-notification'
|
|
import { serverRecruitId, createModel as serverRecruitModel } from '@hcengineering/model-server-recruit'
|
|
import { serverRequestId, createModel as serverRequestModel } from '@hcengineering/model-server-request'
|
|
import { serverSettingId, createModel as serveSettingModel } from '@hcengineering/model-server-setting'
|
|
import { serverTagsId, createModel as serverTagsModel } from '@hcengineering/model-server-tags'
|
|
import { serverTaskId, createModel as serverTaskModel } from '@hcengineering/model-server-task'
|
|
import { serverTelegramId, createModel as serverTelegramModel } from '@hcengineering/model-server-telegram'
|
|
import { serverTemplatesId, createModel as serverTemplatesModel } from '@hcengineering/model-server-templates'
|
|
import { serverTrackerId, createModel as serverTrackerModel } from '@hcengineering/model-server-tracker'
|
|
import { serverViewId, createModel as serverViewModel } from '@hcengineering/model-server-view'
|
|
import { serverAiBotId, createModel as serverAiBotModel } from '@hcengineering/model-server-ai-bot'
|
|
import setting, { settingId, createModel as settingModel } from '@hcengineering/model-setting'
|
|
import { driveId, createModel as driveModel } from '@hcengineering/model-drive'
|
|
import { supportId, createModel as supportModel } from '@hcengineering/model-support'
|
|
import { tagsId, createModel as tagsModel } from '@hcengineering/model-tags'
|
|
import { taskId, createModel as taskModel } from '@hcengineering/model-task'
|
|
import telegram, { telegramId, createModel as telegramModel } from '@hcengineering/model-telegram'
|
|
import { templatesId, createModel as templatesModel } from '@hcengineering/model-templates'
|
|
import { textEditorId, createModel as textEditorModel } from '@hcengineering/model-text-editor'
|
|
import { timeId, createModel as timeModel } from '@hcengineering/model-time'
|
|
import tracker, { trackerId, createModel as trackerModel } from '@hcengineering/model-tracker'
|
|
import { uploaderId, createModel as uploaderModel } from '@hcengineering/model-uploader'
|
|
import view, { viewId, createModel as viewModel } from '@hcengineering/model-view'
|
|
import workbench, { workbenchId, createModel as workbenchModel } from '@hcengineering/model-workbench'
|
|
import { desktopPreferencesId, createModel as desktopPreferencesModel } from '@hcengineering/model-desktop-preferences'
|
|
|
|
import { openAIId, createModel as serverOpenAI } from '@hcengineering/model-server-openai'
|
|
import { createModel as serverTranslate, translateId } from '@hcengineering/model-server-translate'
|
|
import document, { documentId, createModel as documentModel } from '@hcengineering/model-document'
|
|
import { serverDocumentId, createModel as serverDocumentModel } from '@hcengineering/model-server-document'
|
|
|
|
import github, { githubId, createModel as githubModel } from '@hcengineering/model-github'
|
|
import { serverGithubId, createModel as serverGithubModel } from '@hcengineering/server-github-model'
|
|
|
|
import { serverTimeId, createModel as serverTimeModel } from '@hcengineering/model-server-time'
|
|
import love, { loveId, createModel as loveModel } from '@hcengineering/model-love'
|
|
import { printId, createModel as printModel } from '@hcengineering/model-print'
|
|
import { analyticsCollectorId, createModel as analyticsCollectorModel } from '@hcengineering/model-analytics-collector'
|
|
import { serverLoveId, createModel as serverLoveModel } from '@hcengineering/model-server-love'
|
|
|
|
import { questionsId, createModel as questionsModel } from '@hcengineering/model-questions'
|
|
import trainings, { trainingId, createModel as trainingModel } from '@hcengineering/model-training'
|
|
import documents, { documentsId, createModel as documentsModel } from '@hcengineering/model-controlled-documents'
|
|
import products, { productsId, createModel as productsModel } from '@hcengineering/model-products'
|
|
import { serverProductsId, createModel as serverProductsModel } from '@hcengineering/model-server-products'
|
|
import { serverTrainingId, createModel as serverTrainingModel } from '@hcengineering/model-server-training'
|
|
import {
|
|
serverDocumentsId,
|
|
createModel as serverDocumentsModel
|
|
} from '@hcengineering/model-server-controlled-documents'
|
|
|
|
import { type Plugin } from '@hcengineering/platform'
|
|
|
|
interface ConfigurablePlugin extends Omit<Data<PluginConfiguration>, 'pluginId' | 'transactions'> {}
|
|
|
|
type BuilderConfig = [(b: Builder) => void, Plugin] | [(b: Builder) => void, Plugin, ConfigurablePlugin | undefined]
|
|
|
|
export function getModelVersion (): Data<Version> {
|
|
const rawVersion = (process.env.MODEL_VERSION ?? '0.6.0').trim().replace('v', '').split('.')
|
|
if (rawVersion.length === 3) {
|
|
return {
|
|
major: parseInt(rawVersion[0]),
|
|
minor: parseInt(rawVersion[1]),
|
|
patch: parseInt(rawVersion[2])
|
|
}
|
|
}
|
|
return { major: 0, minor: 6, patch: 0 }
|
|
}
|
|
|
|
export type { MigrateOperation } from '@hcengineering/model'
|
|
|
|
/**
|
|
* @public
|
|
* @param enabled - a set of enabled plugins
|
|
* @param disabled - a set of disabled plugins
|
|
* @returns
|
|
*/
|
|
export default function buildModel (enabled: string[] = ['*'], disabled: string[] = []): Builder {
|
|
const builder = new Builder()
|
|
|
|
const defaultFilter = [
|
|
workbench.class.Application,
|
|
presentation.class.ComponentPointExtension,
|
|
presentation.class.ObjectSearchCategory,
|
|
notification.class.NotificationGroup,
|
|
view.class.Action,
|
|
contact.class.ChannelProvider,
|
|
setting.class.IntegrationType
|
|
]
|
|
|
|
const builders: BuilderConfig[] = [
|
|
[coreModel, coreId],
|
|
[activityModel, activityId],
|
|
[attachmentModel, attachmentId],
|
|
[guestModel, guestId],
|
|
[tagsModel, tagsId],
|
|
[viewModel, viewId],
|
|
[workbenchModel, workbenchId],
|
|
[
|
|
contactModel,
|
|
contactId,
|
|
{
|
|
label: contact.string.ConfigLabel,
|
|
description: contact.string.ConfigDescription,
|
|
enabled: true,
|
|
beta: false,
|
|
icon: contact.icon.ContactApplication,
|
|
classFilter: defaultFilter
|
|
}
|
|
],
|
|
[
|
|
chunterModel,
|
|
chunterId,
|
|
{
|
|
label: chunter.string.ConfigLabel,
|
|
description: chunter.string.ConfigDescription,
|
|
enabled: true,
|
|
beta: false,
|
|
icon: chunter.icon.Chunter,
|
|
classFilter: [workbench.class.Application]
|
|
}
|
|
],
|
|
[taskModel, taskId],
|
|
[
|
|
calendarModel,
|
|
calendarId,
|
|
{
|
|
label: calendar.string.ConfigLabel,
|
|
description: calendar.string.ConfigDescription,
|
|
enabled: false,
|
|
beta: true,
|
|
icon: calendar.icon.Calendar,
|
|
classFilter: defaultFilter
|
|
}
|
|
],
|
|
[
|
|
recruitModel,
|
|
recruitId,
|
|
{
|
|
label: recruit.string.ConfigLabel,
|
|
description: recruit.string.ConfigDescription,
|
|
enabled: true,
|
|
beta: false,
|
|
icon: recruit.icon.RecruitApplication,
|
|
classFilter: defaultFilter
|
|
}
|
|
],
|
|
[settingModel, settingId],
|
|
[
|
|
telegramModel,
|
|
telegramId,
|
|
{
|
|
label: telegram.string.ConfigLabel,
|
|
description: telegram.string.ConfigDescription,
|
|
enabled: true,
|
|
beta: false,
|
|
classFilter: defaultFilter
|
|
}
|
|
],
|
|
[
|
|
leadModel,
|
|
leadId,
|
|
{
|
|
label: lead.string.ConfigLabel,
|
|
description: lead.string.ConfigDescription,
|
|
enabled: false,
|
|
beta: true,
|
|
icon: lead.icon.LeadApplication,
|
|
classFilter: defaultFilter
|
|
}
|
|
],
|
|
[
|
|
gmailModel,
|
|
gmailId,
|
|
{
|
|
label: gmail.string.ConfigLabel,
|
|
description: gmail.string.ConfigDescription,
|
|
enabled: true,
|
|
beta: false,
|
|
classFilter: defaultFilter
|
|
}
|
|
],
|
|
[
|
|
inventoryModel,
|
|
inventoryId,
|
|
{
|
|
label: inventory.string.ConfigLabel,
|
|
description: inventory.string.ConfigDescription,
|
|
enabled: false,
|
|
beta: true,
|
|
icon: inventory.icon.InventoryApplication,
|
|
classFilter: defaultFilter
|
|
}
|
|
],
|
|
[presentationModel, presentationId],
|
|
[templatesModel, templatesId],
|
|
[textEditorModel, textEditorId],
|
|
[uploaderModel, uploaderId],
|
|
[notificationModel, notificationId],
|
|
[preferenceModel, preferenceId],
|
|
[
|
|
hrModel,
|
|
hrId,
|
|
{
|
|
label: hr.string.ConfigLabel,
|
|
description: hr.string.ConfigDescription,
|
|
enabled: false,
|
|
beta: true,
|
|
icon: hr.icon.Structure,
|
|
classFilter: defaultFilter
|
|
}
|
|
],
|
|
[
|
|
trackerModel,
|
|
trackerId,
|
|
{
|
|
label: tracker.string.ConfigLabel,
|
|
description: tracker.string.ConfigDescription,
|
|
enabled: true,
|
|
beta: false,
|
|
icon: tracker.icon.TrackerApplication,
|
|
classFilter: defaultFilter
|
|
}
|
|
],
|
|
[
|
|
documentModel,
|
|
documentId,
|
|
{
|
|
label: document.string.ConfigLabel,
|
|
description: document.string.ConfigDescription,
|
|
enabled: true,
|
|
beta: true,
|
|
icon: document.icon.DocumentApplication,
|
|
classFilter: defaultFilter
|
|
}
|
|
],
|
|
[
|
|
boardModel,
|
|
boardId,
|
|
{
|
|
label: board.string.ConfigLabel,
|
|
description: board.string.ConfigDescription,
|
|
enabled: false,
|
|
beta: true,
|
|
icon: board.icon.Board,
|
|
classFilter: defaultFilter
|
|
}
|
|
],
|
|
[
|
|
bitrixModel,
|
|
bitrixId,
|
|
{
|
|
label: bitrix.string.ConfigLabel,
|
|
description: bitrix.string.ConfigDescription,
|
|
enabled: false,
|
|
beta: true,
|
|
icon: bitrix.icon.Bitrix,
|
|
classFilter: defaultFilter
|
|
}
|
|
],
|
|
[
|
|
requestModel,
|
|
requestId,
|
|
{
|
|
// label: request.string.ConfigLabel,
|
|
// description: request.string.ConfigDescription,
|
|
enabled: false,
|
|
beta: false,
|
|
classFilter: defaultFilter
|
|
}
|
|
],
|
|
[timeModel, timeId],
|
|
[supportModel, supportId],
|
|
[desktopPreferencesModel, desktopPreferencesId],
|
|
|
|
[
|
|
githubModel,
|
|
githubId,
|
|
{
|
|
label: github.string.ConfigLabel,
|
|
description: github.string.ConfigDescription,
|
|
enabled: true,
|
|
beta: true,
|
|
icon: github.icon.Github
|
|
}
|
|
],
|
|
[
|
|
loveModel,
|
|
loveId,
|
|
{
|
|
label: love.string.Office,
|
|
description: love.string.LoveDescription,
|
|
enabled: true,
|
|
beta: true,
|
|
icon: love.icon.Love,
|
|
classFilter: defaultFilter
|
|
}
|
|
],
|
|
[printModel, printId],
|
|
[analyticsCollectorModel, analyticsCollectorId],
|
|
[driveModel, driveId],
|
|
[
|
|
documentsModel,
|
|
documentsId,
|
|
{
|
|
label: documents.string.ConfigLabel,
|
|
description: documents.string.ConfigDescription,
|
|
enabled: false,
|
|
beta: false,
|
|
classFilter: defaultFilter
|
|
}
|
|
],
|
|
[
|
|
questionsModel,
|
|
questionsId,
|
|
{
|
|
enabled: false,
|
|
beta: false,
|
|
classFilter: defaultFilter
|
|
}
|
|
],
|
|
[
|
|
trainingModel,
|
|
trainingId,
|
|
{
|
|
label: trainings.string.ConfigLabel,
|
|
description: trainings.string.ConfigDescription,
|
|
enabled: false,
|
|
beta: false,
|
|
classFilter: defaultFilter
|
|
}
|
|
],
|
|
[
|
|
productsModel,
|
|
productsId,
|
|
{
|
|
label: products.string.ConfigLabel,
|
|
description: products.string.ConfigDescription,
|
|
enabled: false,
|
|
beta: false,
|
|
classFilter: defaultFilter
|
|
}
|
|
],
|
|
|
|
[serverCoreModel, serverCoreId],
|
|
[serverAttachmentModel, serverAttachmentId],
|
|
[serverCollaborationModel, serverCollaborationId],
|
|
[serverContactModel, serverContactId],
|
|
[serveSettingModel, serverSettingId],
|
|
[serverChunterModel, serverChunterId],
|
|
[serverInventoryModel, serverInventoryId],
|
|
[serverLeadModel, serverLeadId],
|
|
[serverTagsModel, serverTagsId],
|
|
[serverTaskModel, serverTaskId],
|
|
[serverTrackerModel, serverTrackerId],
|
|
[serverCalendarModel, serverCalendarId],
|
|
[serverRecruitModel, serverRecruitId],
|
|
[serverGmailModel, serverGmailId],
|
|
[serverTemplatesModel, serverTemplatesId],
|
|
[serverTelegramModel, serverTelegramId],
|
|
[serverHrModel, serverHrId],
|
|
[serverNotificationModel, serverNotificationId],
|
|
[serverRequestModel, serverRequestId],
|
|
[serverViewModel, serverViewId],
|
|
[serverActivityModel, serverActivityId],
|
|
[serverTranslate, translateId],
|
|
[serverOpenAI, openAIId],
|
|
[serverDocumentModel, serverDocumentId],
|
|
[serverGithubModel, serverGithubId],
|
|
[serverLoveModel, serverLoveId],
|
|
[serverTimeModel, serverTimeId],
|
|
[serverGuestModel, serverGuestId],
|
|
[serverDriveModel, serverDriveId],
|
|
[serverProductsModel, serverProductsId],
|
|
[serverTrainingModel, serverTrainingId],
|
|
[serverDocumentsModel, serverDocumentsId],
|
|
[serverAiBotModel, serverAiBotId]
|
|
]
|
|
|
|
for (const [b, id, config] of builders) {
|
|
const txes: Tx[] = []
|
|
builder.onTx = (tx) => {
|
|
txes.push(tx)
|
|
}
|
|
b(builder)
|
|
builder.createDoc(
|
|
core.class.PluginConfiguration,
|
|
core.space.Model,
|
|
{
|
|
pluginId: id,
|
|
transactions: txes.map((it) => it._id),
|
|
...config,
|
|
enabled:
|
|
config?.label === undefined ||
|
|
((config?.enabled ?? true) && (enabled.includes(id) || enabled.includes('*')) && !disabled.includes(id)),
|
|
beta: config?.beta ?? false
|
|
},
|
|
('plugin-configuration-' + id) as Ref<PluginConfiguration>
|
|
)
|
|
builder.onTx = undefined
|
|
}
|
|
|
|
builder.createDoc(core.class.Version, core.space.Model, getModelVersion(), core.version.Model)
|
|
return builder
|
|
}
|
|
|
|
// Export upgrade procedures
|
|
export { migrateOperations } from './migration'
|