@rpgjs/common 4.0.0-beta.17 → 4.0.0-beta.19

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.
@@ -1,6 +1,7 @@
1
1
  export declare class EventEmitter {
2
2
  private listeners;
3
3
  private listenersOnce;
4
+ has(name: string): boolean;
4
5
  once(name: string, cb: Function): EventEmitter;
5
6
  on(name: string, cb: Function): EventEmitter;
6
7
  emit(name: string, data?: any, rest?: boolean): Promise<any[]>;
@@ -4,6 +4,9 @@ export class EventEmitter {
4
4
  this.listeners = {};
5
5
  this.listenersOnce = {};
6
6
  }
7
+ has(name) {
8
+ return !!this.listeners[name] || !!this.listenersOnce[name];
9
+ }
7
10
  once(name, cb) {
8
11
  this.listenersOnce[name] = cb;
9
12
  return this;
@@ -1 +1 @@
1
- {"version":3,"file":"EventEmitter.js","sourceRoot":"","sources":["../src/EventEmitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAEnC,MAAM,OAAO,YAAY;IAAzB;QACY,cAAS,GAEb,EAAE,CAAA;QAEE,kBAAa,GAEjB,EAAE,CAAA;IA0CV,CAAC;IAxCG,IAAI,CAAC,IAAY,EAAE,EAAY;QAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;QAC7B,OAAO,IAAI,CAAA;IACf,CAAC;IAED,EAAE,CAAC,IAAY,EAAE,EAAY;QACzB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;QACpD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC7B,OAAO,IAAI,CAAA;IACf,CAAC;IAED,IAAI,CAAC,IAAY,EAAE,IAAU,EAAE,OAAgB,KAAK;QAChD,MAAM,GAAG,GAAQ,EAAE,CAAA;QACnB,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;YACtB,KAAK,IAAI,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;gBACvC,IAAI,IAAI;oBAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;;oBAChC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;aAChC;SACJ;aACI,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;YAC/B,IAAI,IAAI;gBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;;gBAChD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;SAChD;QACD,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;gBACjB,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;aAC9B;YACD,OAAO,GAAG,CAAA;QACd,CAAC,CAAC,CAAC,CAAA;IACP,CAAC;IAED,GAAG,CAAC,IAAY;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAC3B,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;IACnC,CAAC;IAED,KAAK;QACD,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;QACnB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;IAC3B,CAAC;CACJ"}
1
+ {"version":3,"file":"EventEmitter.js","sourceRoot":"","sources":["../src/EventEmitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAEnC,MAAM,OAAO,YAAY;IAAzB;QACY,cAAS,GAEb,EAAE,CAAA;QAEE,kBAAa,GAEjB,EAAE,CAAA;IA8CV,CAAC;IA5CG,GAAG,CAAC,IAAY;QACZ,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;IAC/D,CAAC;IAED,IAAI,CAAC,IAAY,EAAE,EAAY;QAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;QAC7B,OAAO,IAAI,CAAA;IACf,CAAC;IAED,EAAE,CAAC,IAAY,EAAE,EAAY;QACzB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;QACpD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC7B,OAAO,IAAI,CAAA;IACf,CAAC;IAED,IAAI,CAAC,IAAY,EAAE,IAAU,EAAE,OAAgB,KAAK;QAChD,MAAM,GAAG,GAAQ,EAAE,CAAA;QACnB,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;YACtB,KAAK,IAAI,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;gBACvC,IAAI,IAAI;oBAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;;oBAChC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;aAChC;SACJ;aACI,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;YAC/B,IAAI,IAAI;gBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;;gBAChD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;SAChD;QACD,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;gBACjB,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;aAC9B;YACD,OAAO,GAAG,CAAA;QACd,CAAC,CAAC,CAAC,CAAA;IACP,CAAC;IAED,GAAG,CAAC,IAAY;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAC3B,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;IACnC,CAAC;IAED,KAAK;QACD,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;QACnB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;IAC3B,CAAC;CACJ"}
package/lib/Module.js CHANGED
@@ -8,6 +8,9 @@ var Side;
8
8
  })(Side || (Side = {}));
9
9
  export function RpgModule(options) {
10
10
  return (target) => {
11
+ if (options.hooks) {
12
+ target.hooks = options.hooks;
13
+ }
11
14
  for (let key in options) {
12
15
  target.prototype[key] = options[key];
13
16
  }
@@ -16,9 +19,10 @@ export function RpgModule(options) {
16
19
  export async function loadModules(modules, obj, middleware) {
17
20
  const { side, relations } = obj;
18
21
  let playerProps = {};
19
- for (let module of modules) {
22
+ let hooks = {};
23
+ const getModuleClass = (module) => {
20
24
  if (!module)
21
- continue;
25
+ return null;
22
26
  let plug = [];
23
27
  if (!isArray(module)) {
24
28
  plug = [module];
@@ -29,7 +33,33 @@ export async function loadModules(modules, obj, middleware) {
29
33
  const [moduleClassSides, options] = plug;
30
34
  const moduleClass = moduleClassSides[side];
31
35
  if (!moduleClass)
36
+ return null;
37
+ return {
38
+ moduleClass,
39
+ options
40
+ };
41
+ };
42
+ for (let module of modules) {
43
+ const moduleObject = getModuleClass(module);
44
+ if (!moduleObject)
32
45
  continue;
46
+ const { moduleClass } = moduleObject;
47
+ if (moduleClass.hooks) {
48
+ for (let key in moduleClass.hooks) {
49
+ if (!hooks[key])
50
+ hooks[key] = [];
51
+ hooks[key] = [
52
+ ...hooks[key],
53
+ ...moduleClass.hooks[key]
54
+ ];
55
+ }
56
+ }
57
+ }
58
+ for (let module of modules) {
59
+ const moduleObject = getModuleClass(module);
60
+ if (!moduleObject)
61
+ continue;
62
+ const { moduleClass, options } = moduleObject;
33
63
  let mod;
34
64
  if (options && side == Side.Client && options[Side.Server]) {
35
65
  warning(`Data that may be sensitive (normally visible only on the server side) are made optional and visible on the client side.\nInstead, import the configuration with the server! flag into an import. Example: \n\nimport config from 'server!./config\n\n'`, options[Side.Server]);
@@ -75,14 +105,20 @@ export async function loadModules(modules, obj, middleware) {
75
105
  RpgPlugin.on(HookClient.AddGui, () => gui);
76
106
  }
77
107
  const player = side == Side.Server ? mod.player : mod.sprite;
78
- const loadRelations = (hook, relatioName) => {
108
+ const loadRelations = (hook, relationName) => {
79
109
  if (hook) {
80
- for (let method in relations[relatioName]) {
81
- const hookName = relations[relatioName][method];
110
+ for (let method in relations[relationName]) {
111
+ const hookName = relations[relationName][method];
82
112
  if (hook[method])
83
113
  RpgPlugin.on(hookName, hook[method]);
84
114
  }
85
115
  }
116
+ if (hooks[relationName]) {
117
+ for (let methodName of hooks[relationName]) {
118
+ if (hook[methodName])
119
+ RpgPlugin.on(side + '.' + relationName + '.' + methodName, hook[methodName]);
120
+ }
121
+ }
86
122
  };
87
123
  loadRelations(player, 'player');
88
124
  if (player && player.props) {
package/lib/Module.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Module.js","sourceRoot":"","sources":["../src/Module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Module.js","sourceRoot":"","sources":["../src/Module.ts"],"names":[],"mappings":"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"}
package/lib/Utils.d.ts CHANGED
@@ -26,6 +26,7 @@ export declare function extractId(path: string): string | null;
26
26
  export declare function basename(path: string): string;
27
27
  export declare function fps2ms(fps: number): number;
28
28
  export declare function preciseNow(): number;
29
+ export declare function set(obj: any, path: any, value: any, onlyPlainObject?: boolean): any;
29
30
  declare const _default: {
30
31
  random: typeof random;
31
32
  isBrowser: typeof isBrowser;
@@ -51,5 +52,6 @@ declare const _default: {
51
52
  fps2ms: typeof fps2ms;
52
53
  preciseNow: typeof preciseNow;
53
54
  hexaToNumber: typeof hexaToNumber;
55
+ set: typeof set;
54
56
  };
55
57
  export default _default;
package/lib/Utils.js CHANGED
@@ -113,6 +113,25 @@ export function fps2ms(fps) {
113
113
  export function preciseNow() {
114
114
  return typeof performance !== 'undefined' ? performance.now() : Date.now();
115
115
  }
116
+ // https://stackoverflow.com/questions/54733539/javascript-implementation-of-lodash-set-method
117
+ export function set(obj, path, value, onlyPlainObject = false) {
118
+ if (Object(obj) !== obj)
119
+ return obj; // When obj is not an object
120
+ // If not yet an array, get the keys from the string-path
121
+ if (!Array.isArray(path))
122
+ path = path.toString().match(/[^.[\]]+/g) || [];
123
+ path.slice(0, -1).reduce((a, c, i) => // Iterate all of them except the last one
124
+ Object(a[c]) === a[c] // Does the key exist and is its value an object?
125
+ // Yes: then follow that path
126
+ ? a[c]
127
+ // No: create the key. Is the next key a potential array-index?
128
+ : a[c] = Math.abs(path[i + 1]) >> 0 === +path[i + 1]
129
+ ? onlyPlainObject ? {} : [] // Yes: assign a new array object
130
+ : {}, // No: assign a new plain object
131
+ obj)[path[path.length - 1]] = value; // Finally assign the value to the last key
132
+ return obj; // Return the top-level object to allow chaining
133
+ }
134
+ ;
116
135
  export default {
117
136
  random,
118
137
  isBrowser,
@@ -137,6 +156,7 @@ export default {
137
156
  basename,
138
157
  fps2ms,
139
158
  preciseNow,
140
- hexaToNumber
159
+ hexaToNumber,
160
+ set
141
161
  };
142
162
  //# sourceMappingURL=Utils.js.map
package/lib/Utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Utils.js","sourceRoot":"","sources":["../src/Utils.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,MAAM,CAAC,GAAW,EAAE,GAAW;IAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA;AAC5D,CAAC;AAED,MAAM,UAAU,SAAS;IACrB,OAAO,OAAO,MAAM,KAAK,WAAW,CAAA;AACxC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAY;IACnC,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,mBAAmB,CAAA;AACxD,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAa;IACjC,OAAO,OAAO,IAAI,KAAK,UAAU;WAC1B,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAY;IAClC,OAAO,YAAY,CAAmB,GAAG,EAAE,OAAO,CAAC,CAAA;AACvD,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAY;IAChC,OAAO,YAAY,CAAiB,GAAG,EAAE,KAAK,CAAC,CAAA;AACnD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAY;IACjC,OAAO,OAAO,GAAG,IAAI,QAAQ,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;AACjE,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAY;IACjC,OAAO,OAAO,GAAG,IAAI,QAAQ,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,YAAY,CAAU,GAAY,EAAE,MAAW;IAC3D,OAAO,GAAG,YAAY,MAAM,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAY;IAClC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAY;IAClC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;AAC1D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAC,MAAM,EAAE,IAAI,CAAmB,EAAE,CAAC,MAAM,EAAE,IAAI,CAAmB;IAC3F,OAAO,CAAC,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,IAAI,MAAM,GAAG,IAAI,CAAC,CAAA;AACtF,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,CAAU;IACjC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAA;IACpC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AACjD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAQ,EAAE,CAAQ;IAC5C,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/D,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,WAA6B,EAAE,SAA6B;IACpF,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC3B,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAChE,MAAM,YAAY,GAAG,MAAM,CAAC,wBAAwB,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;YAC9E,IAAI,CAAC,YAAY,EAAE;gBACf,OAAM;aACT;YACG,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,EAAE,YAAY,CAAC,CAAA;QACpE,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;AACN,CAAC;AAED,MAAM,UAAU,WAAW;IACvB,IAAI,SAAS,GAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;IAChD,IAAI,UAAU,GAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;IACjD,SAAS,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IACtD,UAAU,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,OAAO,SAAS,GAAG,UAAU,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAI,GAAG,SAAgB;IACpD,OAAO;QACH,YAAY,GAAG,UAAU;YACrB,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;gBAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;YAChC,CAAC,CAAC,CAAA;QACN,CAAC;KACY,CAAA;AACrB,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC7B,IAAI,MAAM,CAAA;IACV,IAAI,OAAO,iBAAiB,IAAI,WAAW,EAAE;QACzC,MAAM,GAAG,iBAAiB,CAAA;KAC7B;SACI;QACD,MAAM,GAAG,WAAW,CAAA;KACvB;IACD,OAAO,MAAM,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAa;IACnC,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IAIrC,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;QAClB,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;KACjD;IACD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;QAClB,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAA;QAC/C,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;KACzB;IACD,OAAO;QACH,KAAK,EAAE,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC;QACxB,KAAK;KACR,CAAA;AACL,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IAClC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAA;IACrD,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAA;IACpB,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;AACpD,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,GAAW;IAC9B,OAAO,IAAI,GAAG,GAAG,CAAA;AACrB,CAAC;AAED,MAAM,UAAU,UAAU;IACtB,OAAO,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;AAC9E,CAAC;AAED,eAAe;IACX,MAAM;IACN,SAAS;IACT,SAAS;IACT,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,OAAO;IACP,YAAY;IACZ,SAAS;IACT,SAAS;IACT,WAAW;IACX,YAAY;IACZ,WAAW;IACX,UAAU;IACV,iBAAiB;IACjB,WAAW;IACX,iBAAiB;IACjB,SAAS;IACT,SAAS;IACT,QAAQ;IACR,MAAM;IACN,UAAU;IACV,YAAY;CACf,CAAA"}
1
+ {"version":3,"file":"Utils.js","sourceRoot":"","sources":["../src/Utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rpgjs/common",
3
- "version": "4.0.0-beta.17",
3
+ "version": "4.0.0-beta.19",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "types": "./lib/index.d.ts",
@@ -8,6 +8,10 @@ export class EventEmitter {
8
8
  private listenersOnce: {
9
9
  [eventName: string]: Function
10
10
  } = {}
11
+
12
+ has(name: string): boolean {
13
+ return !!this.listeners[name] || !!this.listenersOnce[name]
14
+ }
11
15
 
12
16
  once(name: string, cb: Function): EventEmitter {
13
17
  this.listenersOnce[name] = cb
package/src/Module.ts CHANGED
@@ -19,6 +19,9 @@ export type ModuleType = ModuleSide | [ModuleSide, {
19
19
 
20
20
  export function RpgModule<T>(options: T) {
21
21
  return (target) => {
22
+ if ((options as any).hooks) {
23
+ target.hooks = (options as any).hooks
24
+ }
22
25
  for (let key in options) {
23
26
  target.prototype[key] = options[key]
24
27
  }
@@ -28,8 +31,10 @@ export function RpgModule<T>(options: T) {
28
31
  export async function loadModules(modules, obj, middleware?: Function): Promise<{ playerProps: any }> {
29
32
  const { side, relations } = obj
30
33
  let playerProps = {}
31
- for (let module of modules) {
32
- if (!module) continue
34
+ let hooks = {}
35
+
36
+ const getModuleClass = (module) => {
37
+ if (!module) return null
33
38
  let plug: any = []
34
39
  if (!isArray(module)) {
35
40
  plug = [module]
@@ -39,7 +44,32 @@ export async function loadModules(modules, obj, middleware?: Function): Promise<
39
44
  }
40
45
  const [moduleClassSides, options] = plug
41
46
  const moduleClass = moduleClassSides[side]
42
- if (!moduleClass) continue
47
+ if (!moduleClass) return null
48
+ return {
49
+ moduleClass,
50
+ options
51
+ }
52
+ }
53
+
54
+ for (let module of modules) {
55
+ const moduleObject = getModuleClass(module)
56
+ if (!moduleObject) continue
57
+ const { moduleClass } = moduleObject
58
+ if (moduleClass.hooks) {
59
+ for (let key in moduleClass.hooks) {
60
+ if (!hooks[key]) hooks[key] = []
61
+ hooks[key] = [
62
+ ...hooks[key],
63
+ ...moduleClass.hooks[key]
64
+ ]
65
+ }
66
+ }
67
+ }
68
+
69
+ for (let module of modules) {
70
+ const moduleObject = getModuleClass(module)
71
+ if (!moduleObject) continue
72
+ const { moduleClass, options } = moduleObject
43
73
  let mod
44
74
  if (options && side == Side.Client && options[Side.Server]) {
45
75
  warning(`Data that may be sensitive (normally visible only on the server side) are made optional and visible on the client side.\nInstead, import the configuration with the server! flag into an import. Example: \n\nimport config from 'server!./config\n\n'`, options[Side.Server])
@@ -85,13 +115,18 @@ export async function loadModules(modules, obj, middleware?: Function): Promise<
85
115
  RpgPlugin.on(HookClient.AddGui, () => gui)
86
116
  }
87
117
  const player = side == Side.Server ? mod.player : mod.sprite
88
- const loadRelations = (hook, relatioName) => {
118
+ const loadRelations = (hook, relationName) => {
89
119
  if (hook) {
90
- for (let method in relations[relatioName]) {
91
- const hookName = relations[relatioName][method]
120
+ for (let method in relations[relationName]) {
121
+ const hookName = relations[relationName][method]
92
122
  if (hook[method]) RpgPlugin.on(hookName, hook[method])
93
123
  }
94
124
  }
125
+ if (hooks[relationName]) {
126
+ for (let methodName of hooks[relationName]) {
127
+ if (hook[methodName]) RpgPlugin.on(side + '.' + relationName + '.' + methodName, hook[methodName])
128
+ }
129
+ }
95
130
  }
96
131
  loadRelations(player, 'player')
97
132
  if (player && player.props) {
package/src/Utils.ts CHANGED
@@ -55,16 +55,16 @@ export function capitalize(s: unknown): string {
55
55
  }
56
56
 
57
57
  export function arrayEquals(a: any[], b: any[]): boolean {
58
- return a.length === b.length && a.every((v, i) => v === b[i])
58
+ return a.length === b.length && a.every((v, i) => v === b[i])
59
59
  }
60
60
 
61
61
  export function applyMixins(derivedCtor: constructor<any>, baseCtors: constructor<any>[]) {
62
62
  baseCtors.forEach((baseCtor) => {
63
63
  Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {
64
- const baseCtorName = Object.getOwnPropertyDescriptor(baseCtor.prototype, name)
65
- if (!baseCtorName) {
66
- return
67
- }
64
+ const baseCtorName = Object.getOwnPropertyDescriptor(baseCtor.prototype, name)
65
+ if (!baseCtorName) {
66
+ return
67
+ }
68
68
  Object.defineProperty(derivedCtor.prototype, name, baseCtorName)
69
69
  })
70
70
  })
@@ -80,7 +80,7 @@ export function generateUID(): string {
80
80
 
81
81
  export function createConstructor<T>(...propNames: any[]): T {
82
82
  return class {
83
- constructor(...propValues){
83
+ constructor(...propValues) {
84
84
  propNames.forEach((name, idx) => {
85
85
  this[name] = propValues[idx]
86
86
  })
@@ -140,6 +140,23 @@ export function preciseNow(): number {
140
140
  return typeof performance !== 'undefined' ? performance.now() : Date.now()
141
141
  }
142
142
 
143
+ // https://stackoverflow.com/questions/54733539/javascript-implementation-of-lodash-set-method
144
+ export function set(obj, path, value, onlyPlainObject = false) {
145
+ if (Object(obj) !== obj) return obj; // When obj is not an object
146
+ // If not yet an array, get the keys from the string-path
147
+ if (!Array.isArray(path)) path = path.toString().match(/[^.[\]]+/g) || [];
148
+ path.slice(0, -1).reduce((a, c, i) => // Iterate all of them except the last one
149
+ Object(a[c]) === a[c] // Does the key exist and is its value an object?
150
+ // Yes: then follow that path
151
+ ? a[c]
152
+ // No: create the key. Is the next key a potential array-index?
153
+ : a[c] = Math.abs(path[i + 1]) >> 0 === +path[i + 1]
154
+ ? onlyPlainObject ? {} : [] // Yes: assign a new array object
155
+ : {}, // No: assign a new plain object
156
+ obj)[path[path.length - 1]] = value; // Finally assign the value to the last key
157
+ return obj; // Return the top-level object to allow chaining
158
+ };
159
+
143
160
  export default {
144
161
  random,
145
162
  isBrowser,
@@ -164,5 +181,6 @@ export default {
164
181
  basename,
165
182
  fps2ms,
166
183
  preciseNow,
167
- hexaToNumber
184
+ hexaToNumber,
185
+ set
168
186
  }
package/LICENSE DELETED
@@ -1,19 +0,0 @@
1
- Copyright (C) 2020 by Samuel Ronce
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining a copy
4
- of this software and associated documentation files (the "Software"), to deal
5
- in the Software without restriction, including without limitation the rights
6
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- copies of the Software, and to permit persons to whom the Software is
8
- furnished to do so, subject to the following conditions:
9
-
10
- The above copyright notice and this permission notice shall be included in
11
- all copies or substantial portions of the Software.
12
-
13
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- THE SOFTWARE.