0.916 2024-02-16 Released-By: PERLANCAR; Urgency: medium
- [bugfix] Additional fix to the previous bugfix (e35e423) where
Data::Sah's normalize_schema() is called as a *class* method
instead of object method because $c->main is a class name string
instead of object.
0.915 2024-02-06 Released-By: PERLANCAR; Urgency: medium
- [bugfix] Fix strange bug where sometimes $main->normalize_schema() got
interpreted as a normal subroutine call and we pass $main as the
schema to normalize, causing the normalized schema to become
['Data::Sah',{}].
- [bugfix] Fix argument passing in Data::Sah::Compiler::Prog.
- [bugfix] Fix exit status (thanks mauke).
- Pass 'coerce_to' information to default value rules.
- Remove unused code (already commented).
- [ux] Suggest using check_uniq filter when the unimplemented uniq
clause is used.
0.914 2022-10-19 Released-By: PERLANCAR; Urgency: medium
- Remove 'invalid_examples' clause definition, add 'links'.
0.913 2022-09-30 Released-By: PERLANCAR; Urgency: medium
- [bugfix] Fix escaping mistake in generating type check for
duration, which resulted in 00:10 being passed as OK when only
00.10 should've been passed.
- [doc] Some reorganization and formatting tweaks in Data::Sah's POD.
0.912 2022-08-20 Released-By: PERLANCAR; Urgency: low
- Note about Module::List::More & Regexp::From::String pp/noncore.
0.911 2021-12-01 Released-By: PERLANCAR; Urgency: medium
- Support dynamic default value via x.perl.default_value_rules.
0.910 2021-08-01 Released-By: PERLANCAR; Urgency: medium
- Bump prereq of Sah::SpecTest to 0.9.50 (RT#131729).
- Add support for cached validator for base schema (does not yet pass
error message or details). This is not documented yet.
0.909 2020-07-29 Released-By: PERLANCAR
- Update to Data::Sah::Normalize 0.051 & Data::Sah::Resolve 0.010.
0.908 2020-05-21 Released-By: PERLANCAR; Urgency: low
- Note a couple of modules's pp/core status.
- [doc] Mention Data::Sah::Tiny & Params::Sah.
- [doc] Update information about Sah::Schema::* namespace, mention
Sah::Schemas::* namespace.
0.907 2020-02-12 Released-By: PERLANCAR; Urgency: medium
- Rename return_type values for clarity: bool -> bool_valid, bool+val ->
bool_valid+val, str -> str_errmsg, str+val -> str_errmsg+val, full ->
hash_details. (Old names are supported for now, but deprecated and no
longer documented).
- [doc] Mention Params::ValidationCompiler.
- [doc] Note in Status that postfilters is not yet implemented.
0.906 2020-02-11 Released-By: PERLANCAR; Urgency: medium
- Adjust to Sah 0.9.49 (elements in prefilters/postfilters can be
[name,args] instead of just name).
- Support filter rules that might fail.
0.905 2020-02-10 Released-By: PERLANCAR; Urgency: medium
- Implement prefilters.
0.904 2020-02-07 Released-By: PERLANCAR; Urgency: medium
- [test] Update a test that still used old coerce rule module names.
0.903 2019-11-29 Released-By: PERLANCAR; Urgency: high
- Merge two releases 0.902 and 0.902.1.
0.902.1 2019-11-28 Released-By: PERLANCAR; Urgency: medium
- Adjust to Data::Sah::Coerce 0.034+ (new naming of Data::Sah::Coerce::*
rule modules). UPDATE 2019-11-29: rename to 0.902.1, cancel release
(duplicate version).
0.902 2019-10-24 Released-By: PERLANCAR; Urgency: medium
- [bugfix] Didn't set value of data in the case of coercion
failure, so data incorrectly became the return value of coerce
rule.
0.901 2019-08-14 Released-By: PERLANCAR; Urgency: medium
- [bugfix] Handle cases where we generate code "grep { ... } ..."
and data_term contains $_ which clashes with topic variable
inside the grep block.
0.900 2019-08-12 Released-By: PERLANCAR; Urgency: medium
- Avoid generating code that uses smartmatch.
0.899 2019-07-25 Released-By: PERLANCAR; Urgency: medium
- [bugfix] Update module name
(Language::Expr::Interpreter::var_enumer).
0.898 2019-07-25 Released-By: PERLANCAR; Urgency: medium
- [experimental] Add basic support for 'if' clause. Currently only
handles the case where 'cond'=str (expr), 'then'=array (schema), and
no 'else'. The human text rendering is also very basic.
0.897 2019-07-19 Released-By: PERLANCAR; Urgency: medium
- Update to Sah 0.9.46 (new clauses examples & invalid_examples).
0.896 2019-07-04 Released-By: PERLANCAR; Urgency: medium
- Data::Sah::Compiler::Prog: expr_validator_sub(): accept argument
'cd' instead of always compile()-ing.
- [doc] Note about the Sah::SchemaV::* namespace.
- [doc] Note about the Sah::SchemaR::* namespace.
0.895 2018-12-16 Released-By: PERLANCAR
- Add type: timeofday.
0.894 2018-12-15 Released-By: PERLANCAR
- Add types: datenotime & datetime.
0.893 2018-09-11 Released-By: PERLANCAR
- Allow coerce module to supply information about whether a Perl
module is core or pp.
0.892 2018-06-05 Released-By: PERLANCAR
- No functional changes.
- [Bugfix][test] Fix test case that depends on local timezone to
succeed/fail [RT#125478].
0.891 2018-06-03 Released-By: PERLANCAR
- Adjust to Data::Sah::Coerce 0.025 (bump metadata version to 3, coerce
expression now can contain coercion error message as well as coerced
result).
0.890 2018-05-29 Released-By: PERLANCAR
- No functional changes.
- Document return_type bool+var & str+val.
0.88 2016-07-10 Released-By: PERLANCAR
- No functional changes.
- Replace Log::Any with Log::ger.
0.87 2016-09-14 Released-By: PERLANCAR
- Revert to using JSON instead of JSON::MaybeXS because JSON-MaybeXS
specifies RuntimeRequires to XS module Cpanel::JSON::XS and this
breaks "depakability".
- Reduce dependencies: 1) split JS compiler/stuffs to its own dist
Data-Sah-JS, this removes several deps like Data::Clean::JSON,
File::Temp, IPC::System::Options, and Nodejs::Util; 2) inline
String::LineNumber & String::Indent to reduce dep; 3) remove
dependency to Sub::Install; 4) remove dependency to
Algorithm::Dependency (currently unused & will be replaced with
Data::Graph::Util).
- Replace code to check for installed module from using
Module::Path::More to using Module::Installed::Tiny (works with
fatpacked/datapacked scripts).
0.86 2016-07-22 Released-By: PERLANCAR
- [Bugfix] Handle nested loop variable, e.g. in
['array',of=>['array',of=>'int']].
- [Bugfix] perl: Avoid duplicate pragma/use statement.
0.85 2016-07-20 Released-By: PERLANCAR
- Add Sah::Schema::* modules to list of required modules during
compilation.
0.84 2016-07-20 Released-By: PERLANCAR
- Split schema resolving and clause merging to Data::Sah::Resolve.
- Tweak type metadata: add 'constraint' tags to HasElems clauses.
0.83 2016-06-12 Released-By: PERLANCAR
- Implement hash clause req_some_keys (Sah 0.9.41).
- Adjust to IPC::System::Options 0.27+ (backtick() renamed to
readpipe()).
0.82 2016-06-04 Released-By: PERLANCAR
- Use IPC::System::Options 0.25's backtick() to properly
shell-quote on win32.
0.81 2016-06-03 Released-By: PERLANCAR
- No functional changes.
- Fix syntax error in clause declaration (caught as a warning in
perl >= 5.23, older perls doesn't spew any warning).
0.80 2016-06-02 Released-By: PERLANCAR
- perl: Add option 'whitelist_modules'.
0.79 2016-06-01 Released-By: PERLANCAR
[INCOMPATIBLE CHANGES]
- Introduce 'v' for use when declaring clause in Data::Sah::Type::*,
bump required version to 2 (see changes below). This is used to force
Data::Sah type extension distributions to upgrade whenever a
backward-incompatible change is introduced in the clause
specification.
- [compilation data] Introduce 'v' property and bump it to version 2.
This is so we can break old client code when a backward-incompatible
change is introduced into the structure.
- [clause specification] rename 'arg' to 'schema', remove 'args'.
- [compilation data] Change the structure of 'modules' from array of
strings to array of hashes to make it more flexible (can contain more
information). Remove the use of 'module_statements'. Aside from
runtime modules (modules required by the generated code), will also
list modules required during compilation (coercion rule modules
Data::Sah::Coerce::*, and so on). Runtime modules have their 'phase'
key set to 'runtime', while compile modules have their 'phase' set to
'compile'.
[ENHANCEMENTS]
- Clause values are now also coerced (using default coerce rules).
- [clause specification] Introduce 'subschema' property which indicates
that the clause contains a subschema. The value of this property must
be a coderef to extract and return a list of subschemas from clause
value. This coderef is useful when we want to recursively extract all
subschemas from a schema (see Data::Sah::Util::Subschema).
- [clause specification] Introduce 'inspect_elem' property which means
the clause inspects elements of data.
- [compilation data] New keys: 'cl_value_coerced_from' (str, the name of
the coerce rule used; undef if no coercion was performed on clause
value), 'cl_raw_value' (clause value as specified by the schema,
without any coercion/filtering applied), 'is_inner' (previous release
uses internal _inner, we just rename it to a public name).
[OPTIMIZATIONS]
- Generated code will not declare and set variable '_sahv_dpath' when
unnecessary, i.e. when schema does not contain subschemas.
[DOCUMENTATION]
- Add documentation: ParamsValidating.
[BUG FIXES]
- Fix a case when compilation data 'outer_cd' was created accidentally.
[ETC]
- Update to Data::Sah::Coerce 0.011 (coerce_from + dont_coerce_from
replaced by coerce_rules).
0.78 2016-05-20 Released-By: PERLANCAR
- [Bugfix] A few bug fixes.
0.77 2016-05-19 Released-By: PERLANCAR
[INCOMPATIBLE CHANGES]
- perl: date: coerce_to=int(epoch) renamed to float(epoch).
[ENHANCEMENTS]
- Implement coercion rule ordering by priority (Data::Sah::Coerce
0.006).
- js: bool: Adjust code generation to new coercion rules. The validation
rule is now stricter (only JavaScript type 'boolean' is accepted as
bool type), but some coercion rules from string (e.g. "yes", "no",
"true", "false", etc, see Data::Sah::Coerce::js::bool::str) and number
(1 for true, 0 for false) are applied.
0.76 2016-05-18 Released-By: PERLANCAR
[ENHANCEMENTS]
- Modular coercion, so now it's easier to add more coercion rules.
Coercion rules are now put in Data::Sah::Coerce::$COMPILER::* modules
and split to another distribution Data-Sah-Coerce. It is possible to
disable some coercion rules. In the process, a couple of
improvements/fixes are also made to the existing rules: 1) time zone
is properly set when coercing date from epoch/iso8601 string to
DateTime; 2) date/duration does not always have to be converted to
DateTime/DateTime::Duration during validation, by default ints are
used to reduce overhead and dependencies, but this can be changed.
Coercion of clause/attribute value has not been reimplemented though,
that will follow in the next release.
- Introduce new return types: bool+val and str+val. These are convenient
when doing e.g. function argument validation because in addition to
validation result, the validator will also return the input value with
default/coercion/filters already applied. The value can then be used
further after the validation process. Note that for return_type=full,
the final value is now also returned in the 'value' key.
- duration type is now made to be Comparable and Sortable.
- js: Implement duration type.
[INTERNAL]
- Add compilation data keys: compiler_name, use_dpath (Prog only).
- Split get_nodejs_path() to Nodejs-Util to be reusable by
Data-Sah-Coerce.
[UX]
- [ux] Change the notation for data path in error message string from
'@idx/idx2/...' to the more familiar/suggestive-of-index
'@[idx][idx2]...'. Note that when return_type=full, the
errors/warnings are still put in keys of data path with the old format
(slash-separated) for easier parsing.
[ETC]
- Update to Sah specification 0.9.40 (allow x.* attributes).
0.75 2016-03-16 Released-By: PERLANCAR
- No functional changes.
- Replace JSON with JSON::MaybeXS. UPDATE: Revert back to JSON because
JSON-MaybeXS specifies RuntimeRequires to XS module Cpanel::JSON::XS.
- Remove benchmark devscripts (see Benchmark-Scenarios-DataSah now).
0.74 2015-10-18 Released-By: PERLANCAR
- No functional changes.
- [dist] Add explicit dep to Data::Dumper even though it's a core
module [CT].
0.73 2015-09-26 Released-By: PERLANCAR
- No functional changes.
- Skip test when Time::Duration::Parse::AsHash (a runtime
recommends) is not available [CT].
0.72 2015-09-25 Released-By: PERLANCAR
- Accept text parseable by Time::Duration::Parse::AsHash as valid
duration value.
0.71 2015-09-25 Released-By: PERLANCAR
- Allow positive numbers for duration (assumed to be number of
seconds).
- [opt] Don't convert to DateTime/DateTime::Duration when there are
no constraint clauses.
0.70 2015-09-09 Released-By: PERLANCAR
- No functional changes.
- [dist] Depend on (dummy module) Sah::SpecTest, while Sah (spec
module) becomes a DevelopRecommends, to express things more
accurately.
0.69 2015-07-08 Released-By: PERLANCAR
- Use time_zone=UTC in all DateTime construction [CT].
0.68 2015-07-01 Released-By: PERLANCAR
- Support Time::Moment & Time::Piece in addition to DateTime (currently
only when coercing).
0.67 2015-06-18 Released-By: PERLANCAR
- No functional changes.
- [Test] Put generated javascript temporary files under a temporary dir
to avoid cluttering /tmp too much.
0.66 2015-06-11 Released-By: PERLANCAR
- More tweaks to human text for hash clauses.
0.65 2015-06-11 Released-By: PERLANCAR
- Tweak/fix human text for hash clauses
dep_all/dep_any/req_dep_all/req_dep_any.
0.64 2015-06-10 Released-By: PERLANCAR
- No functional changes.
- N'th attempt to fix test failures: don't switch to core_or_pp=1
mode when we can't find Scalar::Util::Numeric, just switch the
sun module to use Scalar::Util::Numeric::PP.
0.63 2015-06-09 Released-By: PERLANCAR
- No functional changes.
- Previous guess about failed tests is incorrect, the correct reason is
that Data::Sah perl compiler switches to pp=1 mode when it can't find
Scalar::Util::Numeric (which is a 'recommends' prereq, not a
'requires'), we now switch to core_or_pp=1 instead.
0.62 2015-06-07 Released-By: PERLANCAR
- Introduce package variables $PP, $CORE, $CORE_OR_PP, $NO_MODULES as
alternatives to environments DATA_SAH_{PP,CORE,CORE_OR_PP,NO_MODULES}
and use those for tests, due to reported failures.
- Preload Test::Builder's prereq so it doesn't fail when testing
with lib::filter.
0.61 2015-05-26 Released-By: PERLANCAR
- perl: Add compile option: no_modules.
0.60 2015-05-26 Released-By: PERLANCAR
- Handle different capitalization of 'nan' -> 'NaN' in newer perl
5.21+ [RT#104682].
0.59 2015-05-22 Released-By: PERLANCAR
- perl: Add compile option: core_or_pp.
- perl: Make sure we respect compile option core/pp/core_or_pp, or we
die during compilation.
0.58 2015-05-22 Released-By: PERLANCAR
- perl: Add compile option: core (avoid non-core modules); add
tests for core & pp.
0.57 2015-05-17 Released-By: PERLANCAR
- Make DateTime truly optional/recommends (previously it's still a
TestRequires).
0.56 2015-05-13 Released-By: PERLANCAR
- Add perl support for type 'duration'.
0.55 2015-05-06 Released-By: PERLANCAR
- Add option 'hash_values' to human's compile() and add
'human_hash_values' to Prog's compile(). This is used to override hash
argument in sprintfn() during human compilation.
- Make 'field'/'fields' hash term overridable (e.g. to
'argument'/'arguments'), for Rinci's args_rels implementation.
0.54 2015-05-05 Released-By: PERLANCAR
- Implement hash clause choose_one_key, choose_all_keys, req_one_key,
dep_any, dep_all, req_dep_any, req_dep_all (Sah 0.9.36).
0.53 2015-04-24 Released-By: PERLANCAR
- No functional changes.
- Adjust to Data::Sah::Normalize 0.03 (perl gotcha, if we add a
proto ($) then func(@_) will become foo(1), is this DWIM??).
0.52 2015-04-15 Released-By: PERLANCAR
- No functional changes.
- [dist] Downgrade DateTime from runtime prereq to runtime recommends
and test prereq, to make dist slimmer.
0.51 2015-04-14 Released-By: PERLANCAR
- [Bugfix] Add missing dependency to Scalar::Util::Numeric::PP. Test the
existence of Scalar::Util::Numeric for the default of 'pp' compile
option.
0.50 2015-04-13 Released-By: PERLANCAR
- Perl compiler: Add compile option 'pp' to generate validator which
avoids the use of XS modules (currently, Scalar::Util::Numeric will be
replaced with Scalar::Util::Numeric::PP). DATA_SAH_PP is also observed
to set default for this option.
0.49 2015-04-10 Released-By: PERLANCAR
- [Bugfix] Fix regression: missing 'use experimental "smartmatch"'
statement in the generated code causing Perl warning to be emitted.
- Add devscripts: bench-startup, bench-gen_validator-perl.
0.48 2015-04-08 Released-By: PERLANCAR
- [Bugfix] Avoid Perl's list flattening which sometimes cause wrong
result when return_type=str (regression test added to Sah spectest
0.9.33).
- [Internal] Change gen_each() to accept indices_expr only but allow
changing data_term, this is to allow better path reporting in error
message (e.g. in hash's each_value we now report the key names and not
the confusing key value).
- [Documentation] Add manual overview page and the start of developer's
manual, change some formatting, mention App::SahUtils.
0.47 2015-03-24 Released-By: PERLANCAR
- No functional changes.
- [opt] Shave more startup overhead by replacing Data::Dumper with
Data::Dmp, and producing literal in human compiler from using JSON to
Data::Dmp (shaved +- 14ms on my computer when generating validator for
two simple schemas from 54ms to 40ms).
0.46 2015-02-21 Released-By: PERLANCAR
- No functional changes.
[INTERNAL]
- [opt] Reduce startup overhead by: 1) switching from Moo & Moo::Role to
Mo & Role::Tiny; 2) avoid calling _merge_clause_sets() when there is
only a single clause set (a common case) to avoid loading
Data::ModeMerge. On my computer, startup overhead for generating perl
code for schema ["int", min=>1, max=>10] is now reduced from 0.048s to
0.025s.
0.45 2015-02-19 Released-By: PERLANCAR
- Allow 'no MODULE IMPORT' in addition to just 'no MODULE', add 'no
warnings 'void'' to perl validator code.
0.44 2015-02-18 Released-By: PERLANCAR
- Introduce comment-style 'shell2' for Perinci::Sub::Wrapper use.
0.43 2015-02-18 Released-By: PERLANCAR
- [Bugfix] Fix pushing+popping of _sahv_dpath [RT#102184].
0.42 2015-01-27 Released-By: PERLANCAR
- Split (again) Data::Sah::Util::Type to its own dist, to minimize
dependency.
0.41 2015-01-06 Released-By: PERLANCAR
- No functional changes.
- Use Regexp::Stringify.
0.40 2015-01-04 Released-By: PERLANCAR
- On js (node) error, show output. Also, capture $? and $! before being
reset (trying to find out the cause of error reported in [RT#101269]).
0.39 2015-01-03 Released-By: PERLANCAR
- No functional changes.
- Rebuild (Generate TODO.md).
0.38 2015-01-02 Released-By: PERLANCAR
- Fix production of regex literal in perl compiler; also, now
produces 5.10-compatible regex literal.
0.37 2015-01-02 Released-By: PERLANCAR
- Incorporate Data::Sah::MoreUtils as Data::Sah::Util::Type.
- [Incompatible change] Rename Data::Sah::Util::Type ->
Data::Sah::Util::Type::Date.
0.36 2014-12-27 Released-By: PERLANCAR
- No functional changes.
- Replace Module::Path with Module::Path::More.
- POD fixes/tweaks: add more examples in Synopsis, fix typos/grammar.
0.35 2014-12-19 Released-By: PERLANCAR
- Change Perl compiler to generate code that use
Scalar::Util::Numeric's isneg() & isinf() instead of direct
comparison =='inf' or =='-inf' to check for is_{,neg_,pos_}inf
clauses, because that might result in failure in some systems
(ref: https://github.com/perlancar/perl-Data-Sah/issues/2).
0.34 2014-12-19 Released-By: PERLANCAR
- No functional changes.
- Format diagnostics message.
0.33 2014-12-19 Released-By: PERLANCAR
- No functional changes.
- Refactor test routine into module Test::Data::Sah.
- Give better test names and more diagnostics message upon failure, to
help diagnose GH#2.
0.32 2014-12-10 Released-By: PERLANCAR
- No functional changes.
- Use new name of renamed/split module SHARYANTO::String::Util ->
String::LineNumber & String::Indent.
0.31 2014-11-07 Released-By: PERLANCAR
- No functional changes.
- Wording changes for error messages, the term/noun 'input' is removed
because Sah is not limited to being used to validate input but also
output/result. That specific term can be confusing.
0.30 2014-10-23 Released-By: PERLANCAR
- Support 'encoding' clause for string (specified Sah 0.9.31):
currently does nothing.
- Extract normalize_clset & normalize_schema to its own dist/module
Data::Sah::Normalize. This is to significantly reduce dependencies
for modules that just want to normalize schemas.
0.29 2014-06-30 Released-By: SHARYANTO
- No functional changes.
- Replace Scalar::Util's looks_like_number() with
Scalar::Util::Numeric's isint, isfloat, etc. This is because in 1.39,
looks_like_number()'s result is booleanized.
0.28 2014-05-17 Released-By: SHARYANTO
- No functional changes.
- Replace File::Slurp with File::Slurp::Tiny.
0.27 2014-05-04 Released-By: SHARYANTO
- Support string in the form of YYYY-MM-DDThh:mm:ssZ format for date
literal.
0.26 2014-04-28 Released-By: SHARYANTO
- No functional changes.
- [build] Remove dependency to Language::Expr temporarily because it
(RG actually) is broken.
- Remove Data::Sah::Schema::* modules, they have been renamed to
Sah::Schema::* and put into Sah and other dists.
0.25 2014-04-25 Released-By: SHARYANTO
- [bugfix] Some bug fixes for date.
- Add debug note when setting temporary data term & restore orig data
term.
- Add module: Data::Sah::Util::Type.
0.24 2014-04-25 Released-By: SHARYANTO
- No functional changes.
- Forgot to skip t/js-type-date.t when node.js is not available.
0.23 2014-04-25 Released-By: SHARYANTO
- Add (partial) support for type 'date'. Some human formatting not yet
handled. You can already do things like specifying minimum/maximum
date, but since properties are not supported yet you cannot say e.g.
month must be August.
0.22 2014-01-09 Released-By: SHARYANTO
- No functional changes. Add test, tweak logging in generated code.
[BUG FIXES]
- Prog: data path (dpath) prefix was not shown for error message in
expression version (err_expr), e.g. for hash clause req_keys.
- JS: Fix error message for req_keys clause.
0.21 2014-01-03 Released-By: SHARYANTO
[BUG FIXES]
- perl: req_keys clause: Avoid clashing of variable '$_' when '$dt'
happens to contain '$_' also (can happen e.g. with schema like [array
=> of => [hash => req_keys => ["a"]]].
0.20 2013-11-25 Released-By: SHARYANTO
[ENHANCEMENTS]
- Implement hash clause: 're_keys'.
[BUG FIXES]
- 'cistr' type: fix matching in perl >= 5.14.0 due to not yet handling
(?^...:...) regex stringification form.
[DOCUMENTATION]
- Add Manual::Contributing.
0.19 2013-11-23 Released-By: SHARYANTO
[ENHANCEMENTS]
- Implement types 'undef', 'cistr', 'buf'.
- Implement clauses: 'ok', 'has'.
- Implement hash clauses: req_keys (thanks Michal Sedlák),
allowed_keys, allowed_keys_re, forbidden_keys, forbidden_keys_re.
- Add modules: Data::Sah::JS, Data::Sah::Human.
[ETC]
- Adjust to Sah 0.9.29.
[BUG FIXES]
- Fix bug in generating human/error message for "between|".
0.18 2013-09-11 Released-By: SHARYANTO
- Add 'use experimental smartmatch' in generated code so that the
generated code compiles cleanly on Perl 5.18+ [CT].
0.17 2013-09-09 Released-By: SHARYANTO
- No functional changes. Add 'use experimental smartmatch' for Perl
5.18+ [CT].
0.16 2013-08-11 Released-By: SHARYANTO
- Tweak docs.
- Handle case when LANGUAGE/LANG is ''.
0.15 2013-03-11 Released-By: SHARYANTO
- No functional changes. Avoid perl undef warning in human compiler
(e.g. when schema is [int => default => undef]).
0.14 2013-02-07 Released-By: SHARYANTO
- This is the first release that includes a working js compiler. Along
with this release are some fixes and refactorings.
0.13 2013-01-18 Released-By: SHARYANTO
[ENHANCEMENTS]
- Slightly tweak max/re clauses so the human can generate clauses in
nicer order, e.g. "at least X, at most Y" instead of "at most Y, at
least X" (since max is alphabetically smaller than min).
[BUG FIXES]
- Fallback to en_US if Data::Sah::Lang::$lang cannot be found [CT
reports].
- Alphabetical sorting of clause names used wrong variables [CT
report].
0.12 2013-01-16 Released-By: SHARYANTO
- No functional changes. Add a human test.
0.11 2013-01-16 Released-By: SHARYANTO
- No functional changes. Minor fixes/adjustments [CT reports].
0.10 2013-01-11 Released-By: SHARYANTO
- 0.09 was also broken, sorry.
[ENHANCEMENTS]
- Now follow Sah 0.9.23 spec (previously 0.9.19).
- Basic human compiler now works, with English and Indonesian
translation. The Perl compiler is now using error messages produced
by the human compiler. Error message also now indicates data path,
e.g. if there is an error in the second element of array data, it
shows '@1'.
- Line number when logging generated validator/schema code can be
omitted by setting environment variable LINENUM=0.
[INCOMPATIBLE CHANGES]
- Rename compile option 'mark_fallback' to 'mark_missing_translation'
to make it clearer.
[REMOVED FEATURES]
- Remove min
[BUG FIXES]
- Subcompilation now uses all options from parent (except those that
need to be set/changed by the subcompilation).
- Various fixes and refactorings.
0.09 2012-11-22 Released-By: SHARYANTO
- 0.08 was broken, sorry.
[ENHANCEMENTS]
- Add gen_validator() options: accept_ref and source. Unknown options
are still passed to Perl schema compiler.
- Add compile() option: skip_clause.
- perl: Implement hash's keys, keys.restrict, keys.create_default.
Implement array's elems, elems.create_default.
[REFACTORING]
- Split Data::Sah::Util{::Role,::TypeX} so each can stay slim.
0.08 2012-11-06 Released-By: SHARYANTO
[ENHANCEMENTS]
- Add compile option: 'comment' (to allow stripping comment in
generated code).
- perl: Implement str's {match, is_re}, obj's {can, isa}.
- Add a way to control logging of generated code via
$Log_Validator_Code or LOG_SAH_VALIDATOR_CODE.
0.07 2012-11-01 Released-By: SHARYANTO
[INCOMPATIBLE CHANGES]
- Remove module Data::Sah::Simple (IMO Data::Sah is not large enough to
warrant a 'simple' variant). Data::Sah now can export
'normalize_schema' as well as 'gen_validator'.
- Rename compile option 'validator_return_type' to 'return_type'
(Huffman encoding).
[REMOVED FEATURES]
- Remove compile(), perl(), human(), js() to make things more
orthogonal. They are just shortcuts, and I reckon they will not be
used relatively often.
0.06 2012-10-26 Released-By: SHARYANTO
- Follow latest Sah spec (0.9.16).
- perl: Handle more types and clauses: array's 'of', str (incomplete),
hash (incomplete), bool (incomplete), any, all. Data::Sah can now
handle compilation of schemas from Perinci-Sub-Wrapper and
Perinci-Examples! Finally, it's starting to be usable (happy face).
- Some refactoring (rename modules).
0.05 2012-10-25 Released-By: SHARYANTO
- Split spec to Sah. To follow spec changes, see Sah's Changes.
- Many changes following latest Sah spec (0.9.15).
- Simplify compiler interface a bit: no longer accept multiple input.
However, result is now a data structure ('$cd') instead of string,
for more flexibility.
- Generating Perl validator now works for simple schemas, like "int",
["array*", {min_len=>1, max_len=>10}]. There are still many types and
clauses not yet implemented (currently only "int", "float", and
"array" types are supported; more will be coming soon).
- Add module Data::Sah::Simple.
- Add compile() option: on_unhandled_{clause,attr}.
0.04 2012-07-20 Released-By: SHARYANTO
- No functional changes. Rebuild because dzil still included files in
lib-disabled/.
0.03 2012-07-20 Released-By: SHARYANTO
- Mostly spec changes (syntax changes, lots of removed clauses to be
more orthogonal). Implementation is still grossly incomplete.
- (spec) New clause 'cset' to contain a clause set inside a clause.
This provides a more elegant way to nest clauses, with possibly
complex relationships (combine with {max,min}_{ok,nok} attributes).
- [INCOMPATIBLE] (spec) Remove {max,min}_{ok,nok} *clauses*. They are
now purely attributes. To apply to a set of clauses, apply to the
new 'cset' clause.
- [INCOMPATIBLE] (spec) Rename 'value' and 'values' attribute to
'val'/'vals'. Released-By: Huffman principle
- [INCOMPATIBLE] (spec) Remove 'CLAUSENAME.*' syntax, it's ugly.
- [INCOMPATIBLE] (spec) Change 'if' clause syntax: [if, expr, EXPR,
cset, CSET]. Might probably change again :-)
- [INCOMPATIBLE] (spec) Change merge prefix syntax from [merge:OP] to
[mergeOP], e.g. [merge+]. Released-By: Huffman principle
- [INCOMPATIBLE] (spec) Remove unnecessary 'str' clauses: match_all,
match_any, not_match, match_none (they can be replaced with the more
generic clause sttributes 'values' and {min,max}_{ok,nok})
- [INCOMPATIBLE] (spec) Remove unnecessary 'int' clauses: indiv_by (can
be replaced with the more generic clause attributes 'values' and
{min,max}_{ok,nok})
- [INCOMPATIBLE] (spec) Remove unnecessary 'HasElems' clauses: has_all,
has_any, has_none (can be replaced with the more generic clause
attributes 'values' and {min,max}_{ok,nok})
- [INCOMPATIBLE] (spec) Remove unnecessary 'Comparable' clauses: isnt,
not_in (can be replaced with the more generic clause attributes
'values' and {min,max}_{ok,nok})
- [INCOMPATIBLE] (spec) Remove .revert attribute, use .max_ok instead
- '.attr' clause is now allowed again.
- (spec) New attribute: default_lang Released-By: like in Rinci
- Remove warning under Perl 5.16 [RT#78491]
0.02 2012-01-27 Released-By: SHARYANTO
- Mostly spec changes (some major, backward-incompatible).
Implementation still minimal/incomplete.
- [INCOMPATIBLE] No more hash form! Now schema is either string or
array. I've always hated writing the hash form and 99% always used
the array form. Hash form can be re-added in the future in the
unlikely event that we need it.
- [INCOMPATIBLE] Array form now only allows one clause sets. To specify
multiple clause sets, now there is a new clause named 'csets'. This
is an application of Huffman encoding principle, as specifying
multiple clause sets is relatively rare. The third element of array
now can be used for other purposes, it is now an optional hash to
store future extra stuffs.
- [INCOMPATIBLE] Change merge prefixes, from the default provided by
Data::ModeMerge (!, +, -, ^, et al) to the more verbose ([merge],
[merge:+], [merge:!], and so on). This is also an application of
Huffman encoding principle, since merging is relatively rare. The !,
etc prefixes are going to be reused for other purposes. For example,
!clause now means setting the .max_ok attribute to 0.
- [INCOMPATIBLE] Change syntax of attribute, from 'CLAUSE:ATTR' and
':ATTR' to 'CLAUSE.ATTR' and '.ATTR'. Using dot is nicer and now
possible as the first character since we have changed merge prefixes.
- Introduce shortcuts
- [INCOMPATIBLE] String shortcuts are cut back. Now only 'foo*' is
supported, to mean [foo => {req=>1}]. I find that this is the only
shortcut that is commonly used, the rest not so much. Limiting the
shortcuts feature allows simplifying the schema for Sah itself (no
grammar needed, only a single regex needed to validate).
- [INCOMPATIBLE] Sortable types: rename clause {min,max,between}ex ->
x{min,max,between}
- Type now can have namespaces too (e.g. MyCompany::order_id)
- Add new clauses 'name', 'summary', 'description', 'tags'
- (Re-)add manuals
0.01 2011-11-23 Released-By: SHARYANTO
- First release, very preliminary, almost nothing is implemented. Old
incarnation is Data::Schema.
- [INCOMPATIBLE] Terminology changes from Data::Schema: 'attribute'
becomes 'clause', to make it less ambiguous.