@mui/internal-docs-infra 0.1.1-alpha.13 → 0.1.1-alpha.14
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/CodeHighlighter/CodeHighlighterClient.d.ts.map +1 -1
- package/CodeHighlighter/CodeHighlighterClient.js +45 -16
- package/CodeHighlighter/addPathsToVariant.d.ts +18 -0
- package/CodeHighlighter/addPathsToVariant.d.ts.map +1 -0
- package/CodeHighlighter/addPathsToVariant.js +352 -0
- package/{useDemo → CodeHighlighter}/examineVariant.d.ts +1 -1
- package/CodeHighlighter/examineVariant.d.ts.map +1 -0
- package/CodeHighlighter/examineVariant.js +103 -0
- package/CodeHighlighter/mergeMetadata.d.ts +40 -0
- package/CodeHighlighter/mergeMetadata.d.ts.map +1 -0
- package/CodeHighlighter/mergeMetadata.js +189 -0
- package/CodeHighlighter/types.d.ts +3 -0
- package/CodeHighlighter/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/useDemo/exportVariant.d.ts +49 -11
- package/useDemo/exportVariant.d.ts.map +1 -1
- package/useDemo/exportVariant.js +170 -94
- package/useDemo/flattenVariant.d.ts +2 -0
- package/useDemo/flattenVariant.d.ts.map +1 -1
- package/useDemo/flattenVariant.js +19 -178
- package/useDemo/useDemo.d.ts +7 -0
- package/useDemo/useDemo.d.ts.map +1 -1
- package/useDemo/useDemo.js +37 -18
- package/useDemo/examineVariant.d.ts.map +0 -1
- package/useDemo/examineVariant.js +0 -134
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeHighlighterClient.d.ts","sourceRoot":"","sources":["../../src/CodeHighlighter/CodeHighlighterClient.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAQ,0BAA0B,EAA+B,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"CodeHighlighterClient.d.ts","sourceRoot":"","sources":["../../src/CodeHighlighter/CodeHighlighterClient.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAQ,0BAA0B,EAA+B,MAAM,SAAS,CAAC;AA8nBxF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,0BAA0B,2CA0MtE"}
|
|
@@ -21,6 +21,7 @@ import { applyTransforms, getAvailableTransforms } from "./transformCode.js";
|
|
|
21
21
|
import { parseControlledCode } from "./parseControlledCode.js";
|
|
22
22
|
import { useOnHydrate } from "../useOnHydrate/index.js";
|
|
23
23
|
import { useOnIdle } from "../useOnIdle/index.js";
|
|
24
|
+
import { mergeMetadata } from "./mergeMetadata.js";
|
|
24
25
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
25
26
|
var DEBUG = false; // Set to true for debugging purposes
|
|
26
27
|
|
|
@@ -589,19 +590,33 @@ function useGlobalsCodeMerging(_ref0) {
|
|
|
589
590
|
return Boolean(item) && _typeof(item) === 'object';
|
|
590
591
|
});
|
|
591
592
|
if (globalsForVariant.length > 0) {
|
|
592
|
-
//
|
|
593
|
-
var
|
|
593
|
+
// Use mergeMetadata for sophisticated globals merging with proper positioning
|
|
594
|
+
var currentVariant = variantData;
|
|
594
595
|
globalsForVariant.forEach(function (globalVariant) {
|
|
595
596
|
if (globalVariant.extraFiles) {
|
|
596
|
-
|
|
597
|
+
// Convert globals extraFiles to metadata format for mergeMetadata
|
|
598
|
+
var globalsMetadata = {};
|
|
599
|
+
for (var _i = 0, _Object$entries = Object.entries(globalVariant.extraFiles); _i < _Object$entries.length; _i++) {
|
|
600
|
+
var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
|
|
601
|
+
key = _Object$entries$_i[0],
|
|
602
|
+
value = _Object$entries$_i[1];
|
|
603
|
+
if (typeof value === 'string') {
|
|
604
|
+
globalsMetadata[key] = {
|
|
605
|
+
source: value
|
|
606
|
+
};
|
|
607
|
+
} else {
|
|
608
|
+
globalsMetadata[key] = _objectSpread({}, value);
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
// Use mergeMetadata to properly position and merge the globals
|
|
613
|
+
currentVariant = mergeMetadata(currentVariant, globalsMetadata);
|
|
597
614
|
}
|
|
598
615
|
});
|
|
599
616
|
|
|
600
|
-
// Only update if
|
|
601
|
-
if (
|
|
602
|
-
mergedCode[variant] =
|
|
603
|
-
extraFiles: mergedExtraFiles
|
|
604
|
-
});
|
|
617
|
+
// Only update if the variant actually changed
|
|
618
|
+
if (currentVariant !== variantData) {
|
|
619
|
+
mergedCode[variant] = currentVariant;
|
|
605
620
|
hasChanges = true;
|
|
606
621
|
}
|
|
607
622
|
}
|
|
@@ -642,19 +657,33 @@ function usePropsCodeGlobalsMerging(_ref14) {
|
|
|
642
657
|
return Boolean(item) && _typeof(item) === 'object';
|
|
643
658
|
});
|
|
644
659
|
if (globalsForVariant.length > 0) {
|
|
645
|
-
//
|
|
646
|
-
var
|
|
660
|
+
// Use mergeMetadata for sophisticated globals merging with proper positioning
|
|
661
|
+
var currentVariant = variantData;
|
|
647
662
|
globalsForVariant.forEach(function (globalVariant) {
|
|
648
663
|
if (globalVariant.extraFiles) {
|
|
649
|
-
|
|
664
|
+
// Convert globals extraFiles to metadata format for mergeMetadata
|
|
665
|
+
var globalsMetadata = {};
|
|
666
|
+
for (var _i2 = 0, _Object$entries2 = Object.entries(globalVariant.extraFiles); _i2 < _Object$entries2.length; _i2++) {
|
|
667
|
+
var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i2], 2),
|
|
668
|
+
key = _Object$entries2$_i[0],
|
|
669
|
+
value = _Object$entries2$_i[1];
|
|
670
|
+
if (typeof value === 'string') {
|
|
671
|
+
globalsMetadata[key] = {
|
|
672
|
+
source: value
|
|
673
|
+
};
|
|
674
|
+
} else {
|
|
675
|
+
globalsMetadata[key] = _objectSpread({}, value);
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
// Use mergeMetadata to properly position and merge the globals
|
|
680
|
+
currentVariant = mergeMetadata(currentVariant, globalsMetadata);
|
|
650
681
|
}
|
|
651
682
|
});
|
|
652
683
|
|
|
653
|
-
// Only update if
|
|
654
|
-
if (
|
|
655
|
-
mergedCode[variant] =
|
|
656
|
-
extraFiles: mergedExtraFiles
|
|
657
|
-
});
|
|
684
|
+
// Only update if the variant actually changed
|
|
685
|
+
if (currentVariant !== variantData) {
|
|
686
|
+
mergedCode[variant] = currentVariant;
|
|
658
687
|
hasChanges = true;
|
|
659
688
|
}
|
|
660
689
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Add path utility to add path property to each file in a variant
|
|
3
|
+
* Handles metadata prefix replacement and URL-based back navigation resolution
|
|
4
|
+
*/
|
|
5
|
+
import type { VariantCode, VariantSource } from "./types.js";
|
|
6
|
+
export interface FileWithPath {
|
|
7
|
+
source?: VariantSource;
|
|
8
|
+
metadata?: boolean;
|
|
9
|
+
path: string;
|
|
10
|
+
}
|
|
11
|
+
export interface VariantWithPaths extends Omit<VariantCode, 'extraFiles'> {
|
|
12
|
+
extraFiles?: Record<string, FileWithPath>;
|
|
13
|
+
path?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Add flat paths to all files in a variant
|
|
17
|
+
*/
|
|
18
|
+
export declare function addPathsToVariant(variant: VariantCode): VariantWithPaths;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addPathsToVariant.d.ts","sourceRoot":"","sources":["../../src/CodeHighlighter/addPathsToVariant.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAI1D,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,gBAAgB,CA0CxE"}
|
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
import _createForOfIteratorHelper from "@babel/runtime/helpers/esm/createForOfIteratorHelper";
|
|
2
|
+
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
3
|
+
import _typeof from "@babel/runtime/helpers/esm/typeof";
|
|
4
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
5
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
6
|
+
/**
|
|
7
|
+
* Add path utility to add path property to each file in a variant
|
|
8
|
+
* Handles metadata prefix replacement and URL-based back navigation resolution
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { getFileNameFromUrl } from "../pipeline/loaderUtils/getFileNameFromUrl.js";
|
|
12
|
+
import { createPathContext } from "./examineVariant.js";
|
|
13
|
+
/**
|
|
14
|
+
* Add flat paths to all files in a variant
|
|
15
|
+
*/
|
|
16
|
+
export function addPathsToVariant(variant) {
|
|
17
|
+
var context = createPathContext(variant);
|
|
18
|
+
|
|
19
|
+
// Get effective fileName
|
|
20
|
+
var effectiveFileName = variant.fileName;
|
|
21
|
+
if (!effectiveFileName && context.hasUrl) {
|
|
22
|
+
var _getFileNameFromUrl = getFileNameFromUrl(context.actualUrl),
|
|
23
|
+
fileName = _getFileNameFromUrl.fileName;
|
|
24
|
+
effectiveFileName = fileName;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Calculate main file flat path
|
|
28
|
+
var path;
|
|
29
|
+
if (effectiveFileName) {
|
|
30
|
+
path = calculateMainFilePath(variant, context, effectiveFileName);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Handle extraFiles: return undefined if no extraFiles exist, {} if extraFiles exists
|
|
34
|
+
var extraFiles;
|
|
35
|
+
if (variant.extraFiles) {
|
|
36
|
+
extraFiles = {};
|
|
37
|
+
for (var _i = 0, _Object$entries = Object.entries(variant.extraFiles); _i < _Object$entries.length; _i++) {
|
|
38
|
+
var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
|
|
39
|
+
relativePath = _Object$entries$_i[0],
|
|
40
|
+
fileContent = _Object$entries$_i[1];
|
|
41
|
+
var file = typeof fileContent === 'string' ? {
|
|
42
|
+
source: fileContent
|
|
43
|
+
} : fileContent;
|
|
44
|
+
var absolutePath = calculateExtraFilePath(relativePath, file, variant, context, path);
|
|
45
|
+
extraFiles[relativePath] = _objectSpread(_objectSpread({}, file), {}, {
|
|
46
|
+
path: absolutePath
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
} else {
|
|
50
|
+
// Special case: return {} instead of undefined for most cases, except when no fileName
|
|
51
|
+
extraFiles = effectiveFileName ? {} : undefined;
|
|
52
|
+
}
|
|
53
|
+
return _objectSpread(_objectSpread({}, variant), {}, {
|
|
54
|
+
extraFiles: extraFiles,
|
|
55
|
+
path: path
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
function calculateMainFilePath(variant, context, fileName) {
|
|
59
|
+
// Special case: no extraFiles - just return fileName
|
|
60
|
+
if (!variant.extraFiles || Object.keys(variant.extraFiles).length === 0) {
|
|
61
|
+
return fileName;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Check if we have non-metadata files (for determining if we need URL directories)
|
|
65
|
+
var hasNonMetadataFiles = Object.values(variant.extraFiles).some(function (file) {
|
|
66
|
+
return _typeof(file) === 'object' ? !file.metadata : true;
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
// Case 1: Has metadataPrefix
|
|
70
|
+
if (variant.metadataPrefix) {
|
|
71
|
+
if (context.hasUrl) {
|
|
72
|
+
var urlPath = new URL(context.actualUrl).pathname;
|
|
73
|
+
var urlParts = urlPath.split('/').filter(Boolean);
|
|
74
|
+
|
|
75
|
+
// Check for metadata files that need special handling
|
|
76
|
+
var metadataEntries = Object.entries(variant.extraFiles).filter(function (_ref) {
|
|
77
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
78
|
+
file = _ref2[1];
|
|
79
|
+
return _typeof(file) === 'object' && file.metadata;
|
|
80
|
+
});
|
|
81
|
+
if (metadataEntries.length > 0) {
|
|
82
|
+
var metadataBackNavs = metadataEntries.map(function (_ref3) {
|
|
83
|
+
var _ref4 = _slicedToArray(_ref3, 1),
|
|
84
|
+
filePath = _ref4[0];
|
|
85
|
+
return (filePath.match(/\.\.\//g) || []).length;
|
|
86
|
+
});
|
|
87
|
+
var maxMetadataBackNav = Math.max.apply(Math, _toConsumableArray(metadataBackNavs));
|
|
88
|
+
var minMetadataBackNav = Math.min.apply(Math, _toConsumableArray(metadataBackNavs));
|
|
89
|
+
var metadataPrefixLevels = variant.metadataPrefix.split('/').filter(Boolean).length;
|
|
90
|
+
var expectedBackNav = context.maxBackNavigation + metadataPrefixLevels;
|
|
91
|
+
|
|
92
|
+
// Unbalanced metadata navigation
|
|
93
|
+
if (minMetadataBackNav !== maxMetadataBackNav) {
|
|
94
|
+
// Normalize metadata files by trimming expected back navigation
|
|
95
|
+
// This allows examineVariant to calculate the synthetic structure naturally
|
|
96
|
+
var expectedMetadataBackNav = context.maxBackNavigation + metadataPrefixLevels;
|
|
97
|
+
|
|
98
|
+
// Create normalized extraFiles with trimmed metadata paths
|
|
99
|
+
var normalizedExtraFiles = {};
|
|
100
|
+
for (var _i2 = 0, _Object$entries2 = Object.entries(variant.extraFiles); _i2 < _Object$entries2.length; _i2++) {
|
|
101
|
+
var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i2], 2),
|
|
102
|
+
filePath = _Object$entries2$_i[0],
|
|
103
|
+
file = _Object$entries2$_i[1];
|
|
104
|
+
var fileObj = typeof file === 'string' ? {
|
|
105
|
+
source: file
|
|
106
|
+
} : file;
|
|
107
|
+
if (fileObj.metadata) {
|
|
108
|
+
// Calculate how much to trim from metadata file paths
|
|
109
|
+
var backNavCount = (filePath.match(/\.\.\//g) || []).length;
|
|
110
|
+
var trimCount = Math.min(backNavCount, expectedMetadataBackNav);
|
|
111
|
+
|
|
112
|
+
// Trim the expected back navigation
|
|
113
|
+
var trimmedPath = filePath.replace(new RegExp("^(\\.\\./){".concat(trimCount, "}")), '');
|
|
114
|
+
normalizedExtraFiles[trimmedPath] = _objectSpread(_objectSpread({}, fileObj), {}, {
|
|
115
|
+
metadata: false
|
|
116
|
+
}); // Treat as non-metadata for calculation
|
|
117
|
+
} else {
|
|
118
|
+
// Keep non-metadata files as-is
|
|
119
|
+
normalizedExtraFiles[filePath] = fileObj;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// Calculate structure using normalized files
|
|
124
|
+
var normalizedVariant = _objectSpread(_objectSpread({}, variant), {}, {
|
|
125
|
+
extraFiles: normalizedExtraFiles
|
|
126
|
+
});
|
|
127
|
+
var normalizedContext = createPathContext(normalizedVariant);
|
|
128
|
+
|
|
129
|
+
// Build the synthetic URL structure
|
|
130
|
+
var urlLevels = urlParts.length - 1; // Exclude filename
|
|
131
|
+
var syntheticDirsNeeded = Math.max(0, normalizedContext.maxBackNavigation - urlLevels);
|
|
132
|
+
var syntheticDirs = Array.from({
|
|
133
|
+
length: syntheticDirsNeeded
|
|
134
|
+
}, function (_, i) {
|
|
135
|
+
return String.fromCharCode(97 + i);
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
// Calculate directory allocation
|
|
139
|
+
// Use metadata prefix to determine how much URL structure to preserve for back navigation
|
|
140
|
+
var pathForBackNav = context.maxBackNavigation + metadataPrefixLevels; // Total structure needed
|
|
141
|
+
var urlDirsForFile = urlParts.slice(0, -1); // All URL dirs
|
|
142
|
+
var remainingDirs = urlDirsForFile.slice(0, Math.max(0, urlDirsForFile.length - pathForBackNav));
|
|
143
|
+
var backNavDirs = urlDirsForFile.slice(-Math.min(pathForBackNav, urlDirsForFile.length));
|
|
144
|
+
|
|
145
|
+
// Build path: synthetic + remaining URL + metadataPrefix + backNav + filename
|
|
146
|
+
var pathParts = [].concat(syntheticDirs, _toConsumableArray(remainingDirs), [
|
|
147
|
+
// ['monorepo', 'lib']
|
|
148
|
+
variant.metadataPrefix.replace(/\/$/, '')], _toConsumableArray(backNavDirs), [
|
|
149
|
+
// ['components', 'deep', 'nested']
|
|
150
|
+
fileName // 'Demo.tsx'
|
|
151
|
+
]).filter(Boolean);
|
|
152
|
+
return pathParts.join('/');
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// Extract intermediate directories from metadata files with extra back navigation
|
|
156
|
+
var extraDirs = [];
|
|
157
|
+
var _iterator = _createForOfIteratorHelper(metadataEntries),
|
|
158
|
+
_step;
|
|
159
|
+
try {
|
|
160
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
161
|
+
var _step$value = _slicedToArray(_step.value, 1),
|
|
162
|
+
_filePath = _step$value[0];
|
|
163
|
+
var _backNavCount = (_filePath.match(/\.\.\//g) || []).length;
|
|
164
|
+
if (_backNavCount > expectedBackNav) {
|
|
165
|
+
var remainingPath = _filePath.replace(/^(\.\.\/)+/, '');
|
|
166
|
+
var _pathParts = remainingPath.split('/');
|
|
167
|
+
if (_pathParts.length > 1) {
|
|
168
|
+
var intermediateDirs = _pathParts.slice(0, -1);
|
|
169
|
+
extraDirs.push.apply(extraDirs, _toConsumableArray(intermediateDirs));
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// Use extracted directories if we have them and non-metadata files
|
|
175
|
+
} catch (err) {
|
|
176
|
+
_iterator.e(err);
|
|
177
|
+
} finally {
|
|
178
|
+
_iterator.f();
|
|
179
|
+
}
|
|
180
|
+
if (extraDirs.length > 0 && hasNonMetadataFiles) {
|
|
181
|
+
// For balanced extra back navigation case: metadataPrefix + URL path (skip first dir, take rest)
|
|
182
|
+
var urlDirectories = urlParts.slice(0, -1); // All directories from URL
|
|
183
|
+
var urlDirsFromSecond = urlDirectories.slice(1); // Skip first directory, take rest from second to last
|
|
184
|
+
return [variant.metadataPrefix.replace(/\/$/, '')].concat(_toConsumableArray(urlDirsFromSecond), [fileName]).join('/');
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// Regular metadataPrefix case
|
|
189
|
+
if (hasNonMetadataFiles) {
|
|
190
|
+
// Check if non-metadata files have back navigation
|
|
191
|
+
if (context.maxBackNavigation > 0) {
|
|
192
|
+
// Include URL directory when non-metadata files have back navigation
|
|
193
|
+
var dirParts = urlParts.slice(-2, -1); // Parent directory
|
|
194
|
+
return [variant.metadataPrefix.replace(/\/$/, '')].concat(_toConsumableArray(dirParts), [fileName]).join('/');
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// Don't include URL directory when non-metadata files have no back navigation
|
|
198
|
+
return [variant.metadataPrefix.replace(/\/$/, ''), fileName].join('/');
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Metadata-only or no URL case
|
|
203
|
+
return [variant.metadataPrefix.replace(/\/$/, ''), fileName].join('/');
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// Case 2: No metadataPrefix but has URL
|
|
207
|
+
if (context.hasUrl) {
|
|
208
|
+
var _urlPath = new URL(context.actualUrl).pathname;
|
|
209
|
+
var _urlParts = _urlPath.split('/').filter(Boolean);
|
|
210
|
+
|
|
211
|
+
// For files without fileName (synthetic from URL)
|
|
212
|
+
if (!variant.fileName) {
|
|
213
|
+
var _pathParts2 = fileName.split('/');
|
|
214
|
+
return _pathParts2[_pathParts2.length - 1];
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// Check if we have metadata files and non-metadata files
|
|
218
|
+
var hasMetadataFiles = Object.values(variant.extraFiles).some(function (file) {
|
|
219
|
+
return _typeof(file) === 'object' && file.metadata;
|
|
220
|
+
});
|
|
221
|
+
var hasNonMetadata = Object.values(variant.extraFiles).some(function (file) {
|
|
222
|
+
return _typeof(file) === 'object' ? !file.metadata : true;
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
// Calculate effective maxBackNavigation including metadata files when no metadataPrefix
|
|
226
|
+
var effectiveMaxBackNav = context.maxBackNavigation;
|
|
227
|
+
if (hasMetadataFiles && hasNonMetadata) {
|
|
228
|
+
// For mixed cases without metadataPrefix, include metadata files in back navigation calculation
|
|
229
|
+
for (var _i3 = 0, _Object$entries3 = Object.entries(variant.extraFiles); _i3 < _Object$entries3.length; _i3++) {
|
|
230
|
+
var _Object$entries3$_i = _slicedToArray(_Object$entries3[_i3], 2),
|
|
231
|
+
relativePath = _Object$entries3$_i[0],
|
|
232
|
+
fileContent = _Object$entries3$_i[1];
|
|
233
|
+
var _file = typeof fileContent === 'string' ? {
|
|
234
|
+
source: fileContent
|
|
235
|
+
} : fileContent;
|
|
236
|
+
if (_file.metadata && relativePath.startsWith('..')) {
|
|
237
|
+
var backCount = (relativePath.match(/\.\.\//g) || []).length;
|
|
238
|
+
effectiveMaxBackNav = Math.max(effectiveMaxBackNav, backCount);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// For cases with ONLY metadata files, extract just the immediate parent directory
|
|
244
|
+
if (hasMetadataFiles && !hasNonMetadata) {
|
|
245
|
+
var _dirParts = _urlParts.slice(-2, -1); // Get parent directory (e.g., "checkbox")
|
|
246
|
+
return [].concat(_toConsumableArray(_dirParts), [fileName]).join('/');
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// For non-metadata cases or mixed cases, use exactly effectiveMaxBackNav number of path segments
|
|
250
|
+
if (effectiveMaxBackNav > 0) {
|
|
251
|
+
// Take exactly the last effectiveMaxBackNav segments from URL path (excluding filename)
|
|
252
|
+
var pathSegments = _urlParts.slice(0, -1); // Remove filename
|
|
253
|
+
var _dirParts2 = pathSegments.slice(-effectiveMaxBackNav);
|
|
254
|
+
return [].concat(_toConsumableArray(_dirParts2), [fileName]).join('/');
|
|
255
|
+
}
|
|
256
|
+
return fileName;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// Case 3: No URL, use synthetic directories for back navigation
|
|
260
|
+
if (context.maxBackNavigation > 0) {
|
|
261
|
+
var _syntheticDirs = Array.from({
|
|
262
|
+
length: context.maxBackNavigation
|
|
263
|
+
}, function (_, i) {
|
|
264
|
+
return String.fromCharCode(97 + i);
|
|
265
|
+
});
|
|
266
|
+
return [].concat(_syntheticDirs, [fileName]).join('/');
|
|
267
|
+
}
|
|
268
|
+
return fileName;
|
|
269
|
+
}
|
|
270
|
+
function calculateExtraFilePath(relativePath, file, variant, context, path) {
|
|
271
|
+
// Handle current directory references
|
|
272
|
+
if (relativePath.startsWith('./')) {
|
|
273
|
+
return relativePath.substring(2);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
// Handle metadata files
|
|
277
|
+
if (file.metadata) {
|
|
278
|
+
// For unbalanced cases or complex scenarios, use main file path as reference
|
|
279
|
+
if (path && path.includes('/')) {
|
|
280
|
+
var backSteps = (relativePath.match(/\.\.\//g) || []).length;
|
|
281
|
+
var remainingPath = relativePath.replace(/^(\.\.\/)+/, '');
|
|
282
|
+
|
|
283
|
+
// Split main file path to understand the structure
|
|
284
|
+
var mainPathParts = path.split('/');
|
|
285
|
+
var targetDirParts = mainPathParts.slice(0, -(backSteps + 1)); // Go back from main file location
|
|
286
|
+
|
|
287
|
+
if (targetDirParts.length > 0) {
|
|
288
|
+
return [].concat(_toConsumableArray(targetDirParts), [remainingPath]).join('/');
|
|
289
|
+
}
|
|
290
|
+
return remainingPath;
|
|
291
|
+
}
|
|
292
|
+
// Simple case: just remove back navigation
|
|
293
|
+
return relativePath.replace(/^(\.\.\/)+/, '');
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
// Handle back navigation for non-metadata files
|
|
297
|
+
if (relativePath.startsWith('../')) {
|
|
298
|
+
var _backSteps = (relativePath.match(/\.\.\//g) || []).length;
|
|
299
|
+
var _remainingPath = relativePath.replace(/^(\.\.\/)+/, '');
|
|
300
|
+
|
|
301
|
+
// For non-metadata files with metadataPrefix, include the prefix
|
|
302
|
+
if (variant.metadataPrefix) {
|
|
303
|
+
// If main file path has extra directories (like 'src/app/components/...'), use main file as reference
|
|
304
|
+
if (path && path.includes('/')) {
|
|
305
|
+
var _mainPathParts = path.split('/');
|
|
306
|
+
var _targetDirParts = _mainPathParts.slice(0, -(_backSteps + 1));
|
|
307
|
+
return [].concat(_toConsumableArray(_targetDirParts), [_remainingPath]).join('/');
|
|
308
|
+
}
|
|
309
|
+
return [variant.metadataPrefix.replace(/\/$/, ''), _remainingPath].join('/');
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
// Handle path resolution based on main file context
|
|
313
|
+
if (path && path.includes('/')) {
|
|
314
|
+
var _mainPathParts2 = path.split('/');
|
|
315
|
+
var _targetDirParts2 = _mainPathParts2.slice(0, -(_backSteps + 1));
|
|
316
|
+
return [].concat(_toConsumableArray(_targetDirParts2), [_remainingPath]).join('/');
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
// For cases without sufficient context, create synthetic structure
|
|
320
|
+
if (context.maxBackNavigation > 0) {
|
|
321
|
+
var syntheticDirs = Array.from({
|
|
322
|
+
length: context.maxBackNavigation
|
|
323
|
+
}, function (_, i) {
|
|
324
|
+
return String.fromCharCode(97 + i);
|
|
325
|
+
});
|
|
326
|
+
var _targetDirParts3 = syntheticDirs.slice(0, -_backSteps);
|
|
327
|
+
return [].concat(_toConsumableArray(_targetDirParts3), [_remainingPath]).join('/');
|
|
328
|
+
}
|
|
329
|
+
return _remainingPath;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
// Handle non-metadata files without back navigation
|
|
333
|
+
if (!file.metadata && variant.metadataPrefix) {
|
|
334
|
+
// For non-metadata files with metadataPrefix, include URL directory
|
|
335
|
+
if (path && path.includes('/')) {
|
|
336
|
+
var _mainPathParts3 = path.split('/');
|
|
337
|
+
var metadataPrefixParts = variant.metadataPrefix.split('/').filter(Boolean);
|
|
338
|
+
|
|
339
|
+
// Find the metadataPrefix in the main path
|
|
340
|
+
var metadataPrefixIndex = _mainPathParts3.findIndex(function (part) {
|
|
341
|
+
return part === metadataPrefixParts[0];
|
|
342
|
+
});
|
|
343
|
+
if (metadataPrefixIndex > 0) {
|
|
344
|
+
// Include extra directories before metadataPrefix
|
|
345
|
+
var extraDirParts = _mainPathParts3.slice(0, metadataPrefixIndex);
|
|
346
|
+
return [].concat(_toConsumableArray(extraDirParts), [variant.metadataPrefix.replace(/\/$/, ''), relativePath]).join('/');
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
return [variant.metadataPrefix.replace(/\/$/, ''), relativePath].join('/');
|
|
350
|
+
}
|
|
351
|
+
return relativePath;
|
|
352
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Variant examination utility for analyzing variant structure and paths
|
|
3
3
|
*/
|
|
4
|
-
import type { VariantCode } from "
|
|
4
|
+
import type { VariantCode } from "./types.js";
|
|
5
5
|
interface PathContextBase {
|
|
6
6
|
hasMetadata: boolean;
|
|
7
7
|
maxBackNavigation: number;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"examineVariant.d.ts","sourceRoot":"","sources":["../../src/CodeHighlighter/examineVariant.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAqB,MAAM,SAAS,CAAC;AAE9D,UAAU,eAAe;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,UAAU,kBAAmB,SAAQ,eAAe;IAClD,MAAM,EAAE,IAAI,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,qBAAsB,SAAQ,eAAe;IACrD,MAAM,EAAE,KAAK,CAAC;IACd,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,MAAM,MAAM,WAAW,GAAG,kBAAkB,GAAG,qBAAqB,CAAC;AA0BrE;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,WAAW,CAyEnE"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import _typeof from "@babel/runtime/helpers/esm/typeof";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
3
|
+
/**
|
|
4
|
+
* Variant examination utility for analyzing variant structure and paths
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Calculate the maximum back navigation level from extra files
|
|
9
|
+
* Only considers non-metadata files to determine the common back navigation
|
|
10
|
+
*/
|
|
11
|
+
function calculateMaxBackNavigation(extraFiles) {
|
|
12
|
+
var maxBackNavigation = 0;
|
|
13
|
+
for (var _i = 0, _Object$entries = Object.entries(extraFiles); _i < _Object$entries.length; _i++) {
|
|
14
|
+
var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
|
|
15
|
+
relativePath = _Object$entries$_i[0],
|
|
16
|
+
fileContent = _Object$entries$_i[1];
|
|
17
|
+
var file = typeof fileContent === 'string' ? {
|
|
18
|
+
source: fileContent
|
|
19
|
+
} : fileContent;
|
|
20
|
+
|
|
21
|
+
// Skip metadata files - only consider non-metadata files for maxBackNavigation
|
|
22
|
+
if (file.metadata) {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (relativePath.startsWith('.')) {
|
|
26
|
+
var backCount = (relativePath.match(/\.\.\//g) || []).length;
|
|
27
|
+
maxBackNavigation = Math.max(maxBackNavigation, backCount);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return maxBackNavigation;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Create path context for processing files with extended information
|
|
35
|
+
*/
|
|
36
|
+
export function createPathContext(variant) {
|
|
37
|
+
var hasMetadata = variant.extraFiles ? Object.values(variant.extraFiles).some(function (file) {
|
|
38
|
+
return _typeof(file) === 'object' && file.metadata;
|
|
39
|
+
}) : false;
|
|
40
|
+
|
|
41
|
+
// Calculate maxBackNavigation based only on extraFiles structure
|
|
42
|
+
var maxBackNavigation = variant.extraFiles ? calculateMaxBackNavigation(variant.extraFiles) : 0;
|
|
43
|
+
|
|
44
|
+
// Parse URL to determine path structure
|
|
45
|
+
var urlDirectory = [];
|
|
46
|
+
var rootLevel = '';
|
|
47
|
+
var pathInwardFromRoot = '';
|
|
48
|
+
if (variant.url && variant.url.includes('://')) {
|
|
49
|
+
try {
|
|
50
|
+
var url = new URL(variant.url);
|
|
51
|
+
var pathname = url.pathname;
|
|
52
|
+
|
|
53
|
+
// Split path into components, removing empty strings
|
|
54
|
+
var pathComponents = pathname.split('/').filter(Boolean);
|
|
55
|
+
if (pathComponents.length > 0) {
|
|
56
|
+
// Check if the last component looks like a filename (has an extension)
|
|
57
|
+
var lastComponent = pathComponents[pathComponents.length - 1];
|
|
58
|
+
var hasFileExtension = lastComponent.includes('.') && /\.[a-zA-Z0-9]+$/.test(lastComponent);
|
|
59
|
+
|
|
60
|
+
// If it has a file extension, exclude it from directory components
|
|
61
|
+
var directoryComponents = hasFileExtension ? pathComponents.slice(0, -1) : pathComponents;
|
|
62
|
+
urlDirectory = directoryComponents;
|
|
63
|
+
rootLevel = directoryComponents[0] || '';
|
|
64
|
+
|
|
65
|
+
// Only calculate pathInwardFromRoot if there's actual back navigation
|
|
66
|
+
if (maxBackNavigation > 0 && directoryComponents.length >= maxBackNavigation) {
|
|
67
|
+
// Take the last maxBackNavigation components as the pathInwardFromRoot
|
|
68
|
+
var relevantComponents = directoryComponents.slice(-maxBackNavigation);
|
|
69
|
+
pathInwardFromRoot = relevantComponents.join('/');
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
} catch (_unused) {
|
|
73
|
+
// If URL parsing fails, keep defaults
|
|
74
|
+
urlDirectory = [];
|
|
75
|
+
rootLevel = '';
|
|
76
|
+
pathInwardFromRoot = '';
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// We keep the URL info for compatibility, but don't use it for calculations
|
|
81
|
+
var hasUrl = Boolean(variant.url);
|
|
82
|
+
var actualUrl = variant.url;
|
|
83
|
+
if (hasUrl && actualUrl) {
|
|
84
|
+
return {
|
|
85
|
+
hasUrl: true,
|
|
86
|
+
hasMetadata: hasMetadata,
|
|
87
|
+
maxBackNavigation: maxBackNavigation,
|
|
88
|
+
urlDirectory: urlDirectory,
|
|
89
|
+
rootLevel: rootLevel,
|
|
90
|
+
pathInwardFromRoot: pathInwardFromRoot,
|
|
91
|
+
actualUrl: actualUrl
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
hasUrl: false,
|
|
96
|
+
hasMetadata: hasMetadata,
|
|
97
|
+
maxBackNavigation: maxBackNavigation,
|
|
98
|
+
urlDirectory: urlDirectory,
|
|
99
|
+
rootLevel: rootLevel,
|
|
100
|
+
pathInwardFromRoot: pathInwardFromRoot,
|
|
101
|
+
actualUrl: undefined
|
|
102
|
+
};
|
|
103
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Metadata merging utility for positioning metadata files relative to source files
|
|
3
|
+
*/
|
|
4
|
+
import type { VariantCode, VariantExtraFiles } from "./types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Options for merging metadata files
|
|
7
|
+
*/
|
|
8
|
+
interface MergeMetadataOptions {
|
|
9
|
+
/**
|
|
10
|
+
* Optional prefix indicating where source files will be placed.
|
|
11
|
+
* When provided, metadata files will be positioned relative to this prefix
|
|
12
|
+
* PLUS the existing maxBackNavigation from the variant structure.
|
|
13
|
+
*
|
|
14
|
+
* Examples (assuming maxBackNavigation = 2):
|
|
15
|
+
* - 'src/' -> metadata goes to '../../../' (maxBackNavigation + 1 for src/)
|
|
16
|
+
* - 'src/app/' -> metadata goes to '../../../../' (maxBackNavigation + 2 for src/app/)
|
|
17
|
+
* - undefined -> uses only maxBackNavigation (for client merging)
|
|
18
|
+
*/
|
|
19
|
+
metadataPrefix?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Merge metadata files into a variant with proper positioning
|
|
23
|
+
*
|
|
24
|
+
* @param variant - The variant containing source files and potentially mixed metadata/non-metadata files
|
|
25
|
+
* @param metadataFiles - Additional metadata files to merge in
|
|
26
|
+
* @param options - Options for metadata positioning
|
|
27
|
+
* @returns A variant with all metadata files properly positioned
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* Extract metadata files from a variant, scoping them according to metadataPrefix
|
|
31
|
+
*
|
|
32
|
+
* @param variant - The variant containing mixed source and metadata files
|
|
33
|
+
* @returns An object with the cleaned variant and extracted metadata
|
|
34
|
+
*/
|
|
35
|
+
export declare function extractMetadata(variant: VariantCode): {
|
|
36
|
+
variant: VariantCode;
|
|
37
|
+
metadata: VariantExtraFiles;
|
|
38
|
+
};
|
|
39
|
+
export declare function mergeMetadata(variant: VariantCode, metadataFiles?: VariantExtraFiles, options?: MergeMetadataOptions): VariantCode;
|
|
40
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mergeMetadata.d.ts","sourceRoot":"","sources":["../../src/CodeHighlighter/mergeMetadata.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAG9D;;GAEG;AACH,UAAU,oBAAoB;IAC5B;;;;;;;;;OASG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAmBD;;;;;;;GAOG;AACH;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG;IACrD,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,iBAAiB,CAAC;CAC7B,CAmDA;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,WAAW,EACpB,aAAa,GAAE,iBAAsB,EACrC,OAAO,GAAE,oBAAyB,GACjC,WAAW,CAkFb"}
|