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

jsonic-preprocessor

v1.3.2

Published

JSON Preprocessor

Downloads

7

Readme

JSONic

1.JSON

Simple properties:

	apples 5
	bottles 4
	bananas 3

 {
	apples: 5,
	bottles: 4,
	bananas: 3  
 }

Or more compact:

	fruits (
		apples 5
		bananas 3
	)
	bottles 4

 {
	fruits: {
		apples: 5,
		bananas: 3
	},
	bottles: 4
 }

Lists & dicts

To define a list:

	fruits "apples", "bananas", "oranges"

 {
	 fruits: ["apples", "bananas", "oranges"]
 }

To define a dict:

	fruits (
		apples 1
		bananas 4
	)

 {
	 fruits: {
		apples: 1,
		bananas: 4
	 }
 }

Types

JSONic support some types:

  • numbers
  • floats
  • ints
  • strings
  • js functions

String concatenation

To concat string:

	name "Alex" + "Yurchenko"

 {
	 name: "Alex" + "Yurchenko"
 }

Math

The math:

	apples 1 + 4
	bananas 2 * ( 1 + 3 )

 {
	 apples: 5,
	 bananas: 8
 }

2. Own features


Variables

To define variable:

	some_name = "Some value"

Variable support list type:

	some_name = ("Some Value", 1 + 3, "Das ist gut.")

To call list item:

	some_name(0) # => Some Value
	some_name(1) # => 4
	...

Comments

Single-line comment:

	# Hello World

Multi-line comment:

	#
		I am multi-line
	#

@uses

This command imports all variables from selected file. Syntax:

	@uses <file>

Example:

demo/math.jsonic
	PI_SHORT = 3.14
	PI_LONG = 3.14159265359
demo/app.jsonic
	@uses math
	PI_nums PI_SHORT
	PI_numl PI_LONG

 {
	 PI_nums: 3.14,
	 PI_numl: 3.14159265359
 }

Or shortly:

demo/math.jsonic
	PI = (3.14, 3.14159265359)
demo/app.jsonic
	@uses math
	PI_nums PI(0)
	PI_numl PI(1)

 {
	 PI_nums: 3.14,
	 PI_numl: 3.14159265359
 }

Functions

[!] The functions is not fully tested feature, and not fully supports by JS API.

Call JS function from global space. To define a function, use add_var.

Syntax:

variable = <name> <arguments>!

Example:

demo.js
let jsonic = require("./jsonic")
jsonic.add_var("log", function(text){
	console.log(text)
	return '""' // return must be quoted, we returning JSON content.
})
jsonic.object_file("demo.jsonic")
demo.jsonic
# Call log
call_example log "Hi"!

 alex-pc:~demos$ node demo.js
 Hi

String concatenation types

JSONic has many concatenation types, separated by result of parsing:

  • & symbol
	"Hello" & " " & "World" # => "Hello World"
  • + sign
	"Hello" + "World" # => "Hello" + "World"
  • And nq-concat(not quoted) in arguments of function.

Marks

The new update of JSONic is a marks. Mark contain part of code, that not parsed if found, but if call, replaces itself to parsed content. @uses imports all marks in including file.

Syntax:

When create:

<name> { <block> }

When call:

<name>?
marks.jsonic
	fruit_factories {
		apples (
			name "Giga-Factory"
			address "Carl St. 55"
		)
		bananas (
			name "Banana-Factory"
			address "Carl St. 53"
		)
	}
demo.jsonic
	@uses marks
	fruit_factories?
demo.js
	let jsonic = require("jsonic-preprocessor")
	jsonic.fwrite_result("demo.jsonic", "demo.json")
Terminal
alex-pc:~demos$ node demo.js
alex-pc:~demos$

demo.json
{
	"apples": {	
		"name": "Giga-Factory",
		"address": "Carl St. 55"
	},
	"bananas": {	
		"name": "Banana-Factory",
		"address": "Carl St. 53"
	}
}

JavaScript API


Require

To require jsonic api:

 let jsonic = require("./jsonic")

jsonic.object_file

This function reads file content and returns JSON string. Syntax:

	jsonic.object_file(<path>)

jsonic.object_string

Parses given string and returns JSON string. Syntax:

	jsonic.object_string(<path>)

Example:

 let jsonic = require("./jsonic")
 let string = "apples 1 bananas 3"
 let obj = JSON.parse(jsonic.object_string(string))

 console.log(obj["apples"] + "\n" + obj["bananas"]) // => 1 \n 3

jsonic.add_var

Add variable or function to global space. Syntax:

	jsonic.add_var(<name>, <value>)

jsonic.get_var

Gets var from global space. Syntax:

	jsonic.get_var(<name>)

jsonic.use_file

Use file like @uses. Syntax:

	jsonic.use_file(<name(without ".jsonic", in curr dir>)

jsonic.fwrite_result

Write result of preprocessing to file

Syntax:

	jsonic.fwrite_result(<from>, <to>)

jsonic.init_fns

Initialize all additional functions.

Syntax:

	jsonic.init_fns()

Additional functions


math

Have some math functions:

  • math.abs a!
  • math.acos a!
  • math.asin a!
  • math.atan a!
  • math.atan2 a,b!
  • math.ceil a!
  • math.cos a!
  • math.exp a!
  • math.floor a!
  • math.log a!
  • math.max a,b!
  • math.min a,b!
  • math.pow a,b!
  • math.random!
  • math.round a!
  • math.sin a!
  • math.sqrt a!
  • math.tan a!

print

The print command gets all arguments and print it:

print "Hello World", 4, 3 + 3! # => Hello World 4 6

date

Parses given template and returns date result. Template syntax:

  • d - day
  • m - month
  • n - minute
  • y - year
  • h - hour

Other characters will be ignored.

Example:

	curr_date = date "h:m"!
	print curr_date! # => 12:05

Changelog


1.0.0

First version.

1.1.0

Fixed some documentation bugs.

1.1.1

Fixed not-defined error when calling jsonic.

1.2.1

Fixed:

  • Documentation
  • Some other bugs

Added:

  • Function calling
  • Great formatting
  • object_string, object_file returns preprocessed string

Removed:

  • JSON object returning in object_string, object_file methods.

1.2.2

Fixed:

  • Documentation

1.3.2

Fixed:

  • When call just first function works
  • Documentation
  • Other bugs

Added:

  • New concatenation type
  • Marks
  • API Updates
  • Additional functions

Will be added

Site:

  • JSONic live editing

Preprocessor:

  • Function creating

Opportunity to create function inside .jsonic file without JS.

Example:

Math.PI {
	ret 3.14
}

demo Math.PI! # => demo: 3.14

And more, like IF, ELSE, ELSIF, etc...


If some not works, say me.

Documentation may not finished

I fix MANY bugs after some time. Test it with fun! Waiting for YouTube tutorials on Russian. After some time on English.

P.S: my english is not good, plz sorry for errors.


(C) Alexey Yurchenko, 2017