rip-lang 2.8.9 → 2.9.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 CHANGED
@@ -9,9 +9,9 @@
9
9
  </p>
10
10
 
11
11
  <p align="center">
12
- <a href="CHANGELOG.md"><img src="https://img.shields.io/badge/version-2.8.8-blue.svg" alt="Version"></a>
12
+ <a href="CHANGELOG.md"><img src="https://img.shields.io/badge/version-2.9.0-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
- <a href="#"><img src="https://img.shields.io/badge/tests-1098%2F1098-brightgreen.svg" alt="Tests"></a>
14
+ <a href="#"><img src="https://img.shields.io/badge/tests-1115%2F1115-brightgreen.svg" alt="Tests"></a>
15
15
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green.svg" alt="License"></a>
16
16
  </p>
17
17
 
@@ -220,17 +220,14 @@ Rip includes optional packages for full-stack development:
220
220
 
221
221
  | Package | Purpose | Lines |
222
222
  |---------|---------|-------|
223
- | [@rip-lang/api](packages/api/) | Web framework (Sinatra-style) | ~595 |
224
- | [@rip-lang/server](packages/server/) | Multi-worker process manager | ~1,110 |
225
- | [@rip-lang/db](packages/db/) | DuckDB HTTP server | ~225 |
226
- | [@rip-lang/schema](packages/schema/) | ORM with reactive models | ~420 |
223
+ | [@rip-lang/api](packages/api/) | HTTP framework (Sinatra-style routing, 37 validators) | ~1,050 |
224
+ | [@rip-lang/server](packages/server/) | Multi-worker app server (hot reload, HTTPS, mDNS) | ~1,210 |
225
+ | [@rip-lang/db](packages/db/) | DuckDB server with official UI (pure Bun FFI) | ~1,740 |
227
226
 
228
227
  ```bash
229
- bun add @rip-lang/api @rip-lang/server
228
+ bun add -g @rip-lang/db # Installs everything (rip-lang + api + db)
230
229
  ```
231
230
 
232
- [Full stack documentation →](packages/README.md)
233
-
234
231
  ---
235
232
 
236
233
  ## Implicit Commas
@@ -263,7 +260,7 @@ rip file.rip # Run
263
260
  rip -c file.rip # Compile
264
261
  rip -t file.rip # Tokens
265
262
  rip -s file.rip # S-expressions
266
- bun run test # 1098 tests
263
+ bun run test # 1115 tests
267
264
  bun run parser # Rebuild parser
268
265
  bun run browser # Build browser bundle
269
266
  ```
@@ -7632,8 +7632,8 @@ function compileToJS(source, options = {}) {
7632
7632
  return new Compiler(options).compileToJS(source);
7633
7633
  }
7634
7634
  // src/browser.js
7635
- var VERSION = "2.8.9";
7636
- var BUILD_DATE = "2026-02-06@03:14:34GMT";
7635
+ var VERSION = "2.9.0";
7636
+ var BUILD_DATE = "2026-02-06@06:21:41GMT";
7637
7637
  var dedent = (s) => {
7638
7638
  const m = s.match(/^[ \t]*(?=\S)/gm);
7639
7639
  const i = Math.min(...(m || []).map((x) => x.length));
@@ -530,4 +530,4 @@ function __catchErrors(fn) {
530
530
  `),X=E.findIndex((G)=>G==="__DATA__");if(X!==-1){let G=E.slice(X+1);_=G.length>0?G.join(`
531
531
  `)+`
532
532
  `:"",$=E.slice(0,X).join(`
533
- `)}let A=new m1().tokenize($);if(this.options.showTokens)A.forEach((G)=>console.log(`${G[0].padEnd(12)} ${JSON.stringify(G[1])}`)),console.log();$1.lexer={tokens:A,pos:0,setInput:function(){},lex:function(){if(this.pos>=this.tokens.length)return 1;let G=this.tokens[this.pos++];return this.yytext=G[1],this.yylloc=G[2],G[0]}};let U;try{U=$1.parse($)}catch(G){if(/\?\s*\([^)]*\?[^)]*:[^)]*\)\s*:/.test($)||/\?\s+\w+\s+\?\s+/.test($))throw Error("Nested ternary operators are not supported. Use if/else statements instead.");throw G}if(this.options.showSExpr)console.log(o(U,0,!0)),console.log();let Y=new c({dataSection:_,skipReactiveRuntime:this.options.skipReactiveRuntime,reactiveVars:this.options.reactiveVars}),F=Y.compile(U);return{tokens:A,sexpr:U,code:F,data:_,reactiveVars:Y.reactiveVars}}compileToJS($){return this.compile($).code}compileToSExpr($){return this.compile($).sexpr}}function U3($,_={}){return new O1(_).compile($)}function S1($,_={}){return new O1(_).compileToJS($)}var Q3="2.8.9",W3="2026-02-06@03:14:34GMT",$3=($)=>{let _=$.match(/^[ \t]*(?=\S)/gm),E=Math.min(...(_||[]).map((X)=>X.length));return $.replace(RegExp(`^[ ]{${E}}`,"gm"),"").trim()};async function k2(){let $=document.querySelectorAll('script[type="text/rip"]');for(let _ of $){if(_.hasAttribute("data-rip-processed"))continue;try{let E=$3(_.textContent),X=S1(E);(0,eval)(X),_.setAttribute("data-rip-processed","true")}catch(E){console.error("Error compiling Rip script:",E),console.error("Script content:",_.textContent)}}}if(typeof document<"u")if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",k2);else k2();function X3($){try{let E=S1($).replace(/^let\s+[^;]+;\s*\n\s*/m,"");E=E.replace(/^const\s+/gm,"var ");let X=(0,eval)(E);if(X!==void 0)globalThis._=X;return X}catch(_){console.error("Rip compilation error:",_.message);return}}if(typeof globalThis<"u")globalThis.rip=X3;export{X3 as rip,k2 as processRipScripts,$1 as parser,o as formatSExpr,S1 as compileToJS,U3 as compile,Q3 as VERSION,m1 as Lexer,O1 as Compiler,c as CodeGenerator,W3 as BUILD_DATE};
533
+ `)}let A=new m1().tokenize($);if(this.options.showTokens)A.forEach((G)=>console.log(`${G[0].padEnd(12)} ${JSON.stringify(G[1])}`)),console.log();$1.lexer={tokens:A,pos:0,setInput:function(){},lex:function(){if(this.pos>=this.tokens.length)return 1;let G=this.tokens[this.pos++];return this.yytext=G[1],this.yylloc=G[2],G[0]}};let U;try{U=$1.parse($)}catch(G){if(/\?\s*\([^)]*\?[^)]*:[^)]*\)\s*:/.test($)||/\?\s+\w+\s+\?\s+/.test($))throw Error("Nested ternary operators are not supported. Use if/else statements instead.");throw G}if(this.options.showSExpr)console.log(o(U,0,!0)),console.log();let Y=new c({dataSection:_,skipReactiveRuntime:this.options.skipReactiveRuntime,reactiveVars:this.options.reactiveVars}),F=Y.compile(U);return{tokens:A,sexpr:U,code:F,data:_,reactiveVars:Y.reactiveVars}}compileToJS($){return this.compile($).code}compileToSExpr($){return this.compile($).sexpr}}function U3($,_={}){return new O1(_).compile($)}function S1($,_={}){return new O1(_).compileToJS($)}var Q3="2.9.0",W3="2026-02-06@06:21:41GMT",$3=($)=>{let _=$.match(/^[ \t]*(?=\S)/gm),E=Math.min(...(_||[]).map((X)=>X.length));return $.replace(RegExp(`^[ ]{${E}}`,"gm"),"").trim()};async function k2(){let $=document.querySelectorAll('script[type="text/rip"]');for(let _ of $){if(_.hasAttribute("data-rip-processed"))continue;try{let E=$3(_.textContent),X=S1(E);(0,eval)(X),_.setAttribute("data-rip-processed","true")}catch(E){console.error("Error compiling Rip script:",E),console.error("Script content:",_.textContent)}}}if(typeof document<"u")if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",k2);else k2();function X3($){try{let E=S1($).replace(/^let\s+[^;]+;\s*\n\s*/m,"");E=E.replace(/^const\s+/gm,"var ");let X=(0,eval)(E);if(X!==void 0)globalThis._=X;return X}catch(_){console.error("Rip compilation error:",_.message);return}}if(typeof globalThis<"u")globalThis.rip=X3;export{X3 as rip,k2 as processRipScripts,$1 as parser,o as formatSExpr,S1 as compileToJS,U3 as compile,Q3 as VERSION,m1 as Lexer,O1 as Compiler,c as CodeGenerator,W3 as BUILD_DATE};
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rip-lang",
3
- "version": "2.8.9",
3
+ "version": "2.9.0",
4
4
  "description": "A modern language that compiles to JavaScript",
5
5
  "type": "module",
6
6
  "main": "src/compiler.js",