close source and testing.
Example
let {Schema,Plugin}=require("schema-driver");
new Schema({
properties:{
billing_address:{
type:"string"
}
},
title:"address-schema",
type:"object"
},true);
new Schema({
properties:{
address:{
$ref:"%addressSchema%"
},
job:{
type:"string"
},
name:{
type:"string"
}
},
title:"user-schema",
type:"object"
},true);
const ResponseSchema=new Schema({
properties:{
code:{
type:"string"
},
message:{
type:"string"
},
result:{
$ref:"%userSchema%"
}
},
type:"object"
});
const data=ResponseSchema.mould({
code:"0001",
message:"success",
result:{
address:{
billing_address:"555 Debtor's Lane"
},
job:"artist",
name:"Van"
}
},{
variables:{
addressSchema:"address-schema",
userSchema:"user-schema"
}
});
console.log(data);
console.log(JSON.stringify(new Schema({
properties:{
code:{
type:"string"
},
message:{
type:"string"
},
result:{
$ref:"user-schema"
}
},
type:"object",
}).compile({
variables:{
addressSchema:"address-schema",
userSchema:"user-schema"
}
}).mould({
code:"0001",
message:"success",
result:{
address:{
billing_address:"555 Debtor's Lane"
},
job:"artist",
name:"Van"
}
}),null,2));
ResponseSchema.pipeline({
code:"0001",
message:"success",
result:{
address:{
billing_address:"555 Debtor's Lane"
},
job:"artist",
name:"Van"
}
},{
variables:{
addressSchema:"address-schema",
userSchema:"user-schema"
}
},[Plugin.register("tmp-schema"),Plugin.ajv(),Plugin.mingo((resolve,reject,output,mingo)=>{
const agg=new mingo.Aggregator([
{'$project':{"address":"$result.address.billing_address"}},
]);
const newData=agg.run([output]);
return newData[0].address;
})]).then((output)=>{
console.log(output);
console.log(Schema.reference("tmp-schema"));
}).catch((e)=>console.error(e));