@benev/archimedes 0.1.0-1

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.
Files changed (133) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +19 -0
  3. package/package.json +44 -0
  4. package/s/_archive/GLOSSARY.md +31 -0
  5. package/s/_archive/README.md +209 -0
  6. package/s/_archive/core/authority.ts +62 -0
  7. package/s/_archive/core/contact/codecs.i.ts +3 -0
  8. package/s/_archive/core/contact/codecs.ts +14 -0
  9. package/s/_archive/core/contact/contact.test.ts +32 -0
  10. package/s/_archive/core/contact/contact.ts +63 -0
  11. package/s/_archive/core/contact/types.ts +24 -0
  12. package/s/_archive/core/contact/wiring.i.ts +3 -0
  13. package/s/_archive/core/contact/wiring.ts +212 -0
  14. package/s/_archive/core/fiber.ts +94 -0
  15. package/s/_archive/core/liaison.ts +73 -0
  16. package/s/_archive/core/parcels/inbox.ts +83 -0
  17. package/s/_archive/core/parcels/parceller.ts +20 -0
  18. package/s/_archive/core/parcels/parcels.test.ts +136 -0
  19. package/s/_archive/core/parcels/types.ts +5 -0
  20. package/s/_archive/core/parcels/utils/nanny.ts +23 -0
  21. package/s/_archive/core/simulator.ts +11 -0
  22. package/s/_archive/core/speculator.ts +63 -0
  23. package/s/_archive/core/types.ts +32 -0
  24. package/s/_archive/core/utils/handle-telegrams.ts +34 -0
  25. package/s/_archive/core/utils/is-input-dispatch.ts +10 -0
  26. package/s/_archive/core/utils/make-telegram-for-inputs.ts +12 -0
  27. package/s/_archive/core/utils/on-channel-message.ts +11 -0
  28. package/s/_archive/eureka/eureka.ts +20 -0
  29. package/s/_archive/eureka/index.ts +0 -0
  30. package/s/_archive/eureka/integration/context.ts +9 -0
  31. package/s/_archive/eureka/integration/simulator.ts +75 -0
  32. package/s/_archive/eureka/integration/types.ts +12 -0
  33. package/s/_archive/eureka/integration/utils/inputs.ts +24 -0
  34. package/s/_archive/eureka/integration/utils/relevance.ts +10 -0
  35. package/s/_archive/eureka/parts/entity.ts +37 -0
  36. package/s/_archive/eureka/parts/system.ts +38 -0
  37. package/s/_archive/eureka/parts/types.ts +21 -0
  38. package/s/_archive/eureka/parts/world.ts +140 -0
  39. package/s/_archive/eureka/testing/eureka.test.ts +27 -0
  40. package/s/_archive/eureka/testing/integration.test.ts +40 -0
  41. package/s/_archive/eureka/testing/situations/health.ts +43 -0
  42. package/s/_archive/eureka/testing/situations/integration.ts +45 -0
  43. package/s/_archive/index.ts +6 -0
  44. package/s/_archive/session/client.ts +56 -0
  45. package/s/_archive/session/host.ts +71 -0
  46. package/s/_archive/session/meta/meta-client.ts +5 -0
  47. package/s/_archive/session/meta/meta-host.ts +18 -0
  48. package/s/_archive/session/meta/types.ts +15 -0
  49. package/s/_archive/session/parts/client-on.ts +8 -0
  50. package/s/_archive/session/parts/fiber-rpc.ts +28 -0
  51. package/s/_archive/session/parts/host-on.ts +9 -0
  52. package/s/_archive/session/parts/hub.ts +40 -0
  53. package/s/_archive/session/parts/netfibers.ts +14 -0
  54. package/s/_archive/session/parts/seat.ts +35 -0
  55. package/s/_archive/session/parts/spoke.ts +10 -0
  56. package/s/_archive/sugar/easy-host.ts +68 -0
  57. package/s/_archive/tests.test.ts +17 -0
  58. package/s/_archive/tools/averager.ts +29 -0
  59. package/s/_archive/tools/bucket.ts +17 -0
  60. package/s/_archive/tools/chronicle.ts +32 -0
  61. package/s/_archive/tools/disposers.ts +5 -0
  62. package/s/_archive/tools/id-counter.ts +13 -0
  63. package/s/_archive/tools/loop.ts +12 -0
  64. package/s/_archive/tools/pub.ts +22 -0
  65. package/s/_archive/tools/ticker.ts +22 -0
  66. package/s/_archive/tools/u8.ts +7 -0
  67. package/s/_archive/transports/sparrow/fibers.ts +19 -0
  68. package/s/_archive/transports/sparrow/start-sparrow-host.ts +26 -0
  69. package/s/_archive/transports/sparrow/utils/netfibers-from-cable.ts +10 -0
  70. package/s/ecs/index.ts +7 -0
  71. package/s/ecs/parts/changers.ts +16 -0
  72. package/s/ecs/parts/make-id.ts +7 -0
  73. package/s/ecs/parts/world.ts +68 -0
  74. package/s/ecs/test/setup-example-world.ts +42 -0
  75. package/s/ecs/test/setup-lifecycle-counts.ts +17 -0
  76. package/s/ecs/test.ts +99 -0
  77. package/s/ecs/types.ts +19 -0
  78. package/s/ecs/utils/is-match.ts +7 -0
  79. package/s/ecs/utils/optimizer.ts +38 -0
  80. package/s/index.ts +3 -0
  81. package/s/net/test.ts +9 -0
  82. package/s/net/types.ts +1 -0
  83. package/s/sim/test.ts +9 -0
  84. package/s/sim/types.ts +1 -0
  85. package/s/test.ts +8 -0
  86. package/x/ecs/index.d.ts +4 -0
  87. package/x/ecs/index.js +5 -0
  88. package/x/ecs/index.js.map +1 -0
  89. package/x/ecs/parts/changers.d.ts +4 -0
  90. package/x/ecs/parts/changers.js +11 -0
  91. package/x/ecs/parts/changers.js.map +1 -0
  92. package/x/ecs/parts/make-id.d.ts +1 -0
  93. package/x/ecs/parts/make-id.js +5 -0
  94. package/x/ecs/parts/make-id.js.map +1 -0
  95. package/x/ecs/parts/world.d.ts +11 -0
  96. package/x/ecs/parts/world.js +59 -0
  97. package/x/ecs/parts/world.js.map +1 -0
  98. package/x/ecs/test/setup-example-world.d.ts +10 -0
  99. package/x/ecs/test/setup-example-world.js +31 -0
  100. package/x/ecs/test/setup-example-world.js.map +1 -0
  101. package/x/ecs/test/setup-lifecycle-counts.d.ts +6 -0
  102. package/x/ecs/test/setup-lifecycle-counts.js +15 -0
  103. package/x/ecs/test/setup-lifecycle-counts.js.map +1 -0
  104. package/x/ecs/test.d.ts +13 -0
  105. package/x/ecs/test.js +85 -0
  106. package/x/ecs/test.js.map +1 -0
  107. package/x/ecs/types.d.ts +12 -0
  108. package/x/ecs/types.js +2 -0
  109. package/x/ecs/types.js.map +1 -0
  110. package/x/ecs/utils/is-match.d.ts +2 -0
  111. package/x/ecs/utils/is-match.js +4 -0
  112. package/x/ecs/utils/is-match.js.map +1 -0
  113. package/x/ecs/utils/optimizer.d.ts +9 -0
  114. package/x/ecs/utils/optimizer.js +37 -0
  115. package/x/ecs/utils/optimizer.js.map +1 -0
  116. package/x/index.d.ts +1 -0
  117. package/x/index.js +2 -0
  118. package/x/index.js.map +1 -0
  119. package/x/net/test.d.ts +4 -0
  120. package/x/net/test.js +7 -0
  121. package/x/net/test.js.map +1 -0
  122. package/x/net/types.d.ts +1 -0
  123. package/x/net/types.js +2 -0
  124. package/x/net/types.js.map +1 -0
  125. package/x/sim/test.d.ts +4 -0
  126. package/x/sim/test.js +7 -0
  127. package/x/sim/test.js.map +1 -0
  128. package/x/sim/types.d.ts +1 -0
  129. package/x/sim/types.js +2 -0
  130. package/x/sim/types.js.map +1 -0
  131. package/x/test.d.ts +1 -0
  132. package/x/test.js +6 -0
  133. package/x/test.js.map +1 -0
package/x/ecs/test.js ADDED
@@ -0,0 +1,85 @@
1
+ import { suite, test, expect } from "@e280/science";
2
+ import { create, del, update } from "./parts/changers.js";
3
+ import { setupExampleWorld } from "./test/setup-example-world.js";
4
+ import { setupLifecycleCounts } from "./test/setup-lifecycle-counts.js";
5
+ export default suite({
6
+ "create an entity": test(async () => {
7
+ const { world } = setupExampleWorld();
8
+ expect(world.entities.size).is(0);
9
+ world.apply(create({ health: 100 }));
10
+ expect(world.entities.size).is(1);
11
+ }),
12
+ "delete an entity": test(async () => {
13
+ const { world } = setupExampleWorld();
14
+ const id = world.apply(create({ health: 100 }));
15
+ expect(world.entities.size).is(1);
16
+ world.apply(del(id));
17
+ expect(world.entities.size).is(0);
18
+ }),
19
+ "select an entity": test(async () => {
20
+ const { world } = setupExampleWorld();
21
+ world.apply(create({ health: 100 }));
22
+ expect([...world.select("health")].length).is(1);
23
+ }),
24
+ "select two entities": test(async () => {
25
+ const { world } = setupExampleWorld();
26
+ world.apply(create({ health: 100 }));
27
+ world.apply(create({ health: 100 }));
28
+ expect([...world.select("health")].length).is(2);
29
+ }),
30
+ "select with no component keys selects all": test(async () => {
31
+ const { world } = setupExampleWorld();
32
+ world.apply(create({ health: 100 }));
33
+ world.apply(create({ health: 100 }));
34
+ expect([...world.select()].length).is(2);
35
+ }),
36
+ "select doesn't include non-match": test(async () => {
37
+ const { world } = setupExampleWorld();
38
+ world.apply(create({ health: 100 }));
39
+ expect([...world.select("mana")].length).is(0);
40
+ }),
41
+ "select includes entities with extra components": test(async () => {
42
+ const { world } = setupExampleWorld();
43
+ world.apply(create({ health: 100, mana: 100 }));
44
+ expect([...world.select("health")].length).is(1);
45
+ }),
46
+ "wizard regens mana": test(async () => {
47
+ const { world, systems } = setupExampleWorld();
48
+ const wizardId = world.apply(create({ health: 100, mana: 50, manaRegen: 1 }));
49
+ const changes = world.execute(systems);
50
+ expect(changes.length).is(1);
51
+ expect(world.require(wizardId).mana).is(51);
52
+ }),
53
+ "death by bleeding": test(async () => {
54
+ const { world, systems } = setupExampleWorld();
55
+ const wizardId = world.apply(create({ health: 2, bleed: 1 }));
56
+ expect(world.require(wizardId).health).is(2);
57
+ world.execute(systems);
58
+ expect(world.require(wizardId).health).is(1);
59
+ world.execute(systems);
60
+ expect(world.entities.has(wizardId)).is(false);
61
+ }),
62
+ "lifecycles": test(async () => {
63
+ const { world } = setupExampleWorld();
64
+ const counts = setupLifecycleCounts();
65
+ const system = world.lifecycle(["health"], () => {
66
+ counts.enters++;
67
+ return {
68
+ tick: () => void counts.ticks++,
69
+ exit: () => void counts.exits++,
70
+ };
71
+ });
72
+ counts.expect(0, 0, 0);
73
+ const wizardId = world.apply(create({ health: 100, mana: 50 }));
74
+ world.execute([system]);
75
+ counts.expect(1, 1, 0);
76
+ world.apply(update(wizardId, { health: 100, mana: 100 }));
77
+ world.execute([system]);
78
+ counts.expect(1, 2, 0);
79
+ world.apply(del(wizardId));
80
+ world.execute([system]);
81
+ counts.expect(1, 2, 1);
82
+ expect(world.entities.size).is(0);
83
+ }),
84
+ });
85
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../s/ecs/test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export type Entities<C extends Components> = Map<Id, C>;
2
+ export type Components = Record<string, unknown>;
3
+ export type System = () => Generator<Change>;
4
+ export type Id = string;
5
+ export type AsComponents<C extends Components> = C;
6
+ export type Change = [id: Id, components?: Partial<Components>];
7
+ export type Select<C extends Components, K extends keyof C> = Pick<C, K> & Partial<C>;
8
+ export type LifecycleCallbacks<C extends Components, K extends keyof C> = {
9
+ tick: (id: Id, components: Select<C, K>) => void;
10
+ exit: (id: Id) => void;
11
+ };
12
+ export type LifecycleEnter<C extends Components, K extends keyof C> = ((id: Id, components: Select<C, K>) => LifecycleCallbacks<C, K>);
package/x/ecs/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../s/ecs/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import { Components } from "../types.js";
2
+ export declare function isMatch(set: Set<any>, components: Components): boolean;
@@ -0,0 +1,4 @@
1
+ export function isMatch(set, components) {
2
+ return [...set].every(key => key in components);
3
+ }
4
+ //# sourceMappingURL=is-match.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-match.js","sourceRoot":"","sources":["../../../s/ecs/utils/is-match.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,OAAO,CAAC,GAAa,EAAE,UAAsB;IAC5D,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,UAAU,CAAC,CAAA;AAChD,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { Components, Entities, Id, Select } from "../types.js";
2
+ export declare class Optimizer<C extends Components> {
3
+ #private;
4
+ entities: Entities<Partial<C>>;
5
+ constructor(entities: Entities<Partial<C>>);
6
+ obtain<K extends keyof C>(componentKeys: K[]): Entities<Select<C, K>>;
7
+ update(id: Id, components: Partial<C>): void;
8
+ eliminate(id: Id): void;
9
+ }
@@ -0,0 +1,37 @@
1
+ import { GMap } from "@e280/stz";
2
+ import { isMatch } from "./is-match.js";
3
+ export class Optimizer {
4
+ entities;
5
+ #index = new GMap();
6
+ constructor(entities) {
7
+ this.entities = entities;
8
+ }
9
+ obtain(componentKeys) {
10
+ for (const set of this.#index.keys()) {
11
+ if (set.size !== componentKeys.length)
12
+ continue;
13
+ if (componentKeys.every(key => set.has(key)))
14
+ return this.#index.require(set);
15
+ }
16
+ const set = new Set(componentKeys);
17
+ const ents = new GMap();
18
+ this.#index.set(set, ents);
19
+ for (const [id, components] of this.entities)
20
+ if (isMatch(set, components))
21
+ ents.set(id, components);
22
+ return ents;
23
+ }
24
+ update(id, components) {
25
+ for (const [set, ents] of this.#index) {
26
+ if (isMatch(set, components))
27
+ ents.set(id, components);
28
+ else
29
+ ents.delete(id);
30
+ }
31
+ }
32
+ eliminate(id) {
33
+ for (const ents of this.#index.values())
34
+ ents.delete(id);
35
+ }
36
+ }
37
+ //# sourceMappingURL=optimizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimizer.js","sourceRoot":"","sources":["../../../s/ecs/utils/optimizer.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAC9B,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAA;AAGrC,MAAM,OAAO,SAAS;IAGF;IAFnB,MAAM,GAAG,IAAI,IAAI,EAAsC,CAAA;IAEvD,YAAmB,QAA8B;QAA9B,aAAQ,GAAR,QAAQ,CAAsB;IAAG,CAAC;IAErD,MAAM,CAAoB,aAAkB;QAC3C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YACtC,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa,CAAC,MAAM;gBAAE,SAAQ;YAC/C,IAAI,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAA2B,CAAA;QAC3D,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAA;QAClC,MAAM,IAAI,GAA2B,IAAI,IAAI,EAAE,CAAA;QAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAC1B,KAAK,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ;YAC3C,IAAI,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC;gBAC3B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,UAA0B,CAAC,CAAA;QAC1C,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,MAAM,CAAC,EAAM,EAAE,UAAsB;QACpC,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACvC,IAAI,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC;gBAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;;gBACjD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACrB,CAAC;IACF,CAAC;IAED,SAAS,CAAC,EAAM;QACf,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACtC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACjB,CAAC;CACD"}
package/x/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from "./ecs/index.js";
package/x/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export * from "./ecs/index.js";
2
+ //# sourceMappingURL=index.js.map
package/x/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../s/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAA"}
@@ -0,0 +1,4 @@
1
+ declare const _default: {
2
+ todo: import("@e280/science").Test;
3
+ };
4
+ export default _default;
package/x/net/test.js ADDED
@@ -0,0 +1,7 @@
1
+ import { suite, test, expect } from "@e280/science";
2
+ export default suite({
3
+ "todo": test(async () => {
4
+ expect(1 + 1).is(2);
5
+ }),
6
+ });
7
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../s/net/test.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAC,MAAM,eAAe,CAAA;AAEjD,eAAe,KAAK,CAAC;IACpB,MAAM,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QACtB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACpB,CAAC,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
package/x/net/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../s/net/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ declare const _default: {
2
+ todo: import("@e280/science").Test;
3
+ };
4
+ export default _default;
package/x/sim/test.js ADDED
@@ -0,0 +1,7 @@
1
+ import { suite, test, expect } from "@e280/science";
2
+ export default suite({
3
+ "todo": test(async () => {
4
+ expect(1 + 1).is(2);
5
+ }),
6
+ });
7
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../s/sim/test.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAC,MAAM,eAAe,CAAA;AAEjD,eAAe,KAAK,CAAC;IACpB,MAAM,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QACtB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACpB,CAAC,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
package/x/sim/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../s/sim/types.ts"],"names":[],"mappings":""}
package/x/test.d.ts ADDED
@@ -0,0 +1 @@
1
+ export {};
package/x/test.js ADDED
@@ -0,0 +1,6 @@
1
+ import { run } from "@e280/science";
2
+ import ecs from "./ecs/test.js";
3
+ import net from "./net/test.js";
4
+ import sim from "./sim/test.js";
5
+ await run({ ecs, net, sim });
6
+ //# sourceMappingURL=test.js.map
package/x/test.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../s/test.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,eAAe,CAAA;AACjC,OAAO,GAAG,MAAM,eAAe,CAAA;AAC/B,OAAO,GAAG,MAAM,eAAe,CAAA;AAC/B,OAAO,GAAG,MAAM,eAAe,CAAA;AAE/B,MAAM,GAAG,CAAC,EAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAC,CAAC,CAAA"}