markscript-core
Version:
A library for building JavaScript or TypeScript projects with MarkLogic.
117 lines (112 loc) • 5.54 kB
text/typescript
import * as s from 'typescript-schema'
import {BuildModelPlugin, BuildModelPersistance} from './build'
import {Runtime} from './coreRuntime'
import * as d from './deployer'
export const coreBuildPlugin:BuildModelPlugin<MarkScript.BuildConfig, MarkScript.BuildModel> = {
generate: function(buildModel: MarkScript.BuildModel, buildConfig: MarkScript.BuildConfig): MarkScript.BuildModel {
return buildModel
},
jsonify: function(buildModel: MarkScript.BuildModel, buildConfig: MarkScript.BuildConfig, pkgDir?:string, buildTypeModel?: s.KeyValue<s.reflective.Module>, runtimeTypeModel?: s.KeyValue<s.reflective.Module>, buildModelPersistance?: BuildModelPersistance): any {
let serialisable: any = {
databases: buildModel.databases,
servers: buildModel.servers,
ruleSets: buildModel.ruleSets,
tasks: buildModel.tasks,
alerts: buildModel.alerts,
contentDatabase: buildModel.contentDatabase,
modulesDatabase: buildModel.modulesDatabase,
securityDatabase: buildModel.securityDatabase,
schemaDatabase: buildModel.schemaDatabase,
triggersDatabase: buildModel.triggersDatabase
}
if (buildModelPersistance === BuildModelPersistance.ALL) {
serialisable.modules = buildModel.modules
serialisable.extensions = buildModel.extensions
} else {
serialisable.modules = {}
serialisable.extensions = {}
Object.keys(buildModel.modules).forEach(function(name) {
serialisable.modules[name] = { name: name, code: '' }
})
Object.keys(buildModel.extensions).forEach(function(name) {
serialisable.extensions[name] = { name: name, code: '' }
})
}
return serialisable
},
dejsonify: function(serialisable:any) {
return <MarkScript.BuildModel> {
databases: serialisable.databases,
servers: serialisable.servers,
ruleSets: serialisable.ruleSets,
modules: serialisable.modules,
extensions: serialisable.extensions,
tasks: serialisable.tasks,
alerts: serialisable.alerts,
contentDatabase: serialisable.contentDatabase,
modulesDatabase: serialisable.modulesDatabase,
securityDatabase: serialisable.securityDatabase,
schemaDatabase: serialisable.schemaDatabase,
triggersDatabase: serialisable.triggersDatabase
}
},
tasks: {
create: {
execute: function(buildModel: MarkScript.BuildModel, buildConfig: MarkScript.BuildConfig, server: Runtime) {
let configClient = server.getClient(buildConfig.databaseConnection.configPort || 8002)
return d.deploy(configClient, new d.StandardDeployer(), d.IF_EXISTS.clear, buildModel)
},
requiresFreshModel: true,
description: 'Create the MarkLogic HTTP server and databases defined by the database model'
},
delete: {
execute: function(buildModel: MarkScript.BuildModel, buildConfig: MarkScript.BuildConfig, server: Runtime) {
let configClient = server.getClient(buildConfig.databaseConnection.configPort || 8002)
return d.undeploy(configClient, new d.StandardDeployer(), buildModel)
},
description: 'Delete the previously created MarkLogic HTTP server and databases defined by the database model'
},
deploy : {
execute: function(buildModel: MarkScript.BuildModel, buildConfig: MarkScript.BuildConfig, server: Runtime) {
let adminClient = server.getClient(buildConfig.databaseConnection.adminPort || 8001)
let configClient = server.getClient(buildConfig.databaseConnection.configPort || 8002)
return d.deployAssets(adminClient, configClient, function(database) {
return server.getClient(database)
}, new d.StandardAssetDeployer(), buildModel, buildModel)
},
requiresFreshModel:true,
description: 'Deploy the assets (modules, extensions, alerts, etc.) to the MarkLogic HTTP server and databases'
},
undeploy: {
execute: function(buildModel: MarkScript.BuildModel, buildConfig: MarkScript.BuildConfig, server: Runtime) {
let client = server.getClient(buildConfig.databaseConnection.httpPort || 8000)
return d.undeployAssets(client, new d.StandardDeployer(), buildModel)
},
description: 'Remove the previously deployed assets (modules, extensions, alerts, etc.) to the MarkLogic HTTP server and databases'
},
build: {
execute: function(buildModel: MarkScript.BuildModel, buildConfig: MarkScript.BuildConfig, server: Runtime) {
return coreBuildPlugin.tasks['create'].execute(buildModel, buildConfig, server).then(function(){
return coreBuildPlugin.tasks['deploy'].execute(buildModel, buildConfig, server)
})
},
description: 'Create then deploy'
},
redeploy: {
execute: function(buildModel: MarkScript.BuildModel, buildConfig: MarkScript.BuildConfig, server: Runtime) {
return coreBuildPlugin.tasks['undeploy'].execute(buildModel, buildConfig, server).then(function(){
return coreBuildPlugin.tasks['deploy'].execute(buildModel, buildConfig, server)
})
},
description: 'Undeploy then deploy'
},
rebuild: {
execute: function(buildModel: MarkScript.BuildModel, buildConfig: MarkScript.BuildConfig, server: Runtime) {
return coreBuildPlugin.tasks['delete'].execute(buildModel, buildConfig, server).then(function(){
return coreBuildPlugin.tasks['build'].execute(buildModel, buildConfig, server)
})
},
description: 'Delete then build'
}
}
}