npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

liyad-cli

v0.1.2

Published

CLI and REPL for Liyad (Lisp yet another DSL interpreter).

Downloads

71

Readme

Liyad CLI

CLI and REPL for Liyad (Lisp yet another DSL interpreter).

Liyad

npm GitHub release Travis GitHub forks GitHub stars


Requirements

  • Node >= 10

Install

$ npm install -g liyad-cli
$ liyad --version

CLI Usage

Usage: liyad [options] [ -- ] [ -e script | script.lisp | - ] [ -- ] [arguments]
       liyad [options]

Options:
  -                     script read from stdin (default; interactive mode if a tty)
  --                    indicate the end of CLI options / script files
  -p, --profile=...     select interpreter profile
                          S                   S-expression parser
                          L, lisp (default)   lisp interpreter (return single value)
                          LM                  lisp interpreter (return multiple values)
                          L_async, lisp_async lisp interpreter (return single value, enable async)
                          LM_async            lisp interpreter (return multiple values, enable async)
                          LSX                 lisp interpreter (return single value, enable LSX)
                          LSX_async           lisp interpreter (return single value, enable LSX, enable async)
  --lsx-boot lsxboot.js LSX bootstrap JavaScript file; required if profile LSX or LSX_async is selected.
  --safe                run as safe mode (disable '$require' and '$node-require')
  -e, --eval=...        evaluate script
  -i, --interactive     always enter the REPL even if stdin does not appear to be a terminal
  -h, --help            print command line options
  -v, --version         print version informations
  --cli-version         print cli version informations

LSX bootstrap file example

lsxboot.js

const React = require('react');
const ReactDOMServer = require('react-dom/server');


class Hello extends React.Component {
    render() {
        return (React.createElement("div", {}, "hello"));
    }
}


exports.dom = React.createElement;
exports.flagment = React.Fragment;
exports.render = ReactDOMServer.renderToStaticMarkup;
exports.components = {
    Hello,
};

Packaging to the single executable file.

Use pkg.

$ npm install -g pkg
$ git clone https://github.com/shellyln/liyad-cli.git
$ cd liyad-cli
$ npm ci
$ pkg . --output liyad
$ ./liyad --version

Packaging and publish your codes as the NPM module.

See liyad-lisp-pkg-example and liyad-webapp-example

Usage of package:

$ npm install -g liyad-cli

$ mkdir myapp
$ cd myapp
$ npm install liyad-lisp-pkg-example

$ vi app.lisp

app.lisp

($let ex ($require "liyad-lisp-pkg-example"))

;; Benchmarks
($console-log (::ex:tarai 12 6 0))
($console-log (::ex:fib 10))
($console-log (::ex:fac 10))

;; Run the web server on port 3000.
($let url ($node-require "url"))

(::ex:#get "/" (-> (req res)
    ($let u (::url:parse ::req:url))
    (::res@writeHead 200 (# (Content-Type "text/html")))
    (::res@end ($concat "hit / ," ::req:method "," ::u:path)) ) )

(::ex:serve 3000) ($last "start server")
$ liyad app.lisp

12
55
3628800
start server

Additional operators and constants

$exit

  • ($exit [ code ])
    • Exit the process.
    • returns: never.
    • code: exit code.

$shell

  • ($shell command)
    • Run command.
    • returns: command output (stdout) string.
    • command: command and arguments.
      • example: ($shell "ls -al")

$shell-async

  • ($shell-async command)
    • Run command asynchronously.
    • returns: Promise object resolving command output (stdout) string.
    • command: command and arguments.
      • example: ($shell-async "ls -al")

$require

  • ($require id [ profile ])
    • Load lisp code from other file.
    • returns: Exported functions and variables.
    • id: Load from relative path if id starts with ./ or ../. Otherwise load from local or global node_modules.
    • profile: (optional) interpreter profile (S/L/lisp/LM/L_async/lisp_async/LM_async).
      • default value is selected by CLI option -p or --profile.

$node-require

  • ($node-require id)
    • Load JavaScript code from other file.
    • returns: Exported functions and variables.
    • id: Load from relative path if id starts with ./ or ../. Otherwise load from local or global node_modules.

$render

  • ($render jsxElement callback)
    • Render jsxElement by LSX-bootstrap.render() and pass rendering result string or error to callback.
    • returns: undefined
    • jsxElement: object returned by LSX-bootstrap.dom().
    • callback(error, html): callback function called on end of rendering jsxElement.
      • error: not null if error is occured.
      • html: rendering result html; null if error is occured.

Additional operator on REPL

$pause

  • ($pause [ cond ])
    • Pause execution and start debugger
    • returns: undefined
    • cond: if it present, pause if condition is true.

API

parseArgs

  • parseArgs(args)
    • Parse CLI arguments.
    • returns: config object.
    • args: CLI arguments.
  • example: parseArgs(['-p', 'LSX_async', '--lsx-boot', 'lsxboot.js', 'app.lisp'])

cliCore

  • cliCore(curDir, params)
    • Evaluate codes.
    • returns: undefined
    • curDir: current directory.
    • params: config object.
  • example: cliCore(fs.realpathSync(process.cwd()), parseArgs(process.argv.slice(2)))

cli

  • cli()
    • Run CLI.
    • returns: undefined

License

ISC
Copyright (c) 2018, Shellyl_N and Authors.