@aiready/context-analyzer 0.21.22 → 0.21.23
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/.turbo/turbo-build.log +26 -25
- package/.turbo/turbo-lint.log +5 -5
- package/.turbo/turbo-test.log +104 -41
- package/coverage/clover.xml +2615 -1242
- package/coverage/coverage-final.json +30 -13
- package/coverage/dist/chunk-64U3PNO3.mjs.html +367 -0
- package/coverage/dist/chunk-J3MUOWHC.mjs.html +5326 -0
- package/coverage/dist/index.html +146 -0
- package/coverage/{classifier.ts.html → dist/index.mjs.html} +537 -912
- package/coverage/index.html +84 -189
- package/coverage/src/analyzer.ts.html +88 -0
- package/coverage/src/analyzers/index.html +116 -0
- package/coverage/src/analyzers/python-context.ts.html +910 -0
- package/coverage/{ast-utils.ts.html → src/ast-utils.ts.html} +84 -54
- package/coverage/src/classifier.ts.html +892 -0
- package/coverage/src/classify/classification-patterns.ts.html +307 -0
- package/coverage/src/classify/file-classifiers.ts.html +973 -0
- package/coverage/src/classify/index.html +131 -0
- package/coverage/{cluster-detector.ts.html → src/cluster-detector.ts.html} +154 -91
- package/coverage/{defaults.ts.html → src/defaults.ts.html} +74 -65
- package/coverage/{graph-builder.ts.html → src/graph-builder.ts.html} +268 -229
- package/coverage/src/index.html +341 -0
- package/coverage/{index.ts.html → src/index.ts.html} +70 -13
- package/coverage/{scoring.ts.html → src/issue-analyzer.ts.html} +201 -261
- package/coverage/src/mapper.ts.html +439 -0
- package/coverage/{metrics.ts.html → src/metrics.ts.html} +201 -132
- package/coverage/src/orchestrator.ts.html +493 -0
- package/coverage/{provider.ts.html → src/provider.ts.html} +21 -21
- package/coverage/{remediation.ts.html → src/remediation.ts.html} +112 -52
- package/coverage/src/report/console-report.ts.html +415 -0
- package/coverage/src/report/html-report.ts.html +361 -0
- package/coverage/src/report/index.html +146 -0
- package/coverage/src/report/interactive-setup.ts.html +373 -0
- package/coverage/src/scoring.ts.html +895 -0
- package/coverage/src/semantic/co-usage.ts.html +340 -0
- package/coverage/src/semantic/consolidation.ts.html +223 -0
- package/coverage/src/semantic/domain-inference.ts.html +859 -0
- package/coverage/src/semantic/index.html +161 -0
- package/coverage/src/semantic/type-graph.ts.html +163 -0
- package/coverage/{summary.ts.html → src/summary.ts.html} +155 -275
- package/coverage/{types.ts.html → src/types.ts.html} +133 -31
- package/coverage/src/utils/dependency-graph-utils.ts.html +463 -0
- package/coverage/src/utils/index.html +131 -0
- package/coverage/src/utils/string-utils.ts.html +148 -0
- package/dist/chunk-J3MUOWHC.mjs +1747 -0
- package/dist/cli.js +59 -171
- package/dist/cli.mjs +1 -1
- package/dist/index.js +55 -167
- package/dist/index.mjs +1 -1
- package/package.json +2 -2
- package/src/__tests__/consolidation.test.ts +247 -0
- package/src/__tests__/defaults.test.ts +121 -0
- package/src/__tests__/domain-inference.test.ts +420 -0
- package/src/__tests__/issue-analyzer.test.ts +155 -0
- package/src/__tests__/orchestrator.test.ts +143 -0
- package/src/__tests__/python-context.test.ts +98 -0
- package/src/__tests__/report/console-report.test.ts +292 -0
- package/src/__tests__/report/html-report.test.ts +232 -0
- package/src/report/html-report.ts +58 -174
- package/coverage/analyzer.ts.html +0 -1369
- package/coverage/semantic-analysis.ts.html +0 -1201
|
@@ -3,15 +3,15 @@
|
|
|
3
3
|
<html lang="en">
|
|
4
4
|
|
|
5
5
|
<head>
|
|
6
|
-
<title>Code coverage report for ast-utils.ts</title>
|
|
6
|
+
<title>Code coverage report for src/ast-utils.ts</title>
|
|
7
7
|
<meta charset="utf-8" />
|
|
8
|
-
<link rel="stylesheet" href="prettify.css" />
|
|
9
|
-
<link rel="stylesheet" href="base.css" />
|
|
10
|
-
<link rel="shortcut icon" type="image/x-icon" href="favicon.png" />
|
|
8
|
+
<link rel="stylesheet" href="../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
|
|
11
11
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
12
|
<style type='text/css'>
|
|
13
13
|
.coverage-summary .sorter {
|
|
14
|
-
background-image: url(sort-arrow-sprite.png);
|
|
14
|
+
background-image: url(../sort-arrow-sprite.png);
|
|
15
15
|
}
|
|
16
16
|
</style>
|
|
17
17
|
</head>
|
|
@@ -19,34 +19,34 @@
|
|
|
19
19
|
<body>
|
|
20
20
|
<div class='wrapper'>
|
|
21
21
|
<div class='pad1'>
|
|
22
|
-
<h1><a href="index.html">All files</a> ast-utils.ts</h1>
|
|
22
|
+
<h1><a href="../index.html">All files</a> / <a href="index.html">src</a> ast-utils.ts</h1>
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">34.61% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>18/52</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">69.56% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>32/46</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
40
|
<span class="strong">42.85% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>6/14</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">38.46% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>15/39</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -162,7 +162,17 @@
|
|
|
162
162
|
<a name='L97'></a><a href='#L97'>97</a>
|
|
163
163
|
<a name='L98'></a><a href='#L98'>98</a>
|
|
164
164
|
<a name='L99'></a><a href='#L99'>99</a>
|
|
165
|
-
<a name='L100'></a><a href='#L100'>100</a
|
|
165
|
+
<a name='L100'></a><a href='#L100'>100</a>
|
|
166
|
+
<a name='L101'></a><a href='#L101'>101</a>
|
|
167
|
+
<a name='L102'></a><a href='#L102'>102</a>
|
|
168
|
+
<a name='L103'></a><a href='#L103'>103</a>
|
|
169
|
+
<a name='L104'></a><a href='#L104'>104</a>
|
|
170
|
+
<a name='L105'></a><a href='#L105'>105</a>
|
|
171
|
+
<a name='L106'></a><a href='#L106'>106</a>
|
|
172
|
+
<a name='L107'></a><a href='#L107'>107</a>
|
|
173
|
+
<a name='L108'></a><a href='#L108'>108</a>
|
|
174
|
+
<a name='L109'></a><a href='#L109'>109</a>
|
|
175
|
+
<a name='L110'></a><a href='#L110'>110</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
166
176
|
<span class="cline-any cline-neutral"> </span>
|
|
167
177
|
<span class="cline-any cline-neutral"> </span>
|
|
168
178
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -175,18 +185,23 @@
|
|
|
175
185
|
<span class="cline-any cline-neutral"> </span>
|
|
176
186
|
<span class="cline-any cline-neutral"> </span>
|
|
177
187
|
<span class="cline-any cline-neutral"> </span>
|
|
178
|
-
<span class="cline-any cline-yes">
|
|
179
|
-
<span class="cline-any cline-yes">
|
|
188
|
+
<span class="cline-any cline-yes">33x</span>
|
|
189
|
+
<span class="cline-any cline-yes">33x</span>
|
|
180
190
|
<span class="cline-any cline-neutral"> </span>
|
|
181
|
-
<span class="cline-any cline-yes">
|
|
191
|
+
<span class="cline-any cline-yes">33x</span>
|
|
182
192
|
<span class="cline-any cline-neutral"> </span>
|
|
183
193
|
<span class="cline-any cline-neutral"> </span>
|
|
184
194
|
<span class="cline-any cline-no"> </span>
|
|
195
|
+
<span class="cline-any cline-yes">39x</span>
|
|
196
|
+
<span class="cline-any cline-yes">72x</span>
|
|
197
|
+
<span class="cline-any cline-yes">90x</span>
|
|
198
|
+
<span class="cline-any cline-yes">72x</span>
|
|
185
199
|
<span class="cline-any cline-neutral"> </span>
|
|
186
200
|
<span class="cline-any cline-neutral"> </span>
|
|
187
|
-
<span class="cline-any cline-yes">
|
|
201
|
+
<span class="cline-any cline-yes">33x</span>
|
|
188
202
|
<span class="cline-any cline-neutral"> </span>
|
|
189
203
|
<span class="cline-any cline-neutral"> </span>
|
|
204
|
+
<span class="cline-any cline-yes">57x</span>
|
|
190
205
|
<span class="cline-any cline-neutral"> </span>
|
|
191
206
|
<span class="cline-any cline-neutral"> </span>
|
|
192
207
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -194,24 +209,26 @@
|
|
|
194
209
|
<span class="cline-any cline-neutral"> </span>
|
|
195
210
|
<span class="cline-any cline-neutral"> </span>
|
|
196
211
|
<span class="cline-any cline-neutral"> </span>
|
|
212
|
+
<span class="cline-any cline-yes">39x</span>
|
|
197
213
|
<span class="cline-any cline-neutral"> </span>
|
|
198
214
|
<span class="cline-any cline-neutral"> </span>
|
|
199
215
|
<span class="cline-any cline-neutral"> </span>
|
|
200
216
|
<span class="cline-any cline-neutral"> </span>
|
|
201
217
|
<span class="cline-any cline-neutral"> </span>
|
|
202
|
-
<span class="cline-any cline-no"> </span>
|
|
203
|
-
<span class="cline-any cline-neutral"> </span>
|
|
204
218
|
<span class="cline-any cline-neutral"> </span>
|
|
219
|
+
<span class="cline-any cline-no"> </span>
|
|
220
|
+
<span class="cline-any cline-yes">44x</span>
|
|
221
|
+
<span class="cline-any cline-yes">5x</span>
|
|
205
222
|
<span class="cline-any cline-neutral"> </span>
|
|
206
223
|
<span class="cline-any cline-neutral"> </span>
|
|
207
224
|
<span class="cline-any cline-neutral"> </span>
|
|
208
225
|
<span class="cline-any cline-neutral"> </span>
|
|
209
226
|
<span class="cline-any cline-neutral"> </span>
|
|
210
|
-
<span class="cline-any cline-yes">5x</span>
|
|
211
|
-
<span class="cline-any cline-yes">5x</span>
|
|
212
227
|
<span class="cline-any cline-neutral"> </span>
|
|
213
228
|
<span class="cline-any cline-neutral"> </span>
|
|
214
229
|
<span class="cline-any cline-neutral"> </span>
|
|
230
|
+
<span class="cline-any cline-yes">10x</span>
|
|
231
|
+
<span class="cline-any cline-yes">5x</span>
|
|
215
232
|
<span class="cline-any cline-neutral"> </span>
|
|
216
233
|
<span class="cline-any cline-neutral"> </span>
|
|
217
234
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -222,10 +239,13 @@
|
|
|
222
239
|
<span class="cline-any cline-neutral"> </span>
|
|
223
240
|
<span class="cline-any cline-neutral"> </span>
|
|
224
241
|
<span class="cline-any cline-neutral"> </span>
|
|
242
|
+
<span class="cline-any cline-yes">5x</span>
|
|
225
243
|
<span class="cline-any cline-neutral"> </span>
|
|
244
|
+
<span class="cline-any cline-no"> </span>
|
|
226
245
|
<span class="cline-any cline-neutral"> </span>
|
|
227
246
|
<span class="cline-any cline-neutral"> </span>
|
|
228
247
|
<span class="cline-any cline-neutral"> </span>
|
|
248
|
+
<span class="cline-any cline-no"> </span>
|
|
229
249
|
<span class="cline-any cline-neutral"> </span>
|
|
230
250
|
<span class="cline-any cline-neutral"> </span>
|
|
231
251
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -234,22 +254,22 @@
|
|
|
234
254
|
<span class="cline-any cline-no"> </span>
|
|
235
255
|
<span class="cline-any cline-neutral"> </span>
|
|
236
256
|
<span class="cline-any cline-neutral"> </span>
|
|
237
|
-
<span class="cline-any cline-neutral"> </span>
|
|
238
257
|
<span class="cline-any cline-no"> </span>
|
|
239
|
-
<span class="cline-any cline-
|
|
240
|
-
<span class="cline-any cline-
|
|
241
|
-
<span class="cline-any cline-
|
|
242
|
-
<span class="cline-any cline-neutral"> </span>
|
|
243
|
-
<span class="cline-any cline-neutral"> </span>
|
|
258
|
+
<span class="cline-any cline-no"> </span>
|
|
259
|
+
<span class="cline-any cline-no"> </span>
|
|
260
|
+
<span class="cline-any cline-no"> </span>
|
|
244
261
|
<span class="cline-any cline-neutral"> </span>
|
|
245
262
|
<span class="cline-any cline-neutral"> </span>
|
|
246
263
|
<span class="cline-any cline-neutral"> </span>
|
|
247
264
|
<span class="cline-any cline-no"> </span>
|
|
265
|
+
<span class="cline-any cline-no"> </span>
|
|
248
266
|
<span class="cline-any cline-neutral"> </span>
|
|
249
267
|
<span class="cline-any cline-no"> </span>
|
|
250
268
|
<span class="cline-any cline-no"> </span>
|
|
251
|
-
<span class="cline-any cline-
|
|
252
|
-
<span class="cline-any cline-
|
|
269
|
+
<span class="cline-any cline-no"> </span>
|
|
270
|
+
<span class="cline-any cline-no"> </span>
|
|
271
|
+
<span class="cline-any cline-no"> </span>
|
|
272
|
+
<span class="cline-any cline-no"> </span>
|
|
253
273
|
<span class="cline-any cline-neutral"> </span>
|
|
254
274
|
<span class="cline-any cline-no"> </span>
|
|
255
275
|
<span class="cline-any cline-no"> </span>
|
|
@@ -262,25 +282,32 @@
|
|
|
262
282
|
<span class="cline-any cline-no"> </span>
|
|
263
283
|
<span class="cline-any cline-neutral"> </span>
|
|
264
284
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { parseFileExports } from '@aiready/core';
|
|
265
|
-
import type { ExportInfo
|
|
266
|
-
import { inferDomain, extractExports } from './semantic-
|
|
285
|
+
import type { ExportInfo } from './types';
|
|
286
|
+
import { inferDomain, extractExports } from './semantic/domain-inference';
|
|
267
287
|
|
|
268
288
|
/**
|
|
269
|
-
* Extract exports using high-fidelity AST parsing across 5+ languages
|
|
289
|
+
* Extract exports using high-fidelity AST parsing across 5+ languages.
|
|
290
|
+
*
|
|
291
|
+
* @param content - File contents to parse.
|
|
292
|
+
* @param filePath - Path to the file for language detection and context.
|
|
293
|
+
* @param domainOptions - Optional configuration for domain detection.
|
|
294
|
+
* @param fileImports - Optional array of strings for resolving imports.
|
|
295
|
+
* @returns Array of high-fidelity export metadata.
|
|
296
|
+
* @lastUpdated 2026-03-18
|
|
270
297
|
*/
|
|
271
298
|
export function extractExportsWithAST(
|
|
272
299
|
content: string,
|
|
273
|
-
|
|
300
|
+
fi<span class="missing-if-branch" title="if path not taken" >I</span>lePath: string,<span class="branch-1 cbranch-no" title="branch not covered" ></span>
|
|
274
301
|
domainOptions?: { domainKeywords?: string[] },
|
|
275
302
|
fileImports?: string[]
|
|
276
|
-
):
|
|
303
|
+
): Exp<span class="cstat-no" title="statement not covered" >ortInfo[] {</span>
|
|
277
304
|
try {
|
|
278
305
|
const { exports: astExports } = parseFileExports(content, filePath);
|
|
279
306
|
|
|
280
307
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (astExports.length === 0 && <span class="branch-1 cbranch-no" title="branch not covered" >!isTestFile(filePath)) {</span>
|
|
281
308
|
// If AST fails to find anything, we still use regex as a last resort
|
|
282
309
|
// ONLY for unknown file types or very complex macros
|
|
283
|
-
|
|
310
|
+
return extractExports(content, filePath, domainOptions, fileImports);
|
|
284
311
|
}
|
|
285
312
|
|
|
286
313
|
return astExports.map((exp) => ({
|
|
@@ -296,14 +323,17 @@ export function extractExportsWithAST(
|
|
|
296
323
|
dependencies: exp.dependencies,
|
|
297
324
|
typeReferences: (exp as any).typeReferences,
|
|
298
325
|
}));
|
|
299
|
-
} catch
|
|
326
|
+
} catch {
|
|
300
327
|
// Ultimate fallback
|
|
301
328
|
<span class="cstat-no" title="statement not covered" > return extractExports(content, filePath, domainOptions, fileImports);</span>
|
|
302
329
|
}
|
|
303
330
|
}
|
|
304
331
|
|
|
305
332
|
/**
|
|
306
|
-
* Check if a file is a test, mock, or fixture file
|
|
333
|
+
* Check if a file is a test, mock, or fixture file.
|
|
334
|
+
*
|
|
335
|
+
* @param filePath - The path to the file to check.
|
|
336
|
+
* @returns True if the file matches test/mock patterns.
|
|
307
337
|
*/
|
|
308
338
|
export function isTestFile(filePath: string): boolean {
|
|
309
339
|
const lower = filePath.toLowerCase();
|
|
@@ -317,14 +347,14 @@ export function isTestFile(filePath: string): boolean {
|
|
|
317
347
|
lower.includes('-test') ||
|
|
318
348
|
lower.includes('/__mocks__/') ||
|
|
319
349
|
lower.includes('/mocks/') ||
|
|
320
|
-
lower.
|
|
350
|
+
lower.includ<span class="fstat-no" title="function not covered" >es('/fixtures/') ||</span>
|
|
321
351
|
lower.includes('.mock.') ||
|
|
322
352
|
lower.includes('.fixture.') ||
|
|
323
|
-
lower.includes('/
|
|
353
|
+
lower.includes('/tes<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >t-</span>utils/')</span>
|
|
324
354
|
);
|
|
325
355
|
}
|
|
326
356
|
|
|
327
|
-
|
|
357
|
+
/**<span class="cstat-no" title="statement not covered" ></span>
|
|
328
358
|
* Heuristic to check if all exports share a common entity noun
|
|
329
359
|
*/
|
|
330
360
|
export function <span class="fstat-no" title="function not covered" >allExportsShareEntityNoun(e</span>xports: ExportInfo[]): boolean {
|
|
@@ -333,22 +363,22 @@ export function <span class="fstat-no" title="function not covered" >allExportsS
|
|
|
333
363
|
const getEntityNoun = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(n</span>ame: string): string | null => {</span>
|
|
334
364
|
// Basic heuristic: last part of camelCase name often is the entity
|
|
335
365
|
// e.g. createOrder -> order, getUserProfile -> profile
|
|
336
|
-
// But we also look for common
|
|
366
|
+
// But we also<span class="cstat-no" title="statement not covered" > look for common do</span>main nouns in the middle
|
|
337
367
|
const commonNouns = <span class="cstat-no" title="statement not covered" >[</span>
|
|
338
|
-
'user'
|
|
339
|
-
'order'
|
|
368
|
+
<span class="cstat-no" title="statement not covered" > 'user',</span>
|
|
369
|
+
<span class="cstat-no" title="statement not covered" > 'order',<span class="cstat-no" title="statement not covered" ></span></span>
|
|
340
370
|
'product',
|
|
341
371
|
'session',
|
|
342
372
|
'account',
|
|
343
|
-
'receipt'
|
|
344
|
-
'token'
|
|
373
|
+
'receipt',<span class="cstat-no" title="statement not covered" ></span>
|
|
374
|
+
<span class="cstat-no" title="statement not covered" > 'token',</span>
|
|
345
375
|
];
|
|
346
376
|
const lower = <span class="cstat-no" title="statement not covered" >name.toLowerCase();</span>
|
|
347
|
-
|
|
348
|
-
<span class="cstat-no" title="statement not covered" > for (const noun of commonNouns) {
|
|
377
|
+
<span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
|
|
378
|
+
<span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" > for (const noun of commonNouns) {<span class="cstat-no" title="statement not covered" ></span></span></span>
|
|
349
379
|
<span class="cstat-no" title="statement not covered" > if (lower.includes(noun)) <span class="cstat-no" title="statement not covered" >return noun;</span></span>
|
|
350
|
-
}
|
|
351
|
-
|
|
380
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
381
|
+
<span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
|
|
352
382
|
// Fallback: split by capital letters and take the last part
|
|
353
383
|
const parts = <span class="cstat-no" title="statement not covered" >name.split(/(?=[A-Z])/);</span>
|
|
354
384
|
<span class="cstat-no" title="statement not covered" > return parts[parts.length - 1].toLowerCase();</span>
|
|
@@ -367,16 +397,16 @@ export function <span class="fstat-no" title="function not covered" >allExportsS
|
|
|
367
397
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
368
398
|
Code coverage generated by
|
|
369
399
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
370
|
-
at 2026-03-
|
|
400
|
+
at 2026-03-21T12:52:37.698Z
|
|
371
401
|
</div>
|
|
372
|
-
<script src="prettify.js"></script>
|
|
402
|
+
<script src="../prettify.js"></script>
|
|
373
403
|
<script>
|
|
374
404
|
window.onload = function () {
|
|
375
405
|
prettyPrint();
|
|
376
406
|
};
|
|
377
407
|
</script>
|
|
378
|
-
<script src="sorter.js"></script>
|
|
379
|
-
<script src="block-navigation.js"></script>
|
|
408
|
+
<script src="../sorter.js"></script>
|
|
409
|
+
<script src="../block-navigation.js"></script>
|
|
380
410
|
</body>
|
|
381
411
|
</html>
|
|
382
412
|
|