@marko/compiler 5.18.2 → 5.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -416,6 +416,15 @@ class TagLoader {
416
416
  }
417
417
  }
418
418
 
419
+ /**
420
+ * A custom tag can be mapped to module that is is used
421
+ * to analyze code and cache the result in memory.
422
+ * This analysis data should be read by translate hooks.
423
+ */
424
+ analyze(value) {
425
+ this.tag.analyzer = normalizeHook(this.dirname, value);
426
+ }
427
+
419
428
  /**
420
429
  * The tag type.
421
430
  */
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/taglib/loader/loadTagFromProps.js"],"names":["ok","require","resolveFrom","silent","propertyHandlers","isObjectEmpty","nodePath","createError","taglibFS","types","loaders","markoModules","hasOwnProperty","Object","prototype","resolveRelative","dirname","value","removeDashes","str","replace","match","lower","toUpperCase","hasAttributes","tagProps","attributes","name","call","startsWith","normalizeHook","path","hook","TagLoader","constructor","tag","dependencyChain","filePath","dir","load","type","targetProperty","preserveName","toString","_handleVar","nestedVariable","nameFromAttribute","Error","addNestedVariable","parts","split","i","part","hasNestedTag","hasAttr","nestedTagTargetProperty","length","substring","attrProps","k","propNameDashes","isSupportedProperty","isSupportedAttributeProperty","keys","join","attrName","attr","loadAttributeFromProps","append","addAttribute","nestedTag","Tag","loadTagFromProps","isNestedTagRepeated","endsWith","slice","nestedTagName","isRepeated","addNestedTag","renderer","template","resolve","curFS","statSync","_","loadAttributes","migrator","migrate","Array","isArray","forEach","migrators","push","codeGenerator","translate","translator","nodeFactory","parse","parser","transformer","transform","transformers","nestedTags","nestedTagDef","openTagOnly","description","autocomplete","parseOptions","deprecated","attributeGroups","concat","html","htmlType","featureFlags","tagLoader","err","module","exports"],"mappings":"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","sourcesContent":["\"use strict\";\n\nvar ok = require(\"assert\").ok;\nvar resolveFrom = require(\"resolve-from\").silent;\nvar propertyHandlers = require(\"property-handlers\");\nvar isObjectEmpty = require(\"raptor-util/isObjectEmpty\");\nvar nodePath = require(\"path\");\nvar createError = require(\"raptor-util/createError\");\nvar taglibFS = require(\"../fs\");\nvar types = require(\"./types\");\nvar loaders = require(\"./loaders\");\nvar markoModules = require(\"../../../modules\");\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction resolveRelative(dirname, value) {\n return value[0] === \".\" ? resolveFrom(dirname, value) : value;\n}\n\nfunction removeDashes(str) {\n return str.replace(/-([a-z])/g, function (match, lower) {\n return lower.toUpperCase();\n });\n}\n\nfunction hasAttributes(tagProps) {\n if (tagProps.attributes != null) {\n return true;\n }\n\n for (var name in tagProps) {\n if (hasOwnProperty.call(tagProps, name) && name.startsWith(\"@\")) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction normalizeHook(dirname, value) {\n if (typeof value === \"string\") {\n value = resolveRelative(dirname, value);\n return {\n path: value,\n get hook() {\n return markoModules.require(value);\n }\n };\n }\n return { hook: value };\n}\n\n/**\n * We load tag definition using this class. Properties in the taglib\n * definition (which is just a JavaScript object with properties)\n * are mapped to handler methods in an instance of this type.\n *\n * @param {Tag} tag The initially empty Tag instance that we populate\n * @param {String} dirname The full file system path associated with the tag being loaded\n * @param {String} path An informational path associated with this tag (used for error reporting)\n */\nclass TagLoader {\n constructor(tag, dependencyChain) {\n this.tag = tag;\n this.dependencyChain = dependencyChain;\n\n this.filePath = tag.filePath;\n this.dirname = tag.dir || tag.dirname;\n }\n\n load(tagProps) {\n if (!hasAttributes(tagProps)) {\n // allow any attributes if no attributes are declared\n tagProps.attributes = {\n \"*\": {\n type: \"string\",\n targetProperty: null,\n preserveName: false\n }\n };\n }\n\n propertyHandlers(tagProps, this, this.dependencyChain.toString());\n }\n\n _handleVar(value, dependencyChain) {\n var tag = this.tag;\n\n var nestedVariable;\n\n if (typeof value === \"string\") {\n nestedVariable = {\n name: value\n };\n } else {\n nestedVariable = {};\n\n propertyHandlers(\n value,\n {\n name: function (value) {\n nestedVariable.name = value;\n },\n\n nameFromAttribute: function (value) {\n nestedVariable.nameFromAttribute = value;\n }\n },\n dependencyChain.toString()\n );\n\n if (!nestedVariable.name && !nestedVariable.nameFromAttribute) {\n throw new Error(\n 'The \"name\" or \"name-from-attribute\" attribute is required for a nested variable (' +\n dependencyChain +\n \")\"\n );\n }\n }\n\n tag.addNestedVariable(nestedVariable);\n }\n\n /**\n * This is handler is for any properties that didn't match\n * one of the default property handlers. This is used to\n * match properties in the form of \"@attr_name\" or\n * \"<nested_tag_name>\"\n */\n \"*\"(name, value) {\n var tag = this.tag;\n var dependencyChain = this.dependencyChain;\n var parts = name.split(/\\s+|\\s+[,]\\s+/);\n\n var i;\n var part;\n\n var hasNestedTag = false;\n var hasAttr = false;\n var nestedTagTargetProperty = null;\n\n // We do one pass to figure out if there is an\n // attribute or nested tag or both\n for (i = 0; i < parts.length; i++) {\n part = parts[i];\n if (part.startsWith(\"@\")) {\n hasAttr = true;\n\n if (i === 0) {\n // Use the first attribute value as the name of the target property\n nestedTagTargetProperty = part.substring(1);\n }\n } else if (part.startsWith(\"<\")) {\n hasNestedTag = true;\n } else {\n // Unmatched property that is not an attribute or a\n // nested tag\n return false;\n }\n }\n\n var attrProps = {};\n var tagProps = {};\n var k;\n\n if (value != null && typeof value === \"object\") {\n for (k in value) {\n if (hasOwnProperty.call(value, k)) {\n if (k.startsWith(\"@\") || k.startsWith(\"<\")) {\n // Move over all of the attributes and nested tags\n // to the tag definition.\n tagProps[k] = value[k];\n delete value[k];\n } else {\n // The property is not a shorthand attribute or shorthand\n // tag so move it over to either the tag definition\n // or the attribute definition or both the tag definition\n // and attribute definition.\n var propNameDashes = removeDashes(k);\n\n if (\n isSupportedProperty(propNameDashes) &&\n loaders.isSupportedAttributeProperty(propNameDashes)\n ) {\n // Move over all of the properties that are associated with a tag\n // and attribute\n tagProps[k] = value[k];\n attrProps[k] = value[k];\n delete value[k];\n } else if (isSupportedProperty(propNameDashes)) {\n // Move over all of the properties that are associated with a tag\n tagProps[k] = value[k];\n delete value[k];\n } else if (loaders.isSupportedAttributeProperty(propNameDashes)) {\n // Move over all of the properties that are associated with an attr\n attrProps[k] = value[k];\n delete value[k];\n }\n }\n }\n }\n\n // If there are any left over properties then something is wrong\n // with the user's taglib.\n if (!isObjectEmpty(value)) {\n throw new Error(\n \"Unsupported properties of [\" + Object.keys(value).join(\", \") + \"]\"\n );\n }\n\n var type = attrProps.type;\n if (!type && hasAttr && hasNestedTag) {\n // If we have an attribute and a nested tag then default\n // the attribute type to \"expression\"\n attrProps.type = \"expression\";\n }\n } else if (typeof value === \"string\") {\n if (hasNestedTag && hasAttr) {\n tagProps = attrProps = {\n type: value\n };\n } else if (hasNestedTag) {\n tagProps = {\n type: value\n };\n } else {\n attrProps = {\n type: value\n };\n }\n }\n\n // Now that we have separated out attribute properties and tag properties\n // we need to create the actual attributes and nested tags\n for (i = 0; i < parts.length; i++) {\n part = parts[i];\n if (part.startsWith(\"@\")) {\n // This is a shorthand attribute\n var attrName = part.substring(1);\n\n var attr = loaders.loadAttributeFromProps(\n attrName,\n attrProps,\n dependencyChain.append(part)\n );\n\n tag.addAttribute(attr);\n } else if (part.startsWith(\"<\")) {\n // This is a shorthand nested tag\n let nestedTag = new types.Tag(this.filePath);\n\n loadTagFromProps(nestedTag, tagProps, dependencyChain.append(part));\n\n // We use the '[]' suffix to indicate that a nested tag\n // can be repeated\n var isNestedTagRepeated = false;\n if (part.endsWith(\"[]\")) {\n isNestedTagRepeated = true;\n part = part.slice(0, -2);\n }\n\n var nestedTagName = part.substring(1, part.length - 1);\n nestedTag.name = nestedTagName;\n nestedTag.isRepeated = nestedTag.isRepeated || isNestedTagRepeated;\n // Use the name of the attribute as the target property unless\n // this target property was explicitly provided\n nestedTag.targetProperty =\n attrProps.targetProperty || nestedTagTargetProperty;\n tag.addNestedTag(nestedTag);\n\n if (!nestedTag.isRepeated) {\n let attr = loaders.loadAttributeFromProps(\n nestedTag.targetProperty,\n { type: \"object\" },\n dependencyChain.append(part)\n );\n\n tag.addAttribute(attr);\n }\n } else {\n return false;\n }\n }\n }\n\n /**\n * The tag name\n * @param {String} value The tag name\n */\n name(value) {\n var tag = this.tag;\n tag.name = value;\n }\n\n /**\n * The path to the renderer JS module to use for this tag.\n *\n * NOTE: We use the equivalent of require.resolve to resolve the JS module\n * \t\t and use the tag directory as the \"from\".\n *\n * @param {String} value The renderer path\n */\n renderer(value) {\n this.tag.renderer = resolveRelative(this.dirname, value);\n }\n\n /**\n * A tag can use a renderer or a template to do the rendering. If\n * a template is provided then the value should be the path to the\n * template to use to render the custom tag.\n */\n template(value) {\n var tag = this.tag;\n var dirname = this.dirname;\n\n var path = nodePath.resolve(dirname, value);\n\n try {\n taglibFS.curFS.statSync(path);\n tag.template = path;\n } catch (_) {\n throw new Error('Template at path \"' + path + '\" does not exist.');\n }\n }\n\n /**\n * An Object where each property maps to an attribute definition.\n * The property key will be the attribute name and the property value\n * will be the attribute definition. Example:\n * {\n * \"attributes\": {\n * \"foo\": \"string\",\n * \"bar\": \"expression\"\n * }\n * }\n */\n attributes(value) {\n var tag = this.tag;\n\n loaders.loadAttributes(\n value,\n tag,\n this.dependencyChain.append(\"attributes\")\n );\n }\n\n /**\n * Deprecated\n */\n migrator(value) {\n this.migrate(value);\n }\n /**\n * A custom tag can be mapped to module that is used\n * migrate deprecated features to modern features.\n */\n migrate(value) {\n if (Array.isArray(value)) {\n value.forEach(this.migrate, this);\n } else {\n this.tag.migrators.push(normalizeHook(this.dirname, value));\n }\n }\n\n /**\n * Deprecated\n */\n codeGenerator(value) {\n this.translate(value);\n }\n\n /**\n * A custom tag can be mapped to module that is is used\n * to generate compile-time code for the custom tag. A\n * node type is created based on the methods and methods\n * exported by the code codegen module.\n */\n translate(value) {\n this.tag.translator = normalizeHook(this.dirname, value);\n }\n\n /**\n * Deprecated\n */\n nodeFactory(value) {\n this.parse(value);\n }\n\n /**\n * A custom tag can be mapped to a compile-time Node that gets\n * added to the parsed Abstract Syntax Tree (AST). The Node can\n * then generate custom JS code at compile time. The value\n * should be a path to a JS module that gets resolved using the\n * equivalent of require.resolve(path)\n */\n parse(value) {\n this.tag.parser = normalizeHook(this.dirname, value);\n }\n\n /**\n * Deprecated\n */\n transformer(value) {\n this.transform(value);\n }\n\n /**\n * If a custom tag has an associated transformer then the transformer\n * will be called on the compile-time Node. The transformer can manipulate\n * the AST using the DOM-like API to change how the code gets generated.\n */\n transform(value) {\n if (Array.isArray(value)) {\n value.forEach(this.transform, this);\n } else {\n this.tag.transformers.push(normalizeHook(this.dirname, value));\n }\n }\n\n /**\n * The tag type.\n */\n type(value) {\n var tag = this.tag;\n tag.type = value;\n }\n\n isRepeated(value) {\n var tag = this.tag;\n tag.isRepeated = value;\n }\n\n targetProperty(value) {\n var tag = this.tag;\n tag.targetProperty = value;\n }\n\n /**\n * Declare a nested tag.\n *\n * Example:\n * {\n * ...\n * \"nested-tags\": {\n * \"tab\": {\n * \"target-property\": \"tabs\",\n * \"is-repeated\": true\n * }\n * }\n * }\n */\n nestedTags(value) {\n var filePath = this.filePath;\n var tag = this.tag;\n\n for (const nestedTagName in value) {\n const nestedTagDef = value[nestedTagName];\n var dependencyChain = this.dependencyChain.append(\n `nestedTags[\"${nestedTagName}\"]`\n );\n var nestedTag = new types.Tag(filePath);\n\n loadTagFromProps(nestedTag, nestedTagDef, dependencyChain);\n\n nestedTag.name = nestedTagName;\n tag.addNestedTag(nestedTag);\n\n if (!nestedTag.isRepeated) {\n let attr = loaders.loadAttributeFromProps(\n nestedTag.targetProperty,\n { type: \"object\" },\n dependencyChain\n );\n\n tag.addAttribute(attr);\n }\n }\n }\n\n openTagOnly(value) {\n this.tag.openTagOnly = value;\n }\n\n /**\n * The description of the tag. Only used for documentation.\n */\n description(value) {\n this.tag.description = value;\n }\n\n autocomplete(value) {\n this.tag.autocomplete = value;\n }\n\n parseOptions(value) {\n this.tag.parseOptions = value;\n }\n\n deprecated(value) {\n this.tag.deprecated = value;\n }\n\n attributeGroups(value) {\n if (!value) {\n return;\n }\n\n var attributeGroups =\n this.tag.attributeGroups || (this.tag.attributeGroups = []);\n this.tag.attributeGroups = attributeGroups.concat(value);\n }\n\n html(value) {\n this.tag.html = value === true;\n }\n\n htmlType(value) {\n this.tag.htmlType = value;\n }\n\n featureFlags(value) {\n this.tag.featureFlags = value;\n }\n}\n\nfunction isSupportedProperty(name) {\n return hasOwnProperty.call(TagLoader.prototype, name);\n}\n\nfunction loadTagFromProps(tag, tagProps, dependencyChain) {\n ok(typeof tagProps === \"object\", 'Invalid \"tagProps\"');\n ok(dependencyChain, '\"dependencyChain\" is required');\n\n var tagLoader = new TagLoader(tag, dependencyChain);\n\n try {\n tagLoader.load(tagProps);\n } catch (err) {\n throw createError(\n \"Unable to load tag (\" + dependencyChain + \"): \" + err,\n err\n );\n }\n\n return tag;\n}\n\nmodule.exports = loadTagFromProps;\n\nloadTagFromProps.isSupportedProperty = isSupportedProperty;\n"],"file":"loadTagFromProps.js"}
1
+ {"version":3,"sources":["../../../src/taglib/loader/loadTagFromProps.js"],"names":["ok","require","resolveFrom","silent","propertyHandlers","isObjectEmpty","nodePath","createError","taglibFS","types","loaders","markoModules","hasOwnProperty","Object","prototype","resolveRelative","dirname","value","removeDashes","str","replace","match","lower","toUpperCase","hasAttributes","tagProps","attributes","name","call","startsWith","normalizeHook","path","hook","TagLoader","constructor","tag","dependencyChain","filePath","dir","load","type","targetProperty","preserveName","toString","_handleVar","nestedVariable","nameFromAttribute","Error","addNestedVariable","parts","split","i","part","hasNestedTag","hasAttr","nestedTagTargetProperty","length","substring","attrProps","k","propNameDashes","isSupportedProperty","isSupportedAttributeProperty","keys","join","attrName","attr","loadAttributeFromProps","append","addAttribute","nestedTag","Tag","loadTagFromProps","isNestedTagRepeated","endsWith","slice","nestedTagName","isRepeated","addNestedTag","renderer","template","resolve","curFS","statSync","_","loadAttributes","migrator","migrate","Array","isArray","forEach","migrators","push","codeGenerator","translate","translator","nodeFactory","parse","parser","transformer","transform","transformers","analyze","analyzer","nestedTags","nestedTagDef","openTagOnly","description","autocomplete","parseOptions","deprecated","attributeGroups","concat","html","htmlType","featureFlags","tagLoader","err","module","exports"],"mappings":"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","sourcesContent":["\"use strict\";\n\nvar ok = require(\"assert\").ok;\nvar resolveFrom = require(\"resolve-from\").silent;\nvar propertyHandlers = require(\"property-handlers\");\nvar isObjectEmpty = require(\"raptor-util/isObjectEmpty\");\nvar nodePath = require(\"path\");\nvar createError = require(\"raptor-util/createError\");\nvar taglibFS = require(\"../fs\");\nvar types = require(\"./types\");\nvar loaders = require(\"./loaders\");\nvar markoModules = require(\"../../../modules\");\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction resolveRelative(dirname, value) {\n return value[0] === \".\" ? resolveFrom(dirname, value) : value;\n}\n\nfunction removeDashes(str) {\n return str.replace(/-([a-z])/g, function (match, lower) {\n return lower.toUpperCase();\n });\n}\n\nfunction hasAttributes(tagProps) {\n if (tagProps.attributes != null) {\n return true;\n }\n\n for (var name in tagProps) {\n if (hasOwnProperty.call(tagProps, name) && name.startsWith(\"@\")) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction normalizeHook(dirname, value) {\n if (typeof value === \"string\") {\n value = resolveRelative(dirname, value);\n return {\n path: value,\n get hook() {\n return markoModules.require(value);\n }\n };\n }\n return { hook: value };\n}\n\n/**\n * We load tag definition using this class. Properties in the taglib\n * definition (which is just a JavaScript object with properties)\n * are mapped to handler methods in an instance of this type.\n *\n * @param {Tag} tag The initially empty Tag instance that we populate\n * @param {String} dirname The full file system path associated with the tag being loaded\n * @param {String} path An informational path associated with this tag (used for error reporting)\n */\nclass TagLoader {\n constructor(tag, dependencyChain) {\n this.tag = tag;\n this.dependencyChain = dependencyChain;\n\n this.filePath = tag.filePath;\n this.dirname = tag.dir || tag.dirname;\n }\n\n load(tagProps) {\n if (!hasAttributes(tagProps)) {\n // allow any attributes if no attributes are declared\n tagProps.attributes = {\n \"*\": {\n type: \"string\",\n targetProperty: null,\n preserveName: false\n }\n };\n }\n\n propertyHandlers(tagProps, this, this.dependencyChain.toString());\n }\n\n _handleVar(value, dependencyChain) {\n var tag = this.tag;\n\n var nestedVariable;\n\n if (typeof value === \"string\") {\n nestedVariable = {\n name: value\n };\n } else {\n nestedVariable = {};\n\n propertyHandlers(\n value,\n {\n name: function (value) {\n nestedVariable.name = value;\n },\n\n nameFromAttribute: function (value) {\n nestedVariable.nameFromAttribute = value;\n }\n },\n dependencyChain.toString()\n );\n\n if (!nestedVariable.name && !nestedVariable.nameFromAttribute) {\n throw new Error(\n 'The \"name\" or \"name-from-attribute\" attribute is required for a nested variable (' +\n dependencyChain +\n \")\"\n );\n }\n }\n\n tag.addNestedVariable(nestedVariable);\n }\n\n /**\n * This is handler is for any properties that didn't match\n * one of the default property handlers. This is used to\n * match properties in the form of \"@attr_name\" or\n * \"<nested_tag_name>\"\n */\n \"*\"(name, value) {\n var tag = this.tag;\n var dependencyChain = this.dependencyChain;\n var parts = name.split(/\\s+|\\s+[,]\\s+/);\n\n var i;\n var part;\n\n var hasNestedTag = false;\n var hasAttr = false;\n var nestedTagTargetProperty = null;\n\n // We do one pass to figure out if there is an\n // attribute or nested tag or both\n for (i = 0; i < parts.length; i++) {\n part = parts[i];\n if (part.startsWith(\"@\")) {\n hasAttr = true;\n\n if (i === 0) {\n // Use the first attribute value as the name of the target property\n nestedTagTargetProperty = part.substring(1);\n }\n } else if (part.startsWith(\"<\")) {\n hasNestedTag = true;\n } else {\n // Unmatched property that is not an attribute or a\n // nested tag\n return false;\n }\n }\n\n var attrProps = {};\n var tagProps = {};\n var k;\n\n if (value != null && typeof value === \"object\") {\n for (k in value) {\n if (hasOwnProperty.call(value, k)) {\n if (k.startsWith(\"@\") || k.startsWith(\"<\")) {\n // Move over all of the attributes and nested tags\n // to the tag definition.\n tagProps[k] = value[k];\n delete value[k];\n } else {\n // The property is not a shorthand attribute or shorthand\n // tag so move it over to either the tag definition\n // or the attribute definition or both the tag definition\n // and attribute definition.\n var propNameDashes = removeDashes(k);\n\n if (\n isSupportedProperty(propNameDashes) &&\n loaders.isSupportedAttributeProperty(propNameDashes)\n ) {\n // Move over all of the properties that are associated with a tag\n // and attribute\n tagProps[k] = value[k];\n attrProps[k] = value[k];\n delete value[k];\n } else if (isSupportedProperty(propNameDashes)) {\n // Move over all of the properties that are associated with a tag\n tagProps[k] = value[k];\n delete value[k];\n } else if (loaders.isSupportedAttributeProperty(propNameDashes)) {\n // Move over all of the properties that are associated with an attr\n attrProps[k] = value[k];\n delete value[k];\n }\n }\n }\n }\n\n // If there are any left over properties then something is wrong\n // with the user's taglib.\n if (!isObjectEmpty(value)) {\n throw new Error(\n \"Unsupported properties of [\" + Object.keys(value).join(\", \") + \"]\"\n );\n }\n\n var type = attrProps.type;\n if (!type && hasAttr && hasNestedTag) {\n // If we have an attribute and a nested tag then default\n // the attribute type to \"expression\"\n attrProps.type = \"expression\";\n }\n } else if (typeof value === \"string\") {\n if (hasNestedTag && hasAttr) {\n tagProps = attrProps = {\n type: value\n };\n } else if (hasNestedTag) {\n tagProps = {\n type: value\n };\n } else {\n attrProps = {\n type: value\n };\n }\n }\n\n // Now that we have separated out attribute properties and tag properties\n // we need to create the actual attributes and nested tags\n for (i = 0; i < parts.length; i++) {\n part = parts[i];\n if (part.startsWith(\"@\")) {\n // This is a shorthand attribute\n var attrName = part.substring(1);\n\n var attr = loaders.loadAttributeFromProps(\n attrName,\n attrProps,\n dependencyChain.append(part)\n );\n\n tag.addAttribute(attr);\n } else if (part.startsWith(\"<\")) {\n // This is a shorthand nested tag\n let nestedTag = new types.Tag(this.filePath);\n\n loadTagFromProps(nestedTag, tagProps, dependencyChain.append(part));\n\n // We use the '[]' suffix to indicate that a nested tag\n // can be repeated\n var isNestedTagRepeated = false;\n if (part.endsWith(\"[]\")) {\n isNestedTagRepeated = true;\n part = part.slice(0, -2);\n }\n\n var nestedTagName = part.substring(1, part.length - 1);\n nestedTag.name = nestedTagName;\n nestedTag.isRepeated = nestedTag.isRepeated || isNestedTagRepeated;\n // Use the name of the attribute as the target property unless\n // this target property was explicitly provided\n nestedTag.targetProperty =\n attrProps.targetProperty || nestedTagTargetProperty;\n tag.addNestedTag(nestedTag);\n\n if (!nestedTag.isRepeated) {\n let attr = loaders.loadAttributeFromProps(\n nestedTag.targetProperty,\n { type: \"object\" },\n dependencyChain.append(part)\n );\n\n tag.addAttribute(attr);\n }\n } else {\n return false;\n }\n }\n }\n\n /**\n * The tag name\n * @param {String} value The tag name\n */\n name(value) {\n var tag = this.tag;\n tag.name = value;\n }\n\n /**\n * The path to the renderer JS module to use for this tag.\n *\n * NOTE: We use the equivalent of require.resolve to resolve the JS module\n * \t\t and use the tag directory as the \"from\".\n *\n * @param {String} value The renderer path\n */\n renderer(value) {\n this.tag.renderer = resolveRelative(this.dirname, value);\n }\n\n /**\n * A tag can use a renderer or a template to do the rendering. If\n * a template is provided then the value should be the path to the\n * template to use to render the custom tag.\n */\n template(value) {\n var tag = this.tag;\n var dirname = this.dirname;\n\n var path = nodePath.resolve(dirname, value);\n\n try {\n taglibFS.curFS.statSync(path);\n tag.template = path;\n } catch (_) {\n throw new Error('Template at path \"' + path + '\" does not exist.');\n }\n }\n\n /**\n * An Object where each property maps to an attribute definition.\n * The property key will be the attribute name and the property value\n * will be the attribute definition. Example:\n * {\n * \"attributes\": {\n * \"foo\": \"string\",\n * \"bar\": \"expression\"\n * }\n * }\n */\n attributes(value) {\n var tag = this.tag;\n\n loaders.loadAttributes(\n value,\n tag,\n this.dependencyChain.append(\"attributes\")\n );\n }\n\n /**\n * Deprecated\n */\n migrator(value) {\n this.migrate(value);\n }\n /**\n * A custom tag can be mapped to module that is used\n * migrate deprecated features to modern features.\n */\n migrate(value) {\n if (Array.isArray(value)) {\n value.forEach(this.migrate, this);\n } else {\n this.tag.migrators.push(normalizeHook(this.dirname, value));\n }\n }\n\n /**\n * Deprecated\n */\n codeGenerator(value) {\n this.translate(value);\n }\n\n /**\n * A custom tag can be mapped to module that is is used\n * to generate compile-time code for the custom tag. A\n * node type is created based on the methods and methods\n * exported by the code codegen module.\n */\n translate(value) {\n this.tag.translator = normalizeHook(this.dirname, value);\n }\n\n /**\n * Deprecated\n */\n nodeFactory(value) {\n this.parse(value);\n }\n\n /**\n * A custom tag can be mapped to a compile-time Node that gets\n * added to the parsed Abstract Syntax Tree (AST). The Node can\n * then generate custom JS code at compile time. The value\n * should be a path to a JS module that gets resolved using the\n * equivalent of require.resolve(path)\n */\n parse(value) {\n this.tag.parser = normalizeHook(this.dirname, value);\n }\n\n /**\n * Deprecated\n */\n transformer(value) {\n this.transform(value);\n }\n\n /**\n * If a custom tag has an associated transformer then the transformer\n * will be called on the compile-time Node. The transformer can manipulate\n * the AST using the DOM-like API to change how the code gets generated.\n */\n transform(value) {\n if (Array.isArray(value)) {\n value.forEach(this.transform, this);\n } else {\n this.tag.transformers.push(normalizeHook(this.dirname, value));\n }\n }\n\n /**\n * A custom tag can be mapped to module that is is used\n * to analyze code and cache the result in memory.\n * This analysis data should be read by translate hooks.\n */\n analyze(value) {\n this.tag.analyzer = normalizeHook(this.dirname, value);\n }\n\n /**\n * The tag type.\n */\n type(value) {\n var tag = this.tag;\n tag.type = value;\n }\n\n isRepeated(value) {\n var tag = this.tag;\n tag.isRepeated = value;\n }\n\n targetProperty(value) {\n var tag = this.tag;\n tag.targetProperty = value;\n }\n\n /**\n * Declare a nested tag.\n *\n * Example:\n * {\n * ...\n * \"nested-tags\": {\n * \"tab\": {\n * \"target-property\": \"tabs\",\n * \"is-repeated\": true\n * }\n * }\n * }\n */\n nestedTags(value) {\n var filePath = this.filePath;\n var tag = this.tag;\n\n for (const nestedTagName in value) {\n const nestedTagDef = value[nestedTagName];\n var dependencyChain = this.dependencyChain.append(\n `nestedTags[\"${nestedTagName}\"]`\n );\n var nestedTag = new types.Tag(filePath);\n\n loadTagFromProps(nestedTag, nestedTagDef, dependencyChain);\n\n nestedTag.name = nestedTagName;\n tag.addNestedTag(nestedTag);\n\n if (!nestedTag.isRepeated) {\n let attr = loaders.loadAttributeFromProps(\n nestedTag.targetProperty,\n { type: \"object\" },\n dependencyChain\n );\n\n tag.addAttribute(attr);\n }\n }\n }\n\n openTagOnly(value) {\n this.tag.openTagOnly = value;\n }\n\n /**\n * The description of the tag. Only used for documentation.\n */\n description(value) {\n this.tag.description = value;\n }\n\n autocomplete(value) {\n this.tag.autocomplete = value;\n }\n\n parseOptions(value) {\n this.tag.parseOptions = value;\n }\n\n deprecated(value) {\n this.tag.deprecated = value;\n }\n\n attributeGroups(value) {\n if (!value) {\n return;\n }\n\n var attributeGroups =\n this.tag.attributeGroups || (this.tag.attributeGroups = []);\n this.tag.attributeGroups = attributeGroups.concat(value);\n }\n\n html(value) {\n this.tag.html = value === true;\n }\n\n htmlType(value) {\n this.tag.htmlType = value;\n }\n\n featureFlags(value) {\n this.tag.featureFlags = value;\n }\n}\n\nfunction isSupportedProperty(name) {\n return hasOwnProperty.call(TagLoader.prototype, name);\n}\n\nfunction loadTagFromProps(tag, tagProps, dependencyChain) {\n ok(typeof tagProps === \"object\", 'Invalid \"tagProps\"');\n ok(dependencyChain, '\"dependencyChain\" is required');\n\n var tagLoader = new TagLoader(tag, dependencyChain);\n\n try {\n tagLoader.load(tagProps);\n } catch (err) {\n throw createError(\n \"Unable to load tag (\" + dependencyChain + \"): \" + err,\n err\n );\n }\n\n return tag;\n}\n\nmodule.exports = loadTagFromProps;\n\nloadTagFromProps.isSupportedProperty = isSupportedProperty;\n"],"file":"loadTagFromProps.js"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@marko/compiler",
3
3
  "description": "Marko template to JS compiler.",
4
- "version": "5.18.2",
4
+ "version": "5.19.0",
5
5
  "author": "Dylan Piercey <dpiercey@ebay.com>",
6
6
  "bugs": "https://github.com/marko-js/marko/issues/new?template=Bug_report.md",
7
7
  "dependencies": {
@@ -13,7 +13,7 @@
13
13
  "@babel/runtime": "^7.16.0",
14
14
  "@babel/traverse": "^7.16.0",
15
15
  "@babel/types": "^7.16.0",
16
- "@marko/babel-utils": "^5.18.2",
16
+ "@marko/babel-utils": "^5.19.0",
17
17
  "complain": "^1.6.0",
18
18
  "enhanced-resolve": "5.7.0",
19
19
  "he": "^1.2.0",
@@ -29,7 +29,7 @@
29
29
  "strip-json-comments": "^3.1.1"
30
30
  },
31
31
  "devDependencies": {
32
- "@marko/translator-default": "^5.18.2"
32
+ "@marko/translator-default": "^5.19.0"
33
33
  },
34
34
  "files": [
35
35
  "dist",
@@ -60,5 +60,5 @@
60
60
  "url": "https://github.com/marko-js/marko/tree/master/packages/compiler"
61
61
  },
62
62
  "types": "index.d.ts",
63
- "gitHead": "65999cf2accd091c1455705b94b91ca1ed64203f"
63
+ "gitHead": "07f5e26b79d46982caf0d1ed593675b4778877ac"
64
64
  }