@noego/forge 0.1.24 → 0.1.27

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 (40) hide show
  1. package/README.md +2 -0
  2. package/dist/client.cjs +3 -3
  3. package/dist/client.cjs.map +1 -1
  4. package/dist/client.d.ts +25 -0
  5. package/dist/client.mjs +895 -824
  6. package/dist/client.mjs.map +1 -1
  7. package/dist/lint/cli.js +28 -2
  8. package/dist/lint/cli.js.map +1 -1
  9. package/dist/lint/config.js +19 -2
  10. package/dist/lint/config.js.map +1 -1
  11. package/dist/lint/route_parser.js +8 -30
  12. package/dist/lint/route_parser.js.map +1 -1
  13. package/dist/lint/rules/no_invalid_html_nesting.d.ts +3 -0
  14. package/dist/lint/rules/no_invalid_html_nesting.js +123 -0
  15. package/dist/lint/rules/no_invalid_html_nesting.js.map +1 -0
  16. package/dist/lint/tests/no_invalid_html_nesting.test.d.ts +1 -0
  17. package/dist/lint/tests/no_invalid_html_nesting.test.js +61 -0
  18. package/dist/lint/tests/no_invalid_html_nesting.test.js.map +1 -0
  19. package/dist/page.svelte-4uv4nQ2i.js.map +1 -1
  20. package/dist/page.svelte-CW8PJDdH.cjs.map +1 -1
  21. package/dist-ssr/{path-BqcF5dbs.js → path-2bYzpvRB.js} +3 -1
  22. package/dist-ssr/{path-BqcF5dbs.js.map → path-2bYzpvRB.js.map} +1 -1
  23. package/dist-ssr/{path-sxXxpB6R.cjs → path-DCxJMpj7.cjs} +3 -1
  24. package/dist-ssr/{path-sxXxpB6R.cjs.map → path-DCxJMpj7.cjs.map} +1 -1
  25. package/dist-ssr/server.cjs +20 -3
  26. package/dist-ssr/server.cjs.map +1 -1
  27. package/dist-ssr/server.js +20 -3
  28. package/dist-ssr/server.js.map +1 -1
  29. package/dist-ssr/shared.cjs +1 -1
  30. package/dist-ssr/shared.js +1 -1
  31. package/dist-ssr/static.cjs +1 -1
  32. package/dist-ssr/static.d.ts +4 -0
  33. package/dist-ssr/static.js +1 -1
  34. package/dist-ssr/test.d.ts +4 -0
  35. package/dist-ssr/{url_parser-DHQiBy_-.js → url_parser-B6dvK0DX.js} +36 -3
  36. package/dist-ssr/{url_parser-DHQiBy_-.js.map → url_parser-B6dvK0DX.js.map} +1 -1
  37. package/dist-ssr/{url_parser-BGkQselu.cjs → url_parser-D7ZqJUTw.cjs} +36 -3
  38. package/dist-ssr/{url_parser-BGkQselu.cjs.map → url_parser-D7ZqJUTw.cjs.map} +1 -1
  39. package/package.json +2 -2
  40. package/src/components/RecursiveRender.svelte +39 -18
package/dist/lint/cli.js CHANGED
@@ -78,8 +78,34 @@ export async function runLint(args) {
78
78
  console.log('Discovering files from route configuration...\n');
79
79
  const routeFiles = await getSvelteFilesFromRoutes(cwd);
80
80
  if (routeFiles.length > 0) {
81
- filesToLint = routeFiles;
82
- console.log(`Found ${filesToLint.length} component(s) from route configuration\n`);
81
+ console.log(`Found ${routeFiles.length} component(s) from route configuration\n`);
82
+ if (options.deps) {
83
+ // Collect dependencies for all route files
84
+ const seen = new Set();
85
+ const collector = new DependencyCollector({
86
+ recursive: true,
87
+ projectRoot: cwd,
88
+ });
89
+ for (const file of routeFiles) {
90
+ const result = await collector.collect(file);
91
+ for (const dep of result.dependencies) {
92
+ if (!seen.has(dep.file)) {
93
+ seen.add(dep.file);
94
+ filesToLint.push(dep.file);
95
+ }
96
+ }
97
+ if (result.circular.length > 0) {
98
+ console.warn(`⚠️ Warning: Detected ${result.circular.length} circular dependencies:`);
99
+ for (const circ of result.circular) {
100
+ console.warn(` ${path.basename(circ.from)} ⟷ ${path.basename(circ.to)}`);
101
+ }
102
+ console.warn('');
103
+ }
104
+ }
105
+ }
106
+ else {
107
+ filesToLint = routeFiles;
108
+ }
83
109
  }
84
110
  else {
85
111
  // Fallback: No route config found, use glob patterns
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/lint/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/lint/cli.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import noInvalidHtmlNesting from './rules/no_invalid_html_nesting.js';
1
2
  /**
2
3
  * Dynamically loads the lint configuration for zero-setup linting.
3
4
  * Supports TypeScript in Svelte files out of the box.
@@ -10,11 +11,20 @@ export async function loadLintConfig() {
10
11
  import('eslint-plugin-svelte').then((m) => m.default),
11
12
  import('globals').then((m) => m.default),
12
13
  ]);
14
+ // Custom forge ESLint plugin with HTML validation rules
15
+ const forgePlugin = {
16
+ rules: {
17
+ 'no-invalid-html-nesting': noInvalidHtmlNesting,
18
+ },
19
+ };
13
20
  return [
14
21
  js.configs.recommended,
15
22
  ...tseslint.configs.recommended,
16
23
  ...sveltePlugin.configs['flat/recommended'],
17
24
  {
25
+ plugins: {
26
+ forge: forgePlugin,
27
+ },
18
28
  languageOptions: {
19
29
  ecmaVersion: 2022,
20
30
  sourceType: 'module',
@@ -25,12 +35,15 @@ export async function loadLintConfig() {
25
35
  },
26
36
  rules: {
27
37
  // Svelte 5 specific rules
28
- 'svelte/valid-compile': 'error',
38
+ 'svelte/valid-compile': 'warn',
29
39
  // Disable rules that TypeScript handles
30
40
  'no-unused-vars': 'off',
31
41
  'no-undef': 'off',
32
- // Unused vars as warning, not error
42
+ // Style rules - warn, not error (these don't cause crashes)
33
43
  '@typescript-eslint/no-unused-vars': 'warn',
44
+ '@typescript-eslint/no-explicit-any': 'warn',
45
+ 'svelte/require-each-key': 'warn',
46
+ 'svelte/no-useless-mustaches': 'warn',
34
47
  },
35
48
  },
36
49
  {
@@ -40,6 +53,10 @@ export async function loadLintConfig() {
40
53
  parser: tseslint.parser,
41
54
  },
42
55
  },
56
+ rules: {
57
+ // HTML nesting validation for Svelte templates
58
+ 'forge/no-invalid-html-nesting': 'error',
59
+ },
43
60
  },
44
61
  {
45
62
  ignores: ['node_modules', 'dist', 'dist-ssr', '.svelte-kit'],
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lint/config.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,qCAAqC;IACrC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC9D,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAC3C,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAClD,MAAM,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACrD,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;KACzC,CAAC,CAAC;IAEH,OAAO;QACL,EAAE,CAAC,OAAO,CAAC,WAAW;QACtB,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW;QAC/B,GAAG,YAAY,CAAC,OAAO,CAAC,kBAAkB,CAAC;QAC3C;YACE,eAAe,EAAE;gBACf,WAAW,EAAE,IAAI;gBACjB,UAAU,EAAE,QAAQ;gBACpB,OAAO,EAAE;oBACP,GAAG,OAAO,CAAC,OAAO;oBAClB,GAAG,OAAO,CAAC,IAAI;iBAChB;aACF;YACD,KAAK,EAAE;gBACL,0BAA0B;gBAC1B,sBAAsB,EAAE,OAAO;gBAE/B,wCAAwC;gBACxC,gBAAgB,EAAE,KAAK;gBACvB,UAAU,EAAE,KAAK;gBAEjB,oCAAoC;gBACpC,mCAAmC,EAAE,MAAM;aAC5C;SACF;QACD;YACE,KAAK,EAAE,CAAC,aAAa,CAAC;YACtB,eAAe,EAAE;gBACf,aAAa,EAAE;oBACb,MAAM,EAAE,QAAQ,CAAC,MAAM;iBACxB;aACF;SACF;QACD;YACE,OAAO,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,CAAC;SAC7D;KACiB,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lint/config.ts"],"names":[],"mappings":"AACA,OAAO,oBAAoB,MAAM,oCAAoC,CAAC;AAEtE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,qCAAqC;IACrC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC9D,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAC3C,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAClD,MAAM,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACrD,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;KACzC,CAAC,CAAC;IAEH,wDAAwD;IACxD,MAAM,WAAW,GAAG;QAClB,KAAK,EAAE;YACL,yBAAyB,EAAE,oBAAoB;SAChD;KACF,CAAC;IAEF,OAAO;QACL,EAAE,CAAC,OAAO,CAAC,WAAW;QACtB,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW;QAC/B,GAAG,YAAY,CAAC,OAAO,CAAC,kBAAkB,CAAC;QAC3C;YACE,OAAO,EAAE;gBACP,KAAK,EAAE,WAAW;aACnB;YACD,eAAe,EAAE;gBACf,WAAW,EAAE,IAAI;gBACjB,UAAU,EAAE,QAAQ;gBACpB,OAAO,EAAE;oBACP,GAAG,OAAO,CAAC,OAAO;oBAClB,GAAG,OAAO,CAAC,IAAI;iBAChB;aACF;YACD,KAAK,EAAE;gBACL,0BAA0B;gBAC1B,sBAAsB,EAAE,MAAM;gBAE9B,wCAAwC;gBACxC,gBAAgB,EAAE,KAAK;gBACvB,UAAU,EAAE,KAAK;gBAEjB,4DAA4D;gBAC5D,mCAAmC,EAAE,MAAM;gBAC3C,oCAAoC,EAAE,MAAM;gBAC5C,yBAAyB,EAAE,MAAM;gBACjC,6BAA6B,EAAE,MAAM;aACtC;SACF;QACD;YACE,KAAK,EAAE,CAAC,aAAa,CAAC;YACtB,eAAe,EAAE;gBACf,aAAa,EAAE;oBACb,MAAM,EAAE,QAAQ,CAAC,MAAM;iBACxB;aACF;YACD,KAAK,EAAE;gBACL,+CAA+C;gBAC/C,+BAA+B,EAAE,OAAO;aACzC;SACF;QACD;YACE,OAAO,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,CAAC;SAC7D;KACiB,CAAC;AACvB,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import fs from 'fs/promises';
2
2
  import path from 'path';
3
3
  import yaml from 'js-yaml';
4
+ import { ConfigParser, YamlMerger } from '@noego/stitch';
4
5
  const NOEGO_CONFIG_FILENAMES = [
5
6
  'noego.yaml',
6
7
  'noego.yml',
@@ -115,39 +116,16 @@ function extractComponentsFromRoute(route, svelteFiles) {
115
116
  }
116
117
  }
117
118
  }
118
- async function parseYamlFile(filePath, processedFiles = new Set()) {
119
- // Avoid circular references
120
- if (processedFiles.has(filePath)) {
121
- return {};
122
- }
123
- processedFiles.add(filePath);
119
+ async function parseYamlFile(filePath) {
124
120
  const content = await fs.readFile(filePath, 'utf-8');
125
121
  const config = yaml.load(content);
126
- // Handle stitch files that reference other files
122
+ // Handle stitch files using @noego/stitch (same code path as runtime)
127
123
  if (config?.stitch && Array.isArray(config.stitch)) {
128
- const baseDir = path.dirname(filePath);
129
- const mergedConfig = { paths: {}, modules: [] };
130
- for (const stitchPattern of config.stitch) {
131
- // Resolve glob patterns
132
- const { glob } = await import('glob');
133
- const resolvedPattern = path.resolve(baseDir, stitchPattern);
134
- const files = await glob(resolvedPattern);
135
- for (const file of files) {
136
- const subConfig = await parseYamlFile(file, processedFiles);
137
- // Merge paths
138
- if (subConfig.paths) {
139
- mergedConfig.paths = { ...mergedConfig.paths, ...subConfig.paths };
140
- }
141
- // Merge x-fallback values
142
- if (subConfig['x-fallback-view'] && !mergedConfig['x-fallback-view']) {
143
- mergedConfig['x-fallback-view'] = subConfig['x-fallback-view'];
144
- }
145
- if (subConfig['x-fallback-layout'] && !mergedConfig['x-fallback-layout']) {
146
- mergedConfig['x-fallback-layout'] = subConfig['x-fallback-layout'];
147
- }
148
- }
149
- }
150
- return mergedConfig;
124
+ const configParser = new ConfigParser();
125
+ const yamlMerger = new YamlMerger();
126
+ const baseDir = configParser.getConfigDir(filePath);
127
+ const filePaths = await configParser.resolveFilePaths(config.stitch, baseDir);
128
+ return yamlMerger.mergeFiles(filePaths);
151
129
  }
152
130
  return config;
153
131
  }
@@ -1 +1 @@
1
- {"version":3,"file":"route_parser.js","sourceRoot":"","sources":["../../src/lint/route_parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route_parser.js","sourceRoot":"","sources":["../../src/lint/route_parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Rule } from 'eslint';
2
+ declare const rule: Rule.RuleModule;
3
+ export default rule;
@@ -0,0 +1,123 @@
1
+ /**
2
+ * HTML elements that are considered "interactive content".
3
+ * Per the HTML spec, interactive content cannot be nested inside other interactive content.
4
+ * https://html.spec.whatwg.org/multipage/dom.html#interactive-content
5
+ */
6
+ const INTERACTIVE_ELEMENTS = new Set([
7
+ 'a',
8
+ 'button',
9
+ 'details',
10
+ 'embed',
11
+ 'iframe',
12
+ 'label',
13
+ 'select',
14
+ 'textarea',
15
+ ]);
16
+ /**
17
+ * Elements that only accept phrasing content (cannot contain block-level elements).
18
+ * When a block element is placed inside these, the browser will "repair" the DOM.
19
+ */
20
+ const NON_PHRASING_ELEMENTS = new Set([
21
+ 'address',
22
+ 'article',
23
+ 'aside',
24
+ 'blockquote',
25
+ 'details',
26
+ 'dialog',
27
+ 'dd',
28
+ 'div',
29
+ 'dl',
30
+ 'dt',
31
+ 'fieldset',
32
+ 'figcaption',
33
+ 'figure',
34
+ 'footer',
35
+ 'form',
36
+ 'h1',
37
+ 'h2',
38
+ 'h3',
39
+ 'h4',
40
+ 'h5',
41
+ 'h6',
42
+ 'header',
43
+ 'hgroup',
44
+ 'hr',
45
+ 'li',
46
+ 'main',
47
+ 'nav',
48
+ 'ol',
49
+ 'p',
50
+ 'pre',
51
+ 'section',
52
+ 'table',
53
+ 'ul',
54
+ ]);
55
+ /**
56
+ * Map of ancestor element -> set of elements that cannot appear as descendants.
57
+ * Based on the HTML content model specification.
58
+ */
59
+ const INVALID_ANCESTOR_DESCENDANTS = {
60
+ // <a> cannot contain interactive content
61
+ a: INTERACTIVE_ELEMENTS,
62
+ // <button> cannot contain interactive content
63
+ button: INTERACTIVE_ELEMENTS,
64
+ // <p> cannot contain block/non-phrasing elements
65
+ p: NON_PHRASING_ELEMENTS,
66
+ // <form> cannot be nested
67
+ form: new Set(['form']),
68
+ };
69
+ function getTagName(node) {
70
+ if (node.kind !== 'html')
71
+ return null;
72
+ // SvelteElement name can be a SvelteName object or a string
73
+ if (typeof node.name === 'string')
74
+ return node.name;
75
+ if (node.name && typeof node.name.name === 'string')
76
+ return node.name.name;
77
+ return null;
78
+ }
79
+ const rule = {
80
+ meta: {
81
+ type: 'problem',
82
+ docs: {
83
+ description: 'Disallow invalid HTML element nesting that causes browser DOM repair and breaks Svelte component structure',
84
+ },
85
+ schema: [],
86
+ messages: {
87
+ invalidNesting: '<{{child}}> cannot be a descendant of <{{ancestor}}>. The browser will repair the HTML, which breaks Svelte\'s assumptions about component structure. https://svelte.dev/e/node_invalid_placement',
88
+ },
89
+ },
90
+ create(context) {
91
+ return {
92
+ SvelteElement(node) {
93
+ const childTag = getTagName(node);
94
+ if (!childTag)
95
+ return;
96
+ // Walk up all ancestors looking for invalid nesting
97
+ const ancestors = context.sourceCode.getAncestors(node);
98
+ for (let i = ancestors.length - 1; i >= 0; i--) {
99
+ const ancestor = ancestors[i];
100
+ if (ancestor.type !== 'SvelteElement')
101
+ continue;
102
+ const ancestorTag = getTagName(ancestor);
103
+ if (!ancestorTag)
104
+ continue;
105
+ const forbidden = INVALID_ANCESTOR_DESCENDANTS[ancestorTag];
106
+ if (forbidden && forbidden.has(childTag)) {
107
+ context.report({
108
+ node,
109
+ messageId: 'invalidNesting',
110
+ data: {
111
+ child: childTag,
112
+ ancestor: ancestorTag,
113
+ },
114
+ });
115
+ break; // Report only the nearest invalid ancestor
116
+ }
117
+ }
118
+ },
119
+ };
120
+ },
121
+ };
122
+ export default rule;
123
+ //# sourceMappingURL=no_invalid_html_nesting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no_invalid_html_nesting.js","sourceRoot":"","sources":["../../../src/lint/rules/no_invalid_html_nesting.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,61 @@
1
+ import path from 'path';
2
+ import { fileURLToPath } from 'url';
3
+ import { describe, it, expect } from 'vitest';
4
+ import { loadLintConfig } from '../config';
5
+ const __filename = fileURLToPath(import.meta.url);
6
+ const __dirname = path.dirname(__filename);
7
+ const FIXTURES = path.join(__dirname, 'fixtures/svelte/errors');
8
+ describe('forge/no-invalid-html-nesting', () => {
9
+ it('should detect invalid HTML nesting in Svelte files', async () => {
10
+ const { ESLint } = await import('eslint');
11
+ const config = await loadLintConfig();
12
+ const eslint = new ESLint({
13
+ overrideConfigFile: true,
14
+ overrideConfig: config,
15
+ });
16
+ const results = await eslint.lintFiles([
17
+ path.join(FIXTURES, 'InvalidNesting.svelte'),
18
+ ]);
19
+ const messages = results[0].messages.filter((m) => m.ruleId === 'forge/no-invalid-html-nesting');
20
+ // Should find: <a> in <a>, <button> in <a>, <a> in <button>, <form> in <form>
21
+ expect(messages.length).toBeGreaterThanOrEqual(4);
22
+ const messageTexts = messages.map((m) => m.message);
23
+ // <a> inside <a>
24
+ expect(messageTexts.some((m) => m.includes('<a>') && m.includes('descendant of <a>'))).toBe(true);
25
+ // <button> inside <a>
26
+ expect(messageTexts.some((m) => m.includes('<button>') && m.includes('descendant of <a>'))).toBe(true);
27
+ // <a> inside <button>
28
+ expect(messageTexts.some((m) => m.includes('<a>') && m.includes('descendant of <button>'))).toBe(true);
29
+ // <form> inside <form>
30
+ expect(messageTexts.some((m) => m.includes('<form>') && m.includes('descendant of <form>'))).toBe(true);
31
+ });
32
+ it('should not report errors for valid HTML nesting', async () => {
33
+ const { ESLint } = await import('eslint');
34
+ const config = await loadLintConfig();
35
+ const eslint = new ESLint({
36
+ overrideConfigFile: true,
37
+ overrideConfig: config,
38
+ });
39
+ const results = await eslint.lintFiles([
40
+ path.join(FIXTURES, 'ValidNesting.svelte'),
41
+ ]);
42
+ const messages = results[0].messages.filter((m) => m.ruleId === 'forge/no-invalid-html-nesting');
43
+ expect(messages).toHaveLength(0);
44
+ });
45
+ it('should report errors as severity 2 (error)', async () => {
46
+ const { ESLint } = await import('eslint');
47
+ const config = await loadLintConfig();
48
+ const eslint = new ESLint({
49
+ overrideConfigFile: true,
50
+ overrideConfig: config,
51
+ });
52
+ const results = await eslint.lintFiles([
53
+ path.join(FIXTURES, 'InvalidNesting.svelte'),
54
+ ]);
55
+ const messages = results[0].messages.filter((m) => m.ruleId === 'forge/no-invalid-html-nesting');
56
+ for (const msg of messages) {
57
+ expect(msg.severity).toBe(2);
58
+ }
59
+ });
60
+ });
61
+ //# sourceMappingURL=no_invalid_html_nesting.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no_invalid_html_nesting.test.js","sourceRoot":"","sources":["../../../src/lint/tests/no_invalid_html_nesting.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"page.svelte-4uv4nQ2i.js","sources":["../node_modules/path-to-regex/index.js","../src/parser/path.ts","../src/client/page.svelte.ts"],"sourcesContent":["module.exports = Regex;\n\nif (typeof window !== 'undefined') {\n\twindow.pathToRegex = Regex;\n}\n\nconst escapeRe = /([$.+*?=!:[\\]{}(|)/\\\\])/g;\n\n/**\n * defaultParam - simplistic polyfill for default function parament\n * @param {any} [obj]\n * @param {any} defaultValue\n * @return {any}\n */\nfunction defaultParam(obj, defaultValue) {\n\treturn typeof obj !== 'undefined' ? obj : defaultValue;\n}\n\n/**\n * Класс Regex [description].\n * @constructor\n * @param {Object} options [description].\n */\nfunction Regex(path, options) {\n\tthis.init(path, options);\n\treturn this;\n}\n\nRegex.prototype.init = function (\n\tpath = \"/\",\n\toptions = {}\n) {\n\tthis.options = {\n\t\tcase: typeof options.case === \"boolean\" ? options.case : true,\n\t\tseparators: typeof options.separators === \"string\" ? options.separators : \"/\",\n\t\tfromStart: typeof options.fromStart === \"boolean\" ? options.fromStart : true,\n\t\ttoEnd: typeof options.toEnd === \"boolean\" ? options.toEnd : true\n\t};\n\tthis.options.separator = \"[\" + this.escape(this.options.separators) + \"]\";\n\n\tif (path instanceof RegExp) {\n\t\tthis.restructureRegExp(path);\n\t} else if (typeof path === \"string\") {\n\t\tthis.restructurePath(path);\n\t}\n};\n\n/**\n * Метод преобразует строку с шаблоном пути, включающим в себя строковое представление регулярных выражений\n * и указадели на идентификаторы ключей в стиле Express.js в регулярное выражение\n * @param {string} path Строка содержащая шаблон пути. Может содержать в себе регулярные выражения и объявление ключей типа :id. Поведение имитирует аналогичный функционал библиотеки Express.js v.5.x\n */\nRegex.prototype.restructureRegExp = function (regexp) {\n\tregexp = defaultParam(regexp, /.*/);\n\tthis.keys = [];\n\tthis.path = undefined;\n\tthis.regstr = (\"\" + regexp);\n\tthis.regstr = this.regstr.substr(1, this.regstr.length - 2);\n\tthis.regexp = new RegExp(\n\t\tthis.regstr,\n\t\tthis.options.case ? \"\" : \"i\"\n\t);\n\n}\n\n/**\n * Метод преобразует строку с шаблоном пути, включающим в себя строковое представление регулярных выражений\n * и указадели на идентификаторы ключей в стиле Express.js в регулярное выражение\n * @param {string} path Строка содержащая шаблон пути. Может содержать в себе регулярные выражения и объявление ключей типа :id. Поведение имитирует аналогичный функционал библиотеки Express.js v.5.x\n */\nRegex.prototype.restructurePath = function (path) {\n\tpath = defaultParam(path, '/');\n\tthis.keys = [];\n\tthis.path = path;\n\tthis.regstr = \"\";\n\n\tconst separator = this.options.separator;\n\tconst notseparator = \"[^\" + this.escape(this.options.separators) + \"]\";\n\n\tlet offset = 0;\n\tlet count = 0;\n\t// 11. REGEXP toEnd[true]: /^[\\/]?foo\\/(.*?)[\\/]?$/\n\t// 11. REGEXP toEnd[false]: /^[\\/]?foo\\/(.*?)([\\/]|[\\/]?$)/i\n\n\tpath = path.replace(new RegExp(\"^\" + separator + \"*(.*?)\" + separator + \"*$\"), \"$1\");\n\t//path += this.options.separators[0];\n\n\tpath.replace(/:([a-z]\\w*)(\\((.*?)\\))?([\\?\\*\\+])?/gi, (str, key, a, pat, quant, index, string) => {\n\t\t// console.log(\"-----------------------------\");\n\t\t// console.log(\"str:\", str);\n\t\t// console.log(\"key:\", key);\n\t\t// console.log(\"a:\", a);\n\t\t// console.log(\"pat:\", pat);\n\t\t// console.log(\"quant:\", quant);\n\t\t// console.log(\"index:\", index);\n\t\t// console.log(\"string:\", string);\n\t\tcount++;\n\n\n\n\t\tconst isMultiple = (quant === \"*\" || quant === \"+\") ? true : false;\n\t\tconst isExtrude = /^(\\[[^\\[\\]]+\\]|\\([^\\(\\)]+\\)|\\.|\\\\.)[\\+\\*]$/.test(pat) ? true : false;\n\n\t\tlet isRequired = (quant !== \"*\" && quant !== \"?\") ? true : false;\n\t\tif (!quant && pat && /^(\\[[^\\[\\]]+\\]|\\([^\\(\\)]+\\)|\\.|\\\\.)[\\*\\?]?$/.test(pat)) isRequired = false;\n\n\t\tconst quantifier = quant ? quant : \"\";\n\t\t// console.log(\"isMultiple\", isMultiple);\n\t\t// console.log(\"isRequired\", isRequired);\n\n\t\t// const startChar = path.charAt(index-1);\n\t\tconst isStarted = (!index) ? true : this.separator(path.charAt(index - 1));\n\t\tconst isStoped = (index + str.length >= path.length) ? true : this.separator(path.charAt(index + str.length));\n\t\tconst isToken = isStarted && isStoped;\n\n\t\tif (index > offset) {\n\t\t\tconst text = path.substring(offset, index);\n\t\t\tconst regstr = this.escape(text);\n\t\t\tthis.regstr += regstr;\n\t\t}\n\n\t\tif (isToken && index) {\n\t\t\tif (!isMultiple || !isRequired) {\n\t\t\t\tif (pat && !isExtrude) {\n\t\t\t\t\tthis.regstr += \"?\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t//console.log(\"isStarted\", isStarted);\n\t\t//console.log(\"isStoped\", isStoped);\n\t\t//console.log(\"isToken\", isToken);\n\t\t//console.log(\"this.regstr 1:\", this.regstr);\n\n\t\tconst pattern = (pat ? pat : notseparator + \"+\");\n\n\t\tconst regstr =\n\t\t\tisMultiple ?\n\t\t\t\tisToken ?\n\t\t\t\t\tisExtrude ?\n\t\t\t\t\t\t\"((?:\" + separator + \"?\" + pattern + \")\" + quantifier + \")\" :\n\t\t\t\t\t\t\"((?:\" + separator + \"\" + pattern + \")\" + quantifier + \")\" :\n\t\t\t\t\t\"((?:\" + notseparator + \"*\" + pattern + \")\" + quantifier + \")\" :\n\t\t\t\tisToken ?\n\t\t\t\t\tisExtrude ?\n\t\t\t\t\t\t\"(\" + pattern + \"?)\" + quantifier :\n\t\t\t\t\t\t\"(\" + pattern + \")\" + quantifier :\n\t\t\t\t\t\"(\" + pattern + \")\" + quantifier;\n\n\t\tthis.regstr += regstr;\n\n\t\tconst data = {\n\t\t\tkey: key,\n\t\t\tmultiple: isMultiple,\n\t\t\trequired: isRequired,\n\t\t\tindex: count,\n\t\t\tpattern: pattern\n\t\t};\n\t\tif (isMultiple)\n\t\t\tdata.regexp = new RegExp(pattern, this.options.case ? \"g\" : \"gi\");\n\n\t\tthis.keys.push(data);\n\n\t\toffset = index + str.length;\n\t\treturn str;\n\t});\n\n\tif (offset < path.length - 1) {\n\t\tconst text = path.substring(offset);\n\t\tconst regstr = this.escape(text);\n\t\tthis.regstr += regstr;\n\t}\n\n\tthis.regexp = new RegExp(\n\t\t(this.options.fromStart ? \"^\" : \"\") +\n\t\tseparator + \"?\" +\n\t\tthis.regstr +\n\t\t(this.options.toEnd\n\t\t\t?\n\t\t\tseparator + \"?\" + \"$\"\n\t\t\t:\n\t\t\t\"(\" + separator + \"|\" + separator + \"?\" + \"$\" + \")\"\n\t\t),\n\t\tthis.options.case ? \"\" : \"i\"\n\t);\n}\n\n\n\n/**\n * Метод экранирует все спец символы указанные в глобальной для модуля, переменной escapeRe\n * @param {string} text Любая строка\n * @return {string} Строка text, в которой все символы указанные в переменной escapeRe заэкранированы\n */\nRegex.prototype.escape = function (text) {\n\treturn text.replace(escapeRe, s => {\n\t\treturn \"\\\\\" + s\n\t});\n}\n\n/**\n * Метод проверяет является ли char одним из разделителей указанных в this.options.separators\n * @param {string} char Cтрока содержащая в себе проверяемый символ (длинна строки должна быть равна 1)\n * @return {boolean} Если проверяемый символ является одним из символов указанных в this.options.separators то true иначе false\n */\nRegex.prototype.separator = function (char) {\n\treturn !!(this.options.separators.indexOf(char) + 1);\n}\n\n\n\nRegex.prototype.match = function (path) {\n\t// console.log(\"match 01\");\n\n\tif (typeof path !== \"string\") return;\n\n\tconst reseparator = this.options.separator;\n\tconst separator = this.options.separators[0];\n\tpath = path.replace(new RegExp(\"^\" + reseparator + \"*(.*?)\" + reseparator + \"*$\"), separator + \"$1\" + separator);\n\n\t// console.log(\"match 02\");\n\tconst result = path.match(this.regexp);\n\t// console.log(\"match 03\");\n\n\tif (!result) return;\n\n\t// console.log(\"match 04\");\n\tconst data = {};\n\n\t// console.log(\"match 05\");\n\tthis.keys.forEach(item => {\n\t\t// console.log(\"match foreach 01\");\n\t\tlet isMultiple = false;\n\n\t\tif (data[item.key])\n\t\t\tisMultiple = true;\n\n\n\t\tif (data[item.key] && !Array.isArray(data[item.key])) {\n\t\t\tisMultiple = true;\n\t\t\tdata[item.key] = [data[item.key]];\n\t\t}\n\n\t\tif (item.multiple && !data[item.key]) {\n\t\t\tisMultiple = true;\n\t\t\tdata[item.key] = [];\n\t\t}\n\n\t\tlet value = result[item.index] ? result[item.index] : undefined;\n\n\t\tif (!isMultiple && !item.multiple) {\n\t\t\tdata[item.key] = value;\n\t\t\treturn;\n\t\t}\n\n\t\tif (isMultiple && !item.multiple && result[item.index]) {\n\t\t\tdata[item.key].push(value);\n\t\t\treturn;\n\t\t}\n\n\t\tif (result[item.index])\n\t\t\tresult[item.index].replace(item.regexp, str => {\n\t\t\t\tif (str) data[item.key].push(\n\t\t\t\t\tstr.replace(new RegExp(reseparator + \"*$\"), \"\")\n\t\t\t\t);\n\t\t\t});\n\n\t});\n\t// console.log(\"match 06\");\n\treturn data;\n};\n","import type {IRoute} from \"./IRoute\"\n\n/**\n * Convert OpenAPI‐style `{name[:pattern][modifier]}` into\n * path-to-regexp’s `:name(pattern)?*+` syntax, while\n * allowing literal `{` or `}` inside the regex.\n */\nexport function convertBraces(path: string): string {\n let out = '';\n let i = 0;\n\n while (i < path.length) {\n if (path[i] === '{') {\n // start of a parameter spec\n let start = i;\n i++;\n // find the matching closing '}' that balances this one\n let depth = 1;\n while (i < path.length && depth > 0) {\n if (path[i] === '\\\\') {\n // skip escaped chars\n i += 2;\n } else {\n if (path[i] === '{') depth++;\n else if (path[i] === '}') depth--;\n i++;\n }\n }\n if (depth !== 0) {\n throw new Error(`Unmatched '{' in path: ${path}`);\n }\n const segment = path.slice(start + 1, i - 1);\n // A segment is one of the following forms:\n // 1. \"name\" – simple param, no pattern, no modifier\n // 2. \"name+\" / \"name*\" / \"name?\" – param with modifier only\n // 3. \"name:regex\" – explicit pattern (may itself contain +, *, ?)\n // In the third case we must **not** interpret a trailing +, * or ? as a\n // modifier because it belongs to the user-supplied regex. The original\n // implementation used a single regexp with an optional modifier group,\n // which incorrectly split patterns such as `.*` or `.+` into two parts\n // (`.` as the pattern and `*` or `+` as the modifier). Instead we now\n // split on the first ':'; if a pattern is present we treat the rest of\n // the segment verbatim.\n\n const colonIdx = segment.indexOf(':');\n let name: string;\n let pattern: string | undefined;\n let modifier: string | undefined;\n\n if (colonIdx === -1) {\n // Forms 1 & 2 – no explicit pattern, so a trailing modifier is allowed.\n const m = segment.match(/^([^?*+]+)([?*+])?$/);\n if (!m) {\n throw new Error(`Invalid parameter segment: {${segment}}`);\n }\n [, name, modifier] = m as RegExpMatchArray & [string, string, string?];\n } else {\n // Form 3 – everything after the first ':' is the pattern.\n name = segment.slice(0, colonIdx);\n pattern = segment.slice(colonIdx + 1);\n // No modifier allowed when an explicit pattern is used.\n }\n\n out += `:${name}`;\n if (pattern) out += `(${pattern})`;\n if (modifier) out += modifier;\n } else {\n // ordinary char, copy (also handles escaped chars)\n out += path[i++];\n }\n }\n\n return out;\n}\n\n\nexport function parsePathConfig(\n path:string,\n method:string,\n path_config:any,\n inheritedMiddleware: string[] = []\n):IRoute {\n const rawLayout = path_config?.['x-layout'];\n const layout = (typeof rawLayout === 'string') ? [rawLayout]\n : (Array.isArray(rawLayout) ? rawLayout : undefined);\n const view = path_config['x-view']\n const summary = path_config.summary\n const query = path_config.query\n const body = path_config.body\n const parameters = path_config.parameters\n const responses = path_config.responses\n const routeMiddleware = Array.isArray(path_config['x-middleware']) ? path_config['x-middleware'] : []\n const middleware = [...inheritedMiddleware, ...routeMiddleware]\n\n return {\n summary,\n path: convertBraces(path),\n method,\n layout,\n middleware,\n view,\n responses,\n parameters,\n query,\n body\n }\n}\n","import type { IPage } from \"../routing/page\";\nimport path_to_regex from \"path-to-regex\"\nimport {convertBraces} from \"../parser/path\";\nimport { writable } from 'svelte/store';\n\nexport const page = writable<IPage>({\n url: '',\n pathname:'',\n params: {},\n query:{},\n poll: async () => false, // Placeholder - will be set by navigation.svelte.ts\n});\n\n\nif(typeof window !== 'undefined') {\n page.update(p => {\n p.url = window.location.href;\n p.pathname = window.location.pathname;\n Object.assign(p.query, Object.fromEntries(new URLSearchParams(window.location.search)));\n p.params = {};\n return p;\n });\n}\n\n\nconst patterns:Record<string,any> = {}\nexport function shadowUrl(pattern:string, url: string){\n if(!patterns[pattern]) {\n patterns[pattern] = new path_to_regex(convertBraces(pattern))\n }\n const match = patterns[pattern].match(url)\n if(match) {\n return match\n }else{\n return {}\n }\n}\n"],"names":["pathToRegex","Regex","escapeRe","defaultParam","obj","defaultValue","path","options","regexp","separator","notseparator","offset","count","str","key","a","pat","quant","index","string","isMultiple","isExtrude","isRequired","quantifier","isStarted","isStoped","isToken","text","regstr","pattern","data","s","char","reseparator","result","item","value","convertBraces","out","i","start","depth","segment","colonIdx","name","modifier","m","page","writable","p","patterns","shadowUrl","url","path_to_regex","match"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"page.svelte-4uv4nQ2i.js","sources":["../node_modules/path-to-regex/index.js","../src/parser/path.ts","../src/client/page.svelte.ts"],"sourcesContent":["module.exports = Regex;\n\nif (typeof window !== 'undefined') {\n\twindow.pathToRegex = Regex;\n}\n\nconst escapeRe = /([$.+*?=!:[\\]{}(|)/\\\\])/g;\n\n/**\n * defaultParam - simplistic polyfill for default function parament\n * @param {any} [obj]\n * @param {any} defaultValue\n * @return {any}\n */\nfunction defaultParam(obj, defaultValue) {\n\treturn typeof obj !== 'undefined' ? obj : defaultValue;\n}\n\n/**\n * Класс Regex [description].\n * @constructor\n * @param {Object} options [description].\n */\nfunction Regex(path, options) {\n\tthis.init(path, options);\n\treturn this;\n}\n\nRegex.prototype.init = function (\n\tpath = \"/\",\n\toptions = {}\n) {\n\tthis.options = {\n\t\tcase: typeof options.case === \"boolean\" ? options.case : true,\n\t\tseparators: typeof options.separators === \"string\" ? options.separators : \"/\",\n\t\tfromStart: typeof options.fromStart === \"boolean\" ? options.fromStart : true,\n\t\ttoEnd: typeof options.toEnd === \"boolean\" ? options.toEnd : true\n\t};\n\tthis.options.separator = \"[\" + this.escape(this.options.separators) + \"]\";\n\n\tif (path instanceof RegExp) {\n\t\tthis.restructureRegExp(path);\n\t} else if (typeof path === \"string\") {\n\t\tthis.restructurePath(path);\n\t}\n};\n\n/**\n * Метод преобразует строку с шаблоном пути, включающим в себя строковое представление регулярных выражений\n * и указадели на идентификаторы ключей в стиле Express.js в регулярное выражение\n * @param {string} path Строка содержащая шаблон пути. Может содержать в себе регулярные выражения и объявление ключей типа :id. Поведение имитирует аналогичный функционал библиотеки Express.js v.5.x\n */\nRegex.prototype.restructureRegExp = function (regexp) {\n\tregexp = defaultParam(regexp, /.*/);\n\tthis.keys = [];\n\tthis.path = undefined;\n\tthis.regstr = (\"\" + regexp);\n\tthis.regstr = this.regstr.substr(1, this.regstr.length - 2);\n\tthis.regexp = new RegExp(\n\t\tthis.regstr,\n\t\tthis.options.case ? \"\" : \"i\"\n\t);\n\n}\n\n/**\n * Метод преобразует строку с шаблоном пути, включающим в себя строковое представление регулярных выражений\n * и указадели на идентификаторы ключей в стиле Express.js в регулярное выражение\n * @param {string} path Строка содержащая шаблон пути. Может содержать в себе регулярные выражения и объявление ключей типа :id. Поведение имитирует аналогичный функционал библиотеки Express.js v.5.x\n */\nRegex.prototype.restructurePath = function (path) {\n\tpath = defaultParam(path, '/');\n\tthis.keys = [];\n\tthis.path = path;\n\tthis.regstr = \"\";\n\n\tconst separator = this.options.separator;\n\tconst notseparator = \"[^\" + this.escape(this.options.separators) + \"]\";\n\n\tlet offset = 0;\n\tlet count = 0;\n\t// 11. REGEXP toEnd[true]: /^[\\/]?foo\\/(.*?)[\\/]?$/\n\t// 11. REGEXP toEnd[false]: /^[\\/]?foo\\/(.*?)([\\/]|[\\/]?$)/i\n\n\tpath = path.replace(new RegExp(\"^\" + separator + \"*(.*?)\" + separator + \"*$\"), \"$1\");\n\t//path += this.options.separators[0];\n\n\tpath.replace(/:([a-z]\\w*)(\\((.*?)\\))?([\\?\\*\\+])?/gi, (str, key, a, pat, quant, index, string) => {\n\t\t// console.log(\"-----------------------------\");\n\t\t// console.log(\"str:\", str);\n\t\t// console.log(\"key:\", key);\n\t\t// console.log(\"a:\", a);\n\t\t// console.log(\"pat:\", pat);\n\t\t// console.log(\"quant:\", quant);\n\t\t// console.log(\"index:\", index);\n\t\t// console.log(\"string:\", string);\n\t\tcount++;\n\n\n\n\t\tconst isMultiple = (quant === \"*\" || quant === \"+\") ? true : false;\n\t\tconst isExtrude = /^(\\[[^\\[\\]]+\\]|\\([^\\(\\)]+\\)|\\.|\\\\.)[\\+\\*]$/.test(pat) ? true : false;\n\n\t\tlet isRequired = (quant !== \"*\" && quant !== \"?\") ? true : false;\n\t\tif (!quant && pat && /^(\\[[^\\[\\]]+\\]|\\([^\\(\\)]+\\)|\\.|\\\\.)[\\*\\?]?$/.test(pat)) isRequired = false;\n\n\t\tconst quantifier = quant ? quant : \"\";\n\t\t// console.log(\"isMultiple\", isMultiple);\n\t\t// console.log(\"isRequired\", isRequired);\n\n\t\t// const startChar = path.charAt(index-1);\n\t\tconst isStarted = (!index) ? true : this.separator(path.charAt(index - 1));\n\t\tconst isStoped = (index + str.length >= path.length) ? true : this.separator(path.charAt(index + str.length));\n\t\tconst isToken = isStarted && isStoped;\n\n\t\tif (index > offset) {\n\t\t\tconst text = path.substring(offset, index);\n\t\t\tconst regstr = this.escape(text);\n\t\t\tthis.regstr += regstr;\n\t\t}\n\n\t\tif (isToken && index) {\n\t\t\tif (!isMultiple || !isRequired) {\n\t\t\t\tif (pat && !isExtrude) {\n\t\t\t\t\tthis.regstr += \"?\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t//console.log(\"isStarted\", isStarted);\n\t\t//console.log(\"isStoped\", isStoped);\n\t\t//console.log(\"isToken\", isToken);\n\t\t//console.log(\"this.regstr 1:\", this.regstr);\n\n\t\tconst pattern = (pat ? pat : notseparator + \"+\");\n\n\t\tconst regstr =\n\t\t\tisMultiple ?\n\t\t\t\tisToken ?\n\t\t\t\t\tisExtrude ?\n\t\t\t\t\t\t\"((?:\" + separator + \"?\" + pattern + \")\" + quantifier + \")\" :\n\t\t\t\t\t\t\"((?:\" + separator + \"\" + pattern + \")\" + quantifier + \")\" :\n\t\t\t\t\t\"((?:\" + notseparator + \"*\" + pattern + \")\" + quantifier + \")\" :\n\t\t\t\tisToken ?\n\t\t\t\t\tisExtrude ?\n\t\t\t\t\t\t\"(\" + pattern + \"?)\" + quantifier :\n\t\t\t\t\t\t\"(\" + pattern + \")\" + quantifier :\n\t\t\t\t\t\"(\" + pattern + \")\" + quantifier;\n\n\t\tthis.regstr += regstr;\n\n\t\tconst data = {\n\t\t\tkey: key,\n\t\t\tmultiple: isMultiple,\n\t\t\trequired: isRequired,\n\t\t\tindex: count,\n\t\t\tpattern: pattern\n\t\t};\n\t\tif (isMultiple)\n\t\t\tdata.regexp = new RegExp(pattern, this.options.case ? \"g\" : \"gi\");\n\n\t\tthis.keys.push(data);\n\n\t\toffset = index + str.length;\n\t\treturn str;\n\t});\n\n\tif (offset < path.length - 1) {\n\t\tconst text = path.substring(offset);\n\t\tconst regstr = this.escape(text);\n\t\tthis.regstr += regstr;\n\t}\n\n\tthis.regexp = new RegExp(\n\t\t(this.options.fromStart ? \"^\" : \"\") +\n\t\tseparator + \"?\" +\n\t\tthis.regstr +\n\t\t(this.options.toEnd\n\t\t\t?\n\t\t\tseparator + \"?\" + \"$\"\n\t\t\t:\n\t\t\t\"(\" + separator + \"|\" + separator + \"?\" + \"$\" + \")\"\n\t\t),\n\t\tthis.options.case ? \"\" : \"i\"\n\t);\n}\n\n\n\n/**\n * Метод экранирует все спец символы указанные в глобальной для модуля, переменной escapeRe\n * @param {string} text Любая строка\n * @return {string} Строка text, в которой все символы указанные в переменной escapeRe заэкранированы\n */\nRegex.prototype.escape = function (text) {\n\treturn text.replace(escapeRe, s => {\n\t\treturn \"\\\\\" + s\n\t});\n}\n\n/**\n * Метод проверяет является ли char одним из разделителей указанных в this.options.separators\n * @param {string} char Cтрока содержащая в себе проверяемый символ (длинна строки должна быть равна 1)\n * @return {boolean} Если проверяемый символ является одним из символов указанных в this.options.separators то true иначе false\n */\nRegex.prototype.separator = function (char) {\n\treturn !!(this.options.separators.indexOf(char) + 1);\n}\n\n\n\nRegex.prototype.match = function (path) {\n\t// console.log(\"match 01\");\n\n\tif (typeof path !== \"string\") return;\n\n\tconst reseparator = this.options.separator;\n\tconst separator = this.options.separators[0];\n\tpath = path.replace(new RegExp(\"^\" + reseparator + \"*(.*?)\" + reseparator + \"*$\"), separator + \"$1\" + separator);\n\n\t// console.log(\"match 02\");\n\tconst result = path.match(this.regexp);\n\t// console.log(\"match 03\");\n\n\tif (!result) return;\n\n\t// console.log(\"match 04\");\n\tconst data = {};\n\n\t// console.log(\"match 05\");\n\tthis.keys.forEach(item => {\n\t\t// console.log(\"match foreach 01\");\n\t\tlet isMultiple = false;\n\n\t\tif (data[item.key])\n\t\t\tisMultiple = true;\n\n\n\t\tif (data[item.key] && !Array.isArray(data[item.key])) {\n\t\t\tisMultiple = true;\n\t\t\tdata[item.key] = [data[item.key]];\n\t\t}\n\n\t\tif (item.multiple && !data[item.key]) {\n\t\t\tisMultiple = true;\n\t\t\tdata[item.key] = [];\n\t\t}\n\n\t\tlet value = result[item.index] ? result[item.index] : undefined;\n\n\t\tif (!isMultiple && !item.multiple) {\n\t\t\tdata[item.key] = value;\n\t\t\treturn;\n\t\t}\n\n\t\tif (isMultiple && !item.multiple && result[item.index]) {\n\t\t\tdata[item.key].push(value);\n\t\t\treturn;\n\t\t}\n\n\t\tif (result[item.index])\n\t\t\tresult[item.index].replace(item.regexp, str => {\n\t\t\t\tif (str) data[item.key].push(\n\t\t\t\t\tstr.replace(new RegExp(reseparator + \"*$\"), \"\")\n\t\t\t\t);\n\t\t\t});\n\n\t});\n\t// console.log(\"match 06\");\n\treturn data;\n};\n","import type {IRoute} from \"./IRoute\"\n\n/**\n * Convert OpenAPI‐style `{name[:pattern][modifier]}` into\n * path-to-regexp’s `:name(pattern)?*+` syntax, while\n * allowing literal `{` or `}` inside the regex.\n */\nexport function convertBraces(path: string): string {\n let out = '';\n let i = 0;\n\n while (i < path.length) {\n if (path[i] === '{') {\n // start of a parameter spec\n let start = i;\n i++;\n // find the matching closing '}' that balances this one\n let depth = 1;\n while (i < path.length && depth > 0) {\n if (path[i] === '\\\\') {\n // skip escaped chars\n i += 2;\n } else {\n if (path[i] === '{') depth++;\n else if (path[i] === '}') depth--;\n i++;\n }\n }\n if (depth !== 0) {\n throw new Error(`Unmatched '{' in path: ${path}`);\n }\n const segment = path.slice(start + 1, i - 1);\n // A segment is one of the following forms:\n // 1. \"name\" – simple param, no pattern, no modifier\n // 2. \"name+\" / \"name*\" / \"name?\" – param with modifier only\n // 3. \"name:regex\" – explicit pattern (may itself contain +, *, ?)\n // In the third case we must **not** interpret a trailing +, * or ? as a\n // modifier because it belongs to the user-supplied regex. The original\n // implementation used a single regexp with an optional modifier group,\n // which incorrectly split patterns such as `.*` or `.+` into two parts\n // (`.` as the pattern and `*` or `+` as the modifier). Instead we now\n // split on the first ':'; if a pattern is present we treat the rest of\n // the segment verbatim.\n\n const colonIdx = segment.indexOf(':');\n let name: string;\n let pattern: string | undefined;\n let modifier: string | undefined;\n\n if (colonIdx === -1) {\n // Forms 1 & 2 – no explicit pattern, so a trailing modifier is allowed.\n const m = segment.match(/^([^?*+]+)([?*+])?$/);\n if (!m) {\n throw new Error(`Invalid parameter segment: {${segment}}`);\n }\n [, name, modifier] = m as RegExpMatchArray & [string, string, string?];\n } else {\n // Form 3 – everything after the first ':' is the pattern.\n name = segment.slice(0, colonIdx);\n pattern = segment.slice(colonIdx + 1);\n // No modifier allowed when an explicit pattern is used.\n }\n\n out += `:${name}`;\n if (pattern) out += `(${pattern})`;\n if (modifier) out += modifier;\n } else {\n // ordinary char, copy (also handles escaped chars)\n out += path[i++];\n }\n }\n\n return out;\n}\n\n\nexport function parsePathConfig(\n path:string,\n method:string,\n path_config:any,\n inheritedMiddleware: string[] = []\n):IRoute {\n const rawLayout = path_config?.['x-layout'];\n const layout = (typeof rawLayout === 'string') ? [rawLayout]\n : (Array.isArray(rawLayout) ? rawLayout : undefined);\n const view = path_config['x-view']\n const controller = path_config['x-controller'] || undefined\n const summary = path_config.summary\n const query = path_config.query\n const body = path_config.body\n const parameters = path_config.parameters\n const responses = path_config.responses\n const routeMiddleware = Array.isArray(path_config['x-middleware']) ? path_config['x-middleware'] : []\n const middleware = [...inheritedMiddleware, ...routeMiddleware]\n\n return {\n summary,\n path: convertBraces(path),\n method,\n layout,\n middleware,\n view,\n controller,\n responses,\n parameters,\n query,\n body\n }\n}\n","import type { IPage } from \"../routing/page\";\nimport path_to_regex from \"path-to-regex\"\nimport {convertBraces} from \"../parser/path\";\nimport { writable } from 'svelte/store';\n\nexport const page = writable<IPage>({\n url: '',\n pathname:'',\n params: {},\n query:{},\n poll: async () => false, // Placeholder - will be set by navigation.svelte.ts\n});\n\n\nif(typeof window !== 'undefined') {\n page.update(p => {\n p.url = window.location.href;\n p.pathname = window.location.pathname;\n Object.assign(p.query, Object.fromEntries(new URLSearchParams(window.location.search)));\n p.params = {};\n return p;\n });\n}\n\n\nconst patterns:Record<string,any> = {}\nexport function shadowUrl(pattern:string, url: string){\n if(!patterns[pattern]) {\n patterns[pattern] = new path_to_regex(convertBraces(pattern))\n }\n const match = patterns[pattern].match(url)\n if(match) {\n return match\n }else{\n return {}\n }\n}\n"],"names":["pathToRegex","Regex","escapeRe","defaultParam","obj","defaultValue","path","options","regexp","separator","notseparator","offset","count","str","key","a","pat","quant","index","string","isMultiple","isExtrude","isRequired","quantifier","isStarted","isStoped","isToken","text","regstr","pattern","data","s","char","reseparator","result","item","value","convertBraces","out","i","start","depth","segment","colonIdx","name","modifier","m","page","writable","p","patterns","shadowUrl","url","path_to_regex","match"],"mappings":"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","x_google_ignoreList":[0]}