markdown-flavor-detection 0.0.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 (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +7 -0
  3. package/dist/fg-config-resolution.d.ts +39 -0
  4. package/dist/fg-config-resolution.d.ts.map +1 -0
  5. package/dist/fg-config-resolution.js +200 -0
  6. package/dist/fg-config-resolution.js.map +1 -0
  7. package/dist/fgattributes.d.ts +26 -0
  8. package/dist/fgattributes.d.ts.map +1 -0
  9. package/dist/fgattributes.js +126 -0
  10. package/dist/fgattributes.js.map +1 -0
  11. package/dist/fgignore.d.ts +8 -0
  12. package/dist/fgignore.d.ts.map +1 -0
  13. package/dist/fgignore.js +35 -0
  14. package/dist/fgignore.js.map +1 -0
  15. package/dist/flavor-resolution.d.ts +32 -0
  16. package/dist/flavor-resolution.d.ts.map +1 -0
  17. package/dist/flavor-resolution.js +56 -0
  18. package/dist/flavor-resolution.js.map +1 -0
  19. package/dist/flavors.d.ts +15 -0
  20. package/dist/flavors.d.ts.map +1 -0
  21. package/dist/flavors.js +44 -0
  22. package/dist/flavors.js.map +1 -0
  23. package/dist/index.d.ts +8 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +8 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/node.d.ts +13 -0
  28. package/dist/node.d.ts.map +1 -0
  29. package/dist/node.js +65 -0
  30. package/dist/node.js.map +1 -0
  31. package/dist/path-confinement.d.ts +5 -0
  32. package/dist/path-confinement.d.ts.map +1 -0
  33. package/dist/path-confinement.js +112 -0
  34. package/dist/path-confinement.js.map +1 -0
  35. package/dist/patterns.d.ts +7 -0
  36. package/dist/patterns.d.ts.map +1 -0
  37. package/dist/patterns.js +229 -0
  38. package/dist/patterns.js.map +1 -0
  39. package/dist/structured-profiles.d.ts +22 -0
  40. package/dist/structured-profiles.d.ts.map +1 -0
  41. package/dist/structured-profiles.js +150 -0
  42. package/dist/structured-profiles.js.map +1 -0
  43. package/dist/syntax-inference.d.ts +4 -0
  44. package/dist/syntax-inference.d.ts.map +1 -0
  45. package/dist/syntax-inference.js +75 -0
  46. package/dist/syntax-inference.js.map +1 -0
  47. package/package.json +26 -0
@@ -0,0 +1,44 @@
1
+ /** Explicit Markdown flavor ids supported by shared profile data. */
2
+ export const MARKDOWN_FLAVOR_IDS = [
3
+ 'original',
4
+ 'commonmark',
5
+ 'obsidian',
6
+ 'gfm',
7
+ 'glfm',
8
+ 'pandoc',
9
+ 'multimarkdown',
10
+ 'mdx',
11
+ 'kramdown',
12
+ 'markdown-extra',
13
+ 'r-markdown',
14
+ 'reddit',
15
+ 'stack-overflow',
16
+ ];
17
+ /** Markdown flavor selector values, including auto-detection state. */
18
+ export const MARKDOWN_FLAVOR_SELECTIONS = ['auto', ...MARKDOWN_FLAVOR_IDS];
19
+ /** ADR020 labels in selector display order. */
20
+ export const MARKDOWN_FLAVOR_LABELS = {
21
+ auto: 'Auto Detect',
22
+ original: 'Original Markdown',
23
+ commonmark: 'CommonMark',
24
+ obsidian: 'Obsidian',
25
+ gfm: 'GitHub Flavored Markdown',
26
+ glfm: 'GitLab Flavored Markdown',
27
+ pandoc: 'Pandoc Markdown',
28
+ multimarkdown: 'MultiMarkdown',
29
+ mdx: 'MDX',
30
+ kramdown: 'kramdown',
31
+ 'markdown-extra': 'Markdown Extra',
32
+ 'r-markdown': 'R Markdown',
33
+ reddit: 'Reddit Markdown',
34
+ 'stack-overflow': 'Stack Overflow Markdown',
35
+ };
36
+ /** True when a value is a researched explicit flavor id. */
37
+ export function isMarkdownFlavorId(value) {
38
+ return typeof value === 'string' && MARKDOWN_FLAVOR_IDS.includes(value);
39
+ }
40
+ /** True when a value is a supported selector value, including `auto`. */
41
+ export function isMarkdownFlavorSelection(value) {
42
+ return (typeof value === 'string' && MARKDOWN_FLAVOR_SELECTIONS.includes(value));
43
+ }
44
+ //# sourceMappingURL=flavors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flavors.js","sourceRoot":"","sources":["../src/flavors.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,UAAU;IACV,YAAY;IACZ,UAAU;IACV,KAAK;IACL,MAAM;IACN,QAAQ;IACR,eAAe;IACf,KAAK;IACL,UAAU;IACV,gBAAgB;IAChB,YAAY;IACZ,QAAQ;IACR,gBAAgB;CACR,CAAC;AAKX,uEAAuE;AACvE,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,MAAM,EAAE,GAAG,mBAAmB,CAAU,CAAC;AAKpF,+CAA+C;AAC/C,MAAM,CAAC,MAAM,sBAAsB,GAA4C;IAC7E,IAAI,EAAE,aAAa;IACnB,QAAQ,EAAE,mBAAmB;IAC7B,UAAU,EAAE,YAAY;IACxB,QAAQ,EAAE,UAAU;IACpB,GAAG,EAAE,0BAA0B;IAC/B,IAAI,EAAE,0BAA0B;IAChC,MAAM,EAAE,iBAAiB;IACzB,aAAa,EAAE,eAAe;IAC9B,GAAG,EAAE,KAAK;IACV,QAAQ,EAAE,UAAU;IACpB,gBAAgB,EAAE,gBAAgB;IAClC,YAAY,EAAE,YAAY;IAC1B,MAAM,EAAE,iBAAiB;IACzB,gBAAgB,EAAE,yBAAyB;CAC5C,CAAC;AAEF,4DAA4D;AAC5D,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,mBAAmB,CAAC,QAAQ,CAAC,KAAyB,CAAC,CAAC;AAC9F,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,yBAAyB,CAAC,KAAc;IACtD,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ,IAAK,0BAAgD,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC/F,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ export * from './flavors.js';
2
+ export * from './syntax-inference.js';
3
+ export * from './structured-profiles.js';
4
+ export * from './fgignore.js';
5
+ export * from './fgattributes.js';
6
+ export * from './fg-config-resolution.js';
7
+ export * from './flavor-resolution.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export * from './flavors.js';
2
+ export * from './syntax-inference.js';
3
+ export * from './structured-profiles.js';
4
+ export * from './fgignore.js';
5
+ export * from './fgattributes.js';
6
+ export * from './fg-config-resolution.js';
7
+ export * from './flavor-resolution.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC"}
package/dist/node.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ import { type FlavorConfigResolution } from './fg-config-resolution.js';
2
+ export * from './index.js';
3
+ export interface NodeFlavorConfigResolverOptions {
4
+ maxConfigBytes?: number;
5
+ }
6
+ export declare class NodeFlavorConfigResolver {
7
+ private maxConfigBytes;
8
+ constructor(options?: NodeFlavorConfigResolverOptions);
9
+ setMaxConfigBytes(value: unknown): void;
10
+ resolveForFile(root: string, resourcePath: string): FlavorConfigResolution;
11
+ shouldPruneDirectory(root: string, directoryPath: string): boolean;
12
+ }
13
+ //# sourceMappingURL=node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,sBAAsB,EAE5B,MAAM,2BAA2B,CAAC;AAEnC,cAAc,YAAY,CAAC;AAE3B,MAAM,WAAW,+BAA+B;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,wBAAwB;IACnC,OAAO,CAAC,cAAc,CAA+B;gBAEzC,OAAO,GAAE,+BAAoC;IAMzD,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IASvC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,sBAAsB;IAS1E,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO;CAQnE"}
package/dist/node.js ADDED
@@ -0,0 +1,65 @@
1
+ import * as fs from 'node:fs';
2
+ import { DEFAULT_FG_CONFIG_MAX_BYTES, resolveFlavorConfigSync, shouldPruneDirectoryByFlavorConfigSync, } from './fg-config-resolution.js';
3
+ export * from './index.js';
4
+ export class NodeFlavorConfigResolver {
5
+ maxConfigBytes = DEFAULT_FG_CONFIG_MAX_BYTES;
6
+ constructor(options = {}) {
7
+ if (options.maxConfigBytes !== undefined) {
8
+ this.setMaxConfigBytes(options.maxConfigBytes);
9
+ }
10
+ }
11
+ setMaxConfigBytes(value) {
12
+ if (typeof value !== 'number' || !Number.isFinite(value)) {
13
+ this.maxConfigBytes = DEFAULT_FG_CONFIG_MAX_BYTES;
14
+ return;
15
+ }
16
+ const normalized = Math.floor(value);
17
+ this.maxConfigBytes = normalized > 0 ? normalized : DEFAULT_FG_CONFIG_MAX_BYTES;
18
+ }
19
+ resolveForFile(root, resourcePath) {
20
+ return resolveFlavorConfigSync({
21
+ root,
22
+ path: resourcePath,
23
+ ...nodeFlavorConfigFileReader,
24
+ maxConfigBytes: this.maxConfigBytes,
25
+ });
26
+ }
27
+ shouldPruneDirectory(root, directoryPath) {
28
+ return shouldPruneDirectoryByFlavorConfigSync({
29
+ root,
30
+ path: directoryPath,
31
+ ...nodeFlavorConfigFileReader,
32
+ maxConfigBytes: this.maxConfigBytes,
33
+ });
34
+ }
35
+ }
36
+ const nodeFlavorConfigFileReader = {
37
+ stat(filePath) {
38
+ let fd;
39
+ try {
40
+ fd = fs.openSync(filePath, 'r');
41
+ const stat = fs.fstatSync(fd);
42
+ return {
43
+ isFile: () => stat.isFile(),
44
+ size: stat.size,
45
+ };
46
+ }
47
+ catch {
48
+ return undefined;
49
+ }
50
+ finally {
51
+ if (fd !== undefined) {
52
+ fs.closeSync(fd);
53
+ }
54
+ }
55
+ },
56
+ readFile(filePath) {
57
+ try {
58
+ return fs.readFileSync(filePath, 'utf8');
59
+ }
60
+ catch {
61
+ return undefined;
62
+ }
63
+ },
64
+ };
65
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,EACvB,sCAAsC,GAGvC,MAAM,2BAA2B,CAAC;AAEnC,cAAc,YAAY,CAAC;AAM3B,MAAM,OAAO,wBAAwB;IAC3B,cAAc,GAAG,2BAA2B,CAAC;IAErD,YAAY,UAA2C,EAAE;QACvD,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACzC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,iBAAiB,CAAC,KAAc;QAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACzD,IAAI,CAAC,cAAc,GAAG,2BAA2B,CAAC;YAClD,OAAO;QACT,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,cAAc,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,2BAA2B,CAAC;IAClF,CAAC;IAED,cAAc,CAAC,IAAY,EAAE,YAAoB;QAC/C,OAAO,uBAAuB,CAAC;YAC7B,IAAI;YACJ,IAAI,EAAE,YAAY;YAClB,GAAG,0BAA0B;YAC7B,cAAc,EAAE,IAAI,CAAC,cAAc;SACpC,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB,CAAC,IAAY,EAAE,aAAqB;QACtD,OAAO,sCAAsC,CAAC;YAC5C,IAAI;YACJ,IAAI,EAAE,aAAa;YACnB,GAAG,0BAA0B;YAC7B,cAAc,EAAE,IAAI,CAAC,cAAc;SACpC,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,0BAA0B,GAA+B;IAC7D,IAAI,CAAC,QAAQ;QACX,IAAI,EAAsB,CAAC;QAC3B,IAAI,CAAC;YACH,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAChC,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAC9B,OAAO;gBACL,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE;gBAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;gBAAS,CAAC;YACT,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;gBACrB,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IACD,QAAQ,CAAC,QAAQ;QACf,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function confinePathToRoot(root: string, candidate: string): string | null;
2
+ export declare function resolveRootRelativePath(root: string, relativePath: string): string | null;
3
+ export declare function rootRelativePath(root: string, candidate: string): string | null;
4
+ export declare function normalizeRootPath(value: string): string | null;
5
+ //# sourceMappingURL=path-confinement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-confinement.d.ts","sourceRoot":"","sources":["../src/path-confinement.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQhF;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAezF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAU/E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE9D"}
@@ -0,0 +1,112 @@
1
+ export function confinePathToRoot(root, candidate) {
2
+ const resolvedRoot = normalizeAbsolutePath(root);
3
+ const resolvedCandidate = normalizeAbsolutePath(candidate);
4
+ if (resolvedRoot === null || resolvedCandidate === null) {
5
+ return null;
6
+ }
7
+ return isInsideOrEqualPath(resolvedRoot, resolvedCandidate) ? resolvedCandidate : null;
8
+ }
9
+ export function resolveRootRelativePath(root, relativePath) {
10
+ if (!isSafeRelativePath(relativePath)) {
11
+ return null;
12
+ }
13
+ const resolvedRoot = normalizeAbsolutePath(root);
14
+ if (resolvedRoot === null) {
15
+ return null;
16
+ }
17
+ const normalizedRelative = normalizeRelativePath(relativePath);
18
+ if (normalizedRelative === null) {
19
+ return null;
20
+ }
21
+ return confinePathToRoot(resolvedRoot, joinPath(resolvedRoot, normalizedRelative));
22
+ }
23
+ export function rootRelativePath(root, candidate) {
24
+ const resolvedRoot = normalizeAbsolutePath(root);
25
+ const confined = confinePathToRoot(root, candidate);
26
+ if (resolvedRoot === null || confined === null) {
27
+ return null;
28
+ }
29
+ if (normalizeForCompare(resolvedRoot) === normalizeForCompare(confined)) {
30
+ return '';
31
+ }
32
+ return confined.slice(resolvedRoot.endsWith('/') ? resolvedRoot.length : resolvedRoot.length + 1);
33
+ }
34
+ export function normalizeRootPath(value) {
35
+ return normalizeAbsolutePath(value);
36
+ }
37
+ function isInsideOrEqualPath(root, candidate) {
38
+ const normalizedRoot = normalizeForCompare(root);
39
+ const normalizedCandidate = normalizeForCompare(candidate);
40
+ if (normalizedCandidate === normalizedRoot) {
41
+ return true;
42
+ }
43
+ const rootWithSep = normalizedRoot.endsWith('/') ? normalizedRoot : `${normalizedRoot}/`;
44
+ return normalizedCandidate.startsWith(rootWithSep);
45
+ }
46
+ function normalizeAbsolutePath(value) {
47
+ if (value.length === 0 || value.includes('\0')) {
48
+ return null;
49
+ }
50
+ const normalized = normalizeSeparators(value);
51
+ const prefix = absolutePrefix(normalized);
52
+ if (prefix === null) {
53
+ return null;
54
+ }
55
+ const body = normalized.slice(prefix.length);
56
+ const segments = normalizeSegments(body.split('/'));
57
+ return segments.length === 0
58
+ ? trimRootPrefix(prefix)
59
+ : `${trimRootPrefix(prefix)}/${segments.join('/')}`;
60
+ }
61
+ function normalizeRelativePath(value) {
62
+ const segments = normalizeSegments(normalizeSeparators(value).split('/'));
63
+ return segments.join('/');
64
+ }
65
+ function normalizeSegments(parts) {
66
+ const segments = [];
67
+ for (const part of parts) {
68
+ if (part.length === 0 || part === '.') {
69
+ continue;
70
+ }
71
+ if (part === '..') {
72
+ if (segments.length === 0) {
73
+ return ['..'];
74
+ }
75
+ segments.pop();
76
+ continue;
77
+ }
78
+ segments.push(part);
79
+ }
80
+ return segments;
81
+ }
82
+ function isSafeRelativePath(value) {
83
+ return (value.length > 0 && !value.includes('\0') && absolutePrefix(normalizeSeparators(value)) === null);
84
+ }
85
+ function joinPath(root, relativePath) {
86
+ return relativePath.length === 0 ? root : `${root.replace(/\/+$/u, '')}/${relativePath}`;
87
+ }
88
+ function normalizeSeparators(value) {
89
+ return value.replace(/\\/g, '/');
90
+ }
91
+ function absolutePrefix(value) {
92
+ if (/^[A-Za-z]:\//.test(value)) {
93
+ return value.slice(0, 3);
94
+ }
95
+ if (value.startsWith('//')) {
96
+ const parts = value.split('/');
97
+ return parts.length >= 4 && parts[2].length > 0 && parts[3].length > 0
98
+ ? `//${parts[2]}/${parts[3]}/`
99
+ : null;
100
+ }
101
+ return value.startsWith('/') ? '/' : null;
102
+ }
103
+ function trimRootPrefix(prefix) {
104
+ if (prefix === '/') {
105
+ return '/';
106
+ }
107
+ return prefix.replace(/\/+$/u, '');
108
+ }
109
+ function normalizeForCompare(value) {
110
+ return /^[A-Za-z]:\//.test(value) || value.startsWith('//') ? value.toLowerCase() : value;
111
+ }
112
+ //# sourceMappingURL=path-confinement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-confinement.js","sourceRoot":"","sources":["../src/path-confinement.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare function patternMatches(rawPattern: string, rawRelativePath: string): boolean;
2
+ export declare function patternMatchesDirectory(rawPattern: string, rawRelativePath: string): boolean;
3
+ export declare function normalizeConfigLine(rawLine: string): string;
4
+ export declare function splitConfigTokens(line: string): string[];
5
+ export declare function unescapePattern(value: string): string;
6
+ export declare function toPosix(value: string): string;
7
+ //# sourceMappingURL=patterns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../src/patterns.ts"],"names":[],"mappings":"AAgBA,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAmBnF;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAwB5F;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAM3D;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CA8BxD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7C"}
@@ -0,0 +1,229 @@
1
+ export function patternMatches(rawPattern, rawRelativePath) {
2
+ const pattern = normalizePattern(rawPattern);
3
+ const relativePath = trimSlashes(toPosix(rawRelativePath));
4
+ if (pattern.length === 0 || relativePath.length === 0) {
5
+ return false;
6
+ }
7
+ const anchored = pattern.startsWith('/');
8
+ const directoryOnly = pattern.endsWith('/');
9
+ const normalizedPattern = trimSlashes(pattern);
10
+ const candidatePattern = directoryOnly ? `${normalizedPattern}/**` : normalizedPattern;
11
+ if (anchored || candidatePattern.includes('/')) {
12
+ return globPatternMatches(candidatePattern, relativePath);
13
+ }
14
+ return relativePath
15
+ .split('/')
16
+ .some((segment) => wildcardSegmentMatches(candidatePattern, segment));
17
+ }
18
+ export function patternMatchesDirectory(rawPattern, rawRelativePath) {
19
+ const pattern = normalizePattern(rawPattern);
20
+ const relativePath = trimSlashes(toPosix(rawRelativePath));
21
+ if (pattern.length === 0 || relativePath.length === 0) {
22
+ return false;
23
+ }
24
+ const anchored = pattern.startsWith('/');
25
+ const directoryOnly = pattern.endsWith('/');
26
+ const normalizedPattern = trimSlashes(pattern);
27
+ if (!directoryOnly && normalizedPattern.endsWith('/**')) {
28
+ return false;
29
+ }
30
+ if (!directoryOnly && normalizedPattern.endsWith('/*')) {
31
+ return false;
32
+ }
33
+ if (anchored || normalizedPattern.includes('/')) {
34
+ return globPatternMatches(normalizedPattern, relativePath);
35
+ }
36
+ return relativePath
37
+ .split('/')
38
+ .some((segment) => wildcardSegmentMatches(normalizedPattern, segment));
39
+ }
40
+ export function normalizeConfigLine(rawLine) {
41
+ const trimmedRight = rawLine.replace(/\s+$/u, '');
42
+ if (/^\s*(#|$)/.test(trimmedRight)) {
43
+ return '';
44
+ }
45
+ return trimmedRight.trimStart();
46
+ }
47
+ export function splitConfigTokens(line) {
48
+ const tokens = [];
49
+ let current = '';
50
+ let escaped = false;
51
+ for (const char of line) {
52
+ if (escaped) {
53
+ current += /[\s#!]/u.test(char) ? char : `\\${char}`;
54
+ escaped = false;
55
+ continue;
56
+ }
57
+ if (char === '\\') {
58
+ escaped = true;
59
+ continue;
60
+ }
61
+ if (/\s/u.test(char)) {
62
+ if (current.length > 0) {
63
+ tokens.push(current);
64
+ current = '';
65
+ }
66
+ continue;
67
+ }
68
+ current += char;
69
+ }
70
+ if (escaped) {
71
+ current += '\\';
72
+ }
73
+ if (current.length > 0) {
74
+ tokens.push(current);
75
+ }
76
+ return tokens;
77
+ }
78
+ export function unescapePattern(value) {
79
+ return value.replace(/\\([#! ])/g, '$1');
80
+ }
81
+ export function toPosix(value) {
82
+ return value.replace(/\\/g, '/');
83
+ }
84
+ function globPatternMatches(pattern, relativePath) {
85
+ const patternParts = trimSlashes(pattern).split('/');
86
+ const pathParts = trimSlashes(relativePath).split('/');
87
+ return globSegmentsMatch(patternParts, pathParts, 0, 0);
88
+ }
89
+ function globSegmentsMatch(patternParts, pathParts, patternIndex, pathIndex) {
90
+ if (patternIndex === patternParts.length) {
91
+ return pathIndex === pathParts.length;
92
+ }
93
+ const patternPart = patternParts[patternIndex];
94
+ if (patternPart === '**') {
95
+ for (let nextPathIndex = pathIndex; nextPathIndex <= pathParts.length; nextPathIndex += 1) {
96
+ if (globSegmentsMatch(patternParts, pathParts, patternIndex + 1, nextPathIndex)) {
97
+ return true;
98
+ }
99
+ }
100
+ return false;
101
+ }
102
+ return (pathIndex < pathParts.length &&
103
+ wildcardSegmentMatches(patternPart, pathParts[pathIndex]) &&
104
+ globSegmentsMatch(patternParts, pathParts, patternIndex + 1, pathIndex + 1));
105
+ }
106
+ function wildcardSegmentMatches(pattern, value) {
107
+ return segmentTokensMatch(parseSegmentTokens(pattern), [...value], 0, 0, new Set());
108
+ }
109
+ function parseSegmentTokens(pattern) {
110
+ const tokens = [];
111
+ for (let index = 0; index < pattern.length; index += 1) {
112
+ const char = pattern[index];
113
+ if (char === '\\') {
114
+ index += 1;
115
+ tokens.push({ kind: 'literal', value: pattern[index] ?? '\\' });
116
+ continue;
117
+ }
118
+ if (char === '*') {
119
+ tokens.push({ kind: 'star' });
120
+ continue;
121
+ }
122
+ if (char === '?') {
123
+ tokens.push({ kind: 'any' });
124
+ continue;
125
+ }
126
+ if (char === '[') {
127
+ const characterClass = parseCharacterClass(pattern, index);
128
+ if (characterClass !== null) {
129
+ tokens.push(characterClass.token);
130
+ index = characterClass.end;
131
+ continue;
132
+ }
133
+ }
134
+ tokens.push({ kind: 'literal', value: char });
135
+ }
136
+ return tokens;
137
+ }
138
+ function parseCharacterClass(pattern, start) {
139
+ let end = start + 1;
140
+ if (pattern[end] === '!' || pattern[end] === '^') {
141
+ end += 1;
142
+ }
143
+ if (pattern[end] === ']') {
144
+ end += 1;
145
+ }
146
+ while (end < pattern.length && pattern[end] !== ']') {
147
+ end += pattern[end] === '\\' ? 2 : 1;
148
+ }
149
+ if (end >= pattern.length) {
150
+ return null;
151
+ }
152
+ const raw = pattern.slice(start + 1, end);
153
+ if (raw.length === 0 || raw === '!' || raw === '^') {
154
+ return null;
155
+ }
156
+ const negated = raw.startsWith('!') || raw.startsWith('^');
157
+ const body = negated ? raw.slice(1) : raw;
158
+ const parsed = parseCharacterClassBody(body);
159
+ return {
160
+ token: { kind: 'class', negated, characters: parsed.characters, ranges: parsed.ranges },
161
+ end,
162
+ };
163
+ }
164
+ function parseCharacterClassBody(body) {
165
+ const characters = [];
166
+ const ranges = [];
167
+ const parts = [];
168
+ for (let index = 0; index < body.length; index += 1) {
169
+ if (body[index] === '\\' && index + 1 < body.length) {
170
+ index += 1;
171
+ }
172
+ parts.push(body[index]);
173
+ }
174
+ for (let index = 0; index < parts.length; index += 1) {
175
+ if (index + 2 < parts.length && parts[index + 1] === '-') {
176
+ ranges.push({ start: parts[index], end: parts[index + 2] });
177
+ index += 2;
178
+ }
179
+ else {
180
+ characters.push(parts[index]);
181
+ }
182
+ }
183
+ return { characters, ranges };
184
+ }
185
+ function segmentTokensMatch(tokens, value, tokenIndex, valueIndex, seen) {
186
+ const key = `${tokenIndex}:${valueIndex}`;
187
+ if (seen.has(key)) {
188
+ return false;
189
+ }
190
+ seen.add(key);
191
+ if (tokenIndex === tokens.length) {
192
+ return valueIndex === value.length;
193
+ }
194
+ const token = tokens[tokenIndex];
195
+ if (token.kind === 'star') {
196
+ for (let nextValueIndex = valueIndex; nextValueIndex <= value.length; nextValueIndex += 1) {
197
+ if (segmentTokensMatch(tokens, value, tokenIndex + 1, nextValueIndex, seen)) {
198
+ return true;
199
+ }
200
+ }
201
+ return false;
202
+ }
203
+ return (valueIndex < value.length &&
204
+ segmentTokenMatches(token, value[valueIndex]) &&
205
+ segmentTokensMatch(tokens, value, tokenIndex + 1, valueIndex + 1, seen));
206
+ }
207
+ function segmentTokenMatches(token, value) {
208
+ if (token.kind === 'literal') {
209
+ return token.value === value;
210
+ }
211
+ if (token.kind === 'any') {
212
+ return true;
213
+ }
214
+ if (token.kind === 'class') {
215
+ const codePoint = value.codePointAt(0) ?? 0;
216
+ const matched = token.characters.includes(value) ||
217
+ token.ranges.some((range) => codePoint >= (range.start.codePointAt(0) ?? 0) &&
218
+ codePoint <= (range.end.codePointAt(0) ?? 0));
219
+ return token.negated ? !matched : matched;
220
+ }
221
+ return false;
222
+ }
223
+ function normalizePattern(value) {
224
+ return unescapePattern(value.trim());
225
+ }
226
+ function trimSlashes(value) {
227
+ return value.replace(/^\/+|\/+$/g, '');
228
+ }
229
+ //# sourceMappingURL=patterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../src/patterns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export declare const STRUCTURED_MARKDOWN_PROFILE_IDS: readonly ["keep-a-changelog", "common-changelog", "madr"];
2
+ export type StructuredMarkdownProfileId = (typeof STRUCTURED_MARKDOWN_PROFILE_IDS)[number];
3
+ export type StructuredProfileSelection = 'auto' | 'none' | readonly StructuredMarkdownProfileId[];
4
+ export type StructuredProfileResolutionSource = 'explicit-selection' | 'fgattributes' | 'structured-profile-inference' | 'none';
5
+ export interface StructuredProfileInferenceInput {
6
+ path: string;
7
+ syntaxText?: string;
8
+ }
9
+ export declare function isStructuredMarkdownProfileId(value: unknown): value is StructuredMarkdownProfileId;
10
+ export declare function isStructuredProfileSelection(value: unknown): value is StructuredProfileSelection;
11
+ export declare function isValidStructuredProfileList(value: readonly unknown[]): value is readonly StructuredMarkdownProfileId[];
12
+ export declare function resolveStructuredProfiles(input: {
13
+ selection?: StructuredProfileSelection;
14
+ fgAttributesSelection?: StructuredProfileSelection;
15
+ path: string;
16
+ syntaxText?: string;
17
+ }): {
18
+ structuredProfiles: readonly StructuredMarkdownProfileId[];
19
+ structuredProfileSource: StructuredProfileResolutionSource;
20
+ };
21
+ export declare function inferStructuredProfiles(input: StructuredProfileInferenceInput): readonly StructuredMarkdownProfileId[];
22
+ //# sourceMappingURL=structured-profiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-profiles.d.ts","sourceRoot":"","sources":["../src/structured-profiles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,+BAA+B,2DAIlC,CAAC;AAEX,MAAM,MAAM,2BAA2B,GAAG,CAAC,OAAO,+BAA+B,CAAC,CAAC,MAAM,CAAC,CAAC;AAC3F,MAAM,MAAM,0BAA0B,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,2BAA2B,EAAE,CAAC;AAElG,MAAM,MAAM,iCAAiC,GACzC,oBAAoB,GACpB,cAAc,GACd,8BAA8B,GAC9B,MAAM,CAAC;AAEX,MAAM,WAAW,+BAA+B;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,2BAA2B,CAKtC;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,0BAA0B,CAMhG;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,SAAS,OAAO,EAAE,GACxB,KAAK,IAAI,SAAS,2BAA2B,EAAE,CASjD;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,SAAS,CAAC,EAAE,0BAA0B,CAAC;IACvC,qBAAqB,CAAC,EAAE,0BAA0B,CAAC;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG;IACF,kBAAkB,EAAE,SAAS,2BAA2B,EAAE,CAAC;IAC3D,uBAAuB,EAAE,iCAAiC,CAAC;CAC5D,CAyBA;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,+BAA+B,GACrC,SAAS,2BAA2B,EAAE,CAWxC"}