bonescript-compiler 0.6.1 → 0.6.2

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/cli.js CHANGED
@@ -94,7 +94,7 @@ function main() {
94
94
  }
95
95
  }
96
96
  function showHelp() {
97
- console.log("BoneScript compiler v0.6.1");
97
+ console.log("BoneScript compiler v0.6.2");
98
98
  console.log("");
99
99
  console.log("Usage:");
100
100
  console.log(" bonec compile <file> [--target <target>] Compile to runnable project");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bonescript-compiler",
3
- "version": "0.6.1",
3
+ "version": "0.6.2",
4
4
  "description": "BoneScript compiler — compile .bone system descriptions into complete, runnable Node.js backends",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -18,6 +18,7 @@
18
18
  ],
19
19
  "scripts": {
20
20
  "build": "tsc",
21
+ "prepare": "npm run build",
21
22
  "prepublishOnly": "npm run build",
22
23
  "start": "ts-node src/cli.ts",
23
24
  "test": "ts-node src/test.ts && ts-node src/test_typechecker.ts && ts-node src/test_nakama.ts"
@@ -39,11 +40,11 @@
39
40
  },
40
41
  "repository": {
41
42
  "type": "git",
42
- "url": "git+https://github.com/dantheman181/bonescript.git"
43
+ "url": "git+https://github.com/Doorman11991/BoneScript.git"
43
44
  },
44
- "homepage": "https://github.com/dantheman181/bonescript#readme",
45
+ "homepage": "https://github.com/Doorman11991/BoneScript#readme",
45
46
  "bugs": {
46
- "url": "https://github.com/dantheman181/bonescript/issues"
47
+ "url": "https://github.com/Doorman11991/BoneScript/issues"
47
48
  },
48
49
  "devDependencies": {
49
50
  "@types/node": "18.19.0",
package/src/cli.ts CHANGED
@@ -75,7 +75,7 @@ function main() {
75
75
  }
76
76
 
77
77
  function showHelp() {
78
- console.log("BoneScript compiler v0.6.1");
78
+ console.log("BoneScript compiler v0.6.2");
79
79
  console.log("");
80
80
  console.log("Usage:");
81
81
  console.log(" bonec compile <file> [--target <target>] Compile to runnable project");
@@ -1 +0,0 @@
1
- {"version":3,"file":"source_map.js","sourceRoot":"","sources":["../src/source_map.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAqBH,MAAa,gBAAgB;IAA7B;QACU,aAAQ,GAAoB,EAAE,CAAC;IA8DzC,CAAC;IA5DC,GAAG,CAAC,OAAsB;QACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACH,eAAe,CACb,aAAqB,EACrB,UAAkB,EAClB,UAAkB,EAClB,GAAgB;QAEhB,MAAM,QAAQ,GAAoB,EAAE,CAAC;QAErC,oCAAoC;QACpC,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACnC,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACnC,QAAQ,CAAC,IAAI,CAAC;oBACZ,cAAc,EAAE,aAAa;oBAC7B,cAAc,EAAE,CAAC,EAAE,oCAAoC;oBACvD,WAAW,EAAE,UAAU;oBACvB,WAAW,EAAE,CAAC,EAAK,mCAAmC;oBACtD,aAAa,EAAE,CAAC;oBAChB,UAAU,EAAE,GAAG,CAAC,EAAE;oBAClB,WAAW,EAAE,WAAW,MAAM,CAAC,IAAI,QAAQ,GAAG,CAAC,IAAI,EAAE;iBACtD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,4CAA4C;QAC5C,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAC/B,QAAQ,CAAC,IAAI,CAAC;gBACZ,cAAc,EAAE,aAAa;gBAC7B,cAAc,EAAE,CAAC;gBACjB,WAAW,EAAE,UAAU;gBACvB,WAAW,EAAE,CAAC;gBACd,aAAa,EAAE,CAAC;gBAChB,UAAU,EAAE,GAAG,CAAC,EAAE;gBAClB,WAAW,EAAE,UAAU,KAAK,CAAC,IAAI,GAAG;aACrC,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,UAAU;YAClB,WAAW,EAAE,UAAU;YACvB,QAAQ;SACT,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAkB,EAAE,UAAkB;QAC1C,OAAO;YACL,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,UAAU;YAClB,WAAW,EAAE,UAAU;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC;IACJ,CAAC;CACF;AA/DD,4CA+DC"}
package/dist/test.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /**
2
- * BoneScript Type Checker Tests
3
- * Verifies the type checker catches errors per spec/04_TYPE_SYSTEM.md.
4
- */
5
- export {};
@@ -1,126 +0,0 @@
1
- "use strict";
2
- /**
3
- * BoneScript Type Checker Tests
4
- * Verifies the type checker catches errors per spec/04_TYPE_SYSTEM.md.
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- const lexer_1 = require("./lexer");
8
- const parser_1 = require("./parser");
9
- const typechecker_1 = require("./typechecker");
10
- function compile(source) {
11
- const tokens = new lexer_1.Lexer(source).tokenize();
12
- const ast = new parser_1.Parser(tokens).parse();
13
- const checker = new typechecker_1.TypeChecker();
14
- return checker.check(ast);
15
- }
16
- let passed = 0;
17
- let failed = 0;
18
- function expect(name, source, expectedCode) {
19
- const errors = compile(source);
20
- if (expectedCode === null) {
21
- if (errors.length === 0) {
22
- console.log(` ✓ ${name}`);
23
- passed++;
24
- }
25
- else {
26
- console.log(` ✗ ${name}: expected no errors, got ${errors.length}`);
27
- for (const e of errors)
28
- console.log(` ${e.code}: ${e.message}`);
29
- failed++;
30
- }
31
- }
32
- else {
33
- const found = errors.find(e => e.code === expectedCode);
34
- if (found) {
35
- console.log(` ✓ ${name} (${expectedCode}: ${found.message})`);
36
- passed++;
37
- }
38
- else {
39
- console.log(` ✗ ${name}: expected ${expectedCode}, got [${errors.map(e => e.code).join(", ")}]`);
40
- for (const e of errors)
41
- console.log(` ${e.code}: ${e.message}`);
42
- failed++;
43
- }
44
- }
45
- }
46
- console.log("BoneScript Type Checker Tests\n");
47
- // ─── Valid Programs ──────────────────────────────────────────────────────────
48
- expect("Valid minimal system", `
49
- system Minimal {
50
- entity User {
51
- owns: [name: string]
52
- }
53
- capability greet(u: User) {
54
- requires: [u.name != ""]
55
- effects: [u.name = "greeted"]
56
- sync: eventual
57
- }
58
- }
59
- `, null);
60
- expect("Valid with set operations", `
61
- system SetOps {
62
- entity Bag {
63
- owns: [items: set<string>]
64
- }
65
- capability add_item(b: Bag, item: string) {
66
- requires: [b.items.size < 100]
67
- effects: [b.items += item]
68
- sync: transactional
69
- }
70
- }
71
- `, null);
72
- expect("Valid with numeric operations", `
73
- system NumOps {
74
- entity Counter {
75
- owns: [value: uint]
76
- constraints: [value >= 0, value <= 1000]
77
- }
78
- capability increment(c: Counter, amount: uint) {
79
- requires: [amount > 0]
80
- effects: [c.value += amount]
81
- sync: eventual
82
- }
83
- }
84
- `, null);
85
- // ─── Type Errors ─────────────────────────────────────────────────────────────
86
- expect("T009: Duplicate field name", `
87
- system DupField {
88
- entity Bad {
89
- owns: [name: string, name: uint]
90
- }
91
- }
92
- `, "T009");
93
- expect("T010: Undefined state in transition", `
94
- system BadState {
95
- entity Thing {
96
- owns: [x: uint]
97
- states: active -> nonexistent
98
- }
99
- }
100
- `, null); // states are just identifiers, both are "defined" by being in the graph
101
- expect("T012: Flow with less than 2 steps", `
102
- system BadFlow {
103
- entity Item { owns: [x: uint] }
104
- flow single_step {
105
- step one: do_thing(x)
106
- }
107
- }
108
- `, "T012");
109
- expect("T011: Emit undeclared event", `
110
- system BadEmit {
111
- entity User { owns: [name: string] }
112
- capability greet(u: User) {
113
- requires: [u.name != ""]
114
- effects: [u.name = "hi"]
115
- emits: NonExistentEvent
116
- sync: eventual
117
- }
118
- }
119
- `, "T011");
120
- // ─── Summary ─────────────────────────────────────────────────────────────────
121
- console.log(`\n═══════════════════════════════════════`);
122
- console.log(`Results: ${passed} passed, ${failed} failed`);
123
- console.log(`═══════════════════════════════════════`);
124
- if (failed > 0)
125
- process.exit(1);
126
- //# sourceMappingURL=test_typechecker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test_typechecker.js","sourceRoot":"","sources":["../src/test_typechecker.ts"],"names":[],"mappings":"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"}