diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/parse/index.ts | 4 | ||||
-rw-r--r-- | src/compiler/parse/state/fragment.ts | 5 | ||||
-rw-r--r-- | src/compiler/parse/state/setup.ts | 30 | ||||
-rw-r--r-- | src/compiler/parse/state/tag.ts | 15 | ||||
-rw-r--r-- | src/compiler/parse/state/text.ts | 2 |
5 files changed, 46 insertions, 10 deletions
diff --git a/src/compiler/parse/index.ts b/src/compiler/parse/index.ts index f98119d73..00eccdb7d 100644 --- a/src/compiler/parse/index.ts +++ b/src/compiler/parse/index.ts @@ -226,7 +226,7 @@ export default function parse(template: string, options: ParserOptions = {}): As parser.error( { code: 'duplicate-style', - message: 'You can only have one top-level <style> tag per component', + message: 'You can only have one <style> tag per HMX file', }, parser.css[1].start ); @@ -240,7 +240,7 @@ export default function parse(template: string, options: ParserOptions = {}): As parser.error( { code: 'invalid-script', - message: 'A component can only have one <script astro> element', + message: 'A component can only have one frontmatter (---) script', }, hmx_scripts[1].start ); diff --git a/src/compiler/parse/state/fragment.ts b/src/compiler/parse/state/fragment.ts index a62748ae0..eb72551c6 100644 --- a/src/compiler/parse/state/fragment.ts +++ b/src/compiler/parse/state/fragment.ts @@ -1,9 +1,14 @@ import tag from './tag.js'; +import setup from './setup.js'; import mustache from './mustache.js'; import text from './text.js'; import { Parser } from '../index.js'; export default function fragment(parser: Parser) { + if (parser.match('---')) { + return setup; + } + if (parser.match('<')) { return tag; } diff --git a/src/compiler/parse/state/setup.ts b/src/compiler/parse/state/setup.ts new file mode 100644 index 000000000..45c251f51 --- /dev/null +++ b/src/compiler/parse/state/setup.ts @@ -0,0 +1,30 @@ +// @ts-nocheck + +import { Parser } from '../index.js'; + +export default function setup(parser: Parser): void { + const start = parser.index; + parser.index += 3; + const content_start = parser.index; + const setupScriptContent = parser.read_until(/^---/m); + const content_end = parser.index; +console.log(setupScriptContent); + parser.eat('---', true); + const end = parser.index; + + console.log('XXX', parser.template.slice(end)); + parser.js.push({ + type: 'Script', + context: 'setup', + start, + end, + content: setupScriptContent, + // attributes, + // content: { + // start: content_start, + // end: content_end, + // styles, + // }, + }); + return; +} diff --git a/src/compiler/parse/state/tag.ts b/src/compiler/parse/state/tag.ts index 8ce297bfd..c6684874c 100644 --- a/src/compiler/parse/state/tag.ts +++ b/src/compiler/parse/state/tag.ts @@ -24,13 +24,14 @@ const meta_tags = new Map([ const valid_meta_tags = Array.from(meta_tags.keys()); //.concat('astro:self', 'astro:component', 'astro:fragment'); const specials = new Map([ - [ - 'script', - { - read: read_script, - property: 'js', - }, - ], + // Now handled as "setup" in setup.ts + // [ + // 'script', + // { + // read: read_script, + // property: 'js', + // }, + // ], [ 'style', { diff --git a/src/compiler/parse/state/text.ts b/src/compiler/parse/state/text.ts index d472a46b2..cca83f2d4 100644 --- a/src/compiler/parse/state/text.ts +++ b/src/compiler/parse/state/text.ts @@ -8,7 +8,7 @@ export default function text(parser: Parser) { let data = ''; - while (parser.index < parser.template.length && !parser.match('<') && !parser.match('{')) { + while (parser.index < parser.template.length && !parser.match('---') && !parser.match('<') && !parser.match('{')) { data += parser.template[parser.index++]; } |