refactor: upgrade AddonAPIKit and propogate changes
This commit is contained in:
@@ -1,21 +1,20 @@
|
|||||||
import { InstanceExistsError } from "../../classes/Errors/InstanceExistsError";
|
import { InstanceExistsError } from "../../classes/Errors/InstanceExistsError";
|
||||||
import { InstanceNotFoundError } from "../../classes/Errors/InstanceNotFoundError";
|
import { InstanceNotFoundError } from "../../classes/Errors/InstanceNotFoundError";
|
||||||
import { StructureNotFoundError } from "../../classes/Errors/StructureNotFoundError";
|
import { StructureNotFoundError } from "../../classes/Errors/StructureNotFoundError";
|
||||||
import { APICallerError, VoidModel } from "../../lib/AddonAPIKit";
|
import { APICallerError, VoidModel, APIController } from "../../lib/AddonAPIKit";
|
||||||
import { AddInstanceParameterModel, InstanceModel, InstanceNameParameterModel, InstancesModel, StructureMaterialsModel } from "../models/InstancesModel";
|
import { AddInstanceParameterModel, InstanceModel, InstanceNameParameterModel, InstancesModel, StructureMaterialsModel } from "../models/InstancesModel";
|
||||||
|
|
||||||
export class InstancesController extends APIController {
|
export class InstancesController extends APIController {
|
||||||
#context;
|
#context;
|
||||||
|
|
||||||
constructor(context) {
|
constructor(context) {
|
||||||
super({
|
super();
|
||||||
"instances": { callback: this.getInstances, parameterModel: VoidModel, returnModel: InstancesModel },
|
this.addEndpoint("instances", this.getInstances, VoidModel, InstancesModel);
|
||||||
"instance:get": { callback: this.getInstance, parameterModel: InstanceNameParameterModel, returnModel: InstanceModel },
|
this.addEndpoint("instance:get", this.getInstance, InstanceNameParameterModel, InstanceModel);
|
||||||
"instance:add": { callback: this.addInstance, parameterModel: AddInstanceParameterModel, returnModel: InstanceModel },
|
this.addEndpoint("instance:add", this.addInstance, AddInstanceParameterModel, InstanceModel);
|
||||||
"instance:edit": { callback: this.editInstance, parameterModel: InstanceModel, returnModel: InstanceModel },
|
this.addEndpoint("instance:edit", this.editInstance, InstanceModel, InstanceModel);
|
||||||
"instance:delete": { callback: this.deleteInstance, parameterModel: InstanceNameParameterModel, returnModel: VoidModel },
|
this.addEndpoint("instance:delete", this.deleteInstance, InstanceNameParameterModel, VoidModel);
|
||||||
"instance:materials": { callback: this.getMaterials, parameterModel: InstanceNameParameterModel, returnModel: StructureMaterialsModel }
|
this.addEndpoint("instance:materials", this.getMaterials, InstanceNameParameterModel, StructureMaterialsModel);
|
||||||
});
|
|
||||||
this.#context = context;
|
this.#context = context;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
* See LICENSE for details.
|
* See LICENSE for details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// MCBE-IPC/ipc.js
|
// src/MCBE-IPC/ipc.js
|
||||||
import { ScriptEventSource, system } from "@minecraft/server";
|
import { ScriptEventSource, system } from "@minecraft/server";
|
||||||
var UTIL;
|
var UTIL;
|
||||||
(function(UTIL2) {
|
(function(UTIL2) {
|
||||||
@@ -629,7 +629,7 @@ var IPC;
|
|||||||
IPC2.handle = handle;
|
IPC2.handle = handle;
|
||||||
})(IPC || (IPC = {}));
|
})(IPC || (IPC = {}));
|
||||||
|
|
||||||
// Errors/APIErrorEnum.js
|
// src/Errors/APIErrorEnum.js
|
||||||
var APIErrorEnum = Object.freeze({
|
var APIErrorEnum = Object.freeze({
|
||||||
Unknown: 0,
|
Unknown: 0,
|
||||||
Success: 1,
|
Success: 1,
|
||||||
@@ -637,7 +637,7 @@ var APIErrorEnum = Object.freeze({
|
|||||||
Server: 3
|
Server: 3
|
||||||
});
|
});
|
||||||
|
|
||||||
// Errors/APICallerError.js
|
// src/Errors/APICallerError.js
|
||||||
var APICallerError = class extends Error {
|
var APICallerError = class extends Error {
|
||||||
constructor(error) {
|
constructor(error) {
|
||||||
super(error.message);
|
super(error.message);
|
||||||
@@ -648,7 +648,7 @@ var APICallerError = class extends Error {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Errors/APIServerError.js
|
// src/Errors/APIServerError.js
|
||||||
var APIServerError = class extends Error {
|
var APIServerError = class extends Error {
|
||||||
constructor(error) {
|
constructor(error) {
|
||||||
super(error.message);
|
super(error.message);
|
||||||
@@ -658,7 +658,7 @@ var APIServerError = class extends Error {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Errors/APIVersionMismatchError.js
|
// src/Errors/APIVersionMismatchError.js
|
||||||
var APIVersionMismatchError = class extends Error {
|
var APIVersionMismatchError = class extends Error {
|
||||||
constructor(serverApiVersion, callerApiVersion) {
|
constructor(serverApiVersion, callerApiVersion) {
|
||||||
super(`API version numbers do not match (${callerApiVersion} != ${serverApiVersion}). Please use API version ${serverApiVersion}.`);
|
super(`API version numbers do not match (${callerApiVersion} != ${serverApiVersion}). Please use API version ${serverApiVersion}.`);
|
||||||
@@ -666,7 +666,7 @@ var APIVersionMismatchError = class extends Error {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// APIModels.js
|
// src/APIModels.js
|
||||||
var VoidModel = PROTO.Void;
|
var VoidModel = PROTO.Void;
|
||||||
var ErrorModel = PROTO.Optional(PROTO.Object({
|
var ErrorModel = PROTO.Optional(PROTO.Object({
|
||||||
code: PROTO.Int8,
|
code: PROTO.Int8,
|
||||||
@@ -682,14 +682,50 @@ var CallModelShell = {
|
|||||||
apiVersion: PROTO.String,
|
apiVersion: PROTO.String,
|
||||||
parameterMap: void 0
|
parameterMap: void 0
|
||||||
};
|
};
|
||||||
|
var EndpointModel = PROTO.String;
|
||||||
|
var EndpointsModel = PROTO.Array(EndpointModel);
|
||||||
|
|
||||||
// AddonAPI.js
|
// src/APIController.js
|
||||||
|
var APIController = class _APIController {
|
||||||
|
#endpoints = {};
|
||||||
|
constructor() {
|
||||||
|
if (this.constructor === _APIController)
|
||||||
|
throw new Error("Cannot instantiate abstract class 'APIController'");
|
||||||
|
}
|
||||||
|
get endpoints() {
|
||||||
|
return this.#endpoints;
|
||||||
|
}
|
||||||
|
addEndpoint(endpoint, callback, parameterModel, returnModel) {
|
||||||
|
this.#endpoints[endpoint] = { callback, parameterModel, returnModel };
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/EndpointsController.js
|
||||||
|
var EndpointsController = class extends APIController {
|
||||||
|
#api;
|
||||||
|
constructor(api) {
|
||||||
|
this.#api = api;
|
||||||
|
this.addEndpoint("endpoints", this.getEndpoints, VoidModel, EndpointsModel);
|
||||||
|
this.addEndpoint("endpoints:has", this.hasEndpoint, EndpointModel, PROTO.Boolean);
|
||||||
|
}
|
||||||
|
getEndpoints() {
|
||||||
|
return this.#api.endpoints;
|
||||||
|
}
|
||||||
|
hasEndpoint(endpoint) {
|
||||||
|
return this.getEndpoints().includes(endpoint);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/AddonAPI.js
|
||||||
var AddonAPI = class {
|
var AddonAPI = class {
|
||||||
#name;
|
#name;
|
||||||
#version;
|
#version;
|
||||||
|
#allEndpoints;
|
||||||
constructor(name, version) {
|
constructor(name, version) {
|
||||||
this.#name = name;
|
this.#name = name;
|
||||||
this.#version = version;
|
this.#version = version;
|
||||||
|
const endpointsController = new EndpointsController(this);
|
||||||
|
this.setupController(endpointsController);
|
||||||
}
|
}
|
||||||
get name() {
|
get name() {
|
||||||
return this.#name;
|
return this.#name;
|
||||||
@@ -700,6 +736,9 @@ var AddonAPI = class {
|
|||||||
get endpointBase() {
|
get endpointBase() {
|
||||||
return this.#name + ":";
|
return this.#name + ":";
|
||||||
}
|
}
|
||||||
|
get endpoints() {
|
||||||
|
return this.#allEndpoints;
|
||||||
|
}
|
||||||
setupController(apiController) {
|
setupController(apiController) {
|
||||||
for (const [endpoint, features] of Object.entries(apiController.endpoints)) {
|
for (const [endpoint, features] of Object.entries(apiController.endpoints)) {
|
||||||
const { callback, parameterModel, returnModel } = features;
|
const { callback, parameterModel, returnModel } = features;
|
||||||
@@ -715,6 +754,7 @@ var AddonAPI = class {
|
|||||||
const parameters = Object.values(callPacket.parameterMap);
|
const parameters = Object.values(callPacket.parameterMap);
|
||||||
return this.#handleCallback(apiVersion, callback, parameters);
|
return this.#handleCallback(apiVersion, callback, parameters);
|
||||||
});
|
});
|
||||||
|
this.#allEndpoints.push(endpointPath);
|
||||||
}
|
}
|
||||||
#handleCallback(apiVersion, callback, parameters) {
|
#handleCallback(apiVersion, callback, parameters) {
|
||||||
try {
|
try {
|
||||||
@@ -760,28 +800,40 @@ var AddonAPI = class {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// APIController.js
|
// src/AddonAPICaller.js
|
||||||
var APIController = class _APIController {
|
import { system as system2 } from "@minecraft/server";
|
||||||
#endpoints;
|
|
||||||
constructor(endpoints) {
|
// src/Errors/APIEndpointNotFoundError.js
|
||||||
if (this.constructor === _APIController)
|
var APIEndpointNotFoundError = class extends Error {
|
||||||
throw new Error("Cannot instantiate abstract class 'APIController'");
|
constructor(endpoint) {
|
||||||
this.#endpoints = endpoints;
|
super(`Endpoint "${endpoint}" was not found.`);
|
||||||
}
|
this.name = "APIEndpointNotFoundError";
|
||||||
get endpoints() {
|
|
||||||
return this.#endpoints;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// AddonAPICaller.js
|
// src/AddonAPICaller.js
|
||||||
var AddonAPICaller = class {
|
var AddonAPICaller = class {
|
||||||
|
static #validEndpointCache = [];
|
||||||
static async call(endpoint, parameterModel, parameterMap, returnDataModel) {
|
static async call(endpoint, parameterModel, parameterMap, returnDataModel) {
|
||||||
|
if (this.#validEndpointCache.length === 0) {
|
||||||
|
const endpointBase = endpoint.split(":")[0];
|
||||||
|
await this.#populateValidEndpointCache(endpointBase);
|
||||||
|
}
|
||||||
|
if (this.#validEndpointCache.includes(endpoint))
|
||||||
return await IPC.invoke(endpoint, parameterModel, parameterMap, returnDataModel).then((result) => result.value);
|
return await IPC.invoke(endpoint, parameterModel, parameterMap, returnDataModel).then((result) => result.value);
|
||||||
|
else
|
||||||
|
throw new APIEndpointNotFoundError(endpoint);
|
||||||
|
}
|
||||||
|
static async #populateValidEndpointCache(endpointBase) {
|
||||||
|
const endpointsEndpoint = endpointBase + ":endpoints";
|
||||||
|
const validEndpoints = await IPC.invoke(endpointsEndpoint, VoidModel, void 0, PROTO.Boolean);
|
||||||
|
this.#validEndpointCache.push(...validEndpoints);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
export {
|
export {
|
||||||
APICallerError,
|
APICallerError,
|
||||||
APIController,
|
APIController,
|
||||||
|
APIErrorEnum,
|
||||||
AddonAPI,
|
AddonAPI,
|
||||||
AddonAPICaller,
|
AddonAPICaller,
|
||||||
PROTO,
|
PROTO,
|
||||||
|
|||||||
Reference in New Issue
Block a user