{"id":13756366,"url":"https://github.com/form8ion/javascript-scaffolder","last_synced_at":"2025-05-10T03:31:33.736Z","repository":{"id":45542785,"uuid":"129633448","full_name":"form8ion/javascript-scaffolder","owner":"form8ion","description":"opinionated scaffolder for JavaScript projects","archived":true,"fork":false,"pushed_at":"2021-12-09T17:38:54.000Z","size":9395,"stargazers_count":3,"open_issues_count":38,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-05-01T13:02:32.222Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://npm.im/@travi/javascript-scaffolder","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/form8ion.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-04-15T17:21:06.000Z","updated_at":"2023-01-28T04:51:52.000Z","dependencies_parsed_at":"2022-07-17T04:19:23.470Z","dependency_job_id":null,"html_url":"https://github.com/form8ion/javascript-scaffolder","commit_stats":null,"previous_names":["travi/javascript-scaffolder"],"tags_count":423,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/form8ion%2Fjavascript-scaffolder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/form8ion%2Fjavascript-scaffolder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/form8ion%2Fjavascript-scaffolder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/form8ion%2Fjavascript-scaffolder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/form8ion","download_url":"https://codeload.github.com/form8ion/javascript-scaffolder/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224547312,"owners_count":17329426,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-03T11:00:42.997Z","updated_at":"2024-11-16T11:31:33.501Z","avatar_url":"https://github.com/form8ion.png","language":"JavaScript","funding_links":[],"categories":["Scaffolding"],"sub_categories":["Official"],"readme":"# javascript-scaffolder\n\nopinionated scaffolder for JavaScript projects\n\n**REPLACED BY [@form8ion/javascript](https://github.com/form8ion/javascript)**\n\n\u003c!--status-badges start --\u003e\n\n[![Codecov](https://img.shields.io/codecov/c/github/travi/javascript-scaffolder.svg)](https://codecov.io/github/travi/javascript-scaffolder)\n[![Node CI Workflow Status][github-actions-ci-badge]][github-actions-ci-link]\n\n\u003c!--status-badges end --\u003e\n\n## Table of Contents\n\n* [Features](#features)\n* [Usage](#usage)\n  * [Installation](#installation)\n  * [As one of the languages for scaffolding a project](#as-one-of-the-languages-for-scaffolding-a-project)\n    * [Example](#example)\n      * [Dependencies:](#dependencies)\n      * [Execute](#execute)\n    * [Options](#options)\n      * [`projectRoot` __string__ (_required_)](#projectroot-string-required)\n      * [`projectName` __string__ (_required_)](#projectname-string-required)\n      * [`visibility` __string__ (_required_)](#visibility-string-required)\n      * [`license` __string__ (_required_)](#license-string-required)\n      * [`vcs` __object__ (_required_)](#vcs-object-required)\n      * [`description` __string__ (_optional_)](#description-string-optional)\n      * [`configs` __object__ (_optional_)](#configs-object-optional)\n      * [`overrides` __object__ (_optional_)](#overrides-object-optional)\n      * [`registries` __object__ (_optional_)](#registries-object-optional)\n      * [`ciServices` __object__ (_optional_)](#ciservices-object-optional)\n      * [`applicationTypes` __object__ (_optional_)](#applicationtypes-object-optional)\n      * [`unitTestFrameworks` __object__ (_required_)](#unittestframeworks-object-required)\n* [Contributing](#contributing)\n  * [Dependencies](#dependencies-1)\n  * [Verification](#verification)\n* [Related Projects](#related-projects)\n\n## Features\n\n* Sets the [node.js](https://nodejs.org/) version to the latest or LTS version\n  (your choice) using [nvm](https://github.com/creationix/nvm)\n* Scaffolds the `package.json`\n  * Enables linting of:\n    * JavaScript with [ESLint](https://eslint.org/)\n    * Markdown with [remark-lint](https://github.com/remarkjs/remark-lint/tree/master/packages/remark-lint)\n    * Peer-dependency compatibiltiy (by running `npm ls` and ensuring a `0`\n      exit code)\n    * Sensitive files to prevent commiting secrets using [ban-sensitive-files](https://github.com/bahmutov/ban-sensitive-files)\n    * The `.travis.yml` using [travis-lint](https://github.com/pwmckenna/node-travis-lint),\n      when [Travis](https://travis-ci.com) is the chosen CI\n* Enables transpilation with [Babel](https://babeljs.io)\n* Defines and enforces the [commit message convention](https://conventionalcommits.org/)\n* Defines [badges](https://shields.io) for inclusion in the `README.md`\n* Defines files to be ignored from `git` and `npm`\n* Scaffolds CI service config from the user choice of the\n  [provided scaffolders](#ciservices-object-optional)\n\n## Usage\n\n\u003c!--consumer-badges start --\u003e\n\n[![npm][npm-badge]][npm-link]\n![node][node-badge]\n[![MIT license][license-badge]][license-link]\n\n\u003c!--consumer-badges end --\u003e\n\n### Installation\n\n```sh\n$ npm install @travi/javascript-scaffolder --save-prod\n```\n\n### As one of the languages for scaffolding a project\n\nThis scaffolder is intended to be used to scaffold the\n[language specific details](https://github.com/form8ion/project#languages-optional)\nwithin the [project-scaffolder](https://github.com/form8ion/project).\n\n#### Example\n\n##### Dependencies:\n\n```javascript\nconst {dialects, projectTypes} = require('@form8ion/javascript-core');\nconst {scaffold: scaffoldJavaScript, questionNames} = require('./lib/index.cjs');\n```\n\n##### Execute\n\n```javascript\n(async () =\u003e {\n  const accountName = 'form8ion';\n\n  await scaffoldJavaScript({\n    projectRoot: process.cwd(),\n    projectName: 'project-name',\n    visibility: 'Public',\n    license: 'MIT',\n    configs: {\n      eslint: {scope: `@${accountName}`},\n      remark: `@${accountName}/remark-lint-preset`,\n      babelPreset: {name: `@${accountName}`, packageName: `@${accountName}/babel-preset`},\n      commitlint: {name: `@${accountName}`, packageName: `@${accountName}/commitlint-config`}\n    },\n    overrides: {npmAccount: accountName},\n    ciServices: {},\n    unitTestFrameworks: {},\n    decisions: {\n      [questionNames.DIALECT]: dialects.BABEL,\n      [questionNames.NODE_VERSION_CATEGORY]: 'LTS',\n      [questionNames.PACKAGE_MANAGER]: 'npm',\n      [questionNames.PROJECT_TYPE]: projectTypes.PACKAGE,\n      [questionNames.SHOULD_BE_SCOPED]: true,\n      [questionNames.SCOPE]: accountName,\n      [questionNames.AUTHOR_NAME]: 'Your Name',\n      [questionNames.AUTHOR_EMAIL]: 'you@domain.tld',\n      [questionNames.AUTHOR_URL]: 'https://your.website.tld',\n      [questionNames.UNIT_TESTS]: true,\n      [questionNames.INTEGRATION_TESTS]: true\n    }\n  });\n})();\n```\n\n#### Options\n\n##### `projectRoot` __string__ (_required_)\n\npath to the root of the project\n\n##### `projectName` __string__ (_required_)\n\nname of the project (w/o a [scope](https://docs.npmjs.com/misc/scope))\n\n##### `visibility` __string__ (_required_)\n\nvisibility of the project (`Public` or `Private`)\n\n##### `license` __string__ (_required_)\n\n##### `vcs` __object__ (_required_)\n\n* `host` __string__ (_required_)\n  VCS hosting service\n* `owner` __string__ (_required_)\n  account name on the host service for the repository\n* `name` __string__ (_required_)\n  repository name\n\n##### `description` __string__ (_optional_)\n\nshort summary of the project\n\n##### `configs` __object__ (_optional_)\n\n* `eslint`: __object__ (_optional_)\n  details about the [shareable config](https://eslint.org/docs/developer-guide/shareable-configs)\n  to be used for the project\n\n  * `packageName` __string__ (_required_)\n    name of the `npm` package\n  * `prefix` __string__ (_required_)\n    name to be used when referring to the config within the `.eslintrc` files\n\n  :warning: while i'm not confident that it is the recommended convention, it\n  is assumed the defined config has a `rules/` directory exposed from the\n  package with rulesets defined for\n\n  * `es6.js`\n  * `tests/base.js`\n  * `tests/mocha.js`\n\n* `commitlint` __object__ (_optional_)\n  details about the [shareable config](https://marionebl.github.io/commitlint/#/concepts-shareable-config)\n  to be used for the project\n  * `packageName` __string__ (_required_)\n    name of the `npm` package\n  * `name` __string__ (_required_)\n    name to be used when referring to the config within the `.commitlintrc.js`\n    file\n\n* `babelPreset` __object__ (_optional_)\n  details about the [preset](https://babeljs.io/docs/plugins/#creating-a-preset)\n  to be used for the project\n  * `packageName` __string__ (_required_)\n    name of the `npm` package\n  * `name` __string__ (_required_)\n    shorthand name to be used when referring to the config\n\n##### `overrides` __object__ (_optional_)\n\n* `npmAccount` __string__ (_optional_)\n  the account the package should be published under. used to suggest a\n  [scope](https://docs.npmjs.com/misc/scope). defaults to `$ npm whoami`\n* `author` __object__ (_optional_)\n  [details](https://docs.npmjs.com/files/package.json#people-fields-author-contributors)\n  about the package author\n\n  * `name` __string__ (_required_) defaults to `$npm config get init.author.name`\n  * `email` __string__ (_optional_) defaults to `$npm config get init.author.email`\n  * `url` __string__ (_optional_) defaults to `$npm config get init.author.url`\n\n##### `registries` __object__ (_optional_)\n\n* keys: __string__ Scope of packages related to this registry (without the `@`)\n* values: __string__ URL for the registry\n\n##### `ciServices` __object__ (_optional_)\n\n* keys: __string__ Name of the service\n* values: __object__\n  * `scaffolder`: __function__ (_required_) scaffolds the ci service options\n  * `public`: __boolean__ (_optional_) whether this service should be presented\n    as a public option\n  * `private`: __boolean__ (_optional_) whether this service should be presented\n    as a private option\n\n##### `applicationTypes` __object__ (_optional_)\n\n* keys: __string__ Name of the type of application\n* values: __object__\n  * `scaffolder` __function__ (_required_) scaffolds the application\n\n##### `unitTestFrameworks` __object__ (_required_)\n\n[frameworks](https://github.com/form8ion/awesome#unit-testing-frameworks) to be\npassed to the [unit-testing scaffolder](https://github.com/form8ion/javascript-core#frameworks-object-required)\n\n## Contributing\n\n\u003c!--contribution-badges start --\u003e\n\n[![Conventional Commits][commit-convention-badge]][commit-convention-link]\n[![Commitizen friendly][commitizen-badge]][commitizen-link]\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![PRs Welcome][prs-badge]][prs-link]\n[![Renovate][renovate-badge]][renovate-link]\n\n\u003c!--contribution-badges end --\u003e\n\n### Dependencies\n\n```sh\n$ nvm install\n$ npm install\n```\n\n### Verification\n\n```sh\n$ npm test\n```\n\n## Related Projects\n\n* [project-scaffolder](https://npm.im/@form8ion/project)\n* [travis-scaffolder-javascript](https://github.com/travi/travis-scaffolder-javascript)\n* [cli](https://npm.im/@travi/cli)\n\n[npm-link]: https://www.npmjs.com/package/@travi/javascript-scaffolder\n\n[npm-badge]: https://img.shields.io/npm/v/@travi/javascript-scaffolder.svg\n\n[node-badge]: https://img.shields.io/node/v/@travi/javascript-scaffolder.svg\n\n[license-link]: LICENSE\n\n[license-badge]: https://img.shields.io/github/license/travi/javascript-scaffolder.svg\n\n[commit-convention-link]: https://conventionalcommits.org\n\n[commit-convention-badge]: https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\n\n[commitizen-link]: http://commitizen.github.io/cz-cli/\n\n[commitizen-badge]: https://img.shields.io/badge/commitizen-friendly-brightgreen.svg\n\n[prs-link]: http://makeapullrequest.com\n\n[prs-badge]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg\n\n[renovate-link]: https://renovatebot.com\n\n[renovate-badge]: https://img.shields.io/badge/renovate-enabled-brightgreen.svg?logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzNjkgMzY5Ij48Y2lyY2xlIGN4PSIxODkuOSIgY3k9IjE5MC4yIiByPSIxODQuNSIgZmlsbD0iI2ZmZTQyZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUgLTYpIi8+PHBhdGggZmlsbD0iIzhiYjViNSIgZD0iTTI1MSAyNTZsLTM4LTM4YTE3IDE3IDAgMDEwLTI0bDU2LTU2YzItMiAyLTYgMC03bC0yMC0yMWE1IDUgMCAwMC03IDBsLTEzIDEyLTktOCAxMy0xM2ExNyAxNyAwIDAxMjQgMGwyMSAyMWM3IDcgNyAxNyAwIDI0bC01NiA1N2E1IDUgMCAwMDAgN2wzOCAzOHoiLz48cGF0aCBmaWxsPSIjZDk1NjEyIiBkPSJNMzAwIDI4OGwtOCA4Yy00IDQtMTEgNC0xNiAwbC00Ni00NmMtNS01LTUtMTIgMC0xNmw4LThjNC00IDExLTQgMTUgMGw0NyA0N2M0IDQgNCAxMSAwIDE1eiIvPjxwYXRoIGZpbGw9IiMyNGJmYmUiIGQ9Ik04MSAxODVsMTgtMTggMTggMTgtMTggMTh6Ii8+PHBhdGggZmlsbD0iIzI1YzRjMyIgZD0iTTIyMCAxMDBsMjMgMjNjNCA0IDQgMTEgMCAxNkwxNDIgMjQwYy00IDQtMTEgNC0xNSAwbC0yNC0yNGMtNC00LTQtMTEgMC0xNWwxMDEtMTAxYzUtNSAxMi01IDE2IDB6Ii8+PHBhdGggZmlsbD0iIzFkZGVkZCIgZD0iTTk5IDE2N2wxOC0xOCAxOCAxOC0xOCAxOHoiLz48cGF0aCBmaWxsPSIjMDBhZmIzIiBkPSJNMjMwIDExMGwxMyAxM2M0IDQgNCAxMSAwIDE2TDE0MiAyNDBjLTQgNC0xMSA0LTE1IDBsLTEzLTEzYzQgNCAxMSA0IDE1IDBsMTAxLTEwMWM1LTUgNS0xMSAwLTE2eiIvPjxwYXRoIGZpbGw9IiMyNGJmYmUiIGQ9Ik0xMTYgMTQ5bDE4LTE4IDE4IDE4LTE4IDE4eiIvPjxwYXRoIGZpbGw9IiMxZGRlZGQiIGQ9Ik0xMzQgMTMxbDE4LTE4IDE4IDE4LTE4IDE4eiIvPjxwYXRoIGZpbGw9IiMxYmNmY2UiIGQ9Ik0xNTIgMTEzbDE4LTE4IDE4IDE4LTE4IDE4eiIvPjxwYXRoIGZpbGw9IiMyNGJmYmUiIGQ9Ik0xNzAgOTVsMTgtMTggMTggMTgtMTggMTh6Ii8+PHBhdGggZmlsbD0iIzFiY2ZjZSIgZD0iTTYzIDE2N2wxOC0xOCAxOCAxOC0xOCAxOHpNOTggMTMxbDE4LTE4IDE4IDE4LTE4IDE4eiIvPjxwYXRoIGZpbGw9IiMzNGVkZWIiIGQ9Ik0xMzQgOTVsMTgtMTggMTggMTgtMTggMTh6Ii8+PHBhdGggZmlsbD0iIzFiY2ZjZSIgZD0iTTE1MyA3OGwxOC0xOCAxOCAxOC0xOCAxOHoiLz48cGF0aCBmaWxsPSIjMzRlZGViIiBkPSJNODAgMTEzbDE4LTE3IDE4IDE3LTE4IDE4ek0xMzUgNjBsMTgtMTggMTggMTgtMTggMTh6Ii8+PHBhdGggZmlsbD0iIzk4ZWRlYiIgZD0iTTI3IDEzMWwxOC0xOCAxOCAxOC0xOCAxOHoiLz48cGF0aCBmaWxsPSIjYjUzZTAyIiBkPSJNMjg1IDI1OGw3IDdjNCA0IDQgMTEgMCAxNWwtOCA4Yy00IDQtMTEgNC0xNiAwbC02LTdjNCA1IDExIDUgMTUgMGw4LTdjNC01IDQtMTIgMC0xNnoiLz48cGF0aCBmaWxsPSIjOThlZGViIiBkPSJNODEgNzhsMTgtMTggMTggMTgtMTggMTh6Ii8+PHBhdGggZmlsbD0iIzAwYTNhMiIgZD0iTTIzNSAxMTVsOCA4YzQgNCA0IDExIDAgMTZMMTQyIDI0MGMtNCA0LTExIDQtMTUgMGwtOS05YzUgNSAxMiA1IDE2IDBsMTAxLTEwMWM0LTQgNC0xMSAwLTE1eiIvPjxwYXRoIGZpbGw9IiMzOWQ5ZDgiIGQ9Ik0yMjggMTA4bC04LThjLTQtNS0xMS01LTE2IDBMMTAzIDIwMWMtNCA0LTQgMTEgMCAxNWw4IDhjLTQtNC00LTExIDAtMTVsMTAxLTEwMWM1LTQgMTItNCAxNiAweiIvPjxwYXRoIGZpbGw9IiNhMzM5MDQiIGQ9Ik0yOTEgMjY0bDggOGM0IDQgNCAxMSAwIDE2bC04IDdjLTQgNS0xMSA1LTE1IDBsLTktOGM1IDUgMTIgNSAxNiAwbDgtOGM0LTQgNC0xMSAwLTE1eiIvPjxwYXRoIGZpbGw9IiNlYjZlMmQiIGQ9Ik0yNjAgMjMzbC00LTRjLTYtNi0xNy02LTIzIDAtNyA3LTcgMTcgMCAyNGw0IDRjLTQtNS00LTExIDAtMTZsOC04YzQtNCAxMS00IDE1IDB6Ii8+PHBhdGggZmlsbD0iIzEzYWNiZCIgZD0iTTEzNCAyNDhjLTQgMC04LTItMTEtNWwtMjMtMjNhMTYgMTYgMCAwMTAtMjNMMjAxIDk2YTE2IDE2IDAgMDEyMiAwbDI0IDI0YzYgNiA2IDE2IDAgMjJMMTQ2IDI0M2MtMyAzLTcgNS0xMiA1em03OC0xNDdsLTQgMi0xMDEgMTAxYTYgNiAwIDAwMCA5bDIzIDIzYTYgNiAwIDAwOSAwbDEwMS0xMDFhNiA2IDAgMDAwLTlsLTI0LTIzLTQtMnoiLz48cGF0aCBmaWxsPSIjYmY0NDA0IiBkPSJNMjg0IDMwNGMtNCAwLTgtMS0xMS00bC00Ny00N2MtNi02LTYtMTYgMC0yMmw4LThjNi02IDE2LTYgMjIgMGw0NyA0NmM2IDcgNiAxNyAwIDIzbC04IDhjLTMgMy03IDQtMTEgNHptLTM5LTc2Yy0xIDAtMyAwLTQgMmwtOCA3Yy0yIDMtMiA3IDAgOWw0NyA0N2E2IDYgMCAwMDkgMGw3LThjMy0yIDMtNiAwLTlsLTQ2LTQ2Yy0yLTItMy0yLTUtMnoiLz48L3N2Zz4=\n\n[github-actions-ci-link]: https://github.com/travi/javascript-scaffolder/actions?query=workflow%3A%22Node.js+CI%22+branch%3Amaster\n\n[github-actions-ci-badge]: https://github.com/travi/javascript-scaffolder/workflows/Node.js%20CI/badge.svg\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fform8ion%2Fjavascript-scaffolder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fform8ion%2Fjavascript-scaffolder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fform8ion%2Fjavascript-scaffolder/lists"}