diff --git a/.changeset/tender-pugs-hide.md b/.changeset/tender-pugs-hide.md new file mode 100644 index 0000000000..260f49614e --- /dev/null +++ b/.changeset/tender-pugs-hide.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +chore: provide proper public type for `parseCss` result diff --git a/packages/svelte/src/compiler/index.js b/packages/svelte/src/compiler/index.js index acfef6a320..e864c4a1f4 100644 --- a/packages/svelte/src/compiler/index.js +++ b/packages/svelte/src/compiler/index.js @@ -123,7 +123,7 @@ export function parse(source, { modern, loose } = {}) { * The parseCss function parses a CSS stylesheet, returning its abstract syntax tree. * * @param {string} source The CSS source code - * @returns {Omit} + * @returns {AST.CSS.StyleSheetFile} */ export function parseCss(source) { source = remove_bom(source); @@ -135,7 +135,7 @@ export function parseCss(source) { const children = parse_stylesheet(parser); return { - type: 'StyleSheet', + type: 'StyleSheetFile', start: 0, end: source.length, children diff --git a/packages/svelte/src/compiler/types/css.d.ts b/packages/svelte/src/compiler/types/css.d.ts index 154a06ffb1..13eb880d83 100644 --- a/packages/svelte/src/compiler/types/css.d.ts +++ b/packages/svelte/src/compiler/types/css.d.ts @@ -6,10 +6,17 @@ export namespace _CSS { end: number; } - export interface StyleSheet extends BaseNode { + export interface StyleSheetBase extends BaseNode { + children: Array; + } + + export interface StyleSheetFile extends StyleSheetBase { + type: 'StyleSheetFile'; + } + + export interface StyleSheet extends StyleSheetBase { type: 'StyleSheet'; attributes: any[]; // TODO - children: Array; content: { start: number; end: number; diff --git a/packages/svelte/tests/css-parse.test.ts b/packages/svelte/tests/css-parse.test.ts index 4d8ef8601b..3a53e97955 100644 --- a/packages/svelte/tests/css-parse.test.ts +++ b/packages/svelte/tests/css-parse.test.ts @@ -4,7 +4,7 @@ import { parseCss } from 'svelte/compiler'; describe('parseCss', () => { it('parses a simple rule', () => { const ast = parseCss('div { color: red; }'); - assert.equal(ast.type, 'StyleSheet'); + assert.equal(ast.type, 'StyleSheetFile'); assert.equal(ast.children.length, 1); assert.equal(ast.children[0].type, 'Rule'); }); @@ -57,7 +57,7 @@ describe('parseCss', () => { it('parses empty stylesheet', () => { const ast = parseCss(''); - assert.equal(ast.type, 'StyleSheet'); + assert.equal(ast.type, 'StyleSheetFile'); assert.equal(ast.children.length, 0); assert.equal(ast.start, 0); assert.equal(ast.end, 0); @@ -138,7 +138,7 @@ describe('parseCss', () => { it('parses escaped characters', () => { const ast = parseCss("div { background: url('./example.png?\\''); }"); - assert.equal(ast.type, 'StyleSheet'); + assert.equal(ast.type, 'StyleSheetFile'); assert.equal(ast.children.length, 1); const rule = ast.children[0]; assert.equal(rule.type, 'Rule'); diff --git a/packages/svelte/types/index.d.ts b/packages/svelte/types/index.d.ts index 62c0e210be..e7aa5395b8 100644 --- a/packages/svelte/types/index.d.ts +++ b/packages/svelte/types/index.d.ts @@ -889,7 +889,7 @@ declare module 'svelte/compiler' { * * @param source The CSS source code * */ - export function parseCss(source: string): Omit; + export function parseCss(source: string): AST.CSS.StyleSheetFile; /** * @deprecated Replace this with `import { walk } from 'estree-walker'` * */ @@ -1673,10 +1673,17 @@ declare module 'svelte/compiler' { end: number; } - export interface StyleSheet extends BaseNode { + export interface StyleSheetBase extends BaseNode { + children: Array; + } + + export interface StyleSheetFile extends StyleSheetBase { + type: 'StyleSheetFile'; + } + + export interface StyleSheet extends StyleSheetBase { type: 'StyleSheet'; attributes: any[]; // TODO - children: Array; content: { start: number; end: number;