@mui/internal-docs-infra 0.1.1-alpha.13 → 0.1.1-alpha.15

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.
@@ -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;AA+mBxF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,0BAA0B,2CA0MtE"}
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
- // Simple merge for precomputed data - just combine extraFiles
593
- var mergedExtraFiles = _objectSpread({}, variantData.extraFiles || {});
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
- Object.assign(mergedExtraFiles, globalVariant.extraFiles);
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 we actually have extra files to merge
601
- if (Object.keys(mergedExtraFiles).length > Object.keys(variantData.extraFiles || {}).length) {
602
- mergedCode[variant] = _objectSpread(_objectSpread({}, variantData), {}, {
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
- // Simple merge for controlled data - just combine extraFiles
646
- var mergedExtraFiles = _objectSpread({}, variantData.extraFiles || {});
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
- Object.assign(mergedExtraFiles, globalVariant.extraFiles);
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 we actually have extra files to merge
654
- if (Object.keys(mergedExtraFiles).length > Object.keys(variantData.extraFiles || {}).length) {
655
- mergedCode[variant] = _objectSpread(_objectSpread({}, variantData), {}, {
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 "../CodeHighlighter/types.js";
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"}