definition-generator-framework 2.0.5 → 2.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -36,7 +36,7 @@ ${i}`};this.ɗy.set(t,r);}};var ut=()=>u__default.default.string().custom(n=>({t
36
36
 
37
37
  `,a=t.message.indexOf(`
38
38
  `,t.message.indexOf("Execution history"))+1,p=t.message.slice(0,a)+s+t.message.slice(a);return {description:e.customMessage?e.customMessage+`
39
- `+p:p,location:this.ɗba.getLocationOfDefinition(t.location.scriptId,t.location.path)}}else throw t}};var Ee=u__default.default.string().custom(n=>({type:"command",value:n})),Le=u__default.default.object().keys({runScript:u__default.default.string().reference(exports.ScriptComponent).required()}).custom(n=>({type:"runScript",value:n.runScript})),qt=()=>u__default.default.array().items(u__default.default.alternatives().conditional(u__default.default.string(),{then:Ee}).conditional(u__default.default.object({runScript:u__default.default.exist()}).unknown(),{then:Le}).error(n=>n.map(t=>{if(t.code==="alternatives.any"){let e="command, runScript";t.message=`${t.local.label} does not match any of the allowed types: ${e}`;}return t}))).min(1);exports.ScriptTestComponent=class F extends g{async process(t,e){let i=m.getDefinitions(exports.ScriptComponent),r=new M(i,h.scriptSimulatorFunctionsConstructor,this.ɗan()),o=t.map(c=>({cases:c.cases,setup:c.setup,script:m.getDefinitionOrFail(exports.ScriptComponent,c.script),scriptInput:h.getScriptInput(c.script),testDefinitionRef:c})),s=h.getCustomScriptTestCases().map(c=>({cases:c.testDefinition.cases,setup:[],script:m.getDefinitionOrFail(exports.ScriptComponent,c.testDefinition.script),scriptInput:h.getScriptInput(c.testDefinition.script),testDefinitionRef:c.testDefinition,customMessage:c.customMessage})),a=o.concat(s),p=r.runTests(a,e);r.printErrors(p,e);}ɗan(){return {getLocationOfDefinition:(t,e)=>m.getLocationInFileById(exports.ScriptComponent,t,e),getLocationOfTestDefinition:(t,e)=>{if(h.isCustomScriptTestCase(t)){let i=`Internal error: custom script test case is failing. Definition: ${JSON.stringify(t)}, Path: ${JSON.stringify(e)}`;throw new Error(i)}else return m.getLocationInFile(exports.ScriptTestComponent,t,e)}}}};exports.ScriptTestComponent=w([T({componentName:"SCRIPT-TEST",validationSchema:u__default.default.object().keys({script:u__default.default.string().reference(exports.ScriptComponent).required(),setup:qt().default([]).optional(),cases:u__default.default.array().items(u__default.default.object().keys({actionsBeforeTesting:qt().default([]).optional()}).required()).required()}).required()})],exports.ScriptTestComponent);var Pe=u__default.default.object().keys({jumpTo:u__default.default.string().lazyReference("EVENT").required()}).custom(n=>({type:"jumpTo",value:n.jumpTo})),yt="EventActionsSchema",Ie=()=>u__default.default.array().items(u__default.default.alternatives().conditional(u__default.default.string(),{then:ut()}).conditional(u__default.default.object({jumpTo:u__default.default.exist()}).unknown(),{then:Pe}).conditional(u__default.default.object({branchByChance:u__default.default.exist()}).unknown(),{then:gt(yt)}).conditional(u__default.default.object({branchByCondition:u__default.default.exist()}).unknown(),{then:ht(yt)}).conditional(u__default.default.object({branchByPlayerChoice:u__default.default.exist()}).unknown(),{then:Bt(yt)}).conditional(u__default.default.object().min(1).max(1).unknown(),{then:Ht()}).error(n=>n.map(t=>{if(t.code==="alternatives.any"){let e="command, jumpTo, branchByCondition, branchByPlayerChoice, branchByChance";t.message=`${t.local.label} does not match any of the allowed types: ${e}`;}return t}))).id(yt);exports.EventComponent=class x extends g{async process(t,e){await e.addFile({path:"/_premade/script-engine-definitions/events.ts",preText:'import { ScriptDefinition } from "script-engine-lib";',variableName:"EventDefinitions",variableType:"Readonly<Record<string, ScriptDefinition>>",variable:helpersLib.JsonHelper.arrayToObject(t,"id")});}};exports.EventComponent=w([T({componentName:"EVENT",keyName:"id",validationSchema:u__default.default.object().keys({id:u__default.default.string().unique(It).required(),actions:Ie().min(1).required()}).required()})],exports.EventComponent);var Re=u__default.default.string().custom(n=>({type:"command",value:n})),Fe=u__default.default.object().keys({runEvent:u__default.default.string().reference(exports.EventComponent).required()}).custom(n=>({type:"runScript",value:n.runEvent})),zt=()=>u__default.default.array().items(u__default.default.alternatives().conditional(u__default.default.string(),{then:Re}).conditional(u__default.default.object({runEvent:u__default.default.exist()}).unknown(),{then:Fe}).error(n=>n.map(t=>{if(t.code==="alternatives.any"){let e="command, runEvent";t.message=`${t.local.label} does not match any of the allowed types: ${e}`;}return t}))).min(1);exports.EventTestComponent=class O extends g{async process(t,e){let i=m.getDefinitions(exports.EventComponent),r=new M(i,h.eventSimulatorFunctionsConstructor,this.ɗan()),o=r.runTests(t.map(s=>({cases:s.cases,setup:s.setup,script:m.getDefinitionOrFail(exports.EventComponent,s.script),scriptInput:h.getEventInput(s.script),testDefinitionRef:s})),e);r.printErrors(o,e);}ɗan(){return {getLocationOfDefinition:(t,e)=>m.getLocationInFileById(exports.EventComponent,t,e),getLocationOfTestDefinition:(t,e)=>m.getLocationInFile(exports.EventTestComponent,t,e)}}};exports.EventTestComponent=w([T({componentName:"EVENT-TEST",validationSchema:u__default.default.object().keys({event:u__default.default.string().reference(exports.EventComponent).required(),setup:zt().default([]).optional(),cases:u__default.default.array().items(u__default.default.object().keys({actionsBeforeTesting:zt().default([]).optional()}).required()).required()}).required().custom(n=>({...n,script:n.event}))})],exports.EventTestComponent);var _t=false;function Oe(n){return function(t){if(_t)console.error("There can be only one definition generator!");else {_t=true;let e=[...n.modules];h.isInitialized&&(e=[exports.ScriptComponent,exports.EventComponent,...e,exports.ScriptTestComponent,exports.EventTestComponent]),ft.process(e,n.indexFilePretext,n.outputIndexFile);}}}var Rt=class{};var Ft=()=>u__default.default.array().items(u__default.default.array().items(Ut().required()).min(3).required()).min(1),Ut=()=>u__default.default.object().keys({x:u__default.default.number().required(),y:u__default.default.number().required()}),je=()=>u__default.default.string().pattern(/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/).custom(n=>helpersLib.ColorHelper.stringColorToRGBColor(n)),ke=()=>u__default.default.number().min(-Math.PI).max(Math.PI),Je=(n,t)=>u__default.default.array().items(n).max(t).custom(e=>{if(e.length>t)throw new Error(`Array exceeds maximum size of ${t}`);for(;e.length<t;)e.push(void 0);return e}).default(helpersLib.ArrayHelper.createEmptyArray(t)).optional();exports.SpriteComponent=class $ extends g{async process(t,e){await e.addFile({path:"/_premade/assets/sprites.ts",preText:"import { AssetDefinition } from 'bard-legends-framework';",variableName:"SpriteAssets",variableType:"readonly AssetDefinition[]",assetUrl:"url",variable:t.map(i=>({id:i.id,url:i.url.url}))}),await e.addFile({path:"/_premade/asset-definitions/sprites.ts",preText:'import { SpriteDefinition } from "bard-legends-framework";',variableName:"SpriteDefinitions",variableType:"Readonly<Record<string, SpriteDefinition>>",variable:helpersLib.JsonHelper.arrayToObject(t,"id",{transformFunction:i=>({id:i.id,size:i.url.size,scale:i.scale,anchor:i.anchor,boundingShapes:i.boundingShapes})})});}};exports.SpriteComponent=w([T({componentName:"SPRITE",keyName:"id",validationSchema:u__default.default.object().keys({id:u__default.default.string().required(),url:u__default.default.string().sprite().required(),scale:u__default.default.number().min(.1).max(1).default(1).optional(),anchor:u__default.default.object().keys({x:u__default.default.number().min(0).max(1).required(),y:u__default.default.number().min(0).max(1).required()}).default({x:.5,y:.5}).optional(),boundingShapes:Ft().optional()}).positionOnSprite({selectSpriteDefinition:n=>n,positionsJsonPath:["$..boundingShapes[*][*]"],includeRotationFromAnchor:false}).required()})],exports.SpriteComponent);var Ae=()=>u__default.default.string().reference(exports.SpriteComponent).custom(n=>{let t=m.getDefinitionOrFail(exports.SpriteComponent,n);if(t.url.size.x%4!==0)throw new Error(`Sprite width must be multiplier of four in order to keep the pixel perfection. Got: '${t.url.size.x}'`);if(t.url.size.y%4!==0)throw new Error(`Sprite height must be multiplier of four in order to keep the pixel perfection. Got: '${t.url.size.y}'`);return n}),Be=n=>u__default.default.string().reference(exports.SpriteComponent).custom(t=>{let e=m.getDefinitionOrFail(exports.SpriteComponent,t);if(n?.size){if(e.url.size.x!==n.size.x)throw new Error(`Sprite width must be '${n.size.x}px'. Got: '${e.url.size.x}'`);if(e.url.size.y!==n.size.y)throw new Error(`Sprite height must be '${n.size.y}px'. Got: '${e.url.size.y}'`)}if(n?.scale&&e.scale!==n.scale)throw new Error(`Sprite '${t}' scale must be '${n.scale}'. Got: '${e.scale}'`);return t});exports.SpriteGroupComponent=class z extends g{async process(t,e){await e.addFile({path:"/_premade/asset-definitions/sprite-groups.ts",preText:"",variableName:"SpriteGroupDefinitions",variableType:"Readonly<Record<string, readonly string[]>>",variable:helpersLib.JsonHelper.arrayToObject(t,"id",{transformFunction:i=>i.group})});}};exports.SpriteGroupComponent=w([T({componentName:"SPRITE-GROUP",keyName:"id",validationSchema:u__default.default.object().keys({id:u__default.default.string().required(),group:u__default.default.array().items(u__default.default.string().reference(exports.SpriteComponent)).unique().required()}).required()})],exports.SpriteGroupComponent);var ze=`
39
+ `+p:p,location:this.ɗba.getLocationOfDefinition(t.location.scriptId,t.location.path)}}else throw t}};var Ee=u__default.default.string().custom(n=>({type:"command",value:n})),Le=u__default.default.object().keys({runScript:u__default.default.string().reference(exports.ScriptComponent).required()}).custom(n=>({type:"runScript",value:n.runScript})),qt=()=>u__default.default.array().items(u__default.default.alternatives().conditional(u__default.default.string(),{then:Ee}).conditional(u__default.default.object({runScript:u__default.default.exist()}).unknown(),{then:Le}).error(n=>n.map(t=>{if(t.code==="alternatives.any"){let e="command, runScript";t.message=`${t.local.label} does not match any of the allowed types: ${e}`;}return t}))).min(1);exports.ScriptTestComponent=class F extends g{async process(t,e){let i=m.getDefinitions(exports.ScriptComponent),r=new M(i,h.scriptSimulatorFunctionsConstructor,this.ɗan()),o=t.map(c=>({cases:c.cases,setup:c.setup,script:m.getDefinitionOrFail(exports.ScriptComponent,c.script),scriptInput:h.getScriptInput(c.script),testDefinitionRef:c})),s=h.getCustomScriptTestCases().map(c=>({cases:c.testDefinition.cases,setup:[],script:m.getDefinitionOrFail(exports.ScriptComponent,c.testDefinition.script),scriptInput:h.getScriptInput(c.testDefinition.script),testDefinitionRef:c.testDefinition,customMessage:c.customMessage})),a=o.concat(s),p=r.runTests(a,e);r.printErrors(p,e);}ɗan(){return {getLocationOfDefinition:(t,e)=>m.getLocationInFileById(exports.ScriptComponent,t,e),getLocationOfTestDefinition:(t,e)=>{if(h.isCustomScriptTestCase(t)){let i=`Internal error: custom script test case is failing. Definition: ${JSON.stringify(t)}, Path: ${JSON.stringify(e)}`;throw new Error(i)}else return m.getLocationInFile(exports.ScriptTestComponent,t,e)}}}};exports.ScriptTestComponent=w([T({componentName:"SCRIPT-TEST",validationSchema:u__default.default.object().keys({script:u__default.default.string().reference(exports.ScriptComponent).required(),setup:qt().default([]).optional(),cases:u__default.default.array().items(u__default.default.object().keys({actionsBeforeTesting:qt().default([]).optional()}).required()).required()}).required()})],exports.ScriptTestComponent);var Pe=u__default.default.object().keys({jumpTo:u__default.default.string().lazyReference("EVENT").required()}).custom(n=>({type:"jumpTo",value:n.jumpTo})),yt="EventActionsSchema",Ie=()=>u__default.default.array().items(u__default.default.alternatives().conditional(u__default.default.string(),{then:ut()}).conditional(u__default.default.object({jumpTo:u__default.default.exist()}).unknown(),{then:Pe}).conditional(u__default.default.object({branchByChance:u__default.default.exist()}).unknown(),{then:gt(yt)}).conditional(u__default.default.object({branchByCondition:u__default.default.exist()}).unknown(),{then:ht(yt)}).conditional(u__default.default.object({branchByPlayerChoice:u__default.default.exist()}).unknown(),{then:Bt(yt)}).conditional(u__default.default.object().min(1).max(1).unknown(),{then:Ht()}).error(n=>n.map(t=>{if(t.code==="alternatives.any"){let e="command, jumpTo, branchByCondition, branchByPlayerChoice, branchByChance";t.message=`${t.local.label} does not match any of the allowed types: ${e}`;}return t}))).id(yt);exports.EventComponent=class x extends g{async process(t,e){await e.addFile({path:"/_premade/script-engine-definitions/events.ts",preText:'import { ScriptDefinition } from "script-engine-lib";',variableName:"EventDefinitions",variableType:"Readonly<Record<string, ScriptDefinition>>",variable:helpersLib.JsonHelper.arrayToObject(t,"id")});}};exports.EventComponent=w([T({componentName:"EVENT",keyName:"id",validationSchema:u__default.default.object().keys({id:u__default.default.string().unique(It).required(),actions:Ie().default([]).optional()}).required()})],exports.EventComponent);var Re=u__default.default.string().custom(n=>({type:"command",value:n})),Fe=u__default.default.object().keys({runEvent:u__default.default.string().reference(exports.EventComponent).required()}).custom(n=>({type:"runScript",value:n.runEvent})),zt=()=>u__default.default.array().items(u__default.default.alternatives().conditional(u__default.default.string(),{then:Re}).conditional(u__default.default.object({runEvent:u__default.default.exist()}).unknown(),{then:Fe}).error(n=>n.map(t=>{if(t.code==="alternatives.any"){let e="command, runEvent";t.message=`${t.local.label} does not match any of the allowed types: ${e}`;}return t}))).min(1);exports.EventTestComponent=class O extends g{async process(t,e){let i=m.getDefinitions(exports.EventComponent),r=new M(i,h.eventSimulatorFunctionsConstructor,this.ɗan()),o=r.runTests(t.map(s=>({cases:s.cases,setup:s.setup,script:m.getDefinitionOrFail(exports.EventComponent,s.script),scriptInput:h.getEventInput(s.script),testDefinitionRef:s})),e);r.printErrors(o,e);}ɗan(){return {getLocationOfDefinition:(t,e)=>m.getLocationInFileById(exports.EventComponent,t,e),getLocationOfTestDefinition:(t,e)=>m.getLocationInFile(exports.EventTestComponent,t,e)}}};exports.EventTestComponent=w([T({componentName:"EVENT-TEST",validationSchema:u__default.default.object().keys({event:u__default.default.string().reference(exports.EventComponent).required(),setup:zt().default([]).optional(),cases:u__default.default.array().items(u__default.default.object().keys({actionsBeforeTesting:zt().default([]).optional()}).required()).required()}).required().custom(n=>({...n,script:n.event}))})],exports.EventTestComponent);var _t=false;function Oe(n){return function(t){if(_t)console.error("There can be only one definition generator!");else {_t=true;let e=[...n.modules];h.isInitialized&&(e=[exports.ScriptComponent,exports.EventComponent,...e,exports.ScriptTestComponent,exports.EventTestComponent]),ft.process(e,n.indexFilePretext,n.outputIndexFile);}}}var Rt=class{};var Ft=()=>u__default.default.array().items(u__default.default.array().items(Ut().required()).min(3).required()).min(1),Ut=()=>u__default.default.object().keys({x:u__default.default.number().required(),y:u__default.default.number().required()}),je=()=>u__default.default.string().pattern(/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/).custom(n=>helpersLib.ColorHelper.stringColorToRGBColor(n)),ke=()=>u__default.default.number().min(-Math.PI).max(Math.PI),Je=(n,t)=>u__default.default.array().items(n).max(t).custom(e=>{if(e.length>t)throw new Error(`Array exceeds maximum size of ${t}`);for(;e.length<t;)e.push(void 0);return e}).default(helpersLib.ArrayHelper.createEmptyArray(t)).optional();exports.SpriteComponent=class $ extends g{async process(t,e){await e.addFile({path:"/_premade/assets/sprites.ts",preText:"import { AssetDefinition } from 'bard-legends-framework';",variableName:"SpriteAssets",variableType:"readonly AssetDefinition[]",assetUrl:"url",variable:t.map(i=>({id:i.id,url:i.url.url}))}),await e.addFile({path:"/_premade/asset-definitions/sprites.ts",preText:'import { SpriteDefinition } from "bard-legends-framework";',variableName:"SpriteDefinitions",variableType:"Readonly<Record<string, SpriteDefinition>>",variable:helpersLib.JsonHelper.arrayToObject(t,"id",{transformFunction:i=>({id:i.id,size:i.url.size,scale:i.scale,anchor:i.anchor,boundingShapes:i.boundingShapes})})});}};exports.SpriteComponent=w([T({componentName:"SPRITE",keyName:"id",validationSchema:u__default.default.object().keys({id:u__default.default.string().required(),url:u__default.default.string().sprite().required(),scale:u__default.default.number().min(.1).max(1).default(1).optional(),anchor:u__default.default.object().keys({x:u__default.default.number().min(0).max(1).required(),y:u__default.default.number().min(0).max(1).required()}).default({x:.5,y:.5}).optional(),boundingShapes:Ft().optional()}).positionOnSprite({selectSpriteDefinition:n=>n,positionsJsonPath:["$..boundingShapes[*][*]"],includeRotationFromAnchor:false}).required()})],exports.SpriteComponent);var Ae=()=>u__default.default.string().reference(exports.SpriteComponent).custom(n=>{let t=m.getDefinitionOrFail(exports.SpriteComponent,n);if(t.url.size.x%4!==0)throw new Error(`Sprite width must be multiplier of four in order to keep the pixel perfection. Got: '${t.url.size.x}'`);if(t.url.size.y%4!==0)throw new Error(`Sprite height must be multiplier of four in order to keep the pixel perfection. Got: '${t.url.size.y}'`);return n}),Be=n=>u__default.default.string().reference(exports.SpriteComponent).custom(t=>{let e=m.getDefinitionOrFail(exports.SpriteComponent,t);if(n?.size){if(e.url.size.x!==n.size.x)throw new Error(`Sprite width must be '${n.size.x}px'. Got: '${e.url.size.x}'`);if(e.url.size.y!==n.size.y)throw new Error(`Sprite height must be '${n.size.y}px'. Got: '${e.url.size.y}'`)}if(n?.scale&&e.scale!==n.scale)throw new Error(`Sprite '${t}' scale must be '${n.scale}'. Got: '${e.scale}'`);return t});exports.SpriteGroupComponent=class z extends g{async process(t,e){await e.addFile({path:"/_premade/asset-definitions/sprite-groups.ts",preText:"",variableName:"SpriteGroupDefinitions",variableType:"Readonly<Record<string, readonly string[]>>",variable:helpersLib.JsonHelper.arrayToObject(t,"id",{transformFunction:i=>i.group})});}};exports.SpriteGroupComponent=w([T({componentName:"SPRITE-GROUP",keyName:"id",validationSchema:u__default.default.object().keys({id:u__default.default.string().required(),group:u__default.default.array().items(u__default.default.string().reference(exports.SpriteComponent)).unique().required()}).required()})],exports.SpriteGroupComponent);var ze=`
40
40
  export interface FontDefinition {
41
41
  readonly id: string;
42
42
  readonly fontFamily: string;
package/dist/index.mjs CHANGED
@@ -36,7 +36,7 @@ ${i}`};this.ɗy.set(t,r);}};var ut=()=>u.string().custom(n=>({type:"command",val
36
36
 
37
37
  `,a=t.message.indexOf(`
38
38
  `,t.message.indexOf("Execution history"))+1,p=t.message.slice(0,a)+s+t.message.slice(a);return {description:e.customMessage?e.customMessage+`
39
- `+p:p,location:this.ɗba.getLocationOfDefinition(t.location.scriptId,t.location.path)}}else throw t}};var Ee=u.string().custom(n=>({type:"command",value:n})),Le=u.object().keys({runScript:u.string().reference(v).required()}).custom(n=>({type:"runScript",value:n.runScript})),qt=()=>u.array().items(u.alternatives().conditional(u.string(),{then:Ee}).conditional(u.object({runScript:u.exist()}).unknown(),{then:Le}).error(n=>n.map(t=>{if(t.code==="alternatives.any"){let e="command, runScript";t.message=`${t.local.label} does not match any of the allowed types: ${e}`;}return t}))).min(1),F=class extends g{async process(t,e){let i=m.getDefinitions(v),r=new M(i,h.scriptSimulatorFunctionsConstructor,this.ɗan()),o=t.map(c=>({cases:c.cases,setup:c.setup,script:m.getDefinitionOrFail(v,c.script),scriptInput:h.getScriptInput(c.script),testDefinitionRef:c})),s=h.getCustomScriptTestCases().map(c=>({cases:c.testDefinition.cases,setup:[],script:m.getDefinitionOrFail(v,c.testDefinition.script),scriptInput:h.getScriptInput(c.testDefinition.script),testDefinitionRef:c.testDefinition,customMessage:c.customMessage})),a=o.concat(s),p=r.runTests(a,e);r.printErrors(p,e);}ɗan(){return {getLocationOfDefinition:(t,e)=>m.getLocationInFileById(v,t,e),getLocationOfTestDefinition:(t,e)=>{if(h.isCustomScriptTestCase(t)){let i=`Internal error: custom script test case is failing. Definition: ${JSON.stringify(t)}, Path: ${JSON.stringify(e)}`;throw new Error(i)}else return m.getLocationInFile(F,t,e)}}}};F=w([T({componentName:"SCRIPT-TEST",validationSchema:u.object().keys({script:u.string().reference(v).required(),setup:qt().default([]).optional(),cases:u.array().items(u.object().keys({actionsBeforeTesting:qt().default([]).optional()}).required()).required()}).required()})],F);var Pe=u.object().keys({jumpTo:u.string().lazyReference("EVENT").required()}).custom(n=>({type:"jumpTo",value:n.jumpTo})),yt="EventActionsSchema",Ie=()=>u.array().items(u.alternatives().conditional(u.string(),{then:ut()}).conditional(u.object({jumpTo:u.exist()}).unknown(),{then:Pe}).conditional(u.object({branchByChance:u.exist()}).unknown(),{then:gt(yt)}).conditional(u.object({branchByCondition:u.exist()}).unknown(),{then:ht(yt)}).conditional(u.object({branchByPlayerChoice:u.exist()}).unknown(),{then:Bt(yt)}).conditional(u.object().min(1).max(1).unknown(),{then:Ht()}).error(n=>n.map(t=>{if(t.code==="alternatives.any"){let e="command, jumpTo, branchByCondition, branchByPlayerChoice, branchByChance";t.message=`${t.local.label} does not match any of the allowed types: ${e}`;}return t}))).id(yt),x=class extends g{async process(t,e){await e.addFile({path:"/_premade/script-engine-definitions/events.ts",preText:'import { ScriptDefinition } from "script-engine-lib";',variableName:"EventDefinitions",variableType:"Readonly<Record<string, ScriptDefinition>>",variable:JsonHelper.arrayToObject(t,"id")});}};x=w([T({componentName:"EVENT",keyName:"id",validationSchema:u.object().keys({id:u.string().unique(It).required(),actions:Ie().min(1).required()}).required()})],x);var Re=u.string().custom(n=>({type:"command",value:n})),Fe=u.object().keys({runEvent:u.string().reference(x).required()}).custom(n=>({type:"runScript",value:n.runEvent})),zt=()=>u.array().items(u.alternatives().conditional(u.string(),{then:Re}).conditional(u.object({runEvent:u.exist()}).unknown(),{then:Fe}).error(n=>n.map(t=>{if(t.code==="alternatives.any"){let e="command, runEvent";t.message=`${t.local.label} does not match any of the allowed types: ${e}`;}return t}))).min(1),O=class extends g{async process(t,e){let i=m.getDefinitions(x),r=new M(i,h.eventSimulatorFunctionsConstructor,this.ɗan()),o=r.runTests(t.map(s=>({cases:s.cases,setup:s.setup,script:m.getDefinitionOrFail(x,s.script),scriptInput:h.getEventInput(s.script),testDefinitionRef:s})),e);r.printErrors(o,e);}ɗan(){return {getLocationOfDefinition:(t,e)=>m.getLocationInFileById(x,t,e),getLocationOfTestDefinition:(t,e)=>m.getLocationInFile(O,t,e)}}};O=w([T({componentName:"EVENT-TEST",validationSchema:u.object().keys({event:u.string().reference(x).required(),setup:zt().default([]).optional(),cases:u.array().items(u.object().keys({actionsBeforeTesting:zt().default([]).optional()}).required()).required()}).required().custom(n=>({...n,script:n.event}))})],O);var _t=false;function Oe(n){return function(t){if(_t)console.error("There can be only one definition generator!");else {_t=true;let e=[...n.modules];h.isInitialized&&(e=[v,x,...e,F,O]),ft.process(e,n.indexFilePretext,n.outputIndexFile);}}}var Rt=class{};var Ft=()=>u.array().items(u.array().items(Ut().required()).min(3).required()).min(1),Ut=()=>u.object().keys({x:u.number().required(),y:u.number().required()}),je=()=>u.string().pattern(/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/).custom(n=>ColorHelper.stringColorToRGBColor(n)),ke=()=>u.number().min(-Math.PI).max(Math.PI),Je=(n,t)=>u.array().items(n).max(t).custom(e=>{if(e.length>t)throw new Error(`Array exceeds maximum size of ${t}`);for(;e.length<t;)e.push(void 0);return e}).default(ArrayHelper.createEmptyArray(t)).optional();var $=class extends g{async process(t,e){await e.addFile({path:"/_premade/assets/sprites.ts",preText:"import { AssetDefinition } from 'bard-legends-framework';",variableName:"SpriteAssets",variableType:"readonly AssetDefinition[]",assetUrl:"url",variable:t.map(i=>({id:i.id,url:i.url.url}))}),await e.addFile({path:"/_premade/asset-definitions/sprites.ts",preText:'import { SpriteDefinition } from "bard-legends-framework";',variableName:"SpriteDefinitions",variableType:"Readonly<Record<string, SpriteDefinition>>",variable:JsonHelper.arrayToObject(t,"id",{transformFunction:i=>({id:i.id,size:i.url.size,scale:i.scale,anchor:i.anchor,boundingShapes:i.boundingShapes})})});}};$=w([T({componentName:"SPRITE",keyName:"id",validationSchema:u.object().keys({id:u.string().required(),url:u.string().sprite().required(),scale:u.number().min(.1).max(1).default(1).optional(),anchor:u.object().keys({x:u.number().min(0).max(1).required(),y:u.number().min(0).max(1).required()}).default({x:.5,y:.5}).optional(),boundingShapes:Ft().optional()}).positionOnSprite({selectSpriteDefinition:n=>n,positionsJsonPath:["$..boundingShapes[*][*]"],includeRotationFromAnchor:false}).required()})],$);var Ae=()=>u.string().reference($).custom(n=>{let t=m.getDefinitionOrFail($,n);if(t.url.size.x%4!==0)throw new Error(`Sprite width must be multiplier of four in order to keep the pixel perfection. Got: '${t.url.size.x}'`);if(t.url.size.y%4!==0)throw new Error(`Sprite height must be multiplier of four in order to keep the pixel perfection. Got: '${t.url.size.y}'`);return n}),Be=n=>u.string().reference($).custom(t=>{let e=m.getDefinitionOrFail($,t);if(n?.size){if(e.url.size.x!==n.size.x)throw new Error(`Sprite width must be '${n.size.x}px'. Got: '${e.url.size.x}'`);if(e.url.size.y!==n.size.y)throw new Error(`Sprite height must be '${n.size.y}px'. Got: '${e.url.size.y}'`)}if(n?.scale&&e.scale!==n.scale)throw new Error(`Sprite '${t}' scale must be '${n.scale}'. Got: '${e.scale}'`);return t});var z=class extends g{async process(t,e){await e.addFile({path:"/_premade/asset-definitions/sprite-groups.ts",preText:"",variableName:"SpriteGroupDefinitions",variableType:"Readonly<Record<string, readonly string[]>>",variable:JsonHelper.arrayToObject(t,"id",{transformFunction:i=>i.group})});}};z=w([T({componentName:"SPRITE-GROUP",keyName:"id",validationSchema:u.object().keys({id:u.string().required(),group:u.array().items(u.string().reference($)).unique().required()}).required()})],z);var ze=`
39
+ `+p:p,location:this.ɗba.getLocationOfDefinition(t.location.scriptId,t.location.path)}}else throw t}};var Ee=u.string().custom(n=>({type:"command",value:n})),Le=u.object().keys({runScript:u.string().reference(v).required()}).custom(n=>({type:"runScript",value:n.runScript})),qt=()=>u.array().items(u.alternatives().conditional(u.string(),{then:Ee}).conditional(u.object({runScript:u.exist()}).unknown(),{then:Le}).error(n=>n.map(t=>{if(t.code==="alternatives.any"){let e="command, runScript";t.message=`${t.local.label} does not match any of the allowed types: ${e}`;}return t}))).min(1),F=class extends g{async process(t,e){let i=m.getDefinitions(v),r=new M(i,h.scriptSimulatorFunctionsConstructor,this.ɗan()),o=t.map(c=>({cases:c.cases,setup:c.setup,script:m.getDefinitionOrFail(v,c.script),scriptInput:h.getScriptInput(c.script),testDefinitionRef:c})),s=h.getCustomScriptTestCases().map(c=>({cases:c.testDefinition.cases,setup:[],script:m.getDefinitionOrFail(v,c.testDefinition.script),scriptInput:h.getScriptInput(c.testDefinition.script),testDefinitionRef:c.testDefinition,customMessage:c.customMessage})),a=o.concat(s),p=r.runTests(a,e);r.printErrors(p,e);}ɗan(){return {getLocationOfDefinition:(t,e)=>m.getLocationInFileById(v,t,e),getLocationOfTestDefinition:(t,e)=>{if(h.isCustomScriptTestCase(t)){let i=`Internal error: custom script test case is failing. Definition: ${JSON.stringify(t)}, Path: ${JSON.stringify(e)}`;throw new Error(i)}else return m.getLocationInFile(F,t,e)}}}};F=w([T({componentName:"SCRIPT-TEST",validationSchema:u.object().keys({script:u.string().reference(v).required(),setup:qt().default([]).optional(),cases:u.array().items(u.object().keys({actionsBeforeTesting:qt().default([]).optional()}).required()).required()}).required()})],F);var Pe=u.object().keys({jumpTo:u.string().lazyReference("EVENT").required()}).custom(n=>({type:"jumpTo",value:n.jumpTo})),yt="EventActionsSchema",Ie=()=>u.array().items(u.alternatives().conditional(u.string(),{then:ut()}).conditional(u.object({jumpTo:u.exist()}).unknown(),{then:Pe}).conditional(u.object({branchByChance:u.exist()}).unknown(),{then:gt(yt)}).conditional(u.object({branchByCondition:u.exist()}).unknown(),{then:ht(yt)}).conditional(u.object({branchByPlayerChoice:u.exist()}).unknown(),{then:Bt(yt)}).conditional(u.object().min(1).max(1).unknown(),{then:Ht()}).error(n=>n.map(t=>{if(t.code==="alternatives.any"){let e="command, jumpTo, branchByCondition, branchByPlayerChoice, branchByChance";t.message=`${t.local.label} does not match any of the allowed types: ${e}`;}return t}))).id(yt),x=class extends g{async process(t,e){await e.addFile({path:"/_premade/script-engine-definitions/events.ts",preText:'import { ScriptDefinition } from "script-engine-lib";',variableName:"EventDefinitions",variableType:"Readonly<Record<string, ScriptDefinition>>",variable:JsonHelper.arrayToObject(t,"id")});}};x=w([T({componentName:"EVENT",keyName:"id",validationSchema:u.object().keys({id:u.string().unique(It).required(),actions:Ie().default([]).optional()}).required()})],x);var Re=u.string().custom(n=>({type:"command",value:n})),Fe=u.object().keys({runEvent:u.string().reference(x).required()}).custom(n=>({type:"runScript",value:n.runEvent})),zt=()=>u.array().items(u.alternatives().conditional(u.string(),{then:Re}).conditional(u.object({runEvent:u.exist()}).unknown(),{then:Fe}).error(n=>n.map(t=>{if(t.code==="alternatives.any"){let e="command, runEvent";t.message=`${t.local.label} does not match any of the allowed types: ${e}`;}return t}))).min(1),O=class extends g{async process(t,e){let i=m.getDefinitions(x),r=new M(i,h.eventSimulatorFunctionsConstructor,this.ɗan()),o=r.runTests(t.map(s=>({cases:s.cases,setup:s.setup,script:m.getDefinitionOrFail(x,s.script),scriptInput:h.getEventInput(s.script),testDefinitionRef:s})),e);r.printErrors(o,e);}ɗan(){return {getLocationOfDefinition:(t,e)=>m.getLocationInFileById(x,t,e),getLocationOfTestDefinition:(t,e)=>m.getLocationInFile(O,t,e)}}};O=w([T({componentName:"EVENT-TEST",validationSchema:u.object().keys({event:u.string().reference(x).required(),setup:zt().default([]).optional(),cases:u.array().items(u.object().keys({actionsBeforeTesting:zt().default([]).optional()}).required()).required()}).required().custom(n=>({...n,script:n.event}))})],O);var _t=false;function Oe(n){return function(t){if(_t)console.error("There can be only one definition generator!");else {_t=true;let e=[...n.modules];h.isInitialized&&(e=[v,x,...e,F,O]),ft.process(e,n.indexFilePretext,n.outputIndexFile);}}}var Rt=class{};var Ft=()=>u.array().items(u.array().items(Ut().required()).min(3).required()).min(1),Ut=()=>u.object().keys({x:u.number().required(),y:u.number().required()}),je=()=>u.string().pattern(/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/).custom(n=>ColorHelper.stringColorToRGBColor(n)),ke=()=>u.number().min(-Math.PI).max(Math.PI),Je=(n,t)=>u.array().items(n).max(t).custom(e=>{if(e.length>t)throw new Error(`Array exceeds maximum size of ${t}`);for(;e.length<t;)e.push(void 0);return e}).default(ArrayHelper.createEmptyArray(t)).optional();var $=class extends g{async process(t,e){await e.addFile({path:"/_premade/assets/sprites.ts",preText:"import { AssetDefinition } from 'bard-legends-framework';",variableName:"SpriteAssets",variableType:"readonly AssetDefinition[]",assetUrl:"url",variable:t.map(i=>({id:i.id,url:i.url.url}))}),await e.addFile({path:"/_premade/asset-definitions/sprites.ts",preText:'import { SpriteDefinition } from "bard-legends-framework";',variableName:"SpriteDefinitions",variableType:"Readonly<Record<string, SpriteDefinition>>",variable:JsonHelper.arrayToObject(t,"id",{transformFunction:i=>({id:i.id,size:i.url.size,scale:i.scale,anchor:i.anchor,boundingShapes:i.boundingShapes})})});}};$=w([T({componentName:"SPRITE",keyName:"id",validationSchema:u.object().keys({id:u.string().required(),url:u.string().sprite().required(),scale:u.number().min(.1).max(1).default(1).optional(),anchor:u.object().keys({x:u.number().min(0).max(1).required(),y:u.number().min(0).max(1).required()}).default({x:.5,y:.5}).optional(),boundingShapes:Ft().optional()}).positionOnSprite({selectSpriteDefinition:n=>n,positionsJsonPath:["$..boundingShapes[*][*]"],includeRotationFromAnchor:false}).required()})],$);var Ae=()=>u.string().reference($).custom(n=>{let t=m.getDefinitionOrFail($,n);if(t.url.size.x%4!==0)throw new Error(`Sprite width must be multiplier of four in order to keep the pixel perfection. Got: '${t.url.size.x}'`);if(t.url.size.y%4!==0)throw new Error(`Sprite height must be multiplier of four in order to keep the pixel perfection. Got: '${t.url.size.y}'`);return n}),Be=n=>u.string().reference($).custom(t=>{let e=m.getDefinitionOrFail($,t);if(n?.size){if(e.url.size.x!==n.size.x)throw new Error(`Sprite width must be '${n.size.x}px'. Got: '${e.url.size.x}'`);if(e.url.size.y!==n.size.y)throw new Error(`Sprite height must be '${n.size.y}px'. Got: '${e.url.size.y}'`)}if(n?.scale&&e.scale!==n.scale)throw new Error(`Sprite '${t}' scale must be '${n.scale}'. Got: '${e.scale}'`);return t});var z=class extends g{async process(t,e){await e.addFile({path:"/_premade/asset-definitions/sprite-groups.ts",preText:"",variableName:"SpriteGroupDefinitions",variableType:"Readonly<Record<string, readonly string[]>>",variable:JsonHelper.arrayToObject(t,"id",{transformFunction:i=>i.group})});}};z=w([T({componentName:"SPRITE-GROUP",keyName:"id",validationSchema:u.object().keys({id:u.string().required(),group:u.array().items(u.string().reference($)).unique().required()}).required()})],z);var ze=`
40
40
  export interface FontDefinition {
41
41
  readonly id: string;
42
42
  readonly fontFamily: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "definition-generator-framework",
3
- "version": "2.0.5",
3
+ "version": "2.0.6",
4
4
  "description": "Definition Generator Framework",
5
5
  "main": "dist/index.js",
6
6
  "publishConfig": {
@@ -49,7 +49,7 @@
49
49
  "peerDependencies": {
50
50
  "helpers-lib": "^2.0.0",
51
51
  "joi": "^17.11.1",
52
- "script-engine-lib": "^1.0.0"
52
+ "script-engine-lib": "^1.0.2"
53
53
  },
54
54
  "devDependencies": {
55
55
  "@biomejs/biome": "2.2.4",