← Index
NYTProf Performance Profile   « line view »
For ../prof.pl
  Run on Wed Dec 14 15:57:08 2022
Reported on Wed Dec 14 16:00:35 2022

Filename/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Document/OpenAPI.pm
StatementsExecuted 684792 statements in 6.75s
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
466819114.35s4.35sJSON::Schema::Modern::Document::OpenAPI::::CORE:regcompJSON::Schema::Modern::Document::OpenAPI::CORE:regcomp (opcode)
3905511122ms122msJSON::Schema::Modern::Document::OpenAPI::::__ANON__[:144]JSON::Schema::Modern::Document::OpenAPI::__ANON__[:144]
4668263190.7ms90.7msJSON::Schema::Modern::Document::OpenAPI::::CORE:matchJSON::Schema::Modern::Document::OpenAPI::CORE:match (opcode)
11151.5ms108sJSON::Schema::Modern::Document::OpenAPI::::traverseJSON::Schema::Modern::Document::OpenAPI::traverse
9651134.0ms1.41sJSON::Schema::Modern::Document::OpenAPI::::_traverse_schemaJSON::Schema::Modern::Document::OpenAPI::_traverse_schema
25861111.0ms11.0msJSON::Schema::Modern::Document::OpenAPI::::__ANON__[:140]JSON::Schema::Modern::Document::OpenAPI::__ANON__[:140]
111578µs578µsJSON::Schema::Modern::Document::OpenAPI::::CORE:sortJSON::Schema::Modern::Document::OpenAPI::CORE:sort (opcode)
111364µs223msJSON::Schema::Modern::Document::OpenAPI::::_add_vocab_and_default_schemasJSON::Schema::Modern::Document::OpenAPI::_add_vocab_and_default_schemas
11152µs102µsJSON::Schema::Modern::Document::OpenAPI::::BEGIN@14JSON::Schema::Modern::Document::OpenAPI::BEGIN@14
11147µs225µsJSON::Schema::Modern::Document::OpenAPI::::BEGIN@19JSON::Schema::Modern::Document::OpenAPI::BEGIN@19
11129µs32µsOpenAPI::Modern::::BEGIN@1.241 OpenAPI::Modern::BEGIN@1.241
11128µs73µsJSON::Schema::Modern::Document::OpenAPI::::BEGIN@22JSON::Schema::Modern::Document::OpenAPI::BEGIN@22
11122µs52µsJSON::Schema::Modern::Document::OpenAPI::::BEGIN@15JSON::Schema::Modern::Document::OpenAPI::BEGIN@15
11120µs656µsJSON::Schema::Modern::Document::OpenAPI::::BEGIN@25JSON::Schema::Modern::Document::OpenAPI::BEGIN@25
11118µs44µsJSON::Schema::Modern::Document::OpenAPI::::BEGIN@17JSON::Schema::Modern::Document::OpenAPI::BEGIN@17
11117µs632µsJSON::Schema::Modern::Document::OpenAPI::::BEGIN@12JSON::Schema::Modern::Document::OpenAPI::BEGIN@12
11117µs40µsJSON::Schema::Modern::Document::OpenAPI::::BEGIN@16JSON::Schema::Modern::Document::OpenAPI::BEGIN@16
11116µs125µsJSON::Schema::Modern::Document::OpenAPI::::BEGIN@18JSON::Schema::Modern::Document::OpenAPI::BEGIN@18
11111µs90µsJSON::Schema::Modern::Document::OpenAPI::::BEGIN@21JSON::Schema::Modern::Document::OpenAPI::BEGIN@21
11111µs111µsJSON::Schema::Modern::Document::OpenAPI::::BEGIN@24JSON::Schema::Modern::Document::OpenAPI::BEGIN@24
11110µs38µsJSON::Schema::Modern::Document::OpenAPI::::BEGIN@20JSON::Schema::Modern::Document::OpenAPI::BEGIN@20
1119µs397µsJSON::Schema::Modern::Document::OpenAPI::::BEGIN@26JSON::Schema::Modern::Document::OpenAPI::BEGIN@26
1119µs51µsJSON::Schema::Modern::Document::OpenAPI::::BEGIN@31JSON::Schema::Modern::Document::OpenAPI::BEGIN@31
1119µs70µsJSON::Schema::Modern::Document::OpenAPI::::__ANON__[:56]JSON::Schema::Modern::Document::OpenAPI::__ANON__[:56]
1118µs8µsJSON::Schema::Modern::Document::OpenAPI::::BEGIN@10JSON::Schema::Modern::Document::OpenAPI::BEGIN@10
1118µs202µsJSON::Schema::Modern::Document::OpenAPI::::BEGIN@11JSON::Schema::Modern::Document::OpenAPI::BEGIN@11
1118µs249µsJSON::Schema::Modern::Document::OpenAPI::::BEGIN@27JSON::Schema::Modern::Document::OpenAPI::BEGIN@27
1118µs41µsOpenAPI::Modern::::BEGIN@2.242 OpenAPI::Modern::BEGIN@2.242
1117µs88µsJSON::Schema::Modern::Document::OpenAPI::::BEGIN@13JSON::Schema::Modern::Document::OpenAPI::BEGIN@13
1117µs26µsJSON::Schema::Modern::Document::OpenAPI::::BEGIN@33JSON::Schema::Modern::Document::OpenAPI::BEGIN@33
1116µs24µsJSON::Schema::Modern::Document::OpenAPI::::BEGIN@23JSON::Schema::Modern::Document::OpenAPI::BEGIN@23
1114µs20µsJSON::Schema::Modern::Document::OpenAPI::::BEGIN@43JSON::Schema::Modern::Document::OpenAPI::BEGIN@43
0000s0sJSON::Schema::Modern::Document::OpenAPI::::__ANON__[:158]JSON::Schema::Modern::Document::OpenAPI::__ANON__[:158]
0000s0sJSON::Schema::Modern::Document::OpenAPI::::__ANON__[:190]JSON::Schema::Modern::Document::OpenAPI::__ANON__[:190]
0000s0sJSON::Schema::Modern::Document::OpenAPI::::__ANON__[:196]JSON::Schema::Modern::Document::OpenAPI::__ANON__[:196]
0000s0sJSON::Schema::Modern::Document::OpenAPI::::__ANON__[:197]JSON::Schema::Modern::Document::OpenAPI::__ANON__[:197]
0000s0sJSON::Schema::Modern::Document::OpenAPI::::__ANON__[:198]JSON::Schema::Modern::Document::OpenAPI::__ANON__[:198]
0000s0sJSON::Schema::Modern::Document::OpenAPI::::__ANON__[:199]JSON::Schema::Modern::Document::OpenAPI::__ANON__[:199]
0000s0sJSON::Schema::Modern::Document::OpenAPI::::__ANON__[:69]JSON::Schema::Modern::Document::OpenAPI::__ANON__[:69]
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1228µs235µs
# spent 32µs (29+3) within OpenAPI::Modern::BEGIN@1.241 which was called: # once (29µs+3µs) by OpenAPI::Modern::BEGIN@28 at line 1
use strict;
# spent 32µs making 1 call to OpenAPI::Modern::BEGIN@1.241 # spent 3µs making 1 call to strict::import
2241µs274µs
# spent 41µs (8+33) within OpenAPI::Modern::BEGIN@2.242 which was called: # once (8µs+33µs) by OpenAPI::Modern::BEGIN@28 at line 2
use warnings;
# spent 41µs making 1 call to OpenAPI::Modern::BEGIN@2.242 # spent 33µs making 1 call to warnings::import
3package JSON::Schema::Modern::Document::OpenAPI;
4# vim: set ts=8 sts=2 sw=2 tw=100 et :
5# ABSTRACT: One OpenAPI v3.1 document
6# KEYWORDS: JSON Schema data validation request response OpenAPI
7
810sour $VERSION = '0.034';
9
10229µs18µs
# spent 8µs within JSON::Schema::Modern::Document::OpenAPI::BEGIN@10 which was called: # once (8µs+0s) by OpenAPI::Modern::BEGIN@28 at line 10
use 5.020;
11223µs2396µs
# spent 202µs (8+194) within JSON::Schema::Modern::Document::OpenAPI::BEGIN@11 which was called: # once (8µs+194µs) by OpenAPI::Modern::BEGIN@28 at line 11
use Moo;
# spent 202µs making 1 call to JSON::Schema::Modern::Document::OpenAPI::BEGIN@11 # spent 194µs making 1 call to Moo::import
12338µs31.25ms
# spent 632µs (17+615) within JSON::Schema::Modern::Document::OpenAPI::BEGIN@12 which was called: # once (17µs+615µs) by OpenAPI::Modern::BEGIN@28 at line 12
use strictures 2;
# spent 632µs making 1 call to JSON::Schema::Modern::Document::OpenAPI::BEGIN@12 # spent 599µs making 1 call to strictures::import # spent 15µs making 1 call to strictures::VERSION
13243µs2169µs
# spent 88µs (7+81) within JSON::Schema::Modern::Document::OpenAPI::BEGIN@13 which was called: # once (7µs+81µs) by OpenAPI::Modern::BEGIN@28 at line 13
use experimental qw(signatures postderef);
# spent 88µs making 1 call to JSON::Schema::Modern::Document::OpenAPI::BEGIN@13 # spent 81µs making 1 call to experimental::import
14273µs2105µs
# spent 102µs (52+50) within JSON::Schema::Modern::Document::OpenAPI::BEGIN@14 which was called: # once (52µs+50µs) by OpenAPI::Modern::BEGIN@28 at line 14
use if "$]" >= 5.022, experimental => 're_strict';
# spent 102µs making 1 call to JSON::Schema::Modern::Document::OpenAPI::BEGIN@14 # spent 3µs making 1 call to if::import
15244µs254µs
# spent 52µs (22+30) within JSON::Schema::Modern::Document::OpenAPI::BEGIN@15 which was called: # once (22µs+30µs) by OpenAPI::Modern::BEGIN@28 at line 15
no if "$]" >= 5.031009, feature => 'indirect';
# spent 52µs making 1 call to JSON::Schema::Modern::Document::OpenAPI::BEGIN@15 # spent 2µs making 1 call to if::unimport
16268µs241µs
# spent 40µs (17+23) within JSON::Schema::Modern::Document::OpenAPI::BEGIN@16 which was called: # once (17µs+23µs) by OpenAPI::Modern::BEGIN@28 at line 16
no if "$]" >= 5.033001, feature => 'multidimensional';
# spent 40µs making 1 call to JSON::Schema::Modern::Document::OpenAPI::BEGIN@16 # spent 1µs making 1 call to if::unimport
17243µs247µs
# spent 44µs (18+26) within JSON::Schema::Modern::Document::OpenAPI::BEGIN@17 which was called: # once (18µs+26µs) by OpenAPI::Modern::BEGIN@28 at line 17
no if "$]" >= 5.033006, feature => 'bareword_filehandles';
# spent 44µs making 1 call to JSON::Schema::Modern::Document::OpenAPI::BEGIN@17 # spent 3µs making 1 call to if::unimport
18361µs3234µs
# spent 125µs (16+109) within JSON::Schema::Modern::Document::OpenAPI::BEGIN@18 which was called: # once (16µs+109µs) by OpenAPI::Modern::BEGIN@28 at line 18
use JSON::Schema::Modern::Utilities 0.525 qw(assert_keyword_exists assert_keyword_type E canonical_uri get_type);
# spent 125µs making 1 call to JSON::Schema::Modern::Document::OpenAPI::BEGIN@18 # spent 97µs making 1 call to Exporter::import # spent 12µs making 1 call to UNIVERSAL::VERSION
19244µs2403µs
# spent 225µs (47+178) within JSON::Schema::Modern::Document::OpenAPI::BEGIN@19 which was called: # once (47µs+178µs) by OpenAPI::Modern::BEGIN@28 at line 19
use Safe::Isa;
# spent 225µs making 1 call to JSON::Schema::Modern::Document::OpenAPI::BEGIN@19 # spent 178µs making 1 call to Exporter::import
20241µs266µs
# spent 38µs (10+28) within JSON::Schema::Modern::Document::OpenAPI::BEGIN@20 which was called: # once (10µs+28µs) by OpenAPI::Modern::BEGIN@28 at line 20
use File::ShareDir 'dist_dir';
# spent 38µs making 1 call to JSON::Schema::Modern::Document::OpenAPI::BEGIN@20 # spent 28µs making 1 call to Exporter::import
212122µs2169µs
# spent 90µs (11+79) within JSON::Schema::Modern::Document::OpenAPI::BEGIN@21 which was called: # once (11µs+79µs) by OpenAPI::Modern::BEGIN@28 at line 21
use Path::Tiny;
# spent 90µs making 1 call to JSON::Schema::Modern::Document::OpenAPI::BEGIN@21 # spent 79µs making 1 call to Exporter::import
22250µs288µs
# spent 73µs (28+45) within JSON::Schema::Modern::Document::OpenAPI::BEGIN@22 which was called: # once (28µs+45µs) by OpenAPI::Modern::BEGIN@28 at line 22
use List::Util qw(any pairs);
# spent 73µs making 1 call to JSON::Schema::Modern::Document::OpenAPI::BEGIN@22 # spent 15µs making 1 call to List::Util::import
23225µs242µs
# spent 24µs (6+18) within JSON::Schema::Modern::Document::OpenAPI::BEGIN@23 which was called: # once (6µs+18µs) by OpenAPI::Modern::BEGIN@28 at line 23
use Ref::Util 'is_plain_hashref';
# spent 24µs making 1 call to JSON::Schema::Modern::Document::OpenAPI::BEGIN@23 # spent 18µs making 1 call to Exporter::import
24241µs2211µs
# spent 111µs (11+100) within JSON::Schema::Modern::Document::OpenAPI::BEGIN@24 which was called: # once (11µs+100µs) by OpenAPI::Modern::BEGIN@28 at line 24
use MooX::HandlesVia;
# spent 111µs making 1 call to JSON::Schema::Modern::Document::OpenAPI::BEGIN@24 # spent 100µs making 1 call to MooX::HandlesVia::import
25350µs31.29ms
# spent 656µs (20+636) within JSON::Schema::Modern::Document::OpenAPI::BEGIN@25 which was called: # once (20µs+636µs) by OpenAPI::Modern::BEGIN@28 at line 25
use MooX::TypeTiny 0.002002;
# spent 656µs making 1 call to JSON::Schema::Modern::Document::OpenAPI::BEGIN@25 # spent 625µs making 1 call to MooX::TypeTiny::import # spent 11µs making 1 call to UNIVERSAL::VERSION
26231µs2785µs
# spent 397µs (9+388) within JSON::Schema::Modern::Document::OpenAPI::BEGIN@26 which was called: # once (9µs+388µs) by OpenAPI::Modern::BEGIN@28 at line 26
use Types::Standard qw(InstanceOf HashRef Str);
# spent 397µs making 1 call to JSON::Schema::Modern::Document::OpenAPI::BEGIN@26 # spent 388µs making 1 call to Exporter::Tiny::import
27244µs2490µs
# spent 249µs (8+241) within JSON::Schema::Modern::Document::OpenAPI::BEGIN@27 which was called: # once (8µs+241µs) by OpenAPI::Modern::BEGIN@28 at line 27
use namespace::clean;
# spent 249µs making 1 call to JSON::Schema::Modern::Document::OpenAPI::BEGIN@27 # spent 241µs making 1 call to namespace::clean::import
28
2911µs1807µsextends 'JSON::Schema::Modern::Document';
# spent 807µs making 1 call to JSON::Schema::Modern::Document::OpenAPI::extends
30
31248µs293µs
# spent 51µs (9+42) within JSON::Schema::Modern::Document::OpenAPI::BEGIN@31 which was called: # once (9µs+42µs) by OpenAPI::Modern::BEGIN@28 at line 31
use constant DEFAULT_DIALECT => 'https://spec.openapis.org/oas/3.1/dialect/base';
# spent 51µs making 1 call to JSON::Schema::Modern::Document::OpenAPI::BEGIN@31 # spent 42µs making 1 call to constant::import
32
3310s
# spent 26µs (7+19) within JSON::Schema::Modern::Document::OpenAPI::BEGIN@33 which was called: # once (7µs+19µs) by OpenAPI::Modern::BEGIN@28 at line 41
use constant DEFAULT_SCHEMAS => {
34 # local filename => identifier to add the schema as
35 'oas/dialect/base.schema.json' => 'https://spec.openapis.org/oas/3.1/dialect/base', # metaschema for json schemas contained within openapi documents
36 'oas/meta/base.schema.json' => 'https://spec.openapis.org/oas/3.1/meta/base', # vocabulary definition
37 'oas/schema-base.json' => 'https://spec.openapis.org/oas/3.1/schema-base', # the main openapi document schema + draft2020-12 jsonSchemaDialect
38 'oas/schema.json' => 'https://spec.openapis.org/oas/3.1/schema', # the main openapi document schema + permissive jsonSchemaDialect
39 'strict-schema.json' => 'https://raw.githubusercontent.com/karenetheridge/OpenAPI-Modern/master/share/strict-schema.json',
40 'strict-dialect.json' => 'https://raw.githubusercontent.com/karenetheridge/OpenAPI-Modern/master/share/strict-dialect.json',
41180µs245µs};
# spent 26µs making 1 call to JSON::Schema::Modern::Document::OpenAPI::BEGIN@33 # spent 19µs making 1 call to constant::import
42
4321.07ms236µs
# spent 20µs (4+16) within JSON::Schema::Modern::Document::OpenAPI::BEGIN@43 which was called: # once (4µs+16µs) by OpenAPI::Modern::BEGIN@28 at line 43
use constant DEFAULT_METASCHEMA => 'https://spec.openapis.org/oas/3.1/schema-base/latest';
# spent 20µs making 1 call to JSON::Schema::Modern::Document::OpenAPI::BEGIN@43 # spent 16µs making 1 call to constant::import
44
4512µs11.48mshas '+evaluator' => (
# spent 1.48ms making 1 call to JSON::Schema::Modern::Document::OpenAPI::has
46 required => 1,
47);
48
4913µs12.27mshas '+metaschema_uri' => (
# spent 2.27ms making 1 call to JSON::Schema::Modern::Document::OpenAPI::has
50 default => DEFAULT_METASCHEMA,
51);
52
53has json_schema_dialect => (
54 is => 'rwp',
55 isa => InstanceOf['Mojo::URL'],
5618µs261µs
# spent 70µs (9+61) within JSON::Schema::Modern::Document::OpenAPI::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Document/OpenAPI.pm:56] which was called: # once (9µs+61µs) by JSON::Schema::Modern::Document::OpenAPI::_set_json_schema_dialect at line 28 of (eval 390)[Sub/Quote.pm:3]
coerce => sub { $_[0]->$_isa('Mojo::URL') ? $_[0] : Mojo::URL->new($_[0]) },
# spent 52µs making 1 call to Mojo::URL::new # spent 9µs making 1 call to Safe::Isa::__ANON__[Safe/Isa.pm:23]
5717µs21.14ms);
# spent 1.07ms making 1 call to JSON::Schema::Modern::Document::OpenAPI::has # spent 69µs making 1 call to Types::Standard::InstanceOf
58
59# operationId => document path
60has operationIds => (
61 is => 'bare',
62 isa => HashRef[Str],
63 handles_via => 'Hash',
64 handles => {
65 _add_operationId => 'set',
66 get_operationId_path => 'get',
67 },
68 lazy => 1,
69 default => sub { {} },
70110µs32.17ms);
# spent 1.86ms making 1 call to JSON::Schema::Modern::Document::OpenAPI::has # spent 302µs making 1 call to Types::Standard::HashRef # spent 2µs making 1 call to Types::Standard::Str
71
7230s
# spent 108s (51.5ms+108) within JSON::Schema::Modern::Document::OpenAPI::traverse which was called: # once (51.5ms+108s) by JSON::Schema::Modern::Document::BUILD at line 146 of JSON/Schema/Modern/Document.pm
sub traverse ($self, $evaluator) {
7318µs1223ms $self->_add_vocab_and_default_schemas;
74
75112µs13µs my $schema = $self->schema;
# spent 3µs making 1 call to JSON::Schema::Modern::Document::schema
76128µs24µs my $state = {
77 initial_schema_uri => $self->canonical_uri,
78 traversed_schema_path => '',
79 schema_path => '',
80 data_path => '',
81 errors => [],
82 evaluator => $evaluator,
83 identifiers => [],
84 configs => {},
85 spec_version => $evaluator->SPECIFICATION_VERSION_DEFAULT,
86 vocabularies => [],
87 };
88
8913µs15µs if ((my $type = get_type($schema)) ne 'object') {
# spent 5µs making 1 call to JSON::Schema::Modern::Utilities::get_type
90 ()= E($state, 'invalid document type: %s', $type);
91 return $state;
92 }
93
94 # /openapi: https://spec.openapis.org/oas/v3.1.0#openapi-object
95117µs248µs return $state if not assert_keyword_exists({ %$state, keyword => 'openapi' }, $schema)
96 or not assert_keyword_type({ %$state, keyword => 'openapi' }, $schema, 'string');
97
98111µs17µs if ($schema->{openapi} !~ /^3\.1\.[0-9]+(-.+)?$/) {
99 ()= E({ %$state, keyword => 'openapi' }, 'unrecognized openapi version %s', $schema->{openapi});
100 return $state;
101 }
102
103
104 # /jsonSchemaDialect: https://spec.openapis.org/oas/v3.1.0#specifying-schema-dialects
105 {
10611µs return $state if exists $schema->{jsonSchemaDialect}
10711µs and not assert_keyword_type({ %$state, keyword => 'jsonSchemaDialect' }, $schema, 'string');
108
10917µs14µs my $json_schema_dialect = $self->json_schema_dialect // $schema->{jsonSchemaDialect};
110
111 # "If [jsonSchemaDialect] is not set, then the OAS dialect schema id MUST be used for these Schema Objects."
11211µs $json_schema_dialect //= DEFAULT_DIALECT;
113
114 # traverse an empty schema with this metaschema uri to confirm it is valid
115110µs44.13ms my $check_metaschema_state = $evaluator->traverse({}, {
# spent 4.08ms making 1 call to JSON::Schema::Modern::traverse # spent 41µs making 1 call to Mojo::URL::clone # spent 2µs making 1 call to Mojo::URL::fragment # spent 1µs making 1 call to JSON::Schema::Modern::Document::canonical_uri
116 metaschema_uri => $json_schema_dialect,
117 initial_schema_uri => $self->canonical_uri->clone->fragment('/jsonSchemaDialect'),
118 });
119
120 # we cannot continue if the metaschema is invalid
12111µs if ($check_metaschema_state->{errors}->@*) {
122 push $state->{errors}->@*, $check_metaschema_state->{errors}->@*;
123 return $state;
124 }
125
12612µs $state->@{qw(spec_version vocabularies)} = $check_metaschema_state->@{qw(spec_version vocabularies)};
127111µs196µs $self->_set_json_schema_dialect($json_schema_dialect);
128 }
129
130 # evaluate the document against its metaschema to find any errors, to identify all schema
131 # resources within to add to the global resource index, and to extract all operationIds
13211µs my (@json_schema_paths, @operation_paths);
1332586663µs my $result = $self->evaluator->evaluate(
134 $self->schema,
135 $self->metaschema_uri,
136 {
137 callbacks => {
13851721.21ms
# spent 11.0ms within JSON::Schema::Modern::Document::OpenAPI::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Document/OpenAPI.pm:140] which was called 2586 times, avg 4µs/call: # 2586 times (11.0ms+0s) by JSON::Schema::Modern::_eval_subschema at line 584 of JSON/Schema/Modern.pm, avg 4µs/call
'$dynamicRef' => sub ($, $schema, $state) {
139258610.1ms push @json_schema_paths, $state->{data_path} if $schema->{'$dynamicRef'} eq '#meta';
140 },
14115622029.5ms
# spent 122ms within JSON::Schema::Modern::Document::OpenAPI::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Document/OpenAPI.pm:144] which was called 39055 times, avg 3µs/call: # 39055 times (122ms+0s) by JSON::Schema::Modern::_eval_subschema at line 584 of JSON/Schema/Modern.pm, avg 3µs/call
'$ref' => sub ($data, $schema, $state) {
142 push @operation_paths, [ $data->{operationId} => $state->{data_path} ]
14339055121ms if $schema->{'$ref'} eq '#/$defs/operation' and defined $data->{operationId};
144 },
145 },
146 },
147133µs499.9s );
# spent 99.9s making 1 call to JSON::Schema::Modern::evaluate # spent 3µs making 1 call to JSON::Schema::Modern::Document::OpenAPI::metaschema_uri # spent 2µs making 1 call to JSON::Schema::Modern::Document::OpenAPI::evaluator # spent 2µs making 1 call to JSON::Schema::Modern::Document::schema
148
14919µs225µs if (not $result) {
150 $_->mode('evaluate') foreach $result->errors;
151 push $state->{errors}->@*, $result->errors;
152 return $state;
153 }
154
15510s my @real_json_schema_paths;
15611.97ms1578µs foreach my $path (sort @json_schema_paths) {
157 # disregard paths that are not the root of each embedded subschema.
1584694056.52s93622410.9s next if any { $path =~ m{^\Q$_\E(?:/|\z)} } @real_json_schema_paths;
# spent 6.50s making 2586 calls to List::Util::any, avg 2.51ms/call # spent 4.35s making 466819 calls to JSON::Schema::Modern::Document::OpenAPI::CORE:regcomp, avg 9µs/call # spent 90.7ms making 466819 calls to JSON::Schema::Modern::Document::OpenAPI::CORE:match, avg 194ns/call
159
1609652.36ms unshift @real_json_schema_paths, $path;
16196518.4ms19301.48s $self->_traverse_schema($self->get($path), { %$state, schema_path => $path });
# spent 1.41s making 965 calls to JSON::Schema::Modern::Document::OpenAPI::_traverse_schema, avg 1.46ms/call # spent 75.3ms making 965 calls to Mojo::JSON::Pointer::get, avg 78µs/call
162 }
163
1641159µs foreach my $pair (@operation_paths) {
165 my ($operation_id, $path) = @$pair;
166 if (my $existing = $self->get_operationId_path($operation_id)) {
167 ()= E({ %$state, keyword => 'operationId', schema_path => $path },
168 'duplicate of operationId at %s', $existing);
169 }
170 else {
171 $self->_add_operationId($operation_id => $path);
172 }
173 }
174
175111.3ms return $state;
176}
177
178######## NO PUBLIC INTERFACES FOLLOW THIS POINT ########
179
18021µs
# spent 223ms (364µs+222) within JSON::Schema::Modern::Document::OpenAPI::_add_vocab_and_default_schemas which was called: # once (364µs+222ms) by JSON::Schema::Modern::Document::OpenAPI::traverse at line 73
sub _add_vocab_and_default_schemas ($self) {
18111µs10s my $js = $self->evaluator;
18217µs166.5ms $js->add_vocabulary('JSON::Schema::Modern::Vocabulary::OpenAPI');
# spent 66.5ms making 1 call to JSON::Schema::Modern::add_vocabulary
183
184 $js->add_format_validation(
185 int32 => +{ type => 'integer', sub => sub ($x) {
186 require Math::BigInt;
187 $x = Math::BigInt->new($x);
188 my $bound = Math::BigInt->new(2) ** 31;
189 $x >= -$bound && $x < $bound;
190 } },
191 int64 => +{ type => 'integer', sub => sub ($x) {
192 require Math::BigInt;
193 $x = Math::BigInt->new($x);
194 my $bound = Math::BigInt->new(2) ** 63;
195 $x >= -$bound && $x < $bound;
196 } },
197 float => +{ type => 'number', sub => sub ($) { 1 } },
198 double => +{ type => 'number', sub => sub ($) { 1 } },
199 password => +{ type => 'string', sub => sub ($) { 1 } },
200116µs1790µs );
# spent 790µs making 1 call to JSON::Schema::Modern::add_format_validation
201
202141µs14µs foreach my $pairs (pairs DEFAULT_SCHEMAS->%*) {
# spent 4µs making 1 call to List::Util::pairs
20364µs my ($filename, $uri) = @$pairs;
2046726µs36149ms my $document = $js->add_schema($uri,
# spent 148ms making 6 calls to JSON::Schema::Modern::add_schema, avg 24.6ms/call # spent 952µs making 6 calls to File::ShareDir::dist_dir, avg 159µs/call # spent 535µs making 6 calls to Cpanel::JSON::XS::decode, avg 89µs/call # spent 97µs making 6 calls to JSON::Schema::Modern::_json_decoder, avg 16µs/call # spent 59µs making 6 calls to Path::Tiny::path, avg 10µs/call # spent 26µs making 6 calls to Path::Tiny::slurp_raw, avg 4µs/call
205 $js->_json_decoder->decode(path(dist_dir('OpenAPI-Modern'), $filename)->slurp_raw));
206643µs81.68ms $js->add_schema($uri.'/latest', $document) if $uri =~ /schema(-base)?$/;
# spent 1.67ms making 2 calls to JSON::Schema::Modern::add_schema, avg 832µs/call # spent 17µs making 6 calls to JSON::Schema::Modern::Document::OpenAPI::CORE:match, avg 3µs/call
207 }
208}
209
210# https://spec.openapis.org/oas/v3.1.0#schema-object
21138601.31ms
# spent 1.41s (34.0ms+1.37) within JSON::Schema::Modern::Document::OpenAPI::_traverse_schema which was called 965 times, avg 1.46ms/call: # 965 times (34.0ms+1.37s) by JSON::Schema::Modern::Document::OpenAPI::traverse at line 161, avg 1.46ms/call
sub _traverse_schema ($self, $schema, $state) {
2129652.00ms return if not is_plain_hashref($schema) or not keys %$schema;
213
214 my $subschema_state = $self->evaluator->traverse($schema, {
215 %$state, # so we don't have to enumerate everything that may be in config_override
216 initial_schema_uri => canonical_uri($state),
217 traversed_schema_path => $state->{traversed_schema_path}.$state->{schema_path},
21872720.5ms29081.37s metaschema_uri => $self->json_schema_dialect,
# spent 1.32s making 727 calls to JSON::Schema::Modern::traverse, avg 1.81ms/call # spent 50.2ms making 727 calls to JSON::Schema::Modern::Utilities::canonical_uri, avg 69µs/call # spent 2.18ms making 727 calls to JSON::Schema::Modern::Document::OpenAPI::evaluator, avg 3µs/call # spent 1.91ms making 727 calls to JSON::Schema::Modern::Document::OpenAPI::json_schema_dialect, avg 3µs/call
219 });
220
2217271.09ms push $state->{errors}->@*, $subschema_state->{errors}->@*;
222727315µs return if $subschema_state->{errors}->@*;
223
2247277.32ms push $state->{identifiers}->@*, $subschema_state->{identifiers}->@*;
225}
226
227118µs1;
228
229139µs1410µs__END__
 
# spent 90.7ms within JSON::Schema::Modern::Document::OpenAPI::CORE:match which was called 466826 times, avg 194ns/call: # 466819 times (90.7ms+0s) by List::Util::any at line 158, avg 194ns/call # 6 times (17µs+0s) by JSON::Schema::Modern::Document::OpenAPI::_add_vocab_and_default_schemas at line 206, avg 3µs/call # once (7µs+0s) by JSON::Schema::Modern::Document::OpenAPI::traverse at line 98
sub JSON::Schema::Modern::Document::OpenAPI::CORE:match; # opcode
# spent 4.35s within JSON::Schema::Modern::Document::OpenAPI::CORE:regcomp which was called 466819 times, avg 9µs/call: # 466819 times (4.35s+0s) by List::Util::any at line 158, avg 9µs/call
sub JSON::Schema::Modern::Document::OpenAPI::CORE:regcomp; # opcode
# spent 578µs within JSON::Schema::Modern::Document::OpenAPI::CORE:sort which was called: # once (578µs+0s) by JSON::Schema::Modern::Document::OpenAPI::traverse at line 156
sub JSON::Schema::Modern::Document::OpenAPI::CORE:sort; # opcode