Skip to content

Commit

Permalink
feat(project): update to account for breaking changes in the project …
Browse files Browse the repository at this point in the history
…plugin

BREAKING CHANGE: breaking changes in the project plugin have resulted in updates in the public api
of this package. refer to the example in the readme for details of updated input expectations
  • Loading branch information
travi committed Aug 27, 2024
1 parent e2985f2 commit d10bf12
Show file tree
Hide file tree
Showing 11 changed files with 70 additions and 99 deletions.
4 changes: 2 additions & 2 deletions .remarkrc.cjs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// https://github.com/remarkjs/remark/tree/master/packages/remark-stringify#options
exports.settings = {
listItemIndent: 1,
listItemIndent: 'one',
emphasis: '_',
strong: '_',
bullet: '*',
Expand All @@ -11,4 +11,4 @@ exports.plugins = [
'@form8ion/remark-lint-preset',
['remark-toc', {tight: true}],
['remark-usage', {heading: 'example'}]
];
];
8 changes: 2 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ $ npm install @form8ion/eslint-config-extender --save-prod

```javascript
const {packageManagers} = await import('@form8ion/javascript-core');
const githubPlugin = await import('@form8ion/github');
const {questionNames: projectQuestionNames} = await import('@form8ion/project');
const {scaffold: javascriptScaffolder, questionNames: jsQuestionNames} = await import('@form8ion/javascript');
const {scaffold, extendEslintConfig} = await import('./lib/index.mjs');
Expand Down Expand Up @@ -91,12 +92,7 @@ const {scaffold, extendEslintConfig} = await import('./lib/index.mjs');
[jsQuestionNames.CI_SERVICE]: 'Other',
[jsQuestionNames.PROVIDE_EXAMPLE]: false
},
vcsHosts: {
GitHub: {
scaffolder: options => options,
prompt: ({decisions}) => ({[projectQuestionNames.REPO_OWNER]: decisions[projectQuestionNames.REPO_OWNER]})
}
}
plugins: {vcsHosts: {GitHub: githubPlugin}}
},
decisions => options => javascriptScaffolder({...options, decisions, unitTestFrameworks: {}})
);
Expand Down
8 changes: 2 additions & 6 deletions example.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ td.when(execa('npm run generate:md && npm test', {shell: true})).thenReturn({std
td.when(execa('npm', ['whoami'])).thenResolve({stdout: any.word()});

const {packageManagers} = await import('@form8ion/javascript-core');
const githubPlugin = await import('@form8ion/github');
const {questionNames: projectQuestionNames} = await import('@form8ion/project');
const {scaffold: javascriptScaffolder, questionNames: jsQuestionNames} = await import('@form8ion/javascript');
const {scaffold, extendEslintConfig} = await import('./lib/index.mjs');
Expand Down Expand Up @@ -63,12 +64,7 @@ stubbedFs({node_modules: stubbedNodeModules});
[jsQuestionNames.CI_SERVICE]: 'Other',
[jsQuestionNames.PROVIDE_EXAMPLE]: false
},
vcsHosts: {
GitHub: {
scaffolder: options => options,
prompt: ({decisions}) => ({[projectQuestionNames.REPO_OWNER]: decisions[projectQuestionNames.REPO_OWNER]})
}
}
plugins: {vcsHosts: {GitHub: githubPlugin}}
},
decisions => options => javascriptScaffolder({...options, decisions, unitTestFrameworks: {}})
);
Expand Down
74 changes: 21 additions & 53 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 5 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,20 +53,21 @@
"provenance": true
},
"dependencies": {
"@form8ion/config-file": "^1.1.2",
"@form8ion/core": "^4.7.1",
"@form8ion/javascript": "^12.0.0",
"@form8ion/javascript-core": "^11.0.0",
"@form8ion/project": "^18.0.0",
"deepmerge": "^4.2.2",
"write-yaml": "^1.0.0"
"@form8ion/project": "^19.0.1",
"deepmerge": "^4.2.2"
},
"devDependencies": {
"@cucumber/cucumber": "10.8.0",
"@form8ion/commitlint-config": "1.0.76",
"@form8ion/eslint-config": "7.0.9",
"@form8ion/eslint-config-cucumber": "1.4.1",
"@form8ion/github": "2.0.0",
"@form8ion/remark-lint-preset": "6.0.3",
"@travi/any": "3.1.2",
"@travi/github-scaffolder": "10.3.1",
"ban-sensitive-files": "1.10.4",
"c8": "10.1.2",
"chai": "5.1.1",
Expand Down
28 changes: 16 additions & 12 deletions src/high-level.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import deepmerge from 'deepmerge';
import {questionNames as jsQuestionNames} from '@form8ion/javascript';
import {dialects} from '@form8ion/javascript-core';
import {scaffold, questionNames as projectQuestionNames} from '@form8ion/project';
import {questionNames as projectQuestionNames, scaffold} from '@form8ion/project';

import {PLUGIN_NAME} from './constants.js';

Expand All @@ -13,17 +13,21 @@ export default function (options, javascriptScaffolderFactory) {
options,
{
decisions: {[projectQuestionNames.PROJECT_LANGUAGE]: javaScriptLanguageChoice},
languages: {
[javaScriptLanguageChoice]: javascriptScaffolderFactory({
...options.decisions,
[jsQuestionNames.PROJECT_TYPE]: 'Package',
[jsQuestionNames.PROJECT_TYPE_CHOICE]: PLUGIN_NAME,
[jsQuestionNames.UNIT_TESTS]: false,
[jsQuestionNames.INTEGRATION_TESTS]: false,
[jsQuestionNames.CONFIGURE_LINTING]: false,
[jsQuestionNames.DIALECT]: dialects.COMMON_JS,
[jsQuestionNames.SHOULD_BE_SCOPED]: true
})
plugins: {
languages: {
[javaScriptLanguageChoice]: {
scaffold: javascriptScaffolderFactory({
...options.decisions,
[jsQuestionNames.PROJECT_TYPE]: 'Package',
[jsQuestionNames.PROJECT_TYPE_CHOICE]: PLUGIN_NAME,
[jsQuestionNames.UNIT_TESTS]: false,
[jsQuestionNames.INTEGRATION_TESTS]: false,
[jsQuestionNames.CONFIGURE_LINTING]: false,
[jsQuestionNames.DIALECT]: dialects.COMMON_JS,
[jsQuestionNames.SHOULD_BE_SCOPED]: true
})
}
}
}
}
)
Expand Down
2 changes: 1 addition & 1 deletion src/high-level.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ describe('high-level scaffolder', () => {
expect(projectScaffolder.scaffold).toHaveBeenCalledWith({
...options,
decisions: {...providedDecisions, [projectScaffolder.questionNames.PROJECT_LANGUAGE]: 'JavaScript'},
languages: {JavaScript: jsScaffolder}
plugins: {languages: {JavaScript: {scaffold: jsScaffolder}}}
});
});
});
11 changes: 8 additions & 3 deletions src/scaffold.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
import {promises as fs} from 'node:fs';

import writeYaml from '../thirdparty-wrappers/write-yaml.js';
import {fileTypes} from '@form8ion/core';
import {write} from '@form8ion/config-file';

export default async function ({projectRoot, scope, projectName}) {
const configShortName = projectName.substring('eslint-config-'.length);

await Promise.all([
writeYaml(`${projectRoot}/.eslintrc.yml`, {root: true, extends: [`@${scope}`, '.']}),
write({
format: fileTypes.YAML,
path: projectRoot,
name: 'eslint',
config: {root: true, extends: [`@${scope}`, '.']}
}),
fs.writeFile(
`${projectRoot}/index.js`,
`module.exports = {extends: '@form8ion/${configShortName}'};\n`
Expand Down
15 changes: 9 additions & 6 deletions src/scaffold.test.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
import {promises as fs} from 'node:fs';
import {fileTypes} from '@form8ion/core';
import {write} from '@form8ion/config-file';

import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest';
import any from '@travi/any';

import * as writeYaml from '../thirdparty-wrappers/write-yaml.js';
import scaffold from './scaffold.js';

describe('scaffold', () => {
const projectRoot = any.string();

beforeEach(() => {
vi.mock('node:fs');
vi.mock('../thirdparty-wrappers/write-yaml');
vi.mock('@form8ion/config-file');
});

afterEach(() => {
Expand All @@ -25,10 +26,12 @@ describe('scaffold', () => {

const {scripts, dependencies, devDependencies, nextSteps} = await scaffold({projectRoot, projectName, scope});

expect(writeYaml.default).toHaveBeenCalledWith(
`${projectRoot}/.eslintrc.yml`,
{root: true, extends: [`@${scope}`, '.']}
);
expect(write).toHaveBeenCalledWith({
path: projectRoot,
format: fileTypes.YAML,
name: 'eslint',
config: {root: true, extends: [`@${scope}`, '.']}
});
expect(fs.writeFile).toHaveBeenCalledWith(
`${projectRoot}/index.js`,
`module.exports = {extends: '@form8ion/${configShortName}'};\n`
Expand Down
6 changes: 4 additions & 2 deletions test/integration/features/step_definitions/common-steps.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {dirname, resolve} from 'node:path';
import {fileURLToPath} from 'node:url';
import {prompt, scaffold as githubScaffolder} from '@travi/github-scaffolder';
import * as githubPlugin from '@form8ion/github';

import stubbedFs from 'mock-fs';
import nock from 'nock';
Expand Down Expand Up @@ -88,7 +88,9 @@ When('the high-level scaffolder is executed', async function () {
[jsQuestionNames.SCOPE]: scope,
[jsQuestionNames.PROVIDE_EXAMPLE]: false
},
vcsHosts: {[gitHubVcsHostChoice]: {scaffolder: githubScaffolder, prompt}}
plugins: {
vcsHosts: {[gitHubVcsHostChoice]: githubPlugin}
}
},
decisions => options => scaffoldJs({
...options,
Expand Down
4 changes: 0 additions & 4 deletions thirdparty-wrappers/write-yaml.js

This file was deleted.

0 comments on commit d10bf12

Please sign in to comment.