Security News
The Risks of Misguided Research in Supply Chain Security
Snyk's use of malicious npm packages for research raises ethical concerns, highlighting risks in public deployment, data exfiltration, and unauthorized testing.
@eeue56/derw
Advanced tools
An Elm-inspired language that transpiles to TypeScript
npx @eeue56/derw
To get started:
Start a package via `derw init`
Compile via `derw compile`
Or compile and test via `derw test`
You can run the derw compiler via npx. You must provide files via --files
or be in a package directory.
npx @eeue56/derw
Let\'s write some Derw code
To get started:
Provide entry files via --files
Or run me without args inside a package directory
--files [string...]: Filenames to be given
--test : Test the project
--target ts | js | derw: Target TS, JS or Derw output
--output string: Output directory name
--verify : Run typescript compiler on generated files to ensure valid output
--debug : Show a parsed object tree
--only string: Only show a particular object
--run : Should be run via ts-node/node
--format : Format the files given in-place
--quiet : Keep it short and sweet
-h, --help : This help text
You can find a bunch of examples in examples, along with the Typescript they generate. But the general gist is: Elm-compatible syntax where possible.
type Result a b
= Err { error: a }
| Ok { value: b }
asIs : Result a b -> Result a b
asIs result =
case result of
Err { error } -> Err { error }
Ok { value } -> Ok { value }
[ ]
, [ 1, 2, 3 ]
, [ [ 1, 2, 3 ], [ 3, 2, 1 ] ]
true
, false
1 < 2
, 1 <= 2
, 1 == 2
, 1 != 2
, 1 > 2
, 1 >= 2
true && false
, not true
, true || false
""
, "hello world"
``
, `Hello ${name}`
-1
, 0
, 1
, -1.1
, 1.1
1 + 2
, "Hello" + name
2 - 1
2 * 1
2 / 1
[1, 2, 3] |> List.fold add
, List.fold add <| [1, 2, 3]
>>
, <<
hello = "hello world"
[ 1, 2, 3 ]
, [ "hello", "world" ]
[ 1..5 ]
, [ start..end ]
add : number -> number -> number
add x y = x + y
three = add 1 2
three = List.map identity [ 1, 2, 3 ]
type Result a b
= Err { error: a }
| Ok { value: b }
type Thing a = Thing a
type User =
{ name: string }
user: User
user = { name: string }
import List
import Result exposing ( map )
import something as banana
exposing ( map )
sayHiTo : User -> string
sayHiTo user =
let
name = user.name
in
"Hello " + name
sayHelloTo : User -> string
sayHelloTo user =
let
getName: User -> string
getName user = user.name
in
"Hello" + getName user
type Animal = Animal { age: number }
sayHiTo : Animal -> string
sayHiTo animal =
if animal.age == 1 of
"Hello little one!"
else
"You're old"
type Animal = Dog | Cat
sayHiTo : Animal -> string
sayHiTo animal =
case animal of
Dog -> "Hi dog!"
Cat -> "Hi cat!"
type User = User { name: string }
sayHiTo : User -> string
sayHiTo user =
case user of
User { name } -> "Hi " + name + !"
sayHiTo : string -> string
sayHiTo name =
case name of
"Noah" -> "Hi " + name + !"
default: "I don't know you"
sayHiTo : List number -> string
sayHiTo xs =
case xs of
[] -> "Empty"
x::ys -> "Hello " + x + (sayHiTo ys)
type User = User { name: string }
noah = User { name: "Noah" }
The name `Person` has been used for different things.
8 - 10:
```
type Person =
Person { name: string }
```
11 - 14:
```
type alias Person = {
name: string
}
```
The name `isTrue` has been used for different things.
0 - 3:
```
isTrue: boolean -> boolean
isTrue x =
x == true
```
4 - 7:
```
isTrue: boolean -> boolean
isTrue x =
x != true
```
Failed to parse examples/errors/mismatching_types.derw due to:
Error on lines 0 - 3
Expected `boolean` but got `number` in the body of the function:
```
isTrue: boolean -> boolean
isTrue x =
1 + 2
```
Error on lines 4 - 7
Expected `List string` but got `List number`:
```
names: List string
names =
[1..2]
```
\x -> x + 1
, \x y -> x + y
import "./other"
import "./something" as banana
import "./another" exposing ( isTrue, isFalse )
Warning! Failed to find `examples/derw_imports/banana` as either derw, ts or js
-- hello
isTrue: boolean -> boolean
isTrue x =
x
isTrue: boolean -> boolean
isTrue x =
-- hello
x
{-
hello
world
-}
isTrue: boolean -> boolean
isTrue x =
x
map: (a -> b) -> a -> b
map fn value =
fn value
Write a file with _test
as an extension (e.g List_test.derw
).
import Test exposing (equals)
testMath: boolean -> void
testMath a? =
equals 1 1
Compile it, then run bach via npx @eeue56/bach
derw --init
# inside a package directory
derw --test
exposing
insteadCurrently VSCode syntax highlighting is supported by this extension: https://github.com/eeue56/derw-syntax. It is not on the marketplace because Microsoft account creation was down when I tried.
Instead, you can do:
git clone https://github.com/eeue56/derw-syntax
cp -r derw-syntax ~/.vscode/extensions/derw-syntax-0.0.1
derw which means oak. Oak is one of the native trees in Wales, famous for it's long life, tall stature, and hard, good quality wood. An English speaker might pronounce it as "deh-ru".
FAQs
An Elm-inspired language that transpiles to TypeScript
The npm package @eeue56/derw receives a total of 2 weekly downloads. As such, @eeue56/derw popularity was classified as not popular.
We found that @eeue56/derw demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Snyk's use of malicious npm packages for research raises ethical concerns, highlighting risks in public deployment, data exfiltration, and unauthorized testing.
Research
Security News
Socket researchers found several malicious npm packages typosquatting Chalk and Chokidar, targeting Node.js developers with kill switches and data theft.
Security News
pnpm 10 blocks lifecycle scripts by default to improve security, addressing supply chain attack risks but sparking debate over compatibility and workflow changes.