@meza/adr-tools 2.0.2 → 2.0.4

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 (124) hide show
  1. package/dist/index.js +8 -1
  2. package/dist/index.js.map +1 -1
  3. package/dist/types/index.d.ts.map +1 -1
  4. package/dist/types/version.d.ts +1 -1
  5. package/dist/version.js +1 -1
  6. package/package.json +21 -9
  7. package/.adr-dir +0 -1
  8. package/.editorconfig +0 -13
  9. package/.gitattributes +0 -40
  10. package/.github/renovate.json +0 -4
  11. package/.github/stale.yml +0 -18
  12. package/.github/workflows/ci-pr.yml +0 -48
  13. package/.github/workflows/ci.yml +0 -67
  14. package/.github/workflows/security.yml +0 -49
  15. package/.releaserc.json +0 -49
  16. package/.yarnrc.yml +0 -8
  17. package/AGENTS.engineer.md +0 -236
  18. package/AGENTS.md +0 -11
  19. package/AGENTS.reviewer.md +0 -115
  20. package/CONTRIBUTING.md +0 -102
  21. package/biome.json +0 -28
  22. package/dist/index.test.js +0 -197
  23. package/dist/index.test.js.map +0 -1
  24. package/dist/inject-version.test.js +0 -27
  25. package/dist/inject-version.test.js.map +0 -1
  26. package/dist/lib/adr.test.js +0 -319
  27. package/dist/lib/adr.test.js.map +0 -1
  28. package/dist/lib/config.test.js +0 -60
  29. package/dist/lib/config.test.js.map +0 -1
  30. package/dist/lib/links.test.js +0 -66
  31. package/dist/lib/links.test.js.map +0 -1
  32. package/dist/lib/manipulator-errors.test.js +0 -21
  33. package/dist/lib/manipulator-errors.test.js.map +0 -1
  34. package/dist/lib/manipulator.test.js +0 -96
  35. package/dist/lib/manipulator.test.js.map +0 -1
  36. package/dist/lib/numbering.test.js +0 -39
  37. package/dist/lib/numbering.test.js.map +0 -1
  38. package/dist/lib/opening.test.js +0 -81
  39. package/dist/lib/opening.test.js.map +0 -1
  40. package/dist/lib/prompt.test.js +0 -33
  41. package/dist/lib/prompt.test.js.map +0 -1
  42. package/dist/lib/template.test.js +0 -62
  43. package/dist/lib/template.test.js.map +0 -1
  44. package/dist/types/index.test.d.ts +0 -2
  45. package/dist/types/index.test.d.ts.map +0 -1
  46. package/dist/types/inject-version.test.d.ts +0 -2
  47. package/dist/types/inject-version.test.d.ts.map +0 -1
  48. package/dist/types/lib/adr.test.d.ts +0 -2
  49. package/dist/types/lib/adr.test.d.ts.map +0 -1
  50. package/dist/types/lib/config.test.d.ts +0 -2
  51. package/dist/types/lib/config.test.d.ts.map +0 -1
  52. package/dist/types/lib/links.test.d.ts +0 -2
  53. package/dist/types/lib/links.test.d.ts.map +0 -1
  54. package/dist/types/lib/manipulator-errors.test.d.ts +0 -2
  55. package/dist/types/lib/manipulator-errors.test.d.ts.map +0 -1
  56. package/dist/types/lib/manipulator.test.d.ts +0 -2
  57. package/dist/types/lib/manipulator.test.d.ts.map +0 -1
  58. package/dist/types/lib/numbering.test.d.ts +0 -2
  59. package/dist/types/lib/numbering.test.d.ts.map +0 -1
  60. package/dist/types/lib/opening.test.d.ts +0 -2
  61. package/dist/types/lib/opening.test.d.ts.map +0 -1
  62. package/dist/types/lib/prompt.test.d.ts +0 -2
  63. package/dist/types/lib/prompt.test.d.ts.map +0 -1
  64. package/dist/types/lib/template.test.d.ts +0 -2
  65. package/dist/types/lib/template.test.d.ts.map +0 -1
  66. package/doc/adr/.adr-sequence.lock +0 -1
  67. package/doc/adr/0001-record-architecture-decisions.md +0 -21
  68. package/doc/adr/0002-using-heavy-e2e-tests.md +0 -20
  69. package/doc/adr/0003-esm.md +0 -34
  70. package/doc/adr/0004-gate-editor-opening-behind---open-and---open-with.md +0 -55
  71. package/doc/adr/decisions.md +0 -6
  72. package/lefthook.yml +0 -14
  73. package/scripts/inject-version.mjs +0 -34
  74. package/src/index.test.ts +0 -222
  75. package/src/index.ts +0 -261
  76. package/src/inject-version.test.ts +0 -31
  77. package/src/lib/adr.test.ts +0 -389
  78. package/src/lib/adr.ts +0 -384
  79. package/src/lib/config.test.ts +0 -69
  80. package/src/lib/config.ts +0 -36
  81. package/src/lib/links.test.ts +0 -74
  82. package/src/lib/links.ts +0 -34
  83. package/src/lib/manipulator-errors.test.ts +0 -22
  84. package/src/lib/manipulator.test.ts +0 -109
  85. package/src/lib/manipulator.ts +0 -98
  86. package/src/lib/numbering.test.ts +0 -45
  87. package/src/lib/numbering.ts +0 -25
  88. package/src/lib/opening.test.ts +0 -96
  89. package/src/lib/prompt.test.ts +0 -42
  90. package/src/lib/prompt.ts +0 -14
  91. package/src/lib/template.test.ts +0 -74
  92. package/src/lib/template.ts +0 -22
  93. package/src/templates/init.md +0 -21
  94. package/src/templates/template.md +0 -19
  95. package/src/types/environment.d.ts +0 -14
  96. package/src/version.ts +0 -1
  97. package/tests/.adr-dir +0 -1
  98. package/tests/__snapshots__/generate-graph.e2e.test.ts.snap +0 -39
  99. package/tests/__snapshots__/init-adr-repository.e2e.test.ts.snap +0 -51
  100. package/tests/__snapshots__/linking-records.e2e.test.ts.snap +0 -155
  101. package/tests/__snapshots__/new-adr.e2e.test.ts.snap +0 -54
  102. package/tests/__snapshots__/superseding-records.e2e.test.ts.snap +0 -122
  103. package/tests/__snapshots__/toc-prefixing.e2e.test.ts.snap +0 -9
  104. package/tests/__snapshots__/use-template-override.e2e.test.ts.snap +0 -17
  105. package/tests/edit-on-create.e2e.test.ts +0 -90
  106. package/tests/fake-editor +0 -5
  107. package/tests/fake-editor.cmd +0 -4
  108. package/tests/fake-visual +0 -5
  109. package/tests/fake-visual.cmd +0 -4
  110. package/tests/funny-characters.e2e.test.ts +0 -51
  111. package/tests/generate-graph.e2e.test.ts +0 -49
  112. package/tests/helpers/adr-cli.ts +0 -24
  113. package/tests/init-adr-repository.e2e.test.ts +0 -58
  114. package/tests/linking-records.e2e.test.ts +0 -72
  115. package/tests/list-adrs.e2e.test.ts +0 -60
  116. package/tests/new-adr.e2e.test.ts +0 -62
  117. package/tests/open-with.e2e.test.ts +0 -53
  118. package/tests/superseding-records.e2e.test.ts +0 -64
  119. package/tests/toc-prefixing.e2e.test.ts +0 -43
  120. package/tests/use-template-override.e2e.test.ts +0 -52
  121. package/tests/work-form-other-directories.e2e.test.ts +0 -48
  122. package/tsconfig.json +0 -55
  123. package/vitest.config.e2e.ts +0 -18
  124. package/vitest.config.ts +0 -30
@@ -1,60 +0,0 @@
1
- import fs from 'fs/promises';
2
- import path from 'path';
3
- import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
4
- vi.mock('fs/promises', () => ({
5
- default: {
6
- access: vi.fn(),
7
- readFile: vi.fn(),
8
- mkdir: vi.fn()
9
- }
10
- }));
11
- const setupModule = async (cwd) => {
12
- vi.resetModules();
13
- vi.spyOn(process, 'cwd').mockReturnValue(cwd);
14
- const module = await import('./config.js');
15
- return module;
16
- };
17
- describe('config', () => {
18
- beforeEach(() => {
19
- vi.mocked(fs.access).mockReset();
20
- vi.mocked(fs.readFile).mockReset();
21
- vi.mocked(fs.mkdir).mockReset();
22
- });
23
- afterEach(() => {
24
- vi.restoreAllMocks();
25
- });
26
- it('uses configured adr directory when .adr-dir exists', async () => {
27
- const cwd = path.join(path.parse(process.cwd()).root, 'repo');
28
- const { getDir, workingDir } = await setupModule(cwd);
29
- vi.mocked(fs.access).mockResolvedValueOnce(undefined);
30
- vi.mocked(fs.readFile).mockResolvedValueOnce('doc/adr');
31
- const dir = await getDir();
32
- expect(workingDir()).toEqual(cwd);
33
- expect(dir).toEqual(path.join('doc', 'adr'));
34
- expect(fs.mkdir).toHaveBeenCalledWith(path.join('doc', 'adr'), { recursive: true });
35
- });
36
- it('falls back to doc/adr when no config exists', async () => {
37
- const cwd = path.join(path.parse(process.cwd()).root, 'repo');
38
- const { getDir } = await setupModule(cwd);
39
- vi.mocked(fs.access).mockRejectedValue(new Error('missing'));
40
- const dir = await getDir();
41
- expect(dir).toEqual(path.resolve(cwd, 'doc/adr'));
42
- expect(fs.mkdir).toHaveBeenCalledWith(path.resolve(cwd, 'doc/adr'), { recursive: true });
43
- });
44
- it('resolves .adr-dir from a parent directory', async () => {
45
- const repoRoot = path.join(path.parse(process.cwd()).root, 'repo');
46
- const cwd = path.join(repoRoot, 'subdir');
47
- const { getDir } = await setupModule(cwd);
48
- vi.mocked(fs.access).mockImplementation(async (target) => {
49
- const targetPath = typeof target === 'string' ? target : target.toString();
50
- if (targetPath === path.join(repoRoot, '.adr-dir')) {
51
- return;
52
- }
53
- throw new Error('missing');
54
- });
55
- vi.mocked(fs.readFile).mockResolvedValueOnce('doc/adr');
56
- const dir = await getDir();
57
- expect(dir).toEqual(path.join('..', 'doc/adr'));
58
- });
59
- });
60
- //# sourceMappingURL=config.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.test.js","sourceRoot":"src/","sources":["lib/config.test.ts"],"names":[],"mappings":"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"}
@@ -1,66 +0,0 @@
1
- import fs from 'fs/promises';
2
- import { afterEach, describe, expect, it, vi } from 'vitest';
3
- import { getDir } from './config.js';
4
- import { getLinkDetails } from './links.js';
5
- vi.mock('./config.js');
6
- vi.mock('fs/promises');
7
- describe('The link lib', () => {
8
- const mockReaddir = vi.mocked(fs.readdir);
9
- afterEach(() => {
10
- vi.resetAllMocks();
11
- });
12
- it('does not care if there are no matches', async () => {
13
- vi.mocked(getDir).mockResolvedValueOnce('/');
14
- mockReaddir.mockResolvedValueOnce([]);
15
- const linkString = '1:overrides:overriden by';
16
- const response = await getLinkDetails(linkString);
17
- expect(response).toEqual({
18
- pattern: '1',
19
- original: '1:overrides:overriden by',
20
- link: 'overrides',
21
- reverseLink: 'overriden by',
22
- matches: []
23
- });
24
- });
25
- it('does handles multiple matches', async () => {
26
- vi.mocked(getDir).mockResolvedValueOnce('/');
27
- mockReaddir.mockResolvedValueOnce(['1-one', '1-two', '1-three']);
28
- const linkString = '1:overrides:overriden by';
29
- const response = await getLinkDetails(linkString);
30
- expect(response).toEqual({
31
- pattern: '1',
32
- original: '1:overrides:overriden by',
33
- link: 'overrides',
34
- reverseLink: 'overriden by',
35
- matches: ['1-one', '1-two', '1-three']
36
- });
37
- });
38
- it('returns only files that match the pattern', async () => {
39
- vi.mocked(getDir).mockResolvedValueOnce('/');
40
- mockReaddir.mockResolvedValueOnce(['on1e', '1-two', 'three']);
41
- const linkString = '1:overrides:overriden by';
42
- const response = await getLinkDetails(linkString);
43
- expect(response).toEqual({
44
- pattern: '1',
45
- original: '1:overrides:overriden by',
46
- link: 'overrides',
47
- reverseLink: 'overriden by',
48
- matches: ['on1e', '1-two']
49
- });
50
- });
51
- it('handles superseding', async () => {
52
- vi.mocked(getDir).mockResolvedValueOnce('/');
53
- mockReaddir.mockResolvedValueOnce([]);
54
- const linkString = '1';
55
- const supersede = true;
56
- const response = await getLinkDetails(linkString, supersede);
57
- expect(response).toEqual({
58
- pattern: '1',
59
- original: '1',
60
- link: 'Supersedes',
61
- reverseLink: 'Superseded by',
62
- matches: []
63
- });
64
- });
65
- });
66
- //# sourceMappingURL=links.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"links.test.js","sourceRoot":"src/","sources":["lib/links.test.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- import { describe, expect, it, vi } from 'vitest';
2
- vi.mock('marked', () => ({
3
- marked: {
4
- lexer: () => [
5
- {
6
- type: 'paragraph',
7
- text: {
8
- toString: () => 'Superseded by [1. title](0001-title.md)',
9
- match: () => null
10
- }
11
- }
12
- ]
13
- }
14
- }));
15
- describe('The ADR manipulator error cases', () => {
16
- it('throws when a link cannot be parsed', async () => {
17
- const { getLinksFrom } = await import('./manipulator.js');
18
- expect(() => getLinksFrom('ignored')).toThrowError('Could not parse link from');
19
- });
20
- });
21
- //# sourceMappingURL=manipulator-errors.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"manipulator-errors.test.js","sourceRoot":"src/","sources":["lib/manipulator-errors.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAElD,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;IACvB,MAAM,EAAE;QACN,KAAK,EAAE,GAAG,EAAE,CAAC;YACX;gBACE,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE;oBACJ,QAAQ,EAAE,GAAG,EAAE,CAAC,yCAAyC;oBACzD,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI;iBAClB;aACF;SACF;KACF;CACF,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC1D,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,2BAA2B,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,96 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { getLinksFrom, getTitleFrom, injectLink, supersede } from './manipulator.js';
3
- describe('The ADR manipulator', () => {
4
- const original = '# NUMBER. TITLE\n' +
5
- '\n' +
6
- 'Date: DATE\n' +
7
- '\n' +
8
- '## Status\n' +
9
- '\n' +
10
- 'STATUS\n' +
11
- '\n' +
12
- '## Context\n' +
13
- '\n' +
14
- 'The issue motivating this decision, and any context that influences or constrains the decision.\n' +
15
- '\n' +
16
- '## Decision\n' +
17
- '\n' +
18
- "The change that we're proposing or have agreed to implement.\n" +
19
- '\n' +
20
- '## Consequences\n' +
21
- '\n' +
22
- 'What becomes easier or more difficult to do and any risks introduced by the change that will need to be mitigated.\n';
23
- const modified = '# NUMBER. TITLE\n' +
24
- '\n' +
25
- 'Date: DATE\n' +
26
- '\n' +
27
- '## Status\n' +
28
- '\n' +
29
- 'STATUS\n' +
30
- '\n' +
31
- 'INJECTED STUFF\n' +
32
- '\n' +
33
- '## Context\n' +
34
- '\n' +
35
- 'The issue motivating this decision, and any context that influences or constrains the decision.\n' +
36
- '\n' +
37
- '## Decision\n' +
38
- '\n' +
39
- "The change that we're proposing or have agreed to implement.\n" +
40
- '\n' +
41
- '## Consequences\n' +
42
- '\n' +
43
- 'What becomes easier or more difficult to do and any risks introduced by the change that will need to be mitigated.\n';
44
- it('can inject links to the status section', () => {
45
- const test = injectLink(original, 'INJECTED STUFF');
46
- expect(test).toEqual(modified);
47
- });
48
- it('throws an error when status cannot be found', () => {
49
- const noStatus = '# NUMBER. TITLE\n';
50
- const test = () => injectLink(noStatus, 'INJECTED STUFF');
51
- expect(test).toThrowError('Could not find status section');
52
- });
53
- it('adds to the status section even when there are no following headers', () => {
54
- const noFollowingHeaders = '## STATUS\nACCEPTED\n\n';
55
- const expected = '## STATUS\nACCEPTED\n\nINJECTED STUFF\n\n';
56
- const test = injectLink(noFollowingHeaders, 'INJECTED STUFF');
57
- expect(test).toEqual(expected);
58
- });
59
- it('throws when status section is missing for supersede', () => {
60
- const noStatus = '# NUMBER. TITLE\n';
61
- const test = () => supersede(noStatus, 'Superseded by [ADR 1](0001-adr.md)');
62
- expect(test).toThrowError('Could not find status section');
63
- });
64
- it('throws when status section has no paragraph', () => {
65
- const noStatusParagraph = '# NUMBER. TITLE\n\n## Status\n\n## Context\n';
66
- const test = () => supersede(noStatusParagraph, 'Superseded by [ADR 1](0001-adr.md)');
67
- expect(test).toThrowError('There is no status paragraph. Please format your adr properly');
68
- });
69
- it('replaces status paragraph when superseding', () => {
70
- const markdown = '# NUMBER. TITLE\n\n## Status\n\nAccepted\n\n## Context\n';
71
- const link = 'Superseded by [ADR 1](0001-adr.md)';
72
- const result = supersede(markdown, link);
73
- expect(result).toEqual('# NUMBER. TITLE\n\n## Status\n\nSuperseded by [ADR 1](0001-adr.md)\n\n## Context\n');
74
- });
75
- it('can return the title and number', () => {
76
- const original = '# 2. This is the title\n';
77
- const test = getTitleFrom(original);
78
- expect(test).toEqual('2. This is the title');
79
- });
80
- it('throws when main heading is missing', () => {
81
- const test = () => getTitleFrom('No heading here');
82
- expect(test).toThrowError('No main heading found');
83
- });
84
- it('can extract links from the status section', () => {
85
- const original = '## Status\n' + '\n' + 'Superseded by [3. title here](and-a-link-here.md)\n';
86
- const extractedLink = getLinksFrom(original);
87
- expect(extractedLink[0]).toEqual({
88
- label: 'Superseded by',
89
- targetNumber: '3',
90
- text: '3. title here',
91
- href: 'and-a-link-here.md',
92
- raw: 'Superseded by [3. title here](and-a-link-here.md)'
93
- });
94
- });
95
- });
96
- //# sourceMappingURL=manipulator.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"manipulator.test.js","sourceRoot":"src/","sources":["lib/manipulator.test.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- import fs from 'fs/promises';
2
- import { afterAll, describe, expect, it, vi } from 'vitest';
3
- import { newNumber } from './numbering.js';
4
- vi.mock('fs/promises');
5
- vi.mock('./config.js', () => ({
6
- getDir: vi.fn().mockResolvedValue('/')
7
- }));
8
- describe('The numbering logic', () => {
9
- afterAll(() => {
10
- vi.resetAllMocks();
11
- });
12
- it('can read from the sequence file', async () => {
13
- const random = Math.floor(Math.random() * 100);
14
- vi.mocked(fs.readFile).mockResolvedValueOnce(random.toString());
15
- const num = await newNumber();
16
- expect(num).toEqual(random + 1);
17
- });
18
- it('returns 1 if there are no files', async () => {
19
- vi.mocked(fs.readFile).mockRejectedValueOnce('no sequence file');
20
- vi.mocked(fs.readdir).mockResolvedValueOnce([]);
21
- const num = await newNumber();
22
- expect(num).toEqual(1);
23
- });
24
- it('processes existing files if there is no lockfile', async () => {
25
- const fakeFiles = ['0001-first-file.md', '0002-first-file.md'];
26
- vi.mocked(fs.readFile).mockRejectedValueOnce('no sequence file');
27
- vi.mocked(fs.readdir).mockResolvedValueOnce(fakeFiles);
28
- const num = await newNumber();
29
- expect(num).toEqual(3);
30
- });
31
- it('ignores non-adr filenames when deriving numbers', async () => {
32
- const fakeFiles = ['notes.txt', '0005-fifth.md'];
33
- vi.mocked(fs.readFile).mockRejectedValueOnce('no sequence file');
34
- vi.mocked(fs.readdir).mockResolvedValueOnce(fakeFiles);
35
- const num = await newNumber();
36
- expect(num).toEqual(6);
37
- });
38
- });
39
- //# sourceMappingURL=numbering.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"numbering.test.js","sourceRoot":"src/","sources":["lib/numbering.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAI3C,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACvB,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5B,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC;CACvC,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,QAAQ,CAAC,GAAG,EAAE;QACZ,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;QAC/C,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;QACjE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,SAAS,GAAa,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;QACzE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;QACjE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,OAAiC,CAAC,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACjF,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,SAAS,GAAa,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAC3D,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;QACjE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,OAAiC,CAAC,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACjF,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,81 +0,0 @@
1
- import { afterEach, describe, expect, it, vi } from 'vitest';
2
- import { chooseOpenPlan } from './adr.js';
3
- describe('chooseOpenPlan', () => {
4
- afterEach(() => {
5
- vi.unstubAllEnvs();
6
- });
7
- it('returns none when open is false', () => {
8
- expect(chooseOpenPlan({ open: false })).toEqual({ type: 'none' });
9
- });
10
- it('treats open-with as enabling open', () => {
11
- expect(chooseOpenPlan({ openWith: 'code --wait' })).toEqual({
12
- type: 'app',
13
- name: 'code',
14
- args: ['--wait']
15
- });
16
- });
17
- it('parses quoted arguments', () => {
18
- expect(chooseOpenPlan({ openWith: 'code "arg with space"' })).toEqual({
19
- type: 'app',
20
- name: 'code',
21
- args: ['arg with space']
22
- });
23
- });
24
- it('unescapes quoted arguments', () => {
25
- expect(chooseOpenPlan({ openWith: 'code "arg \\"quoted\\""' })).toEqual({
26
- type: 'app',
27
- name: 'code',
28
- args: ['arg "quoted"']
29
- });
30
- });
31
- it('parses single-quoted arguments', () => {
32
- expect(chooseOpenPlan({ openWith: "code 'arg with space'" })).toEqual({
33
- type: 'app',
34
- name: 'code',
35
- args: ['arg with space']
36
- });
37
- });
38
- it('returns none when open-with is not parseable', () => {
39
- expect(chooseOpenPlan({ openWith: '"' })).toEqual({ type: 'none' });
40
- });
41
- it('returns none when open-with is whitespace', () => {
42
- expect(chooseOpenPlan({ openWith: ' ' })).toEqual({ type: 'none' });
43
- });
44
- it('returns none when open-with is only quoted whitespace', () => {
45
- expect(chooseOpenPlan({ openWith: '" "' })).toEqual({ type: 'none' });
46
- });
47
- it('handles quoted empty command', () => {
48
- expect(chooseOpenPlan({ openWith: '""', open: true })).toEqual({ type: 'default' });
49
- });
50
- it('ignores boolean-like editor values', () => {
51
- vi.stubEnv('VISUAL', 'true');
52
- vi.stubEnv('EDITOR', 'false');
53
- expect(chooseOpenPlan({ open: true })).toEqual({ type: 'default' });
54
- });
55
- it('prefers VISUAL over EDITOR when both are set', () => {
56
- vi.stubEnv('VISUAL', 'code');
57
- vi.stubEnv('EDITOR', 'vim');
58
- expect(chooseOpenPlan({ open: true })).toEqual({ type: 'app', name: 'code', args: [] });
59
- });
60
- it('uses EDITOR when it is not npm injected', () => {
61
- vi.stubEnv('EDITOR', 'vim');
62
- vi.stubEnv('npm_execpath', '');
63
- vi.stubEnv('npm_config_editor', '');
64
- expect(chooseOpenPlan({ open: true })).toEqual({ type: 'app', name: 'vim', args: [] });
65
- });
66
- it('falls back to default when EDITOR is npm injected', () => {
67
- vi.stubEnv('npm_execpath', '/usr/bin/npm');
68
- vi.stubEnv('npm_config_editor', 'vi');
69
- vi.stubEnv('EDITOR', 'vi');
70
- vi.stubEnv('VISUAL', '');
71
- expect(chooseOpenPlan({ open: true })).toEqual({ type: 'default' });
72
- });
73
- it('uses EDITOR when npm_config_editor is different', () => {
74
- vi.stubEnv('npm_execpath', '/usr/bin/npm');
75
- vi.stubEnv('npm_config_editor', 'code');
76
- vi.stubEnv('EDITOR', 'vim');
77
- vi.stubEnv('VISUAL', '');
78
- expect(chooseOpenPlan({ open: true })).toEqual({ type: 'app', name: 'vim', args: [] });
79
- });
80
- });
81
- //# sourceMappingURL=opening.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"opening.test.js","sourceRoot":"src/","sources":["lib/opening.test.ts"],"names":[],"mappings":"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"}
@@ -1,33 +0,0 @@
1
- import { faker } from '@faker-js/faker';
2
- import inquirer from 'inquirer';
3
- import { describe, expect, it, vi } from 'vitest';
4
- import { askForClarification } from './prompt.js';
5
- vi.mock('inquirer');
6
- vi.mock('chalk', () => ({
7
- default: {
8
- blue: (str) => {
9
- return `BLUE[${str}]`;
10
- }
11
- }
12
- }));
13
- describe('The prompt helper', () => {
14
- it('calls inquirer correctly', async () => {
15
- const prompt = vi.mocked(inquirer.prompt);
16
- prompt.mockResolvedValueOnce({ target: 'does not matter' });
17
- const randomChoices = [faker.system.filePath(), faker.system.filePath(), faker.system.filePath()];
18
- await askForClarification('this is the search string', randomChoices);
19
- expect(prompt).toHaveBeenCalledOnce();
20
- const calledWith = prompt.mock.calls[0][0];
21
- expect(calledWith[0].type).toEqual('select');
22
- expect(calledWith[0].choices).toEqual(randomChoices);
23
- expect(calledWith[0].message).toMatchInlineSnapshot('"Which file do you want to link to for BLUE[this is the search string]?"');
24
- });
25
- it('returns the selected choice', async () => {
26
- const prompt = vi.mocked(inquirer.prompt);
27
- const randomResult = faker.system.filePath();
28
- prompt.mockResolvedValueOnce({ target: randomResult });
29
- const result = await askForClarification('this is the search string', ['does not matter']);
30
- expect(result).toEqual(randomResult);
31
- });
32
- });
33
- //# sourceMappingURL=prompt.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompt.test.js","sourceRoot":"src/","sources":["lib/prompt.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,QAAsB,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACpB,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IACtB,OAAO,EAAE;QACP,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE;YACpB,OAAO,QAAQ,GAAG,GAAG,CAAC;QACxB,CAAC;KACF;CACF,CAAC,CAAC,CAAC;AACJ,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,CAAC,qBAAqB,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAE5D,MAAM,aAAa,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClG,MAAM,mBAAmB,CAAC,2BAA2B,EAAE,aAAa,CAAC,CAAC;QAEtE,MAAM,CAAC,MAAM,CAAC,CAAC,oBAAoB,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAe,CAAC;QACzD,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACrD,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,qBAAqB,CACjD,0EAA0E,CAC3E,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAE1C,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAE7C,MAAM,CAAC,qBAAqB,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;QAEvD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,2BAA2B,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAE3F,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,62 +0,0 @@
1
- import fs from 'fs/promises';
2
- import path from 'path';
3
- import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
4
- vi.mock('fs/promises', () => ({
5
- default: {
6
- readFile: vi.fn()
7
- }
8
- }));
9
- vi.mock('./config.js', () => ({
10
- getDir: vi.fn()
11
- }));
12
- const mockEnv = (key, value) => {
13
- if (value === undefined) {
14
- delete process.env[key];
15
- return;
16
- }
17
- process.env[key] = value;
18
- };
19
- describe('template', () => {
20
- beforeEach(() => {
21
- vi.resetModules();
22
- vi.mocked(fs.readFile).mockReset();
23
- mockEnv('ADR_TEMPLATE', undefined);
24
- });
25
- afterEach(() => {
26
- mockEnv('ADR_TEMPLATE', undefined);
27
- vi.restoreAllMocks();
28
- });
29
- it('uses the explicit template file when provided', async () => {
30
- const { template } = await import('./template.js');
31
- vi.mocked(fs.readFile).mockResolvedValueOnce('custom');
32
- const result = await template('/tmp/custom.md');
33
- expect(result).toEqual('custom');
34
- expect(fs.readFile).toHaveBeenCalledWith(path.resolve('/tmp/custom.md'), 'utf8');
35
- });
36
- it('uses ADR_TEMPLATE when set', async () => {
37
- const { template } = await import('./template.js');
38
- mockEnv('ADR_TEMPLATE', '/tmp/env.md');
39
- vi.mocked(fs.readFile).mockResolvedValueOnce('env');
40
- const result = await template();
41
- expect(result).toEqual('env');
42
- expect(fs.readFile).toHaveBeenCalledWith(path.resolve('/tmp/env.md'), 'utf8');
43
- });
44
- it('uses template from adr directory when available', async () => {
45
- const { template } = await import('./template.js');
46
- const { getDir } = await import('./config.js');
47
- vi.mocked(getDir).mockResolvedValueOnce('/repo/doc/adr');
48
- vi.mocked(fs.readFile).mockResolvedValueOnce('repo-template');
49
- const result = await template();
50
- expect(result).toEqual('repo-template');
51
- expect(fs.readFile).toHaveBeenCalledWith(path.join('/repo/doc/adr', 'templates/template.md'), 'utf8');
52
- });
53
- it('falls back to built-in template when repo template is missing', async () => {
54
- const { template } = await import('./template.js');
55
- const { getDir } = await import('./config.js');
56
- vi.mocked(getDir).mockResolvedValueOnce('/repo/doc/adr');
57
- vi.mocked(fs.readFile).mockRejectedValueOnce(new Error('missing')).mockResolvedValueOnce('built-in');
58
- const result = await template();
59
- expect(result).toEqual('built-in');
60
- });
61
- });
62
- //# sourceMappingURL=template.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"template.test.js","sourceRoot":"src/","sources":["lib/template.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=index.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.d.ts","sourceRoot":"src/","sources":["index.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=inject-version.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inject-version.test.d.ts","sourceRoot":"src/","sources":["inject-version.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=adr.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adr.test.d.ts","sourceRoot":"src/","sources":["lib/adr.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=config.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.test.d.ts","sourceRoot":"src/","sources":["lib/config.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=links.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"links.test.d.ts","sourceRoot":"src/","sources":["lib/links.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=manipulator-errors.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"manipulator-errors.test.d.ts","sourceRoot":"src/","sources":["lib/manipulator-errors.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=manipulator.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"manipulator.test.d.ts","sourceRoot":"src/","sources":["lib/manipulator.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=numbering.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"numbering.test.d.ts","sourceRoot":"src/","sources":["lib/numbering.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=opening.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"opening.test.d.ts","sourceRoot":"src/","sources":["lib/opening.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=prompt.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompt.test.d.ts","sourceRoot":"src/","sources":["lib/prompt.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=template.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"template.test.d.ts","sourceRoot":"src/","sources":["lib/template.test.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- 4