@creuna/codegen

0.3.0 • Public • Published

codegen

This package has utilities for generating javascript files.

API

  • createComponentsFile(options)
  • createPagesFile(options)
  • createPathsFile(options)

These functions all take the same options object.

The functions read a provided directory and look for react components. All found components that have an index.js file and use the same name for the .jsx file and the containing folder name will be included in the generated files. The content of the generated files depends on what function is used.

Example file tree

/
  components
    component
      component.jsx
      index.js
    other-component
      blabla.jsx
      index.js
    another-component
      another-component.jsx

In this example, only component will be included. blabla.jsx does not match other-component, and another-component lacks an index.js file.

Options

  • fileHeader: String = "// NOTE: Do not edit this file. It is automatically generated." (String prepended to the generated file)

  • fileName: String (Name of the file to write)

  • outputPath: String (Full path to the folder in which to write the file)

  • prettierOptions: Object (Prettier options object, used to format the output file)

  • searchPath: String (The path in which to look for components)

  • fileExtension: String (The file extension you are working with. It will change the import style of the components. Written in the form .[fileExtension]. It defaults to '.jsx') (For example: '.tsx'.)

createComponentsFile

const { createComponentsFile } = require("@creuna/codegen");
const path = require("path");

createComponentsFile({
  searchPath: path.join(__dirname, "components"),
  fileName: "app.components.js",
  outputPath: __dirname,
  fileExtension: '.tsx'
});

app.components.js

// NOTE: Do not edit this file. It is automatically generated.
import Component from "./components/component";

export { Component };

createPagesFile

This function is inteded for use with static site generation. All valid components will be imported, parsed for metadata and exported from the resulting javascript file. The function supports passing metadata in comments using yaml syntax.

Example page component

/*
group: Eksempelgruppe
name: Eksempelside
path: /eksempelside
*/
import React from "react";
const ExamplePage = () => <div />;
export default ExamplePage;

createPagesFile

const { createPagesFile } = require("@creuna/codegen");
const path = require("path");

createPagesFile({
  fileName: "pages.js",
  searchPath: path.join(__dirname, "pages"),
  outputPath: __dirname,
  fileExtension: '.jsx'
});

pages.js

// NOTE: Do not edit this file. It is automatically generated.
import ExamplePage from "./example-page";

export default [
  {
    component: ExamplePage,
    group: "Eksempelgruppe",
    name: "Eksempelside",
    path: "/eksempelside"
  }
];

createPathsFile

This function is inteded for use with react-router. The generated file exports an array of paths (using commonJs syntax) that can be fed to react-router. yaml comments are respected.

Example page component

/*
path: /some-path
*/
import React from "react";
const ExamplePage = () => <div />;
export default ExamplePage;

createPathsFile

const { createPathsFile } = require("@creuna/codegen");
const path = require("path");

createPagesFile({
  fileName: "paths.js",
  searchPath: path.join(__dirname, "pages"),
  outputPath: __dirname
});

paths.js

// NOTE: Do not edit this file. It is automatically generated.
module.exports = ["/some-path"];

Readme

Keywords

none

Package Sidebar

Install

npm i @creuna/codegen

Weekly Downloads

26

Version

0.3.0

License

MIT

Unpacked Size

12.7 kB

Total Files

13

Last publish

Collaborators

  • jeyloh
  • atlekri
  • mariuswatz
  • mw.olsen
  • simon-garden-beach
  • setalid