Filename | /Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Document.pm |
Statements | Executed 48513 statements in 143ms |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
47846 | 1 | 1 | 147ms | 239ms | data | JSON::Schema::Modern::Document::
15 | 2 | 2 | 998µs | 108s | BUILD (recurses: max depth 1, inclusive time 185ms) | JSON::Schema::Modern::Document::
22 | 1 | 1 | 824µs | 31.9ms | __ANON__[:135] | JSON::Schema::Modern::Document::
14 | 1 | 1 | 486µs | 146ms | traverse | JSON::Schema::Modern::Document::
25 | 4 | 4 | 125µs | 906µs | __ANON__[:39] | JSON::Schema::Modern::Document::
12 | 1 | 1 | 121µs | 506µs | __ANON__[:90] | JSON::Schema::Modern::Document::
15 | 2 | 2 | 113µs | 1.21ms | __ANON__[:45] | JSON::Schema::Modern::Document::
36 | 1 | 1 | 76µs | 76µs | CORE:match (opcode) | JSON::Schema::Modern::Document::
8 | 1 | 1 | 62µs | 96µs | __ANON__[:38] | JSON::Schema::Modern::Document::
1 | 1 | 1 | 50µs | 55µs | BEGIN@1.110 | JSON::Schema::Modern::
15 | 1 | 1 | 50µs | 50µs | __ANON__[:110] | JSON::Schema::Modern::Document::
1 | 1 | 1 | 33µs | 1.26ms | BEGIN@24 | JSON::Schema::Modern::Document::
15 | 1 | 1 | 29µs | 29µs | __ANON__[:78] | JSON::Schema::Modern::Document::
1 | 1 | 1 | 27µs | 840µs | BEGIN@11 | JSON::Schema::Modern::Document::
1 | 1 | 1 | 27µs | 72µs | BEGIN@19 | JSON::Schema::Modern::Document::
15 | 2 | 2 | 21µs | 21µs | FOREIGNBUILDARGS | JSON::Schema::Modern::Document::
1 | 1 | 1 | 18µs | 422µs | BEGIN@10 | JSON::Schema::Modern::Document::
1 | 1 | 1 | 14µs | 43µs | BEGIN@13 | JSON::Schema::Modern::Document::
1 | 1 | 1 | 14µs | 14µs | BEGIN@9 | JSON::Schema::Modern::Document::
1 | 1 | 1 | 13µs | 21µs | BEGIN@17 | JSON::Schema::Modern::Document::
1 | 1 | 1 | 12µs | 148µs | BEGIN@12 | JSON::Schema::Modern::Document::
1 | 1 | 1 | 12µs | 103µs | BEGIN@23 | JSON::Schema::Modern::Document::
1 | 1 | 1 | 11µs | 50µs | BEGIN@18 | JSON::Schema::Modern::Document::
1 | 1 | 1 | 10µs | 23µs | BEGIN@14 | JSON::Schema::Modern::Document::
1 | 1 | 1 | 10µs | 600µs | BEGIN@22 | JSON::Schema::Modern::Document::
1 | 1 | 1 | 9µs | 19µs | BEGIN@16 | JSON::Schema::Modern::Document::
1 | 1 | 1 | 9µs | 25µs | BEGIN@20 | JSON::Schema::Modern::Document::
1 | 1 | 1 | 9µs | 98µs | BEGIN@21 | JSON::Schema::Modern::Document::
1 | 1 | 1 | 8µs | 21µs | BEGIN@15 | JSON::Schema::Modern::Document::
1 | 1 | 1 | 7µs | 375µs | BEGIN@25 | JSON::Schema::Modern::Document::
1 | 1 | 1 | 6µs | 41µs | BEGIN@2.111 | JSON::Schema::Modern::
0 | 0 | 0 | 0s | 0s | TO_JSON | JSON::Schema::Modern::Document::
0 | 0 | 0 | 0s | 0s | validate | JSON::Schema::Modern::Document::
Line | State ments |
Time on line |
Calls | Time in subs |
Code |
---|---|---|---|---|---|
1 | 2 | 39µs | 2 | 60µs | # spent 55µs (50+5) within JSON::Schema::Modern::BEGIN@1.110 which was called:
# once (50µs+5µs) by JSON::Schema::Modern::BEGIN@35 at line 1 # spent 55µs making 1 call to JSON::Schema::Modern::BEGIN@1.110
# spent 5µs making 1 call to strict::import |
2 | 2 | 67µs | 2 | 76µs | # spent 41µs (6+35) within JSON::Schema::Modern::BEGIN@2.111 which was called:
# once (6µs+35µs) by JSON::Schema::Modern::BEGIN@35 at line 2 # spent 41µs making 1 call to JSON::Schema::Modern::BEGIN@2.111
# spent 35µs making 1 call to warnings::import |
3 | package JSON::Schema::Modern::Document; | ||||
4 | # vim: set ts=8 sts=2 sw=2 tw=100 et : | ||||
5 | # ABSTRACT: One JSON Schema document | ||||
6 | |||||
7 | 1 | 1µs | our $VERSION = '0.556'; | ||
8 | |||||
9 | 2 | 45µs | 1 | 14µs | # spent 14µs within JSON::Schema::Modern::Document::BEGIN@9 which was called:
# once (14µs+0s) by JSON::Schema::Modern::BEGIN@35 at line 9 # spent 14µs making 1 call to JSON::Schema::Modern::Document::BEGIN@9 |
10 | 2 | 54µs | 2 | 826µs | # spent 422µs (18+404) within JSON::Schema::Modern::Document::BEGIN@10 which was called:
# once (18µs+404µs) by JSON::Schema::Modern::BEGIN@35 at line 10 # spent 422µs making 1 call to JSON::Schema::Modern::Document::BEGIN@10
# spent 404µs making 1 call to Moo::import |
11 | 3 | 117µs | 3 | 1.65ms | # spent 840µs (27+813) within JSON::Schema::Modern::Document::BEGIN@11 which was called:
# once (27µs+813µs) by JSON::Schema::Modern::BEGIN@35 at line 11 # spent 840µs making 1 call to JSON::Schema::Modern::Document::BEGIN@11
# spent 791µs making 1 call to strictures::import
# spent 21µs making 1 call to strictures::VERSION |
12 | 2 | 49µs | 2 | 284µs | # spent 148µs (12+136) within JSON::Schema::Modern::Document::BEGIN@12 which was called:
# once (12µs+136µs) by JSON::Schema::Modern::BEGIN@35 at line 12 # spent 148µs making 1 call to JSON::Schema::Modern::Document::BEGIN@12
# spent 136µs making 1 call to experimental::import |
13 | 2 | 27µs | 2 | 46µs | # spent 43µs (14+29) within JSON::Schema::Modern::Document::BEGIN@13 which was called:
# once (14µs+29µs) by JSON::Schema::Modern::BEGIN@35 at line 13 # spent 43µs making 1 call to JSON::Schema::Modern::Document::BEGIN@13
# spent 3µs making 1 call to if::import |
14 | 2 | 21µs | 2 | 24µs | # spent 23µs (10+13) within JSON::Schema::Modern::Document::BEGIN@14 which was called:
# once (10µs+13µs) by JSON::Schema::Modern::BEGIN@35 at line 14 # spent 23µs making 1 call to JSON::Schema::Modern::Document::BEGIN@14
# spent 1µs making 1 call to if::unimport |
15 | 2 | 19µs | 2 | 23µs | # spent 21µs (8+13) within JSON::Schema::Modern::Document::BEGIN@15 which was called:
# once (8µs+13µs) by JSON::Schema::Modern::BEGIN@35 at line 15 # spent 21µs making 1 call to JSON::Schema::Modern::Document::BEGIN@15
# spent 2µs making 1 call to if::unimport |
16 | 2 | 58µs | 2 | 20µs | # spent 19µs (9+10) within JSON::Schema::Modern::Document::BEGIN@16 which was called:
# once (9µs+10µs) by JSON::Schema::Modern::BEGIN@35 at line 16 # spent 19µs making 1 call to JSON::Schema::Modern::Document::BEGIN@16
# spent 1µs making 1 call to if::unimport |
17 | 2 | 46µs | 2 | 29µs | # spent 21µs (13+8) within JSON::Schema::Modern::Document::BEGIN@17 which was called:
# once (13µs+8µs) by JSON::Schema::Modern::BEGIN@35 at line 17 # spent 21µs making 1 call to JSON::Schema::Modern::Document::BEGIN@17
# spent 8µs making 1 call to Mojo::Base::import |
18 | 2 | 32µs | 2 | 89µs | # spent 50µs (11+39) within JSON::Schema::Modern::Document::BEGIN@18 which was called:
# once (11µs+39µs) by JSON::Schema::Modern::BEGIN@35 at line 18 # spent 50µs making 1 call to JSON::Schema::Modern::Document::BEGIN@18
# spent 39µs making 1 call to Exporter::import |
19 | 3 | 46µs | 3 | 95µs | # spent 72µs (27+45) within JSON::Schema::Modern::Document::BEGIN@19 which was called:
# once (27µs+45µs) by JSON::Schema::Modern::BEGIN@35 at line 19 # spent 72µs making 1 call to JSON::Schema::Modern::Document::BEGIN@19
# spent 12µs making 1 call to UNIVERSAL::VERSION
# spent 11µs making 1 call to List::Util::import |
20 | 3 | 25µs | 3 | 41µs | # spent 25µs (9+16) within JSON::Schema::Modern::Document::BEGIN@20 which was called:
# once (9µs+16µs) by JSON::Schema::Modern::BEGIN@35 at line 20 # spent 25µs making 1 call to JSON::Schema::Modern::Document::BEGIN@20
# spent 11µs making 1 call to Exporter::import
# spent 5µs making 1 call to UNIVERSAL::VERSION |
21 | 3 | 30µs | 3 | 187µs | # spent 98µs (9+89) within JSON::Schema::Modern::Document::BEGIN@21 which was called:
# once (9µs+89µs) by JSON::Schema::Modern::BEGIN@35 at line 21 # spent 98µs making 1 call to JSON::Schema::Modern::Document::BEGIN@21
# spent 86µs making 1 call to Exporter::import
# spent 3µs making 1 call to UNIVERSAL::VERSION |
22 | 2 | 39µs | 2 | 1.19ms | # spent 600µs (10+590) within JSON::Schema::Modern::Document::BEGIN@22 which was called:
# once (10µs+590µs) by JSON::Schema::Modern::BEGIN@35 at line 22 # spent 600µs making 1 call to JSON::Schema::Modern::Document::BEGIN@22
# spent 590µs making 1 call to MooX::TypeTiny::import |
23 | 2 | 70µs | 2 | 194µs | # spent 103µs (12+91) within JSON::Schema::Modern::Document::BEGIN@23 which was called:
# once (12µs+91µs) by JSON::Schema::Modern::BEGIN@35 at line 23 # spent 103µs making 1 call to JSON::Schema::Modern::Document::BEGIN@23
# spent 91µs making 1 call to MooX::HandlesVia::import |
24 | 3 | 72µs | 3 | 2.48ms | # spent 1.26ms (33µs+1.22) within JSON::Schema::Modern::Document::BEGIN@24 which was called:
# once (33µs+1.22ms) by JSON::Schema::Modern::BEGIN@35 at line 24 # spent 1.26ms making 1 call to JSON::Schema::Modern::Document::BEGIN@24
# spent 1.21ms making 1 call to Exporter::Tiny::import
# spent 12µs making 1 call to UNIVERSAL::VERSION |
25 | 2 | 1.36ms | 2 | 743µs | # spent 375µs (7+368) within JSON::Schema::Modern::Document::BEGIN@25 which was called:
# once (7µs+368µs) by JSON::Schema::Modern::BEGIN@35 at line 25 # spent 375µs making 1 call to JSON::Schema::Modern::Document::BEGIN@25
# spent 368µs making 1 call to namespace::clean::import |
26 | |||||
27 | 1 | 3µs | 1 | 2.45ms | extends 'Mojo::JSON::Pointer'; # spent 2.45ms making 1 call to JSON::Schema::Modern::Document::extends |
28 | |||||
29 | 1 | 3µs | 1 | 790µs | has schema => ( # spent 790µs making 1 call to MooX::HandlesVia::has |
30 | is => 'ro', | ||||
31 | required => 1, | ||||
32 | ); | ||||
33 | |||||
34 | has canonical_uri => ( | ||||
35 | is => 'rwp', | ||||
36 | isa => (InstanceOf['Mojo::URL'])->where(q{not defined $_->fragment}), | ||||
37 | lazy => 1, | ||||
38 | 8 | 53µs | 8 | 34µs | # spent 96µs (62+34) within JSON::Schema::Modern::Document::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Document.pm:38] which was called 8 times, avg 12µs/call:
# 8 times (62µs+34µs) by JSON::Schema::Modern::Document::canonical_uri at line 33 of (eval 263)[Sub/Quote.pm:3], avg 12µs/call # spent 34µs making 8 calls to Mojo::URL::new, avg 4µs/call |
39 | 25 | 104µs | 26 | 781µs | # spent 906µs (125+781) within JSON::Schema::Modern::Document::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Document.pm:39] which was called 25 times, avg 36µs/call:
# 10 times (40µs+137µs) by JSON::Schema::Modern::Document::_set_canonical_uri at line 28 of (eval 264)[Sub/Quote.pm:3], avg 18µs/call
# 8 times (38µs+147µs) by JSON::Schema::Modern::Document::canonical_uri at line 33 of (eval 263)[Sub/Quote.pm:3], avg 23µs/call
# 6 times (24µs+78µs) by JSON::Schema::Modern::Document::new at line 65 of (eval 424)[Sub/Quote.pm:3], avg 17µs/call
# once (23µs+419µs) by JSON::Schema::Modern::Document::OpenAPI::new at line 68 of (eval 417)[Sub/Quote.pm:3] # spent 399µs making 1 call to Mojo::URL::new
# spent 382µs making 25 calls to Safe::Isa::__ANON__[Safe/Isa.pm:23], avg 15µs/call |
40 | 1 | 29µs | 3 | 4.50ms | ); # spent 4.03ms making 1 call to MooX::HandlesVia::has
# spent 278µs making 1 call to Type::Tiny::where
# spent 196µs making 1 call to Types::Standard::InstanceOf |
41 | |||||
42 | has metaschema_uri => ( | ||||
43 | is => 'rwp', | ||||
44 | isa => InstanceOf['Mojo::URL'], | ||||
45 | 15 | 87µs | 30 | 1.09ms | # spent 1.21ms (113µs+1.09) within JSON::Schema::Modern::Document::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Document.pm:45] which was called 15 times, avg 81µs/call:
# 14 times (102µs+999µs) by JSON::Schema::Modern::Document::_set_metaschema_uri at line 28 of (eval 266)[Sub/Quote.pm:3], avg 79µs/call
# once (11µs+96µs) by JSON::Schema::Modern::Document::OpenAPI::new at line 128 of (eval 417)[Sub/Quote.pm:3] # spent 921µs making 15 calls to Mojo::URL::new, avg 61µs/call
# spent 174µs making 15 calls to Safe::Isa::__ANON__[Safe/Isa.pm:23], avg 12µs/call |
46 | 1 | 12µs | 2 | 1.99ms | ); # spent 1.80ms making 1 call to MooX::HandlesVia::has
# spent 195µs making 1 call to Types::Standard::InstanceOf |
47 | |||||
48 | 1 | 8µs | 2 | 2.91ms | has evaluator => ( # spent 2.27ms making 1 call to MooX::HandlesVia::has
# spent 640µs making 1 call to Types::Standard::InstanceOf |
49 | is => 'rwp', | ||||
50 | isa => InstanceOf['JSON::Schema::Modern'], | ||||
51 | weak_ref => 1, | ||||
52 | ); | ||||
53 | |||||
54 | # "A JSON Schema resource is a schema which is canonically identified by an absolute URI." | ||||
55 | # https://json-schema.org/draft/2020-12/json-schema-core.html#rfc.section.4.3.5 | ||||
56 | has resource_index => ( | ||||
57 | is => 'bare', | ||||
58 | isa => HashRef[my $resource_type = Dict[ | ||||
59 | canonical_uri => InstanceOf['Mojo::URL'], | ||||
60 | path => Str, # always a JSON pointer, relative to the document root | ||||
61 | specification_version => Str, # not an Enum due to module load ordering | ||||
62 | # the vocabularies used when evaluating instance data against schema | ||||
63 | vocabularies => ArrayRef[ClassName->where(q{$_->DOES('JSON::Schema::Modern::Vocabulary')})], | ||||
64 | configs => HashRef, | ||||
65 | Slurpy[HashRef[Undef]], # no other fields allowed | ||||
66 | ]], | ||||
67 | handles_via => 'Hash', | ||||
68 | handles => { | ||||
69 | resource_index => 'elements', | ||||
70 | resource_pairs => 'kv', | ||||
71 | _add_resources => 'set', | ||||
72 | _get_resource => 'get', | ||||
73 | _remove_resource => 'delete', | ||||
74 | _canonical_resources => 'values', | ||||
75 | }, | ||||
76 | init_arg => undef, | ||||
77 | lazy => 1, | ||||
78 | 15 | 32µs | # spent 29µs within JSON::Schema::Modern::Document::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Document.pm:78] which was called 15 times, avg 2µs/call:
# 15 times (29µs+0s) by JSON::Schema::Modern::Document::_assert_resource_index at line 23 of (eval 297)[Sub/Quote.pm:3], avg 2µs/call | ||
79 | 1 | 82µs | 13 | 27.5ms | ); # spent 10.2ms making 1 call to MooX::HandlesVia::has
# spent 8.84ms making 1 call to Types::Standard::Dict
# spent 5.79ms making 3 calls to Types::Standard::HashRef, avg 1.93ms/call
# spent 1.31ms making 1 call to Types::Standard::Slurpy
# spent 1.01ms making 1 call to Types::Standard::ArrayRef
# spent 287µs making 1 call to Type::Tiny::where
# spent 128µs making 1 call to Types::Standard::InstanceOf
# spent 7µs making 1 call to Types::Standard::Undef
# spent 3µs making 2 calls to Types::Standard::Str, avg 2µs/call
# spent 1µs making 1 call to Types::Standard::ClassName |
80 | |||||
81 | has _path_to_resource => ( | ||||
82 | is => 'bare', | ||||
83 | isa => HashRef[$resource_type], | ||||
84 | handles_via => 'Hash', | ||||
85 | handles => { | ||||
86 | path_to_resource => 'get', | ||||
87 | }, | ||||
88 | init_arg => undef, | ||||
89 | lazy => 1, | ||||
90 | 12 | 142µs | 12 | 385µs | # spent 506µs (121+385) within JSON::Schema::Modern::Document::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Document.pm:90] which was called 12 times, avg 42µs/call:
# 12 times (121µs+385µs) by JSON::Schema::Modern::Document::_assert__path_to_resource at line 23 of (eval 299)[Sub/Quote.pm:3], avg 42µs/call # spent 385µs making 12 calls to JSON::Schema::Modern::Document::_canonical_resources, avg 32µs/call |
91 | 1 | 8µs | 2 | 3.42ms | ); # spent 3.36ms making 1 call to MooX::HandlesVia::has
# spent 63µs making 1 call to Types::Standard::HashRef |
92 | |||||
93 | # for internal use only | ||||
94 | 1 | 4µs | 2 | 747µs | has _serialized_schema => ( # spent 746µs making 1 call to MooX::HandlesVia::has
# spent 1µs making 1 call to Types::Standard::Str |
95 | is => 'rw', | ||||
96 | isa => Str, | ||||
97 | init_arg => undef, | ||||
98 | ); | ||||
99 | |||||
100 | has errors => ( | ||||
101 | is => 'bare', | ||||
102 | handles_via => 'Array', | ||||
103 | handles => { | ||||
104 | errors => 'elements', | ||||
105 | has_errors => 'count', | ||||
106 | }, | ||||
107 | writer => '_set_errors', | ||||
108 | isa => ArrayRef[InstanceOf['JSON::Schema::Modern::Error']], | ||||
109 | lazy => 1, | ||||
110 | 15 | 83µs | # spent 50µs within JSON::Schema::Modern::Document::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Document.pm:110] which was called 15 times, avg 3µs/call:
# 15 times (50µs+0s) by JSON::Schema::Modern::Document::_assert_errors at line 23 of (eval 304)[Sub/Quote.pm:3], avg 3µs/call | ||
111 | 1 | 12µs | 3 | 2.66ms | ); # spent 2.56ms making 1 call to MooX::HandlesVia::has
# spent 66µs making 1 call to Types::Standard::InstanceOf
# spent 38µs making 1 call to Types::Standard::ArrayRef |
112 | |||||
113 | # spent 31.9ms (824µs+31.1) within JSON::Schema::Modern::Document::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Document.pm:135] which was called 22 times, avg 1.45ms/call:
# 22 times (824µs+31.1ms) by JSON::Schema::Modern::Document::__ANON__[(eval 306)[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Class/Method/Modifiers.pm:89]:1] at line 1 of (eval 306)[Class/Method/Modifiers.pm:89], avg 1.45ms/call | ||||
114 | 22 | 4µs | my $orig = shift; | ||
115 | 22 | 10µs | my $self = shift; | ||
116 | |||||
117 | 22 | 290µs | 22 | 154µs | foreach my $pair (pairs @_) { # spent 154µs making 22 calls to List::Util::pairs, avg 7µs/call |
118 | 36 | 22µs | my ($key, $value) = @$pair; | ||
119 | |||||
120 | 36 | 275µs | 108 | 8.72ms | $resource_type->($value); # check type of hash value against Dict # spent 4.93ms making 36 calls to Sub::Defer::__ANON__[Sub/Defer.pm:178], avg 137µs/call
# spent 3.79ms making 72 calls to Type::Tiny::__ANON__[Type/Tiny.pm:89], avg 53µs/call |
121 | |||||
122 | 36 | 115µs | 44 | 8.47ms | if (my $existing = $self->_get_resource($key)) { # spent 7.51ms making 36 calls to JSON::Schema::Modern::Document::_get_resource, avg 209µs/call
# spent 958µs making 8 calls to Mojo::URL::__ANON__[Mojo/URL.pm:3], avg 120µs/call |
123 | croak 'uri "'.$key.'" conflicts with an existing schema resource' | ||||
124 | if $existing->{path} ne $value->{path} | ||||
125 | or $existing->{canonical_uri} ne $value->{canonical_uri} | ||||
126 | or $existing->{specification_version} ne $value->{specification_version}; | ||||
127 | } | ||||
128 | |||||
129 | # this will never happen, if we parsed $id correctly | ||||
130 | croak sprintf('a resource canonical uri cannot contain a plain-name fragment (%s)', $value->{canonical_uri}) | ||||
131 | 36 | 186µs | 72 | 111µs | if ($value->{canonical_uri}->fragment // '') =~ m{^[^/]}; # spent 76µs making 36 calls to JSON::Schema::Modern::Document::CORE:match, avg 2µs/call
# spent 35µs making 36 calls to Mojo::URL::fragment, avg 972ns/call |
132 | |||||
133 | 36 | 125µs | 36 | 10.2ms | $self->$orig($key, $value); # spent 10.2ms making 36 calls to JSON::Schema::Modern::Document::_add_resources, avg 284µs/call |
134 | } | ||||
135 | 1 | 13µs | 1 | 476µs | }; # spent 476µs making 1 call to Moo::around |
136 | |||||
137 | # shims for Mojo::JSON::Pointer | ||||
138 | 47846 | 138ms | 47846 | 91.7ms | # spent 239ms (147+91.7) within JSON::Schema::Modern::Document::data which was called 47846 times, avg 5µs/call:
# 47846 times (147ms+91.7ms) by Mojo::JSON::Pointer::_pointer at line 14 of Mojo/JSON/Pointer.pm, avg 5µs/call # spent 91.7ms making 47846 calls to JSON::Schema::Modern::Document::schema, avg 2µs/call |
139 | 15 | 51µs | # spent 21µs within JSON::Schema::Modern::Document::FOREIGNBUILDARGS which was called 15 times, avg 1µs/call:
# 14 times (18µs+0s) by JSON::Schema::Modern::Document::new at line 53 of (eval 424)[Sub/Quote.pm:3], avg 1µs/call
# once (3µs+0s) by JSON::Schema::Modern::Document::OpenAPI::new at line 56 of (eval 417)[Sub/Quote.pm:3] | ||
140 | |||||
141 | # for JSON serializers | ||||
142 | sub TO_JSON { shift->schema } | ||||
143 | |||||
144 | 45 | 17µs | # spent 108s (998µs+108) within JSON::Schema::Modern::Document::BUILD which was called 15 times, avg 7.21s/call:
# 14 times (853µs+-853µs) by JSON::Schema::Modern::Document::new at line 114 of (eval 424)[Sub/Quote.pm:3], avg 0s/call
# once (145µs+108s) by JSON::Schema::Modern::Document::OpenAPI::new at line 149 of (eval 417)[Sub/Quote.pm:3] | ||
145 | 15 | 112µs | 30 | 856µs | my $original_uri = $self->canonical_uri->clone; # spent 508µs making 15 calls to JSON::Schema::Modern::Document::canonical_uri, avg 34µs/call
# spent 348µs making 15 calls to Mojo::URL::clone, avg 23µs/call |
146 | 15 | 74µs | 30 | 108s | my $state = $self->traverse($self->evaluator // JSON::Schema::Modern->new); # spent 108s making 1 call to JSON::Schema::Modern::Document::OpenAPI::traverse
# spent 146ms making 14 calls to JSON::Schema::Modern::Document::traverse, avg 10.5ms/call
# spent 31µs making 14 calls to JSON::Schema::Modern::Document::evaluator, avg 2µs/call
# spent 3µs making 1 call to JSON::Schema::Modern::Document::OpenAPI::evaluator |
147 | |||||
148 | # if the schema identified a canonical uri for itself, it overrides the initial value | ||||
149 | 15 | 147µs | 40 | 3.59ms | $self->_set_canonical_uri($state->{initial_schema_uri}) if $state->{initial_schema_uri} ne $original_uri; # spent 3.21ms making 30 calls to Mojo::URL::__ANON__[Mojo/URL.pm:3], avg 107µs/call
# spent 380µs making 10 calls to JSON::Schema::Modern::Document::_set_canonical_uri, avg 38µs/call |
150 | |||||
151 | 15 | 11µs | if ($state->{errors}->@*) { | ||
152 | foreach my $error ($state->{errors}->@*) { | ||||
153 | $error->mode('traverse') if not defined $error->mode; | ||||
154 | } | ||||
155 | |||||
156 | $self->_set_errors($state->{errors}); | ||||
157 | return; | ||||
158 | } | ||||
159 | |||||
160 | # make sure the root schema is always indexed against *something*. | ||||
161 | $self->_add_resources($original_uri => { | ||||
162 | path => '', | ||||
163 | canonical_uri => $self->canonical_uri, | ||||
164 | specification_version => $state->{spec_version}, | ||||
165 | vocabularies => $state->{vocabularies}, | ||||
166 | configs => $state->{configs}, | ||||
167 | }) | ||||
168 | 15 | 167µs | 68 | 12.6ms | if (not "$original_uri" and $original_uri eq $self->canonical_uri) # spent 9.78ms making 7 calls to JSON::Schema::Modern::Document::_add_resources, avg 1.40ms/call
# spent 2.80ms making 46 calls to Mojo::URL::__ANON__[Mojo/URL.pm:3], avg 61µs/call
# spent 47µs making 15 calls to JSON::Schema::Modern::Document::canonical_uri, avg 3µs/call |
169 | or "$original_uri"; | ||||
170 | |||||
171 | 15 | 246µs | 15 | 22.4ms | $self->_add_resources($state->{identifiers}->@*); # spent 22.4ms making 15 calls to JSON::Schema::Modern::Document::_add_resources, avg 1.49ms/call |
172 | } | ||||
173 | |||||
174 | 42 | 6µs | # spent 146ms (486µs+146) within JSON::Schema::Modern::Document::traverse which was called 14 times, avg 10.5ms/call:
# 14 times (486µs+146ms) by JSON::Schema::Modern::Document::BUILD at line 146, avg 10.5ms/call | ||
175 | die 'wrong class - use JSON::Schema::Modern::Document::OpenAPI instead' | ||||
176 | 14 | 44µs | 28 | 28µs | if is_plain_hashref($self->schema) and exists $self->schema->{openapi}; # spent 28µs making 28 calls to JSON::Schema::Modern::Document::schema, avg 1µs/call |
177 | |||||
178 | 14 | 144µs | 70 | 144ms | my $state = $evaluator->traverse($self->schema, # spent 144ms making 14 calls to JSON::Schema::Modern::traverse, avg 10.3ms/call
# spent 184µs making 14 calls to Mojo::URL::clone, avg 13µs/call
# spent 26µs making 14 calls to JSON::Schema::Modern::Document::metaschema_uri, avg 2µs/call
# spent 12µs making 14 calls to JSON::Schema::Modern::Document::canonical_uri, avg 857ns/call
# spent 5µs making 14 calls to JSON::Schema::Modern::Document::schema, avg 357ns/call |
179 | { | ||||
180 | initial_schema_uri => $self->canonical_uri->clone, | ||||
181 | $self->metaschema_uri ? ( metaschema_uri => $self->metaschema_uri) : (), | ||||
182 | } | ||||
183 | ); | ||||
184 | |||||
185 | 14 | 9µs | return $state if $state->{errors}->@*; | ||
186 | |||||
187 | # we don't store the metaschema_uri in $state nor in resource_index, but we can figure it out | ||||
188 | # easily enough. | ||||
189 | my $metaschema_uri = (is_plain_hashref($self->schema) ? $self->schema->{'$schema'} : undef) | ||||
190 | 14 | 56µs | 28 | 35µs | // $self->metaschema_uri // $evaluator->METASCHEMA_URIS->{$state->{spec_version}}; # spent 35µs making 28 calls to JSON::Schema::Modern::Document::schema, avg 1µs/call |
191 | |||||
192 | 14 | 70µs | 28 | 1.42ms | $self->_set_metaschema_uri($metaschema_uri) if $metaschema_uri ne ($self->metaschema_uri//''); # spent 1.39ms making 14 calls to JSON::Schema::Modern::Document::_set_metaschema_uri, avg 99µs/call
# spent 28µs making 14 calls to JSON::Schema::Modern::Document::metaschema_uri, avg 2µs/call |
193 | |||||
194 | 14 | 39µs | return $state; | ||
195 | } | ||||
196 | |||||
197 | sub validate ($self) { | ||||
198 | my $js = $self->$_call_if_can('evaluator') // JSON::Schema::Modern->new; | ||||
199 | |||||
200 | return $js->evaluate($self->schema, $self->metaschema_uri); | ||||
201 | } | ||||
202 | |||||
203 | 1 | 69µs | 1; | ||
204 | |||||
205 | 1 | 69µs | 1 | 467µs | __END__ # spent 467µs making 1 call to B::Hooks::EndOfScope::XS::__ANON__[B/Hooks/EndOfScope/XS.pm:26] |
# spent 76µs within JSON::Schema::Modern::Document::CORE:match which was called 36 times, avg 2µs/call:
# 36 times (76µs+0s) by JSON::Schema::Modern::Document::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Document.pm:135] at line 131, avg 2µs/call |