aberlaas 2.1.0 → 2.3.0

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.
Files changed (51) hide show
  1. package/README.md +125 -20
  2. package/commands/ci/index.js +14 -99
  3. package/commands/compress/dummy.js +11 -0
  4. package/commands/compress/index.js +5 -14
  5. package/commands/compress/png.js +18 -9
  6. package/commands/init/index.js +23 -7
  7. package/commands/lint/css.js +27 -21
  8. package/commands/lint/helpers/prettier.js +40 -12
  9. package/commands/lint/index.js +1 -1
  10. package/commands/lint/js.js +3 -4
  11. package/commands/lint/json.js +6 -5
  12. package/commands/lint/yml.js +6 -5
  13. package/commands/precommit/index.js +4 -3
  14. package/commands/setup/index.js +0 -12
  15. package/commands/test/index.js +50 -49
  16. package/configs/eslint.cjs +20 -3
  17. package/configs/lintstaged.js +25 -0
  18. package/configs/node.cjs +1 -0
  19. package/configs/{prettier.cjs → prettier.js} +1 -1
  20. package/configs/{stylelint.cjs → stylelint.js} +1 -1
  21. package/configs/vite.js +9 -2
  22. package/helper.js +13 -0
  23. package/main.js +0 -2
  24. package/package.json +10 -16
  25. package/templates/_circleci/config.yml +0 -1
  26. package/templates/_eslintignore.conf +4 -1
  27. package/templates/_gitattributes +3 -0
  28. package/templates/_gitignore +28 -0
  29. package/templates/_yarnrc.yml +9 -0
  30. package/templates/lintstaged.config.js +4 -0
  31. package/templates/prettier.config.js +4 -0
  32. package/templates/scripts/compress +4 -0
  33. package/templates/scripts/hooks/pre-commit +1 -1
  34. package/templates/stylelint.config.js +4 -0
  35. package/commands/ci/autoRelease.js +0 -143
  36. package/commands/release/index.js +0 -76
  37. package/commands/setup/autoRelease/envVars.js +0 -56
  38. package/commands/setup/autoRelease/index.js +0 -59
  39. package/commands/setup/autoRelease/privateKey.js +0 -41
  40. package/commands/setup/autoRelease/publicKey.js +0 -55
  41. package/configs/jest/index.cjs +0 -52
  42. package/configs/jest/jest-extended.cjs +0 -3
  43. package/configs/jest/setupFileAfterEnv.cjs +0 -13
  44. package/configs/jest/sharedState.cjs +0 -14
  45. package/configs/jest/testEnvironment.cjs +0 -46
  46. package/configs/jest.cjs +0 -1
  47. package/configs/lintstaged.cjs +0 -25
  48. package/templates/_lintstagedrc.cjs +0 -4
  49. package/templates/_prettierrc.cjs +0 -4
  50. package/templates/_stylelintrc.cjs +0 -4
  51. package/templates/jest.config.cjs +0 -4
@@ -1,7 +1,6 @@
1
1
  import helper from '../../helper.js';
2
2
  import _ from 'golgoth/lodash.js';
3
3
  import firostError from 'firost/error.js';
4
- import run from 'firost/run.js';
5
4
  import { ESLint } from 'eslint';
6
5
 
7
6
  export default {
@@ -11,7 +10,8 @@ export default {
11
10
  * @returns {Array} Array of files
12
11
  **/
13
12
  async getInputFiles(userPatterns) {
14
- return await helper.findHostFiles(userPatterns, ['.js']);
13
+ const filePatterns = _.isEmpty(userPatterns) ? ['./**/*.js'] : userPatterns;
14
+ return await helper.findHostFiles(filePatterns, ['.js']);
15
15
  },
16
16
  /**
17
17
  * Lint all files and display results.
@@ -34,7 +34,7 @@ export default {
34
34
  const configFile = await helper.configFile(
35
35
  userConfigFile,
36
36
  '.eslintrc.cjs',
37
- 'lib/configs/eslint.cjs',
37
+ 'configs/eslint.cjs',
38
38
  );
39
39
 
40
40
  // Run the actual lint
@@ -70,5 +70,4 @@ export default {
70
70
  async fix(userPatterns, userConfigFile) {
71
71
  return await this.run(userPatterns, userConfigFile, { fix: true });
72
72
  },
73
- __run: run,
74
73
  };
@@ -13,7 +13,10 @@ export default {
13
13
  * @returns {Array} Array of files
14
14
  **/
15
15
  async getInputFiles(userPatterns) {
16
- return await helper.findHostFiles(userPatterns, ['.json']);
16
+ const filePatterns = _.isEmpty(userPatterns)
17
+ ? ['./**/*.json']
18
+ : userPatterns;
19
+ return await helper.findHostFiles(filePatterns, ['.json']);
17
20
  },
18
21
  /**
19
22
  * Lint all files and display results.
@@ -30,7 +33,7 @@ export default {
30
33
  const errorMessages = [];
31
34
  await pMap(files, async (filepath) => {
32
35
  try {
33
- this.__parse(await read(filepath));
36
+ JSON.parse(await read(filepath));
34
37
  } catch (error) {
35
38
  hasErrors = true;
36
39
  const relativePath = path.relative(helper.hostRoot(), filepath);
@@ -54,8 +57,6 @@ export default {
54
57
  if (_.isEmpty(files)) {
55
58
  return true;
56
59
  }
57
- await this.__prettierFix(files);
60
+ await prettierFix(files);
58
61
  },
59
- __prettierFix: prettierFix,
60
- __parse: JSON.parse,
61
62
  };
@@ -14,7 +14,10 @@ export default {
14
14
  * @returns {Array} Array of files
15
15
  **/
16
16
  async getInputFiles(userPatterns) {
17
- return await helper.findHostFiles(userPatterns, ['.yml', '.yaml']);
17
+ const filePatterns = _.isEmpty(userPatterns)
18
+ ? ['./**/*.yml', './**/*.yaml']
19
+ : userPatterns;
20
+ return await helper.findHostFiles(filePatterns, ['.yml', '.yaml']);
18
21
  },
19
22
  /**
20
23
  * Lint all files and display results.
@@ -32,7 +35,7 @@ export default {
32
35
  await pMap(files, async (filepath) => {
33
36
  const input = await read(filepath);
34
37
  try {
35
- await this.__lint(input);
38
+ await yamlLint.lint(input);
36
39
  } catch (error) {
37
40
  hasErrors = true;
38
41
  const relativePath = path.relative(helper.hostRoot(), filepath);
@@ -56,8 +59,6 @@ export default {
56
59
  if (_.isEmpty(files)) {
57
60
  return true;
58
61
  }
59
- await this.__prettierFix(files);
62
+ await prettierFix(files);
60
63
  },
61
- __prettierFix: prettierFix,
62
- __lint: yamlLint.lint,
63
64
  };
@@ -7,13 +7,14 @@ export default {
7
7
  // Config
8
8
  const configPath = await helper.configFile(
9
9
  cliArgs.config,
10
- '.lintstagedrc.cjs',
11
- 'lib/configs/lintstaged.cjs',
10
+ 'lintstaged.config.js',
11
+ 'configs/lintstaged.js',
12
12
  );
13
+ const config = await helper.import(configPath);
13
14
 
14
15
  try {
15
16
  const result = await lintStaged({
16
- configPath,
17
+ config,
17
18
  });
18
19
  // Linting failed
19
20
  if (!result) {
@@ -1,14 +1,12 @@
1
1
  import github from './github.js';
2
2
  import circleci from './circleci.js';
3
3
  import renovate from './renovate.js';
4
- import autoRelease from './autoRelease/index.js';
5
4
  import _ from 'golgoth/lodash.js';
6
5
 
7
6
  export default {
8
7
  /**
9
8
  * Enable external services.
10
9
  * Will enable CircleCI, GitHub and Renovate by default.
11
- * If --auto-release is passed, will configure CircleCI
12
10
  * @param {object} cliArgs CLI Argument object, as created by minimist
13
11
  **/
14
12
  async run(cliArgs = {}) {
@@ -16,7 +14,6 @@ export default {
16
14
  circleci: true,
17
15
  renovate: true,
18
16
  github: true,
19
- 'auto-release': false,
20
17
  };
21
18
  const cliServices = _.omit(cliArgs, ['_']);
22
19
  const servicesToEnable = {
@@ -33,9 +30,6 @@ export default {
33
30
  if (servicesToEnable.renovate) {
34
31
  await this.renovate();
35
32
  }
36
- if (servicesToEnable['auto-release']) {
37
- await this.autoRelease();
38
- }
39
33
  },
40
34
  /**
41
35
  * Configure GitHub
@@ -55,10 +49,4 @@ export default {
55
49
  async renovate() {
56
50
  await renovate.enable();
57
51
  },
58
- /**
59
- * Enable autoRelease on CircleCI
60
- **/
61
- async autoRelease() {
62
- await autoRelease.enable();
63
- },
64
52
  };
@@ -1,5 +1,6 @@
1
+ import { createVitest } from 'vitest/node';
1
2
  import helper from '../../helper.js';
2
- import run from 'firost/run.js';
3
+ import firostError from 'firost/error.js';
3
4
  import _ from 'golgoth/lodash.js';
4
5
 
5
6
  export default {
@@ -15,70 +16,70 @@ export default {
15
16
  * @param {object} cliArgs CLI Argument object, as created by minimist
16
17
  * @returns {boolean} true on success
17
18
  **/
18
- async run(cliArgs) {
19
- const options = await this.vitestCliOptions(cliArgs);
20
- const binary = await helper.which('vitest');
19
+ async run(cliArgs = {}) {
20
+ const options = await this.vitestOptions(cliArgs);
21
+ const files = _.isEmpty(cliArgs._) ? [helper.hostPath()] : cliArgs._;
22
+
23
+ const vitest = await createVitest('test', options);
24
+
25
+ // Note: vitest sets process.exitCode to 1 if tests fail
26
+ const initialExitCode = process.exitCode;
27
+ await vitest.start(files);
28
+
29
+ if (!options.watch) {
30
+ await vitest.close();
31
+ }
32
+
33
+ if (process.exitCode == 1) {
34
+ process.exitCode = initialExitCode;
35
+ throw firostError('ERROR_TEST', 'Error while testing files');
36
+ }
21
37
 
22
- await run(`${binary} ${options.join(' ')}`, { stdin: true });
23
38
  return true;
24
39
  },
25
40
 
26
41
  /**
27
- * Transform all aberlaas test cli options into suitable vitest CLI options
42
+ * Transform all aberlaas test cli options into suitable vitest options
28
43
  * @param {object} cliArgs CLI Argument object, as created by minimist
29
- * @returns {Array} Array of cli arguments and values
44
+ * @returns {Array} Array of options for vitest
30
45
  **/
31
- async vitestCliOptions(cliArgs = {}) {
46
+ async vitestOptions(cliArgs = {}) {
32
47
  // Options that have special meaning in aberlaas and shouldn't be passed
33
48
  // as-is to vitest
34
- const aberlaasOptions = ['_', 'watch', 'config', 'failFast', 'related'];
49
+ const specialMeaningCliArgs = ['_', 'config', 'failFast', 'related'];
35
50
 
36
- // Input files
37
- const inputFiles = _.isEmpty(cliArgs._) ? [helper.hostPath()] : cliArgs._;
38
- const vitestOptions = [...inputFiles];
39
-
40
- // Run "vitest related" when --related is passed
41
- if (cliArgs.related) {
42
- vitestOptions.unshift('related');
43
- }
44
-
45
- // Stop early as soon as one test fails
46
- if (cliArgs.failFast) {
47
- vitestOptions.push('--bail=1');
48
- }
49
-
50
- // Disable watch by default
51
- vitestOptions.push(cliArgs.watch ? '--watch=true' : '--watch=false');
52
-
53
- // Allow a success, even if no files are passed
54
- vitestOptions.push('--passWithNoTests');
55
-
56
- // Hide skipped tests, allowing less noisy debug with fit/fdescribe
57
- vitestOptions.push('--hideSkippedTests');
58
-
59
- // Config file
51
+ // Reading base options from the config file
60
52
  const configFile = await helper.configFile(
61
53
  cliArgs.config,
62
54
  'vite.config.js',
63
- 'lib/configs/vite.js',
55
+ 'configs/vite.js',
64
56
  );
65
- vitestOptions.push(`--config=${configFile}`);
57
+ const optionsFromConfig = (await helper.import(configFile)).test;
66
58
 
67
- // Pass any unknown options to vitest
68
- _.each(cliArgs, (argValue, argKey) => {
69
- // Skip keys that we already handled
70
- if (_.includes(aberlaasOptions, argKey)) {
71
- return;
72
- }
73
-
74
- if (argValue === true) {
75
- vitestOptions.push(`--${argKey}`);
76
- return;
77
- }
59
+ // Enhancing options with custom CLI arguments
60
+ const optionsFromAberlaas = {
61
+ // We always allow fit/fdescribe, even in CI. Those errors will be caught
62
+ // by the lint command instead
63
+ allowOnly: true,
64
+ };
65
+ // --failFast stops early as soon as one test fails
66
+ if (cliArgs.failFast) {
67
+ optionsFromAberlaas.bail = 1;
68
+ }
69
+ // --related runs also related files
70
+ // Note (2024-01-19): The related option is not documented, but should
71
+ // contain the list of files
72
+ if (cliArgs.related) {
73
+ optionsFromAberlaas.related = cliArgs._;
74
+ }
78
75
 
79
- vitestOptions.push(`--${argKey}=${argValue}`);
80
- });
76
+ // Passing other CLI options directly to vitest
77
+ const optionsFromCli = _.omit(cliArgs, specialMeaningCliArgs);
81
78
 
82
- return vitestOptions;
79
+ return {
80
+ ...optionsFromConfig,
81
+ ...optionsFromAberlaas,
82
+ ...optionsFromCli,
83
+ };
83
84
  },
84
85
  };
@@ -1,3 +1,5 @@
1
+ // Note: ESLint doesn't support ESM configuration as of 2024-02-19. This file
2
+ // needs to stay as a CommonJS file
1
3
  const nodeConfig = require('./node.cjs');
2
4
  module.exports = {
3
5
  env: {
@@ -15,6 +17,23 @@ module.exports = {
15
17
  'plugin:import/recommended',
16
18
  'plugin:prettier/recommended',
17
19
  ],
20
+ settings: {
21
+ // eslint-plugin-import doesn't currently support the "exports" syntax in
22
+ // package.json. This allow mapping between custom entrypoints and
23
+ // files on disk.
24
+ // For example, it doesn't understand "import * from 'vitest/config';" as
25
+ // "vitest/config/" isn't really an existing filepath, but a mapping defined
26
+ // in vitest package.json
27
+ //
28
+ // Until this is fixed (see
29
+ // https://github.com/import-js/eslint-plugin-import/issues/2430)
30
+ // we manually define the most common extensions
31
+ 'import/resolver': {
32
+ node: {
33
+ extensions: ['.js', '.cjs', '.mjs', '.d.ts'],
34
+ },
35
+ },
36
+ },
18
37
  plugins: ['jsdoc', 'prettier'],
19
38
  rules: {
20
39
  'dot-notation': ['error'],
@@ -98,10 +117,8 @@ module.exports = {
98
117
  testName: false,
99
118
  // Shorter method names
100
119
  fit: false,
101
- ftest: false,
102
120
  fdescribe: false,
103
121
  xit: false,
104
- xtest: false,
105
122
  xdescribe: false,
106
123
 
107
124
  captureOutput: false,
@@ -113,7 +130,7 @@ module.exports = {
113
130
  ],
114
131
  rules: {
115
132
  'no-restricted-globals': [
116
- 'warn',
133
+ 'error',
117
134
  {
118
135
  name: 'fit',
119
136
  message: 'No focused test',
@@ -0,0 +1,25 @@
1
+ const readmeCommands = [
2
+ 'yarn run aberlaas readme',
3
+ 'git add ./README.md ./lib/README.md',
4
+ ];
5
+
6
+ export default {
7
+ // Lint
8
+ '*.css': ['yarn run lint:fix --css'],
9
+ '*.{yml,yaml}': ['yarn run lint:fix --yml'],
10
+ '.circleci/config.yml': ['yarn run lint --circleci'],
11
+ '*.json': ['yarn run lint:fix --json'],
12
+ '*.js': ['yarn run lint:fix --js'],
13
+
14
+ // Test
15
+ './lib/**/*.js': ['yarn run test --failFast --related'],
16
+
17
+ // Compress
18
+ '*.png': ['yarn run compress --png'],
19
+
20
+ // Documentation
21
+ // Update the README whenever the documentation, or the README template
22
+ // changes
23
+ 'docs/src/**/*.md': readmeCommands,
24
+ '.github/README.template.md': readmeCommands,
25
+ };
package/configs/node.cjs CHANGED
@@ -2,4 +2,5 @@
2
2
  // which we also have to keep in cjs format
3
3
  module.exports = {
4
4
  nodeVersion: '18.18.0', // Also see templates/_circleci/config.yml
5
+ yarnVersion: '4.0.2',
5
6
  };
@@ -1,4 +1,4 @@
1
- module.exports = {
1
+ export default {
2
2
  singleQuote: true,
3
3
  printWidth: 80,
4
4
  };
@@ -1,6 +1,6 @@
1
1
  // Initially exported from
2
2
  // https://github.com/stylelint/stylelint-config-recommended/blob/master/index.js
3
- module.exports = {
3
+ export default {
4
4
  rules: {
5
5
  'at-rule-no-unknown': [
6
6
  true,
package/configs/vite.js CHANGED
@@ -3,8 +3,13 @@ const configDir = new URL('./vite/', import.meta.url).pathname;
3
3
 
4
4
  export default defineConfig({
5
5
  test: {
6
- // Make describe, it, beforeEach and other globally available
7
- globals: true,
6
+ // vitest default is to run in watch mode, we revert that
7
+ watch: false,
8
+ // Allow a success, even if no files are passed
9
+ passWithNoTests: true,
10
+ // Hide skipped tests, allowing less noisy debug with fit/fdescribe
11
+ hideSkippedTests: true,
12
+
8
13
  // Tests should be in a __tests__ folder next to their code
9
14
  include: ['**/__tests__/**/*.js?(x)'],
10
15
  // We ignore temporary folders from the tests
@@ -13,6 +18,8 @@ export default defineConfig({
13
18
  // Restore mocks after each tests
14
19
  restoreMocks: true,
15
20
 
21
+ // Make describe, it, beforeEach and other globally available
22
+ globals: true,
16
23
  // Run before each test file
17
24
  setupFiles: [
18
25
  `${configDir}/test/setupFiles/dedent.js`,
package/helper.js CHANGED
@@ -159,4 +159,17 @@ export default {
159
159
  async yarnRun(scriptName) {
160
160
  return await run(`yarn run ${scriptName}`, { cwd: this.hostRoot() });
161
161
  },
162
+ /**
163
+ * Dynamically import a file
164
+ * This is a wrapper around the default import, but bypasses the cache
165
+ * It makes sure importing a file several times always loads the last version
166
+ * TODO: This should probably be moved in firost once firost is moved to ESM
167
+ * @param {string} filepath Path to the file to load
168
+ * @returns {object} Content of the loaded file
169
+ **/
170
+ async import(filepath) {
171
+ const content = await import(`${filepath}?cacheBusting=${Date.now()}`);
172
+
173
+ return content.default || content;
174
+ },
162
175
  };
package/main.js CHANGED
@@ -6,7 +6,6 @@ import commandCi from './commands/ci/index.js';
6
6
  import commandCompress from './commands/compress/index.js';
7
7
  import commandInit from './commands/init/index.js';
8
8
  import commandPrecommit from './commands/precommit/index.js';
9
- import commandRelease from './commands/release/index.js';
10
9
  import commandTest from './commands/test/index.js';
11
10
  import commandLint from './commands/lint/index.js';
12
11
  import commandReadme from './commands/readme/index.js';
@@ -25,7 +24,6 @@ export default {
25
24
  lint: commandLint,
26
25
  precommit: commandPrecommit,
27
26
  readme: commandReadme,
28
- release: commandRelease,
29
27
  setup: commandSetup,
30
28
  test: commandTest,
31
29
  };
package/package.json CHANGED
@@ -2,17 +2,11 @@
2
2
  "name": "aberlaas",
3
3
  "type": "module",
4
4
  "description": "Scaffold your JavaScript projects with tests, lint and release scripts",
5
- "version": "2.1.0",
5
+ "version": "2.3.0",
6
6
  "repository": "pixelastic/aberlaas",
7
7
  "homepage": "https://projects.pixelastic.com/aberlaas/",
8
8
  "author": "Tim Carry (@pixelastic)",
9
9
  "license": "MIT",
10
- "exports": {
11
- ".": "./main.js",
12
- "./configs/lintstaged.cjs": "./configs/lintstaged.cjs",
13
- "./configs/prettier.cjs": "./configs/prettier.cjs",
14
- "./configs/styleling.cjs": "./configs/styleling.cjs"
15
- },
16
10
  "files": [
17
11
  "bin/",
18
12
  "lib/",
@@ -27,21 +21,25 @@
27
21
  "commands/readme/*.js",
28
22
  "commands/release/*.js",
29
23
  "commands/setup/*.js",
30
- "commands/setup/autoRelease/*.js",
31
24
  "commands/setup/helpers/*.js",
32
25
  "commands/test/*.js",
33
26
  "configs/",
34
27
  "templates/"
35
28
  ],
36
- "bin": {
37
- "aberlaas": "bin/aberlaas.js"
29
+ "exports": {
30
+ ".": "./main.js",
31
+ "./configs/lintstaged": "./configs/lintstaged.js",
32
+ "./configs/prettier": "./configs/prettier.js",
33
+ "./configs/stylelint": "./configs/stylelint.js"
38
34
  },
35
+ "bin": "bin/aberlaas.js",
39
36
  "dependencies": {
40
37
  "@octokit/rest": "18.12.0",
41
38
  "ci-info": "3.9.0",
42
39
  "dedent": "1.5.1",
43
- "eslint": "8.54.0",
40
+ "eslint": "8.56.0",
44
41
  "eslint-config-prettier": "9.0.0",
42
+ "eslint-plugin-import": "2.29.0",
45
43
  "eslint-plugin-jsdoc": "46.9.0",
46
44
  "eslint-plugin-n": "16.3.1",
47
45
  "eslint-plugin-prettier": "5.0.1",
@@ -77,9 +75,5 @@
77
75
  "test:watch": "../scripts/lib/test-watch",
78
76
  "postinstall": "./scripts/postinstall"
79
77
  },
80
- "devDependencies": {
81
- "eslint-plugin-import": "2.29.0",
82
- "eslint-plugin-vitest": "0.3.10"
83
- },
84
- "gitHead": "5d021891b8ba9c030747a3bc7bf20d86c85422db"
78
+ "gitHead": "cca93623a1219558bd311aefde796d75d6790009"
85
79
  }
@@ -20,7 +20,6 @@ jobs:
20
20
  <<: *defaults
21
21
  steps:
22
22
  - checkout
23
- # - add_ssh_keys # Uncomment to enable --autoRelease
24
23
  - *restore_cache
25
24
  - *yarn_install
26
25
  - *save_cache
@@ -1,4 +1,4 @@
1
- # Hidden files (.prettierrc.js, etc) are ignored by default by ESLint
1
+ # Hidden files are ignored by default by ESLint
2
2
  # The following line will unignore them
3
3
  !.*
4
4
 
@@ -7,3 +7,6 @@ node_modules/
7
7
 
8
8
  # .yarn contains the yarn source code, we don't need to lint it
9
9
  .yarn/
10
+
11
+ # Ignore the documentation for now, I haven't migrated it to ESM yet
12
+ docs/
@@ -0,0 +1,3 @@
1
+ # Yarn
2
+ /.yarn/releases/** binary
3
+ /.yarn/plugins/** binary
@@ -0,0 +1,28 @@
1
+ # Hidden files
2
+ .DS_Store
3
+ .envrc
4
+
5
+ # Directories
6
+ build/
7
+ dist/
8
+ node_modules/
9
+ tmp/
10
+
11
+ # Files
12
+ Thumbs.db
13
+ npm-debug.log
14
+ yarn-error.log
15
+ *~
16
+
17
+ # Yarn
18
+ # https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored
19
+ .yarn/*
20
+ !.yarn/patches
21
+ !.yarn/plugins
22
+ !.yarn/releases
23
+ !.yarn/sdks
24
+ !.yarn/versions
25
+
26
+
27
+ # Netlify
28
+ .netlify
@@ -0,0 +1,9 @@
1
+ compressionLevel: 0
2
+
3
+ defaultSemverRangePrefix: ''
4
+
5
+ enableGlobalCache: true
6
+
7
+ nmMode: hardlinks-local
8
+
9
+ nodeLinker: node-modules
@@ -0,0 +1,4 @@
1
+ import config from 'aberlaas/configs/lintstaged';
2
+ export default {
3
+ ...config,
4
+ };
@@ -0,0 +1,4 @@
1
+ import config from 'aberlaas/configs/prettier';
2
+ export default {
3
+ ...config,
4
+ };
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env sh
2
+ set -e
3
+
4
+ aberlaas compress "$@"
@@ -8,4 +8,4 @@
8
8
  # $ git config core.hooksPath scripts/hooks
9
9
  set -e
10
10
 
11
- aberlaas precommit "$@"
11
+ yarn run aberlaas precommit
@@ -0,0 +1,4 @@
1
+ import config from 'aberlaas/configs/stylelint';
2
+ export default {
3
+ ...config,
4
+ };