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

tplfa-jsonnet

v1.2.0

Published

TS and JS bindings for wasm-compiled-from-go [Jsonnet](https://jsonnet.org/) json templating. Works in Node.js and browser environments.

Downloads

68

Readme

Jsonnet for TypeScript and JavaScript

Jsonnet is a templating extension of JSON.

The design is influenced by several configuration languages internal to Google, and embodies years of experience configuring some of the world's most complex IT systems. Jsonnet is now used by many companies and projects.

For the tplfa-jsonnet package, Jsonnet is compiled from Go to WASM and wrapped with helper functions.

The letters "tplfa" stay for "Templating for API", a project to provide a unified interface to generative AI providers. tplfa-jsonnet is the foundation part of the larger project.

Installation

npm install tplfa-jsonnet

Usage

Load the library in Node.js:

import 'tplfa-jsonnet/wasm_exec.js';
import { Jsonnet, getJsonnet } from 'tplfa-jsonnet/jsonnet';
...

const jsonnetWasm = await fs.promises.readFile(
  require.resolve('tplfa-jsonnet/libjsonnet.wasm')
);
jsonnet = await getJsonnet(jsonnetWasm);

Load the library in the browser:

<script src="/js/wasm_exec.js"></script>
<script src="/js/jsonnet-web.js"></script>
<script>
const jsonnetPromise = (async () => {
  console.log('Loading libjsonnet: started');
  const jnWasm = fetch('/js/libjsonnet.wasm');
  const jn = await getJsonnet(jnWasm);
  console.log('Loading libjsonnet: done');
  return jn;
})();
</script>

The jsonnet object provides two functions:

  • jsonnet_evaluate_snippet: Wrapper for the corresponding jsonnet library function
  • evaluate: Simplified interface. Only code, its external variables, and library files

The function signature:

evaluate: (
  //
  // Jsonnet code
  //
  code: string,

  //
  // Optional variables.
  // The values should be stringified.
  // For use in the Jsonnet code:
  //
  //   std.extVar("<var name>")
  //   std.parseJson(std.extVar("<var name>"))
  //
  extrStrs?: Record<string, string>,

  //
  // Optional library code. For use in the Jsonnet code:
  //
  //   import "<file name>"
  //
  files?: Record<string, string>

  //
  // Output: serialized JSON. Use `JSON.parse` to deserialize.
  //
) => Promise<string>;

Full examples

See:

Compatibility note

For old node versions, you need to edit the file wasm_exec.js. After the line use strict add line globalThis.crypto ??= require('crypto');. Maybe more changes are needed: https://github.com/golang/go/issues/53128.

License, contact

MIT

Jsonnet: Apache license 2.0

Oleg Parashchenko [email protected]