From 6884e0a264810b77a1ba2803dcf6e7a21602d539 Mon Sep 17 00:00:00 2001 From: yosuke ota Date: Fri, 13 Sep 2024 13:32:18 +0900 Subject: [PATCH 1/5] chore: update deps and some fixes --- explorer-v2/package.json | 26 +++++++------- explorer-v2/src/lib/MonacoEditor.svelte | 2 +- package.json | 36 +++++++++---------- .../self-closing-style01-requirements.json | 5 +++ ...lf-closing-style-element-requirements.json | 5 +++ tests/src/parser/style-context.ts | 3 ++ 6 files changed, 45 insertions(+), 32 deletions(-) create mode 100644 tests/fixtures/parser/ast/self-closing-style01-requirements.json create mode 100644 tests/fixtures/parser/style-context/self-closing-style-element-requirements.json diff --git a/explorer-v2/package.json b/explorer-v2/package.json index 520ea877..fa3a783f 100644 --- a/explorer-v2/package.json +++ b/explorer-v2/package.json @@ -12,27 +12,27 @@ "preview": "vite preview" }, "dependencies": { - "@fontsource/fira-mono": "^5.0.13", - "@typescript-eslint/parser": "^7.13.1", + "@fontsource/fira-mono": "^5.1.0", + "@typescript-eslint/parser": "^7.18.0", "eslint": "^8.57.0", "eslint-scope": "^7.2.2", - "esquery": "^1.5.0", + "esquery": "^1.6.0", "pako": "^2.1.0", - "svelte": "^5.0.0-next.160", + "svelte": "^5.0.0-next.245", "svelte-eslint-parser": "link:..", - "tslib": "^2.6.3" + "tslib": "^2.7.0" }, "devDependencies": { - "@sveltejs/adapter-static": "^3.0.2", - "@sveltejs/kit": "^2.5.17", - "@sveltejs/vite-plugin-svelte": "^3.1.1", + "@sveltejs/adapter-static": "^3.0.4", + "@sveltejs/kit": "^2.5.26", + "@sveltejs/vite-plugin-svelte": "^3.1.2", "monaco-editor": "^0.50.0", - "prettier": "^3.3.2", - "prettier-plugin-svelte": "^3.2.4", + "prettier": "^3.3.3", + "prettier-plugin-svelte": "^3.2.6", "string-replace-loader": "^3.1.0", - "typescript": "^5.4.5", - "vite": "^5.3.1", - "webpack": "^5.92.1", + "typescript": "^5.6.2", + "vite": "^5.4.4", + "webpack": "^5.94.0", "webpack-cli": "^5.1.4", "wrapper-webpack-plugin": "^2.2.2" } diff --git a/explorer-v2/src/lib/MonacoEditor.svelte b/explorer-v2/src/lib/MonacoEditor.svelte index 1b9edf52..200764c4 100644 --- a/explorer-v2/src/lib/MonacoEditor.svelte +++ b/explorer-v2/src/lib/MonacoEditor.svelte @@ -1,4 +1,4 @@ - diff --git a/package.json b/package.json index 314ecbe0..a188f6b9 100644 --- a/package.json +++ b/package.json @@ -63,51 +63,51 @@ }, "devDependencies": { "@changesets/changelog-github": "^0.5.0", - "@changesets/cli": "^2.27.7", - "@changesets/get-release-plan": "^4.0.3", + "@changesets/cli": "^2.27.8", + "@changesets/get-release-plan": "^4.0.4", "@ota-meshi/eslint-plugin": "^0.15.3", "@types/benchmark": "^2.1.5", - "@types/chai": "^4.3.16", - "@types/eslint": "^9.0.0", + "@types/chai": "^4.3.19", + "@types/eslint": "^9.6.1", "@types/eslint-scope": "^3.7.7", "@types/eslint-visitor-keys": "^3.3.0", "@types/estree": "^1.0.5", - "@types/mocha": "^10.0.7", - "@types/node": "^20.14.11", + "@types/mocha": "^10.0.8", + "@types/node": "^20.16.5", "@types/semver": "^7.5.8", - "@typescript-eslint/eslint-plugin": "^7.16.1", + "@typescript-eslint/eslint-plugin": "^7.18.0", "@typescript-eslint/parser": "~7.18.0", "@typescript-eslint/types": "~7.18.0", "benchmark": "^2.1.4", - "chai": "^4.4.1", + "chai": "^4.5.0", "env-cmd": "^10.1.0", - "esbuild": "^0.23.0", - "esbuild-register": "^3.5.0", + "esbuild": "^0.23.1", + "esbuild-register": "^3.6.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-json-schema-validator": "^5.1.2", "eslint-plugin-jsonc": "^2.16.0", - "eslint-plugin-n": "^17.9.0", + "eslint-plugin-n": "^17.10.2", "eslint-plugin-node-dependencies": "^0.12.0", "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-regexp": "^2.6.0", - "eslint-plugin-svelte": "^2.42.0", + "eslint-plugin-svelte": "^2.43.0", "eslint-plugin-yml": "^1.14.0", "estree-walker": "^3.0.3", "locate-character": "^3.0.0", - "magic-string": "^0.30.10", - "mocha": "^10.6.0", - "mocha-chai-jest-snapshot": "^1.1.4", + "magic-string": "^0.30.11", + "mocha": "^10.7.3", + "mocha-chai-jest-snapshot": "^1.1.6", "nyc": "^17.0.0", "prettier": "~3.3.3", "prettier-plugin-pkg": "^0.18.1", "prettier-plugin-svelte": "^3.2.6", "rimraf": "^6.0.1", "semver": "^7.6.3", - "svelte": "^5.0.0-next.191", - "svelte2tsx": "^0.7.13", - "typescript": "~5.5.3", + "svelte": "^5.0.0-next.245", + "svelte2tsx": "^0.7.19", + "typescript": "~5.5.4", "typescript-eslint-parser-for-extra-files": "^0.7.0" }, "publishConfig": { diff --git a/tests/fixtures/parser/ast/self-closing-style01-requirements.json b/tests/fixtures/parser/ast/self-closing-style01-requirements.json new file mode 100644 index 00000000..30d7612a --- /dev/null +++ b/tests/fixtures/parser/ast/self-closing-style01-requirements.json @@ -0,0 +1,5 @@ +{ + "parse": { + "svelte": "^4 || ^3" + } +} \ No newline at end of file diff --git a/tests/fixtures/parser/style-context/self-closing-style-element-requirements.json b/tests/fixtures/parser/style-context/self-closing-style-element-requirements.json new file mode 100644 index 00000000..30d7612a --- /dev/null +++ b/tests/fixtures/parser/style-context/self-closing-style-element-requirements.json @@ -0,0 +1,5 @@ +{ + "parse": { + "svelte": "^4 || ^3" + } +} \ No newline at end of file diff --git a/tests/src/parser/style-context.ts b/tests/src/parser/style-context.ts index 87aee31a..109e71e8 100644 --- a/tests/src/parser/style-context.ts +++ b/tests/src/parser/style-context.ts @@ -26,6 +26,9 @@ describe("Check for AST.", () => { config, meetRequirements, } of listupFixtures(STYLE_CONTEXT_FIXTURE_ROOT)) { + if (!meetRequirements("parse")) { + continue; + } describe(inputFileName, () => { let result: any; From 192cb07b82133c5f191dae7d8a756d3d26a18394 Mon Sep 17 00:00:00 2001 From: yosuke ota Date: Fri, 13 Sep 2024 13:58:46 +0900 Subject: [PATCH 2/5] fix types --- package.json | 2 +- src/parser/compat.ts | 2 - src/parser/html.ts | 11 --- src/parser/svelte-ast-types-for-v5.ts | 119 +++++++++----------------- 4 files changed, 41 insertions(+), 93 deletions(-) diff --git a/package.json b/package.json index a188f6b9..9263f6db 100644 --- a/package.json +++ b/package.json @@ -107,7 +107,7 @@ "semver": "^7.6.3", "svelte": "^5.0.0-next.245", "svelte2tsx": "^0.7.19", - "typescript": "~5.5.4", + "typescript": "~5.6.2", "typescript-eslint-parser-for-extra-files": "^0.7.0" }, "publishConfig": { diff --git a/src/parser/compat.ts b/src/parser/compat.ts index 13f24b1b..7aa30d7f 100644 --- a/src/parser/compat.ts +++ b/src/parser/compat.ts @@ -40,11 +40,9 @@ export function getOptionsFromRoot( fragment: { type: "Fragment", nodes: [], - transparent: true, }, start: root.options.start, end: root.options.end, - parent: null as any, }; } return null; diff --git a/src/parser/html.ts b/src/parser/html.ts index 72ff4030..a4b43072 100644 --- a/src/parser/html.ts +++ b/src/parser/html.ts @@ -86,8 +86,6 @@ function parseAttribute(state: State): Compiler.Attribute { value: true, start, end: keyEnd, - metadata: null as any, - parent: null, }; } state.skipSpaces(); @@ -98,8 +96,6 @@ function parseAttribute(state: State): Compiler.Attribute { value: true, start, end: keyEnd, - metadata: null as any, - parent: null, }; } // parse value @@ -110,8 +106,6 @@ function parseAttribute(state: State): Compiler.Attribute { value: [value], start, end: state.index, - metadata: null as any, - parent: null, }; } @@ -149,8 +143,6 @@ function parseAttributeValue( expression, start, end, - metadata: null as any, - parent: null, }; } } @@ -164,7 +156,6 @@ function parseAttributeValue( raw: quote, start, end: state.index, - parent: null, }; } let c: string | undefined; @@ -179,7 +170,6 @@ function parseAttributeValue( raw: data, start: start + 1, end: end - 1, - parent: null, }; } } @@ -198,7 +188,6 @@ function parseAttributeValue( raw: data, start, end, - parent: null, }; } diff --git a/src/parser/svelte-ast-types-for-v5.ts b/src/parser/svelte-ast-types-for-v5.ts index 9dea265b..82172a84 100644 --- a/src/parser/svelte-ast-types-for-v5.ts +++ b/src/parser/svelte-ast-types-for-v5.ts @@ -2,84 +2,52 @@ // we work around this by extracting the type from the parse function. // See also https://github.com/sveltejs/svelte/issues/12292 -import type { parse } from "svelte/compiler"; +import type { AST } from "svelte/compiler"; -export type Root = ModernParseReturnType; -export type Fragment = Root["fragment"]; -export type SvelteOptions = Root["options"]; -export type Script = Root["instance"]; -type FragmentChild = Fragment["nodes"][number]; +export type Root = AST.Root; +export type Fragment = AST.Fragment; +export type SvelteOptions = AST.SvelteOptions; +export type Script = AST.Script; -export type Text = Extract; +export type Text = AST.Text; -export type ExpressionTag = Extract; -export type HtmlTag = Extract; -export type ConstTag = Extract; -export type DebugTag = Extract; -export type RenderTag = Extract; +export type ExpressionTag = AST.ExpressionTag; +export type HtmlTag = AST.HtmlTag; +export type ConstTag = AST.ConstTag; +export type DebugTag = AST.DebugTag; +export type RenderTag = AST.RenderTag; -export type Component = Extract; -export type TitleElement = Extract; -export type SlotElement = Extract; -export type RegularElement = Extract; -export type SvelteBody = Extract; -export type SvelteComponent = Extract< - FragmentChild, - { type: "SvelteComponent" } ->; -export type SvelteDocument = Extract; -export type SvelteElement = Extract; -export type SvelteFragment = Extract; -export type SvelteHead = Extract; -export type SvelteOptionsRaw = Extract< - FragmentChild, - { type: "SvelteOptions" } ->; -export type SvelteSelf = Extract; -export type SvelteWindow = Extract; +export type Component = AST.Component; +export type TitleElement = AST.TitleElement; +export type SlotElement = AST.SlotElement; +export type RegularElement = AST.RegularElement; +export type SvelteBody = AST.SvelteBody; +export type SvelteComponent = AST.SvelteComponent; +export type SvelteDocument = AST.SvelteDocument; +export type SvelteElement = AST.SvelteElement; +export type SvelteFragment = AST.SvelteFragment; +export type SvelteHead = AST.SvelteHead; +export type SvelteOptionsRaw = AST.SvelteOptionsRaw; +export type SvelteSelf = AST.SvelteSelf; +export type SvelteWindow = AST.SvelteWindow; -export type IfBlock = Extract; -export type EachBlock = Extract; -export type AwaitBlock = Extract; -export type KeyBlock = Extract; -export type SnippetBlock = Extract; +export type IfBlock = AST.IfBlock; +export type EachBlock = AST.EachBlock; +export type AwaitBlock = AST.AwaitBlock; +export type KeyBlock = AST.KeyBlock; +export type SnippetBlock = AST.SnippetBlock; -export type Comment = Extract; -type ComponentAttribute = Component["attributes"][number]; -export type Attribute = Extract; -export type SpreadAttribute = Extract< - ComponentAttribute, - { type: "SpreadAttribute" } ->; -export type AnimateDirective = Extract< - ComponentAttribute, - { type: "AnimateDirective" } ->; -export type BindDirective = Extract< - ComponentAttribute, - { type: "BindDirective" } ->; -export type ClassDirective = Extract< - ComponentAttribute, - { type: "ClassDirective" } ->; -export type LetDirective = Extract< - ComponentAttribute, - { type: "LetDirective" } ->; -export type OnDirective = Extract; -export type StyleDirective = Extract< - ComponentAttribute, - { type: "StyleDirective" } ->; -export type TransitionDirective = Extract< - ComponentAttribute, - { type: "TransitionDirective" } ->; -export type UseDirective = Extract< - ComponentAttribute, - { type: "UseDirective" } ->; +export type Comment = AST.Comment; +export type Attribute = AST.Attribute; +export type SpreadAttribute = AST.SpreadAttribute; +export type AnimateDirective = AST.AnimateDirective; +export type BindDirective = AST.BindDirective; +export type ClassDirective = AST.ClassDirective; +export type LetDirective = AST.LetDirective; +export type OnDirective = AST.OnDirective; +export type StyleDirective = AST.StyleDirective; +export type TransitionDirective = AST.TransitionDirective; +export type UseDirective = AST.UseDirective; export type Tag = ExpressionTag | HtmlTag | ConstTag | DebugTag | RenderTag; export type ElementLike = @@ -107,10 +75,3 @@ export type Directive = | StyleDirective | TransitionDirective | UseDirective; - -type ModernParseReturnType = T extends { - (source: string, options: { filename?: string; modern: true }): infer R; - (...args: any[]): any; -} - ? R - : any; From 76e094ef15a5ff8c7f28a26d7452dd0d176fc9b1 Mon Sep 17 00:00:00 2001 From: yosuke ota Date: Fri, 13 Sep 2024 14:01:19 +0900 Subject: [PATCH 3/5] fix --- src/parser/svelte-ast-types-for-v5.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/parser/svelte-ast-types-for-v5.ts b/src/parser/svelte-ast-types-for-v5.ts index 82172a84..5e34c998 100644 --- a/src/parser/svelte-ast-types-for-v5.ts +++ b/src/parser/svelte-ast-types-for-v5.ts @@ -1,7 +1,3 @@ -// FIXME Since the node type is not provided by "svelte/compiler", -// we work around this by extracting the type from the parse function. -// See also https://github.com/sveltejs/svelte/issues/12292 - import type { AST } from "svelte/compiler"; export type Root = AST.Root; From 3626d7ccff14847174de7f0b29d2510aa170d616 Mon Sep 17 00:00:00 2001 From: yosuke ota Date: Fri, 13 Sep 2024 14:09:55 +0900 Subject: [PATCH 4/5] update --- .../10-typing-snippets-type-output.svelte | 4 +-- .../11-typing-snippets-type-output.svelte | 4 +-- .../generics01-snippets-type-output.svelte | 4 +-- tools/update-fixtures.ts | 26 ++++++++++++++----- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/tests/fixtures/parser/ast/svelte5/docs/snippets/10-typing-snippets-type-output.svelte b/tests/fixtures/parser/ast/svelte5/docs/snippets/10-typing-snippets-type-output.svelte index d992f19b..2009d36a 100644 --- a/tests/fixtures/parser/ast/svelte5/docs/snippets/10-typing-snippets-type-output.svelte +++ b/tests/fixtures/parser/ast/svelte5/docs/snippets/10-typing-snippets-type-output.svelte @@ -11,12 +11,12 @@ {#if children} - {@render children()} + {@render children()} {/if} {#each data as d} - {@render row(d)} + {@render row(d)} {/each}
diff --git a/tests/fixtures/parser/ast/svelte5/docs/snippets/11-typing-snippets-type-output.svelte b/tests/fixtures/parser/ast/svelte5/docs/snippets/11-typing-snippets-type-output.svelte index 4c5b05d6..204db6f5 100644 --- a/tests/fixtures/parser/ast/svelte5/docs/snippets/11-typing-snippets-type-output.svelte +++ b/tests/fixtures/parser/ast/svelte5/docs/snippets/11-typing-snippets-type-output.svelte @@ -11,12 +11,12 @@ {#if children} - {@render children()} + {@render children()} {/if} {#each data as d} - {@render row(d)} + {@render row(d)} {/each}
diff --git a/tests/fixtures/parser/ast/svelte5/generics01-snippets-type-output.svelte b/tests/fixtures/parser/ast/svelte5/generics01-snippets-type-output.svelte index 3490d02c..9511f75b 100644 --- a/tests/fixtures/parser/ast/svelte5/generics01-snippets-type-output.svelte +++ b/tests/fixtures/parser/ast/svelte5/generics01-snippets-type-output.svelte @@ -12,12 +12,12 @@ {#if children} - {@render children()} + {@render children()} {/if} {#each data as d} - {@render row(d)} + {@render row(d)} {/each}
diff --git a/tools/update-fixtures.ts b/tools/update-fixtures.ts index 2099969a..cc43ee7e 100644 --- a/tools/update-fixtures.ts +++ b/tools/update-fixtures.ts @@ -135,9 +135,16 @@ for (const { input, inputFileName, outputFileName, config } of listupFixtures( } } -for (const { input, inputFileName, outputFileName, config } of listupFixtures( - STYLE_CONTEXT_FIXTURE_ROOT, -)) { +for (const { + input, + inputFileName, + outputFileName, + config, + meetRequirements, +} of listupFixtures(STYLE_CONTEXT_FIXTURE_ROOT)) { + if (!meetRequirements("parse")) { + continue; + } const result = parse(input, inputFileName, config); const styleContext = result.services.getStyleContext(); fs.writeFileSync( @@ -147,9 +154,16 @@ for (const { input, inputFileName, outputFileName, config } of listupFixtures( ); } -for (const { input, inputFileName, outputFileName, config } of listupFixtures( - STYLE_LOCATION_FIXTURE_ROOT, -)) { +for (const { + input, + inputFileName, + outputFileName, + config, + meetRequirements, +} of listupFixtures(STYLE_LOCATION_FIXTURE_ROOT)) { + if (!meetRequirements("parse")) { + continue; + } const services = parse(input, inputFileName, config).services; if (!services.isSvelte) continue; const styleContext = services.getStyleContext(); From 71ef80ac037925359aa556bbcf08388c5ffcbad5 Mon Sep 17 00:00:00 2001 From: yosuke ota Date: Fri, 13 Sep 2024 14:12:14 +0900 Subject: [PATCH 5/5] update --- tests/src/parser/__snapshots__/html.ts.snap | 63 --------------------- 1 file changed, 63 deletions(-) diff --git a/tests/src/parser/__snapshots__/html.ts.snap b/tests/src/parser/__snapshots__/html.ts.snap index 56794774..344231d9 100644 --- a/tests/src/parser/__snapshots__/html.ts.snap +++ b/tests/src/parser/__snapshots__/html.ts.snap @@ -12,16 +12,13 @@ Object { "attributes": Array [ Object { "end": 17, - "metadata": null, "name": "lang", - "parent": null, "start": 8, "type": "Attribute", "value": Array [ Object { "data": "ts", "end": 16, - "parent": null, "raw": "ts", "start": 14, "type": "Text", @@ -38,16 +35,13 @@ Object { "attributes": Array [ Object { "end": 17, - "metadata": null, "name": "lang", - "parent": null, "start": 8, "type": "Attribute", "value": Array [ Object { "data": "ts", "end": 16, - "parent": null, "raw": "ts", "start": 14, "type": "Text", @@ -64,16 +58,13 @@ Object { "attributes": Array [ Object { "end": 15, - "metadata": null, "name": "lang", - "parent": null, "start": 8, "type": "Attribute", "value": Array [ Object { "data": "ts", "end": 15, - "parent": null, "raw": "ts", "start": 13, "type": "Text", @@ -90,9 +81,7 @@ Object { "attributes": Array [ Object { "end": 13, - "metadata": null, "name": "global", - "parent": null, "start": 7, "type": "Attribute", "value": true, @@ -107,9 +96,7 @@ Object { "attributes": Array [ Object { "end": 13, - "metadata": null, "name": "global", - "parent": null, "start": 7, "type": "Attribute", "value": true, @@ -124,9 +111,7 @@ Object { "attributes": Array [ Object { "end": 4, - "metadata": null, "name": "attr", - "parent": null, "start": 0, "type": "Attribute", "value": true, @@ -141,16 +126,13 @@ Object { "attributes": Array [ Object { "end": 16, - "metadata": null, "name": "attr", - "parent": null, "start": 0, "type": "Attribute", "value": Array [ Object { "data": "value", "end": 15, - "parent": null, "raw": "value", "start": 10, "type": "Text", @@ -167,9 +149,7 @@ Object { "attributes": Array [ Object { "end": 4, - "metadata": null, "name": "attr", - "parent": null, "start": 0, "type": "Attribute", "value": true, @@ -184,16 +164,13 @@ Object { "attributes": Array [ Object { "end": 12, - "metadata": null, "name": "attr", - "parent": null, "start": 0, "type": "Attribute", "value": Array [ Object { "data": "value", "end": 11, - "parent": null, "raw": "value", "start": 6, "type": "Text", @@ -210,16 +187,13 @@ Object { "attributes": Array [ Object { "end": 8, - "metadata": null, "name": "empty", - "parent": null, "start": 0, "type": "Attribute", "value": Array [ Object { "data": "", "end": 7, - "parent": null, "raw": "", "start": 7, "type": "Text", @@ -236,16 +210,13 @@ Object { "attributes": Array [ Object { "end": 8, - "metadata": null, "name": "empty", - "parent": null, "start": 0, "type": "Attribute", "value": Array [ Object { "data": "", "end": 7, - "parent": null, "raw": "", "start": 7, "type": "Text", @@ -262,9 +233,7 @@ Object { "attributes": Array [ Object { "end": 13, - "metadata": null, "name": "expr", - "parent": null, "start": 0, "type": "Attribute", "value": Array [ @@ -278,8 +247,6 @@ Object { "type": "Literal", "value": true, }, - "metadata": null, - "parent": null, "start": 5, "type": "ExpressionTag", }, @@ -295,9 +262,7 @@ Object { "attributes": Array [ Object { "end": 13, - "metadata": null, "name": "expr", - "parent": null, "start": 0, "type": "Attribute", "value": Array [ @@ -311,8 +276,6 @@ Object { "type": "Literal", "value": true, }, - "metadata": null, - "parent": null, "start": 5, "type": "ExpressionTag", }, @@ -328,9 +291,7 @@ Object { "attributes": Array [ Object { "end": 10, - "metadata": null, "name": "expr", - "parent": null, "start": 0, "type": "Attribute", "value": Array [ @@ -344,8 +305,6 @@ Object { "type": "Literal", "value": "}", }, - "metadata": null, - "parent": null, "start": 5, "type": "ExpressionTag", }, @@ -361,9 +320,7 @@ Object { "attributes": Array [ Object { "end": 10, - "metadata": null, "name": "expr", - "parent": null, "start": 0, "type": "Attribute", "value": Array [ @@ -377,8 +334,6 @@ Object { "type": "Literal", "value": "s", }, - "metadata": null, - "parent": null, "start": 5, "type": "ExpressionTag", }, @@ -394,9 +349,7 @@ Object { "attributes": Array [ Object { "end": 15, - "metadata": null, "name": "expr", - "parent": null, "start": 0, "type": "Attribute", "value": Array [ @@ -417,8 +370,6 @@ Object { "type": "Literal", "value": "}", }, - "metadata": null, - "parent": null, "start": 5, "type": "ExpressionTag", }, @@ -435,9 +386,7 @@ Object { "attributes": Array [ Object { "end": 19, - "metadata": null, "name": "expr", - "parent": null, "start": 0, "type": "Attribute", "value": Array [ @@ -464,8 +413,6 @@ Object { "type": "Literal", "value": "}", }, - "metadata": null, - "parent": null, "start": 5, "type": "ExpressionTag", }, @@ -481,9 +428,7 @@ Object { "attributes": Array [ Object { "end": 11, - "metadata": null, "name": "expr", - "parent": null, "start": 0, "type": "Attribute", "value": Array [ @@ -497,8 +442,6 @@ Object { "type": "Literal", "value": true, }, - "metadata": null, - "parent": null, "start": 5, "type": "ExpressionTag", }, @@ -514,16 +457,13 @@ Object { "attributes": Array [ Object { "end": 9, - "metadata": null, "name": "quote", - "parent": null, "start": 0, "type": "Attribute", "value": Array [ Object { "data": "'", "end": 8, - "parent": null, "raw": "'", "start": 7, "type": "Text", @@ -540,16 +480,13 @@ Object { "attributes": Array [ Object { "end": 9, - "metadata": null, "name": "quote", - "parent": null, "start": 0, "type": "Attribute", "value": Array [ Object { "data": "\\"", "end": 8, - "parent": null, "raw": "\\"", "start": 7, "type": "Text", pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy