@readme/cli 0.0.27 → 0.0.30

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 (123) hide show
  1. package/package.json +5 -5
  2. package/src/cli.js +3 -3
  3. package/src/commands/import-oas.test.js +277 -0
  4. package/src/commands/import.classify.test.js +172 -0
  5. package/src/commands/import.js +2848 -443
  6. package/src/commands/import.landing.test.js +217 -0
  7. package/src/commands/import.slug-planner.test.js +86 -0
  8. package/src/commands/import.staging.test.js +158 -0
  9. package/src/commands/import.test.js +382 -0
  10. package/src/commands/oas-sync.js +362 -92
  11. package/src/prompts/index.js +101 -13
  12. package/src/utils/lint.js +2 -2
  13. package/src/utils/llms.js +224 -0
  14. package/src/utils/llms.test.js +302 -0
  15. package/src/utils/reporter.js +2 -1
  16. package/src/utils/slug-for-entry.js +16 -0
  17. package/src/utils/url-segs.js +124 -0
  18. package/src/utils/url-segs.test.js +239 -0
  19. package/src/validators/components.js +11 -7
  20. package/src/validators/duplicates.js +8 -8
  21. package/src/validators/frontmatter.js +11 -0
  22. package/src/validators/links.js +2 -8
  23. package/src/validators/oas-reference.js +13 -38
  24. package/src/validators/ordering.js +169 -83
  25. package/vendor/TOOLS.md +1 -1
  26. package/src/dev/.next/app-build-manifest.json +0 -20
  27. package/src/dev/.next/build-manifest.json +0 -31
  28. package/src/dev/.next/cache/.rscinfo +0 -1
  29. package/src/dev/.next/cache/next-devtools-config.json +0 -1
  30. package/src/dev/.next/cache/webpack/client-development/0.pack.gz +0 -0
  31. package/src/dev/.next/cache/webpack/client-development/1.pack.gz +0 -0
  32. package/src/dev/.next/cache/webpack/client-development/10.pack.gz +0 -0
  33. package/src/dev/.next/cache/webpack/client-development/11.pack.gz +0 -0
  34. package/src/dev/.next/cache/webpack/client-development/2.pack.gz +0 -0
  35. package/src/dev/.next/cache/webpack/client-development/3.pack.gz +0 -0
  36. package/src/dev/.next/cache/webpack/client-development/3.pack.gz_ +0 -0
  37. package/src/dev/.next/cache/webpack/client-development/4.pack.gz +0 -0
  38. package/src/dev/.next/cache/webpack/client-development/5.pack.gz +0 -0
  39. package/src/dev/.next/cache/webpack/client-development/5.pack.gz_ +0 -0
  40. package/src/dev/.next/cache/webpack/client-development/6.pack.gz +0 -0
  41. package/src/dev/.next/cache/webpack/client-development/7.pack.gz +0 -0
  42. package/src/dev/.next/cache/webpack/client-development/7.pack.gz_ +0 -0
  43. package/src/dev/.next/cache/webpack/client-development/8.pack.gz +0 -0
  44. package/src/dev/.next/cache/webpack/client-development/9.pack.gz +0 -0
  45. package/src/dev/.next/cache/webpack/client-development/index.pack.gz.old +0 -0
  46. package/src/dev/.next/cache/webpack/client-development-fallback/0.pack.gz +0 -0
  47. package/src/dev/.next/cache/webpack/client-development-fallback/1.pack.gz +0 -0
  48. package/src/dev/.next/cache/webpack/client-development-fallback/index.pack.gz +0 -0
  49. package/src/dev/.next/cache/webpack/client-development-fallback/index.pack.gz.old +0 -0
  50. package/src/dev/.next/cache/webpack/edge-server-development/0.pack.gz +0 -0
  51. package/src/dev/.next/cache/webpack/edge-server-development/1.pack.gz +0 -0
  52. package/src/dev/.next/cache/webpack/edge-server-development/index.pack.gz +0 -0
  53. package/src/dev/.next/cache/webpack/edge-server-development/index.pack.gz.old +0 -0
  54. package/src/dev/.next/cache/webpack/server-development/0.pack.gz +0 -0
  55. package/src/dev/.next/cache/webpack/server-development/1.pack.gz +0 -0
  56. package/src/dev/.next/cache/webpack/server-development/10.pack.gz +0 -0
  57. package/src/dev/.next/cache/webpack/server-development/11.pack.gz +0 -0
  58. package/src/dev/.next/cache/webpack/server-development/12.pack.gz +0 -0
  59. package/src/dev/.next/cache/webpack/server-development/13.pack.gz +0 -0
  60. package/src/dev/.next/cache/webpack/server-development/14.pack.gz +0 -0
  61. package/src/dev/.next/cache/webpack/server-development/15.pack.gz +0 -0
  62. package/src/dev/.next/cache/webpack/server-development/2.pack.gz +0 -0
  63. package/src/dev/.next/cache/webpack/server-development/2.pack.gz_ +0 -0
  64. package/src/dev/.next/cache/webpack/server-development/3.pack.gz +0 -0
  65. package/src/dev/.next/cache/webpack/server-development/3.pack.gz_ +0 -0
  66. package/src/dev/.next/cache/webpack/server-development/4.pack.gz +0 -0
  67. package/src/dev/.next/cache/webpack/server-development/5.pack.gz +0 -0
  68. package/src/dev/.next/cache/webpack/server-development/6.pack.gz +0 -0
  69. package/src/dev/.next/cache/webpack/server-development/6.pack.gz_ +0 -0
  70. package/src/dev/.next/cache/webpack/server-development/7.pack.gz +0 -0
  71. package/src/dev/.next/cache/webpack/server-development/7.pack.gz_ +0 -0
  72. package/src/dev/.next/cache/webpack/server-development/8.pack.gz +0 -0
  73. package/src/dev/.next/cache/webpack/server-development/9.pack.gz +0 -0
  74. package/src/dev/.next/cache/webpack/server-development/9.pack.gz_ +0 -0
  75. package/src/dev/.next/cache/webpack/server-development/index.pack.gz +0 -0
  76. package/src/dev/.next/cache/webpack/server-development/index.pack.gz.old +0 -0
  77. package/src/dev/.next/package.json +0 -1
  78. package/src/dev/.next/prerender-manifest.json +0 -11
  79. package/src/dev/.next/react-loadable-manifest.json +0 -1
  80. package/src/dev/.next/routes-manifest.json +0 -1
  81. package/src/dev/.next/server/app/[...slug]/page.js +0 -360
  82. package/src/dev/.next/server/app/[...slug]/page_client-reference-manifest.js +0 -1
  83. package/src/dev/.next/server/app/page.js +0 -349
  84. package/src/dev/.next/server/app/page_client-reference-manifest.js +0 -1
  85. package/src/dev/.next/server/app-paths-manifest.json +0 -3
  86. package/src/dev/.next/server/edge-runtime-webpack.js +0 -1151
  87. package/src/dev/.next/server/interception-route-rewrite-manifest.js +0 -1
  88. package/src/dev/.next/server/middleware-build-manifest.js +0 -33
  89. package/src/dev/.next/server/middleware-manifest.json +0 -32
  90. package/src/dev/.next/server/middleware-react-loadable-manifest.js +0 -1
  91. package/src/dev/.next/server/middleware.js +0 -1113
  92. package/src/dev/.next/server/next-font-manifest.js +0 -1
  93. package/src/dev/.next/server/next-font-manifest.json +0 -1
  94. package/src/dev/.next/server/pages-manifest.json +0 -5
  95. package/src/dev/.next/server/server-reference-manifest.js +0 -1
  96. package/src/dev/.next/server/server-reference-manifest.json +0 -5
  97. package/src/dev/.next/server/static/webpack/633457081244afec._.hot-update.json +0 -1
  98. package/src/dev/.next/server/vendor-chunks/@readme.js +0 -25
  99. package/src/dev/.next/server/vendor-chunks/@swc.js +0 -55
  100. package/src/dev/.next/server/vendor-chunks/next.js +0 -3659
  101. package/src/dev/.next/server/webpack-runtime.js +0 -209
  102. package/src/dev/.next/static/chunks/app/[...slug]/loading.js +0 -28
  103. package/src/dev/.next/static/chunks/app/[...slug]/page.js +0 -28
  104. package/src/dev/.next/static/chunks/app/layout.js +0 -171
  105. package/src/dev/.next/static/chunks/app/page.js +0 -28
  106. package/src/dev/.next/static/chunks/app-pages-internals.js +0 -182
  107. package/src/dev/.next/static/chunks/main-app.js +0 -1882
  108. package/src/dev/.next/static/chunks/polyfills.js +0 -1
  109. package/src/dev/.next/static/chunks/webpack.js +0 -1393
  110. package/src/dev/.next/static/css/app/layout.css +0 -559
  111. package/src/dev/.next/static/development/_buildManifest.js +0 -1
  112. package/src/dev/.next/static/development/_ssgManifest.js +0 -1
  113. package/src/dev/.next/static/webpack/633457081244afec._.hot-update.json +0 -1
  114. package/src/dev/.next/static/webpack/ec52a3fce0f78db0.webpack.hot-update.json +0 -1
  115. package/src/dev/.next/static/webpack/webpack.ec52a3fce0f78db0.hot-update.js +0 -12
  116. package/src/dev/.next/trace +0 -21
  117. package/src/dev/.next/types/app/[...slug]/page.ts +0 -84
  118. package/src/dev/.next/types/app/layout.ts +0 -84
  119. package/src/dev/.next/types/app/page.ts +0 -84
  120. package/src/dev/.next/types/cache-life.d.ts +0 -141
  121. package/src/dev/.next/types/package.json +0 -1
  122. package/src/dev/.next/types/routes.d.ts +0 -55
  123. package/src/validators/numbering.js +0 -134
@@ -3,8 +3,13 @@ import path from 'node:path';
3
3
 
4
4
  export const name = 'ordering';
5
5
 
6
- // Content directories where _order.yaml is expected.
7
- const ORDERED_DIRS = ['docs', 'recipes', 'custom_pages'];
6
+ // Top-level content directories that use _order.yaml.
7
+ const CONTENT_DIRS = ['docs', 'reference', 'recipes', 'custom_pages'];
8
+
9
+ // Of those, the dirs that must list every page/folder. reference ordering is
10
+ // OAS-managed, so we never flag pages "missing from" a reference _order.yaml —
11
+ // but stale entries are flagged everywhere.
12
+ const REQUIRE_ORDER = new Set(['docs', 'recipes', 'custom_pages']);
8
13
 
9
14
  // Values that YAML interprets as non-strings and need quoting in _order.yaml.
10
15
  const YAML_UNSAFE = /^(?:\d+\.?\d*|true|false|yes|no|on|off|null|~)$/i;
@@ -12,110 +17,191 @@ function yamlSafeSlug(slug) {
12
17
  return YAML_UNSAFE.test(slug) ? `"${slug}"` : slug;
13
18
  }
14
19
 
15
- function slugFromFile(filename) {
16
- return filename.replace(/\.(md|mdx)$/, '');
20
+ // Returns the slug a "- entry" line refers to, or null for any other line.
21
+ // Handles quoted slugs and trailing inline comments (`- overview # comment`).
22
+ function parseOrderEntry(line) {
23
+ const trimmed = line.trim();
24
+ if (!trimmed.startsWith('- ')) return null;
25
+ const value = trimmed.slice(2).trim();
26
+ const quoted = value.match(/^(['"])(.*)\1\s*(?:#.*)?$/);
27
+ if (quoted) return quoted[2];
28
+ const slug = value.replace(/(?:^|\s)#.*$/, '').trim();
29
+ return slug === '' ? null : slug;
17
30
  }
18
31
 
19
32
  function parseOrderYaml(content) {
20
33
  return content
21
34
  .split('\n')
22
- .map((line) => line.trim())
23
- .filter((line) => line.startsWith('- '))
24
- .map((line) => line.slice(2).trim().replace(/^(['"])(.*)\1$/, '$2'));
35
+ .map(parseOrderEntry)
36
+ .filter((entry) => entry !== null);
37
+ }
38
+
39
+ function isIndex(name) {
40
+ return name === 'index' || name === 'index.md' || name === 'index.mdx';
41
+ }
42
+
43
+ /**
44
+ * Walk a content directory tree once. For every directory, capture the on-disk
45
+ * slug set (child pages + child folders) and its _order.yaml entries (or null
46
+ * when absent), so the caller can diff the two in a single pass.
47
+ */
48
+ function collectDirs(gitRoot, topDir) {
49
+ const base = path.join(gitRoot, topDir);
50
+ if (!fs.existsSync(base)) return [];
51
+
52
+ const dirs = [];
53
+ const stack = [base];
54
+ while (stack.length) {
55
+ const cur = stack.pop();
56
+ const onDisk = new Set();
57
+ let orderEntries = null;
58
+
59
+ for (const entry of fs.readdirSync(cur, { withFileTypes: true })) {
60
+ if (entry.isDirectory()) {
61
+ onDisk.add(entry.name);
62
+ stack.push(path.join(cur, entry.name));
63
+ } else if (entry.name === '_order.yaml') {
64
+ orderEntries = parseOrderYaml(fs.readFileSync(path.join(cur, entry.name), 'utf-8'));
65
+ } else if (/\.(md|mdx)$/.test(entry.name) && !isIndex(entry.name)) {
66
+ onDisk.add(entry.name.replace(/\.(md|mdx)$/, ''));
67
+ }
68
+ }
69
+
70
+ dirs.push({ dir: cur, onDisk, orderEntries });
71
+ }
72
+ return dirs;
25
73
  }
26
74
 
27
75
  /**
28
- * Find all directories that contain content and check their _order.yaml.
76
+ * Validate every _order.yaml against the files and folders next to it:
77
+ * - on disk but missing from _order.yaml → "Missing from _order.yaml" (required dirs only)
78
+ * - in _order.yaml but missing on disk → "Stale entry"
79
+ * - an index entry that shouldn't be listed → "Invalid entry"
29
80
  */
30
81
  export function validateAll(files, gitRoot, { fix } = {}) {
31
82
  const results = [];
32
83
 
33
- // Group files by their immediate parent directory.
34
- const dirContents = new Map();
35
- for (const relPath of files) {
36
- const topDir = relPath.split('/')[0];
37
- if (!ORDERED_DIRS.includes(topDir)) continue;
38
-
39
- const dir = path.dirname(relPath);
40
- if (!dirContents.has(dir)) dirContents.set(dir, { files: [], subdirs: new Set() });
41
-
42
- const filename = path.basename(relPath);
43
- dirContents.get(dir).files.push(filename);
44
-
45
- // Track subdirectories in the parent so we know about categories/nested dirs.
46
- const parts = relPath.split('/');
47
- if (parts.length > 2) {
48
- const parentDir = parts.slice(0, -2).join('/');
49
- const subdir = parts[parts.length - 2];
50
- if (!dirContents.has(parentDir)) dirContents.set(parentDir, { files: [], subdirs: new Set() });
51
- dirContents.get(parentDir).subdirs.add(subdir);
52
- }
53
- }
84
+ for (const topDir of CONTENT_DIRS) {
85
+ const requireOrder = REQUIRE_ORDER.has(topDir);
86
+
87
+ for (const { dir, onDisk, orderEntries } of collectDirs(gitRoot, topDir)) {
88
+ const orderPath = path.join(dir, '_order.yaml');
89
+ const relOrder = path.relative(gitRoot, orderPath);
90
+
91
+ // No _order.yaml at all: only required dirs need one.
92
+ if (orderEntries === null) {
93
+ if (requireOrder && onDisk.size > 0) {
94
+ const missing = [...onDisk].sort();
95
+ results.push({
96
+ file: relOrder,
97
+ rule: name,
98
+ severity: 'warning',
99
+ fixable: true,
100
+ message: `Missing order: _order.yaml not found (${missing.length} ${missing.length === 1 ? 'entry needs' : 'entries need'} ordering)`,
101
+ _fixAdd: { orderPath, missing },
102
+ });
103
+ }
104
+ continue;
105
+ }
54
106
 
55
- for (const [dir, { files: dirFiles, subdirs }] of dirContents) {
56
- const orderPath = path.join(gitRoot, dir, '_order.yaml');
107
+ const ordered = new Set(orderEntries);
108
+
109
+ // On disk but not ordered.
110
+ if (requireOrder) {
111
+ const missing = [...onDisk].filter((slug) => !ordered.has(slug)).sort();
112
+ if (missing.length > 0) {
113
+ results.push({
114
+ file: relOrder,
115
+ rule: name,
116
+ severity: 'warning',
117
+ fixable: true,
118
+ message: `Missing from _order.yaml: ${missing.join(', ')}`,
119
+ _fixAdd: { orderPath, missing },
120
+ });
121
+ }
122
+ }
57
123
 
58
- // Collect expected slugs: files (excluding index.md) + subdirectories.
59
- const expectedSlugs = [];
60
- for (const f of dirFiles) {
61
- if (f === 'index.md' || f === 'index.mdx') continue;
62
- expectedSlugs.push(slugFromFile(f));
63
- }
64
- for (const sub of subdirs) {
65
- expectedSlugs.push(sub);
124
+ // Ordered but not on disk (or an index entry that shouldn't be listed).
125
+ for (const entry of orderEntries) {
126
+ if (isIndex(entry)) {
127
+ results.push({
128
+ file: relOrder,
129
+ rule: name,
130
+ severity: 'warning',
131
+ fixable: true,
132
+ message: `Invalid entry: "${entry}" should not be listed in _order.yaml`,
133
+ _fixRemove: { orderPath, entry },
134
+ });
135
+ } else if (!onDisk.has(entry)) {
136
+ results.push({
137
+ file: relOrder,
138
+ rule: name,
139
+ severity: 'warning',
140
+ fixable: true,
141
+ message: `Stale entry: "${entry}" in _order.yaml has no matching file or folder`,
142
+ _fixRemove: { orderPath, entry },
143
+ });
144
+ }
145
+ }
66
146
  }
147
+ }
67
148
 
68
- if (!fs.existsSync(orderPath)) {
69
- if (expectedSlugs.length === 0) continue;
70
-
71
- results.push({
72
- file: path.join(dir, '_order.yaml'),
73
- rule: name,
74
- severity: 'warning',
75
- fixable: true,
76
- message: `Missing order: _order.yaml not found (${expectedSlugs.length} ${expectedSlugs.length === 1 ? 'entry needs' : 'entries need'} ordering)`,
77
- _fix: { orderPath, missing: expectedSlugs },
78
- });
79
- continue;
149
+ if (!fix) return strip(results);
150
+
151
+ // Additions: append missing slugs to the _order.yaml.
152
+ for (const r of results) {
153
+ if (!r._fixAdd) continue;
154
+ const { orderPath, missing } = r._fixAdd;
155
+ const newEntries = missing.map((slug) => `- ${yamlSafeSlug(slug)}`).join('\n');
156
+
157
+ if (fs.existsSync(orderPath)) {
158
+ const existing = fs.readFileSync(orderPath, 'utf-8');
159
+ const sep = existing.endsWith('\n') ? '' : '\n';
160
+ fs.writeFileSync(orderPath, `${existing}${sep}${newEntries}\n`);
161
+ } else {
162
+ fs.mkdirSync(path.dirname(orderPath), { recursive: true });
163
+ fs.writeFileSync(orderPath, `${newEntries}\n`);
80
164
  }
165
+ r.message += ' (fixed)';
166
+ }
81
167
 
82
- const content = fs.readFileSync(orderPath, 'utf-8');
83
- const ordered = new Set(parseOrderYaml(content));
84
- const missing = expectedSlugs.filter((slug) => !ordered.has(slug));
85
-
86
- if (missing.length > 0) {
87
- results.push({
88
- file: path.join(dir, '_order.yaml'),
89
- rule: name,
90
- severity: 'warning',
91
- fixable: true,
92
- message: `Missing from _order.yaml: ${missing.join(', ')}`,
93
- _fix: { orderPath, missing },
168
+ // Removals: group stale/index entries by order file, then rewrite each once.
169
+ const removalsByPath = new Map();
170
+ for (const r of results) {
171
+ if (!r._fixRemove) continue;
172
+ const { orderPath, entry } = r._fixRemove;
173
+ if (!removalsByPath.has(orderPath)) removalsByPath.set(orderPath, new Set());
174
+ removalsByPath.get(orderPath).add(entry);
175
+ }
176
+ for (const [orderPath, toRemove] of removalsByPath) {
177
+ if (!fs.existsSync(orderPath)) continue;
178
+ // Drop only the targeted entry lines, keeping comments, blank lines, and
179
+ // untouched entries exactly as written.
180
+ const kept = fs
181
+ .readFileSync(orderPath, 'utf-8')
182
+ .split('\n')
183
+ .filter((line) => {
184
+ const entry = parseOrderEntry(line);
185
+ return entry === null || !toRemove.has(entry);
94
186
  });
187
+ if (kept.some((line) => parseOrderEntry(line) !== null)) {
188
+ fs.writeFileSync(orderPath, kept.join('\n'));
189
+ } else {
190
+ fs.unlinkSync(orderPath);
95
191
  }
96
192
  }
193
+ for (const r of results) {
194
+ if (r._fixRemove) r.message += ' (fixed)';
195
+ }
97
196
 
98
- // Apply fixes if requested.
99
- if (fix) {
100
- for (const r of results) {
101
- if (!r._fix) continue;
102
- const { orderPath, missing } = r._fix;
103
- const newEntries = missing.map((slug) => `- ${yamlSafeSlug(slug)}`).join('\n');
104
-
105
- if (fs.existsSync(orderPath)) {
106
- const existing = fs.readFileSync(orderPath, 'utf-8');
107
- const sep = existing.endsWith('\n') ? '' : '\n';
108
- fs.writeFileSync(orderPath, `${existing}${sep}${newEntries}\n`);
109
- } else {
110
- fs.mkdirSync(path.dirname(orderPath), { recursive: true });
111
- fs.writeFileSync(orderPath, `${newEntries}\n`);
112
- }
197
+ return strip(results);
198
+ }
113
199
 
114
- r.message += ' (fixed)';
115
- }
200
+ // Remove internal fix descriptors before returning results to the reporter.
201
+ function strip(results) {
202
+ for (const r of results) {
203
+ delete r._fixAdd;
204
+ delete r._fixRemove;
116
205
  }
117
-
118
- // Strip internal _fix data before returning.
119
- for (const r of results) delete r._fix;
120
206
  return results;
121
207
  }
package/vendor/TOOLS.md CHANGED
@@ -4,7 +4,7 @@ The ReadMe CLI (`npx @readme/cli`) has several commands that can help fix issues
4
4
 
5
5
  ## `npx @readme/cli lint --fix`
6
6
 
7
- Automatically fixes common linting issues: ordering problems, frontmatter cleanup, numbering suffixes, etc. Always try this first.
7
+ Automatically fixes common linting issues: ordering problems, frontmatter cleanup, etc. Always try this first.
8
8
 
9
9
  ## `npx @readme/cli oas:sync`
10
10
 
@@ -1,20 +0,0 @@
1
- {
2
- "pages": {
3
- "/layout": [
4
- "static/chunks/webpack.js",
5
- "static/chunks/main-app.js",
6
- "static/css/app/layout.css",
7
- "static/chunks/app/layout.js"
8
- ],
9
- "/[...slug]/loading": [
10
- "static/chunks/webpack.js",
11
- "static/chunks/main-app.js",
12
- "static/chunks/app/[...slug]/loading.js"
13
- ],
14
- "/[...slug]/page": [
15
- "static/chunks/webpack.js",
16
- "static/chunks/main-app.js",
17
- "static/chunks/app/[...slug]/page.js"
18
- ]
19
- }
20
- }
@@ -1,31 +0,0 @@
1
- {
2
- "polyfillFiles": [
3
- "static/chunks/polyfills.js"
4
- ],
5
- "devFiles": [
6
- "static/chunks/react-refresh.js"
7
- ],
8
- "ampDevFiles": [],
9
- "lowPriorityFiles": [
10
- "static/development/_buildManifest.js",
11
- "static/development/_ssgManifest.js"
12
- ],
13
- "rootMainFiles": [
14
- "static/chunks/webpack.js",
15
- "static/chunks/main-app.js"
16
- ],
17
- "rootMainFilesTree": {},
18
- "pages": {
19
- "/_app": [
20
- "static/chunks/webpack.js",
21
- "static/chunks/main.js",
22
- "static/chunks/pages/_app.js"
23
- ],
24
- "/_error": [
25
- "static/chunks/webpack.js",
26
- "static/chunks/main.js",
27
- "static/chunks/pages/_error.js"
28
- ]
29
- },
30
- "ampFirstPages": []
31
- }
@@ -1 +0,0 @@
1
- {"encryption.key":"3SIKRvTdjH2KvDXOUMwtVkaVmj4v5oCsYq33R2HYXtM=","encryption.expire_at":1772814750891}
@@ -1 +0,0 @@
1
- {"type": "commonjs"}
@@ -1,11 +0,0 @@
1
- {
2
- "version": 4,
3
- "routes": {},
4
- "dynamicRoutes": {},
5
- "notFoundRoutes": [],
6
- "preview": {
7
- "previewModeId": "b628b03ee18bb42bb63fcc51ca49946f",
8
- "previewModeSigningKey": "f82f45cc5833fe189f9cc960b8dd1be2c6c51a3c05cf345f3497ced03b8c7b0d",
9
- "previewModeEncryptionKey": "ab192619b9dd28eb198eda117db9c62df8ca0dba79469500b34cdcdf2b290da3"
10
- }
11
- }
@@ -1 +0,0 @@
1
- {"version":3,"caseSensitive":false,"basePath":"","rewrites":{"beforeFiles":[],"afterFiles":[],"fallback":[]},"redirects":[{"source":"/:path+/","destination":"/:path+","permanent":true,"internal":true,"regex":"^(?:\\/((?:[^\\/]+?)(?:\\/(?:[^\\/]+?))*))\\/$"}],"headers":[]}