Skip to content

Latest commit

 

History

History
184 lines (134 loc) · 4.34 KB

README.md

File metadata and controls

184 lines (134 loc) · 4.34 KB

🧶 knitwork

npm version npm downloads codecov

Utilities to generate JavaScript code.

Install

# ✨ Auto-detect
npx nypm install knitwork

# npm
npm install knitwork

# yarn
yarn add knitwork

# pnpm
pnpm install knitwork

# bun
bun install knitwork

Usage

Generating ESM syntax:

import { genImport, genExport } from "knitwork";

// import foo from "pkg"
console.log(genImport("pkg", "foo"));

// import { foo } from "pkg"
console.log(genImport("pkg", ["foo"]));

// import { a, b } from "pkg"
console.log(genImport("pkg", ["a", "b"]));

// import { default as bar } from "pkg";
console.log(genImport("pkg", [{ name: "default", as: "bar" }]));

// import { foo as bar } from "pkg";
console.log(genImport("pkg", [{ name: "foo", as: "bar" }]));

// import foo from "pkg" assert { type: "json" };
console.log(genImport("pkg", "foo", { assert: { type: "json" } }));

// export foo from "pkg"
console.log(genExport("pkg", "foo"));

// export { a, b } from "pkg"
console.log(genExport("pkg", ["a", "b"]));

// export * as bar from "pkg"
console.log(genExport("pkg", { name: "*", as: "bar" }));

// export foo from "pkg" assert { type: "json" };
console.log(genExport("pkg", "foo", { assert: { type: "json" } }));

Generating TS:

import {
  genInterface,
  genAugmentation,
  genInlineTypeImport,
  genTypeImport,
  genTypeExport,
} from "knitwork";

// interface FooInterface extends A, B {
//   name: boolean
//   optional?: string
// }
console.log(
  genInterface(
    "FooInterface",
    { name: "boolean", "optional?": "string" },
    { extends: ["A", "B"] },
  ),
);
// declare module "my-module" {
//   interface MyInterface {}
// }
console.log(genAugmentation("my-module", { MyInterface: {} }));
// typeof import("my-module").genString'
console.log(genInlineTypeImport("my-module", "genString"));
// typeof import("my-module").default'
console.log(genInlineTypeImport("my-module"));
// import type { test as value } from "my-module";
console.log(genTypeImport("my-module", [{ name: "test", as: "value" }]));
// export type { test } from "my-module";
console.log(genTypeExport("my-module", ["test"]));

Serializing JS objects:

import {
  genObjectFromRaw,
  genObjectFromRawEntries,
  genArrayFromRaw,
} from "knitwork";

// { foo: 'bar', test: () => import("pkg") }
console.log(genObjectFromValues({ foo: "bar", test: '() => import("pkg")' }));

// { test: () => import("pkg") }
console.log(genObjectFromRaw({ test: '() => import("pkg")' }));

// { 0: [ test, () => import("pkg") ] }
console.log(genObjectFromRaw([["test", '() => import("pkg")']]));

const entries = Object.entries({
  a: 1,
  b: null,
  c: '"c"',
  nest: { hello: '"world"', fn: () => 1 },
});
// { a: 1, b: null, c: "c", nest: { hello: "world", fn: () => 1 } }
console.log(genObjectFromRawEntries(entries));

// [ 1, 2, () => import("pkg") ]
console.log(genArrayFromRaw(["1", "2", '() => import("pkg")']));

Generating safe variable names:

import { genSafeVariableName } from "knitwork";

// _123_32foo
genSafeVariableName("123 foo");
// _for
genSafeVariableName("for");

Contribution

Local development
  • Clone this repository
  • Install the latest LTS version of Node.js
  • Enable Corepack using corepack enable
  • Install dependencies using bun install
  • Run tests using bun dev

License

Published under the MIT license. Made by @pi0, @danielroe and community 💛


🤖 auto updated with automd