{{## def.assignDefault:

{{? it.compositeRule }}
  {{
    if (it.opts.strictDefaults) {
      var $defaultMsg = 'default is ignored for: ' + $passData;
      if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg);
      else throw new Error($defaultMsg);
    }
  }}
{{??}}
  if ({{=$passData}} === undefined
    {{? it.opts.useDefaults == 'empty' }}
      || {{=$passData}} === null
      || {{=$passData}} === ''
    {{?}}
  )
    {{=$passData}} = {{? it.opts.useDefaults == 'shared' }}
                       {{= it.useDefault($sch.default) }}
                     {{??}}
                       {{= JSON.stringify($sch.default) }}
                     {{?}};
{{?}}

#}}

{{## def.defaultProperties:

{{
  var $schema = it.schema.properties
    , $schemaKeys = Object.keys($schema); }}
{{~ $schemaKeys:$propertyKey }}
  {{ var $sch = $schema[$propertyKey]; }}
  {{? $sch.default !== undefined }}
    {{ var $passData = $data + it.util.getProperty($propertyKey); }}
    {{# def.assignDefault }}
  {{?}}
{{~}}

#}}

{{## def.defaultItems:

{{~ it.schema.items:$sch:$i }}
  {{? $sch.default !== undefined }}
    {{ var $passData = $data + '[' + $i + ']'; }}
    {{# def.assignDefault }}
  {{?}}
{{~}}

#}}