summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/compiler/parse/index.ts4
-rw-r--r--src/compiler/parse/state/fragment.ts5
-rw-r--r--src/compiler/parse/state/setup.ts30
-rw-r--r--src/compiler/parse/state/tag.ts15
-rw-r--r--src/compiler/parse/state/text.ts2
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++];
}