redlint 6.1.2 → 6.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.
package/ChangeLog CHANGED
@@ -1,3 +1,13 @@
1
+ 2026.04.14, v6.3.0
2
+
3
+ feature:
4
+ - efd1748 read-stdin: add
5
+
6
+ 2026.04.14, v6.2.0
7
+
8
+ feature:
9
+ - bb8e0ee redlint: pack: simplify
10
+
1
11
  2026.03.02, v6.1.2
2
12
 
3
13
  fix:
package/README.md CHANGED
@@ -111,6 +111,26 @@ To add new rule `create-file` located in plugin `custom` for **RedLint** write a
111
111
  When you writing a rule for **RedLint** you can run tests with `redlint test`.
112
112
  Here is how it looks like: <img width="393" height="290" alt="image" src="https://github.com/user-attachments/assets/17f3bbb2-98aa-415e-b8e3-2065fef87261" />
113
113
 
114
+ ## Pack
115
+
116
+ ```sh
117
+ redlint pack
118
+ ```
119
+
120
+ Will produce file `filesystem.red` with content of current directory
121
+
122
+ ## Extract
123
+
124
+ ```sh
125
+ redlint extract
126
+ ```
127
+
128
+ Will extract `filesystem.red` to current directory. Also works from stdin:
129
+
130
+ ```sh
131
+ cat ../../filesystem.red | redlint extract
132
+ ```
133
+
114
134
  ## License
115
135
 
116
136
  MIT
@@ -0,0 +1,22 @@
1
+ import {promisify} from 'node:util';
2
+ import process from 'node:process';
3
+
4
+ export const readStdin = promisify((overrides, fn) => {
5
+ const {stdin} = fn ? overrides : process;
6
+ fn = fn || overrides;
7
+
8
+ stdin.setEncoding('utf8');
9
+
10
+ if (stdin.isTTY)
11
+ return fn(null, '');
12
+
13
+ const data = [];
14
+
15
+ stdin.on('data', (chunk) => {
16
+ data.push(chunk);
17
+ });
18
+
19
+ stdin.on('end', () => {
20
+ fn(null, data.join(''));
21
+ });
22
+ });
package/bin/redlint.js CHANGED
@@ -61,6 +61,7 @@ import {
61
61
  TEST,
62
62
  isTest,
63
63
  } from '../lib/menu.js';
64
+ import {readStdin} from './read-stdin.js';
64
65
 
65
66
  const {log} = console;
66
67
  const {exit} = process;
@@ -247,7 +248,7 @@ async function uiLoop(arg) {
247
248
  }
248
249
 
249
250
  if (isExtract(arg)) {
250
- const filesystem = await readFile(join(CWD, 'filesystem.red'), 'utf8');
251
+ const filesystem = await readStdin() || await readFile(join(CWD, 'filesystem.red'), 'utf8');
251
252
  await masterExtract(CWD, filesystem);
252
253
  const spinner = ora(`extract 'filesystem.red'`).start();
253
254
 
@@ -19,6 +19,7 @@ export function masterConvert(filename, type, filesystem, overrides = {}) {
19
19
  } = overrides;
20
20
 
21
21
  const slave = new URL('./slave.js', import.meta.url);
22
+
22
23
  const workerData = {
23
24
  filename,
24
25
  type,
package/lib/edit/edit.js CHANGED
@@ -47,7 +47,6 @@ export const edit = (filesystem, options, overrides = {}) => {
47
47
  });
48
48
 
49
49
  const to = readFileContent(tmpFile, 'utf8');
50
-
51
50
  const newNames = to.split('\n');
52
51
 
53
52
  removeTmpFile();
@@ -19,6 +19,7 @@ export function masterPack(cwd, filesystem, overrides = {}) {
19
19
  } = overrides;
20
20
 
21
21
  const slave = new URL('./slave.js', import.meta.url);
22
+
22
23
  const workerData = {
23
24
  cwd,
24
25
  filesystem,
package/lib/pack/pack.js CHANGED
@@ -5,10 +5,8 @@ import {
5
5
  } from 'putout';
6
6
  import {createProgress} from '@putout/engine-runner/progress';
7
7
  import * as pluginFilesystem from '@putout/plugin-filesystem';
8
- import {
9
- branch as originalBranch,
10
- merge as originalMerge,
11
- } from '@putout/processor-filesystem';
8
+ import {create} from '@putout/processor-filesystem/create';
9
+ import {readFileContent as _readFileContent} from '@putout/cli-filesystem';
12
10
 
13
11
  const [, readAllFiles] = pluginFilesystem.rules['read-all-files'];
14
12
  const [, replaceCwd] = pluginFilesystem.rules['replace-cwd'];
@@ -16,15 +14,21 @@ const [, replaceCwd] = pluginFilesystem.rules['replace-cwd'];
16
14
  export const pack = (from, filesystem, overrides = {}) => {
17
15
  const {
18
16
  progress = createProgress(),
19
- branch = originalBranch,
20
- merge = originalMerge,
17
+ readFileContent = _readFileContent,
21
18
  } = overrides;
22
19
 
20
+ const {branch, merge} = create({
21
+ cli: true,
22
+ maybeSimple: true,
23
+ filesystemCLI: {
24
+ readFileContent,
25
+ },
26
+ });
27
+
23
28
  const [{source}] = branch(filesystem);
24
29
  const ast = parse(source);
25
30
 
26
31
  transform(ast, {
27
- fix: true,
28
32
  fixCount: 1,
29
33
  progress,
30
34
  rules: {
@@ -19,6 +19,7 @@ export function masterRename(filename, type, filesystem, overrides = {}) {
19
19
  } = overrides;
20
20
 
21
21
  const slave = new URL('./slave.js', import.meta.url);
22
+
22
23
  const workerData = {
23
24
  filename,
24
25
  type,
package/lib/view/view.js CHANGED
@@ -16,10 +16,13 @@ export const view = (filename, overrides = {}) => {
16
16
 
17
17
  for (const [line, nameWithContent] of entries(files)) {
18
18
  for (const [name, content] of entries(nameWithContent)) {
19
- lines.push(codeFrameColumns(dedent(content), {}, {
20
- highlightCode: true,
21
- message: `${name}:${line}`,
22
- }) + '\n');
19
+ lines.push(
20
+ codeFrameColumns(dedent(content), {}, {
21
+ highlightCode: true,
22
+ message: `${name}:${line}`,
23
+ }) +
24
+ '\n',
25
+ );
23
26
  }
24
27
  }
25
28
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "redlint",
3
- "version": "6.1.2",
3
+ "version": "6.3.0",
4
4
  "type": "module",
5
5
  "author": "coderaiser <mnemonic.enemy@gmail.com> (https://github.com/coderaiser)",
6
6
  "description": "Lint Filesystem with 🐊Putout",
@@ -71,6 +71,7 @@
71
71
  ],
72
72
  "devDependencies": {
73
73
  "@putout/test": "^15.0.0",
74
+ "@supertape/operator-strip": "^1.0.0",
74
75
  "eslint": "^10.0.0",
75
76
  "eslint-plugin-putout": "^31.0.0",
76
77
  "just-kebab-case": "^4.2.0",