"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("../utils");
const known_css_properties_1 = require("known-css-properties");
const regexp_1 = require("../utils/regexp");
const css_utils_1 = require("../utils/css-utils");
exports.default = (0, utils_1.createRule)('no-unknown-style-directive-property', {
    meta: {
        docs: {
            description: 'disallow unknown `style:property`',
            category: 'Possible Errors',
            recommended: true
        },
        schema: [
            {
                type: 'object',
                properties: {
                    ignoreProperties: {
                        type: 'array',
                        items: {
                            type: 'string'
                        },
                        uniqueItems: true,
                        minItems: 1
                    },
                    ignorePrefixed: { type: 'boolean' }
                },
                additionalProperties: false
            }
        ],
        messages: {
            unknown: "Unexpected unknown style directive property '{{property}}'."
        },
        type: 'problem'
    },
    create(context) {
        const ignoreProperties = [...(context.options[0]?.ignoreProperties ?? [])].map(regexp_1.toRegExp);
        const ignorePrefixed = context.options[0]?.ignorePrefixed ?? true;
        const knownProperties = new Set(known_css_properties_1.all);
        function validName(name) {
            return (name.startsWith('--') ||
                knownProperties.has(name) ||
                ignoreProperties.some((r) => r.test(name)) ||
                (ignorePrefixed && (0, css_utils_1.hasVendorPrefix)(name)));
        }
        return {
            SvelteStyleDirective(node) {
                const prop = node.key.name;
                if (validName(prop.name)) {
                    return;
                }
                context.report({
                    node: prop,
                    messageId: 'unknown',
                    data: {
                        property: prop.name
                    }
                });
            }
        };
    }
});
