From 71c63b4b90a8b99ff57f6a5b91784a7ba22ebc35 Mon Sep 17 00:00:00 2001 From: Hugos68 Date: Sat, 8 Mar 2025 20:17:12 +0100 Subject: [PATCH 1/7] Fix plugin order --- packages/addons/tailwindcss/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/addons/tailwindcss/index.ts b/packages/addons/tailwindcss/index.ts index 18fe640ba..f003ceb42 100644 --- a/packages/addons/tailwindcss/index.ts +++ b/packages/addons/tailwindcss/index.ts @@ -67,7 +67,7 @@ export default defineAddon({ const pluginsArray = object.property(param1, 'plugins', array.createEmpty()); const pluginFunctionCall = functions.call(vitePluginName, []); - array.push(pluginsArray, pluginFunctionCall); + array.unshift(pluginsArray, pluginFunctionCall); return generateCode(); }); From d0809ca395b85dec9084a5bd9959b96ae16c3343 Mon Sep 17 00:00:00 2001 From: Hugos68 Date: Sat, 8 Mar 2025 20:20:58 +0100 Subject: [PATCH 2/7] changeset --- .changeset/big-chefs-return.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/big-chefs-return.md diff --git a/.changeset/big-chefs-return.md b/.changeset/big-chefs-return.md new file mode 100644 index 000000000..df3136397 --- /dev/null +++ b/.changeset/big-chefs-return.md @@ -0,0 +1,5 @@ +--- +'sv': patch +--- + +bugfix: Place `tailwindcss` vite plugin at the start of the plugin array to prevent a bug with the tailwindcss scanner From 31f26f29becfcace3f03870667fe461f1fff4603 Mon Sep 17 00:00:00 2001 From: Hugos68 Date: Sat, 8 Mar 2025 20:39:19 +0100 Subject: [PATCH 3/7] Add `unshift` to js tooling --- packages/core/tooling/js/array.ts | 33 +++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/packages/core/tooling/js/array.ts b/packages/core/tooling/js/array.ts index 7b43cd916..1db8f9070 100644 --- a/packages/core/tooling/js/array.ts +++ b/packages/core/tooling/js/array.ts @@ -40,3 +40,36 @@ export function push( } } } + +export function unshift( + ast: AstTypes.ArrayExpression, + data: string | AstKinds.ExpressionKind | AstKinds.SpreadElementKind +): void { + if (typeof data === 'string') { + const existingLiterals = ast.elements.filter( + (x): x is AstTypes.StringLiteral => x?.type == 'StringLiteral' + ); + let literal = existingLiterals.find((x) => x.value == data); + + if (!literal) { + literal = { + type: 'StringLiteral', + value: data + }; + ast.elements.unshift(literal); + } + } else { + let anyNodeEquals = false; + const elements = ast.elements as AstTypes.ASTNode[]; + for (const node of elements) { + if (areNodesEqual(data, node)) { + anyNodeEquals = true; + } + } + + if (!anyNodeEquals) { + ast.elements.unshift(data); + } + } + +} \ No newline at end of file From b6503709665693d5436320270f434f8b8fbd7ab9 Mon Sep 17 00:00:00 2001 From: Hugos68 Date: Sat, 8 Mar 2025 20:44:07 +0100 Subject: [PATCH 4/7] Add test cases for `unshift` --- .../output.ts | 0 .../{object-array => push-object-array}/run.ts | 0 .../output.ts | 0 .../{string-array => push-string-array}/run.ts | 0 .../js/arrays/unshift-object-array/output.ts | 8 ++++++++ .../tests/js/arrays/unshift-object-array/run.ts | 16 ++++++++++++++++ .../js/arrays/unshift-string-array/output.ts | 1 + .../tests/js/arrays/unshift-string-array/run.ts | 13 +++++++++++++ 8 files changed, 38 insertions(+) rename packages/core/tests/js/arrays/{object-array => push-object-array}/output.ts (100%) rename packages/core/tests/js/arrays/{object-array => push-object-array}/run.ts (100%) rename packages/core/tests/js/arrays/{string-array => push-string-array}/output.ts (100%) rename packages/core/tests/js/arrays/{string-array => push-string-array}/run.ts (100%) create mode 100644 packages/core/tests/js/arrays/unshift-object-array/output.ts create mode 100644 packages/core/tests/js/arrays/unshift-object-array/run.ts create mode 100644 packages/core/tests/js/arrays/unshift-string-array/output.ts create mode 100644 packages/core/tests/js/arrays/unshift-string-array/run.ts diff --git a/packages/core/tests/js/arrays/object-array/output.ts b/packages/core/tests/js/arrays/push-object-array/output.ts similarity index 100% rename from packages/core/tests/js/arrays/object-array/output.ts rename to packages/core/tests/js/arrays/push-object-array/output.ts diff --git a/packages/core/tests/js/arrays/object-array/run.ts b/packages/core/tests/js/arrays/push-object-array/run.ts similarity index 100% rename from packages/core/tests/js/arrays/object-array/run.ts rename to packages/core/tests/js/arrays/push-object-array/run.ts diff --git a/packages/core/tests/js/arrays/string-array/output.ts b/packages/core/tests/js/arrays/push-string-array/output.ts similarity index 100% rename from packages/core/tests/js/arrays/string-array/output.ts rename to packages/core/tests/js/arrays/push-string-array/output.ts diff --git a/packages/core/tests/js/arrays/string-array/run.ts b/packages/core/tests/js/arrays/push-string-array/run.ts similarity index 100% rename from packages/core/tests/js/arrays/string-array/run.ts rename to packages/core/tests/js/arrays/push-string-array/run.ts diff --git a/packages/core/tests/js/arrays/unshift-object-array/output.ts b/packages/core/tests/js/arrays/unshift-object-array/output.ts new file mode 100644 index 000000000..db949db5b --- /dev/null +++ b/packages/core/tests/js/arrays/unshift-object-array/output.ts @@ -0,0 +1,8 @@ +const array = [ + { + test2: 'string' + }, + { + test: true + }, +]; diff --git a/packages/core/tests/js/arrays/unshift-object-array/run.ts b/packages/core/tests/js/arrays/unshift-object-array/run.ts new file mode 100644 index 000000000..98baac373 --- /dev/null +++ b/packages/core/tests/js/arrays/unshift-object-array/run.ts @@ -0,0 +1,16 @@ +import { array, object, common, variables } from '@sveltejs/cli-core/js'; +import type { ScriptFileEditor } from '@sveltejs/cli-core'; + +export function run({ ast }: ScriptFileEditor): void { + const array1 = array.createEmpty(); + + const object1 = object.create({ test: common.expressionFromString('true') }); + const object2 = object.create({ test2: common.createLiteral('string') }); + array.unshift(array1, object1); + array.unshift(array1, object2); + array.unshift(array1, object2); // avoid duplication + + // create declaration so that we serialize everything + const declaration = variables.declaration(ast, 'const', 'array', array1); + ast.body.push(declaration); +} diff --git a/packages/core/tests/js/arrays/unshift-string-array/output.ts b/packages/core/tests/js/arrays/unshift-string-array/output.ts new file mode 100644 index 000000000..0244d4843 --- /dev/null +++ b/packages/core/tests/js/arrays/unshift-string-array/output.ts @@ -0,0 +1 @@ +const array = ['test2', 'test']; diff --git a/packages/core/tests/js/arrays/unshift-string-array/run.ts b/packages/core/tests/js/arrays/unshift-string-array/run.ts new file mode 100644 index 000000000..c8282f26f --- /dev/null +++ b/packages/core/tests/js/arrays/unshift-string-array/run.ts @@ -0,0 +1,13 @@ +import { array, variables } from '@sveltejs/cli-core/js'; +import type { ScriptFileEditor } from '@sveltejs/cli-core'; + +export function run({ ast }: ScriptFileEditor): void { + const array1 = array.createEmpty(); + array.unshift(array1, 'test'); + array.unshift(array1, 'test2'); + array.unshift(array1, 'test'); // make sure items are not duplicated + + // create declaration so that we serialize everything + const declaration = variables.declaration(ast, 'const', 'array', array1); + ast.body.push(declaration); +} From 850a64a7d1736b5dba0810aa3b090b16b505c7f7 Mon Sep 17 00:00:00 2001 From: Hugos68 Date: Sat, 8 Mar 2025 20:44:31 +0100 Subject: [PATCH 5/7] format --- .../js/arrays/unshift-object-array/output.ts | 4 ++-- .../js/arrays/unshift-object-array/run.ts | 18 +++++++++--------- packages/core/tooling/js/array.ts | 3 +-- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/packages/core/tests/js/arrays/unshift-object-array/output.ts b/packages/core/tests/js/arrays/unshift-object-array/output.ts index db949db5b..53443163d 100644 --- a/packages/core/tests/js/arrays/unshift-object-array/output.ts +++ b/packages/core/tests/js/arrays/unshift-object-array/output.ts @@ -1,8 +1,8 @@ const array = [ - { + { test2: 'string' }, { test: true - }, + } ]; diff --git a/packages/core/tests/js/arrays/unshift-object-array/run.ts b/packages/core/tests/js/arrays/unshift-object-array/run.ts index 98baac373..e38203768 100644 --- a/packages/core/tests/js/arrays/unshift-object-array/run.ts +++ b/packages/core/tests/js/arrays/unshift-object-array/run.ts @@ -2,15 +2,15 @@ import { array, object, common, variables } from '@sveltejs/cli-core/js'; import type { ScriptFileEditor } from '@sveltejs/cli-core'; export function run({ ast }: ScriptFileEditor): void { - const array1 = array.createEmpty(); + const array1 = array.createEmpty(); - const object1 = object.create({ test: common.expressionFromString('true') }); - const object2 = object.create({ test2: common.createLiteral('string') }); - array.unshift(array1, object1); - array.unshift(array1, object2); - array.unshift(array1, object2); // avoid duplication + const object1 = object.create({ test: common.expressionFromString('true') }); + const object2 = object.create({ test2: common.createLiteral('string') }); + array.unshift(array1, object1); + array.unshift(array1, object2); + array.unshift(array1, object2); // avoid duplication - // create declaration so that we serialize everything - const declaration = variables.declaration(ast, 'const', 'array', array1); - ast.body.push(declaration); + // create declaration so that we serialize everything + const declaration = variables.declaration(ast, 'const', 'array', array1); + ast.body.push(declaration); } diff --git a/packages/core/tooling/js/array.ts b/packages/core/tooling/js/array.ts index 1db8f9070..daf65f2a6 100644 --- a/packages/core/tooling/js/array.ts +++ b/packages/core/tooling/js/array.ts @@ -71,5 +71,4 @@ export function unshift( ast.elements.unshift(data); } } - -} \ No newline at end of file +} From 9fee14f0e8b2c02f18a915a2f51d5c6ca822507c Mon Sep 17 00:00:00 2001 From: AdrianGonz97 <31664583+AdrianGonz97@users.noreply.github.com> Date: Sat, 8 Mar 2025 14:51:34 -0500 Subject: [PATCH 6/7] tweaks --- .changeset/big-chefs-return.md | 2 +- packages/core/tooling/js/array.ts | 64 +++++++++---------------------- 2 files changed, 20 insertions(+), 46 deletions(-) diff --git a/.changeset/big-chefs-return.md b/.changeset/big-chefs-return.md index df3136397..d7b2e0d30 100644 --- a/.changeset/big-chefs-return.md +++ b/.changeset/big-chefs-return.md @@ -2,4 +2,4 @@ 'sv': patch --- -bugfix: Place `tailwindcss` vite plugin at the start of the plugin array to prevent a bug with the tailwindcss scanner +fix: insert the `tailwindcss` vite plugin at the start of the plugin array diff --git a/packages/core/tooling/js/array.ts b/packages/core/tooling/js/array.ts index daf65f2a6..01ec4c0ec 100644 --- a/packages/core/tooling/js/array.ts +++ b/packages/core/tooling/js/array.ts @@ -13,62 +13,36 @@ export function push( ast: AstTypes.ArrayExpression, data: string | AstKinds.ExpressionKind | AstKinds.SpreadElementKind ): void { - if (typeof data === 'string') { - const existingLiterals = ast.elements.filter( - (x): x is AstTypes.StringLiteral => x?.type == 'StringLiteral' - ); - let literal = existingLiterals.find((x) => x.value == data); - - if (!literal) { - literal = { - type: 'StringLiteral', - value: data - }; - ast.elements.push(literal); - } - } else { - let anyNodeEquals = false; - const elements = ast.elements as AstTypes.ASTNode[]; - for (const node of elements) { - if (areNodesEqual(data, node)) { - anyNodeEquals = true; - } - } - - if (!anyNodeEquals) { - ast.elements.push(data); - } - } + insertElement(ast, data, true); } - export function unshift( ast: AstTypes.ArrayExpression, data: string | AstKinds.ExpressionKind | AstKinds.SpreadElementKind +): void { + insertElement(ast, data, false); +} + +function insertElement( + ast: AstTypes.ArrayExpression, + data: string | AstKinds.ExpressionKind | AstKinds.SpreadElementKind, + insertEnd: boolean ): void { if (typeof data === 'string') { - const existingLiterals = ast.elements.filter( - (x): x is AstTypes.StringLiteral => x?.type == 'StringLiteral' - ); - let literal = existingLiterals.find((x) => x.value == data); + const existingLiterals = ast.elements.filter((x) => x?.type === 'StringLiteral'); + const literal = existingLiterals.find((x) => x.value === data) ?? { + type: 'StringLiteral', + value: data + }; - if (!literal) { - literal = { - type: 'StringLiteral', - value: data - }; - ast.elements.unshift(literal); - } + if (insertEnd) ast.elements.push(literal); + else ast.elements.unshift(literal); } else { - let anyNodeEquals = false; const elements = ast.elements as AstTypes.ASTNode[]; - for (const node of elements) { - if (areNodesEqual(data, node)) { - anyNodeEquals = true; - } - } + const anyNodeEquals = elements.some((node) => areNodesEqual(data, node)); if (!anyNodeEquals) { - ast.elements.unshift(data); + if (insertEnd) ast.elements.push(data); + else ast.elements.unshift(data); } } } From 6c4516e045dd5d553da9b1c4db33dffb86e1d22c Mon Sep 17 00:00:00 2001 From: AdrianGonz97 <31664583+AdrianGonz97@users.noreply.github.com> Date: Sat, 8 Mar 2025 15:04:55 -0500 Subject: [PATCH 7/7] oops, fix --- packages/core/tooling/js/array.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/core/tooling/js/array.ts b/packages/core/tooling/js/array.ts index 01ec4c0ec..947c76f9a 100644 --- a/packages/core/tooling/js/array.ts +++ b/packages/core/tooling/js/array.ts @@ -29,13 +29,13 @@ function insertElement( ): void { if (typeof data === 'string') { const existingLiterals = ast.elements.filter((x) => x?.type === 'StringLiteral'); - const literal = existingLiterals.find((x) => x.value === data) ?? { - type: 'StringLiteral', - value: data - }; + let literal = existingLiterals.find((x) => x.value === data); + if (!literal) { + literal = { type: 'StringLiteral', value: data }; - if (insertEnd) ast.elements.push(literal); - else ast.elements.unshift(literal); + if (insertEnd) ast.elements.push(literal); + else ast.elements.unshift(literal); + } } else { const elements = ast.elements as AstTypes.ASTNode[]; const anyNodeEquals = elements.some((node) => areNodesEqual(data, node));