@stephansama/auto-readme 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -187,6 +187,7 @@ _Object containing the following properties:_
187
187
  | `defaultLanguage` | Default language to infer projects from | [Language](#language) | |
188
188
  | `disableEmojis` | Whether or not to use emojis in markdown table headings | `boolean` | `false` |
189
189
  | `disableMarkdownHeadings` | Whether or not to display markdown headings | `boolean` | `false` |
190
+ | `enablePrettier` | Whether or not to use prettier to format the files | `boolean` | `true` |
190
191
  | `enableToc` | generate table of contents for readmes | `boolean` | `false` |
191
192
  | `enableUsage` | Whether or not to enable usage plugin | `boolean` | `false` |
192
193
  | `headings` | List of headings for different table outputs | _Object with dynamic keys of type_ [Actions](#actions) _and values of type_ _Array of [Headings](#headings) items_ (_optional_) | `{"ACTION":["name","required","default","description"],"PKG":["name","version","devDependency"],"WORKSPACE":["name","version","downloads","description"],"ZOD":[]}` |
package/config/schema.cjs CHANGED
@@ -84,6 +84,9 @@ var _configSchema = import_zod.z.object({
84
84
  disableMarkdownHeadings: import_zod.z.boolean().default(false).meta({
85
85
  description: "Whether or not to display markdown headings"
86
86
  }),
87
+ enablePrettier: import_zod.z.boolean().default(true).meta({
88
+ description: "Whether or not to use prettier to format the files"
89
+ }),
87
90
  enableToc: import_zod.z.boolean().default(false).meta({
88
91
  alias: "t",
89
92
  description: "generate table of contents for readmes"
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/schema.js"],"sourcesContent":["import { z } from \"zod\";\n\nexport const actionsSchema = z\n\t.enum([\"ACTION\", \"PKG\", \"USAGE\", \"WORKSPACE\", \"ZOD\"])\n\t.describe(\"Comment action options\");\n\nexport const formatsSchema = z\n\t.enum([\"LIST\", \"TABLE\"])\n\t.default(\"TABLE\")\n\t.optional();\n\nexport const languageSchema = z.enum([\"JS\", \"RS\"]).optional().default(\"JS\");\n\nexport const headingsSchema = z\n\t.enum([\n\t\t\"default\",\n\t\t\"description\",\n\t\t\"devDependency\",\n\t\t\"downloads\",\n\t\t\"name\",\n\t\t\"private\",\n\t\t\"required\",\n\t\t\"version\",\n\t])\n\t.describe(\"Table heading options\");\n\nexport const tableHeadingsSchema = z\n\t.record(actionsSchema, headingsSchema.array().optional())\n\t.optional()\n\t.describe(\"Table heading action configuration\")\n\t.default({\n\t\tACTION: [\"name\", \"required\", \"default\", \"description\"],\n\t\tPKG: [\"name\", \"version\", \"devDependency\"],\n\t\tWORKSPACE: [\"name\", \"version\", \"downloads\", \"description\"],\n\t\tZOD: [],\n\t});\n\nexport const templatesSchema = z.object({\n\tdownloadImage: z\n\t\t.string()\n\t\t.optional()\n\t\t.default(\"https://img.shields.io/npm/dw/{{name}}?labelColor=211F1F\"),\n\temojis: z\n\t\t.record(headingsSchema, z.string())\n\t\t.optional()\n\t\t.describe(\"Table heading emojis used when enabled\")\n\t\t.default({\n\t\t\tdefault: \"⚙️\",\n\t\t\tdescription: \"📝\",\n\t\t\tdevDependency: \"💻\",\n\t\t\tdownloads: \"📥\",\n\t\t\tname: \"🏷️\",\n\t\t\tprivate: \"🔒\",\n\t\t\trequired: \"\",\n\t\t\tversion: \"\",\n\t\t}),\n\tregistryUrl: z\n\t\t.string()\n\t\t.optional()\n\t\t.default(\"https://www.npmjs.com/package/{{name}}\"),\n\tversionImage: z\n\t\t.string()\n\t\t.optional()\n\t\t.default(\n\t\t\t\"https://img.shields.io/npm/v/{{uri_name}}?logo=npm&logoColor=red&color=211F1F&labelColor=211F1F\",\n\t\t),\n});\n\nexport const defaultTemplates = templatesSchema.parse({});\nexport const defaultTableHeadings = tableHeadingsSchema.parse(undefined);\n\nconst _configSchema = z.object({\n\taffectedRegexes: z.string().array().optional().default([]),\n\tcollapseHeadings: z.string().array().optional().default([]),\n\tdefaultLanguage: languageSchema.meta({\n\t\talias: \"l\",\n\t\tdescription: \"Default language to infer projects from\",\n\t}),\n\tdisableEmojis: z.boolean().default(false).meta({\n\t\talias: \"e\",\n\t\tdescription: \"Whether or not to use emojis in markdown table headings\",\n\t}),\n\tdisableMarkdownHeadings: z.boolean().default(false).meta({\n\t\tdescription: \"Whether or not to display markdown headings\",\n\t}),\n\tenableToc: z.boolean().default(false).meta({\n\t\talias: \"t\",\n\t\tdescription: \"generate table of contents for readmes\",\n\t}),\n\tenableUsage: z.boolean().optional().default(false).meta({\n\t\tdescription: \"Whether or not to enable usage plugin\",\n\t}),\n\theadings: tableHeadingsSchema\n\t\t.optional()\n\t\t.default(defaultTableHeadings)\n\t\t.describe(\"List of headings for different table outputs\"),\n\tonlyReadmes: z.boolean().default(true).meta({\n\t\talias: \"r\",\n\t\tdescription: \"Whether or not to only traverse readmes\",\n\t}),\n\tonlyShowPublicPackages: z.boolean().default(false).meta({\n\t\talias: \"p\",\n\t\tdescription: \"Only show public packages in workspaces\",\n\t}),\n\tremoveScope: z.string().optional().default(\"\").meta({\n\t\tdescription: \"Remove common workspace scope\",\n\t}),\n\ttemplates: templatesSchema\n\t\t.optional()\n\t\t.default(defaultTemplates)\n\t\t.describe(\n\t\t\t\"Handlebars templates used to fuel list and table generation\",\n\t\t),\n\ttocHeading: z.string().optional().default(\"Table of contents\").meta({\n\t\tdescription: \"Markdown heading used to generate table of contents\",\n\t}),\n\tusageFile: z.string().optional().default(\"\").meta({\n\t\tdescription: \"Workspace level usage file\",\n\t}),\n\tusageHeading: z.string().optional().default(\"Usage\").meta({\n\t\tdescription: \"Markdown heading used to generate usage example\",\n\t}),\n\tverbose: z.boolean().default(false).meta({\n\t\talias: \"v\",\n\t\tdescription: \"whether or not to display verbose logging\",\n\t}),\n});\n\nexport const configSchema = _configSchema.optional();\n\n/** @typedef {Partial<z.infer<typeof _configSchema>>} Config */\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/schema.js"],"sourcesContent":["import { z } from \"zod\";\n\nexport const actionsSchema = z\n\t.enum([\"ACTION\", \"PKG\", \"USAGE\", \"WORKSPACE\", \"ZOD\"])\n\t.describe(\"Comment action options\");\n\nexport const formatsSchema = z\n\t.enum([\"LIST\", \"TABLE\"])\n\t.default(\"TABLE\")\n\t.optional();\n\nexport const languageSchema = z.enum([\"JS\", \"RS\"]).optional().default(\"JS\");\n\nexport const headingsSchema = z\n\t.enum([\n\t\t\"default\",\n\t\t\"description\",\n\t\t\"devDependency\",\n\t\t\"downloads\",\n\t\t\"name\",\n\t\t\"private\",\n\t\t\"required\",\n\t\t\"version\",\n\t])\n\t.describe(\"Table heading options\");\n\nexport const tableHeadingsSchema = z\n\t.record(actionsSchema, headingsSchema.array().optional())\n\t.optional()\n\t.describe(\"Table heading action configuration\")\n\t.default({\n\t\tACTION: [\"name\", \"required\", \"default\", \"description\"],\n\t\tPKG: [\"name\", \"version\", \"devDependency\"],\n\t\tWORKSPACE: [\"name\", \"version\", \"downloads\", \"description\"],\n\t\tZOD: [],\n\t});\n\nexport const templatesSchema = z.object({\n\tdownloadImage: z\n\t\t.string()\n\t\t.optional()\n\t\t.default(\"https://img.shields.io/npm/dw/{{name}}?labelColor=211F1F\"),\n\temojis: z\n\t\t.record(headingsSchema, z.string())\n\t\t.optional()\n\t\t.describe(\"Table heading emojis used when enabled\")\n\t\t.default({\n\t\t\tdefault: \"⚙️\",\n\t\t\tdescription: \"📝\",\n\t\t\tdevDependency: \"💻\",\n\t\t\tdownloads: \"📥\",\n\t\t\tname: \"🏷️\",\n\t\t\tprivate: \"🔒\",\n\t\t\trequired: \"\",\n\t\t\tversion: \"\",\n\t\t}),\n\tregistryUrl: z\n\t\t.string()\n\t\t.optional()\n\t\t.default(\"https://www.npmjs.com/package/{{name}}\"),\n\tversionImage: z\n\t\t.string()\n\t\t.optional()\n\t\t.default(\n\t\t\t\"https://img.shields.io/npm/v/{{uri_name}}?logo=npm&logoColor=red&color=211F1F&labelColor=211F1F\",\n\t\t),\n});\n\nexport const defaultTemplates = templatesSchema.parse({});\nexport const defaultTableHeadings = tableHeadingsSchema.parse(undefined);\n\nconst _configSchema = z.object({\n\taffectedRegexes: z.string().array().optional().default([]),\n\tcollapseHeadings: z.string().array().optional().default([]),\n\tdefaultLanguage: languageSchema.meta({\n\t\talias: \"l\",\n\t\tdescription: \"Default language to infer projects from\",\n\t}),\n\tdisableEmojis: z.boolean().default(false).meta({\n\t\talias: \"e\",\n\t\tdescription: \"Whether or not to use emojis in markdown table headings\",\n\t}),\n\tdisableMarkdownHeadings: z.boolean().default(false).meta({\n\t\tdescription: \"Whether or not to display markdown headings\",\n\t}),\n\tenablePrettier: z.boolean().default(true).meta({\n\t\tdescription: \"Whether or not to use prettier to format the files\",\n\t}),\n\tenableToc: z.boolean().default(false).meta({\n\t\talias: \"t\",\n\t\tdescription: \"generate table of contents for readmes\",\n\t}),\n\tenableUsage: z.boolean().optional().default(false).meta({\n\t\tdescription: \"Whether or not to enable usage plugin\",\n\t}),\n\theadings: tableHeadingsSchema\n\t\t.optional()\n\t\t.default(defaultTableHeadings)\n\t\t.describe(\"List of headings for different table outputs\"),\n\tonlyReadmes: z.boolean().default(true).meta({\n\t\talias: \"r\",\n\t\tdescription: \"Whether or not to only traverse readmes\",\n\t}),\n\tonlyShowPublicPackages: z.boolean().default(false).meta({\n\t\talias: \"p\",\n\t\tdescription: \"Only show public packages in workspaces\",\n\t}),\n\tremoveScope: z.string().optional().default(\"\").meta({\n\t\tdescription: \"Remove common workspace scope\",\n\t}),\n\ttemplates: templatesSchema\n\t\t.optional()\n\t\t.default(defaultTemplates)\n\t\t.describe(\n\t\t\t\"Handlebars templates used to fuel list and table generation\",\n\t\t),\n\ttocHeading: z.string().optional().default(\"Table of contents\").meta({\n\t\tdescription: \"Markdown heading used to generate table of contents\",\n\t}),\n\tusageFile: z.string().optional().default(\"\").meta({\n\t\tdescription: \"Workspace level usage file\",\n\t}),\n\tusageHeading: z.string().optional().default(\"Usage\").meta({\n\t\tdescription: \"Markdown heading used to generate usage example\",\n\t}),\n\tverbose: z.boolean().default(false).meta({\n\t\talias: \"v\",\n\t\tdescription: \"whether or not to display verbose logging\",\n\t}),\n});\n\nexport const configSchema = _configSchema.optional();\n\n/** @typedef {Partial<z.infer<typeof _configSchema>>} Config */\n"],"mappings":"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","names":[]}
@@ -72,6 +72,7 @@ declare const configSchema: z.ZodOptional<z.ZodObject<{
72
72
  }>>>;
73
73
  disableEmojis: z.ZodDefault<z.ZodBoolean>;
74
74
  disableMarkdownHeadings: z.ZodDefault<z.ZodBoolean>;
75
+ enablePrettier: z.ZodDefault<z.ZodBoolean>;
75
76
  enableToc: z.ZodDefault<z.ZodBoolean>;
76
77
  enableUsage: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
77
78
  headings: z.ZodDefault<z.ZodOptional<z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodEnum<{
@@ -124,6 +125,7 @@ declare const _configSchema: z.ZodObject<{
124
125
  }>>>;
125
126
  disableEmojis: z.ZodDefault<z.ZodBoolean>;
126
127
  disableMarkdownHeadings: z.ZodDefault<z.ZodBoolean>;
128
+ enablePrettier: z.ZodDefault<z.ZodBoolean>;
127
129
  enableToc: z.ZodDefault<z.ZodBoolean>;
128
130
  enableUsage: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
129
131
  headings: z.ZodDefault<z.ZodOptional<z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodEnum<{
@@ -72,6 +72,7 @@ declare const configSchema: z.ZodOptional<z.ZodObject<{
72
72
  }>>>;
73
73
  disableEmojis: z.ZodDefault<z.ZodBoolean>;
74
74
  disableMarkdownHeadings: z.ZodDefault<z.ZodBoolean>;
75
+ enablePrettier: z.ZodDefault<z.ZodBoolean>;
75
76
  enableToc: z.ZodDefault<z.ZodBoolean>;
76
77
  enableUsage: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
77
78
  headings: z.ZodDefault<z.ZodOptional<z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodEnum<{
@@ -124,6 +125,7 @@ declare const _configSchema: z.ZodObject<{
124
125
  }>>>;
125
126
  disableEmojis: z.ZodDefault<z.ZodBoolean>;
126
127
  disableMarkdownHeadings: z.ZodDefault<z.ZodBoolean>;
128
+ enablePrettier: z.ZodDefault<z.ZodBoolean>;
127
129
  enableToc: z.ZodDefault<z.ZodBoolean>;
128
130
  enableUsage: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
129
131
  headings: z.ZodDefault<z.ZodOptional<z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodEnum<{
package/config/schema.js CHANGED
@@ -52,6 +52,9 @@ var _configSchema = z.object({
52
52
  disableMarkdownHeadings: z.boolean().default(false).meta({
53
53
  description: "Whether or not to display markdown headings"
54
54
  }),
55
+ enablePrettier: z.boolean().default(true).meta({
56
+ description: "Whether or not to use prettier to format the files"
57
+ }),
55
58
  enableToc: z.boolean().default(false).meta({
56
59
  alias: "t",
57
60
  description: "generate table of contents for readmes"
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/schema.js"],"sourcesContent":["import { z } from \"zod\";\n\nexport const actionsSchema = z\n\t.enum([\"ACTION\", \"PKG\", \"USAGE\", \"WORKSPACE\", \"ZOD\"])\n\t.describe(\"Comment action options\");\n\nexport const formatsSchema = z\n\t.enum([\"LIST\", \"TABLE\"])\n\t.default(\"TABLE\")\n\t.optional();\n\nexport const languageSchema = z.enum([\"JS\", \"RS\"]).optional().default(\"JS\");\n\nexport const headingsSchema = z\n\t.enum([\n\t\t\"default\",\n\t\t\"description\",\n\t\t\"devDependency\",\n\t\t\"downloads\",\n\t\t\"name\",\n\t\t\"private\",\n\t\t\"required\",\n\t\t\"version\",\n\t])\n\t.describe(\"Table heading options\");\n\nexport const tableHeadingsSchema = z\n\t.record(actionsSchema, headingsSchema.array().optional())\n\t.optional()\n\t.describe(\"Table heading action configuration\")\n\t.default({\n\t\tACTION: [\"name\", \"required\", \"default\", \"description\"],\n\t\tPKG: [\"name\", \"version\", \"devDependency\"],\n\t\tWORKSPACE: [\"name\", \"version\", \"downloads\", \"description\"],\n\t\tZOD: [],\n\t});\n\nexport const templatesSchema = z.object({\n\tdownloadImage: z\n\t\t.string()\n\t\t.optional()\n\t\t.default(\"https://img.shields.io/npm/dw/{{name}}?labelColor=211F1F\"),\n\temojis: z\n\t\t.record(headingsSchema, z.string())\n\t\t.optional()\n\t\t.describe(\"Table heading emojis used when enabled\")\n\t\t.default({\n\t\t\tdefault: \"⚙️\",\n\t\t\tdescription: \"📝\",\n\t\t\tdevDependency: \"💻\",\n\t\t\tdownloads: \"📥\",\n\t\t\tname: \"🏷️\",\n\t\t\tprivate: \"🔒\",\n\t\t\trequired: \"\",\n\t\t\tversion: \"\",\n\t\t}),\n\tregistryUrl: z\n\t\t.string()\n\t\t.optional()\n\t\t.default(\"https://www.npmjs.com/package/{{name}}\"),\n\tversionImage: z\n\t\t.string()\n\t\t.optional()\n\t\t.default(\n\t\t\t\"https://img.shields.io/npm/v/{{uri_name}}?logo=npm&logoColor=red&color=211F1F&labelColor=211F1F\",\n\t\t),\n});\n\nexport const defaultTemplates = templatesSchema.parse({});\nexport const defaultTableHeadings = tableHeadingsSchema.parse(undefined);\n\nconst _configSchema = z.object({\n\taffectedRegexes: z.string().array().optional().default([]),\n\tcollapseHeadings: z.string().array().optional().default([]),\n\tdefaultLanguage: languageSchema.meta({\n\t\talias: \"l\",\n\t\tdescription: \"Default language to infer projects from\",\n\t}),\n\tdisableEmojis: z.boolean().default(false).meta({\n\t\talias: \"e\",\n\t\tdescription: \"Whether or not to use emojis in markdown table headings\",\n\t}),\n\tdisableMarkdownHeadings: z.boolean().default(false).meta({\n\t\tdescription: \"Whether or not to display markdown headings\",\n\t}),\n\tenableToc: z.boolean().default(false).meta({\n\t\talias: \"t\",\n\t\tdescription: \"generate table of contents for readmes\",\n\t}),\n\tenableUsage: z.boolean().optional().default(false).meta({\n\t\tdescription: \"Whether or not to enable usage plugin\",\n\t}),\n\theadings: tableHeadingsSchema\n\t\t.optional()\n\t\t.default(defaultTableHeadings)\n\t\t.describe(\"List of headings for different table outputs\"),\n\tonlyReadmes: z.boolean().default(true).meta({\n\t\talias: \"r\",\n\t\tdescription: \"Whether or not to only traverse readmes\",\n\t}),\n\tonlyShowPublicPackages: z.boolean().default(false).meta({\n\t\talias: \"p\",\n\t\tdescription: \"Only show public packages in workspaces\",\n\t}),\n\tremoveScope: z.string().optional().default(\"\").meta({\n\t\tdescription: \"Remove common workspace scope\",\n\t}),\n\ttemplates: templatesSchema\n\t\t.optional()\n\t\t.default(defaultTemplates)\n\t\t.describe(\n\t\t\t\"Handlebars templates used to fuel list and table generation\",\n\t\t),\n\ttocHeading: z.string().optional().default(\"Table of contents\").meta({\n\t\tdescription: \"Markdown heading used to generate table of contents\",\n\t}),\n\tusageFile: z.string().optional().default(\"\").meta({\n\t\tdescription: \"Workspace level usage file\",\n\t}),\n\tusageHeading: z.string().optional().default(\"Usage\").meta({\n\t\tdescription: \"Markdown heading used to generate usage example\",\n\t}),\n\tverbose: z.boolean().default(false).meta({\n\t\talias: \"v\",\n\t\tdescription: \"whether or not to display verbose logging\",\n\t}),\n});\n\nexport const configSchema = _configSchema.optional();\n\n/** @typedef {Partial<z.infer<typeof _configSchema>>} Config */\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/schema.js"],"sourcesContent":["import { z } from \"zod\";\n\nexport const actionsSchema = z\n\t.enum([\"ACTION\", \"PKG\", \"USAGE\", \"WORKSPACE\", \"ZOD\"])\n\t.describe(\"Comment action options\");\n\nexport const formatsSchema = z\n\t.enum([\"LIST\", \"TABLE\"])\n\t.default(\"TABLE\")\n\t.optional();\n\nexport const languageSchema = z.enum([\"JS\", \"RS\"]).optional().default(\"JS\");\n\nexport const headingsSchema = z\n\t.enum([\n\t\t\"default\",\n\t\t\"description\",\n\t\t\"devDependency\",\n\t\t\"downloads\",\n\t\t\"name\",\n\t\t\"private\",\n\t\t\"required\",\n\t\t\"version\",\n\t])\n\t.describe(\"Table heading options\");\n\nexport const tableHeadingsSchema = z\n\t.record(actionsSchema, headingsSchema.array().optional())\n\t.optional()\n\t.describe(\"Table heading action configuration\")\n\t.default({\n\t\tACTION: [\"name\", \"required\", \"default\", \"description\"],\n\t\tPKG: [\"name\", \"version\", \"devDependency\"],\n\t\tWORKSPACE: [\"name\", \"version\", \"downloads\", \"description\"],\n\t\tZOD: [],\n\t});\n\nexport const templatesSchema = z.object({\n\tdownloadImage: z\n\t\t.string()\n\t\t.optional()\n\t\t.default(\"https://img.shields.io/npm/dw/{{name}}?labelColor=211F1F\"),\n\temojis: z\n\t\t.record(headingsSchema, z.string())\n\t\t.optional()\n\t\t.describe(\"Table heading emojis used when enabled\")\n\t\t.default({\n\t\t\tdefault: \"⚙️\",\n\t\t\tdescription: \"📝\",\n\t\t\tdevDependency: \"💻\",\n\t\t\tdownloads: \"📥\",\n\t\t\tname: \"🏷️\",\n\t\t\tprivate: \"🔒\",\n\t\t\trequired: \"\",\n\t\t\tversion: \"\",\n\t\t}),\n\tregistryUrl: z\n\t\t.string()\n\t\t.optional()\n\t\t.default(\"https://www.npmjs.com/package/{{name}}\"),\n\tversionImage: z\n\t\t.string()\n\t\t.optional()\n\t\t.default(\n\t\t\t\"https://img.shields.io/npm/v/{{uri_name}}?logo=npm&logoColor=red&color=211F1F&labelColor=211F1F\",\n\t\t),\n});\n\nexport const defaultTemplates = templatesSchema.parse({});\nexport const defaultTableHeadings = tableHeadingsSchema.parse(undefined);\n\nconst _configSchema = z.object({\n\taffectedRegexes: z.string().array().optional().default([]),\n\tcollapseHeadings: z.string().array().optional().default([]),\n\tdefaultLanguage: languageSchema.meta({\n\t\talias: \"l\",\n\t\tdescription: \"Default language to infer projects from\",\n\t}),\n\tdisableEmojis: z.boolean().default(false).meta({\n\t\talias: \"e\",\n\t\tdescription: \"Whether or not to use emojis in markdown table headings\",\n\t}),\n\tdisableMarkdownHeadings: z.boolean().default(false).meta({\n\t\tdescription: \"Whether or not to display markdown headings\",\n\t}),\n\tenablePrettier: z.boolean().default(true).meta({\n\t\tdescription: \"Whether or not to use prettier to format the files\",\n\t}),\n\tenableToc: z.boolean().default(false).meta({\n\t\talias: \"t\",\n\t\tdescription: \"generate table of contents for readmes\",\n\t}),\n\tenableUsage: z.boolean().optional().default(false).meta({\n\t\tdescription: \"Whether or not to enable usage plugin\",\n\t}),\n\theadings: tableHeadingsSchema\n\t\t.optional()\n\t\t.default(defaultTableHeadings)\n\t\t.describe(\"List of headings for different table outputs\"),\n\tonlyReadmes: z.boolean().default(true).meta({\n\t\talias: \"r\",\n\t\tdescription: \"Whether or not to only traverse readmes\",\n\t}),\n\tonlyShowPublicPackages: z.boolean().default(false).meta({\n\t\talias: \"p\",\n\t\tdescription: \"Only show public packages in workspaces\",\n\t}),\n\tremoveScope: z.string().optional().default(\"\").meta({\n\t\tdescription: \"Remove common workspace scope\",\n\t}),\n\ttemplates: templatesSchema\n\t\t.optional()\n\t\t.default(defaultTemplates)\n\t\t.describe(\n\t\t\t\"Handlebars templates used to fuel list and table generation\",\n\t\t),\n\ttocHeading: z.string().optional().default(\"Table of contents\").meta({\n\t\tdescription: \"Markdown heading used to generate table of contents\",\n\t}),\n\tusageFile: z.string().optional().default(\"\").meta({\n\t\tdescription: \"Workspace level usage file\",\n\t}),\n\tusageHeading: z.string().optional().default(\"Usage\").meta({\n\t\tdescription: \"Markdown heading used to generate usage example\",\n\t}),\n\tverbose: z.boolean().default(false).meta({\n\t\talias: \"v\",\n\t\tdescription: \"whether or not to display verbose logging\",\n\t}),\n});\n\nexport const configSchema = _configSchema.optional();\n\n/** @typedef {Partial<z.infer<typeof _configSchema>>} Config */\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"affectedRegexes":{"default":[],"type":"array","items":{"type":"string"}},"collapseHeadings":{"default":[],"type":"array","items":{"type":"string"}},"defaultLanguage":{"alias":"l","description":"Default language to infer projects from","default":"JS","type":"string","enum":["JS","RS"]},"disableEmojis":{"alias":"e","description":"Whether or not to use emojis in markdown table headings","default":false,"type":"boolean"},"disableMarkdownHeadings":{"description":"Whether or not to display markdown headings","default":false,"type":"boolean"},"enableToc":{"alias":"t","description":"generate table of contents for readmes","default":false,"type":"boolean"},"enableUsage":{"description":"Whether or not to enable usage plugin","default":false,"type":"boolean"},"headings":{"description":"List of headings for different table outputs","default":{"ACTION":["name","required","default","description"],"PKG":["name","version","devDependency"],"WORKSPACE":["name","version","downloads","description"],"ZOD":[]},"type":"object","propertyNames":{"description":"Comment action options","type":"string","enum":["ACTION","PKG","USAGE","WORKSPACE","ZOD"]},"additionalProperties":{"type":"array","items":{"description":"Table heading options","type":"string","enum":["default","description","devDependency","downloads","name","private","required","version"]}}},"onlyReadmes":{"alias":"r","description":"Whether or not to only traverse readmes","default":true,"type":"boolean"},"onlyShowPublicPackages":{"alias":"p","description":"Only show public packages in workspaces","default":false,"type":"boolean"},"removeScope":{"description":"Remove common workspace scope","default":"","type":"string"},"templates":{"description":"Handlebars templates used to fuel list and table generation","default":{"downloadImage":"https://img.shields.io/npm/dw/{{name}}?labelColor=211F1F","emojis":{"default":"⚙️","description":"📝","devDependency":"💻","downloads":"📥","name":"🏷️","private":"🔒","required":"","version":""},"registryUrl":"https://www.npmjs.com/package/{{name}}","versionImage":"https://img.shields.io/npm/v/{{uri_name}}?logo=npm&logoColor=red&color=211F1F&labelColor=211F1F"},"type":"object","properties":{"downloadImage":{"default":"https://img.shields.io/npm/dw/{{name}}?labelColor=211F1F","type":"string"},"emojis":{"default":{"default":"⚙️","description":"📝","devDependency":"💻","downloads":"📥","name":"🏷️","private":"🔒","required":"","version":""},"description":"Table heading emojis used when enabled","type":"object","propertyNames":{"description":"Table heading options","type":"string","enum":["default","description","devDependency","downloads","name","private","required","version"]},"additionalProperties":{"type":"string"}},"registryUrl":{"default":"https://www.npmjs.com/package/{{name}}","type":"string"},"versionImage":{"default":"https://img.shields.io/npm/v/{{uri_name}}?logo=npm&logoColor=red&color=211F1F&labelColor=211F1F","type":"string"}},"required":["downloadImage","emojis","registryUrl","versionImage"],"additionalProperties":false},"tocHeading":{"description":"Markdown heading used to generate table of contents","default":"Table of contents","type":"string"},"usageFile":{"description":"Workspace level usage file","default":"","type":"string"},"usageHeading":{"description":"Markdown heading used to generate usage example","default":"Usage","type":"string"},"verbose":{"alias":"v","description":"whether or not to display verbose logging","default":false,"type":"boolean"}},"required":["affectedRegexes","collapseHeadings","defaultLanguage","disableEmojis","disableMarkdownHeadings","enableToc","enableUsage","headings","onlyReadmes","onlyShowPublicPackages","removeScope","templates","tocHeading","usageFile","usageHeading","verbose"],"additionalProperties":false}
1
+ {"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"affectedRegexes":{"default":[],"type":"array","items":{"type":"string"}},"collapseHeadings":{"default":[],"type":"array","items":{"type":"string"}},"defaultLanguage":{"alias":"l","description":"Default language to infer projects from","default":"JS","type":"string","enum":["JS","RS"]},"disableEmojis":{"alias":"e","description":"Whether or not to use emojis in markdown table headings","default":false,"type":"boolean"},"disableMarkdownHeadings":{"description":"Whether or not to display markdown headings","default":false,"type":"boolean"},"enablePrettier":{"description":"Whether or not to use prettier to format the files","default":true,"type":"boolean"},"enableToc":{"alias":"t","description":"generate table of contents for readmes","default":false,"type":"boolean"},"enableUsage":{"description":"Whether or not to enable usage plugin","default":false,"type":"boolean"},"headings":{"description":"List of headings for different table outputs","default":{"ACTION":["name","required","default","description"],"PKG":["name","version","devDependency"],"WORKSPACE":["name","version","downloads","description"],"ZOD":[]},"type":"object","propertyNames":{"description":"Comment action options","type":"string","enum":["ACTION","PKG","USAGE","WORKSPACE","ZOD"]},"additionalProperties":{"type":"array","items":{"description":"Table heading options","type":"string","enum":["default","description","devDependency","downloads","name","private","required","version"]}}},"onlyReadmes":{"alias":"r","description":"Whether or not to only traverse readmes","default":true,"type":"boolean"},"onlyShowPublicPackages":{"alias":"p","description":"Only show public packages in workspaces","default":false,"type":"boolean"},"removeScope":{"description":"Remove common workspace scope","default":"","type":"string"},"templates":{"description":"Handlebars templates used to fuel list and table generation","default":{"downloadImage":"https://img.shields.io/npm/dw/{{name}}?labelColor=211F1F","emojis":{"default":"⚙️","description":"📝","devDependency":"💻","downloads":"📥","name":"🏷️","private":"🔒","required":"","version":""},"registryUrl":"https://www.npmjs.com/package/{{name}}","versionImage":"https://img.shields.io/npm/v/{{uri_name}}?logo=npm&logoColor=red&color=211F1F&labelColor=211F1F"},"type":"object","properties":{"downloadImage":{"default":"https://img.shields.io/npm/dw/{{name}}?labelColor=211F1F","type":"string"},"emojis":{"default":{"default":"⚙️","description":"📝","devDependency":"💻","downloads":"📥","name":"🏷️","private":"🔒","required":"","version":""},"description":"Table heading emojis used when enabled","type":"object","propertyNames":{"description":"Table heading options","type":"string","enum":["default","description","devDependency","downloads","name","private","required","version"]},"additionalProperties":{"type":"string"}},"registryUrl":{"default":"https://www.npmjs.com/package/{{name}}","type":"string"},"versionImage":{"default":"https://img.shields.io/npm/v/{{uri_name}}?logo=npm&logoColor=red&color=211F1F&labelColor=211F1F","type":"string"}},"required":["downloadImage","emojis","registryUrl","versionImage"],"additionalProperties":false},"tocHeading":{"description":"Markdown heading used to generate table of contents","default":"Table of contents","type":"string"},"usageFile":{"description":"Workspace level usage file","default":"","type":"string"},"usageHeading":{"description":"Markdown heading used to generate usage example","default":"Usage","type":"string"},"verbose":{"alias":"v","description":"whether or not to display verbose logging","default":false,"type":"boolean"}},"required":["affectedRegexes","collapseHeadings","defaultLanguage","disableEmojis","disableMarkdownHeadings","enablePrettier","enableToc","enableUsage","headings","onlyReadmes","onlyShowPublicPackages","removeScope","templates","tocHeading","usageFile","usageHeading","verbose"],"additionalProperties":false}
@@ -28,6 +28,10 @@ properties:
28
28
  description: Whether or not to display markdown headings
29
29
  default: false
30
30
  type: boolean
31
+ enablePrettier:
32
+ description: Whether or not to use prettier to format the files
33
+ default: true
34
+ type: boolean
31
35
  enableToc:
32
36
  alias: t
33
37
  description: generate table of contents for readmes
@@ -174,6 +178,7 @@ required:
174
178
  - defaultLanguage
175
179
  - disableEmojis
176
180
  - disableMarkdownHeadings
181
+ - enablePrettier
177
182
  - enableToc
178
183
  - enableUsage
179
184
  - headings
package/dist/index.cjs CHANGED
@@ -98,6 +98,9 @@ var _configSchema = import_zod.z.object({
98
98
  disableMarkdownHeadings: import_zod.z.boolean().default(false).meta({
99
99
  description: "Whether or not to display markdown headings"
100
100
  }),
101
+ enablePrettier: import_zod.z.boolean().default(true).meta({
102
+ description: "Whether or not to use prettier to format the files"
103
+ }),
101
104
  enableToc: import_zod.z.boolean().default(false).meta({
102
105
  alias: "t",
103
106
  description: "generate table of contents for readmes"
@@ -369,6 +372,17 @@ async function getMarkdownPaths(cwd, config) {
369
372
  const readmes = await (0, import_fast_glob.default)(pattern, { cwd, ignore });
370
373
  return readmes.map((readme) => path.resolve(cwd, readme));
371
374
  }
375
+ async function getPrettierPaths(paths) {
376
+ return await Promise.all(
377
+ paths.map(async (file) => {
378
+ const stats = await fsp.lstat(file);
379
+ const isSymbolicLink = stats.isSymbolicLink();
380
+ if (!isSymbolicLink) return file;
381
+ const symlink = await fsp.readlink(file);
382
+ return path.join(path.dirname(file), symlink);
383
+ })
384
+ );
385
+ }
372
386
 
373
387
  // src/data.ts
374
388
  function createFindParameter(parameterList) {
@@ -680,7 +694,7 @@ async function run() {
680
694
  const config = await loadConfig(args2) || {};
681
695
  INFO("Loaded the following configuration:", config);
682
696
  const root = getGitRoot();
683
- const isAffected = args2.changes ? "affected" : "";
697
+ const isAffected = args2.changes && "affected";
684
698
  INFO(`Loading ${!isAffected ? "all " : "affected "}files`);
685
699
  const paths = isAffected ? findAffectedMarkdowns(root, config) : await getMarkdownPaths(root, config);
686
700
  INFO("Loaded the following files:", paths.join("\n"));
@@ -711,8 +725,11 @@ async function run() {
711
725
  })
712
726
  );
713
727
  const opts2 = { stdio: "inherit" };
714
- INFO("formatting with prettier");
715
- cp2.execFileSync("prettier", ["--write", ...paths], opts2);
728
+ if (config.enablePrettier) {
729
+ INFO("formatting with prettier");
730
+ const prettierPaths = await getPrettierPaths(paths);
731
+ cp2.execFileSync("prettier", ["--write", ...prettierPaths], opts2);
732
+ }
716
733
  if (isAffected) {
717
734
  INFO("adding affected files to git stage");
718
735
  cp2.execFileSync("git", ["add", ...paths], opts2);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/args.ts","../src/schema.js","../src/comment.ts","../src/log.ts","../src/config.ts","../src/data.ts","../src/utils.ts","../src/pipeline.ts","../src/plugin.ts"],"sourcesContent":["import { fromMarkdown } from \"mdast-util-from-markdown\";\nimport * as cp from \"node:child_process\";\nimport * as fsp from \"node:fs/promises\";\nimport ora from \"ora\";\n\nimport type { Config } from \"./schema\";\n\nimport { parseArgs } from \"./args\";\nimport { loadAstComments } from \"./comment\";\nimport { loadConfig } from \"./config\";\nimport { loadActionData } from \"./data\";\nimport { ERROR, INFO, WARN } from \"./log\";\nimport { parse } from \"./pipeline\";\nimport { findAffectedMarkdowns, getGitRoot, getMarkdownPaths } from \"./utils\";\n\nexport async function run() {\n\tconst args = await parseArgs();\n\tconst config: Config = (await loadConfig(args)) || {};\n\n\tINFO(\"Loaded the following configuration:\", config);\n\n\tconst root = getGitRoot();\n\n\tconst isAffected = args.changes ? \"affected\" : \"\";\n\n\tINFO(`Loading ${!isAffected ? \"all \" : \"affected \"}files`);\n\n\tconst paths = isAffected\n\t\t? findAffectedMarkdowns(root, config)\n\t\t: await getMarkdownPaths(root, config);\n\n\tINFO(\"Loaded the following files:\", paths.join(\"\\n\"));\n\n\tconst type = args.onlyReadmes ? \"readmes\" : \"all markdown files\";\n\n\tif (!paths.length) {\n\t\treturn ERROR(`no ${isAffected} readmes found to update`);\n\t}\n\n\tconst spinner = !args.verbose && ora(`Updating ${type}`).start();\n\n\tawait Promise.all(\n\t\tpaths.map(async (path) => {\n\t\t\tconst file = await fsp.readFile(path, { encoding: \"utf8\" });\n\t\t\t// get rid of ast via garbage collector faster\n\t\t\tconst actions = (() => {\n\t\t\t\tconst ast = fromMarkdown(file);\n\t\t\t\treturn loadAstComments(ast);\n\t\t\t})();\n\n\t\t\tif (!actions.length) {\n\t\t\t\tWARN(`no action comments found in`, path);\n\t\t\t\tif (!config.enableUsage || !config.enableToc) {\n\t\t\t\t\treturn ERROR(\"no action or plugins found\");\n\t\t\t\t} else {\n\t\t\t\t\tINFO(\"plugins enabled. continuing parsing\", path);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst data = await loadActionData(actions, path, root);\n\n\t\t\tINFO(\"Loaded comment action data\", data);\n\n\t\t\tconst content = await parse(file, path, root, config, data);\n\t\t\tawait fsp.writeFile(path, content);\n\t\t}),\n\t);\n\n\tconst opts: cp.CommonExecOptions = { stdio: \"inherit\" };\n\n\tINFO(\"formatting with prettier\");\n\n\tcp.execFileSync(\"prettier\", [\"--write\", ...paths], opts);\n\n\tif (isAffected) {\n\t\tINFO(\"adding affected files to git stage\");\n\n\t\tcp.execFileSync(\"git\", [\"add\", ...paths], opts);\n\t}\n\n\tif (spinner) spinner.stop();\n}\n","import debug from \"debug\";\nimport yargs, { type Options } from \"yargs\";\nimport { hideBin } from \"yargs/helpers\";\nimport z from \"zod\";\n\nimport { configSchema } from \"./schema\";\n\nexport type Args = Awaited<ReturnType<typeof parseArgs>>;\n\nconst complexOptions = [\n\t\"affectedRegexes\",\n\t\"collapseHeadings\",\n\t\"headings\",\n\t\"templates\",\n] as const;\n\ntype ComplexOptions = (typeof complexOptions)[number];\n\nconst args = {\n\t...zodToYargs(),\n\tchanges: {\n\t\talias: \"g\",\n\t\tdefault: false,\n\t\tdescription: \"Check only changed git files\",\n\t\ttype: \"boolean\",\n\t},\n\tcheck: {\n\t\talias: \"k\",\n\t\tdefault: false,\n\t\tdescription: \"Do not write to files. Only check for changes\",\n\t\ttype: \"boolean\",\n\t},\n\tconfig: { alias: \"c\", description: \"Path to config file\", type: \"string\" },\n} satisfies Record<string, Options>;\n\nexport async function parseArgs() {\n\tconst yargsInstance = yargs(hideBin(process.argv))\n\t\t.options(args)\n\t\t.help(\"h\")\n\t\t.alias(\"h\", \"help\")\n\t\t.epilogue(`--> @stephansama open-source ${new Date().getFullYear()}`);\n\n\tconst parsed = await yargsInstance\n\t\t.wrap(yargsInstance.terminalWidth())\n\t\t.parse();\n\n\tif (parsed.verbose) debug.enable(\"autoreadme*\");\n\n\treturn parsed;\n}\n\nexport function zodToYargs(): Omit<\n\tRecord<keyof typeof shape, Options>,\n\tComplexOptions\n> {\n\tconst { shape } = configSchema.unwrap();\n\tconst entries = Object.entries(shape).map(([key, value]) => {\n\t\tif (complexOptions.includes(key as ComplexOptions)) return [];\n\t\tif (value.def.innerType instanceof z.ZodObject) return [];\n\t\tconst meta = value.meta();\n\t\tconst { innerType } = value.def;\n\t\tconst isBoolean = innerType instanceof z.ZodBoolean;\n\t\tconst isNumber = innerType instanceof z.ZodNumber;\n\t\tconst isArray = innerType instanceof z.ZodArray;\n\n\t\tconst yargType: Options[\"type\"] =\n\t\t\t(isArray && \"array\") ||\n\t\t\t(isNumber && \"number\") ||\n\t\t\t(isBoolean && \"boolean\") ||\n\t\t\t\"string\";\n\n\t\tconst options: Options = {\n\t\t\tdefault: value.def.defaultValue,\n\t\t\ttype: yargType,\n\t\t};\n\n\t\tif (meta?.alias) options.alias = meta.alias as string;\n\t\tif (meta?.description) options.description = meta.description;\n\n\t\treturn [key, options];\n\t});\n\n\treturn Object.fromEntries(entries);\n}\n","import { z } from \"zod\";\n\nexport const actionsSchema = z\n\t.enum([\"ACTION\", \"PKG\", \"USAGE\", \"WORKSPACE\", \"ZOD\"])\n\t.describe(\"Comment action options\");\n\nexport const formatsSchema = z\n\t.enum([\"LIST\", \"TABLE\"])\n\t.default(\"TABLE\")\n\t.optional();\n\nexport const languageSchema = z.enum([\"JS\", \"RS\"]).optional().default(\"JS\");\n\nexport const headingsSchema = z\n\t.enum([\n\t\t\"default\",\n\t\t\"description\",\n\t\t\"devDependency\",\n\t\t\"downloads\",\n\t\t\"name\",\n\t\t\"private\",\n\t\t\"required\",\n\t\t\"version\",\n\t])\n\t.describe(\"Table heading options\");\n\nexport const tableHeadingsSchema = z\n\t.record(actionsSchema, headingsSchema.array().optional())\n\t.optional()\n\t.describe(\"Table heading action configuration\")\n\t.default({\n\t\tACTION: [\"name\", \"required\", \"default\", \"description\"],\n\t\tPKG: [\"name\", \"version\", \"devDependency\"],\n\t\tWORKSPACE: [\"name\", \"version\", \"downloads\", \"description\"],\n\t\tZOD: [],\n\t});\n\nexport const templatesSchema = z.object({\n\tdownloadImage: z\n\t\t.string()\n\t\t.optional()\n\t\t.default(\"https://img.shields.io/npm/dw/{{name}}?labelColor=211F1F\"),\n\temojis: z\n\t\t.record(headingsSchema, z.string())\n\t\t.optional()\n\t\t.describe(\"Table heading emojis used when enabled\")\n\t\t.default({\n\t\t\tdefault: \"⚙️\",\n\t\t\tdescription: \"📝\",\n\t\t\tdevDependency: \"💻\",\n\t\t\tdownloads: \"📥\",\n\t\t\tname: \"🏷️\",\n\t\t\tprivate: \"🔒\",\n\t\t\trequired: \"\",\n\t\t\tversion: \"\",\n\t\t}),\n\tregistryUrl: z\n\t\t.string()\n\t\t.optional()\n\t\t.default(\"https://www.npmjs.com/package/{{name}}\"),\n\tversionImage: z\n\t\t.string()\n\t\t.optional()\n\t\t.default(\n\t\t\t\"https://img.shields.io/npm/v/{{uri_name}}?logo=npm&logoColor=red&color=211F1F&labelColor=211F1F\",\n\t\t),\n});\n\nexport const defaultTemplates = templatesSchema.parse({});\nexport const defaultTableHeadings = tableHeadingsSchema.parse(undefined);\n\nconst _configSchema = z.object({\n\taffectedRegexes: z.string().array().optional().default([]),\n\tcollapseHeadings: z.string().array().optional().default([]),\n\tdefaultLanguage: languageSchema.meta({\n\t\talias: \"l\",\n\t\tdescription: \"Default language to infer projects from\",\n\t}),\n\tdisableEmojis: z.boolean().default(false).meta({\n\t\talias: \"e\",\n\t\tdescription: \"Whether or not to use emojis in markdown table headings\",\n\t}),\n\tdisableMarkdownHeadings: z.boolean().default(false).meta({\n\t\tdescription: \"Whether or not to display markdown headings\",\n\t}),\n\tenableToc: z.boolean().default(false).meta({\n\t\talias: \"t\",\n\t\tdescription: \"generate table of contents for readmes\",\n\t}),\n\tenableUsage: z.boolean().optional().default(false).meta({\n\t\tdescription: \"Whether or not to enable usage plugin\",\n\t}),\n\theadings: tableHeadingsSchema\n\t\t.optional()\n\t\t.default(defaultTableHeadings)\n\t\t.describe(\"List of headings for different table outputs\"),\n\tonlyReadmes: z.boolean().default(true).meta({\n\t\talias: \"r\",\n\t\tdescription: \"Whether or not to only traverse readmes\",\n\t}),\n\tonlyShowPublicPackages: z.boolean().default(false).meta({\n\t\talias: \"p\",\n\t\tdescription: \"Only show public packages in workspaces\",\n\t}),\n\tremoveScope: z.string().optional().default(\"\").meta({\n\t\tdescription: \"Remove common workspace scope\",\n\t}),\n\ttemplates: templatesSchema\n\t\t.optional()\n\t\t.default(defaultTemplates)\n\t\t.describe(\n\t\t\t\"Handlebars templates used to fuel list and table generation\",\n\t\t),\n\ttocHeading: z.string().optional().default(\"Table of contents\").meta({\n\t\tdescription: \"Markdown heading used to generate table of contents\",\n\t}),\n\tusageFile: z.string().optional().default(\"\").meta({\n\t\tdescription: \"Workspace level usage file\",\n\t}),\n\tusageHeading: z.string().optional().default(\"Usage\").meta({\n\t\tdescription: \"Markdown heading used to generate usage example\",\n\t}),\n\tverbose: z.boolean().default(false).meta({\n\t\talias: \"v\",\n\t\tdescription: \"whether or not to display verbose logging\",\n\t}),\n});\n\nexport const configSchema = _configSchema.optional();\n\n/** @typedef {Partial<z.infer<typeof _configSchema>>} Config */\n","import type { Html, Root } from \"mdast\";\n\nimport { commentMarker } from \"mdast-comment-marker\";\n\nimport { INFO } from \"./log\";\nimport { actionsSchema, formatsSchema, languageSchema } from \"./schema\";\n\nexport const SEPARATOR = \"-\" as const;\n\nexport type AstComments = ReturnType<typeof loadAstComments>;\n\nexport function loadAstComments(root: Root) {\n\treturn root.children\n\t\t.map((child) => child.type === \"html\" && getComment(child))\n\t\t.filter((f): f is ReturnType<typeof parseComment> => f !== false);\n}\n\nexport function parseComment(comment: string) {\n\tconst input = trimComment(comment);\n\tconst [type, ...parameters] = input.split(\" \");\n\tconst [first, second, third] = type.split(SEPARATOR);\n\n\tINFO(\"parsing inputs\", { first, second, third });\n\n\tconst languageInput = third ? first : undefined;\n\tconst actionInput = third ? second : first;\n\tconst formatInput = third ? third : second;\n\tconst language = languageSchema.parse(languageInput);\n\tconst action = actionsSchema.parse(actionInput);\n\tconst format = formatsSchema.parse(formatInput);\n\tconst isStart = comment.includes(\"start\");\n\tconst parsed = { action, format, isStart, language, parameters };\n\n\tINFO(`Parsed comment ${comment}`, parsed);\n\n\treturn parsed;\n}\n\nconst startComment = \"<!--\";\nconst endComment = \"-->\";\n\nexport function trimComment(comment: string) {\n\treturn comment\n\t\t.replace(startComment, \"\")\n\t\t.replace(/start|end/, \"\")\n\t\t.replace(endComment, \"\")\n\t\t.trim();\n}\n\nfunction getComment(comment: Html) {\n\tif (!isComment(comment.value)) return false;\n\n\tconst marker = commentMarker(comment);\n\tif (!marker) return false;\n\n\t// TODO: update parseComment to use comment marker\n\treturn parseComment(comment.value);\n}\n\nfunction isComment(comment: string) {\n\treturn comment.startsWith(startComment) && comment.endsWith(endComment);\n}\n","import debug from \"debug\";\n\nconst error = debug(\"autoreadme:error\");\nconst info = debug(\"autoreadme:info\");\nconst warn = debug(\"autoreadme:warn\");\n\nexport function ERROR(...rest: unknown[]) {\n\tconst [first, ...remaining] = rest;\n\terror(`${first} %O`, ...remaining);\n}\n\nexport function INFO(...rest: unknown[]) {\n\tconst [first, ...remaining] = rest;\n\tinfo(`${first} %O`, ...remaining);\n}\n\nexport function WARN(...rest: unknown[]) {\n\tconst [first, ...remaining] = rest;\n\twarn(`${first} %O`, ...remaining);\n}\n","import toml from \"@iarna/toml\";\nimport { cosmiconfig, getDefaultSearchPlaces, type Options } from \"cosmiconfig\";\nimport deepmerge from \"deepmerge\";\n\nimport type { Args } from \"./args\";\n\nimport { INFO, WARN } from \"./log\";\nimport { configSchema } from \"./schema\";\n\nconst moduleName = \"autoreadme\";\n\nconst searchPlaces = getSearchPlaces();\n\nconst loaders = { [\".toml\"]: loadToml };\n\nexport async function loadConfig(args: Partial<Args>) {\n\tconst opts: Partial<Options> = { loaders, searchPlaces };\n\n\tif (args.config) opts.searchPlaces = [args.config];\n\n\tconst explorer = cosmiconfig(moduleName, opts);\n\n\tconst search = await explorer.search();\n\n\tif (!search) {\n\t\tconst location = args.config ? \" at location: \" + args.config : \"\";\n\t\tWARN(`no config file found`, location);\n\t\tINFO(\"using default configuration\");\n\t} else {\n\t\tINFO(\"found configuration file at: \", search.filepath);\n\t\tINFO(\"loaded cosmiconfig\", search.config);\n\t}\n\n\targs = removeFalsy(args);\n\n\tINFO(\"merging config with args\", args);\n\n\treturn configSchema.parse(\n\t\tdeepmerge(search?.config || {}, args, {\n\t\t\tarrayMerge: (_, sourceArray) => sourceArray,\n\t\t}),\n\t);\n}\n\nexport function loadToml(_filepath: string, content: string) {\n\treturn toml.parse(content);\n}\n\nfunction getSearchPlaces() {\n\treturn [\n\t\t...getDefaultSearchPlaces(moduleName),\n\t\t`.${moduleName}rc.toml`,\n\t\t`.config/.${moduleName}rc`,\n\t\t`.config/${moduleName}rc.toml`,\n\t\t`.config/.${moduleName}rc.toml`,\n\t\t`.config/.${moduleName}rc.json`,\n\t\t`.config/.${moduleName}rc.yaml`,\n\t\t`.config/.${moduleName}rc.yml`,\n\t];\n}\n\nfunction removeFalsy(obj: object) {\n\treturn Object.fromEntries(\n\t\tObject.entries(obj)\n\t\t\t.map(([k, v]) => (!v ? false : [k, v]))\n\t\t\t.filter((e): e is [string, unknown] => Boolean(e)),\n\t);\n}\n","import { getPackages } from \"@manypkg/get-packages\";\nimport * as fs from \"node:fs\";\nimport * as fsp from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { readPackageJSON } from \"pkg-types\";\nimport * as yaml from \"yaml\";\nimport { zod2md } from \"zod2md\";\n\nimport type { AstComments } from \"./comment\";\n\nimport { fileExists } from \"./utils\";\n\nexport type ActionData = Awaited<ReturnType<typeof loadActionData>>;\n\nexport type ActionTableHeading = \"name\" | keyof ActionInput;\n\nexport type ActionYaml = { inputs?: Record<string, ActionInput> };\n\ntype ActionInput = {\n\tdefault?: string;\n\tdescription?: string;\n\trequired?: boolean;\n};\n\nexport function createFindParameter(parameterList: string[]) {\n\treturn function (parameterName: string) {\n\t\treturn parameterList\n\t\t\t?.find((p) => p.startsWith(parameterName))\n\t\t\t?.replace(parameterName + \"=\", \"\")\n\t\t\t?.replace(/\"/gi, \"\")\n\t\t\t?.replace(/_/gi, \" \");\n\t};\n}\n\nexport async function loadActionData(\n\tactions: AstComments,\n\tfile: string,\n\troot: string,\n) {\n\tconst startActions = actions.filter((action) => action.isStart);\n\treturn await Promise.all(\n\t\tstartActions.map(async (action) => {\n\t\t\tconst find = createFindParameter(action.parameters);\n\t\t\tswitch (action.action) {\n\t\t\t\tcase \"ACTION\": {\n\t\t\t\t\tconst baseDir = path.dirname(file);\n\t\t\t\t\tconst actionYaml = await loadActionYaml(baseDir);\n\t\t\t\t\treturn {\n\t\t\t\t\t\taction: action.action,\n\t\t\t\t\t\tactionYaml,\n\t\t\t\t\t\tparameters: action.parameters,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tcase \"PKG\": {\n\t\t\t\t\tconst inputPath = find(\"path\");\n\t\t\t\t\tconst filename = inputPath\n\t\t\t\t\t\t? path.resolve(path.dirname(file), inputPath)\n\t\t\t\t\t\t: path.dirname(file);\n\t\t\t\t\tconst pkgJson = await readPackageJSON(filename);\n\t\t\t\t\treturn {\n\t\t\t\t\t\taction: action.action,\n\t\t\t\t\t\tparameters: action.parameters,\n\t\t\t\t\t\tpkgJson,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tcase \"USAGE\": {\n\t\t\t\t\treturn {\n\t\t\t\t\t\taction: action.action,\n\t\t\t\t\t\tparameters: action.parameters,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tcase \"WORKSPACE\": {\n\t\t\t\t\tconst workspaces = await getPackages(process.cwd());\n\t\t\t\t\tconst pnpmPath = path.resolve(root, \"pnpm-workspace.yaml\");\n\t\t\t\t\tconst isPnpm = fs.existsSync(pnpmPath);\n\t\t\t\t\treturn {\n\t\t\t\t\t\taction: action.action,\n\t\t\t\t\t\tisPnpm,\n\t\t\t\t\t\tparameters: action.parameters,\n\t\t\t\t\t\troot,\n\t\t\t\t\t\tworkspaces,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tcase \"ZOD\": {\n\t\t\t\t\tif (action.format === \"LIST\") {\n\t\t\t\t\t\tthrow new Error(\"cannot display zod in list format\");\n\t\t\t\t\t}\n\n\t\t\t\t\tconst inputPath = find(\"path\");\n\t\t\t\t\tif (!inputPath) {\n\t\t\t\t\t\tconst error = `no path found for zod table at markdown file ${file}`;\n\t\t\t\t\t\tthrow new Error(error);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst body = await zod2md({\n\t\t\t\t\t\tentry: path.resolve(path.dirname(file), inputPath),\n\t\t\t\t\t\ttitle: find(\"title\") || \"Zod Schema\",\n\t\t\t\t\t});\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\taction: action.action,\n\t\t\t\t\t\tbody,\n\t\t\t\t\t\tparameters: action.parameters,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"feature not yet implemented\");\n\t\t\t}\n\t\t}),\n\t);\n}\n\nasync function loadActionYaml(baseDir: string) {\n\tconst actionYmlPath = path.resolve(baseDir, \"action.yml\");\n\tconst actionYamlPath = path.resolve(baseDir, \"action.yaml\");\n\tconst actualPath =\n\t\t((await fileExists(actionYamlPath)) && actionYamlPath) ||\n\t\t((await fileExists(actionYmlPath)) && actionYmlPath);\n\n\tif (!actualPath) {\n\t\tconst locations = [actionYmlPath, actionYamlPath];\n\t\tconst error = `no yaml file found at locations: ${locations}`;\n\t\tthrow new Error(error);\n\t}\n\n\tconst actionFile = await fsp.readFile(actualPath, { encoding: \"utf8\" });\n\n\treturn yaml.parse(actionFile) as ActionYaml;\n}\n","import glob from \"fast-glob\";\nimport * as cp from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as fsp from \"node:fs/promises\";\nimport * as path from \"node:path\";\n\nimport type { Config } from \"./schema\";\n\nimport { ERROR, INFO } from \"./log\";\n\nconst sh = String.raw;\n\nconst opts: { encoding: BufferEncoding } = { encoding: \"utf8\" };\n\nconst ignore = [\"**/node_modules/**\"];\n\nconst matches = [\n\t/.*README\\.md$/gi,\n\t/.*Cargo\\.toml$/gi,\n\t/.*action\\.ya?ml$/gi,\n\t/.*package\\.json$/gi,\n\t/.*pnpm-workspace\\.yaml$/gi,\n];\n\nexport async function fileExists(file: string) {\n\treturn await fsp\n\t\t.access(file)\n\t\t.then(() => true)\n\t\t.catch(() => false);\n}\n\nexport function findAffectedMarkdowns(root: string, config: Config) {\n\tconst affected = cp\n\t\t/* cspell:disable-next-line because of the filter */\n\t\t.execSync(sh`git diff --cached --name-only --diff-filter=MACT`, opts)\n\t\t.trim()\n\t\t.split(\"\\n\")\n\t\t.filter(Boolean);\n\n\tif (!affected.length) ERROR(\"no staged files found\");\n\n\tif (config.affectedRegexes?.length) {\n\t\tINFO(\"adding the following expressions: \", config.affectedRegexes);\n\t}\n\n\tconst allMatches = [\n\t\t...matches,\n\t\t...(config.affectedRegexes?.map((r) => new RegExp(r)) || []),\n\t];\n\n\tINFO(\"Checking affected files against regexes\", affected, allMatches);\n\n\tconst eligible = affected.filter((a) => allMatches.some((m) => a.match(m)));\n\n\tINFO(\"Found the following eligible affected files\", eligible);\n\n\tconst md = eligible.map((e) => findNearestReadme(root, path.resolve(e)));\n\tconst rootMd = path.join(root, \"README.md\");\n\tconst dedupe = [...new Set(md), rootMd].filter((s): s is string =>\n\t\tBoolean(s),\n\t);\n\n\tINFO(\"Found the following readmes\", dedupe);\n\n\treturn dedupe;\n}\n\nexport function findNearestReadme(\n\tgitRoot: string,\n\tinputFile: string,\n\tmaxRotations = 15,\n) {\n\tlet dir = path.dirname(inputFile);\n\tlet rotations = 0;\n\n\twhile (true) {\n\t\tconst option = path.join(dir, \"README.md\");\n\n\t\tif (fs.existsSync(option)) return option;\n\n\t\tconst parent = path.dirname(dir);\n\n\t\tif (parent === dir || dir === gitRoot || ++rotations > maxRotations) {\n\t\t\tbreak;\n\t\t}\n\n\t\tdir = parent;\n\t}\n\n\treturn null;\n}\n\nexport function getGitRoot() {\n\tconst root = cp.execSync(sh`git rev-parse --show-toplevel`, opts).trim();\n\n\tif (!root) {\n\t\tthrow new Error(\"must be ran within a git directory.\");\n\t}\n\n\tINFO(\"found git root at location: \", root);\n\n\treturn root;\n}\n\nexport async function getMarkdownPaths(cwd: string, config: Config) {\n\tconst pattern = `**/${config?.onlyReadmes ? \"README\" : \"*\"}.md`;\n\tconst readmes = await glob(pattern, { cwd, ignore });\n\treturn readmes.map((readme) => path.resolve(cwd, readme));\n}\n","import * as path from \"node:path\";\nimport { remark } from \"remark\";\nimport remarkCodeImport from \"remark-code-import\";\nimport remarkCollapse from \"remark-collapse\";\nimport remarkToc from \"remark-toc\";\nimport remarkUsage from \"remark-usage\";\nimport { VFile } from \"vfile\";\n\nimport type { ActionData } from \"./data\";\nimport type { Config } from \"./schema\";\n\nimport { createFindParameter } from \"./data\";\nimport { INFO, WARN } from \"./log\";\nimport { autoReadmeRemarkPlugin } from \"./plugin\";\nimport { fileExists } from \"./utils\";\n\nexport async function parse(\n\tfile: string,\n\tfilepath: string,\n\troot: string,\n\tconfig: Config,\n\tdata: ActionData,\n) {\n\tconst pipeline = remark()\n\t\t.use(autoReadmeRemarkPlugin, config, data)\n\t\t.use(remarkCodeImport, {});\n\n\tconst usage = data.find((d) => d.action === \"USAGE\");\n\n\tif (usage?.action === \"USAGE\" || config.enableUsage) {\n\t\tconst find = createFindParameter(usage?.parameters || []);\n\t\tconst examplePath = find(\"path\");\n\t\tconst dirname = path.dirname(filepath);\n\t\tconst resolvePath = examplePath && path.resolve(dirname, examplePath);\n\t\tconst relativeProjectPath =\n\t\t\tconfig.usageFile &&\n\t\t\tpath.relative(root, path.resolve(dirname, config.usageFile));\n\t\tconst example =\n\t\t\t(examplePath && resolvePath && path.relative(root, resolvePath)) ||\n\t\t\trelativeProjectPath ||\n\t\t\tundefined;\n\n\t\tif (example && (await fileExists(example))) {\n\t\t\tINFO(\"generating usage section\");\n\t\t\tpipeline.use(remarkUsage, {\n\t\t\t\texample,\n\t\t\t\theading: config.usageHeading,\n\t\t\t});\n\t\t} else {\n\t\t\tWARN(\"not able to find example file for readme\", filepath, example);\n\t\t}\n\t}\n\n\tif (config.enableToc) {\n\t\tINFO(\"generating table of contents section\");\n\t\tpipeline.use(remarkToc, { heading: config.tocHeading });\n\t}\n\n\tif (config.enableToc || config.collapseHeadings?.length) {\n\t\tconst additional = config.collapseHeadings?.length\n\t\t\t? config.collapseHeadings\n\t\t\t: [];\n\t\tconst headings = [...additional, config.tocHeading];\n\t\tpipeline.use(remarkCollapse, {\n\t\t\ttest: {\n\t\t\t\tignoreFinalDefinitions: true,\n\t\t\t\ttest: (value, _) => {\n\t\t\t\t\treturn headings.some((i) => value.trim() === i?.trim());\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t}\n\n\tconst vfile = new VFile({ path: path.resolve(filepath), value: file });\n\tconst markdown = await pipeline.process(vfile);\n\treturn markdown.toString();\n}\n","import type { Root } from \"mdast\";\nimport type { Plugin } from \"unified\";\n\nimport Handlebars from \"handlebars\";\nimport { markdownTable } from \"markdown-table\";\nimport { fromMarkdown } from \"mdast-util-from-markdown\";\nimport { zone } from \"mdast-zone\";\nimport path from \"node:path\";\n\nimport type { ActionData } from \"./data\";\nimport type { Config } from \"./schema\";\n\nimport { parseComment } from \"./comment\";\nimport { defaultTableHeadings, defaultTemplates } from \"./schema\";\n\ntype TemplateContext = {\n\tname: string;\n\turi_name: string;\n};\n\nfunction createHeading(\n\theadings: (keyof NonNullable<Config[\"templates\"]>[\"emojis\"])[],\n\tdisableEmojis = false,\n\temojis: typeof defaultTemplates.emojis = defaultTemplates.emojis,\n) {\n\treturn headings.map(\n\t\t(h) =>\n\t\t\t`${disableEmojis ? \"\" : emojis[h] + \" \"}${h?.at(0)?.toUpperCase() + h?.slice(1)}`,\n\t);\n}\n\nfunction wrapRequired(required: boolean | undefined, input: string) {\n\tif (!required) return input;\n\treturn `<b>*${input}</b>`;\n}\n\nexport const autoReadmeRemarkPlugin: Plugin<[Config, ActionData], Root> =\n\t(config, data) => (tree) => {\n\t\tzone(tree, /.*ZOD.*/gi, function (start, _, end) {\n\t\t\tconst zod = data.find((d) => d?.action === \"ZOD\");\n\t\t\tif (!zod?.body) {\n\t\t\t\tthrow new Error(\"unable to load zod body\");\n\t\t\t}\n\n\t\t\tconst ast = fromMarkdown(zod.body);\n\t\t\treturn [start, ast, end];\n\t\t});\n\n\t\tzone(tree, /.*ACTION.*/gi, function (start, _, end) {\n\t\t\tconst value = start.type === \"html\" && start.value;\n\t\t\tconst options = value && parseComment(value);\n\t\t\tif (!options) throw new Error(\"not able to parse comment\");\n\n\t\t\tconst first = data.find((d) => d?.action === \"ACTION\");\n\t\t\tconst inputs = first?.actionYaml?.inputs || {};\n\t\t\tconst heading = `### ${config.disableEmojis ? \"\" : \"🧰\"} actions`;\n\n\t\t\tif (options.format === \"LIST\") {\n\t\t\t\tconst body =\n\t\t\t\t\t`${heading}\\n` +\n\t\t\t\t\tObject.entries(inputs)\n\t\t\t\t\t\t.sort((a) => (a[1].required ? -1 : 1))\n\t\t\t\t\t\t.map(([key, value]) => {\n\t\t\t\t\t\t\treturn `- ${wrapRequired(value.required, key)}: (default: ${value.default})\\n\\n${value.description}`;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(\"\\n\");\n\t\t\t\tconst ast = fromMarkdown(body);\n\t\t\t\treturn [start, ast, end];\n\t\t\t}\n\n\t\t\tconst headings =\n\t\t\t\t(config.headings?.ACTION?.length && config.headings.ACTION) ||\n\t\t\t\tdefaultTableHeadings.ACTION!;\n\n\t\t\tconst table = markdownTable([\n\t\t\t\tcreateHeading(\n\t\t\t\t\theadings,\n\t\t\t\t\tconfig.disableEmojis,\n\t\t\t\t\tconfig.templates?.emojis,\n\t\t\t\t),\n\t\t\t\t...Object.entries(inputs).map(([k, v]) =>\n\t\t\t\t\theadings\n\t\t\t\t\t\t.map((heading) => v[heading as keyof typeof v] || k)\n\t\t\t\t\t\t.map(String),\n\t\t\t\t),\n\t\t\t]);\n\t\t\tconst body = [heading, \"\", table].join(\"\\n\");\n\t\t\tconst ast = fromMarkdown(body);\n\t\t\treturn [start, ast, end];\n\t\t});\n\n\t\tzone(tree, /.*WORKSPACE.*/gi, function (start, _, end) {\n\t\t\tconst value = start.type === \"html\" && start.value;\n\t\t\tconst comment = value && parseComment(value);\n\t\t\tconst workspace = data.find((d) => d?.action === \"WORKSPACE\");\n\t\t\tconst templates = loadTemplates(config.templates);\n\t\t\tconst packages = workspace?.workspaces?.packages || [];\n\t\t\tconst headings =\n\t\t\t\t(config.headings?.WORKSPACE?.length &&\n\t\t\t\t\tconfig.headings?.WORKSPACE) ||\n\t\t\t\tdefaultTableHeadings.WORKSPACE!;\n\n\t\t\tif (comment && comment.format === \"LIST\") {\n\t\t\t\t// throw new Error(\"List is currently not su\")\n\t\t\t}\n\n\t\t\tconst tableHeadings = createHeading(\n\t\t\t\theadings,\n\t\t\t\tconfig.disableEmojis,\n\t\t\t\tconfig.templates?.emojis,\n\t\t\t);\n\n\t\t\tconst table = markdownTable([\n\t\t\t\ttableHeadings,\n\t\t\t\t...packages\n\t\t\t\t\t.filter((pkg) =>\n\t\t\t\t\t\tconfig.onlyShowPublicPackages\n\t\t\t\t\t\t\t? !pkg.packageJson.private\n\t\t\t\t\t\t\t: true,\n\t\t\t\t\t)\n\t\t\t\t\t.map((pkg) => {\n\t\t\t\t\t\tconst { name } = pkg.packageJson;\n\t\t\t\t\t\treturn headings.map((heading) => {\n\t\t\t\t\t\t\tif (heading === \"name\") {\n\t\t\t\t\t\t\t\tconst scoped = config.removeScope\n\t\t\t\t\t\t\t\t\t? name.replace(config.removeScope, \"\")\n\t\t\t\t\t\t\t\t\t: name;\n\t\t\t\t\t\t\t\treturn `[${scoped}](${path.relative(\n\t\t\t\t\t\t\t\t\tprocess.cwd(),\n\t\t\t\t\t\t\t\t\tpath.resolve(pkg.dir, \"README.md\"),\n\t\t\t\t\t\t\t\t)})`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (heading === \"version\") {\n\t\t\t\t\t\t\t\treturn `![npm version image](${templates.versionImage(\n\t\t\t\t\t\t\t\t\t{ uri_name: encodeURIComponent(name) },\n\t\t\t\t\t\t\t\t)})`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (heading === \"downloads\") {\n\t\t\t\t\t\t\t\treturn `![npm downloads](${templates.downloadImage(\n\t\t\t\t\t\t\t\t\t{ name },\n\t\t\t\t\t\t\t\t)})`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (heading === \"description\") {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\tpkg.packageJson as { description?: string }\n\t\t\t\t\t\t\t\t)?.description;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn ``;\n\t\t\t\t\t\t});\n\t\t\t\t\t}),\n\t\t\t]);\n\n\t\t\tconst heading = `### ${config.disableEmojis ? \"\" : \"🏭\"} workspace`;\n\t\t\tconst body = [heading, \"\", table].join(\"\\n\");\n\t\t\tconst ast = fromMarkdown(body);\n\t\t\treturn [start, ast, end];\n\t\t});\n\n\t\tzone(tree, /.*PKG.*/gi, function (start, _, end) {\n\t\t\tconst value = start.type === \"html\" && start.value;\n\t\t\tconst comment = value && parseComment(value);\n\t\t\tconst first = data.find((d) => d?.action === \"PKG\");\n\t\t\tconst templates = loadTemplates(config.templates);\n\t\t\tconst headings =\n\t\t\t\t(config.headings?.PKG?.length && config.headings?.PKG) ||\n\t\t\t\tdefaultTableHeadings.PKG!;\n\n\t\t\tif (comment && comment.format === \"LIST\") {\n\t\t\t\tconst ast = fromMarkdown(\"\");\n\t\t\t\treturn [start, ast, end];\n\t\t\t}\n\n\t\t\tfunction mapDependencies(isDev: boolean) {\n\t\t\t\treturn function ([name, version]: [string, string]) {\n\t\t\t\t\tconst url = templates.registryUrl({ name });\n\t\t\t\t\treturn headings.map((key) => {\n\t\t\t\t\t\tif (key === \"devDependency\") {\n\t\t\t\t\t\t\tif (config.disableEmojis) {\n\t\t\t\t\t\t\t\treturn `\\`${isDev}\\``;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn `${isDev ? \"⌨️\" : \"👥\"}`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (key === \"name\") {\n\t\t\t\t\t\t\treturn `[${name}](${url})`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (key === \"version\") {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t[\"workspace\", \"catalog\", \"*\"].some((type) =>\n\t\t\t\t\t\t\t\t\tversion.includes(type),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn `\\`${version}\\``;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn `![npm version](${templates.versionImage({ uri_name: encodeURIComponent(name) })})`;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst { dependencies = {}, devDependencies = {} } =\n\t\t\t\tfirst?.pkgJson || {};\n\n\t\t\tconst table = markdownTable([\n\t\t\t\tcreateHeading(\n\t\t\t\t\theadings,\n\t\t\t\t\tconfig.disableEmojis,\n\t\t\t\t\tconfig.templates?.emojis,\n\t\t\t\t),\n\t\t\t\t...Object.entries(devDependencies).map(mapDependencies(true)),\n\t\t\t\t...Object.entries(dependencies).map(mapDependencies(false)),\n\t\t\t]);\n\n\t\t\tconst heading = `### ${config.disableEmojis ? \"\" : \"📦\"} packages`;\n\t\t\tconst body = [heading, \"\", table].join(\"\\n\");\n\t\t\tconst tableAst = fromMarkdown(body);\n\n\t\t\treturn [start, tableAst, end];\n\t\t});\n\t};\n\nfunction loadTemplates(\n\ttemplates: Config[\"templates\"],\n): Record<\n\tkeyof NonNullable<Config[\"templates\"]>,\n\t(context: Partial<TemplateContext>) => string\n> {\n\tif (!templates) throw new Error(\"failed to load templates\");\n\n\treturn Object.fromEntries(\n\t\tObject.entries(templates).map(([key, value]) => {\n\t\t\tif (typeof value !== \"string\") return [];\n\t\t\treturn [key, Handlebars.compile(value)];\n\t\t}),\n\t);\n}\n"],"mappings":"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","names":["import_mdast_util_from_markdown","cp","fsp","import_zod","yargs","debug","z","import_debug","debug","args","opts","deepmerge","toml","fs","fsp","path","glob","error","path","body","value","ast","heading","path","Handlebars","parse","remarkCodeImport","dirname","remarkUsage","remarkToc","remarkCollapse","args","ora","path","parse","opts"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/args.ts","../src/schema.js","../src/comment.ts","../src/log.ts","../src/config.ts","../src/data.ts","../src/utils.ts","../src/pipeline.ts","../src/plugin.ts"],"sourcesContent":["import { fromMarkdown } from \"mdast-util-from-markdown\";\nimport * as cp from \"node:child_process\";\nimport * as fsp from \"node:fs/promises\";\nimport ora from \"ora\";\n\nimport type { Config } from \"./schema\";\n\nimport { parseArgs } from \"./args\";\nimport { loadAstComments } from \"./comment\";\nimport { loadConfig } from \"./config\";\nimport { loadActionData } from \"./data\";\nimport { ERROR, INFO, WARN } from \"./log\";\nimport { parse } from \"./pipeline\";\nimport {\n\tfindAffectedMarkdowns,\n\tgetGitRoot,\n\tgetMarkdownPaths,\n\tgetPrettierPaths,\n} from \"./utils\";\n\nexport async function run() {\n\tconst args = await parseArgs();\n\tconst config: Config = (await loadConfig(args)) || {};\n\n\tINFO(\"Loaded the following configuration:\", config);\n\n\tconst root = getGitRoot();\n\n\tconst isAffected = args.changes && \"affected\";\n\n\tINFO(`Loading ${!isAffected ? \"all \" : \"affected \"}files`);\n\n\tconst paths = isAffected\n\t\t? findAffectedMarkdowns(root, config)\n\t\t: await getMarkdownPaths(root, config);\n\n\tINFO(\"Loaded the following files:\", paths.join(\"\\n\"));\n\n\tconst type = args.onlyReadmes ? \"readmes\" : \"all markdown files\";\n\n\tif (!paths.length) {\n\t\treturn ERROR(`no ${isAffected} readmes found to update`);\n\t}\n\n\tconst spinner = !args.verbose && ora(`Updating ${type}`).start();\n\n\tawait Promise.all(\n\t\tpaths.map(async (path) => {\n\t\t\tconst file = await fsp.readFile(path, { encoding: \"utf8\" });\n\t\t\t// get rid of ast via garbage collector faster\n\t\t\tconst actions = (() => {\n\t\t\t\tconst ast = fromMarkdown(file);\n\t\t\t\treturn loadAstComments(ast);\n\t\t\t})();\n\n\t\t\tif (!actions.length) {\n\t\t\t\tWARN(`no action comments found in`, path);\n\t\t\t\tif (!config.enableUsage || !config.enableToc) {\n\t\t\t\t\treturn ERROR(\"no action or plugins found\");\n\t\t\t\t} else {\n\t\t\t\t\tINFO(\"plugins enabled. continuing parsing\", path);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst data = await loadActionData(actions, path, root);\n\n\t\t\tINFO(\"Loaded comment action data\", data);\n\n\t\t\tconst content = await parse(file, path, root, config, data);\n\t\t\tawait fsp.writeFile(path, content);\n\t\t}),\n\t);\n\n\tconst opts: cp.CommonExecOptions = { stdio: \"inherit\" };\n\n\tif (config.enablePrettier) {\n\t\tINFO(\"formatting with prettier\");\n\n\t\tconst prettierPaths = await getPrettierPaths(paths);\n\t\tcp.execFileSync(\"prettier\", [\"--write\", ...prettierPaths], opts);\n\t}\n\n\tif (isAffected) {\n\t\tINFO(\"adding affected files to git stage\");\n\n\t\tcp.execFileSync(\"git\", [\"add\", ...paths], opts);\n\t}\n\n\tif (spinner) spinner.stop();\n}\n","import debug from \"debug\";\nimport yargs, { type Options } from \"yargs\";\nimport { hideBin } from \"yargs/helpers\";\nimport z from \"zod\";\n\nimport { configSchema } from \"./schema\";\n\nexport type Args = Awaited<ReturnType<typeof parseArgs>>;\n\nconst complexOptions = [\n\t\"affectedRegexes\",\n\t\"collapseHeadings\",\n\t\"headings\",\n\t\"templates\",\n] as const;\n\ntype ComplexOptions = (typeof complexOptions)[number];\n\nconst args = {\n\t...zodToYargs(),\n\tchanges: {\n\t\talias: \"g\",\n\t\tdefault: false,\n\t\tdescription: \"Check only changed git files\",\n\t\ttype: \"boolean\",\n\t},\n\tcheck: {\n\t\talias: \"k\",\n\t\tdefault: false,\n\t\tdescription: \"Do not write to files. Only check for changes\",\n\t\ttype: \"boolean\",\n\t},\n\tconfig: { alias: \"c\", description: \"Path to config file\", type: \"string\" },\n} satisfies Record<string, Options>;\n\nexport async function parseArgs() {\n\tconst yargsInstance = yargs(hideBin(process.argv))\n\t\t.options(args)\n\t\t.help(\"h\")\n\t\t.alias(\"h\", \"help\")\n\t\t.epilogue(`--> @stephansama open-source ${new Date().getFullYear()}`);\n\n\tconst parsed = await yargsInstance\n\t\t.wrap(yargsInstance.terminalWidth())\n\t\t.parse();\n\n\tif (parsed.verbose) debug.enable(\"autoreadme*\");\n\n\treturn parsed;\n}\n\nexport function zodToYargs(): Omit<\n\tRecord<keyof typeof shape, Options>,\n\tComplexOptions\n> {\n\tconst { shape } = configSchema.unwrap();\n\tconst entries = Object.entries(shape).map(([key, value]) => {\n\t\tif (complexOptions.includes(key as ComplexOptions)) return [];\n\t\tif (value.def.innerType instanceof z.ZodObject) return [];\n\t\tconst meta = value.meta();\n\t\tconst { innerType } = value.def;\n\t\tconst isBoolean = innerType instanceof z.ZodBoolean;\n\t\tconst isNumber = innerType instanceof z.ZodNumber;\n\t\tconst isArray = innerType instanceof z.ZodArray;\n\n\t\tconst yargType: Options[\"type\"] =\n\t\t\t(isArray && \"array\") ||\n\t\t\t(isNumber && \"number\") ||\n\t\t\t(isBoolean && \"boolean\") ||\n\t\t\t\"string\";\n\n\t\tconst options: Options = {\n\t\t\tdefault: value.def.defaultValue,\n\t\t\ttype: yargType,\n\t\t};\n\n\t\tif (meta?.alias) options.alias = meta.alias as string;\n\t\tif (meta?.description) options.description = meta.description;\n\n\t\treturn [key, options];\n\t});\n\n\treturn Object.fromEntries(entries);\n}\n","import { z } from \"zod\";\n\nexport const actionsSchema = z\n\t.enum([\"ACTION\", \"PKG\", \"USAGE\", \"WORKSPACE\", \"ZOD\"])\n\t.describe(\"Comment action options\");\n\nexport const formatsSchema = z\n\t.enum([\"LIST\", \"TABLE\"])\n\t.default(\"TABLE\")\n\t.optional();\n\nexport const languageSchema = z.enum([\"JS\", \"RS\"]).optional().default(\"JS\");\n\nexport const headingsSchema = z\n\t.enum([\n\t\t\"default\",\n\t\t\"description\",\n\t\t\"devDependency\",\n\t\t\"downloads\",\n\t\t\"name\",\n\t\t\"private\",\n\t\t\"required\",\n\t\t\"version\",\n\t])\n\t.describe(\"Table heading options\");\n\nexport const tableHeadingsSchema = z\n\t.record(actionsSchema, headingsSchema.array().optional())\n\t.optional()\n\t.describe(\"Table heading action configuration\")\n\t.default({\n\t\tACTION: [\"name\", \"required\", \"default\", \"description\"],\n\t\tPKG: [\"name\", \"version\", \"devDependency\"],\n\t\tWORKSPACE: [\"name\", \"version\", \"downloads\", \"description\"],\n\t\tZOD: [],\n\t});\n\nexport const templatesSchema = z.object({\n\tdownloadImage: z\n\t\t.string()\n\t\t.optional()\n\t\t.default(\"https://img.shields.io/npm/dw/{{name}}?labelColor=211F1F\"),\n\temojis: z\n\t\t.record(headingsSchema, z.string())\n\t\t.optional()\n\t\t.describe(\"Table heading emojis used when enabled\")\n\t\t.default({\n\t\t\tdefault: \"⚙️\",\n\t\t\tdescription: \"📝\",\n\t\t\tdevDependency: \"💻\",\n\t\t\tdownloads: \"📥\",\n\t\t\tname: \"🏷️\",\n\t\t\tprivate: \"🔒\",\n\t\t\trequired: \"\",\n\t\t\tversion: \"\",\n\t\t}),\n\tregistryUrl: z\n\t\t.string()\n\t\t.optional()\n\t\t.default(\"https://www.npmjs.com/package/{{name}}\"),\n\tversionImage: z\n\t\t.string()\n\t\t.optional()\n\t\t.default(\n\t\t\t\"https://img.shields.io/npm/v/{{uri_name}}?logo=npm&logoColor=red&color=211F1F&labelColor=211F1F\",\n\t\t),\n});\n\nexport const defaultTemplates = templatesSchema.parse({});\nexport const defaultTableHeadings = tableHeadingsSchema.parse(undefined);\n\nconst _configSchema = z.object({\n\taffectedRegexes: z.string().array().optional().default([]),\n\tcollapseHeadings: z.string().array().optional().default([]),\n\tdefaultLanguage: languageSchema.meta({\n\t\talias: \"l\",\n\t\tdescription: \"Default language to infer projects from\",\n\t}),\n\tdisableEmojis: z.boolean().default(false).meta({\n\t\talias: \"e\",\n\t\tdescription: \"Whether or not to use emojis in markdown table headings\",\n\t}),\n\tdisableMarkdownHeadings: z.boolean().default(false).meta({\n\t\tdescription: \"Whether or not to display markdown headings\",\n\t}),\n\tenablePrettier: z.boolean().default(true).meta({\n\t\tdescription: \"Whether or not to use prettier to format the files\",\n\t}),\n\tenableToc: z.boolean().default(false).meta({\n\t\talias: \"t\",\n\t\tdescription: \"generate table of contents for readmes\",\n\t}),\n\tenableUsage: z.boolean().optional().default(false).meta({\n\t\tdescription: \"Whether or not to enable usage plugin\",\n\t}),\n\theadings: tableHeadingsSchema\n\t\t.optional()\n\t\t.default(defaultTableHeadings)\n\t\t.describe(\"List of headings for different table outputs\"),\n\tonlyReadmes: z.boolean().default(true).meta({\n\t\talias: \"r\",\n\t\tdescription: \"Whether or not to only traverse readmes\",\n\t}),\n\tonlyShowPublicPackages: z.boolean().default(false).meta({\n\t\talias: \"p\",\n\t\tdescription: \"Only show public packages in workspaces\",\n\t}),\n\tremoveScope: z.string().optional().default(\"\").meta({\n\t\tdescription: \"Remove common workspace scope\",\n\t}),\n\ttemplates: templatesSchema\n\t\t.optional()\n\t\t.default(defaultTemplates)\n\t\t.describe(\n\t\t\t\"Handlebars templates used to fuel list and table generation\",\n\t\t),\n\ttocHeading: z.string().optional().default(\"Table of contents\").meta({\n\t\tdescription: \"Markdown heading used to generate table of contents\",\n\t}),\n\tusageFile: z.string().optional().default(\"\").meta({\n\t\tdescription: \"Workspace level usage file\",\n\t}),\n\tusageHeading: z.string().optional().default(\"Usage\").meta({\n\t\tdescription: \"Markdown heading used to generate usage example\",\n\t}),\n\tverbose: z.boolean().default(false).meta({\n\t\talias: \"v\",\n\t\tdescription: \"whether or not to display verbose logging\",\n\t}),\n});\n\nexport const configSchema = _configSchema.optional();\n\n/** @typedef {Partial<z.infer<typeof _configSchema>>} Config */\n","import type { Html, Root } from \"mdast\";\n\nimport { commentMarker } from \"mdast-comment-marker\";\n\nimport { INFO } from \"./log\";\nimport { actionsSchema, formatsSchema, languageSchema } from \"./schema\";\n\nexport const SEPARATOR = \"-\" as const;\n\nexport type AstComments = ReturnType<typeof loadAstComments>;\n\nexport function loadAstComments(root: Root) {\n\treturn root.children\n\t\t.map((child) => child.type === \"html\" && getComment(child))\n\t\t.filter((f): f is ReturnType<typeof parseComment> => f !== false);\n}\n\nexport function parseComment(comment: string) {\n\tconst input = trimComment(comment);\n\tconst [type, ...parameters] = input.split(\" \");\n\tconst [first, second, third] = type.split(SEPARATOR);\n\n\tINFO(\"parsing inputs\", { first, second, third });\n\n\tconst languageInput = third ? first : undefined;\n\tconst actionInput = third ? second : first;\n\tconst formatInput = third ? third : second;\n\tconst language = languageSchema.parse(languageInput);\n\tconst action = actionsSchema.parse(actionInput);\n\tconst format = formatsSchema.parse(formatInput);\n\tconst isStart = comment.includes(\"start\");\n\tconst parsed = { action, format, isStart, language, parameters };\n\n\tINFO(`Parsed comment ${comment}`, parsed);\n\n\treturn parsed;\n}\n\nconst startComment = \"<!--\";\nconst endComment = \"-->\";\n\nexport function trimComment(comment: string) {\n\treturn comment\n\t\t.replace(startComment, \"\")\n\t\t.replace(/start|end/, \"\")\n\t\t.replace(endComment, \"\")\n\t\t.trim();\n}\n\nfunction getComment(comment: Html) {\n\tif (!isComment(comment.value)) return false;\n\n\tconst marker = commentMarker(comment);\n\tif (!marker) return false;\n\n\t// TODO: update parseComment to use comment marker\n\treturn parseComment(comment.value);\n}\n\nfunction isComment(comment: string) {\n\treturn comment.startsWith(startComment) && comment.endsWith(endComment);\n}\n","import debug from \"debug\";\n\nconst error = debug(\"autoreadme:error\");\nconst info = debug(\"autoreadme:info\");\nconst warn = debug(\"autoreadme:warn\");\n\nexport function ERROR(...rest: unknown[]) {\n\tconst [first, ...remaining] = rest;\n\terror(`${first} %O`, ...remaining);\n}\n\nexport function INFO(...rest: unknown[]) {\n\tconst [first, ...remaining] = rest;\n\tinfo(`${first} %O`, ...remaining);\n}\n\nexport function WARN(...rest: unknown[]) {\n\tconst [first, ...remaining] = rest;\n\twarn(`${first} %O`, ...remaining);\n}\n","import toml from \"@iarna/toml\";\nimport { cosmiconfig, getDefaultSearchPlaces, type Options } from \"cosmiconfig\";\nimport deepmerge from \"deepmerge\";\n\nimport type { Args } from \"./args\";\n\nimport { INFO, WARN } from \"./log\";\nimport { configSchema } from \"./schema\";\n\nconst moduleName = \"autoreadme\";\n\nconst searchPlaces = getSearchPlaces();\n\nconst loaders = { [\".toml\"]: loadToml };\n\nexport async function loadConfig(args: Partial<Args>) {\n\tconst opts: Partial<Options> = { loaders, searchPlaces };\n\n\tif (args.config) opts.searchPlaces = [args.config];\n\n\tconst explorer = cosmiconfig(moduleName, opts);\n\n\tconst search = await explorer.search();\n\n\tif (!search) {\n\t\tconst location = args.config ? \" at location: \" + args.config : \"\";\n\t\tWARN(`no config file found`, location);\n\t\tINFO(\"using default configuration\");\n\t} else {\n\t\tINFO(\"found configuration file at: \", search.filepath);\n\t\tINFO(\"loaded cosmiconfig\", search.config);\n\t}\n\n\targs = removeFalsy(args);\n\n\tINFO(\"merging config with args\", args);\n\n\treturn configSchema.parse(\n\t\tdeepmerge(search?.config || {}, args, {\n\t\t\tarrayMerge: (_, sourceArray) => sourceArray,\n\t\t}),\n\t);\n}\n\nexport function loadToml(_filepath: string, content: string) {\n\treturn toml.parse(content);\n}\n\nfunction getSearchPlaces() {\n\treturn [\n\t\t...getDefaultSearchPlaces(moduleName),\n\t\t`.${moduleName}rc.toml`,\n\t\t`.config/.${moduleName}rc`,\n\t\t`.config/${moduleName}rc.toml`,\n\t\t`.config/.${moduleName}rc.toml`,\n\t\t`.config/.${moduleName}rc.json`,\n\t\t`.config/.${moduleName}rc.yaml`,\n\t\t`.config/.${moduleName}rc.yml`,\n\t];\n}\n\nfunction removeFalsy(obj: object) {\n\treturn Object.fromEntries(\n\t\tObject.entries(obj)\n\t\t\t.map(([k, v]) => (!v ? false : [k, v]))\n\t\t\t.filter((e): e is [string, unknown] => Boolean(e)),\n\t);\n}\n","import { getPackages } from \"@manypkg/get-packages\";\nimport * as fs from \"node:fs\";\nimport * as fsp from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { readPackageJSON } from \"pkg-types\";\nimport * as yaml from \"yaml\";\nimport { zod2md } from \"zod2md\";\n\nimport type { AstComments } from \"./comment\";\n\nimport { fileExists } from \"./utils\";\n\nexport type ActionData = Awaited<ReturnType<typeof loadActionData>>;\n\nexport type ActionTableHeading = \"name\" | keyof ActionInput;\n\nexport type ActionYaml = { inputs?: Record<string, ActionInput> };\n\ntype ActionInput = {\n\tdefault?: string;\n\tdescription?: string;\n\trequired?: boolean;\n};\n\nexport function createFindParameter(parameterList: string[]) {\n\treturn function (parameterName: string) {\n\t\treturn parameterList\n\t\t\t?.find((p) => p.startsWith(parameterName))\n\t\t\t?.replace(parameterName + \"=\", \"\")\n\t\t\t?.replace(/\"/gi, \"\")\n\t\t\t?.replace(/_/gi, \" \");\n\t};\n}\n\nexport async function loadActionData(\n\tactions: AstComments,\n\tfile: string,\n\troot: string,\n) {\n\tconst startActions = actions.filter((action) => action.isStart);\n\treturn await Promise.all(\n\t\tstartActions.map(async (action) => {\n\t\t\tconst find = createFindParameter(action.parameters);\n\t\t\tswitch (action.action) {\n\t\t\t\tcase \"ACTION\": {\n\t\t\t\t\tconst baseDir = path.dirname(file);\n\t\t\t\t\tconst actionYaml = await loadActionYaml(baseDir);\n\t\t\t\t\treturn {\n\t\t\t\t\t\taction: action.action,\n\t\t\t\t\t\tactionYaml,\n\t\t\t\t\t\tparameters: action.parameters,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tcase \"PKG\": {\n\t\t\t\t\tconst inputPath = find(\"path\");\n\t\t\t\t\tconst filename = inputPath\n\t\t\t\t\t\t? path.resolve(path.dirname(file), inputPath)\n\t\t\t\t\t\t: path.dirname(file);\n\t\t\t\t\tconst pkgJson = await readPackageJSON(filename);\n\t\t\t\t\treturn {\n\t\t\t\t\t\taction: action.action,\n\t\t\t\t\t\tparameters: action.parameters,\n\t\t\t\t\t\tpkgJson,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tcase \"USAGE\": {\n\t\t\t\t\treturn {\n\t\t\t\t\t\taction: action.action,\n\t\t\t\t\t\tparameters: action.parameters,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tcase \"WORKSPACE\": {\n\t\t\t\t\tconst workspaces = await getPackages(process.cwd());\n\t\t\t\t\tconst pnpmPath = path.resolve(root, \"pnpm-workspace.yaml\");\n\t\t\t\t\tconst isPnpm = fs.existsSync(pnpmPath);\n\t\t\t\t\treturn {\n\t\t\t\t\t\taction: action.action,\n\t\t\t\t\t\tisPnpm,\n\t\t\t\t\t\tparameters: action.parameters,\n\t\t\t\t\t\troot,\n\t\t\t\t\t\tworkspaces,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tcase \"ZOD\": {\n\t\t\t\t\tif (action.format === \"LIST\") {\n\t\t\t\t\t\tthrow new Error(\"cannot display zod in list format\");\n\t\t\t\t\t}\n\n\t\t\t\t\tconst inputPath = find(\"path\");\n\t\t\t\t\tif (!inputPath) {\n\t\t\t\t\t\tconst error = `no path found for zod table at markdown file ${file}`;\n\t\t\t\t\t\tthrow new Error(error);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst body = await zod2md({\n\t\t\t\t\t\tentry: path.resolve(path.dirname(file), inputPath),\n\t\t\t\t\t\ttitle: find(\"title\") || \"Zod Schema\",\n\t\t\t\t\t});\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\taction: action.action,\n\t\t\t\t\t\tbody,\n\t\t\t\t\t\tparameters: action.parameters,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"feature not yet implemented\");\n\t\t\t}\n\t\t}),\n\t);\n}\n\nasync function loadActionYaml(baseDir: string) {\n\tconst actionYmlPath = path.resolve(baseDir, \"action.yml\");\n\tconst actionYamlPath = path.resolve(baseDir, \"action.yaml\");\n\tconst actualPath =\n\t\t((await fileExists(actionYamlPath)) && actionYamlPath) ||\n\t\t((await fileExists(actionYmlPath)) && actionYmlPath);\n\n\tif (!actualPath) {\n\t\tconst locations = [actionYmlPath, actionYamlPath];\n\t\tconst error = `no yaml file found at locations: ${locations}`;\n\t\tthrow new Error(error);\n\t}\n\n\tconst actionFile = await fsp.readFile(actualPath, { encoding: \"utf8\" });\n\n\treturn yaml.parse(actionFile) as ActionYaml;\n}\n","import glob from \"fast-glob\";\nimport * as cp from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as fsp from \"node:fs/promises\";\nimport * as path from \"node:path\";\n\nimport type { Config } from \"./schema\";\n\nimport { ERROR, INFO } from \"./log\";\n\nconst sh = String.raw;\n\nconst opts: { encoding: BufferEncoding } = { encoding: \"utf8\" };\n\nconst ignore = [\"**/node_modules/**\"];\n\nconst matches = [\n\t/.*README\\.md$/gi,\n\t/.*Cargo\\.toml$/gi,\n\t/.*action\\.ya?ml$/gi,\n\t/.*package\\.json$/gi,\n\t/.*pnpm-workspace\\.yaml$/gi,\n];\n\nexport async function fileExists(file: string) {\n\treturn await fsp\n\t\t.access(file)\n\t\t.then(() => true)\n\t\t.catch(() => false);\n}\n\nexport function findAffectedMarkdowns(root: string, config: Config) {\n\tconst affected = cp\n\t\t/* cspell:disable-next-line because of the filter */\n\t\t.execSync(sh`git diff --cached --name-only --diff-filter=MACT`, opts)\n\t\t.trim()\n\t\t.split(\"\\n\")\n\t\t.filter(Boolean);\n\n\tif (!affected.length) ERROR(\"no staged files found\");\n\n\tif (config.affectedRegexes?.length) {\n\t\tINFO(\"adding the following expressions: \", config.affectedRegexes);\n\t}\n\n\tconst allMatches = [\n\t\t...matches,\n\t\t...(config.affectedRegexes?.map((r) => new RegExp(r)) || []),\n\t];\n\n\tINFO(\"Checking affected files against regexes\", affected, allMatches);\n\n\tconst eligible = affected.filter((a) => allMatches.some((m) => a.match(m)));\n\n\tINFO(\"Found the following eligible affected files\", eligible);\n\n\tconst md = eligible.map((e) => findNearestReadme(root, path.resolve(e)));\n\tconst rootMd = path.join(root, \"README.md\");\n\tconst dedupe = [...new Set(md), rootMd].filter((s): s is string =>\n\t\tBoolean(s),\n\t);\n\n\tINFO(\"Found the following readmes\", dedupe);\n\n\treturn dedupe;\n}\n\nexport function findNearestReadme(\n\tgitRoot: string,\n\tinputFile: string,\n\tmaxRotations = 15,\n) {\n\tlet dir = path.dirname(inputFile);\n\tlet rotations = 0;\n\n\twhile (true) {\n\t\tconst option = path.join(dir, \"README.md\");\n\n\t\tif (fs.existsSync(option)) return option;\n\n\t\tconst parent = path.dirname(dir);\n\n\t\tif (parent === dir || dir === gitRoot || ++rotations > maxRotations) {\n\t\t\tbreak;\n\t\t}\n\n\t\tdir = parent;\n\t}\n\n\treturn null;\n}\n\nexport function getGitRoot() {\n\tconst root = cp.execSync(sh`git rev-parse --show-toplevel`, opts).trim();\n\n\tif (!root) {\n\t\tthrow new Error(\"must be ran within a git directory.\");\n\t}\n\n\tINFO(\"found git root at location: \", root);\n\n\treturn root;\n}\n\nexport async function getMarkdownPaths(cwd: string, config: Config) {\n\tconst pattern = `**/${config?.onlyReadmes ? \"README\" : \"*\"}.md`;\n\tconst readmes = await glob(pattern, { cwd, ignore });\n\treturn readmes.map((readme) => path.resolve(cwd, readme));\n}\n\nexport async function getPrettierPaths(paths: string[]) {\n\treturn await Promise.all(\n\t\tpaths.map(async (file) => {\n\t\t\tconst stats = await fsp.lstat(file);\n\t\t\tconst isSymbolicLink = stats.isSymbolicLink();\n\t\t\tif (!isSymbolicLink) return file;\n\t\t\tconst symlink = await fsp.readlink(file);\n\t\t\treturn path.join(path.dirname(file), symlink);\n\t\t}),\n\t);\n}\n","import * as path from \"node:path\";\nimport { remark } from \"remark\";\nimport remarkCodeImport from \"remark-code-import\";\nimport remarkCollapse from \"remark-collapse\";\nimport remarkToc from \"remark-toc\";\nimport remarkUsage from \"remark-usage\";\nimport { VFile } from \"vfile\";\n\nimport type { ActionData } from \"./data\";\nimport type { Config } from \"./schema\";\n\nimport { createFindParameter } from \"./data\";\nimport { INFO, WARN } from \"./log\";\nimport { autoReadmeRemarkPlugin } from \"./plugin\";\nimport { fileExists } from \"./utils\";\n\nexport async function parse(\n\tfile: string,\n\tfilepath: string,\n\troot: string,\n\tconfig: Config,\n\tdata: ActionData,\n) {\n\tconst pipeline = remark()\n\t\t.use(autoReadmeRemarkPlugin, config, data)\n\t\t.use(remarkCodeImport, {});\n\n\tconst usage = data.find((d) => d.action === \"USAGE\");\n\n\tif (usage?.action === \"USAGE\" || config.enableUsage) {\n\t\tconst find = createFindParameter(usage?.parameters || []);\n\t\tconst examplePath = find(\"path\");\n\t\tconst dirname = path.dirname(filepath);\n\t\tconst resolvePath = examplePath && path.resolve(dirname, examplePath);\n\t\tconst relativeProjectPath =\n\t\t\tconfig.usageFile &&\n\t\t\tpath.relative(root, path.resolve(dirname, config.usageFile));\n\t\tconst example =\n\t\t\t(examplePath && resolvePath && path.relative(root, resolvePath)) ||\n\t\t\trelativeProjectPath ||\n\t\t\tundefined;\n\n\t\tif (example && (await fileExists(example))) {\n\t\t\tINFO(\"generating usage section\");\n\t\t\tpipeline.use(remarkUsage, {\n\t\t\t\texample,\n\t\t\t\theading: config.usageHeading,\n\t\t\t});\n\t\t} else {\n\t\t\tWARN(\"not able to find example file for readme\", filepath, example);\n\t\t}\n\t}\n\n\tif (config.enableToc) {\n\t\tINFO(\"generating table of contents section\");\n\t\tpipeline.use(remarkToc, { heading: config.tocHeading });\n\t}\n\n\tif (config.enableToc || config.collapseHeadings?.length) {\n\t\tconst additional = config.collapseHeadings?.length\n\t\t\t? config.collapseHeadings\n\t\t\t: [];\n\t\tconst headings = [...additional, config.tocHeading];\n\t\tpipeline.use(remarkCollapse, {\n\t\t\ttest: {\n\t\t\t\tignoreFinalDefinitions: true,\n\t\t\t\ttest: (value, _) => {\n\t\t\t\t\treturn headings.some((i) => value.trim() === i?.trim());\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t}\n\n\tconst vfile = new VFile({ path: path.resolve(filepath), value: file });\n\tconst markdown = await pipeline.process(vfile);\n\treturn markdown.toString();\n}\n","import type { Root } from \"mdast\";\nimport type { Plugin } from \"unified\";\n\nimport Handlebars from \"handlebars\";\nimport { markdownTable } from \"markdown-table\";\nimport { fromMarkdown } from \"mdast-util-from-markdown\";\nimport { zone } from \"mdast-zone\";\nimport path from \"node:path\";\n\nimport type { ActionData } from \"./data\";\nimport type { Config } from \"./schema\";\n\nimport { parseComment } from \"./comment\";\nimport { defaultTableHeadings, defaultTemplates } from \"./schema\";\n\ntype TemplateContext = {\n\tname: string;\n\turi_name: string;\n};\n\nfunction createHeading(\n\theadings: (keyof NonNullable<Config[\"templates\"]>[\"emojis\"])[],\n\tdisableEmojis = false,\n\temojis: typeof defaultTemplates.emojis = defaultTemplates.emojis,\n) {\n\treturn headings.map(\n\t\t(h) =>\n\t\t\t`${disableEmojis ? \"\" : emojis[h] + \" \"}${h?.at(0)?.toUpperCase() + h?.slice(1)}`,\n\t);\n}\n\nfunction wrapRequired(required: boolean | undefined, input: string) {\n\tif (!required) return input;\n\treturn `<b>*${input}</b>`;\n}\n\nexport const autoReadmeRemarkPlugin: Plugin<[Config, ActionData], Root> =\n\t(config, data) => (tree) => {\n\t\tzone(tree, /.*ZOD.*/gi, function (start, _, end) {\n\t\t\tconst zod = data.find((d) => d?.action === \"ZOD\");\n\t\t\tif (!zod?.body) {\n\t\t\t\tthrow new Error(\"unable to load zod body\");\n\t\t\t}\n\n\t\t\tconst ast = fromMarkdown(zod.body);\n\t\t\treturn [start, ast, end];\n\t\t});\n\n\t\tzone(tree, /.*ACTION.*/gi, function (start, _, end) {\n\t\t\tconst value = start.type === \"html\" && start.value;\n\t\t\tconst options = value && parseComment(value);\n\t\t\tif (!options) throw new Error(\"not able to parse comment\");\n\n\t\t\tconst first = data.find((d) => d?.action === \"ACTION\");\n\t\t\tconst inputs = first?.actionYaml?.inputs || {};\n\t\t\tconst heading = `### ${config.disableEmojis ? \"\" : \"🧰\"} actions`;\n\n\t\t\tif (options.format === \"LIST\") {\n\t\t\t\tconst body =\n\t\t\t\t\t`${heading}\\n` +\n\t\t\t\t\tObject.entries(inputs)\n\t\t\t\t\t\t.sort((a) => (a[1].required ? -1 : 1))\n\t\t\t\t\t\t.map(([key, value]) => {\n\t\t\t\t\t\t\treturn `- ${wrapRequired(value.required, key)}: (default: ${value.default})\\n\\n${value.description}`;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(\"\\n\");\n\t\t\t\tconst ast = fromMarkdown(body);\n\t\t\t\treturn [start, ast, end];\n\t\t\t}\n\n\t\t\tconst headings =\n\t\t\t\t(config.headings?.ACTION?.length && config.headings.ACTION) ||\n\t\t\t\tdefaultTableHeadings.ACTION!;\n\n\t\t\tconst table = markdownTable([\n\t\t\t\tcreateHeading(\n\t\t\t\t\theadings,\n\t\t\t\t\tconfig.disableEmojis,\n\t\t\t\t\tconfig.templates?.emojis,\n\t\t\t\t),\n\t\t\t\t...Object.entries(inputs).map(([k, v]) =>\n\t\t\t\t\theadings\n\t\t\t\t\t\t.map((heading) => v[heading as keyof typeof v] || k)\n\t\t\t\t\t\t.map(String),\n\t\t\t\t),\n\t\t\t]);\n\t\t\tconst body = [heading, \"\", table].join(\"\\n\");\n\t\t\tconst ast = fromMarkdown(body);\n\t\t\treturn [start, ast, end];\n\t\t});\n\n\t\tzone(tree, /.*WORKSPACE.*/gi, function (start, _, end) {\n\t\t\tconst value = start.type === \"html\" && start.value;\n\t\t\tconst comment = value && parseComment(value);\n\t\t\tconst workspace = data.find((d) => d?.action === \"WORKSPACE\");\n\t\t\tconst templates = loadTemplates(config.templates);\n\t\t\tconst packages = workspace?.workspaces?.packages || [];\n\t\t\tconst headings =\n\t\t\t\t(config.headings?.WORKSPACE?.length &&\n\t\t\t\t\tconfig.headings?.WORKSPACE) ||\n\t\t\t\tdefaultTableHeadings.WORKSPACE!;\n\n\t\t\tif (comment && comment.format === \"LIST\") {\n\t\t\t\t// throw new Error(\"List is currently not su\")\n\t\t\t}\n\n\t\t\tconst tableHeadings = createHeading(\n\t\t\t\theadings,\n\t\t\t\tconfig.disableEmojis,\n\t\t\t\tconfig.templates?.emojis,\n\t\t\t);\n\n\t\t\tconst table = markdownTable([\n\t\t\t\ttableHeadings,\n\t\t\t\t...packages\n\t\t\t\t\t.filter((pkg) =>\n\t\t\t\t\t\tconfig.onlyShowPublicPackages\n\t\t\t\t\t\t\t? !pkg.packageJson.private\n\t\t\t\t\t\t\t: true,\n\t\t\t\t\t)\n\t\t\t\t\t.map((pkg) => {\n\t\t\t\t\t\tconst { name } = pkg.packageJson;\n\t\t\t\t\t\treturn headings.map((heading) => {\n\t\t\t\t\t\t\tif (heading === \"name\") {\n\t\t\t\t\t\t\t\tconst scoped = config.removeScope\n\t\t\t\t\t\t\t\t\t? name.replace(config.removeScope, \"\")\n\t\t\t\t\t\t\t\t\t: name;\n\t\t\t\t\t\t\t\treturn `[${scoped}](${path.relative(\n\t\t\t\t\t\t\t\t\tprocess.cwd(),\n\t\t\t\t\t\t\t\t\tpath.resolve(pkg.dir, \"README.md\"),\n\t\t\t\t\t\t\t\t)})`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (heading === \"version\") {\n\t\t\t\t\t\t\t\treturn `![npm version image](${templates.versionImage(\n\t\t\t\t\t\t\t\t\t{ uri_name: encodeURIComponent(name) },\n\t\t\t\t\t\t\t\t)})`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (heading === \"downloads\") {\n\t\t\t\t\t\t\t\treturn `![npm downloads](${templates.downloadImage(\n\t\t\t\t\t\t\t\t\t{ name },\n\t\t\t\t\t\t\t\t)})`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (heading === \"description\") {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\tpkg.packageJson as { description?: string }\n\t\t\t\t\t\t\t\t)?.description;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn ``;\n\t\t\t\t\t\t});\n\t\t\t\t\t}),\n\t\t\t]);\n\n\t\t\tconst heading = `### ${config.disableEmojis ? \"\" : \"🏭\"} workspace`;\n\t\t\tconst body = [heading, \"\", table].join(\"\\n\");\n\t\t\tconst ast = fromMarkdown(body);\n\t\t\treturn [start, ast, end];\n\t\t});\n\n\t\tzone(tree, /.*PKG.*/gi, function (start, _, end) {\n\t\t\tconst value = start.type === \"html\" && start.value;\n\t\t\tconst comment = value && parseComment(value);\n\t\t\tconst first = data.find((d) => d?.action === \"PKG\");\n\t\t\tconst templates = loadTemplates(config.templates);\n\t\t\tconst headings =\n\t\t\t\t(config.headings?.PKG?.length && config.headings?.PKG) ||\n\t\t\t\tdefaultTableHeadings.PKG!;\n\n\t\t\tif (comment && comment.format === \"LIST\") {\n\t\t\t\tconst ast = fromMarkdown(\"\");\n\t\t\t\treturn [start, ast, end];\n\t\t\t}\n\n\t\t\tfunction mapDependencies(isDev: boolean) {\n\t\t\t\treturn function ([name, version]: [string, string]) {\n\t\t\t\t\tconst url = templates.registryUrl({ name });\n\t\t\t\t\treturn headings.map((key) => {\n\t\t\t\t\t\tif (key === \"devDependency\") {\n\t\t\t\t\t\t\tif (config.disableEmojis) {\n\t\t\t\t\t\t\t\treturn `\\`${isDev}\\``;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn `${isDev ? \"⌨️\" : \"👥\"}`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (key === \"name\") {\n\t\t\t\t\t\t\treturn `[${name}](${url})`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (key === \"version\") {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t[\"workspace\", \"catalog\", \"*\"].some((type) =>\n\t\t\t\t\t\t\t\t\tversion.includes(type),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn `\\`${version}\\``;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn `![npm version](${templates.versionImage({ uri_name: encodeURIComponent(name) })})`;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst { dependencies = {}, devDependencies = {} } =\n\t\t\t\tfirst?.pkgJson || {};\n\n\t\t\tconst table = markdownTable([\n\t\t\t\tcreateHeading(\n\t\t\t\t\theadings,\n\t\t\t\t\tconfig.disableEmojis,\n\t\t\t\t\tconfig.templates?.emojis,\n\t\t\t\t),\n\t\t\t\t...Object.entries(devDependencies).map(mapDependencies(true)),\n\t\t\t\t...Object.entries(dependencies).map(mapDependencies(false)),\n\t\t\t]);\n\n\t\t\tconst heading = `### ${config.disableEmojis ? \"\" : \"📦\"} packages`;\n\t\t\tconst body = [heading, \"\", table].join(\"\\n\");\n\t\t\tconst tableAst = fromMarkdown(body);\n\n\t\t\treturn [start, tableAst, end];\n\t\t});\n\t};\n\nfunction loadTemplates(\n\ttemplates: Config[\"templates\"],\n): Record<\n\tkeyof NonNullable<Config[\"templates\"]>,\n\t(context: Partial<TemplateContext>) => string\n> {\n\tif (!templates) throw new Error(\"failed to load templates\");\n\n\treturn Object.fromEntries(\n\t\tObject.entries(templates).map(([key, value]) => {\n\t\t\tif (typeof value !== \"string\") return [];\n\t\t\treturn [key, Handlebars.compile(value)];\n\t\t}),\n\t);\n}\n"],"mappings":"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","names":["import_mdast_util_from_markdown","cp","fsp","import_zod","yargs","debug","z","import_debug","debug","args","opts","deepmerge","toml","fs","fsp","path","glob","error","path","body","value","ast","heading","path","Handlebars","parse","remarkCodeImport","dirname","remarkUsage","remarkToc","remarkCollapse","args","ora","path","parse","opts"]}
package/dist/index.js CHANGED
@@ -64,6 +64,9 @@ var _configSchema = z.object({
64
64
  disableMarkdownHeadings: z.boolean().default(false).meta({
65
65
  description: "Whether or not to display markdown headings"
66
66
  }),
67
+ enablePrettier: z.boolean().default(true).meta({
68
+ description: "Whether or not to use prettier to format the files"
69
+ }),
67
70
  enableToc: z.boolean().default(false).meta({
68
71
  alias: "t",
69
72
  description: "generate table of contents for readmes"
@@ -335,6 +338,17 @@ async function getMarkdownPaths(cwd, config) {
335
338
  const readmes = await glob(pattern, { cwd, ignore });
336
339
  return readmes.map((readme) => path.resolve(cwd, readme));
337
340
  }
341
+ async function getPrettierPaths(paths) {
342
+ return await Promise.all(
343
+ paths.map(async (file) => {
344
+ const stats = await fsp.lstat(file);
345
+ const isSymbolicLink = stats.isSymbolicLink();
346
+ if (!isSymbolicLink) return file;
347
+ const symlink = await fsp.readlink(file);
348
+ return path.join(path.dirname(file), symlink);
349
+ })
350
+ );
351
+ }
338
352
 
339
353
  // src/data.ts
340
354
  function createFindParameter(parameterList) {
@@ -646,7 +660,7 @@ async function run() {
646
660
  const config = await loadConfig(args2) || {};
647
661
  INFO("Loaded the following configuration:", config);
648
662
  const root = getGitRoot();
649
- const isAffected = args2.changes ? "affected" : "";
663
+ const isAffected = args2.changes && "affected";
650
664
  INFO(`Loading ${!isAffected ? "all " : "affected "}files`);
651
665
  const paths = isAffected ? findAffectedMarkdowns(root, config) : await getMarkdownPaths(root, config);
652
666
  INFO("Loaded the following files:", paths.join("\n"));
@@ -677,8 +691,11 @@ async function run() {
677
691
  })
678
692
  );
679
693
  const opts2 = { stdio: "inherit" };
680
- INFO("formatting with prettier");
681
- cp2.execFileSync("prettier", ["--write", ...paths], opts2);
694
+ if (config.enablePrettier) {
695
+ INFO("formatting with prettier");
696
+ const prettierPaths = await getPrettierPaths(paths);
697
+ cp2.execFileSync("prettier", ["--write", ...prettierPaths], opts2);
698
+ }
682
699
  if (isAffected) {
683
700
  INFO("adding affected files to git stage");
684
701
  cp2.execFileSync("git", ["add", ...paths], opts2);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/args.ts","../src/schema.js","../src/comment.ts","../src/log.ts","../src/config.ts","../src/data.ts","../src/utils.ts","../src/pipeline.ts","../src/plugin.ts"],"sourcesContent":["import { fromMarkdown } from \"mdast-util-from-markdown\";\nimport * as cp from \"node:child_process\";\nimport * as fsp from \"node:fs/promises\";\nimport ora from \"ora\";\n\nimport type { Config } from \"./schema\";\n\nimport { parseArgs } from \"./args\";\nimport { loadAstComments } from \"./comment\";\nimport { loadConfig } from \"./config\";\nimport { loadActionData } from \"./data\";\nimport { ERROR, INFO, WARN } from \"./log\";\nimport { parse } from \"./pipeline\";\nimport { findAffectedMarkdowns, getGitRoot, getMarkdownPaths } from \"./utils\";\n\nexport async function run() {\n\tconst args = await parseArgs();\n\tconst config: Config = (await loadConfig(args)) || {};\n\n\tINFO(\"Loaded the following configuration:\", config);\n\n\tconst root = getGitRoot();\n\n\tconst isAffected = args.changes ? \"affected\" : \"\";\n\n\tINFO(`Loading ${!isAffected ? \"all \" : \"affected \"}files`);\n\n\tconst paths = isAffected\n\t\t? findAffectedMarkdowns(root, config)\n\t\t: await getMarkdownPaths(root, config);\n\n\tINFO(\"Loaded the following files:\", paths.join(\"\\n\"));\n\n\tconst type = args.onlyReadmes ? \"readmes\" : \"all markdown files\";\n\n\tif (!paths.length) {\n\t\treturn ERROR(`no ${isAffected} readmes found to update`);\n\t}\n\n\tconst spinner = !args.verbose && ora(`Updating ${type}`).start();\n\n\tawait Promise.all(\n\t\tpaths.map(async (path) => {\n\t\t\tconst file = await fsp.readFile(path, { encoding: \"utf8\" });\n\t\t\t// get rid of ast via garbage collector faster\n\t\t\tconst actions = (() => {\n\t\t\t\tconst ast = fromMarkdown(file);\n\t\t\t\treturn loadAstComments(ast);\n\t\t\t})();\n\n\t\t\tif (!actions.length) {\n\t\t\t\tWARN(`no action comments found in`, path);\n\t\t\t\tif (!config.enableUsage || !config.enableToc) {\n\t\t\t\t\treturn ERROR(\"no action or plugins found\");\n\t\t\t\t} else {\n\t\t\t\t\tINFO(\"plugins enabled. continuing parsing\", path);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst data = await loadActionData(actions, path, root);\n\n\t\t\tINFO(\"Loaded comment action data\", data);\n\n\t\t\tconst content = await parse(file, path, root, config, data);\n\t\t\tawait fsp.writeFile(path, content);\n\t\t}),\n\t);\n\n\tconst opts: cp.CommonExecOptions = { stdio: \"inherit\" };\n\n\tINFO(\"formatting with prettier\");\n\n\tcp.execFileSync(\"prettier\", [\"--write\", ...paths], opts);\n\n\tif (isAffected) {\n\t\tINFO(\"adding affected files to git stage\");\n\n\t\tcp.execFileSync(\"git\", [\"add\", ...paths], opts);\n\t}\n\n\tif (spinner) spinner.stop();\n}\n","import debug from \"debug\";\nimport yargs, { type Options } from \"yargs\";\nimport { hideBin } from \"yargs/helpers\";\nimport z from \"zod\";\n\nimport { configSchema } from \"./schema\";\n\nexport type Args = Awaited<ReturnType<typeof parseArgs>>;\n\nconst complexOptions = [\n\t\"affectedRegexes\",\n\t\"collapseHeadings\",\n\t\"headings\",\n\t\"templates\",\n] as const;\n\ntype ComplexOptions = (typeof complexOptions)[number];\n\nconst args = {\n\t...zodToYargs(),\n\tchanges: {\n\t\talias: \"g\",\n\t\tdefault: false,\n\t\tdescription: \"Check only changed git files\",\n\t\ttype: \"boolean\",\n\t},\n\tcheck: {\n\t\talias: \"k\",\n\t\tdefault: false,\n\t\tdescription: \"Do not write to files. Only check for changes\",\n\t\ttype: \"boolean\",\n\t},\n\tconfig: { alias: \"c\", description: \"Path to config file\", type: \"string\" },\n} satisfies Record<string, Options>;\n\nexport async function parseArgs() {\n\tconst yargsInstance = yargs(hideBin(process.argv))\n\t\t.options(args)\n\t\t.help(\"h\")\n\t\t.alias(\"h\", \"help\")\n\t\t.epilogue(`--> @stephansama open-source ${new Date().getFullYear()}`);\n\n\tconst parsed = await yargsInstance\n\t\t.wrap(yargsInstance.terminalWidth())\n\t\t.parse();\n\n\tif (parsed.verbose) debug.enable(\"autoreadme*\");\n\n\treturn parsed;\n}\n\nexport function zodToYargs(): Omit<\n\tRecord<keyof typeof shape, Options>,\n\tComplexOptions\n> {\n\tconst { shape } = configSchema.unwrap();\n\tconst entries = Object.entries(shape).map(([key, value]) => {\n\t\tif (complexOptions.includes(key as ComplexOptions)) return [];\n\t\tif (value.def.innerType instanceof z.ZodObject) return [];\n\t\tconst meta = value.meta();\n\t\tconst { innerType } = value.def;\n\t\tconst isBoolean = innerType instanceof z.ZodBoolean;\n\t\tconst isNumber = innerType instanceof z.ZodNumber;\n\t\tconst isArray = innerType instanceof z.ZodArray;\n\n\t\tconst yargType: Options[\"type\"] =\n\t\t\t(isArray && \"array\") ||\n\t\t\t(isNumber && \"number\") ||\n\t\t\t(isBoolean && \"boolean\") ||\n\t\t\t\"string\";\n\n\t\tconst options: Options = {\n\t\t\tdefault: value.def.defaultValue,\n\t\t\ttype: yargType,\n\t\t};\n\n\t\tif (meta?.alias) options.alias = meta.alias as string;\n\t\tif (meta?.description) options.description = meta.description;\n\n\t\treturn [key, options];\n\t});\n\n\treturn Object.fromEntries(entries);\n}\n","import { z } from \"zod\";\n\nexport const actionsSchema = z\n\t.enum([\"ACTION\", \"PKG\", \"USAGE\", \"WORKSPACE\", \"ZOD\"])\n\t.describe(\"Comment action options\");\n\nexport const formatsSchema = z\n\t.enum([\"LIST\", \"TABLE\"])\n\t.default(\"TABLE\")\n\t.optional();\n\nexport const languageSchema = z.enum([\"JS\", \"RS\"]).optional().default(\"JS\");\n\nexport const headingsSchema = z\n\t.enum([\n\t\t\"default\",\n\t\t\"description\",\n\t\t\"devDependency\",\n\t\t\"downloads\",\n\t\t\"name\",\n\t\t\"private\",\n\t\t\"required\",\n\t\t\"version\",\n\t])\n\t.describe(\"Table heading options\");\n\nexport const tableHeadingsSchema = z\n\t.record(actionsSchema, headingsSchema.array().optional())\n\t.optional()\n\t.describe(\"Table heading action configuration\")\n\t.default({\n\t\tACTION: [\"name\", \"required\", \"default\", \"description\"],\n\t\tPKG: [\"name\", \"version\", \"devDependency\"],\n\t\tWORKSPACE: [\"name\", \"version\", \"downloads\", \"description\"],\n\t\tZOD: [],\n\t});\n\nexport const templatesSchema = z.object({\n\tdownloadImage: z\n\t\t.string()\n\t\t.optional()\n\t\t.default(\"https://img.shields.io/npm/dw/{{name}}?labelColor=211F1F\"),\n\temojis: z\n\t\t.record(headingsSchema, z.string())\n\t\t.optional()\n\t\t.describe(\"Table heading emojis used when enabled\")\n\t\t.default({\n\t\t\tdefault: \"⚙️\",\n\t\t\tdescription: \"📝\",\n\t\t\tdevDependency: \"💻\",\n\t\t\tdownloads: \"📥\",\n\t\t\tname: \"🏷️\",\n\t\t\tprivate: \"🔒\",\n\t\t\trequired: \"\",\n\t\t\tversion: \"\",\n\t\t}),\n\tregistryUrl: z\n\t\t.string()\n\t\t.optional()\n\t\t.default(\"https://www.npmjs.com/package/{{name}}\"),\n\tversionImage: z\n\t\t.string()\n\t\t.optional()\n\t\t.default(\n\t\t\t\"https://img.shields.io/npm/v/{{uri_name}}?logo=npm&logoColor=red&color=211F1F&labelColor=211F1F\",\n\t\t),\n});\n\nexport const defaultTemplates = templatesSchema.parse({});\nexport const defaultTableHeadings = tableHeadingsSchema.parse(undefined);\n\nconst _configSchema = z.object({\n\taffectedRegexes: z.string().array().optional().default([]),\n\tcollapseHeadings: z.string().array().optional().default([]),\n\tdefaultLanguage: languageSchema.meta({\n\t\talias: \"l\",\n\t\tdescription: \"Default language to infer projects from\",\n\t}),\n\tdisableEmojis: z.boolean().default(false).meta({\n\t\talias: \"e\",\n\t\tdescription: \"Whether or not to use emojis in markdown table headings\",\n\t}),\n\tdisableMarkdownHeadings: z.boolean().default(false).meta({\n\t\tdescription: \"Whether or not to display markdown headings\",\n\t}),\n\tenableToc: z.boolean().default(false).meta({\n\t\talias: \"t\",\n\t\tdescription: \"generate table of contents for readmes\",\n\t}),\n\tenableUsage: z.boolean().optional().default(false).meta({\n\t\tdescription: \"Whether or not to enable usage plugin\",\n\t}),\n\theadings: tableHeadingsSchema\n\t\t.optional()\n\t\t.default(defaultTableHeadings)\n\t\t.describe(\"List of headings for different table outputs\"),\n\tonlyReadmes: z.boolean().default(true).meta({\n\t\talias: \"r\",\n\t\tdescription: \"Whether or not to only traverse readmes\",\n\t}),\n\tonlyShowPublicPackages: z.boolean().default(false).meta({\n\t\talias: \"p\",\n\t\tdescription: \"Only show public packages in workspaces\",\n\t}),\n\tremoveScope: z.string().optional().default(\"\").meta({\n\t\tdescription: \"Remove common workspace scope\",\n\t}),\n\ttemplates: templatesSchema\n\t\t.optional()\n\t\t.default(defaultTemplates)\n\t\t.describe(\n\t\t\t\"Handlebars templates used to fuel list and table generation\",\n\t\t),\n\ttocHeading: z.string().optional().default(\"Table of contents\").meta({\n\t\tdescription: \"Markdown heading used to generate table of contents\",\n\t}),\n\tusageFile: z.string().optional().default(\"\").meta({\n\t\tdescription: \"Workspace level usage file\",\n\t}),\n\tusageHeading: z.string().optional().default(\"Usage\").meta({\n\t\tdescription: \"Markdown heading used to generate usage example\",\n\t}),\n\tverbose: z.boolean().default(false).meta({\n\t\talias: \"v\",\n\t\tdescription: \"whether or not to display verbose logging\",\n\t}),\n});\n\nexport const configSchema = _configSchema.optional();\n\n/** @typedef {Partial<z.infer<typeof _configSchema>>} Config */\n","import type { Html, Root } from \"mdast\";\n\nimport { commentMarker } from \"mdast-comment-marker\";\n\nimport { INFO } from \"./log\";\nimport { actionsSchema, formatsSchema, languageSchema } from \"./schema\";\n\nexport const SEPARATOR = \"-\" as const;\n\nexport type AstComments = ReturnType<typeof loadAstComments>;\n\nexport function loadAstComments(root: Root) {\n\treturn root.children\n\t\t.map((child) => child.type === \"html\" && getComment(child))\n\t\t.filter((f): f is ReturnType<typeof parseComment> => f !== false);\n}\n\nexport function parseComment(comment: string) {\n\tconst input = trimComment(comment);\n\tconst [type, ...parameters] = input.split(\" \");\n\tconst [first, second, third] = type.split(SEPARATOR);\n\n\tINFO(\"parsing inputs\", { first, second, third });\n\n\tconst languageInput = third ? first : undefined;\n\tconst actionInput = third ? second : first;\n\tconst formatInput = third ? third : second;\n\tconst language = languageSchema.parse(languageInput);\n\tconst action = actionsSchema.parse(actionInput);\n\tconst format = formatsSchema.parse(formatInput);\n\tconst isStart = comment.includes(\"start\");\n\tconst parsed = { action, format, isStart, language, parameters };\n\n\tINFO(`Parsed comment ${comment}`, parsed);\n\n\treturn parsed;\n}\n\nconst startComment = \"<!--\";\nconst endComment = \"-->\";\n\nexport function trimComment(comment: string) {\n\treturn comment\n\t\t.replace(startComment, \"\")\n\t\t.replace(/start|end/, \"\")\n\t\t.replace(endComment, \"\")\n\t\t.trim();\n}\n\nfunction getComment(comment: Html) {\n\tif (!isComment(comment.value)) return false;\n\n\tconst marker = commentMarker(comment);\n\tif (!marker) return false;\n\n\t// TODO: update parseComment to use comment marker\n\treturn parseComment(comment.value);\n}\n\nfunction isComment(comment: string) {\n\treturn comment.startsWith(startComment) && comment.endsWith(endComment);\n}\n","import debug from \"debug\";\n\nconst error = debug(\"autoreadme:error\");\nconst info = debug(\"autoreadme:info\");\nconst warn = debug(\"autoreadme:warn\");\n\nexport function ERROR(...rest: unknown[]) {\n\tconst [first, ...remaining] = rest;\n\terror(`${first} %O`, ...remaining);\n}\n\nexport function INFO(...rest: unknown[]) {\n\tconst [first, ...remaining] = rest;\n\tinfo(`${first} %O`, ...remaining);\n}\n\nexport function WARN(...rest: unknown[]) {\n\tconst [first, ...remaining] = rest;\n\twarn(`${first} %O`, ...remaining);\n}\n","import toml from \"@iarna/toml\";\nimport { cosmiconfig, getDefaultSearchPlaces, type Options } from \"cosmiconfig\";\nimport deepmerge from \"deepmerge\";\n\nimport type { Args } from \"./args\";\n\nimport { INFO, WARN } from \"./log\";\nimport { configSchema } from \"./schema\";\n\nconst moduleName = \"autoreadme\";\n\nconst searchPlaces = getSearchPlaces();\n\nconst loaders = { [\".toml\"]: loadToml };\n\nexport async function loadConfig(args: Partial<Args>) {\n\tconst opts: Partial<Options> = { loaders, searchPlaces };\n\n\tif (args.config) opts.searchPlaces = [args.config];\n\n\tconst explorer = cosmiconfig(moduleName, opts);\n\n\tconst search = await explorer.search();\n\n\tif (!search) {\n\t\tconst location = args.config ? \" at location: \" + args.config : \"\";\n\t\tWARN(`no config file found`, location);\n\t\tINFO(\"using default configuration\");\n\t} else {\n\t\tINFO(\"found configuration file at: \", search.filepath);\n\t\tINFO(\"loaded cosmiconfig\", search.config);\n\t}\n\n\targs = removeFalsy(args);\n\n\tINFO(\"merging config with args\", args);\n\n\treturn configSchema.parse(\n\t\tdeepmerge(search?.config || {}, args, {\n\t\t\tarrayMerge: (_, sourceArray) => sourceArray,\n\t\t}),\n\t);\n}\n\nexport function loadToml(_filepath: string, content: string) {\n\treturn toml.parse(content);\n}\n\nfunction getSearchPlaces() {\n\treturn [\n\t\t...getDefaultSearchPlaces(moduleName),\n\t\t`.${moduleName}rc.toml`,\n\t\t`.config/.${moduleName}rc`,\n\t\t`.config/${moduleName}rc.toml`,\n\t\t`.config/.${moduleName}rc.toml`,\n\t\t`.config/.${moduleName}rc.json`,\n\t\t`.config/.${moduleName}rc.yaml`,\n\t\t`.config/.${moduleName}rc.yml`,\n\t];\n}\n\nfunction removeFalsy(obj: object) {\n\treturn Object.fromEntries(\n\t\tObject.entries(obj)\n\t\t\t.map(([k, v]) => (!v ? false : [k, v]))\n\t\t\t.filter((e): e is [string, unknown] => Boolean(e)),\n\t);\n}\n","import { getPackages } from \"@manypkg/get-packages\";\nimport * as fs from \"node:fs\";\nimport * as fsp from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { readPackageJSON } from \"pkg-types\";\nimport * as yaml from \"yaml\";\nimport { zod2md } from \"zod2md\";\n\nimport type { AstComments } from \"./comment\";\n\nimport { fileExists } from \"./utils\";\n\nexport type ActionData = Awaited<ReturnType<typeof loadActionData>>;\n\nexport type ActionTableHeading = \"name\" | keyof ActionInput;\n\nexport type ActionYaml = { inputs?: Record<string, ActionInput> };\n\ntype ActionInput = {\n\tdefault?: string;\n\tdescription?: string;\n\trequired?: boolean;\n};\n\nexport function createFindParameter(parameterList: string[]) {\n\treturn function (parameterName: string) {\n\t\treturn parameterList\n\t\t\t?.find((p) => p.startsWith(parameterName))\n\t\t\t?.replace(parameterName + \"=\", \"\")\n\t\t\t?.replace(/\"/gi, \"\")\n\t\t\t?.replace(/_/gi, \" \");\n\t};\n}\n\nexport async function loadActionData(\n\tactions: AstComments,\n\tfile: string,\n\troot: string,\n) {\n\tconst startActions = actions.filter((action) => action.isStart);\n\treturn await Promise.all(\n\t\tstartActions.map(async (action) => {\n\t\t\tconst find = createFindParameter(action.parameters);\n\t\t\tswitch (action.action) {\n\t\t\t\tcase \"ACTION\": {\n\t\t\t\t\tconst baseDir = path.dirname(file);\n\t\t\t\t\tconst actionYaml = await loadActionYaml(baseDir);\n\t\t\t\t\treturn {\n\t\t\t\t\t\taction: action.action,\n\t\t\t\t\t\tactionYaml,\n\t\t\t\t\t\tparameters: action.parameters,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tcase \"PKG\": {\n\t\t\t\t\tconst inputPath = find(\"path\");\n\t\t\t\t\tconst filename = inputPath\n\t\t\t\t\t\t? path.resolve(path.dirname(file), inputPath)\n\t\t\t\t\t\t: path.dirname(file);\n\t\t\t\t\tconst pkgJson = await readPackageJSON(filename);\n\t\t\t\t\treturn {\n\t\t\t\t\t\taction: action.action,\n\t\t\t\t\t\tparameters: action.parameters,\n\t\t\t\t\t\tpkgJson,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tcase \"USAGE\": {\n\t\t\t\t\treturn {\n\t\t\t\t\t\taction: action.action,\n\t\t\t\t\t\tparameters: action.parameters,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tcase \"WORKSPACE\": {\n\t\t\t\t\tconst workspaces = await getPackages(process.cwd());\n\t\t\t\t\tconst pnpmPath = path.resolve(root, \"pnpm-workspace.yaml\");\n\t\t\t\t\tconst isPnpm = fs.existsSync(pnpmPath);\n\t\t\t\t\treturn {\n\t\t\t\t\t\taction: action.action,\n\t\t\t\t\t\tisPnpm,\n\t\t\t\t\t\tparameters: action.parameters,\n\t\t\t\t\t\troot,\n\t\t\t\t\t\tworkspaces,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tcase \"ZOD\": {\n\t\t\t\t\tif (action.format === \"LIST\") {\n\t\t\t\t\t\tthrow new Error(\"cannot display zod in list format\");\n\t\t\t\t\t}\n\n\t\t\t\t\tconst inputPath = find(\"path\");\n\t\t\t\t\tif (!inputPath) {\n\t\t\t\t\t\tconst error = `no path found for zod table at markdown file ${file}`;\n\t\t\t\t\t\tthrow new Error(error);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst body = await zod2md({\n\t\t\t\t\t\tentry: path.resolve(path.dirname(file), inputPath),\n\t\t\t\t\t\ttitle: find(\"title\") || \"Zod Schema\",\n\t\t\t\t\t});\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\taction: action.action,\n\t\t\t\t\t\tbody,\n\t\t\t\t\t\tparameters: action.parameters,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"feature not yet implemented\");\n\t\t\t}\n\t\t}),\n\t);\n}\n\nasync function loadActionYaml(baseDir: string) {\n\tconst actionYmlPath = path.resolve(baseDir, \"action.yml\");\n\tconst actionYamlPath = path.resolve(baseDir, \"action.yaml\");\n\tconst actualPath =\n\t\t((await fileExists(actionYamlPath)) && actionYamlPath) ||\n\t\t((await fileExists(actionYmlPath)) && actionYmlPath);\n\n\tif (!actualPath) {\n\t\tconst locations = [actionYmlPath, actionYamlPath];\n\t\tconst error = `no yaml file found at locations: ${locations}`;\n\t\tthrow new Error(error);\n\t}\n\n\tconst actionFile = await fsp.readFile(actualPath, { encoding: \"utf8\" });\n\n\treturn yaml.parse(actionFile) as ActionYaml;\n}\n","import glob from \"fast-glob\";\nimport * as cp from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as fsp from \"node:fs/promises\";\nimport * as path from \"node:path\";\n\nimport type { Config } from \"./schema\";\n\nimport { ERROR, INFO } from \"./log\";\n\nconst sh = String.raw;\n\nconst opts: { encoding: BufferEncoding } = { encoding: \"utf8\" };\n\nconst ignore = [\"**/node_modules/**\"];\n\nconst matches = [\n\t/.*README\\.md$/gi,\n\t/.*Cargo\\.toml$/gi,\n\t/.*action\\.ya?ml$/gi,\n\t/.*package\\.json$/gi,\n\t/.*pnpm-workspace\\.yaml$/gi,\n];\n\nexport async function fileExists(file: string) {\n\treturn await fsp\n\t\t.access(file)\n\t\t.then(() => true)\n\t\t.catch(() => false);\n}\n\nexport function findAffectedMarkdowns(root: string, config: Config) {\n\tconst affected = cp\n\t\t/* cspell:disable-next-line because of the filter */\n\t\t.execSync(sh`git diff --cached --name-only --diff-filter=MACT`, opts)\n\t\t.trim()\n\t\t.split(\"\\n\")\n\t\t.filter(Boolean);\n\n\tif (!affected.length) ERROR(\"no staged files found\");\n\n\tif (config.affectedRegexes?.length) {\n\t\tINFO(\"adding the following expressions: \", config.affectedRegexes);\n\t}\n\n\tconst allMatches = [\n\t\t...matches,\n\t\t...(config.affectedRegexes?.map((r) => new RegExp(r)) || []),\n\t];\n\n\tINFO(\"Checking affected files against regexes\", affected, allMatches);\n\n\tconst eligible = affected.filter((a) => allMatches.some((m) => a.match(m)));\n\n\tINFO(\"Found the following eligible affected files\", eligible);\n\n\tconst md = eligible.map((e) => findNearestReadme(root, path.resolve(e)));\n\tconst rootMd = path.join(root, \"README.md\");\n\tconst dedupe = [...new Set(md), rootMd].filter((s): s is string =>\n\t\tBoolean(s),\n\t);\n\n\tINFO(\"Found the following readmes\", dedupe);\n\n\treturn dedupe;\n}\n\nexport function findNearestReadme(\n\tgitRoot: string,\n\tinputFile: string,\n\tmaxRotations = 15,\n) {\n\tlet dir = path.dirname(inputFile);\n\tlet rotations = 0;\n\n\twhile (true) {\n\t\tconst option = path.join(dir, \"README.md\");\n\n\t\tif (fs.existsSync(option)) return option;\n\n\t\tconst parent = path.dirname(dir);\n\n\t\tif (parent === dir || dir === gitRoot || ++rotations > maxRotations) {\n\t\t\tbreak;\n\t\t}\n\n\t\tdir = parent;\n\t}\n\n\treturn null;\n}\n\nexport function getGitRoot() {\n\tconst root = cp.execSync(sh`git rev-parse --show-toplevel`, opts).trim();\n\n\tif (!root) {\n\t\tthrow new Error(\"must be ran within a git directory.\");\n\t}\n\n\tINFO(\"found git root at location: \", root);\n\n\treturn root;\n}\n\nexport async function getMarkdownPaths(cwd: string, config: Config) {\n\tconst pattern = `**/${config?.onlyReadmes ? \"README\" : \"*\"}.md`;\n\tconst readmes = await glob(pattern, { cwd, ignore });\n\treturn readmes.map((readme) => path.resolve(cwd, readme));\n}\n","import * as path from \"node:path\";\nimport { remark } from \"remark\";\nimport remarkCodeImport from \"remark-code-import\";\nimport remarkCollapse from \"remark-collapse\";\nimport remarkToc from \"remark-toc\";\nimport remarkUsage from \"remark-usage\";\nimport { VFile } from \"vfile\";\n\nimport type { ActionData } from \"./data\";\nimport type { Config } from \"./schema\";\n\nimport { createFindParameter } from \"./data\";\nimport { INFO, WARN } from \"./log\";\nimport { autoReadmeRemarkPlugin } from \"./plugin\";\nimport { fileExists } from \"./utils\";\n\nexport async function parse(\n\tfile: string,\n\tfilepath: string,\n\troot: string,\n\tconfig: Config,\n\tdata: ActionData,\n) {\n\tconst pipeline = remark()\n\t\t.use(autoReadmeRemarkPlugin, config, data)\n\t\t.use(remarkCodeImport, {});\n\n\tconst usage = data.find((d) => d.action === \"USAGE\");\n\n\tif (usage?.action === \"USAGE\" || config.enableUsage) {\n\t\tconst find = createFindParameter(usage?.parameters || []);\n\t\tconst examplePath = find(\"path\");\n\t\tconst dirname = path.dirname(filepath);\n\t\tconst resolvePath = examplePath && path.resolve(dirname, examplePath);\n\t\tconst relativeProjectPath =\n\t\t\tconfig.usageFile &&\n\t\t\tpath.relative(root, path.resolve(dirname, config.usageFile));\n\t\tconst example =\n\t\t\t(examplePath && resolvePath && path.relative(root, resolvePath)) ||\n\t\t\trelativeProjectPath ||\n\t\t\tundefined;\n\n\t\tif (example && (await fileExists(example))) {\n\t\t\tINFO(\"generating usage section\");\n\t\t\tpipeline.use(remarkUsage, {\n\t\t\t\texample,\n\t\t\t\theading: config.usageHeading,\n\t\t\t});\n\t\t} else {\n\t\t\tWARN(\"not able to find example file for readme\", filepath, example);\n\t\t}\n\t}\n\n\tif (config.enableToc) {\n\t\tINFO(\"generating table of contents section\");\n\t\tpipeline.use(remarkToc, { heading: config.tocHeading });\n\t}\n\n\tif (config.enableToc || config.collapseHeadings?.length) {\n\t\tconst additional = config.collapseHeadings?.length\n\t\t\t? config.collapseHeadings\n\t\t\t: [];\n\t\tconst headings = [...additional, config.tocHeading];\n\t\tpipeline.use(remarkCollapse, {\n\t\t\ttest: {\n\t\t\t\tignoreFinalDefinitions: true,\n\t\t\t\ttest: (value, _) => {\n\t\t\t\t\treturn headings.some((i) => value.trim() === i?.trim());\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t}\n\n\tconst vfile = new VFile({ path: path.resolve(filepath), value: file });\n\tconst markdown = await pipeline.process(vfile);\n\treturn markdown.toString();\n}\n","import type { Root } from \"mdast\";\nimport type { Plugin } from \"unified\";\n\nimport Handlebars from \"handlebars\";\nimport { markdownTable } from \"markdown-table\";\nimport { fromMarkdown } from \"mdast-util-from-markdown\";\nimport { zone } from \"mdast-zone\";\nimport path from \"node:path\";\n\nimport type { ActionData } from \"./data\";\nimport type { Config } from \"./schema\";\n\nimport { parseComment } from \"./comment\";\nimport { defaultTableHeadings, defaultTemplates } from \"./schema\";\n\ntype TemplateContext = {\n\tname: string;\n\turi_name: string;\n};\n\nfunction createHeading(\n\theadings: (keyof NonNullable<Config[\"templates\"]>[\"emojis\"])[],\n\tdisableEmojis = false,\n\temojis: typeof defaultTemplates.emojis = defaultTemplates.emojis,\n) {\n\treturn headings.map(\n\t\t(h) =>\n\t\t\t`${disableEmojis ? \"\" : emojis[h] + \" \"}${h?.at(0)?.toUpperCase() + h?.slice(1)}`,\n\t);\n}\n\nfunction wrapRequired(required: boolean | undefined, input: string) {\n\tif (!required) return input;\n\treturn `<b>*${input}</b>`;\n}\n\nexport const autoReadmeRemarkPlugin: Plugin<[Config, ActionData], Root> =\n\t(config, data) => (tree) => {\n\t\tzone(tree, /.*ZOD.*/gi, function (start, _, end) {\n\t\t\tconst zod = data.find((d) => d?.action === \"ZOD\");\n\t\t\tif (!zod?.body) {\n\t\t\t\tthrow new Error(\"unable to load zod body\");\n\t\t\t}\n\n\t\t\tconst ast = fromMarkdown(zod.body);\n\t\t\treturn [start, ast, end];\n\t\t});\n\n\t\tzone(tree, /.*ACTION.*/gi, function (start, _, end) {\n\t\t\tconst value = start.type === \"html\" && start.value;\n\t\t\tconst options = value && parseComment(value);\n\t\t\tif (!options) throw new Error(\"not able to parse comment\");\n\n\t\t\tconst first = data.find((d) => d?.action === \"ACTION\");\n\t\t\tconst inputs = first?.actionYaml?.inputs || {};\n\t\t\tconst heading = `### ${config.disableEmojis ? \"\" : \"🧰\"} actions`;\n\n\t\t\tif (options.format === \"LIST\") {\n\t\t\t\tconst body =\n\t\t\t\t\t`${heading}\\n` +\n\t\t\t\t\tObject.entries(inputs)\n\t\t\t\t\t\t.sort((a) => (a[1].required ? -1 : 1))\n\t\t\t\t\t\t.map(([key, value]) => {\n\t\t\t\t\t\t\treturn `- ${wrapRequired(value.required, key)}: (default: ${value.default})\\n\\n${value.description}`;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(\"\\n\");\n\t\t\t\tconst ast = fromMarkdown(body);\n\t\t\t\treturn [start, ast, end];\n\t\t\t}\n\n\t\t\tconst headings =\n\t\t\t\t(config.headings?.ACTION?.length && config.headings.ACTION) ||\n\t\t\t\tdefaultTableHeadings.ACTION!;\n\n\t\t\tconst table = markdownTable([\n\t\t\t\tcreateHeading(\n\t\t\t\t\theadings,\n\t\t\t\t\tconfig.disableEmojis,\n\t\t\t\t\tconfig.templates?.emojis,\n\t\t\t\t),\n\t\t\t\t...Object.entries(inputs).map(([k, v]) =>\n\t\t\t\t\theadings\n\t\t\t\t\t\t.map((heading) => v[heading as keyof typeof v] || k)\n\t\t\t\t\t\t.map(String),\n\t\t\t\t),\n\t\t\t]);\n\t\t\tconst body = [heading, \"\", table].join(\"\\n\");\n\t\t\tconst ast = fromMarkdown(body);\n\t\t\treturn [start, ast, end];\n\t\t});\n\n\t\tzone(tree, /.*WORKSPACE.*/gi, function (start, _, end) {\n\t\t\tconst value = start.type === \"html\" && start.value;\n\t\t\tconst comment = value && parseComment(value);\n\t\t\tconst workspace = data.find((d) => d?.action === \"WORKSPACE\");\n\t\t\tconst templates = loadTemplates(config.templates);\n\t\t\tconst packages = workspace?.workspaces?.packages || [];\n\t\t\tconst headings =\n\t\t\t\t(config.headings?.WORKSPACE?.length &&\n\t\t\t\t\tconfig.headings?.WORKSPACE) ||\n\t\t\t\tdefaultTableHeadings.WORKSPACE!;\n\n\t\t\tif (comment && comment.format === \"LIST\") {\n\t\t\t\t// throw new Error(\"List is currently not su\")\n\t\t\t}\n\n\t\t\tconst tableHeadings = createHeading(\n\t\t\t\theadings,\n\t\t\t\tconfig.disableEmojis,\n\t\t\t\tconfig.templates?.emojis,\n\t\t\t);\n\n\t\t\tconst table = markdownTable([\n\t\t\t\ttableHeadings,\n\t\t\t\t...packages\n\t\t\t\t\t.filter((pkg) =>\n\t\t\t\t\t\tconfig.onlyShowPublicPackages\n\t\t\t\t\t\t\t? !pkg.packageJson.private\n\t\t\t\t\t\t\t: true,\n\t\t\t\t\t)\n\t\t\t\t\t.map((pkg) => {\n\t\t\t\t\t\tconst { name } = pkg.packageJson;\n\t\t\t\t\t\treturn headings.map((heading) => {\n\t\t\t\t\t\t\tif (heading === \"name\") {\n\t\t\t\t\t\t\t\tconst scoped = config.removeScope\n\t\t\t\t\t\t\t\t\t? name.replace(config.removeScope, \"\")\n\t\t\t\t\t\t\t\t\t: name;\n\t\t\t\t\t\t\t\treturn `[${scoped}](${path.relative(\n\t\t\t\t\t\t\t\t\tprocess.cwd(),\n\t\t\t\t\t\t\t\t\tpath.resolve(pkg.dir, \"README.md\"),\n\t\t\t\t\t\t\t\t)})`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (heading === \"version\") {\n\t\t\t\t\t\t\t\treturn `![npm version image](${templates.versionImage(\n\t\t\t\t\t\t\t\t\t{ uri_name: encodeURIComponent(name) },\n\t\t\t\t\t\t\t\t)})`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (heading === \"downloads\") {\n\t\t\t\t\t\t\t\treturn `![npm downloads](${templates.downloadImage(\n\t\t\t\t\t\t\t\t\t{ name },\n\t\t\t\t\t\t\t\t)})`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (heading === \"description\") {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\tpkg.packageJson as { description?: string }\n\t\t\t\t\t\t\t\t)?.description;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn ``;\n\t\t\t\t\t\t});\n\t\t\t\t\t}),\n\t\t\t]);\n\n\t\t\tconst heading = `### ${config.disableEmojis ? \"\" : \"🏭\"} workspace`;\n\t\t\tconst body = [heading, \"\", table].join(\"\\n\");\n\t\t\tconst ast = fromMarkdown(body);\n\t\t\treturn [start, ast, end];\n\t\t});\n\n\t\tzone(tree, /.*PKG.*/gi, function (start, _, end) {\n\t\t\tconst value = start.type === \"html\" && start.value;\n\t\t\tconst comment = value && parseComment(value);\n\t\t\tconst first = data.find((d) => d?.action === \"PKG\");\n\t\t\tconst templates = loadTemplates(config.templates);\n\t\t\tconst headings =\n\t\t\t\t(config.headings?.PKG?.length && config.headings?.PKG) ||\n\t\t\t\tdefaultTableHeadings.PKG!;\n\n\t\t\tif (comment && comment.format === \"LIST\") {\n\t\t\t\tconst ast = fromMarkdown(\"\");\n\t\t\t\treturn [start, ast, end];\n\t\t\t}\n\n\t\t\tfunction mapDependencies(isDev: boolean) {\n\t\t\t\treturn function ([name, version]: [string, string]) {\n\t\t\t\t\tconst url = templates.registryUrl({ name });\n\t\t\t\t\treturn headings.map((key) => {\n\t\t\t\t\t\tif (key === \"devDependency\") {\n\t\t\t\t\t\t\tif (config.disableEmojis) {\n\t\t\t\t\t\t\t\treturn `\\`${isDev}\\``;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn `${isDev ? \"⌨️\" : \"👥\"}`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (key === \"name\") {\n\t\t\t\t\t\t\treturn `[${name}](${url})`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (key === \"version\") {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t[\"workspace\", \"catalog\", \"*\"].some((type) =>\n\t\t\t\t\t\t\t\t\tversion.includes(type),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn `\\`${version}\\``;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn `![npm version](${templates.versionImage({ uri_name: encodeURIComponent(name) })})`;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst { dependencies = {}, devDependencies = {} } =\n\t\t\t\tfirst?.pkgJson || {};\n\n\t\t\tconst table = markdownTable([\n\t\t\t\tcreateHeading(\n\t\t\t\t\theadings,\n\t\t\t\t\tconfig.disableEmojis,\n\t\t\t\t\tconfig.templates?.emojis,\n\t\t\t\t),\n\t\t\t\t...Object.entries(devDependencies).map(mapDependencies(true)),\n\t\t\t\t...Object.entries(dependencies).map(mapDependencies(false)),\n\t\t\t]);\n\n\t\t\tconst heading = `### ${config.disableEmojis ? \"\" : \"📦\"} packages`;\n\t\t\tconst body = [heading, \"\", table].join(\"\\n\");\n\t\t\tconst tableAst = fromMarkdown(body);\n\n\t\t\treturn [start, tableAst, end];\n\t\t});\n\t};\n\nfunction loadTemplates(\n\ttemplates: Config[\"templates\"],\n): Record<\n\tkeyof NonNullable<Config[\"templates\"]>,\n\t(context: Partial<TemplateContext>) => string\n> {\n\tif (!templates) throw new Error(\"failed to load templates\");\n\n\treturn Object.fromEntries(\n\t\tObject.entries(templates).map(([key, value]) => {\n\t\t\tif (typeof value !== \"string\") return [];\n\t\t\treturn [key, Handlebars.compile(value)];\n\t\t}),\n\t);\n}\n"],"mappings":"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","names":["fromMarkdown","cp","fsp","z","z","debug","args","opts","fs","fsp","path","error","path","path","body","value","ast","heading","path","parse","dirname","args","path","fromMarkdown","parse","opts"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/args.ts","../src/schema.js","../src/comment.ts","../src/log.ts","../src/config.ts","../src/data.ts","../src/utils.ts","../src/pipeline.ts","../src/plugin.ts"],"sourcesContent":["import { fromMarkdown } from \"mdast-util-from-markdown\";\nimport * as cp from \"node:child_process\";\nimport * as fsp from \"node:fs/promises\";\nimport ora from \"ora\";\n\nimport type { Config } from \"./schema\";\n\nimport { parseArgs } from \"./args\";\nimport { loadAstComments } from \"./comment\";\nimport { loadConfig } from \"./config\";\nimport { loadActionData } from \"./data\";\nimport { ERROR, INFO, WARN } from \"./log\";\nimport { parse } from \"./pipeline\";\nimport {\n\tfindAffectedMarkdowns,\n\tgetGitRoot,\n\tgetMarkdownPaths,\n\tgetPrettierPaths,\n} from \"./utils\";\n\nexport async function run() {\n\tconst args = await parseArgs();\n\tconst config: Config = (await loadConfig(args)) || {};\n\n\tINFO(\"Loaded the following configuration:\", config);\n\n\tconst root = getGitRoot();\n\n\tconst isAffected = args.changes && \"affected\";\n\n\tINFO(`Loading ${!isAffected ? \"all \" : \"affected \"}files`);\n\n\tconst paths = isAffected\n\t\t? findAffectedMarkdowns(root, config)\n\t\t: await getMarkdownPaths(root, config);\n\n\tINFO(\"Loaded the following files:\", paths.join(\"\\n\"));\n\n\tconst type = args.onlyReadmes ? \"readmes\" : \"all markdown files\";\n\n\tif (!paths.length) {\n\t\treturn ERROR(`no ${isAffected} readmes found to update`);\n\t}\n\n\tconst spinner = !args.verbose && ora(`Updating ${type}`).start();\n\n\tawait Promise.all(\n\t\tpaths.map(async (path) => {\n\t\t\tconst file = await fsp.readFile(path, { encoding: \"utf8\" });\n\t\t\t// get rid of ast via garbage collector faster\n\t\t\tconst actions = (() => {\n\t\t\t\tconst ast = fromMarkdown(file);\n\t\t\t\treturn loadAstComments(ast);\n\t\t\t})();\n\n\t\t\tif (!actions.length) {\n\t\t\t\tWARN(`no action comments found in`, path);\n\t\t\t\tif (!config.enableUsage || !config.enableToc) {\n\t\t\t\t\treturn ERROR(\"no action or plugins found\");\n\t\t\t\t} else {\n\t\t\t\t\tINFO(\"plugins enabled. continuing parsing\", path);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst data = await loadActionData(actions, path, root);\n\n\t\t\tINFO(\"Loaded comment action data\", data);\n\n\t\t\tconst content = await parse(file, path, root, config, data);\n\t\t\tawait fsp.writeFile(path, content);\n\t\t}),\n\t);\n\n\tconst opts: cp.CommonExecOptions = { stdio: \"inherit\" };\n\n\tif (config.enablePrettier) {\n\t\tINFO(\"formatting with prettier\");\n\n\t\tconst prettierPaths = await getPrettierPaths(paths);\n\t\tcp.execFileSync(\"prettier\", [\"--write\", ...prettierPaths], opts);\n\t}\n\n\tif (isAffected) {\n\t\tINFO(\"adding affected files to git stage\");\n\n\t\tcp.execFileSync(\"git\", [\"add\", ...paths], opts);\n\t}\n\n\tif (spinner) spinner.stop();\n}\n","import debug from \"debug\";\nimport yargs, { type Options } from \"yargs\";\nimport { hideBin } from \"yargs/helpers\";\nimport z from \"zod\";\n\nimport { configSchema } from \"./schema\";\n\nexport type Args = Awaited<ReturnType<typeof parseArgs>>;\n\nconst complexOptions = [\n\t\"affectedRegexes\",\n\t\"collapseHeadings\",\n\t\"headings\",\n\t\"templates\",\n] as const;\n\ntype ComplexOptions = (typeof complexOptions)[number];\n\nconst args = {\n\t...zodToYargs(),\n\tchanges: {\n\t\talias: \"g\",\n\t\tdefault: false,\n\t\tdescription: \"Check only changed git files\",\n\t\ttype: \"boolean\",\n\t},\n\tcheck: {\n\t\talias: \"k\",\n\t\tdefault: false,\n\t\tdescription: \"Do not write to files. Only check for changes\",\n\t\ttype: \"boolean\",\n\t},\n\tconfig: { alias: \"c\", description: \"Path to config file\", type: \"string\" },\n} satisfies Record<string, Options>;\n\nexport async function parseArgs() {\n\tconst yargsInstance = yargs(hideBin(process.argv))\n\t\t.options(args)\n\t\t.help(\"h\")\n\t\t.alias(\"h\", \"help\")\n\t\t.epilogue(`--> @stephansama open-source ${new Date().getFullYear()}`);\n\n\tconst parsed = await yargsInstance\n\t\t.wrap(yargsInstance.terminalWidth())\n\t\t.parse();\n\n\tif (parsed.verbose) debug.enable(\"autoreadme*\");\n\n\treturn parsed;\n}\n\nexport function zodToYargs(): Omit<\n\tRecord<keyof typeof shape, Options>,\n\tComplexOptions\n> {\n\tconst { shape } = configSchema.unwrap();\n\tconst entries = Object.entries(shape).map(([key, value]) => {\n\t\tif (complexOptions.includes(key as ComplexOptions)) return [];\n\t\tif (value.def.innerType instanceof z.ZodObject) return [];\n\t\tconst meta = value.meta();\n\t\tconst { innerType } = value.def;\n\t\tconst isBoolean = innerType instanceof z.ZodBoolean;\n\t\tconst isNumber = innerType instanceof z.ZodNumber;\n\t\tconst isArray = innerType instanceof z.ZodArray;\n\n\t\tconst yargType: Options[\"type\"] =\n\t\t\t(isArray && \"array\") ||\n\t\t\t(isNumber && \"number\") ||\n\t\t\t(isBoolean && \"boolean\") ||\n\t\t\t\"string\";\n\n\t\tconst options: Options = {\n\t\t\tdefault: value.def.defaultValue,\n\t\t\ttype: yargType,\n\t\t};\n\n\t\tif (meta?.alias) options.alias = meta.alias as string;\n\t\tif (meta?.description) options.description = meta.description;\n\n\t\treturn [key, options];\n\t});\n\n\treturn Object.fromEntries(entries);\n}\n","import { z } from \"zod\";\n\nexport const actionsSchema = z\n\t.enum([\"ACTION\", \"PKG\", \"USAGE\", \"WORKSPACE\", \"ZOD\"])\n\t.describe(\"Comment action options\");\n\nexport const formatsSchema = z\n\t.enum([\"LIST\", \"TABLE\"])\n\t.default(\"TABLE\")\n\t.optional();\n\nexport const languageSchema = z.enum([\"JS\", \"RS\"]).optional().default(\"JS\");\n\nexport const headingsSchema = z\n\t.enum([\n\t\t\"default\",\n\t\t\"description\",\n\t\t\"devDependency\",\n\t\t\"downloads\",\n\t\t\"name\",\n\t\t\"private\",\n\t\t\"required\",\n\t\t\"version\",\n\t])\n\t.describe(\"Table heading options\");\n\nexport const tableHeadingsSchema = z\n\t.record(actionsSchema, headingsSchema.array().optional())\n\t.optional()\n\t.describe(\"Table heading action configuration\")\n\t.default({\n\t\tACTION: [\"name\", \"required\", \"default\", \"description\"],\n\t\tPKG: [\"name\", \"version\", \"devDependency\"],\n\t\tWORKSPACE: [\"name\", \"version\", \"downloads\", \"description\"],\n\t\tZOD: [],\n\t});\n\nexport const templatesSchema = z.object({\n\tdownloadImage: z\n\t\t.string()\n\t\t.optional()\n\t\t.default(\"https://img.shields.io/npm/dw/{{name}}?labelColor=211F1F\"),\n\temojis: z\n\t\t.record(headingsSchema, z.string())\n\t\t.optional()\n\t\t.describe(\"Table heading emojis used when enabled\")\n\t\t.default({\n\t\t\tdefault: \"⚙️\",\n\t\t\tdescription: \"📝\",\n\t\t\tdevDependency: \"💻\",\n\t\t\tdownloads: \"📥\",\n\t\t\tname: \"🏷️\",\n\t\t\tprivate: \"🔒\",\n\t\t\trequired: \"\",\n\t\t\tversion: \"\",\n\t\t}),\n\tregistryUrl: z\n\t\t.string()\n\t\t.optional()\n\t\t.default(\"https://www.npmjs.com/package/{{name}}\"),\n\tversionImage: z\n\t\t.string()\n\t\t.optional()\n\t\t.default(\n\t\t\t\"https://img.shields.io/npm/v/{{uri_name}}?logo=npm&logoColor=red&color=211F1F&labelColor=211F1F\",\n\t\t),\n});\n\nexport const defaultTemplates = templatesSchema.parse({});\nexport const defaultTableHeadings = tableHeadingsSchema.parse(undefined);\n\nconst _configSchema = z.object({\n\taffectedRegexes: z.string().array().optional().default([]),\n\tcollapseHeadings: z.string().array().optional().default([]),\n\tdefaultLanguage: languageSchema.meta({\n\t\talias: \"l\",\n\t\tdescription: \"Default language to infer projects from\",\n\t}),\n\tdisableEmojis: z.boolean().default(false).meta({\n\t\talias: \"e\",\n\t\tdescription: \"Whether or not to use emojis in markdown table headings\",\n\t}),\n\tdisableMarkdownHeadings: z.boolean().default(false).meta({\n\t\tdescription: \"Whether or not to display markdown headings\",\n\t}),\n\tenablePrettier: z.boolean().default(true).meta({\n\t\tdescription: \"Whether or not to use prettier to format the files\",\n\t}),\n\tenableToc: z.boolean().default(false).meta({\n\t\talias: \"t\",\n\t\tdescription: \"generate table of contents for readmes\",\n\t}),\n\tenableUsage: z.boolean().optional().default(false).meta({\n\t\tdescription: \"Whether or not to enable usage plugin\",\n\t}),\n\theadings: tableHeadingsSchema\n\t\t.optional()\n\t\t.default(defaultTableHeadings)\n\t\t.describe(\"List of headings for different table outputs\"),\n\tonlyReadmes: z.boolean().default(true).meta({\n\t\talias: \"r\",\n\t\tdescription: \"Whether or not to only traverse readmes\",\n\t}),\n\tonlyShowPublicPackages: z.boolean().default(false).meta({\n\t\talias: \"p\",\n\t\tdescription: \"Only show public packages in workspaces\",\n\t}),\n\tremoveScope: z.string().optional().default(\"\").meta({\n\t\tdescription: \"Remove common workspace scope\",\n\t}),\n\ttemplates: templatesSchema\n\t\t.optional()\n\t\t.default(defaultTemplates)\n\t\t.describe(\n\t\t\t\"Handlebars templates used to fuel list and table generation\",\n\t\t),\n\ttocHeading: z.string().optional().default(\"Table of contents\").meta({\n\t\tdescription: \"Markdown heading used to generate table of contents\",\n\t}),\n\tusageFile: z.string().optional().default(\"\").meta({\n\t\tdescription: \"Workspace level usage file\",\n\t}),\n\tusageHeading: z.string().optional().default(\"Usage\").meta({\n\t\tdescription: \"Markdown heading used to generate usage example\",\n\t}),\n\tverbose: z.boolean().default(false).meta({\n\t\talias: \"v\",\n\t\tdescription: \"whether or not to display verbose logging\",\n\t}),\n});\n\nexport const configSchema = _configSchema.optional();\n\n/** @typedef {Partial<z.infer<typeof _configSchema>>} Config */\n","import type { Html, Root } from \"mdast\";\n\nimport { commentMarker } from \"mdast-comment-marker\";\n\nimport { INFO } from \"./log\";\nimport { actionsSchema, formatsSchema, languageSchema } from \"./schema\";\n\nexport const SEPARATOR = \"-\" as const;\n\nexport type AstComments = ReturnType<typeof loadAstComments>;\n\nexport function loadAstComments(root: Root) {\n\treturn root.children\n\t\t.map((child) => child.type === \"html\" && getComment(child))\n\t\t.filter((f): f is ReturnType<typeof parseComment> => f !== false);\n}\n\nexport function parseComment(comment: string) {\n\tconst input = trimComment(comment);\n\tconst [type, ...parameters] = input.split(\" \");\n\tconst [first, second, third] = type.split(SEPARATOR);\n\n\tINFO(\"parsing inputs\", { first, second, third });\n\n\tconst languageInput = third ? first : undefined;\n\tconst actionInput = third ? second : first;\n\tconst formatInput = third ? third : second;\n\tconst language = languageSchema.parse(languageInput);\n\tconst action = actionsSchema.parse(actionInput);\n\tconst format = formatsSchema.parse(formatInput);\n\tconst isStart = comment.includes(\"start\");\n\tconst parsed = { action, format, isStart, language, parameters };\n\n\tINFO(`Parsed comment ${comment}`, parsed);\n\n\treturn parsed;\n}\n\nconst startComment = \"<!--\";\nconst endComment = \"-->\";\n\nexport function trimComment(comment: string) {\n\treturn comment\n\t\t.replace(startComment, \"\")\n\t\t.replace(/start|end/, \"\")\n\t\t.replace(endComment, \"\")\n\t\t.trim();\n}\n\nfunction getComment(comment: Html) {\n\tif (!isComment(comment.value)) return false;\n\n\tconst marker = commentMarker(comment);\n\tif (!marker) return false;\n\n\t// TODO: update parseComment to use comment marker\n\treturn parseComment(comment.value);\n}\n\nfunction isComment(comment: string) {\n\treturn comment.startsWith(startComment) && comment.endsWith(endComment);\n}\n","import debug from \"debug\";\n\nconst error = debug(\"autoreadme:error\");\nconst info = debug(\"autoreadme:info\");\nconst warn = debug(\"autoreadme:warn\");\n\nexport function ERROR(...rest: unknown[]) {\n\tconst [first, ...remaining] = rest;\n\terror(`${first} %O`, ...remaining);\n}\n\nexport function INFO(...rest: unknown[]) {\n\tconst [first, ...remaining] = rest;\n\tinfo(`${first} %O`, ...remaining);\n}\n\nexport function WARN(...rest: unknown[]) {\n\tconst [first, ...remaining] = rest;\n\twarn(`${first} %O`, ...remaining);\n}\n","import toml from \"@iarna/toml\";\nimport { cosmiconfig, getDefaultSearchPlaces, type Options } from \"cosmiconfig\";\nimport deepmerge from \"deepmerge\";\n\nimport type { Args } from \"./args\";\n\nimport { INFO, WARN } from \"./log\";\nimport { configSchema } from \"./schema\";\n\nconst moduleName = \"autoreadme\";\n\nconst searchPlaces = getSearchPlaces();\n\nconst loaders = { [\".toml\"]: loadToml };\n\nexport async function loadConfig(args: Partial<Args>) {\n\tconst opts: Partial<Options> = { loaders, searchPlaces };\n\n\tif (args.config) opts.searchPlaces = [args.config];\n\n\tconst explorer = cosmiconfig(moduleName, opts);\n\n\tconst search = await explorer.search();\n\n\tif (!search) {\n\t\tconst location = args.config ? \" at location: \" + args.config : \"\";\n\t\tWARN(`no config file found`, location);\n\t\tINFO(\"using default configuration\");\n\t} else {\n\t\tINFO(\"found configuration file at: \", search.filepath);\n\t\tINFO(\"loaded cosmiconfig\", search.config);\n\t}\n\n\targs = removeFalsy(args);\n\n\tINFO(\"merging config with args\", args);\n\n\treturn configSchema.parse(\n\t\tdeepmerge(search?.config || {}, args, {\n\t\t\tarrayMerge: (_, sourceArray) => sourceArray,\n\t\t}),\n\t);\n}\n\nexport function loadToml(_filepath: string, content: string) {\n\treturn toml.parse(content);\n}\n\nfunction getSearchPlaces() {\n\treturn [\n\t\t...getDefaultSearchPlaces(moduleName),\n\t\t`.${moduleName}rc.toml`,\n\t\t`.config/.${moduleName}rc`,\n\t\t`.config/${moduleName}rc.toml`,\n\t\t`.config/.${moduleName}rc.toml`,\n\t\t`.config/.${moduleName}rc.json`,\n\t\t`.config/.${moduleName}rc.yaml`,\n\t\t`.config/.${moduleName}rc.yml`,\n\t];\n}\n\nfunction removeFalsy(obj: object) {\n\treturn Object.fromEntries(\n\t\tObject.entries(obj)\n\t\t\t.map(([k, v]) => (!v ? false : [k, v]))\n\t\t\t.filter((e): e is [string, unknown] => Boolean(e)),\n\t);\n}\n","import { getPackages } from \"@manypkg/get-packages\";\nimport * as fs from \"node:fs\";\nimport * as fsp from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { readPackageJSON } from \"pkg-types\";\nimport * as yaml from \"yaml\";\nimport { zod2md } from \"zod2md\";\n\nimport type { AstComments } from \"./comment\";\n\nimport { fileExists } from \"./utils\";\n\nexport type ActionData = Awaited<ReturnType<typeof loadActionData>>;\n\nexport type ActionTableHeading = \"name\" | keyof ActionInput;\n\nexport type ActionYaml = { inputs?: Record<string, ActionInput> };\n\ntype ActionInput = {\n\tdefault?: string;\n\tdescription?: string;\n\trequired?: boolean;\n};\n\nexport function createFindParameter(parameterList: string[]) {\n\treturn function (parameterName: string) {\n\t\treturn parameterList\n\t\t\t?.find((p) => p.startsWith(parameterName))\n\t\t\t?.replace(parameterName + \"=\", \"\")\n\t\t\t?.replace(/\"/gi, \"\")\n\t\t\t?.replace(/_/gi, \" \");\n\t};\n}\n\nexport async function loadActionData(\n\tactions: AstComments,\n\tfile: string,\n\troot: string,\n) {\n\tconst startActions = actions.filter((action) => action.isStart);\n\treturn await Promise.all(\n\t\tstartActions.map(async (action) => {\n\t\t\tconst find = createFindParameter(action.parameters);\n\t\t\tswitch (action.action) {\n\t\t\t\tcase \"ACTION\": {\n\t\t\t\t\tconst baseDir = path.dirname(file);\n\t\t\t\t\tconst actionYaml = await loadActionYaml(baseDir);\n\t\t\t\t\treturn {\n\t\t\t\t\t\taction: action.action,\n\t\t\t\t\t\tactionYaml,\n\t\t\t\t\t\tparameters: action.parameters,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tcase \"PKG\": {\n\t\t\t\t\tconst inputPath = find(\"path\");\n\t\t\t\t\tconst filename = inputPath\n\t\t\t\t\t\t? path.resolve(path.dirname(file), inputPath)\n\t\t\t\t\t\t: path.dirname(file);\n\t\t\t\t\tconst pkgJson = await readPackageJSON(filename);\n\t\t\t\t\treturn {\n\t\t\t\t\t\taction: action.action,\n\t\t\t\t\t\tparameters: action.parameters,\n\t\t\t\t\t\tpkgJson,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tcase \"USAGE\": {\n\t\t\t\t\treturn {\n\t\t\t\t\t\taction: action.action,\n\t\t\t\t\t\tparameters: action.parameters,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tcase \"WORKSPACE\": {\n\t\t\t\t\tconst workspaces = await getPackages(process.cwd());\n\t\t\t\t\tconst pnpmPath = path.resolve(root, \"pnpm-workspace.yaml\");\n\t\t\t\t\tconst isPnpm = fs.existsSync(pnpmPath);\n\t\t\t\t\treturn {\n\t\t\t\t\t\taction: action.action,\n\t\t\t\t\t\tisPnpm,\n\t\t\t\t\t\tparameters: action.parameters,\n\t\t\t\t\t\troot,\n\t\t\t\t\t\tworkspaces,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tcase \"ZOD\": {\n\t\t\t\t\tif (action.format === \"LIST\") {\n\t\t\t\t\t\tthrow new Error(\"cannot display zod in list format\");\n\t\t\t\t\t}\n\n\t\t\t\t\tconst inputPath = find(\"path\");\n\t\t\t\t\tif (!inputPath) {\n\t\t\t\t\t\tconst error = `no path found for zod table at markdown file ${file}`;\n\t\t\t\t\t\tthrow new Error(error);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst body = await zod2md({\n\t\t\t\t\t\tentry: path.resolve(path.dirname(file), inputPath),\n\t\t\t\t\t\ttitle: find(\"title\") || \"Zod Schema\",\n\t\t\t\t\t});\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\taction: action.action,\n\t\t\t\t\t\tbody,\n\t\t\t\t\t\tparameters: action.parameters,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"feature not yet implemented\");\n\t\t\t}\n\t\t}),\n\t);\n}\n\nasync function loadActionYaml(baseDir: string) {\n\tconst actionYmlPath = path.resolve(baseDir, \"action.yml\");\n\tconst actionYamlPath = path.resolve(baseDir, \"action.yaml\");\n\tconst actualPath =\n\t\t((await fileExists(actionYamlPath)) && actionYamlPath) ||\n\t\t((await fileExists(actionYmlPath)) && actionYmlPath);\n\n\tif (!actualPath) {\n\t\tconst locations = [actionYmlPath, actionYamlPath];\n\t\tconst error = `no yaml file found at locations: ${locations}`;\n\t\tthrow new Error(error);\n\t}\n\n\tconst actionFile = await fsp.readFile(actualPath, { encoding: \"utf8\" });\n\n\treturn yaml.parse(actionFile) as ActionYaml;\n}\n","import glob from \"fast-glob\";\nimport * as cp from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as fsp from \"node:fs/promises\";\nimport * as path from \"node:path\";\n\nimport type { Config } from \"./schema\";\n\nimport { ERROR, INFO } from \"./log\";\n\nconst sh = String.raw;\n\nconst opts: { encoding: BufferEncoding } = { encoding: \"utf8\" };\n\nconst ignore = [\"**/node_modules/**\"];\n\nconst matches = [\n\t/.*README\\.md$/gi,\n\t/.*Cargo\\.toml$/gi,\n\t/.*action\\.ya?ml$/gi,\n\t/.*package\\.json$/gi,\n\t/.*pnpm-workspace\\.yaml$/gi,\n];\n\nexport async function fileExists(file: string) {\n\treturn await fsp\n\t\t.access(file)\n\t\t.then(() => true)\n\t\t.catch(() => false);\n}\n\nexport function findAffectedMarkdowns(root: string, config: Config) {\n\tconst affected = cp\n\t\t/* cspell:disable-next-line because of the filter */\n\t\t.execSync(sh`git diff --cached --name-only --diff-filter=MACT`, opts)\n\t\t.trim()\n\t\t.split(\"\\n\")\n\t\t.filter(Boolean);\n\n\tif (!affected.length) ERROR(\"no staged files found\");\n\n\tif (config.affectedRegexes?.length) {\n\t\tINFO(\"adding the following expressions: \", config.affectedRegexes);\n\t}\n\n\tconst allMatches = [\n\t\t...matches,\n\t\t...(config.affectedRegexes?.map((r) => new RegExp(r)) || []),\n\t];\n\n\tINFO(\"Checking affected files against regexes\", affected, allMatches);\n\n\tconst eligible = affected.filter((a) => allMatches.some((m) => a.match(m)));\n\n\tINFO(\"Found the following eligible affected files\", eligible);\n\n\tconst md = eligible.map((e) => findNearestReadme(root, path.resolve(e)));\n\tconst rootMd = path.join(root, \"README.md\");\n\tconst dedupe = [...new Set(md), rootMd].filter((s): s is string =>\n\t\tBoolean(s),\n\t);\n\n\tINFO(\"Found the following readmes\", dedupe);\n\n\treturn dedupe;\n}\n\nexport function findNearestReadme(\n\tgitRoot: string,\n\tinputFile: string,\n\tmaxRotations = 15,\n) {\n\tlet dir = path.dirname(inputFile);\n\tlet rotations = 0;\n\n\twhile (true) {\n\t\tconst option = path.join(dir, \"README.md\");\n\n\t\tif (fs.existsSync(option)) return option;\n\n\t\tconst parent = path.dirname(dir);\n\n\t\tif (parent === dir || dir === gitRoot || ++rotations > maxRotations) {\n\t\t\tbreak;\n\t\t}\n\n\t\tdir = parent;\n\t}\n\n\treturn null;\n}\n\nexport function getGitRoot() {\n\tconst root = cp.execSync(sh`git rev-parse --show-toplevel`, opts).trim();\n\n\tif (!root) {\n\t\tthrow new Error(\"must be ran within a git directory.\");\n\t}\n\n\tINFO(\"found git root at location: \", root);\n\n\treturn root;\n}\n\nexport async function getMarkdownPaths(cwd: string, config: Config) {\n\tconst pattern = `**/${config?.onlyReadmes ? \"README\" : \"*\"}.md`;\n\tconst readmes = await glob(pattern, { cwd, ignore });\n\treturn readmes.map((readme) => path.resolve(cwd, readme));\n}\n\nexport async function getPrettierPaths(paths: string[]) {\n\treturn await Promise.all(\n\t\tpaths.map(async (file) => {\n\t\t\tconst stats = await fsp.lstat(file);\n\t\t\tconst isSymbolicLink = stats.isSymbolicLink();\n\t\t\tif (!isSymbolicLink) return file;\n\t\t\tconst symlink = await fsp.readlink(file);\n\t\t\treturn path.join(path.dirname(file), symlink);\n\t\t}),\n\t);\n}\n","import * as path from \"node:path\";\nimport { remark } from \"remark\";\nimport remarkCodeImport from \"remark-code-import\";\nimport remarkCollapse from \"remark-collapse\";\nimport remarkToc from \"remark-toc\";\nimport remarkUsage from \"remark-usage\";\nimport { VFile } from \"vfile\";\n\nimport type { ActionData } from \"./data\";\nimport type { Config } from \"./schema\";\n\nimport { createFindParameter } from \"./data\";\nimport { INFO, WARN } from \"./log\";\nimport { autoReadmeRemarkPlugin } from \"./plugin\";\nimport { fileExists } from \"./utils\";\n\nexport async function parse(\n\tfile: string,\n\tfilepath: string,\n\troot: string,\n\tconfig: Config,\n\tdata: ActionData,\n) {\n\tconst pipeline = remark()\n\t\t.use(autoReadmeRemarkPlugin, config, data)\n\t\t.use(remarkCodeImport, {});\n\n\tconst usage = data.find((d) => d.action === \"USAGE\");\n\n\tif (usage?.action === \"USAGE\" || config.enableUsage) {\n\t\tconst find = createFindParameter(usage?.parameters || []);\n\t\tconst examplePath = find(\"path\");\n\t\tconst dirname = path.dirname(filepath);\n\t\tconst resolvePath = examplePath && path.resolve(dirname, examplePath);\n\t\tconst relativeProjectPath =\n\t\t\tconfig.usageFile &&\n\t\t\tpath.relative(root, path.resolve(dirname, config.usageFile));\n\t\tconst example =\n\t\t\t(examplePath && resolvePath && path.relative(root, resolvePath)) ||\n\t\t\trelativeProjectPath ||\n\t\t\tundefined;\n\n\t\tif (example && (await fileExists(example))) {\n\t\t\tINFO(\"generating usage section\");\n\t\t\tpipeline.use(remarkUsage, {\n\t\t\t\texample,\n\t\t\t\theading: config.usageHeading,\n\t\t\t});\n\t\t} else {\n\t\t\tWARN(\"not able to find example file for readme\", filepath, example);\n\t\t}\n\t}\n\n\tif (config.enableToc) {\n\t\tINFO(\"generating table of contents section\");\n\t\tpipeline.use(remarkToc, { heading: config.tocHeading });\n\t}\n\n\tif (config.enableToc || config.collapseHeadings?.length) {\n\t\tconst additional = config.collapseHeadings?.length\n\t\t\t? config.collapseHeadings\n\t\t\t: [];\n\t\tconst headings = [...additional, config.tocHeading];\n\t\tpipeline.use(remarkCollapse, {\n\t\t\ttest: {\n\t\t\t\tignoreFinalDefinitions: true,\n\t\t\t\ttest: (value, _) => {\n\t\t\t\t\treturn headings.some((i) => value.trim() === i?.trim());\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t}\n\n\tconst vfile = new VFile({ path: path.resolve(filepath), value: file });\n\tconst markdown = await pipeline.process(vfile);\n\treturn markdown.toString();\n}\n","import type { Root } from \"mdast\";\nimport type { Plugin } from \"unified\";\n\nimport Handlebars from \"handlebars\";\nimport { markdownTable } from \"markdown-table\";\nimport { fromMarkdown } from \"mdast-util-from-markdown\";\nimport { zone } from \"mdast-zone\";\nimport path from \"node:path\";\n\nimport type { ActionData } from \"./data\";\nimport type { Config } from \"./schema\";\n\nimport { parseComment } from \"./comment\";\nimport { defaultTableHeadings, defaultTemplates } from \"./schema\";\n\ntype TemplateContext = {\n\tname: string;\n\turi_name: string;\n};\n\nfunction createHeading(\n\theadings: (keyof NonNullable<Config[\"templates\"]>[\"emojis\"])[],\n\tdisableEmojis = false,\n\temojis: typeof defaultTemplates.emojis = defaultTemplates.emojis,\n) {\n\treturn headings.map(\n\t\t(h) =>\n\t\t\t`${disableEmojis ? \"\" : emojis[h] + \" \"}${h?.at(0)?.toUpperCase() + h?.slice(1)}`,\n\t);\n}\n\nfunction wrapRequired(required: boolean | undefined, input: string) {\n\tif (!required) return input;\n\treturn `<b>*${input}</b>`;\n}\n\nexport const autoReadmeRemarkPlugin: Plugin<[Config, ActionData], Root> =\n\t(config, data) => (tree) => {\n\t\tzone(tree, /.*ZOD.*/gi, function (start, _, end) {\n\t\t\tconst zod = data.find((d) => d?.action === \"ZOD\");\n\t\t\tif (!zod?.body) {\n\t\t\t\tthrow new Error(\"unable to load zod body\");\n\t\t\t}\n\n\t\t\tconst ast = fromMarkdown(zod.body);\n\t\t\treturn [start, ast, end];\n\t\t});\n\n\t\tzone(tree, /.*ACTION.*/gi, function (start, _, end) {\n\t\t\tconst value = start.type === \"html\" && start.value;\n\t\t\tconst options = value && parseComment(value);\n\t\t\tif (!options) throw new Error(\"not able to parse comment\");\n\n\t\t\tconst first = data.find((d) => d?.action === \"ACTION\");\n\t\t\tconst inputs = first?.actionYaml?.inputs || {};\n\t\t\tconst heading = `### ${config.disableEmojis ? \"\" : \"🧰\"} actions`;\n\n\t\t\tif (options.format === \"LIST\") {\n\t\t\t\tconst body =\n\t\t\t\t\t`${heading}\\n` +\n\t\t\t\t\tObject.entries(inputs)\n\t\t\t\t\t\t.sort((a) => (a[1].required ? -1 : 1))\n\t\t\t\t\t\t.map(([key, value]) => {\n\t\t\t\t\t\t\treturn `- ${wrapRequired(value.required, key)}: (default: ${value.default})\\n\\n${value.description}`;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(\"\\n\");\n\t\t\t\tconst ast = fromMarkdown(body);\n\t\t\t\treturn [start, ast, end];\n\t\t\t}\n\n\t\t\tconst headings =\n\t\t\t\t(config.headings?.ACTION?.length && config.headings.ACTION) ||\n\t\t\t\tdefaultTableHeadings.ACTION!;\n\n\t\t\tconst table = markdownTable([\n\t\t\t\tcreateHeading(\n\t\t\t\t\theadings,\n\t\t\t\t\tconfig.disableEmojis,\n\t\t\t\t\tconfig.templates?.emojis,\n\t\t\t\t),\n\t\t\t\t...Object.entries(inputs).map(([k, v]) =>\n\t\t\t\t\theadings\n\t\t\t\t\t\t.map((heading) => v[heading as keyof typeof v] || k)\n\t\t\t\t\t\t.map(String),\n\t\t\t\t),\n\t\t\t]);\n\t\t\tconst body = [heading, \"\", table].join(\"\\n\");\n\t\t\tconst ast = fromMarkdown(body);\n\t\t\treturn [start, ast, end];\n\t\t});\n\n\t\tzone(tree, /.*WORKSPACE.*/gi, function (start, _, end) {\n\t\t\tconst value = start.type === \"html\" && start.value;\n\t\t\tconst comment = value && parseComment(value);\n\t\t\tconst workspace = data.find((d) => d?.action === \"WORKSPACE\");\n\t\t\tconst templates = loadTemplates(config.templates);\n\t\t\tconst packages = workspace?.workspaces?.packages || [];\n\t\t\tconst headings =\n\t\t\t\t(config.headings?.WORKSPACE?.length &&\n\t\t\t\t\tconfig.headings?.WORKSPACE) ||\n\t\t\t\tdefaultTableHeadings.WORKSPACE!;\n\n\t\t\tif (comment && comment.format === \"LIST\") {\n\t\t\t\t// throw new Error(\"List is currently not su\")\n\t\t\t}\n\n\t\t\tconst tableHeadings = createHeading(\n\t\t\t\theadings,\n\t\t\t\tconfig.disableEmojis,\n\t\t\t\tconfig.templates?.emojis,\n\t\t\t);\n\n\t\t\tconst table = markdownTable([\n\t\t\t\ttableHeadings,\n\t\t\t\t...packages\n\t\t\t\t\t.filter((pkg) =>\n\t\t\t\t\t\tconfig.onlyShowPublicPackages\n\t\t\t\t\t\t\t? !pkg.packageJson.private\n\t\t\t\t\t\t\t: true,\n\t\t\t\t\t)\n\t\t\t\t\t.map((pkg) => {\n\t\t\t\t\t\tconst { name } = pkg.packageJson;\n\t\t\t\t\t\treturn headings.map((heading) => {\n\t\t\t\t\t\t\tif (heading === \"name\") {\n\t\t\t\t\t\t\t\tconst scoped = config.removeScope\n\t\t\t\t\t\t\t\t\t? name.replace(config.removeScope, \"\")\n\t\t\t\t\t\t\t\t\t: name;\n\t\t\t\t\t\t\t\treturn `[${scoped}](${path.relative(\n\t\t\t\t\t\t\t\t\tprocess.cwd(),\n\t\t\t\t\t\t\t\t\tpath.resolve(pkg.dir, \"README.md\"),\n\t\t\t\t\t\t\t\t)})`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (heading === \"version\") {\n\t\t\t\t\t\t\t\treturn `![npm version image](${templates.versionImage(\n\t\t\t\t\t\t\t\t\t{ uri_name: encodeURIComponent(name) },\n\t\t\t\t\t\t\t\t)})`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (heading === \"downloads\") {\n\t\t\t\t\t\t\t\treturn `![npm downloads](${templates.downloadImage(\n\t\t\t\t\t\t\t\t\t{ name },\n\t\t\t\t\t\t\t\t)})`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (heading === \"description\") {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\tpkg.packageJson as { description?: string }\n\t\t\t\t\t\t\t\t)?.description;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn ``;\n\t\t\t\t\t\t});\n\t\t\t\t\t}),\n\t\t\t]);\n\n\t\t\tconst heading = `### ${config.disableEmojis ? \"\" : \"🏭\"} workspace`;\n\t\t\tconst body = [heading, \"\", table].join(\"\\n\");\n\t\t\tconst ast = fromMarkdown(body);\n\t\t\treturn [start, ast, end];\n\t\t});\n\n\t\tzone(tree, /.*PKG.*/gi, function (start, _, end) {\n\t\t\tconst value = start.type === \"html\" && start.value;\n\t\t\tconst comment = value && parseComment(value);\n\t\t\tconst first = data.find((d) => d?.action === \"PKG\");\n\t\t\tconst templates = loadTemplates(config.templates);\n\t\t\tconst headings =\n\t\t\t\t(config.headings?.PKG?.length && config.headings?.PKG) ||\n\t\t\t\tdefaultTableHeadings.PKG!;\n\n\t\t\tif (comment && comment.format === \"LIST\") {\n\t\t\t\tconst ast = fromMarkdown(\"\");\n\t\t\t\treturn [start, ast, end];\n\t\t\t}\n\n\t\t\tfunction mapDependencies(isDev: boolean) {\n\t\t\t\treturn function ([name, version]: [string, string]) {\n\t\t\t\t\tconst url = templates.registryUrl({ name });\n\t\t\t\t\treturn headings.map((key) => {\n\t\t\t\t\t\tif (key === \"devDependency\") {\n\t\t\t\t\t\t\tif (config.disableEmojis) {\n\t\t\t\t\t\t\t\treturn `\\`${isDev}\\``;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn `${isDev ? \"⌨️\" : \"👥\"}`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (key === \"name\") {\n\t\t\t\t\t\t\treturn `[${name}](${url})`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (key === \"version\") {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t[\"workspace\", \"catalog\", \"*\"].some((type) =>\n\t\t\t\t\t\t\t\t\tversion.includes(type),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn `\\`${version}\\``;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn `![npm version](${templates.versionImage({ uri_name: encodeURIComponent(name) })})`;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst { dependencies = {}, devDependencies = {} } =\n\t\t\t\tfirst?.pkgJson || {};\n\n\t\t\tconst table = markdownTable([\n\t\t\t\tcreateHeading(\n\t\t\t\t\theadings,\n\t\t\t\t\tconfig.disableEmojis,\n\t\t\t\t\tconfig.templates?.emojis,\n\t\t\t\t),\n\t\t\t\t...Object.entries(devDependencies).map(mapDependencies(true)),\n\t\t\t\t...Object.entries(dependencies).map(mapDependencies(false)),\n\t\t\t]);\n\n\t\t\tconst heading = `### ${config.disableEmojis ? \"\" : \"📦\"} packages`;\n\t\t\tconst body = [heading, \"\", table].join(\"\\n\");\n\t\t\tconst tableAst = fromMarkdown(body);\n\n\t\t\treturn [start, tableAst, end];\n\t\t});\n\t};\n\nfunction loadTemplates(\n\ttemplates: Config[\"templates\"],\n): Record<\n\tkeyof NonNullable<Config[\"templates\"]>,\n\t(context: Partial<TemplateContext>) => string\n> {\n\tif (!templates) throw new Error(\"failed to load templates\");\n\n\treturn Object.fromEntries(\n\t\tObject.entries(templates).map(([key, value]) => {\n\t\t\tif (typeof value !== \"string\") return [];\n\t\t\treturn [key, Handlebars.compile(value)];\n\t\t}),\n\t);\n}\n"],"mappings":"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","names":["fromMarkdown","cp","fsp","z","z","debug","args","opts","fs","fsp","path","error","path","path","body","value","ast","heading","path","parse","dirname","args","path","fromMarkdown","parse","opts"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stephansama/auto-readme",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Generate lists and tables for your README automagically based on your repository and comments",
5
5
  "repository": {
6
6
  "url": "https://github.com/stephansama/packages",