mirror of
https://github.com/idanoo/GoScrobble.git
synced 2024-11-23 00:45:16 +00:00
204 lines
3.9 KiB
Modula-2
204 lines
3.9 KiB
Modula-2
{{## def.setupKeyword:
|
|
{{
|
|
var $lvl = it.level;
|
|
var $dataLvl = it.dataLevel;
|
|
var $schema = it.schema[$keyword];
|
|
var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
|
|
var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
|
|
var $breakOnError = !it.opts.allErrors;
|
|
var $errorKeyword;
|
|
|
|
var $data = 'data' + ($dataLvl || '');
|
|
var $valid = 'valid' + $lvl;
|
|
var $errs = 'errs__' + $lvl;
|
|
}}
|
|
#}}
|
|
|
|
|
|
{{## def.setCompositeRule:
|
|
{{
|
|
var $wasComposite = it.compositeRule;
|
|
it.compositeRule = $it.compositeRule = true;
|
|
}}
|
|
#}}
|
|
|
|
|
|
{{## def.resetCompositeRule:
|
|
{{ it.compositeRule = $it.compositeRule = $wasComposite; }}
|
|
#}}
|
|
|
|
|
|
{{## def.setupNextLevel:
|
|
{{
|
|
var $it = it.util.copy(it);
|
|
var $closingBraces = '';
|
|
$it.level++;
|
|
var $nextValid = 'valid' + $it.level;
|
|
}}
|
|
#}}
|
|
|
|
|
|
{{## def.ifValid:
|
|
{{? $breakOnError }}
|
|
if ({{=$valid}}) {
|
|
{{ $closingBraces += '}'; }}
|
|
{{?}}
|
|
#}}
|
|
|
|
|
|
{{## def.ifResultValid:
|
|
{{? $breakOnError }}
|
|
if ({{=$nextValid}}) {
|
|
{{ $closingBraces += '}'; }}
|
|
{{?}}
|
|
#}}
|
|
|
|
|
|
{{## def.elseIfValid:
|
|
{{? $breakOnError }}
|
|
{{ $closingBraces += '}'; }}
|
|
else {
|
|
{{?}}
|
|
#}}
|
|
|
|
|
|
{{## def.nonEmptySchema:_schema:
|
|
(it.opts.strictKeywords
|
|
? (typeof _schema == 'object' && Object.keys(_schema).length > 0)
|
|
|| _schema === false
|
|
: it.util.schemaHasRules(_schema, it.RULES.all))
|
|
#}}
|
|
|
|
|
|
{{## def.strLength:
|
|
{{? it.opts.unicode === false }}
|
|
{{=$data}}.length
|
|
{{??}}
|
|
ucs2length({{=$data}})
|
|
{{?}}
|
|
#}}
|
|
|
|
|
|
{{## def.willOptimize:
|
|
it.util.varOccurences($code, $nextData) < 2
|
|
#}}
|
|
|
|
|
|
{{## def.generateSubschemaCode:
|
|
{{
|
|
var $code = it.validate($it);
|
|
$it.baseId = $currentBaseId;
|
|
}}
|
|
#}}
|
|
|
|
|
|
{{## def.insertSubschemaCode:
|
|
{{= it.validate($it) }}
|
|
{{ $it.baseId = $currentBaseId; }}
|
|
#}}
|
|
|
|
|
|
{{## def._optimizeValidate:
|
|
it.util.varReplace($code, $nextData, $passData)
|
|
#}}
|
|
|
|
|
|
{{## def.optimizeValidate:
|
|
{{? {{# def.willOptimize}} }}
|
|
{{= {{# def._optimizeValidate }} }}
|
|
{{??}}
|
|
var {{=$nextData}} = {{=$passData}};
|
|
{{= $code }}
|
|
{{?}}
|
|
#}}
|
|
|
|
|
|
{{## def.$data:
|
|
{{
|
|
var $isData = it.opts.$data && $schema && $schema.$data
|
|
, $schemaValue;
|
|
}}
|
|
{{? $isData }}
|
|
var schema{{=$lvl}} = {{= it.util.getData($schema.$data, $dataLvl, it.dataPathArr) }};
|
|
{{ $schemaValue = 'schema' + $lvl; }}
|
|
{{??}}
|
|
{{ $schemaValue = $schema; }}
|
|
{{?}}
|
|
#}}
|
|
|
|
|
|
{{## def.$dataNotType:_type:
|
|
{{?$isData}} ({{=$schemaValue}} !== undefined && typeof {{=$schemaValue}} != _type) || {{?}}
|
|
#}}
|
|
|
|
|
|
{{## def.check$dataIsArray:
|
|
if (schema{{=$lvl}} === undefined) {{=$valid}} = true;
|
|
else if (!Array.isArray(schema{{=$lvl}})) {{=$valid}} = false;
|
|
else {
|
|
#}}
|
|
|
|
|
|
{{## def.numberKeyword:
|
|
{{? !($isData || typeof $schema == 'number') }}
|
|
{{ throw new Error($keyword + ' must be number'); }}
|
|
{{?}}
|
|
#}}
|
|
|
|
|
|
{{## def.beginDefOut:
|
|
{{
|
|
var $$outStack = $$outStack || [];
|
|
$$outStack.push(out);
|
|
out = '';
|
|
}}
|
|
#}}
|
|
|
|
|
|
{{## def.storeDefOut:_variable:
|
|
{{
|
|
var _variable = out;
|
|
out = $$outStack.pop();
|
|
}}
|
|
#}}
|
|
|
|
|
|
{{## def.dataPath:(dataPath || ''){{? it.errorPath != '""'}} + {{= it.errorPath }}{{?}}#}}
|
|
|
|
{{## def.setParentData:
|
|
{{
|
|
var $parentData = $dataLvl ? 'data' + (($dataLvl-1)||'') : 'parentData'
|
|
, $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';
|
|
}}
|
|
#}}
|
|
|
|
{{## def.passParentData:
|
|
{{# def.setParentData }}
|
|
, {{= $parentData }}
|
|
, {{= $parentDataProperty }}
|
|
#}}
|
|
|
|
|
|
{{## def.iterateProperties:
|
|
{{? $ownProperties }}
|
|
{{=$dataProperties}} = {{=$dataProperties}} || Object.keys({{=$data}});
|
|
for (var {{=$idx}}=0; {{=$idx}}<{{=$dataProperties}}.length; {{=$idx}}++) {
|
|
var {{=$key}} = {{=$dataProperties}}[{{=$idx}}];
|
|
{{??}}
|
|
for (var {{=$key}} in {{=$data}}) {
|
|
{{?}}
|
|
#}}
|
|
|
|
|
|
{{## def.noPropertyInData:
|
|
{{=$useData}} === undefined
|
|
{{? $ownProperties }}
|
|
|| !{{# def.isOwnProperty }}
|
|
{{?}}
|
|
#}}
|
|
|
|
|
|
{{## def.isOwnProperty:
|
|
Object.prototype.hasOwnProperty.call({{=$data}}, '{{=it.util.escapeQuotes($propertyKey)}}')
|
|
#}}
|