"use strict"; const assert = require("node:assert"); const { test } = require("node:test"); const { attributeValueType, parseComponentMetadata, parseComponentTags, validateComponentTags, } = require("../src/component-metadata"); const source = `component Button { props { // @required label = "" variant = "primary" disabled = false count = 0 items = [] } view { } }`; test("extracts component prop types, required props, defaults, and options", () => { const component = parseComponentMetadata(source); assert.equal(component.name, "Button"); assert.deepEqual( component.props.map(({ name, type, required, options }) => ({ name, type, required, options })), [ { name: "label", type: "string", required: true, options: [] }, { name: "variant", type: "string", required: false, options: ["danger", "primary"] }, { name: "disabled", type: "boolean", required: false, options: [] }, { name: "count", type: "number", required: false, options: [] }, { name: "items", type: "array", required: false, options: [] }, ], ); }); test("parses multiline component tags and their attribute locations", () => { const page = `