#! /usr/bin/env perl # -*- perl -*-
my
$q
= Qgoda->new({
quiet
=> 1,
log_stderr
=> 1});
my
$node_modules
=
$q
->nodeModules;
my
$env
= Qgoda::JavaScript::Environment->new(
global
=>
$node_modules
);
my
$input
=
<<'EOF';
foo: '1'
bar: 'false'
baz: ['true']
EOF
my
$schema
= {
type
=>
'object'
,
properties
=> {
foo
=> {
type
=>
'number'
},
bar
=> {
type
=>
'boolean'
},
baz
=> {
type
=>
'boolean'
}
},
required
=> [
qw(foo bar)
]
};
$env
->vm->set(
'input'
,
$input
);
$env
->vm->set(
'schema'
,
$schema
);
my
$data
=
$env
->run(
<<'EOF');
const yaml = require('js-yaml');
const Ajv = require('ajv');
var unserialized = yaml.safeLoad(input),
config = yaml.safeLoad(input),
ajv = new Ajv({useDefaults: true, coerceTypes: 'array'}),
validate = ajv.compile(schema),
valid = validate(config);
EOF
my
$expected
= {
foo
=>
'1'
,
bar
=>
'false'
,
baz
=> [
'true'
]
};
my
$got
=
$env
->vm->get(
'unserialized'
);
is_deeply
$got
,
$expected
;
$got
=
$env
->vm->get(
'valid'
);
is
$got
, 1;
$expected
= {
foo
=> 1,
bar
=> 0,
baz
=> 1
};
my
$config
=
$env
->vm->get(
'config'
);
foreach
my
$key
(
keys
%$config
) {
$config
->{
$key
} =
"$config->{$key}"
if
$config
->{
$key
} =~ /^[0-9]+$/;
}
foreach
my
$key
(
keys
%$expected
) {
$expected
->{
$key
} =
"$expected->{$key}"
if
$expected
->{
$key
} =~ /^[0-9]+$/;
}
is_deeply
$config
,
$expected
;
$YAML::XS::Boolean
=
'JSON::PP'
;
my
$got
= Dump(
$config
);
done_testing;