diff --git a/packages/cli/.gitignore b/packages/cli/.gitignore index 5ea56bd..138f9c6 100644 --- a/packages/cli/.gitignore +++ b/packages/cli/.gitignore @@ -1,2 +1,2 @@ example-create -./example-init \ No newline at end of file +example-init \ No newline at end of file diff --git a/packages/cli/src/create.ts b/packages/cli/src/create.ts index 9e413fd..808b990 100644 --- a/packages/cli/src/create.ts +++ b/packages/cli/src/create.ts @@ -5,6 +5,8 @@ import path from "path"; import prompts from "prompts"; import type { PackageJson } from "type-fest"; import loading from "loading-cli"; +import { promises as fs } from "fs"; +import { renderFile } from "ejs"; export async function create(directory: string) { // Init the NPM Package @@ -59,6 +61,7 @@ export async function create(directory: string) { keywords: responses.keywords, author: responses.author, license: responses.license, + main: "./index.js", }; if (responses.repository) { @@ -88,12 +91,23 @@ export async function create(directory: string) { "npm run build:ldo & npm run generate-readme"; packageJson.scripts[ "genenerate-readme" - ] = `ldo generate-readme --readme ./README.md --shapes ./.shapes --ldo ./ldo`; + ] = `ldo generate-readme --project ./ --shapes ./.shapes --ldo ./.ldo`; return packageJson; }); - load.text = "Generating README"; + // Create index.js + load.text = "Generating index.js"; + const ldoDir = await fs.readdir(path.join(directory, "./.ldo"), { + withFileTypes: true, + }); + const indexText = await renderFile( + path.join(__dirname, "./templates/readme/projectIndex.ejs"), + { fileNames: ldoDir.map((file) => file.name) }, + ); + await fs.writeFile(path.join(directory, "index.js"), indexText); + // Generate ReadMe + load.text = "Generating README"; await generateReadme({ project: directory, shapes: path.join(directory, ".shapes"), diff --git a/packages/cli/src/generateReadme.ts b/packages/cli/src/generateReadme.ts index 0c25067..c0df82f 100644 --- a/packages/cli/src/generateReadme.ts +++ b/packages/cli/src/generateReadme.ts @@ -49,6 +49,8 @@ export async function generateReadme(options: GenerateReadmeOptions) { shapeTypeName: `${interfaceName}ShapeType`, }); }); + + shapes.push(shape); }); const readmeEjsOptions: ReadmeEjsOptions = { diff --git a/packages/cli/src/templates/readme/projectIndex.ejs b/packages/cli/src/templates/readme/projectIndex.ejs new file mode 100644 index 0000000..4f844eb --- /dev/null +++ b/packages/cli/src/templates/readme/projectIndex.ejs @@ -0,0 +1,2 @@ +<% fileNames.forEach((fileName) => { %>export * from "./.ldo/<%- fileName %>"; +<% }); %> \ No newline at end of file diff --git a/packages/cli/src/templates/readme/shape.ejs b/packages/cli/src/templates/readme/shape.ejs index 58f5f0a..9973581 100644 --- a/packages/cli/src/templates/readme/shape.ejs +++ b/packages/cli/src/templates/readme/shape.ejs @@ -11,17 +11,17 @@ const ldoDataset = createLdoDataset(); const example<%= index %>: <%= type.typeName %> = ldoDataset .usingType(<%= type.shapeTypeName %>) .fromSubject("http://example.com/example<%= index %>"); -<%> }); <%> +<% }); %> ``` ### ShEx Typings ```shex -<%= shape.shex %> +<%- shape.shex %> ``` ### TypeScript Typings ```typescript -<%= shape.typescript %> +<%- shape.typescript %> ```