septima-lang 0.0.21 → 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.
package/README.md ADDED
@@ -0,0 +1,435 @@
1
+ # Septima: An Overview
2
+
3
+ Septima is a programming language that closely follows JavaScript, not just in syntax but also in behavior. If you're familiar with JavaScript, you'll feel right at home with Septima's objects, arrays, functions, and built-in methods. However, Septima makes some deliberate departures from JavaScript to promote cleaner, more predictable code:
4
+
5
+ - It is immutable - variables cannot be reassigned after definition
6
+ - Side effect free - a computation is only affected by its inputs. The only "trace" that a computation leaves is the value that it computed.
7
+ - All expressions, including `if...else`, return values
8
+ - There are no `null` values - only `undefined`
9
+ - There's no automatic type coercion
10
+ - No global scope or `var` keyword - only lexical block scoping with `let`
11
+ - No classes or prototypes - You can create objects using JavaScript's standard object notation (`{a: 'foo'}`).
12
+
13
+ ## Why Septima?
14
+
15
+ Septima excels in scenarios where you need to safely execute user-provided code within your application, particularly in backend systems. Common use cases include:
16
+
17
+ - **Configuration as Code**: Allow users to write complex configuration logic using a familiar JavaScript-like syntax instead of being limited to static JSON or YAML files
18
+ - **Business Rules Engines**: Enable domain experts to define and maintain business rules in a familiar syntax without risking system stability
19
+ - **ETL Transformations**: Let users write data transformation logic that can safely process data without accessing external systems
20
+ - **Plugin Systems**: Implement extensible architectures where third-party code can be safely executed in a controlled environment
21
+ - **Customizable Workflows**: Allow users to define custom workflow logic while ensuring system security
22
+
23
+ Key benefits that make Septima ideal for these scenarios:
24
+
25
+ 1. **Secured**:
26
+
27
+ - No file system or network access
28
+ - No `eval()` or dynamic code execution
29
+ - No access to system resources
30
+
31
+ 2. **Reliable**:
32
+
33
+ - Functional programming paradigm (no loops) makes code more robust
34
+ - Immutability and lack of side effects make code easier to reason about
35
+ - No type coercion reduces unexpected behavior
36
+ - Modules allow you to organize and manage large Septima codebases
37
+
38
+ 3. **Friendly**:
39
+ - JavaScript-like syntax reduces learning curve
40
+ - Highly compatible with JavaScript - code ports easily in both directions
41
+
42
+ Unlike alternatives such as JavaScript's `vm` module or `eval()`, Septima provides a secure environment for running user-provided code without sacrificing expressiveness or ease of use. It strikes a balance between power and safety that makes it particularly well-suited for enterprise applications where reliability and security are paramount.
43
+
44
+ ## Table of Contents
45
+
46
+ - [Language Fundamentals](#language-fundamentals)
47
+ - [Numbers and Arithmetic](#numbers-and-arithmetic)
48
+ - [Booleans and Logic](#booleans-and-logic)
49
+ - [Control Flow and Expressions](#control-flow-and-expressions)
50
+ - [Variables and Immutability](#variables-and-immutability)
51
+ - [Arrays and Objects](#arrays-and-objects)
52
+ - [Conversions](#conversions)
53
+ - [Coding in Septima](#coding-in-septima)
54
+ - [Functions](#functions)
55
+ - [Extended Operators](#extended-operators)
56
+ - [Built-in Methods](#built-in-methods)
57
+ - [Console Output](#console-output-for-debugging)
58
+ - [Modules](#modules)
59
+ - [Error Handling](#error-handling)
60
+
61
+ ## Language Fundamentals
62
+
63
+ Like JavaScript, Septima works with familiar data types like numbers, strings, and booleans. However, its treatment of these types is more strict and predictable than JavaScript's loose type handling.
64
+
65
+ ### Numbers and Arithmetic
66
+
67
+ Numbers in Septima work similarly to JavaScript, but without the quirks. There's no automatic type coercion in arithmetic operations.
68
+
69
+ ```javascript
70
+ // Similar to JavaScript
71
+ 5 // Integer literal
72
+ 3.14 // Floating point literal
73
+ 8 * 2 // Multiplication
74
+ 3 + 1 // Addition
75
+
76
+ // Different from JavaScript - no type coercion
77
+ '5' + 3 // Error: Cannot add string and number
78
+ 5 + '3' // Error: Cannot add number and string
79
+ ```
80
+
81
+ ### Booleans and Logic
82
+
83
+ Boolean operations in Septima are similar to JavaScript but stricter. They only work with actual boolean values.
84
+
85
+ ```javascript
86
+ // Similar to JavaScript
87
+ true || false // Logical OR
88
+ true && false // Logical AND
89
+
90
+ // Different from JavaScript - no truthy/falsy values
91
+ 1 && 2 // Error: Expected boolean values
92
+ '' || 'default' // Error: Expected boolean values
93
+ ```
94
+
95
+ ### Control Flow and Expressions
96
+
97
+ Unlike JavaScript, all control structures in Septima are expressions that return values.
98
+
99
+ ```javascript
100
+ // Different from JavaScript - if expressions return values
101
+ let result = if (4 > 3) 200 else -100 // Valid in Septima
102
+
103
+ // Different from JavaScript - no if statements without else
104
+ if (x > 0) doSomething() // Error in Septima - must have else
105
+
106
+ // Ternary operator works the same as JavaScript
107
+ let result = (4 > 3) ? 200 : -100
108
+ ```
109
+
110
+ ### Variables and Immutability
111
+
112
+ One of the biggest differences from JavaScript is Septima's immutability. Variables cannot be reassigned after definition.
113
+
114
+ ```javascript
115
+ // Similar to JavaScript - initial definition
116
+ let x = 5
117
+
118
+ // Different from JavaScript - no reassignment
119
+ x = 6 // Error: Cannot reassign variables
120
+
121
+ // Different from JavaScript - no var or const
122
+ var y = 10 // Error: var is not supported
123
+ const z = 15 // Error: const is not supported
124
+ ```
125
+
126
+ ### Arrays and Objects
127
+
128
+ Arrays and objects in Septima are immutable by default, unlike their mutable JavaScript counterparts.
129
+
130
+ ```javascript
131
+ // Similar to JavaScript - creation and access
132
+ let arr = [1, 2, 3]
133
+ arr[0] // Returns 1
134
+
135
+ // Different from JavaScript - no mutation methods
136
+ arr.push(4) // Error: Arrays are immutable
137
+ arr[0] = 2 // Error: Arrays are immutable
138
+
139
+ // Object behavior
140
+ let obj = { a: 1, b: 2 }
141
+ obj.a // Returns 1
142
+
143
+ // Different from JavaScript - no mutation
144
+ obj.c = 3 // Error: Objects are immutable
145
+ obj.a = 2 // Error: Objects are immutable
146
+ ```
147
+
148
+ ### Conversions
149
+
150
+ Unlike JavaScript's automatic type coercion, Septima requires explicit conversion between different types. It provides three conversion functions that closely mirror their JavaScript counterparts in behavior.
151
+
152
+ The `String` function converts any value to its string representation:
153
+
154
+ ```javascript
155
+ String(42) // "42"
156
+ String(3.14) // "3.14"
157
+ String(true) // "true"
158
+ String(undefined) // "undefined"
159
+ ```
160
+
161
+ For objects and arrays, `String` produces a JSON representation of its argument:
162
+
163
+ ```javascript
164
+ String({ a: 1 }) // "{"a":1}"
165
+ String([1, 2]) // "[1,2]"
166
+ ```
167
+
168
+ The `Boolean` function implements standard truthiness rules, converting values to `true` or `false`:
169
+
170
+ ```javascript
171
+ Boolean(42) // true
172
+ Boolean(0) // false
173
+ Boolean('hello') // true
174
+ Boolean('') // false
175
+ Boolean(undefined) // false
176
+ Boolean({}) // true
177
+ Boolean([]) // true
178
+ ```
179
+
180
+ The `Number` function converts values to numbers where possible, returning `NaN` when conversion fails:
181
+
182
+ ```javascript
183
+ Number('42') // 42
184
+ Number('3.14') // 3.14
185
+ Number('abc') // NaN
186
+ Number(true) // 1
187
+ Number(false) // 0
188
+ Number(undefined) // NaN
189
+ ```
190
+
191
+ Unlike JavaScript, Septima requires these explicit conversions and does not perform automatic type coercion:
192
+
193
+ ```javascript
194
+ "42" + 7 // Error: Cannot add string and number
195
+ 7 + "42" // Error: Cannot add number and string
196
+ let x = if ("hello") 1 else -1 // Error: Condition must be boolean
197
+ ```
198
+
199
+ ## Coding in Septima
200
+
201
+ ### Functions
202
+
203
+ Functions in Septima are similar to JavaScript arrow functions, but with some key differences in scope and purity.
204
+
205
+ ```javascript
206
+ // Similar to JavaScript - arrow functions
207
+ const double = x => x * 2
208
+
209
+ // Different from JavaScript - no function declarations
210
+ function double(x) {
211
+ return x * 2
212
+ } // Error: Use arrow syntax
213
+
214
+ // Different from JavaScript - pure functions
215
+ let counter = 0
216
+ let increment = () => counter++ // Error: Cannot modify external state
217
+
218
+ // Different from JavaScript - no this binding
219
+ let obj = {
220
+ name: 'test',
221
+ getName: function () {
222
+ return this.name
223
+ }, // Error: No this keyword
224
+ }
225
+ ```
226
+
227
+ ### Extended Operators
228
+
229
+ #### Spread Operator (...)
230
+
231
+ The spread operator creates shallow copies of arrays and objects:
232
+
233
+ ```javascript
234
+ // Objects
235
+ let user = { name: 'Sam', id: 123 }
236
+ let userWithRole = { ...user, role: 'admin' } // { name: 'Sam', id: 123, role: 'admin' }
237
+
238
+ // Arrays
239
+ let numbers = [1, 2, 3]
240
+ let moreNumbers = [...numbers, 4, 5] // [1, 2, 3, 4, 5]
241
+ ```
242
+
243
+ #### Nullish Coalescing (??)
244
+
245
+ The nullish coalescing operator provides a way to handle undefined values:
246
+
247
+ ```javascript
248
+ let config = {
249
+ port: undefined,
250
+ host: 'localhost',
251
+ }
252
+
253
+ let port = config.port ?? 8080 // Returns 8080 (fallback when undefined)
254
+ let host = config.host ?? 'default' // Returns 'localhost' (keeps defined value)
255
+ ```
256
+
257
+ Note: Unlike JavaScript, Septima doesn't have `null`, so the nullish coalescing operator only works with `undefined`.
258
+
259
+ ### Built-in Methods
260
+
261
+ Septima provides common methods for working with arrays, strings, and objects. These methods follow JavaScript conventions while maintaining Septima's no-side-effects guarantee. As such, methods such as Array.push() are not supported.
262
+
263
+ #### Modifying Arrays
264
+
265
+ Instead of mutating methods like `push()` use the spread operator to create new arrays:
266
+
267
+ ```javascript
268
+ let nums = [1, 2, 3]
269
+ nums.push(4) // Error: Array.push is not supported
270
+ [...nums, 4] // Returns [1, 2, 3, 4]
271
+ ```
272
+
273
+ #### Array and String Methods
274
+
275
+ Transform strings and arrays using familiar methods (non-exhaustive list):
276
+
277
+ ```javascript
278
+ // String methods
279
+ 'hello'.toUpperCase() // Returns "HELLO"
280
+ 'hello_world'.split('_') // Returns ['hello', 'world']
281
+ ' piano '
282
+ .trim() // Returns "piano"
283
+
284
+ [
285
+ // Array methods
286
+ (1, 2, 3)
287
+ ].map(x => x * 2) // Returns [2, 4, 6]
288
+ [(19, 6, 8, 3, 10)].filter(x => x > 5) // Returns [19, 6, 8, 10]
289
+ [(1, 2, 3, 4)].reduce((a, b) => a + b, 0) // Returns 10
290
+ ```
291
+
292
+ #### Object Methods
293
+
294
+ Access and transform object properties and structure:
295
+
296
+ ```javascript
297
+ let user = {
298
+ name: 'Sam',
299
+ role: 'admin',
300
+ active: true,
301
+ }
302
+
303
+ // Get object keys as array
304
+ Object.keys(user) // Returns ['name', 'role', 'active']
305
+
306
+ // Get key-value pairs as array
307
+ Object.entries(user) // Returns [['name', 'Sam'], ['role', 'admin'], ['active', true]]
308
+
309
+ // Create object from key-value pairs
310
+ let pairs = [
311
+ ['name', 'Pat'],
312
+ ['role', 'user'],
313
+ ]
314
+ Object.fromEntries(pairs) // Returns { name: 'Pat', role: 'user' }
315
+ ```
316
+
317
+ #### Array.isArray()
318
+
319
+ Checks whether the given input is an array:
320
+
321
+ ```javascript
322
+ Array.isArray([1, 2, 3]) // Returns true
323
+ Array.isArray('not array') // Returns false
324
+ Array.isArray({ key: 'val' }) // Returns false
325
+ ```
326
+
327
+ #### Cryptographic Hashing
328
+
329
+ Septima provides a secure hashing function through the `crypto.hash224()` method, which computes SHA-224 hashes of any value. The method takes a single argument of any type and returns a hexadecimal string representing the hash.
330
+
331
+ ```javascript
332
+ // Hash a simple string
333
+ crypto.hash224('hello') // Returns a 56-character hex string
334
+
335
+ // Hash numbers
336
+ crypto.hash224(42) // Hashes the number 42
337
+
338
+ // Hash complex objects
339
+ crypto.hash224({ name: 'Alice', roles: ['admin', 'user'], settings: { theme: 'dark' } }) // Hashes the entire object structure
340
+
341
+ // Hashes are deterministic but unique per input
342
+ crypto.hash224('A') === crypto.hash224('A') // true (same input = same hash)
343
+ crypto.hash224('A') !== crypto.hash224('B') // true (different input = different hash)
344
+ ```
345
+
346
+ Note: Septima's `crypto` object is not intended to be compatible with Node.js's `crypto` module. It provides its own simplified cryptographic utilities specifically designed for Septima's use cases.
347
+
348
+ ### Console Output for Debugging
349
+
350
+ Like JavaScript, Septima provides `console.log()` for debugging and monitoring your code. However, unlike JavaScript's `console.log()` which can take multiple arguments, Septima's version accepts only a single argument. In keeping with Septima's functional nature, `console.log()` returns its argument, making it useful within expressions.
351
+
352
+ ```javascript
353
+ // Basic logging - single argument only
354
+ console.log('Hello World') // Prints: Hello World
355
+
356
+ // Different from JavaScript - can't log multiple values
357
+ console.log('x', 42) // Error: Too many arguments
358
+
359
+ // Logging within expressions works because console.log returns its argument
360
+ let result = 5 * console.log(3) // Prints: 3, returns: 15
361
+
362
+ // Logging with arrays and objects
363
+ let arr = [1, 2, 3]
364
+ console.log(arr) // Prints: [1, 2, 3]
365
+ let obj = { a: 1, b: 2 }
366
+ console.log(obj) // Prints: {"a":1,"b":2}
367
+
368
+ // To log multiple values, you need to combine them first
369
+ console.log([x, y, z]) // Use an array
370
+ console.log({ x: x, y: y, z: z }) // Or an object
371
+ console.log('x=' + x + ', y=' + y) // Or string concatenation
372
+ ```
373
+
374
+ ### Modules
375
+
376
+ Septima provides a module system for organizing code across files, supporting exports and namespace imports.
377
+
378
+ #### Exports
379
+
380
+ Use the `export` keyword to expose values from a module:
381
+
382
+ ```javascript
383
+ // utils.septima.js
384
+ export let capitalize = str => str.charAt(0).toUpperCase() + str.slice(1)
385
+
386
+ // config.septima.js
387
+ export let timeoutInSeconds = 30
388
+ export let retries = 3
389
+ ```
390
+
391
+ Key points:
392
+
393
+ - Only top-level definitions can be exported
394
+ - Multiple exports per file are allowed
395
+ - No default exports
396
+
397
+ #### Imports
398
+
399
+ Import using the namespace pattern:
400
+
401
+ ```javascript
402
+ import * as utils from './utils.septima.js'
403
+ import * as config from './config.septima.js'
404
+
405
+ // Use imported values
406
+ let result = utils.capitalize('hello')
407
+ let timeoutInMillis = config.timeoutInSeconds * 1000
408
+ ```
409
+
410
+ Key points:
411
+
412
+ - Files must end with `.septima.js`
413
+ - Only namespace imports (`* as`) supported
414
+ - Imports must be at file top
415
+ - Paths are relative to current file
416
+ - No circular dependencies
417
+
418
+ ### Error Handling
419
+
420
+ Unlike JavaScript's sometimes forgiving nature, Septima is strict about type checking and provides clear error messages. It doesn't do automatic type coercion or silent failures.
421
+
422
+ ```javascript
423
+ // JavaScript allows this
424
+ '5' + 3 // "53"
425
+
426
+ // Septima throws an error
427
+ '5' + 3 // Error: Cannot add string and number
428
+
429
+ // JavaScript returns undefined
430
+ let obj = {}
431
+ obj.nonexistent.prop // TypeError: Cannot read property 'prop' of undefined
432
+
433
+ // Septima provides better error message
434
+ obj.nonexistent.prop // Error: Attempting to access property of undefined
435
+ ```
package/change-log.md ADDED
@@ -0,0 +1,57 @@
1
+ ### PR/153
2
+
3
+ - allow semicolons before the expression: `;;; 4.8`
4
+ - allow shorthand notation attributes in an object: `let n = 42; { n }`
5
+
6
+ ### PR/163
7
+
8
+ - retire `sink` - it was too confusing + there are some things that undefined (in JS) can do but sink could not
9
+
10
+ ### PR/164
11
+
12
+ - `undefined` is now a first class value: `let x = undefined`
13
+ - `{a: undefined, n: 42}` is identical to `{n: 42}`
14
+ - `undefined ?? 42` is `42`
15
+
16
+ ### PR/165
17
+
18
+ - spreading `undefined` in an array is a no-op: `[42, ...undefined, 'poo']` is `[42, 'poo']`
19
+ - spreading `undefined` in an object is a no-op: `{n: 42, ...undefined, p: 'poo'}` is `{n: 42, p: 'poo'}`
20
+ - support `String(x)`, `Boolean(x)`, `Number(x)`
21
+
22
+ ### PR/168
23
+
24
+ - support `Array.isArray(x)`
25
+ - support `console.log('my message')`
26
+
27
+ ### PR/172
28
+
29
+ - supoort `JSON.parse(s)`
30
+ - supoort sorting an array: `[97, 100, 50].sort()`, `['the', 'quick', 'brown', 'fox'].sort((a, b) => a.length - b.length)`
31
+ - fix object comparsion
32
+
33
+ ### PR/173
34
+
35
+ - support block comments `4 + /* now five */ 5`
36
+ - support default values for function args: `(a, b = 1000) => a + b`
37
+ - inspect the runtime type of a value via `constructor.name`
38
+
39
+ ### PR/174
40
+
41
+ - allow a dangling comma after last formal arg of an arrow function `(a,b,) => a + b`
42
+
43
+ ### PR/176
44
+
45
+ - allow computing hash values: `crypto.hash224({a: 1, b: 2})`
46
+
47
+ ### PR/177
48
+
49
+ - support throwing: `throw "boom"`
50
+
51
+ ### PR/182
52
+
53
+ - support template literals: `` `name is ${x}` ``
54
+
55
+ ### PR/183
56
+
57
+ - support `const` keyword (behaves like `let`): `const x = 5`
@@ -42,6 +42,13 @@ export declare type ArrayLiteralPart = {
42
42
  tag: 'spread';
43
43
  v: AstNode;
44
44
  };
45
+ export declare type TemplatePart = {
46
+ tag: 'string';
47
+ value: string;
48
+ } | {
49
+ tag: 'expression';
50
+ expr: AstNode;
51
+ };
45
52
  export declare type Ident = {
46
53
  tag: 'ident';
47
54
  t: Token;
@@ -127,6 +134,12 @@ export declare type AstNode = Ident | FormalArg | Literal | Unit | {
127
134
  } | {
128
135
  tag: 'export*';
129
136
  unitId: UnitId;
137
+ } | {
138
+ tag: 'templateLiteral';
139
+ parts: TemplatePart[];
140
+ start: Token;
141
+ end: Token;
142
+ unitId: UnitId;
130
143
  };
131
144
  export declare function show(ast: AstNode | AstNode[]): string;
132
145
  export declare function span(ast: AstNode): Span;
@@ -57,6 +57,20 @@ function show(ast) {
57
57
  str: () => `'${ast.t.text}'`,
58
58
  });
59
59
  }
60
+ if (ast.tag === 'templateLiteral') {
61
+ const partsStr = ast.parts
62
+ .map(p => {
63
+ if (p.tag === 'string') {
64
+ return p.value;
65
+ }
66
+ if (p.tag === 'expression') {
67
+ return `\${${show(p.expr)}}`;
68
+ }
69
+ (0, should_never_happen_1.shouldNeverHappen)(p);
70
+ })
71
+ .join('');
72
+ return `\`${partsStr}\``;
73
+ }
60
74
  if (ast.tag === 'objectLiteral') {
61
75
  const pairs = ast.parts.map(p => {
62
76
  if (p.tag === 'computedName') {
@@ -136,6 +150,9 @@ function span(ast) {
136
150
  if (ast.tag === 'literal') {
137
151
  return ofToken(ast.t);
138
152
  }
153
+ if (ast.tag === 'templateLiteral') {
154
+ return ofRange(ofToken(ast.start), ofToken(ast.end));
155
+ }
139
156
  if (ast.tag === 'objectLiteral') {
140
157
  return ofRange(ofToken(ast.start), ofToken(ast.end));
141
158
  }
@@ -165,4 +182,4 @@ function span(ast) {
165
182
  (0, should_never_happen_1.shouldNeverHappen)(ast);
166
183
  }
167
184
  exports.span = span;
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN0LW5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXN0LW5vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsK0RBQXlEO0FBQ3pELDJDQUFzQztBQTBJdEMsU0FBZ0IsSUFBSSxDQUFDLEdBQXdCO0lBQzNDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN0QixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7S0FDOUM7SUFFRCxJQUFJLEdBQUcsQ0FBQyxHQUFHLEtBQUssY0FBYyxFQUFFO1FBQzlCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzlCLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEVBQUU7Z0JBQ3ZCLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTthQUNqQjtZQUVELElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUU7Z0JBQ3RCLE9BQU8sTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7YUFDekI7WUFFRCxJQUFBLHVDQUFpQixFQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3RCLENBQUMsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQTtLQUMvQjtJQUVELElBQUksR0FBRyxDQUFDLEdBQUcsS0FBSyxnQkFBZ0IsRUFBRTtRQUNoQyxPQUFPLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQTtL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
185
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN0LW5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXN0LW5vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsK0RBQXlEO0FBQ3pELDJDQUFzQztBQW1KdEMsU0FBZ0IsSUFBSSxDQUFDLEdBQXdCO0lBQzNDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN0QixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7S0FDOUM7SUFFRCxJQUFJLEdBQUcsQ0FBQyxHQUFHLEtBQUssY0FBYyxFQUFFO1FBQzlCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzlCLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEVBQUU7Z0JBQ3ZCLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTthQUNqQjtZQUVELElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUU7Z0JBQ3RCLE9BQU8sTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7YUFDekI7WUFFRCxJQUFBLHVDQUFpQixFQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3RCLENBQUMsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQTtLQUMvQjtJQUVELElBQUksR0FBRyxDQUFDLEdBQUcsS0FBSyxnQkFBZ0IsRUFBRTtRQUNoQyxPQUFPLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQTtL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
@@ -32,6 +32,7 @@ export declare class Parser {
32
32
  maybeLiteral(): AstNode | undefined;
33
33
  maybePrimitiveLiteral(): Literal | undefined;
34
34
  maybeStringLiteral(): Literal | undefined;
35
+ maybeTemplateLiteral(): AstNode | undefined;
35
36
  maybeCompositeLiteral(): AstNode | undefined;
36
37
  /**
37
38
  * This method assumes that the caller consumed the opening '[' token. It consumes the array's elements