github-action-readme-generator 1.8.4 → 1.8.6

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.
@@ -277,7 +277,7 @@ export function getCurrentVersionString(inputs) {
277
277
  }
278
278
  log.debug(`version string in package.json:version is ${packageVersion ?? 'not found'}`);
279
279
  }
280
- versionString = oRide && oRide.length > 0 ? oRide : packageVersion ?? '0.0.0';
280
+ versionString = oRide && oRide.length > 0 ? oRide : (packageVersion ?? '0.0.0');
281
281
  if (versionString &&
282
282
  !versionString.startsWith(inputs.config.get('versioning:prefix'))) {
283
283
  versionString = `${inputs.config.get('versioning:prefix')}${versionString}`;
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { execSync } from 'node:child_process';\nimport { accessSync, readFileSync } from 'node:fs';\nimport * as path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport type { Context } from '@actions/github/lib/context.js';\nimport type { PackageJson } from 'types-package-json';\n\nimport type Inputs from './inputs.js';\nimport LogTask from './logtask/index.js';\nimport { unicodeWordMatch } from './unicode-word-match.js';\nimport { notEmpty, Nullable } from './util.js';\n\nexport const __filename = fileURLToPath(import.meta.url);\nexport const __dirname = path.dirname(__filename);\n/**\n * Returns the input value if it is not empty, otherwise returns undefined.\n * @param value - The input value to check.\n * @returns The input value if it is not empty, otherwise undefined.\n */\nexport function undefinedOnEmpty(value: string | undefined): string | undefined {\n if (!value || value === '') {\n return undefined;\n }\n return value;\n}\n\n/**\n * Returns the basename of the given path.\n * @param pathStr - The path to extract the basename from.\n * @returns The basename of the path.\n */\nexport function basename(pathStr: string): string | undefined {\n if (!pathStr) return undefined;\n const log = new LogTask('basename');\n const result = path.basename(pathStr);\n log.debug(`Basename passed ${pathStr} and returns ${result}`);\n return result;\n}\n/**\n * Removes the \"refs/heads/\" or \"refs/tags/\" prefix from the given path.\n *\n * @param pathStr - The path to remove the prefix from\n * @returns The path without the prefix, or null if path is empty\n */\nexport function stripRefs(pathStr: string): string | null {\n if (!pathStr) return null;\n const log = new LogTask('stripRefs');\n const result = pathStr.replace('refs/heads/', '').replace('refs/tags/', '');\n log.debug(`stripRefs passed ${pathStr} and returns ${result}`);\n return result;\n}\n\n/**\n * Converts the given text to title case.\n * @param text - The text to convert.\n * @returns The text converted to title case.\n * @throws {TypeError} If the input is not a string.\n */\nexport function titlecase(text: string): string | undefined {\n if (!text) return undefined;\n if (typeof text !== 'string') {\n throw new TypeError(`Invalid argument type provided to titlecase(): ${typeof text}`);\n }\n return text.replaceAll(unicodeWordMatch, (txt) =>\n txt[0] ? txt[0].toUpperCase() + txt.slice(1).toLowerCase() : txt,\n );\n}\n\n/**\n * Parses the given text and converts it to title case, replacing underscores and dashes with spaces.\n * @param text - The text to parse and convert.\n * @returns The parsed text converted to title case.\n */\nexport function prefixParser(text: string | undefined): string | undefined {\n if (!text) return undefined;\n if (typeof text !== 'string') {\n throw new TypeError(`Invalid argument type provided to prefixParser(): ${typeof text}`);\n }\n return titlecase(text.replace(/[_-]+/, ' '));\n}\n\n/**\n * Wraps the given text into multiple lines with a maximum width of 80 characters.\n * @param text - The text to wrap.\n * @param content - The array to store the wrapped lines.\n * @param prepend - The string to prepend to each wrapped line.\n * @returns The array of wrapped lines.\n */\nexport function wrapText(text: string | undefined, content: string[], prepend = ''): string[] {\n // Constrain the width of the description\n if (!text) return content;\n const width = 80;\n\n let description = text\n .trim()\n .replaceAll('\\r\\n', '\\n') // Convert CR to LF\n .replaceAll(/ +/g, ' ') // Squash consecutive spaces\n .replaceAll(' \\n', '\\n'); // Squash space followed by newline\n\n while (description) {\n // Longer than width? Find a space to break apart\n let segment: string;\n if (description.length > width) {\n segment = description.slice(0, Math.max(0, width + 1));\n while (!segment.endsWith(' ') && !segment.endsWith('\\n') && segment) {\n segment = segment.slice(0, Math.max(0, segment.length - 1));\n }\n\n // Trimmed too much?\n if (segment.length < width * 0.67) {\n segment = description;\n }\n } else {\n segment = description;\n }\n\n // Check for newline\n const newlineIndex = segment.indexOf('\\n');\n if (newlineIndex >= 0) {\n segment = segment.slice(0, Math.max(0, newlineIndex + 1));\n }\n content.push(`${prepend}${segment}`.trimEnd());\n // Remaining\n description = description.slice(segment.length);\n }\n return content;\n}\n\n/**\n * Represents a repository with owner and repo properties.\n */\nexport interface Repo {\n owner: string;\n repo: string;\n}\n\nexport function readFile(filename: string): string {\n try {\n return readFileSync(filename, 'utf8');\n } catch (error) {\n throw new Error(`Cannot read file ${filename}: ${error}`);\n }\n}\n\nexport function repoObjFromRepoName(\n repository: Nullable<string>,\n log: LogTask,\n from?: string,\n): Nullable<Repo> {\n if (notEmpty(repository)) {\n const [owner, repo] = repository.split('/');\n if (owner && repo) {\n log.debug(`repoObjFromRepoName using ${from} and returns ${JSON.stringify({ owner, repo })}`);\n return { owner, repo };\n }\n }\n return undefined;\n}\nexport const remoteGitUrlPattern = /url( )?=( )?.*github\\.com[/:](?<owner>.*)\\/(?<repo>.*)\\.git/;\n/**\n * Finds the repository information from the input, context, environment variables, or git configuration.\n * @param inputRepo - The input repository string.\n * @param context - The GitHub context object.\n * @returns The repository information (owner and repo) or null if not found.\n */\nexport function repositoryFinder(\n inputRepo: Nullable<string>,\n context: Nullable<Context>,\n): Repo | null {\n const log = new LogTask('repositoryFinder');\n /**\n * Attempt to get git user and repo from input\n */\n const repoObj = repoObjFromRepoName(inputRepo, log, 'inputRepo');\n\n if (repoObj) {\n return repoObj;\n }\n\n /**\n * Attempt to get git user and repo from GitHub context,\n * which includes checking for GITHUB_REPOSITORY environment variable\n */\n if (context) {\n try {\n const result = { ...context.repo };\n log.debug(`repositoryFinder using GitHub context and returns ${JSON.stringify(result)}`);\n return result;\n } catch (error) {\n log.debug(`repositoryFinder using GitHub context gives error ${JSON.stringify(error)}`);\n }\n }\n\n /**\n * Attempt to get git user and repo from .git/config\n */\n try {\n const fileContent = readFile('.git/config');\n log.debug(`loading .git/config:\\n***\\n${fileContent}\\n***`);\n const results = remoteGitUrlPattern.exec(fileContent);\n if (results?.groups?.owner && results?.groups?.repo) {\n log.debug(\n `repositoryFinder using '.git/config' and returns ${JSON.stringify(results.groups)}`,\n );\n return {\n owner: results.groups.owner,\n repo: results.groups.repo,\n };\n }\n } catch (error) {\n // can't find it\n log.error(`Couldn't retrieve owner or repo in .git/config file: ${error}`);\n }\n throw new Error('No owner or repo found');\n}\n\n/**\n * Returns the default branch of the git repository.\n * @returns The default branch.\n */\n/**\n * Gets the default branch for the Git repository.\n *\n * @returns The name of the default branch.\n */\nexport function getDefaultGitBranch(): string {\n let result: Buffer | undefined;\n try {\n // Run git command to get default branch\n result = execSync('git symbolic-ref HEAD | sed s@^refs/heads/@@');\n } catch (error) {\n // If command fails, try alternative for MacOS\n if (error) {\n try {\n result = execSync(\n \"git remote set-head origin -a;git remote show origin | head 50 sed -n 's/^.*default branch \\\\(.*\\\\)/\\\\1/p'\",\n );\n } catch {\n result = execSync(\n \"git remote set-head origin -a;git remote show origin | sed -n 's/^s*HEAD branch: \\\\(.*\\\\)/\\\\1/p'\",\n );\n }\n }\n }\n return result?.toString().trim() ?? '';\n}\n\n/**\n * Formats the given value as a column header.\n * @param value - The value to format.\n * @returns The formatted column header.\n */\nexport function columnHeader(value: string): string {\n if (!value) {\n return '';\n }\n let text: string = value.replaceAll(/\\*\\*(.*?)\\*\\*/g, '$1');\n\n // Remove italic formatting: *italic*\n text = text.replaceAll(/\\*(.*?)\\*/g, '$1');\n\n // Remove strikethrough formatting: ~~strikethrough~~\n text = text.replaceAll(/~~(.*?)~~/g, '$1');\n\n const normalisedHeader = titlecase(text.trim());\n if (normalisedHeader) {\n return `${normalisedHeader}`;\n }\n return '';\n}\n/**\n * Formats the given value as a row header in HTML.\n *\n * Removes formatting from the string and converts it to code style.\n *\n * @param value - The string to format as a header\n * @returns The formatted row header string\n */\nexport function rowHeader(value: string): string {\n if (!value) {\n return '';\n }\n\n let text = value;\n\n // Remove bold formatting\n text = text.replaceAll(/\\*\\*(.*?)\\*\\*/g, '$1');\n\n // Remove italic formatting: *italic*\n text = text.replaceAll(/\\*(.*?)\\*/g, '$1');\n\n // Remove strikethrough formatting: ~~strikethrough~~\n text = text.replaceAll(/~~(.*?)~~/g, '$1');\n\n // Normalize spacing\n text = text.trim();\n\n // Add code formatting\n return `<code>${text}</code>`;\n}\n\nexport function getCurrentVersionString(inputs: Inputs): string {\n let versionString = '';\n const log = new LogTask('getCurrentVersionString');\n if (inputs.config.get('versioning:enabled')) {\n log.debug('version string in generated example is enabled');\n const oRide = inputs.config.get('versioning:override') as string;\n let packageVersion = process.env.npm_package_version;\n log.debug(`version string in env:npm_package_version is ${packageVersion ?? 'not found'}`);\n if (!packageVersion) {\n log.debug('version string in env:npm_package_version is not found, trying to use git');\n try {\n accessSync('package.json');\n const packageData: Partial<PackageJson> = JSON.parse(readFileSync('package.json', 'utf8'));\n packageVersion = packageData.version;\n } catch (error) {\n log.debug(`package.json not found. ${error}`);\n }\n log.debug(`version string in package.json:version is ${packageVersion ?? 'not found'}`);\n }\n\n versionString = oRide && oRide.length > 0 ? oRide : packageVersion ?? '0.0.0';\n\n if (\n versionString &&\n !versionString.startsWith(inputs.config.get('versioning:prefix') as string)\n ) {\n versionString = `${inputs.config.get('versioning:prefix') as string}${versionString}`;\n }\n } else {\n versionString = inputs.config.get('versioning:branch') as string;\n }\n log.debug(`version to use in generated example is ${versionString}`);\n return versionString;\n}\n\nexport function indexOfRegex(str: string, providedRegex: RegExp): number {\n const regex = providedRegex.global\n ? providedRegex\n : new RegExp(providedRegex.source, `${providedRegex.flags}g`);\n let index = -1;\n let match: RegExpExecArray | null = regex.exec(str);\n while (match) {\n index = match.index;\n match = regex.exec(str);\n }\n return index;\n}\n\nexport function lastIndexOfRegex(str: string, providedRegex: RegExp): number {\n const regex = providedRegex.global\n ? providedRegex\n : new RegExp(providedRegex.source, `${providedRegex.flags}g`);\n let index = -1;\n let match: RegExpExecArray | null = regex.exec(str);\n while (match) {\n index = match.index + match[0].length;\n match = regex.exec(str);\n }\n return index;\n}\n\nexport function isObject(value: any): value is object {\n const type = typeof value;\n return type === 'object' && !!value;\n}\n"]}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { execSync } from 'node:child_process';\nimport { accessSync, readFileSync } from 'node:fs';\nimport * as path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport type { Context } from '@actions/github/lib/context.js';\nimport type { PackageJson } from 'types-package-json';\n\nimport type Inputs from './inputs.js';\nimport LogTask from './logtask/index.js';\nimport { unicodeWordMatch } from './unicode-word-match.js';\nimport { notEmpty, Nullable } from './util.js';\n\nexport const __filename = fileURLToPath(import.meta.url);\nexport const __dirname = path.dirname(__filename);\n/**\n * Returns the input value if it is not empty, otherwise returns undefined.\n * @param value - The input value to check.\n * @returns The input value if it is not empty, otherwise undefined.\n */\nexport function undefinedOnEmpty(value: string | undefined): string | undefined {\n if (!value || value === '') {\n return undefined;\n }\n return value;\n}\n\n/**\n * Returns the basename of the given path.\n * @param pathStr - The path to extract the basename from.\n * @returns The basename of the path.\n */\nexport function basename(pathStr: string): string | undefined {\n if (!pathStr) return undefined;\n const log = new LogTask('basename');\n const result = path.basename(pathStr);\n log.debug(`Basename passed ${pathStr} and returns ${result}`);\n return result;\n}\n/**\n * Removes the \"refs/heads/\" or \"refs/tags/\" prefix from the given path.\n *\n * @param pathStr - The path to remove the prefix from\n * @returns The path without the prefix, or null if path is empty\n */\nexport function stripRefs(pathStr: string): string | null {\n if (!pathStr) return null;\n const log = new LogTask('stripRefs');\n const result = pathStr.replace('refs/heads/', '').replace('refs/tags/', '');\n log.debug(`stripRefs passed ${pathStr} and returns ${result}`);\n return result;\n}\n\n/**\n * Converts the given text to title case.\n * @param text - The text to convert.\n * @returns The text converted to title case.\n * @throws {TypeError} If the input is not a string.\n */\nexport function titlecase(text: string): string | undefined {\n if (!text) return undefined;\n if (typeof text !== 'string') {\n throw new TypeError(`Invalid argument type provided to titlecase(): ${typeof text}`);\n }\n return text.replaceAll(unicodeWordMatch, (txt) =>\n txt[0] ? txt[0].toUpperCase() + txt.slice(1).toLowerCase() : txt,\n );\n}\n\n/**\n * Parses the given text and converts it to title case, replacing underscores and dashes with spaces.\n * @param text - The text to parse and convert.\n * @returns The parsed text converted to title case.\n */\nexport function prefixParser(text: string | undefined): string | undefined {\n if (!text) return undefined;\n if (typeof text !== 'string') {\n throw new TypeError(`Invalid argument type provided to prefixParser(): ${typeof text}`);\n }\n return titlecase(text.replace(/[_-]+/, ' '));\n}\n\n/**\n * Wraps the given text into multiple lines with a maximum width of 80 characters.\n * @param text - The text to wrap.\n * @param content - The array to store the wrapped lines.\n * @param prepend - The string to prepend to each wrapped line.\n * @returns The array of wrapped lines.\n */\nexport function wrapText(text: string | undefined, content: string[], prepend = ''): string[] {\n // Constrain the width of the description\n if (!text) return content;\n const width = 80;\n\n let description = text\n .trim()\n .replaceAll('\\r\\n', '\\n') // Convert CR to LF\n .replaceAll(/ +/g, ' ') // Squash consecutive spaces\n .replaceAll(' \\n', '\\n'); // Squash space followed by newline\n\n while (description) {\n // Longer than width? Find a space to break apart\n let segment: string;\n if (description.length > width) {\n segment = description.slice(0, Math.max(0, width + 1));\n while (!segment.endsWith(' ') && !segment.endsWith('\\n') && segment) {\n segment = segment.slice(0, Math.max(0, segment.length - 1));\n }\n\n // Trimmed too much?\n if (segment.length < width * 0.67) {\n segment = description;\n }\n } else {\n segment = description;\n }\n\n // Check for newline\n const newlineIndex = segment.indexOf('\\n');\n if (newlineIndex >= 0) {\n segment = segment.slice(0, Math.max(0, newlineIndex + 1));\n }\n content.push(`${prepend}${segment}`.trimEnd());\n // Remaining\n description = description.slice(segment.length);\n }\n return content;\n}\n\n/**\n * Represents a repository with owner and repo properties.\n */\nexport interface Repo {\n owner: string;\n repo: string;\n}\n\nexport function readFile(filename: string): string {\n try {\n return readFileSync(filename, 'utf8');\n } catch (error) {\n throw new Error(`Cannot read file ${filename}: ${error}`);\n }\n}\n\nexport function repoObjFromRepoName(\n repository: Nullable<string>,\n log: LogTask,\n from?: string,\n): Nullable<Repo> {\n if (notEmpty(repository)) {\n const [owner, repo] = repository.split('/');\n if (owner && repo) {\n log.debug(`repoObjFromRepoName using ${from} and returns ${JSON.stringify({ owner, repo })}`);\n return { owner, repo };\n }\n }\n return undefined;\n}\nexport const remoteGitUrlPattern = /url( )?=( )?.*github\\.com[/:](?<owner>.*)\\/(?<repo>.*)\\.git/;\n/**\n * Finds the repository information from the input, context, environment variables, or git configuration.\n * @param inputRepo - The input repository string.\n * @param context - The GitHub context object.\n * @returns The repository information (owner and repo) or null if not found.\n */\nexport function repositoryFinder(\n inputRepo: Nullable<string>,\n context: Nullable<Context>,\n): Repo | null {\n const log = new LogTask('repositoryFinder');\n /**\n * Attempt to get git user and repo from input\n */\n const repoObj = repoObjFromRepoName(inputRepo, log, 'inputRepo');\n\n if (repoObj) {\n return repoObj;\n }\n\n /**\n * Attempt to get git user and repo from GitHub context,\n * which includes checking for GITHUB_REPOSITORY environment variable\n */\n if (context) {\n try {\n const result = { ...context.repo };\n log.debug(`repositoryFinder using GitHub context and returns ${JSON.stringify(result)}`);\n return result;\n } catch (error) {\n log.debug(`repositoryFinder using GitHub context gives error ${JSON.stringify(error)}`);\n }\n }\n\n /**\n * Attempt to get git user and repo from .git/config\n */\n try {\n const fileContent = readFile('.git/config');\n log.debug(`loading .git/config:\\n***\\n${fileContent}\\n***`);\n const results = remoteGitUrlPattern.exec(fileContent);\n if (results?.groups?.owner && results?.groups?.repo) {\n log.debug(\n `repositoryFinder using '.git/config' and returns ${JSON.stringify(results.groups)}`,\n );\n return {\n owner: results.groups.owner,\n repo: results.groups.repo,\n };\n }\n } catch (error) {\n // can't find it\n log.error(`Couldn't retrieve owner or repo in .git/config file: ${error}`);\n }\n throw new Error('No owner or repo found');\n}\n\n/**\n * Returns the default branch of the git repository.\n * @returns The default branch.\n */\n/**\n * Gets the default branch for the Git repository.\n *\n * @returns The name of the default branch.\n */\nexport function getDefaultGitBranch(): string {\n let result: Buffer | undefined;\n try {\n // Run git command to get default branch\n result = execSync('git symbolic-ref HEAD | sed s@^refs/heads/@@');\n } catch (error) {\n // If command fails, try alternative for MacOS\n if (error) {\n try {\n result = execSync(\n \"git remote set-head origin -a;git remote show origin | head 50 sed -n 's/^.*default branch \\\\(.*\\\\)/\\\\1/p'\",\n );\n } catch {\n result = execSync(\n \"git remote set-head origin -a;git remote show origin | sed -n 's/^s*HEAD branch: \\\\(.*\\\\)/\\\\1/p'\",\n );\n }\n }\n }\n return result?.toString().trim() ?? '';\n}\n\n/**\n * Formats the given value as a column header.\n * @param value - The value to format.\n * @returns The formatted column header.\n */\nexport function columnHeader(value: string): string {\n if (!value) {\n return '';\n }\n let text: string = value.replaceAll(/\\*\\*(.*?)\\*\\*/g, '$1');\n\n // Remove italic formatting: *italic*\n text = text.replaceAll(/\\*(.*?)\\*/g, '$1');\n\n // Remove strikethrough formatting: ~~strikethrough~~\n text = text.replaceAll(/~~(.*?)~~/g, '$1');\n\n const normalisedHeader = titlecase(text.trim());\n if (normalisedHeader) {\n return `${normalisedHeader}`;\n }\n return '';\n}\n/**\n * Formats the given value as a row header in HTML.\n *\n * Removes formatting from the string and converts it to code style.\n *\n * @param value - The string to format as a header\n * @returns The formatted row header string\n */\nexport function rowHeader(value: string): string {\n if (!value) {\n return '';\n }\n\n let text = value;\n\n // Remove bold formatting\n text = text.replaceAll(/\\*\\*(.*?)\\*\\*/g, '$1');\n\n // Remove italic formatting: *italic*\n text = text.replaceAll(/\\*(.*?)\\*/g, '$1');\n\n // Remove strikethrough formatting: ~~strikethrough~~\n text = text.replaceAll(/~~(.*?)~~/g, '$1');\n\n // Normalize spacing\n text = text.trim();\n\n // Add code formatting\n return `<code>${text}</code>`;\n}\n\nexport function getCurrentVersionString(inputs: Inputs): string {\n let versionString = '';\n const log = new LogTask('getCurrentVersionString');\n if (inputs.config.get('versioning:enabled')) {\n log.debug('version string in generated example is enabled');\n const oRide = inputs.config.get('versioning:override') as string;\n let packageVersion = process.env.npm_package_version;\n log.debug(`version string in env:npm_package_version is ${packageVersion ?? 'not found'}`);\n if (!packageVersion) {\n log.debug('version string in env:npm_package_version is not found, trying to use git');\n try {\n accessSync('package.json');\n const packageData: Partial<PackageJson> = JSON.parse(readFileSync('package.json', 'utf8'));\n packageVersion = packageData.version;\n } catch (error) {\n log.debug(`package.json not found. ${error}`);\n }\n log.debug(`version string in package.json:version is ${packageVersion ?? 'not found'}`);\n }\n\n versionString = oRide && oRide.length > 0 ? oRide : (packageVersion ?? '0.0.0');\n\n if (\n versionString &&\n !versionString.startsWith(inputs.config.get('versioning:prefix') as string)\n ) {\n versionString = `${inputs.config.get('versioning:prefix') as string}${versionString}`;\n }\n } else {\n versionString = inputs.config.get('versioning:branch') as string;\n }\n log.debug(`version to use in generated example is ${versionString}`);\n return versionString;\n}\n\nexport function indexOfRegex(str: string, providedRegex: RegExp): number {\n const regex = providedRegex.global\n ? providedRegex\n : new RegExp(providedRegex.source, `${providedRegex.flags}g`);\n let index = -1;\n let match: RegExpExecArray | null = regex.exec(str);\n while (match) {\n index = match.index;\n match = regex.exec(str);\n }\n return index;\n}\n\nexport function lastIndexOfRegex(str: string, providedRegex: RegExp): number {\n const regex = providedRegex.global\n ? providedRegex\n : new RegExp(providedRegex.source, `${providedRegex.flags}g`);\n let index = -1;\n let match: RegExpExecArray | null = regex.exec(str);\n while (match) {\n index = match.index + match[0].length;\n match = regex.exec(str);\n }\n return index;\n}\n\nexport function isObject(value: any): value is object {\n const type = typeof value;\n return type === 'object' && !!value;\n}\n"]}
@@ -71,7 +71,7 @@ export default class ReadmeEditor {
71
71
  */
72
72
  updateSection(name, providedContent, addNewlines = true) {
73
73
  const log = new LogTask(name);
74
- const content = (Array.isArray(providedContent) ? providedContent.join(EOL) : providedContent ?? '').trim();
74
+ const content = (Array.isArray(providedContent) ? providedContent.join(EOL) : (providedContent ?? '')).trim();
75
75
  log.info(`Looking for the ${name} token in ${this.filePath}`);
76
76
  const [startIndex, stopIndex] = this.getTokenIndexes(name, log);
77
77
  if (startIndex && stopIndex) {
@@ -1 +1 @@
1
- {"version":3,"file":"readme-editor.js","sourceRoot":"","sources":["../../src/readme-editor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * This TypeScript code imports the necessary modules and defines a class named `ReadmeEditor`.\n * The class represents an editor for modifying a README file.\n * It has methods to update specific sections within the file and dump the modified content back to the file.\n */\n\nimport * as fs from 'node:fs';\nimport { EOL } from 'node:os';\n\nimport * as core from '@actions/core';\n\nimport { indexOfRegex, lastIndexOfRegex } from './helpers.js';\nimport LogTask from './logtask/index.js';\nimport { formatMarkdown } from './prettier.js';\n\n/**\n * The format for the start token of a section.\n */\n\nexport const startTokenFormat = '(^|[^`\\\\\\\\])<!--\\\\s+start\\\\s+%s\\\\s+-->';\n\n/**\n * The format for the end token of a section.\n */\nexport const endTokenFormat = '(^|[^`\\\\\\\\])<!--\\\\s+end\\\\s+%s\\\\s+-->';\n\nexport default class ReadmeEditor {\n private log = new LogTask('ReadmeEditor');\n\n /**\n * The path to the README file.\n */\n private readonly filePath: string;\n\n private fileContent: string;\n\n /**\n * Creates a new instance of `ReadmeEditor`.\n * @param {string} filePath - The path to the README file.\n */\n constructor(filePath: string) {\n this.filePath = filePath;\n try {\n fs.accessSync(filePath);\n this.fileContent = fs.readFileSync(filePath, 'utf8');\n if (process.env.GITHUB_ACTIONS) {\n core.setOutput('readme_before', this.fileContent);\n }\n } catch (error) {\n this.log.fail(`Readme at '${filePath}' does not exist.`);\n throw error;\n }\n }\n\n /**\n * Gets the indexes of the start and end tokens for a given section.\n * @param {string} token - The section token.\n * @returns {number[]} - The indexes of the start and end tokens.\n */\n getTokenIndexes(token: string, logTask?: LogTask): number[] {\n const log = logTask ?? new LogTask('getTokenIndexes');\n const startRegExp = new RegExp(startTokenFormat.replace('%s', token));\n const stopRegExp = new RegExp(endTokenFormat.replace('%s', token));\n const startIndex = lastIndexOfRegex(this.fileContent, startRegExp);\n if (startIndex === -1) {\n log.debug(`No start token found for section '${token}'. Skipping`);\n return [];\n }\n\n const stopIndex = indexOfRegex(this.fileContent, stopRegExp);\n if (stopIndex === -1) {\n log.debug(`No start or end token found for section '${token}'. Skipping`);\n return [];\n }\n\n return [startIndex, stopIndex];\n }\n\n /**\n * Updates a specific section in the README file with the provided content.\n * @param {string} name - The name of the section.\n * @param {string | string[]} providedContent - The content to update the section with.\n * @param {boolean} addNewlines - Whether to add newlines before and after the content.\n */\n updateSection(name: string, providedContent: string | string[], addNewlines = true): void {\n const log = new LogTask(name);\n const content = (\n Array.isArray(providedContent) ? providedContent.join(EOL) : providedContent ?? ''\n ).trim();\n log.info(`Looking for the ${name} token in ${this.filePath}`);\n\n const [startIndex, stopIndex] = this.getTokenIndexes(name, log);\n if (startIndex && stopIndex) {\n const beforeContent = this.fileContent.slice(0, startIndex);\n const afterContent = this.fileContent.slice(stopIndex);\n\n this.fileContent = addNewlines\n ? `${beforeContent}\\n\\n${content}\\n${afterContent}`\n : `${beforeContent}${content}${afterContent}`;\n }\n }\n\n /**\n * Dumps the modified content back to the README file.\n * @returns {Promise<void>}\n */\n async dumpToFile(): Promise<void> {\n const content = await formatMarkdown(this.fileContent);\n if (process.env.GITHUB_ACTIONS) {\n core.setOutput('readme_after', content);\n }\n return fs.promises.writeFile(this.filePath, content, 'utf8');\n }\n}\n"]}
1
+ {"version":3,"file":"readme-editor.js","sourceRoot":"","sources":["../../src/readme-editor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * This TypeScript code imports the necessary modules and defines a class named `ReadmeEditor`.\n * The class represents an editor for modifying a README file.\n * It has methods to update specific sections within the file and dump the modified content back to the file.\n */\n\nimport * as fs from 'node:fs';\nimport { EOL } from 'node:os';\n\nimport * as core from '@actions/core';\n\nimport { indexOfRegex, lastIndexOfRegex } from './helpers.js';\nimport LogTask from './logtask/index.js';\nimport { formatMarkdown } from './prettier.js';\n\n/**\n * The format for the start token of a section.\n */\n\nexport const startTokenFormat = '(^|[^`\\\\\\\\])<!--\\\\s+start\\\\s+%s\\\\s+-->';\n\n/**\n * The format for the end token of a section.\n */\nexport const endTokenFormat = '(^|[^`\\\\\\\\])<!--\\\\s+end\\\\s+%s\\\\s+-->';\n\nexport default class ReadmeEditor {\n private log = new LogTask('ReadmeEditor');\n\n /**\n * The path to the README file.\n */\n private readonly filePath: string;\n\n private fileContent: string;\n\n /**\n * Creates a new instance of `ReadmeEditor`.\n * @param {string} filePath - The path to the README file.\n */\n constructor(filePath: string) {\n this.filePath = filePath;\n try {\n fs.accessSync(filePath);\n this.fileContent = fs.readFileSync(filePath, 'utf8');\n if (process.env.GITHUB_ACTIONS) {\n core.setOutput('readme_before', this.fileContent);\n }\n } catch (error) {\n this.log.fail(`Readme at '${filePath}' does not exist.`);\n throw error;\n }\n }\n\n /**\n * Gets the indexes of the start and end tokens for a given section.\n * @param {string} token - The section token.\n * @returns {number[]} - The indexes of the start and end tokens.\n */\n getTokenIndexes(token: string, logTask?: LogTask): number[] {\n const log = logTask ?? new LogTask('getTokenIndexes');\n const startRegExp = new RegExp(startTokenFormat.replace('%s', token));\n const stopRegExp = new RegExp(endTokenFormat.replace('%s', token));\n const startIndex = lastIndexOfRegex(this.fileContent, startRegExp);\n if (startIndex === -1) {\n log.debug(`No start token found for section '${token}'. Skipping`);\n return [];\n }\n\n const stopIndex = indexOfRegex(this.fileContent, stopRegExp);\n if (stopIndex === -1) {\n log.debug(`No start or end token found for section '${token}'. Skipping`);\n return [];\n }\n\n return [startIndex, stopIndex];\n }\n\n /**\n * Updates a specific section in the README file with the provided content.\n * @param {string} name - The name of the section.\n * @param {string | string[]} providedContent - The content to update the section with.\n * @param {boolean} addNewlines - Whether to add newlines before and after the content.\n */\n updateSection(name: string, providedContent: string | string[], addNewlines = true): void {\n const log = new LogTask(name);\n const content = (\n Array.isArray(providedContent) ? providedContent.join(EOL) : (providedContent ?? '')\n ).trim();\n log.info(`Looking for the ${name} token in ${this.filePath}`);\n\n const [startIndex, stopIndex] = this.getTokenIndexes(name, log);\n if (startIndex && stopIndex) {\n const beforeContent = this.fileContent.slice(0, startIndex);\n const afterContent = this.fileContent.slice(stopIndex);\n\n this.fileContent = addNewlines\n ? `${beforeContent}\\n\\n${content}\\n${afterContent}`\n : `${beforeContent}${content}${afterContent}`;\n }\n }\n\n /**\n * Dumps the modified content back to the README file.\n * @returns {Promise<void>}\n */\n async dumpToFile(): Promise<void> {\n const content = await formatMarkdown(this.fileContent);\n if (process.env.GITHUB_ACTIONS) {\n core.setOutput('readme_after', content);\n }\n return fs.promises.writeFile(this.filePath, content, 'utf8');\n }\n}\n"]}
@@ -1,4 +1,5 @@
1
1
  /// <reference types="node" resolution-mode="require"/>
2
+ /// <reference types="node" resolution-mode="require"/>
2
3
  declare module "vitest.config" {
3
4
  const _default: import("vite").UserConfig;
4
5
  export default _default;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "github-action-readme-generator",
3
3
  "displayName": "bitflight-devops/github-action-readme-generator",
4
- "version": "1.8.4",
4
+ "version": "1.8.6",
5
5
  "description": "This is a CLI tool and GitHub Action that reads in the details from a \nGitHub Action's `action.yml` file and updates the `README.md` file\nwith the `name`, `description`, `usage`, `inputs`, `outputs`, and\nexamples of the action.\nConfiguration can be provided via a `.ghadocs.json` file stored in the\nroot directory of the Action's repository, via the command line when\nusing the cli, or via the `with:` section of this Action.\n\n\nThis tool uses markdown comments as delimiting tokens within the `README.md`\nfile to determine where to place the generated content.\n\n[`README.example.md`](README.example.md) example with all fields filled in, and no other free-form content.",
6
6
  "keywords": [
7
7
  "actions",
@@ -168,7 +168,7 @@
168
168
  "@types/babel__preset-env": "^7",
169
169
  "@types/esm": "^3",
170
170
  "@types/nconf": "^0.10.5",
171
- "@types/node": "^20.8.10",
171
+ "@types/node": "^25.0.3",
172
172
  "@types/node-emoji": "^2.1.0",
173
173
  "@typescript-eslint/eslint-plugin": "^6.9.1",
174
174
  "@typescript-eslint/parser": "^6.9.1",
@@ -177,8 +177,8 @@
177
177
  "conventional-commits": "^1.6.0",
178
178
  "cz-conventional-changelog": "^3.3.0",
179
179
  "dotenv": "^16.3.1",
180
- "esbuild": "^0.25.11",
181
- "esbuild-node-externals": "^1.9.0",
180
+ "esbuild": "^0.27.2",
181
+ "esbuild-node-externals": "^1.20.1",
182
182
  "eslint": "^8.52.0",
183
183
  "eslint-config-airbnb-base": "^15.0.0",
184
184
  "eslint-config-prettier": "^9.0.0",
@@ -210,7 +210,7 @@
210
210
  "vitest": "^4.0.6"
211
211
  },
212
212
  "engines": {
213
- "node": ">=20.0.0 <25.0.0",
213
+ "node": ">=20.0.0 <26.0.0",
214
214
  "npm": ">=10.0.0"
215
215
  },
216
216
  "os": [