bonescript-compiler 0.2.0

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 (146) hide show
  1. package/LICENSE +21 -0
  2. package/dist/algorithm_catalog.d.ts +32 -0
  3. package/dist/algorithm_catalog.js +323 -0
  4. package/dist/algorithm_catalog.js.map +1 -0
  5. package/dist/ast.d.ts +244 -0
  6. package/dist/ast.js +8 -0
  7. package/dist/ast.js.map +1 -0
  8. package/dist/cli.d.ts +4 -0
  9. package/dist/cli.js +605 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/emit_batch.d.ts +7 -0
  12. package/dist/emit_batch.js +133 -0
  13. package/dist/emit_batch.js.map +1 -0
  14. package/dist/emit_capability.d.ts +7 -0
  15. package/dist/emit_capability.js +376 -0
  16. package/dist/emit_capability.js.map +1 -0
  17. package/dist/emit_composition.d.ts +22 -0
  18. package/dist/emit_composition.js +184 -0
  19. package/dist/emit_composition.js.map +1 -0
  20. package/dist/emit_deploy.d.ts +9 -0
  21. package/dist/emit_deploy.js +191 -0
  22. package/dist/emit_deploy.js.map +1 -0
  23. package/dist/emit_events.d.ts +14 -0
  24. package/dist/emit_events.js +305 -0
  25. package/dist/emit_events.js.map +1 -0
  26. package/dist/emit_extras.d.ts +12 -0
  27. package/dist/emit_extras.js +234 -0
  28. package/dist/emit_extras.js.map +1 -0
  29. package/dist/emit_full.d.ts +13 -0
  30. package/dist/emit_full.js +273 -0
  31. package/dist/emit_full.js.map +1 -0
  32. package/dist/emit_maintenance.d.ts +16 -0
  33. package/dist/emit_maintenance.js +442 -0
  34. package/dist/emit_maintenance.js.map +1 -0
  35. package/dist/emit_runtime.d.ts +13 -0
  36. package/dist/emit_runtime.js +691 -0
  37. package/dist/emit_runtime.js.map +1 -0
  38. package/dist/emit_sourcemap.d.ts +29 -0
  39. package/dist/emit_sourcemap.js +123 -0
  40. package/dist/emit_sourcemap.js.map +1 -0
  41. package/dist/emit_tests.d.ts +15 -0
  42. package/dist/emit_tests.js +185 -0
  43. package/dist/emit_tests.js.map +1 -0
  44. package/dist/emit_websocket.d.ts +6 -0
  45. package/dist/emit_websocket.js +223 -0
  46. package/dist/emit_websocket.js.map +1 -0
  47. package/dist/emitter.d.ts +25 -0
  48. package/dist/emitter.js +511 -0
  49. package/dist/emitter.js.map +1 -0
  50. package/dist/extension_manager.d.ts +38 -0
  51. package/dist/extension_manager.js +170 -0
  52. package/dist/extension_manager.js.map +1 -0
  53. package/dist/formatter.d.ts +34 -0
  54. package/dist/formatter.js +317 -0
  55. package/dist/formatter.js.map +1 -0
  56. package/dist/index.d.ts +42 -0
  57. package/dist/index.js +113 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/ir.d.ts +168 -0
  60. package/dist/ir.js +10 -0
  61. package/dist/ir.js.map +1 -0
  62. package/dist/lexer.d.ts +195 -0
  63. package/dist/lexer.js +619 -0
  64. package/dist/lexer.js.map +1 -0
  65. package/dist/lowering.d.ts +25 -0
  66. package/dist/lowering.js +500 -0
  67. package/dist/lowering.js.map +1 -0
  68. package/dist/module_loader.d.ts +25 -0
  69. package/dist/module_loader.js +126 -0
  70. package/dist/module_loader.js.map +1 -0
  71. package/dist/optimizer.d.ts +26 -0
  72. package/dist/optimizer.js +158 -0
  73. package/dist/optimizer.js.map +1 -0
  74. package/dist/parse_decls.d.ts +13 -0
  75. package/dist/parse_decls.js +442 -0
  76. package/dist/parse_decls.js.map +1 -0
  77. package/dist/parse_decls2.d.ts +13 -0
  78. package/dist/parse_decls2.js +295 -0
  79. package/dist/parse_decls2.js.map +1 -0
  80. package/dist/parse_expr.d.ts +7 -0
  81. package/dist/parse_expr.js +197 -0
  82. package/dist/parse_expr.js.map +1 -0
  83. package/dist/parse_types.d.ts +6 -0
  84. package/dist/parse_types.js +51 -0
  85. package/dist/parse_types.js.map +1 -0
  86. package/dist/parser.d.ts +10 -0
  87. package/dist/parser.js +62 -0
  88. package/dist/parser.js.map +1 -0
  89. package/dist/parser_base.d.ts +19 -0
  90. package/dist/parser_base.js +50 -0
  91. package/dist/parser_base.js.map +1 -0
  92. package/dist/parser_recovery.d.ts +26 -0
  93. package/dist/parser_recovery.js +140 -0
  94. package/dist/parser_recovery.js.map +1 -0
  95. package/dist/scaffold.d.ts +13 -0
  96. package/dist/scaffold.js +376 -0
  97. package/dist/scaffold.js.map +1 -0
  98. package/dist/solver.d.ts +26 -0
  99. package/dist/solver.js +281 -0
  100. package/dist/solver.js.map +1 -0
  101. package/dist/typechecker.d.ts +52 -0
  102. package/dist/typechecker.js +534 -0
  103. package/dist/typechecker.js.map +1 -0
  104. package/dist/types.d.ts +38 -0
  105. package/dist/types.js +85 -0
  106. package/dist/types.js.map +1 -0
  107. package/dist/verifier.d.ts +46 -0
  108. package/dist/verifier.js +307 -0
  109. package/dist/verifier.js.map +1 -0
  110. package/package.json +52 -0
  111. package/src/algorithm_catalog.ts +345 -0
  112. package/src/ast.ts +334 -0
  113. package/src/cli.ts +624 -0
  114. package/src/emit_batch.ts +140 -0
  115. package/src/emit_capability.ts +436 -0
  116. package/src/emit_composition.ts +196 -0
  117. package/src/emit_deploy.ts +190 -0
  118. package/src/emit_events.ts +307 -0
  119. package/src/emit_extras.ts +240 -0
  120. package/src/emit_full.ts +309 -0
  121. package/src/emit_maintenance.ts +459 -0
  122. package/src/emit_runtime.ts +731 -0
  123. package/src/emit_sourcemap.ts +140 -0
  124. package/src/emit_tests.ts +205 -0
  125. package/src/emit_websocket.ts +229 -0
  126. package/src/emitter.ts +566 -0
  127. package/src/extension_manager.ts +187 -0
  128. package/src/formatter.ts +297 -0
  129. package/src/index.ts +88 -0
  130. package/src/ir.ts +215 -0
  131. package/src/lexer.ts +630 -0
  132. package/src/lowering.ts +556 -0
  133. package/src/module_loader.ts +114 -0
  134. package/src/optimizer.ts +196 -0
  135. package/src/parse_decls.ts +409 -0
  136. package/src/parse_decls2.ts +244 -0
  137. package/src/parse_expr.ts +197 -0
  138. package/src/parse_types.ts +54 -0
  139. package/src/parser.ts +64 -0
  140. package/src/parser_base.ts +57 -0
  141. package/src/parser_recovery.ts +153 -0
  142. package/src/scaffold.ts +375 -0
  143. package/src/solver.ts +330 -0
  144. package/src/typechecker.ts +591 -0
  145. package/src/types.ts +122 -0
  146. package/src/verifier.ts +348 -0
package/dist/lexer.js ADDED
@@ -0,0 +1,619 @@
1
+ "use strict";
2
+ /**
3
+ * bone lexer
4
+ * Converts source text into a token stream.
5
+ *
6
+ * This is a hand-written lexer (not regex-based) for precise error reporting
7
+ * and deterministic behavior. It implements the lexical rules from spec/02_GRAMMAR.peg.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.Lexer = exports.LexerError = exports.TokenKind = void 0;
11
+ // ─── Token Types ─────────────────────────────────────────────────────────────
12
+ var TokenKind;
13
+ (function (TokenKind) {
14
+ // Structural
15
+ TokenKind["LBrace"] = "LBrace";
16
+ TokenKind["RBrace"] = "RBrace";
17
+ TokenKind["LBracket"] = "LBracket";
18
+ TokenKind["RBracket"] = "RBracket";
19
+ TokenKind["LParen"] = "LParen";
20
+ TokenKind["RParen"] = "RParen";
21
+ TokenKind["LAngle"] = "LAngle";
22
+ TokenKind["RAngle"] = "RAngle";
23
+ TokenKind["Colon"] = "Colon";
24
+ TokenKind["Comma"] = "Comma";
25
+ TokenKind["Dot"] = "Dot";
26
+ TokenKind["DotDot"] = "DotDot";
27
+ TokenKind["Arrow"] = "Arrow";
28
+ TokenKind["Pipe"] = "Pipe";
29
+ TokenKind["Semicolon"] = "Semicolon";
30
+ // Operators
31
+ TokenKind["Equals"] = "Equals";
32
+ TokenKind["EqEq"] = "EqEq";
33
+ TokenKind["NotEq"] = "NotEq";
34
+ TokenKind["LtEq"] = "LtEq";
35
+ TokenKind["GtEq"] = "GtEq";
36
+ TokenKind["Plus"] = "Plus";
37
+ TokenKind["Minus"] = "Minus";
38
+ TokenKind["Star"] = "Star";
39
+ TokenKind["Slash"] = "Slash";
40
+ TokenKind["Percent"] = "Percent";
41
+ TokenKind["PlusEq"] = "PlusEq";
42
+ TokenKind["MinusEq"] = "MinusEq";
43
+ TokenKind["AppendEq"] = "AppendEq";
44
+ TokenKind["Question"] = "Question";
45
+ TokenKind["Bang"] = "Bang";
46
+ // Literals
47
+ TokenKind["StringLiteral"] = "StringLiteral";
48
+ TokenKind["IntLiteral"] = "IntLiteral";
49
+ TokenKind["FloatLiteral"] = "FloatLiteral";
50
+ // Keywords (each keyword is its own token kind for unambiguous parsing)
51
+ TokenKind["KwSystem"] = "KwSystem";
52
+ TokenKind["KwEntity"] = "KwEntity";
53
+ TokenKind["KwCapability"] = "KwCapability";
54
+ TokenKind["KwChannel"] = "KwChannel";
55
+ TokenKind["KwStore"] = "KwStore";
56
+ TokenKind["KwEvent"] = "KwEvent";
57
+ TokenKind["KwConstraint"] = "KwConstraint";
58
+ TokenKind["KwPolicy"] = "KwPolicy";
59
+ TokenKind["KwFlow"] = "KwFlow";
60
+ TokenKind["KwImport"] = "KwImport";
61
+ TokenKind["KwFrom"] = "KwFrom";
62
+ TokenKind["KwDomain"] = "KwDomain";
63
+ TokenKind["KwOwns"] = "KwOwns";
64
+ TokenKind["KwConstraints"] = "KwConstraints";
65
+ TokenKind["KwStates"] = "KwStates";
66
+ TokenKind["KwAuth"] = "KwAuth";
67
+ TokenKind["KwRelation"] = "KwRelation";
68
+ TokenKind["KwIndex"] = "KwIndex";
69
+ TokenKind["KwDerived"] = "KwDerived";
70
+ TokenKind["KwRequires"] = "KwRequires";
71
+ TokenKind["KwEffects"] = "KwEffects";
72
+ TokenKind["KwEmits"] = "KwEmits";
73
+ TokenKind["KwSync"] = "KwSync";
74
+ TokenKind["KwTimeout"] = "KwTimeout";
75
+ TokenKind["KwRetry"] = "KwRetry";
76
+ TokenKind["KwIdempotent"] = "KwIdempotent";
77
+ TokenKind["KwTransport"] = "KwTransport";
78
+ TokenKind["KwOrdering"] = "KwOrdering";
79
+ TokenKind["KwParticipants"] = "KwParticipants";
80
+ TokenKind["KwPersistence"] = "KwPersistence";
81
+ TokenKind["KwFilter"] = "KwFilter";
82
+ TokenKind["KwMaxSize"] = "KwMaxSize";
83
+ TokenKind["KwEngine"] = "KwEngine";
84
+ TokenKind["KwSchema"] = "KwSchema";
85
+ TokenKind["KwRetention"] = "KwRetention";
86
+ TokenKind["KwPartition"] = "KwPartition";
87
+ TokenKind["KwReplicas"] = "KwReplicas";
88
+ TokenKind["KwPayload"] = "KwPayload";
89
+ TokenKind["KwDelivery"] = "KwDelivery";
90
+ TokenKind["KwTtl"] = "KwTtl";
91
+ TokenKind["KwRateLimit"] = "KwRateLimit";
92
+ TokenKind["KwAccess"] = "KwAccess";
93
+ TokenKind["KwAudit"] = "KwAudit";
94
+ TokenKind["KwEncryption"] = "KwEncryption";
95
+ TokenKind["KwStep"] = "KwStep";
96
+ TokenKind["KwCompensate"] = "KwCompensate";
97
+ TokenKind["KwPer"] = "KwPer";
98
+ TokenKind["KwHasOne"] = "KwHasOne";
99
+ TokenKind["KwHasMany"] = "KwHasMany";
100
+ TokenKind["KwBelongsTo"] = "KwBelongsTo";
101
+ TokenKind["KwManyToMany"] = "KwManyToMany";
102
+ // Auth methods
103
+ TokenKind["KwJwt"] = "KwJwt";
104
+ TokenKind["KwOauth2"] = "KwOauth2";
105
+ TokenKind["KwApikey"] = "KwApikey";
106
+ TokenKind["KwSession"] = "KwSession";
107
+ // Transport types
108
+ TokenKind["KwWebsocket"] = "KwWebsocket";
109
+ TokenKind["KwSse"] = "KwSse";
110
+ TokenKind["KwPolling"] = "KwPolling";
111
+ TokenKind["KwGrpcStream"] = "KwGrpcStream";
112
+ // Ordering types
113
+ TokenKind["KwCausal"] = "KwCausal";
114
+ TokenKind["KwFifo"] = "KwFifo";
115
+ TokenKind["KwTotal"] = "KwTotal";
116
+ TokenKind["KwUnordered"] = "KwUnordered";
117
+ // Engine types
118
+ TokenKind["KwPostgresql"] = "KwPostgresql";
119
+ TokenKind["KwRedis"] = "KwRedis";
120
+ TokenKind["KwMongodb"] = "KwMongodb";
121
+ TokenKind["KwSqlite"] = "KwSqlite";
122
+ TokenKind["KwS3"] = "KwS3";
123
+ TokenKind["KwDynamodb"] = "KwDynamodb";
124
+ // Delivery modes
125
+ TokenKind["KwAtLeastOnce"] = "KwAtLeastOnce";
126
+ TokenKind["KwAtMostOnce"] = "KwAtMostOnce";
127
+ TokenKind["KwExactlyOnce"] = "KwExactlyOnce";
128
+ // Encryption modes
129
+ TokenKind["KwAtRest"] = "KwAtRest";
130
+ TokenKind["KwInTransit"] = "KwInTransit";
131
+ TokenKind["KwBoth"] = "KwBoth";
132
+ // Sync modes
133
+ TokenKind["KwRealtime"] = "KwRealtime";
134
+ TokenKind["KwEventual"] = "KwEventual";
135
+ TokenKind["KwBatch"] = "KwBatch";
136
+ TokenKind["KwTransactional"] = "KwTransactional";
137
+ // Retry fields
138
+ TokenKind["KwMaxAttempts"] = "KwMaxAttempts";
139
+ TokenKind["KwBackoff"] = "KwBackoff";
140
+ TokenKind["KwInterval"] = "KwInterval";
141
+ // Primitive types
142
+ TokenKind["KwString"] = "KwString";
143
+ TokenKind["KwUint"] = "KwUint";
144
+ TokenKind["KwInt"] = "KwInt";
145
+ TokenKind["KwFloat"] = "KwFloat";
146
+ TokenKind["KwBool"] = "KwBool";
147
+ TokenKind["KwTimestamp"] = "KwTimestamp";
148
+ TokenKind["KwUuid"] = "KwUuid";
149
+ TokenKind["KwBytes"] = "KwBytes";
150
+ TokenKind["KwMap"] = "KwMap";
151
+ TokenKind["KwJson"] = "KwJson";
152
+ // Generic type constructors
153
+ TokenKind["KwSet"] = "KwSet";
154
+ TokenKind["KwList"] = "KwList";
155
+ TokenKind["KwOptional"] = "KwOptional";
156
+ TokenKind["KwResult"] = "KwResult";
157
+ // Boolean literals
158
+ TokenKind["KwTrue"] = "KwTrue";
159
+ TokenKind["KwFalse"] = "KwFalse";
160
+ TokenKind["KwNone"] = "KwNone";
161
+ // Logical operators
162
+ TokenKind["KwAnd"] = "KwAnd";
163
+ TokenKind["KwOr"] = "KwOr";
164
+ TokenKind["KwNot"] = "KwNot";
165
+ TokenKind["KwIn"] = "KwIn";
166
+ TokenKind["KwContains"] = "KwContains";
167
+ TokenKind["KwUnique"] = "KwUnique";
168
+ // Persistence modes
169
+ TokenKind["KwFull"] = "KwFull";
170
+ // Composition (Leap 1)
171
+ TokenKind["KwPipeline"] = "KwPipeline";
172
+ TokenKind["KwParallel"] = "KwParallel";
173
+ TokenKind["KwOnError"] = "KwOnError";
174
+ TokenKind["KwReturns"] = "KwReturns";
175
+ // Algorithm catalog (Leap 2)
176
+ TokenKind["KwAlgorithm"] = "KwAlgorithm";
177
+ TokenKind["KwUsing"] = "KwUsing";
178
+ // Extension points
179
+ TokenKind["KwExtensionPoint"] = "KwExtensionPoint";
180
+ TokenKind["KwStable"] = "KwStable";
181
+ TokenKind["KwLanguage"] = "KwLanguage";
182
+ // Special
183
+ TokenKind["KwNow"] = "KwNow";
184
+ // Identifier (anything not a keyword)
185
+ TokenKind["Identifier"] = "Identifier";
186
+ // End of file
187
+ TokenKind["EOF"] = "EOF";
188
+ })(TokenKind || (exports.TokenKind = TokenKind = {}));
189
+ // ─── Keyword Table ───────────────────────────────────────────────────────────
190
+ const KEYWORDS = {
191
+ system: TokenKind.KwSystem,
192
+ entity: TokenKind.KwEntity,
193
+ capability: TokenKind.KwCapability,
194
+ channel: TokenKind.KwChannel,
195
+ store: TokenKind.KwStore,
196
+ event: TokenKind.KwEvent,
197
+ constraint: TokenKind.KwConstraint,
198
+ policy: TokenKind.KwPolicy,
199
+ flow: TokenKind.KwFlow,
200
+ import: TokenKind.KwImport,
201
+ from: TokenKind.KwFrom,
202
+ domain: TokenKind.KwDomain,
203
+ owns: TokenKind.KwOwns,
204
+ constraints: TokenKind.KwConstraints,
205
+ states: TokenKind.KwStates,
206
+ auth: TokenKind.KwAuth,
207
+ relation: TokenKind.KwRelation,
208
+ index: TokenKind.KwIndex,
209
+ derived: TokenKind.KwDerived,
210
+ requires: TokenKind.KwRequires,
211
+ effects: TokenKind.KwEffects,
212
+ emits: TokenKind.KwEmits,
213
+ sync: TokenKind.KwSync,
214
+ timeout: TokenKind.KwTimeout,
215
+ retry: TokenKind.KwRetry,
216
+ idempotent: TokenKind.KwIdempotent,
217
+ transport: TokenKind.KwTransport,
218
+ ordering: TokenKind.KwOrdering,
219
+ participants: TokenKind.KwParticipants,
220
+ persistence: TokenKind.KwPersistence,
221
+ filter: TokenKind.KwFilter,
222
+ max_size: TokenKind.KwMaxSize,
223
+ engine: TokenKind.KwEngine,
224
+ schema: TokenKind.KwSchema,
225
+ retention: TokenKind.KwRetention,
226
+ partition: TokenKind.KwPartition,
227
+ replicas: TokenKind.KwReplicas,
228
+ payload: TokenKind.KwPayload,
229
+ delivery: TokenKind.KwDelivery,
230
+ ttl: TokenKind.KwTtl,
231
+ rate_limit: TokenKind.KwRateLimit,
232
+ access: TokenKind.KwAccess,
233
+ audit: TokenKind.KwAudit,
234
+ encryption: TokenKind.KwEncryption,
235
+ step: TokenKind.KwStep,
236
+ compensate: TokenKind.KwCompensate,
237
+ per: TokenKind.KwPer,
238
+ has_one: TokenKind.KwHasOne,
239
+ has_many: TokenKind.KwHasMany,
240
+ belongs_to: TokenKind.KwBelongsTo,
241
+ many_to_many: TokenKind.KwManyToMany,
242
+ jwt: TokenKind.KwJwt,
243
+ oauth2: TokenKind.KwOauth2,
244
+ apikey: TokenKind.KwApikey,
245
+ session: TokenKind.KwSession,
246
+ websocket: TokenKind.KwWebsocket,
247
+ sse: TokenKind.KwSse,
248
+ polling: TokenKind.KwPolling,
249
+ grpc_stream: TokenKind.KwGrpcStream,
250
+ causal: TokenKind.KwCausal,
251
+ fifo: TokenKind.KwFifo,
252
+ total: TokenKind.KwTotal,
253
+ unordered: TokenKind.KwUnordered,
254
+ postgresql: TokenKind.KwPostgresql,
255
+ redis: TokenKind.KwRedis,
256
+ mongodb: TokenKind.KwMongodb,
257
+ sqlite: TokenKind.KwSqlite,
258
+ s3: TokenKind.KwS3,
259
+ dynamodb: TokenKind.KwDynamodb,
260
+ at_least_once: TokenKind.KwAtLeastOnce,
261
+ at_most_once: TokenKind.KwAtMostOnce,
262
+ exactly_once: TokenKind.KwExactlyOnce,
263
+ at_rest: TokenKind.KwAtRest,
264
+ in_transit: TokenKind.KwInTransit,
265
+ both: TokenKind.KwBoth,
266
+ realtime: TokenKind.KwRealtime,
267
+ eventual: TokenKind.KwEventual,
268
+ batch: TokenKind.KwBatch,
269
+ transactional: TokenKind.KwTransactional,
270
+ max_attempts: TokenKind.KwMaxAttempts,
271
+ backoff: TokenKind.KwBackoff,
272
+ interval: TokenKind.KwInterval,
273
+ string: TokenKind.KwString,
274
+ uint: TokenKind.KwUint,
275
+ int: TokenKind.KwInt,
276
+ float: TokenKind.KwFloat,
277
+ bool: TokenKind.KwBool,
278
+ timestamp: TokenKind.KwTimestamp,
279
+ uuid: TokenKind.KwUuid,
280
+ bytes: TokenKind.KwBytes,
281
+ map: TokenKind.KwMap,
282
+ json: TokenKind.KwJson,
283
+ set: TokenKind.KwSet,
284
+ list: TokenKind.KwList,
285
+ optional: TokenKind.KwOptional,
286
+ result: TokenKind.KwResult,
287
+ true: TokenKind.KwTrue,
288
+ false: TokenKind.KwFalse,
289
+ none: TokenKind.KwNone,
290
+ and: TokenKind.KwAnd,
291
+ or: TokenKind.KwOr,
292
+ not: TokenKind.KwNot,
293
+ in: TokenKind.KwIn,
294
+ contains: TokenKind.KwContains,
295
+ unique: TokenKind.KwUnique,
296
+ full: TokenKind.KwFull,
297
+ now: TokenKind.KwNow,
298
+ pipeline: TokenKind.KwPipeline,
299
+ parallel: TokenKind.KwParallel,
300
+ on_error: TokenKind.KwOnError,
301
+ returns: TokenKind.KwReturns,
302
+ algorithm: TokenKind.KwAlgorithm,
303
+ using: TokenKind.KwUsing,
304
+ extension_point: TokenKind.KwExtensionPoint,
305
+ stable: TokenKind.KwStable,
306
+ language: TokenKind.KwLanguage,
307
+ };
308
+ // ─── Lexer Error ─────────────────────────────────────────────────────────────
309
+ class LexerError extends Error {
310
+ constructor(message, loc) {
311
+ super(`Lexer error at ${loc.line}:${loc.column}: ${message}`);
312
+ this.loc = loc;
313
+ this.name = "LexerError";
314
+ }
315
+ }
316
+ exports.LexerError = LexerError;
317
+ // ─── Lexer ───────────────────────────────────────────────────────────────────
318
+ class Lexer {
319
+ constructor(source) {
320
+ this.pos = 0;
321
+ this.line = 1;
322
+ this.column = 1;
323
+ this.tokens = [];
324
+ // Strip BOM if present
325
+ if (source.charCodeAt(0) === 0xFEFF) {
326
+ source = source.slice(1);
327
+ }
328
+ this.source = source;
329
+ }
330
+ tokenize() {
331
+ while (this.pos < this.source.length) {
332
+ this.skipWhitespaceAndComments();
333
+ if (this.pos >= this.source.length)
334
+ break;
335
+ const token = this.nextToken();
336
+ if (token) {
337
+ this.tokens.push(token);
338
+ }
339
+ }
340
+ this.tokens.push({
341
+ kind: TokenKind.EOF,
342
+ value: "",
343
+ loc: this.currentLoc(),
344
+ });
345
+ return this.tokens;
346
+ }
347
+ currentLoc() {
348
+ return { line: this.line, column: this.column, offset: this.pos };
349
+ }
350
+ peek() {
351
+ return this.source[this.pos] ?? "";
352
+ }
353
+ peekAt(offset) {
354
+ return this.source[this.pos + offset] ?? "";
355
+ }
356
+ advance() {
357
+ const ch = this.source[this.pos];
358
+ this.pos++;
359
+ if (ch === "\n") {
360
+ this.line++;
361
+ this.column = 1;
362
+ }
363
+ else {
364
+ this.column++;
365
+ }
366
+ return ch;
367
+ }
368
+ skipWhitespaceAndComments() {
369
+ while (this.pos < this.source.length) {
370
+ const ch = this.peek();
371
+ // Whitespace
372
+ if (ch === " " || ch === "\t" || ch === "\r" || ch === "\n") {
373
+ this.advance();
374
+ continue;
375
+ }
376
+ // Line comment
377
+ if (ch === "/" && this.peekAt(1) === "/") {
378
+ this.advance(); // /
379
+ this.advance(); // /
380
+ while (this.pos < this.source.length && this.peek() !== "\n") {
381
+ this.advance();
382
+ }
383
+ continue;
384
+ }
385
+ // Block comment
386
+ if (ch === "/" && this.peekAt(1) === "*") {
387
+ this.advance(); // /
388
+ this.advance(); // *
389
+ while (this.pos < this.source.length) {
390
+ if (this.peek() === "*" && this.peekAt(1) === "/") {
391
+ this.advance(); // *
392
+ this.advance(); // /
393
+ break;
394
+ }
395
+ this.advance();
396
+ }
397
+ continue;
398
+ }
399
+ break;
400
+ }
401
+ }
402
+ nextToken() {
403
+ const loc = this.currentLoc();
404
+ const ch = this.peek();
405
+ // Multi-character operators (check longest first)
406
+ if (ch === "<" && this.peekAt(1) === "<" && this.peekAt(2) === "=") {
407
+ this.advance();
408
+ this.advance();
409
+ this.advance();
410
+ return { kind: TokenKind.AppendEq, value: "<<=", loc };
411
+ }
412
+ if (ch === "-" && this.peekAt(1) === ">") {
413
+ this.advance();
414
+ this.advance();
415
+ return { kind: TokenKind.Arrow, value: "->", loc };
416
+ }
417
+ if (ch === "=" && this.peekAt(1) === "=") {
418
+ this.advance();
419
+ this.advance();
420
+ return { kind: TokenKind.EqEq, value: "==", loc };
421
+ }
422
+ if (ch === "!" && this.peekAt(1) === "=") {
423
+ this.advance();
424
+ this.advance();
425
+ return { kind: TokenKind.NotEq, value: "!=", loc };
426
+ }
427
+ if (ch === "<" && this.peekAt(1) === "=") {
428
+ this.advance();
429
+ this.advance();
430
+ return { kind: TokenKind.LtEq, value: "<=", loc };
431
+ }
432
+ if (ch === ">" && this.peekAt(1) === "=") {
433
+ this.advance();
434
+ this.advance();
435
+ return { kind: TokenKind.GtEq, value: ">=", loc };
436
+ }
437
+ if (ch === "+" && this.peekAt(1) === "=") {
438
+ this.advance();
439
+ this.advance();
440
+ return { kind: TokenKind.PlusEq, value: "+=", loc };
441
+ }
442
+ if (ch === "-" && this.peekAt(1) === "=") {
443
+ this.advance();
444
+ this.advance();
445
+ return { kind: TokenKind.MinusEq, value: "-=", loc };
446
+ }
447
+ if (ch === "." && this.peekAt(1) === ".") {
448
+ this.advance();
449
+ this.advance();
450
+ return { kind: TokenKind.DotDot, value: "..", loc };
451
+ }
452
+ // Single-character operators
453
+ switch (ch) {
454
+ case "{":
455
+ this.advance();
456
+ return { kind: TokenKind.LBrace, value: "{", loc };
457
+ case "}":
458
+ this.advance();
459
+ return { kind: TokenKind.RBrace, value: "}", loc };
460
+ case "[":
461
+ this.advance();
462
+ return { kind: TokenKind.LBracket, value: "[", loc };
463
+ case "]":
464
+ this.advance();
465
+ return { kind: TokenKind.RBracket, value: "]", loc };
466
+ case "(":
467
+ this.advance();
468
+ return { kind: TokenKind.LParen, value: "(", loc };
469
+ case ")":
470
+ this.advance();
471
+ return { kind: TokenKind.RParen, value: ")", loc };
472
+ case "<":
473
+ this.advance();
474
+ return { kind: TokenKind.LAngle, value: "<", loc };
475
+ case ">":
476
+ this.advance();
477
+ return { kind: TokenKind.RAngle, value: ">", loc };
478
+ case ":":
479
+ this.advance();
480
+ return { kind: TokenKind.Colon, value: ":", loc };
481
+ case ",":
482
+ this.advance();
483
+ return { kind: TokenKind.Comma, value: ",", loc };
484
+ case ".":
485
+ this.advance();
486
+ return { kind: TokenKind.Dot, value: ".", loc };
487
+ case "|":
488
+ this.advance();
489
+ return { kind: TokenKind.Pipe, value: "|", loc };
490
+ case "=":
491
+ this.advance();
492
+ return { kind: TokenKind.Equals, value: "=", loc };
493
+ case "+":
494
+ this.advance();
495
+ return { kind: TokenKind.Plus, value: "+", loc };
496
+ case "-":
497
+ this.advance();
498
+ return { kind: TokenKind.Minus, value: "-", loc };
499
+ case "*":
500
+ this.advance();
501
+ return { kind: TokenKind.Star, value: "*", loc };
502
+ case "/":
503
+ this.advance();
504
+ return { kind: TokenKind.Slash, value: "/", loc };
505
+ case "%":
506
+ this.advance();
507
+ return { kind: TokenKind.Percent, value: "%", loc };
508
+ case "?":
509
+ this.advance();
510
+ return { kind: TokenKind.Question, value: "?", loc };
511
+ case "!":
512
+ this.advance();
513
+ return { kind: TokenKind.Bang, value: "!", loc };
514
+ case ";":
515
+ this.advance();
516
+ return { kind: TokenKind.Semicolon, value: ";", loc };
517
+ }
518
+ // String literal
519
+ if (ch === '"') {
520
+ return this.readString(loc);
521
+ }
522
+ // Number literal
523
+ if (this.isDigit(ch)) {
524
+ return this.readNumber(loc);
525
+ }
526
+ // Identifier or keyword
527
+ if (this.isIdentStart(ch)) {
528
+ return this.readIdentifierOrKeyword(loc);
529
+ }
530
+ throw new LexerError(`Unexpected character: '${ch}'`, loc);
531
+ }
532
+ readString(loc) {
533
+ this.advance(); // opening "
534
+ let value = "";
535
+ while (this.pos < this.source.length && this.peek() !== '"') {
536
+ if (this.peek() === "\\") {
537
+ this.advance(); // backslash
538
+ const escaped = this.advance();
539
+ switch (escaped) {
540
+ case "n":
541
+ value += "\n";
542
+ break;
543
+ case "r":
544
+ value += "\r";
545
+ break;
546
+ case "t":
547
+ value += "\t";
548
+ break;
549
+ case '"':
550
+ value += '"';
551
+ break;
552
+ case "\\":
553
+ value += "\\";
554
+ break;
555
+ default:
556
+ throw new LexerError(`Invalid escape sequence: \\${escaped}`, loc);
557
+ }
558
+ }
559
+ else {
560
+ value += this.advance();
561
+ }
562
+ }
563
+ if (this.pos >= this.source.length) {
564
+ throw new LexerError("Unterminated string literal", loc);
565
+ }
566
+ this.advance(); // closing "
567
+ return { kind: TokenKind.StringLiteral, value, loc };
568
+ }
569
+ readNumber(loc) {
570
+ let value = "";
571
+ while (this.pos < this.source.length && this.isDigit(this.peek())) {
572
+ value += this.advance();
573
+ }
574
+ // Check for float
575
+ if (this.peek() === "." && this.isDigit(this.peekAt(1))) {
576
+ value += this.advance(); // .
577
+ while (this.pos < this.source.length && this.isDigit(this.peek())) {
578
+ value += this.advance();
579
+ }
580
+ return { kind: TokenKind.FloatLiteral, value, loc };
581
+ }
582
+ // Check for duration suffix (not a separate token — part of the literal)
583
+ // Duration suffixes: ms, s, m, h, d
584
+ if (this.peek() === "m" && this.peekAt(1) === "s") {
585
+ value += this.advance();
586
+ value += this.advance();
587
+ return { kind: TokenKind.IntLiteral, value, loc };
588
+ }
589
+ if ((this.peek() === "s" || this.peek() === "m" || this.peek() === "h" || this.peek() === "d") &&
590
+ !this.isIdentChar(this.peekAt(1))) {
591
+ value += this.advance();
592
+ return { kind: TokenKind.IntLiteral, value, loc };
593
+ }
594
+ return { kind: TokenKind.IntLiteral, value, loc };
595
+ }
596
+ readIdentifierOrKeyword(loc) {
597
+ let value = "";
598
+ while (this.pos < this.source.length && this.isIdentChar(this.peek())) {
599
+ value += this.advance();
600
+ }
601
+ // Check keyword table
602
+ const kwKind = KEYWORDS[value];
603
+ if (kwKind !== undefined) {
604
+ return { kind: kwKind, value, loc };
605
+ }
606
+ return { kind: TokenKind.Identifier, value, loc };
607
+ }
608
+ isDigit(ch) {
609
+ return ch >= "0" && ch <= "9";
610
+ }
611
+ isIdentStart(ch) {
612
+ return (ch >= "a" && ch <= "z") || (ch >= "A" && ch <= "Z") || ch === "_";
613
+ }
614
+ isIdentChar(ch) {
615
+ return this.isIdentStart(ch) || this.isDigit(ch);
616
+ }
617
+ }
618
+ exports.Lexer = Lexer;
619
+ //# sourceMappingURL=lexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer.js","sourceRoot":"","sources":["../src/lexer.ts"],"names":[],"mappings":"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"}