rip-lang 3.13.108 → 3.13.110
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/CHANGELOG.md +6 -0
- package/README.md +2 -2
- package/docs/RIP-LANG.md +9 -9
- package/docs/dist/rip.js +347 -33
- package/docs/dist/rip.min.js +170 -168
- package/docs/dist/rip.min.js.br +0 -0
- package/package.json +4 -1
- package/src/compiler.js +3 -2
- package/src/components.js +182 -5
- package/src/lexer.js +9 -9
- package/src/typecheck.js +74 -26
- package/src/types.js +68 -19
- package/src/ui.rip +59 -0
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,12 @@ All notable changes to Rip will be documented in this file.
|
|
|
7
7
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
8
8
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
9
9
|
|
|
10
|
+
## [Unreleased]
|
|
11
|
+
|
|
12
|
+
### Breaking — Merge Assign Operator
|
|
13
|
+
|
|
14
|
+
- **`*>` replaces `*` for merge assignment** — The merge-assign form is now `*>target = value` (including `*>@ = props`). The old `*target = value` form is removed.
|
|
15
|
+
|
|
10
16
|
## [3.13.16] - 2026-02-25
|
|
11
17
|
|
|
12
18
|
### Breaking — Merge `@rip-lang/api` into `@rip-lang/server`
|
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
</p>
|
|
10
10
|
|
|
11
11
|
<p align="center">
|
|
12
|
-
<a href="CHANGELOG.md"><img src="https://img.shields.io/badge/version-3.13.
|
|
12
|
+
<a href="CHANGELOG.md"><img src="https://img.shields.io/badge/version-3.13.110-blue.svg" alt="Version"></a>
|
|
13
13
|
<a href="#zero-dependencies"><img src="https://img.shields.io/badge/dependencies-ZERO-brightgreen.svg" alt="Dependencies"></a>
|
|
14
14
|
<a href="#"><img src="https://img.shields.io/badge/tests-1%2C436%2F1%2C436-brightgreen.svg" alt="Tests"></a>
|
|
15
15
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green.svg" alt="License"></a>
|
|
@@ -229,7 +229,7 @@ All use `globalThis` with `??=` — override any by redeclaring locally.
|
|
|
229
229
|
| `not in` | `x not in arr` | Negated membership test |
|
|
230
230
|
| `not of` | `k not of obj` | Negated key existence |
|
|
231
231
|
| `.=` (method assign) | `x .= trim()` | `x = x.trim()` — compound method assignment |
|
|
232
|
-
|
|
|
232
|
+
| `*>` (merge assign) | `*>obj = {a: 1}` | `Object.assign(obj, {a: 1})` |
|
|
233
233
|
| `or return` | `x = get() or return err` | Guard clause (Ruby-style) |
|
|
234
234
|
| `?? throw` | `x = get() ?? throw err` | Nullish guard |
|
|
235
235
|
|
package/docs/RIP-LANG.md
CHANGED
|
@@ -326,7 +326,7 @@ Multiple lines
|
|
|
326
326
|
| `<` `<=` | Chained comparison | `1 < x < 10` | `(1 < x) && (x < 10)` |
|
|
327
327
|
| `\|>` | Pipe | `x \|> fn` or `x \|> fn(y)` | `fn(x)` or `fn(x, y)` |
|
|
328
328
|
| `.=` | Method assign | `x .= trim()` | `x = x.trim()` |
|
|
329
|
-
|
|
|
329
|
+
| `*>` | Merge assign | `*>obj = {a: 1}` | `Object.assign(obj, {a: 1})` |
|
|
330
330
|
| `not in` | Not in | `x not in arr` | Negated membership test |
|
|
331
331
|
| `not of` | Not of | `k not of obj` | Negated key existence |
|
|
332
332
|
| `<=>` | Two-way bind | `value <=> name` | Bidirectional reactive binding (render blocks) |
|
|
@@ -535,37 +535,37 @@ str.=trim() # compact (no spaces)
|
|
|
535
535
|
str .=trim() # mixed
|
|
536
536
|
```
|
|
537
537
|
|
|
538
|
-
## Merge Assignment (
|
|
538
|
+
## Merge Assignment (`*>`)
|
|
539
539
|
|
|
540
540
|
A Rip original. Merge properties into an existing object without repeating
|
|
541
541
|
its name:
|
|
542
542
|
|
|
543
543
|
```coffee
|
|
544
|
-
# Without
|
|
544
|
+
# Without *> — repeat the object name or use verbose Object.assign
|
|
545
545
|
Object.assign config,
|
|
546
546
|
host: "localhost"
|
|
547
547
|
port: 3000
|
|
548
548
|
debug: true
|
|
549
549
|
|
|
550
|
-
# With
|
|
551
|
-
|
|
550
|
+
# With *> — clean and direct
|
|
551
|
+
*>config =
|
|
552
552
|
host: "localhost"
|
|
553
553
|
port: 3000
|
|
554
554
|
debug: true
|
|
555
555
|
|
|
556
556
|
# Single line
|
|
557
|
-
|
|
557
|
+
*>opts = {method: "POST", body: data}
|
|
558
558
|
|
|
559
559
|
# Dotted paths
|
|
560
|
-
|
|
560
|
+
*>el.style =
|
|
561
561
|
color: "red"
|
|
562
562
|
fontSize: "14px"
|
|
563
563
|
|
|
564
564
|
# Merge user overrides into defaults
|
|
565
|
-
|
|
565
|
+
*>defaults = userConfig
|
|
566
566
|
```
|
|
567
567
|
|
|
568
|
-
|
|
568
|
+
`*>target = value` compiles to `Object.assign(target, value)`. The `*>` reads
|
|
569
569
|
as "spread these into" — the same concept as `...` spread but as an
|
|
570
570
|
assignment. This is unique to Rip.
|
|
571
571
|
|