Revision history for YATT::Lite

0.199_001 2026-07-15
    * GH-251 - better URL generation methods/entities, add raise_redirect alias.
    * GH-250 - trim trailing `/` of `&yatt:script_name;`
    * GH-249 - Add `yatt:foreach` alternate syntax `var=value`
    * GH-248 - Fix inspector to correctly locate inline entity
    * GH-247 - `<!yatt:base>` is now always checked during refresh
    * GH-246 - extend `&yatt:value_checked();` `&yatt:value_selected();`
    * GH-244 - Fix line number glitch for suppressed default widget
    * GH-243 - genperl now works with `<!yatt:base>`
    * GH-242 - Restrict `<!yatt:...` linestart only
    * GH-241 - `:mkhidden(name[])`, `:param(name[])` works as expected (for nested_query)
    * GH-239 - LSP: textDocument/completion (partial support)
    * GH-233 - Drop `cf_` prefix

0.131 2025-05-18
    * GH-237 - Fix module deps

0.130 2025-05-17
    * GH-230 - Add `<!yatt:argmacro>` support
    * Fix GH-231 - yatt subcommand works again

0.123 2025-03-29
    * GH-228 - Fix many LanguageServer bugs

0.122 2025-03-20
    * GH-227 - yatt render should not use %main::ENV for PSGI env
    * GH-226 - Session2 - set cookie path from script_name by default

0.121 2024-12-10
    * GH-223 - Fix another `yatt*` scripts failure
    * GH-222 - Set app_root to $FindBin::Bin by default

0.120 2024-11-29
    * GH-220 - Fix `yatt*` scripts to be installed correctly under bin/
    * GH-219 - Remove use of smartmatch, given... for perl5.40

0.110 2024-08-16
    * GH-216, GH-217 - More LRXML parser fix (for Language Server)

0.101_103 2023-12-05
    * GH-214 - Drop use of deprecated `given` syntax
    * GH-211 - Allow `*.ydo` to reurn PSGI tuple directly
    * GH-209 - Fix incorrect error of dynamic module loading while rendering
    * GH-207 - Fix error_response handling for per_role_docroot mode
    * GH-206 - Fix is_index mis-detection
    * GH-205 - `&yatt:script_uri;` now cares HTTP_X_FORWARDED_PROTO
    * GH-204 - (Emacs) fix yatt-mode background face
    * GH-203 - Allow loading multiple app.psgi in a process

    * Drop perl 5.10

0.101_102 2020-10-17
    * GH-202 - fixed some test failures

0.101_100 2020-10-15
    * Security fixes
         - GH-197 - fix relative path traversal in path_info mode (which is not normally used until recently) 

    * (Possibly breaking) API changes
         - GH-191 - EXPERIMENTAL SYNTAX CHANGE. `:` is no longer key-pair separator in hash literals 
         - GH-173 - Change default encoding to utf-8 
         - GH-171 - subpath '/' should be silently ignored (if no match rule is defined)
         - GH-166 - `ydo` filename extensions should be omissible as like `yatt` is.
         - GH-158 - Change Session2 to State::Cookie only for better cookie support
         - GH-150 - Treat request sigils in query_string of POST as default choice
         - GH-139 - Entpath `:value:name` should be interpreted as `$value->name` rather than `$value->{name}`, at least by default
         - GH-121 - Change default app_ns from MyApp to MyYATT 
         - GH-95 - Introduce new session API (Session2)
         - GH-45 - YATT::Lite::Factory->render() now returns decoded string
         - GH-19 - Change YATT::Lite::Util::find_value_in() - Simplify HASH case behavior
         - GH-1 - Automatic reloading of *.ytmpl, .htyattrc.pl is now enabled by default

    * New/changed YATT site-wide features/options

         - GH-155 - New option: use_sibling_config_dir to put config files outside of app_root
         - GH-126 - app.site_config.yml support
         - GH-114 - Session::ExpiryFriendly support
         - GH-109 - Alternative store for dir_config()
         - GH-103, GH-18 - Filter out and/or gather (unknown) request parameters to `$env->{yatt.unknown_params}`
         - GH-97 - Accept `config/$ENV{PLACK_ENV}.pl` as an alternative config script

    * New/changed YATT Declarations
         - GH-185 - Allow AppPath like `@ytmpl/foo.yatt` in `<!yatt:base>` 
         - GH-192 - var="delegate" should be allowed too. 
         - GH-179 - Allow yatt:action to be default handler in .yatt files
         - GH-167 - Error diags for 'Too many arguments' 
         - GH-128, GH-14 - Fix broken auto mapping of yatt:action parameters 
         - GH-125 - `!yatt:entity` in yatt templates
         - GH-120 - html type argument now behaves as "html?" by default 

    * New/changed YATT Widgets
         - GH-195 - yatt:foreach line number problem
         - GH-193 - better syntax error reporting for garbage before CLO
         - GH-170 - yatt:if now detects more syntax errors
         - GH-153 - better error reporting for foreach list=xxx typo 
         - GH-145 - newline after `<yatt:foreach>` should be omitted from template outputs
         - GH-107 - change YATT::Lite::Util::escape() to use indentation. 
         - GH-105 - Add destructuring bind and split operator
         - GH-104 - New tag(macro): <yatt:return if="cond">...</yatt:return> 
         - GH-101 - Each arm of yatt:if should create separate scope for yatt:my

    * New/changed YATT Entities

         - GH-174 - &yatt:localtime(); raises error
         - GH-190 - :query_string({merge,...}) should not currupt original query parameters 
         - GH-186 - Add merge option for `:query_string()` 
         - GH-189 - Add :session_middleware and :session_csrf_token 
         - GH-175 - Add :with_ignoring_die() entmacro, with suppress __DIE__ and __WARN__ handlers 
         - GH-163 - Add :scalar() entmacro 
         - GH-162 - Fix :file_location() to include dirapp name. 
         - GH-152 - Change :mkhidden() to return all params by default. 
         - GH-156 - :psgix_session() should call session_start() 
         - GH-147 - :abspath(); and :absrequest();
         - GH-142 - New entity macro - :not(), :and(), :or(), :undef(expr)
         - GH-141 - :show_expr(..expr..) entmacro. 
         - GH-140 - :__WIDGET__ entmacro. 
         - GH-137 - :query_string(of,:hash_or_request,ignore,:name_list_or_hash,separator,:str)
         - GH-108 :redirect() should set http status to 400 (Bad Request) for unexpected external URI
         - GH-100 - :raise_dump(any_object,...) for debugging aid.
         - GH-92 - :script_name() - reliable entity for path abstraction.
         - GH-78 - Allow :name (without ()) as entmacro when option entity_prefer_call_over_hashref GH-139 is on. 

    * New/changed CLI
         - GH-194 - expose %ENV from yatt.render (but how about query_string?) 
         - GH-160 - Add request sigil support for yatt render CLI. 
         - GH-168 - yatt.lint dies when it gets `$cgen->generror($msg)`
         - GH-134 - yatt info list_widgets
         - GH-115 - WIP: `yatt call` to emulate PSGI offline. 

    * Emacs/IDE support
         - GH-188 - Add eglot support and use it as default. 
         - GH-180 - Explicitly disable perl-minlint-mode for `*ydo` files 
         - GH-161 (wip) - LSP(Language Server Protocol) support
         - GH-146 - yatt:action section is not handled as perl-mode with recent sgml-mode + mmm-mode
         - GH-143 - fix yatt-lint-any-mode to support tramp-version >= 2.3.2 
         - GH-136 - tolerate yatt-mode-file-coding to nil by default. 
         - GH-102 - fix yatt-mode yatt:action detection bug 


    * Miscellaneous helper functions/methods.
         - GH-200 - Add YATT::Lite::Util::permissive_require($modName) 
         - GH-196 - Add `$factory->invoke_sub_in($loc, $args, $sub)` 
         - GH-177 - Add `$site->get_entity_symbol($entns, $entity_name)` 
         - GH-159 - `$YATT->render()` - add support for deep:widget:path 
         - GH-138 - Port Rack::Utils.build_nested_query for serialization
         - GH-131 Add `YATT::Lite::Util::dumpout()` with default export. 
         - GH-106 - Change YATT::Lite::XHF->read_file_xhf to use `read_all` instead of `read` by default
         - GH-82 - Introduce Connection->raise_response($psgi)

    * Internal Enhancement
         - GH-182 - Add support for HTTP_X_FORWARDED_PROTO to `$CON->mkurl` 
         - GH-164 - alternative representation for internal node tree
         - GH-122 - Now $vfs->find_file($fn) accepts "index.html.yatt" like multiple extension (to cooperate well with Mojolicious, Dancer2)
         - GH-119 - New option body_argument, body_argument_type to customize `body` argument (to cooperate with Mojolicious and Dancer2).
         - GH-117 - (wip) Overhaul `action` handling
         - GH-111 - Merge debug_allowed_ip and allow_debug_from 
         - GH-110 - Add support for REDIRECT_STATUS 
         - GH-98 - Make terse_dump HASH output stable with Sortkeys. 
         - GH-96 - `use ... -as_base` should set c3 mro.
         - GH-26 - Make "use ... -as_base" behavior consistent

    * Other Bug fixes

         - GH-201 - prepare for error during flush_headers 
         - GH-199 - DBSchema::DBIC - Add is_auto_increment if -autoincrement is specified.
         - GH-198 - "package cl is deprecated" in emacs27. 
         - GH-184 - show better error diag when POST parameters and QUERY_STRING conflicts 
         - GH-181 - Remove forgotten DB::single
         - GH-172 - Unreadable error diag "ARRAY(0x5609f9891f70)BEGIN failed--compilation aborted"
         - GH-169 - fix xhf dump for empty arrays/hashes orz... 
         - GH-165 - Add dump_strict_xhf() (xhf dump should not trim trailing newlines)
         - GH-157 - Replace CGI::Cookie with Cookie::Baker 
         - GH-151 - mount_static was broken after GH-124
         - GH-148 - ErrorReporter should care error string with malformed utf8
         - GH-144 - fix libdir.pl to care symlinked lib/YATT 
         - GH-135 - session3 cookie
         - GH-133 - fix broken tests 
         - GH-132 - yattup now works again. 
         - GH-130 - YATT::Lite->render() should not emit header. 
         - GH-129 - YATT::Lite->render() should behave consistently with YATT::Lite::Factory->render()
         - GH-124 - Fix mount_psgi
         - GH-118 - fix lack of `SUPER::after_new()` calls.
         - GH-113 - Fix tests for CGI mode
         - GH-112 - BUG: `index.html` is passed to action_handler instead of yatt_handler when ext_public = `html`
         - GH-99 - Now just plackup is enough for session2 example.



0.101_001 2017-06-17
    * (Possibly breaking) API changes
         - [GH #84] Now yatt:args "/URL/{PATTERN}" is tested in written order.
         - [GH #64] Use c3 mro for widget search by default.

    * New/changed YATT Declarations
         - [GH #54] <!yatt:base "file_or_directory">
         - [GH #14] <!yatt:action "/URL/{PATTERN}">

    * New/changed YATT Entities
         - [GH #92] &yatt:script_name(); now respects Apache's Action+AddHandler
         - [GH #74] &yatt:param(); is now equiv of &yatt:CON:param();.
         - [GH #73] &yatt:coalesce(); now behaves like SQL's coalesce().
         - [GH #70] &yatt:file_location(); and &yatt:is_current_page(page)

    * Enhancement
         - [GH #91] Better error reporting for XHF parser
         - [GH #82] Add support for bufferedstreaming in raised response.
         - [GH #80] Allow declaring types for routed args
         - [GH #79] Site-wide special_entities
         - [GH #71] Now delegate type can have argument list.
         - [GH #69] YATT::Lite::Macro is now visible from subclasses.
         - [GH #63] `Action NAME => SUB` support in `.htyattrc.pl`

    * Miscellaneous helper functions.
         - [GH #94] YATT::Lite::XHF->read_all()
         - [GH #90] WebMVC0::Connection->delete_param
         - [GH #82] Lite::Connection->raise_response($psgi_response).
         - [GH #68] YATT::Lite::Factory->wrapped_by($outer_app) for Plack::Middleware.

    * Bug fixes
         - [GH #93] yatt:action arg detection should care DOS crlf too.
         - [GH #83] Fix for bug "Safety level may not be changed inside a transaction"
         - [GH #77] :CON:mkquery() now encode utf8 correctly.
         - [GH #76] yatt:my code works for wide chars.
         - [GH #75] Avoid use of error.ytmpl until code-generator becomes ready.
         - [GH #74] Now yatt.render sets :CON:param() too.
         - [GH #72] BUG: "Inconsistent hierarchy during C3 merge" occurs for complex inheritance.
         - [GH #61] Adapt sprintf redundant arg warnings(5.22)


0.101     2016-05-24
    * Just tagged 0.101 (from 0.100_003)

0.100_003 2015-11-05
    * Bug fix for [RT #108427] [GH #62] Undeclared dependency on Test::Kantan

0.100_002 2015-10-31
    * New features
        - [GH #57] `yattup` - `plackup` alike command for `*.yatt` files.
        - [GH #54] - !yatt:base "file_or_dir" to inherit templates.
	
    * Enhancement (Potentially breaking)
        - [GH #51] Add experimental `per_role_docroot` feature.
        - [GH #56] Install psgi_fallback by default (to make `yattup` useful).
        - Add new option `always_refresh_deps` to fix [GH #1] partially.
        - [GH #60] Set HTTP Status for "Not found" and "Bad request" errors.
          To revert old behavior, set `overwrite_status_code_for_errors_as` to 200.
        - YATT::Lite::Error now exports type alias 'Error' by default.
        - New method: `($yatt|$con)->error_with_status($code, $msg, @args)`

    * Misc changes:
        - [GH #59] yatt, yattup should resolve symlink once and only once.
        - [GH #58] c3 mro support in `use YATT::Lite::Factory -as_base`.
    
   * BUG fixes:
        - [GH #61] no warnings 'redundant' for sprintf. (partially)
        - [GH #55] *base* templates accidentally inherit their *user* directory bug 
        - [GH #53] - Allow setting dont_map_args in SiteApp.

0.100_001 2015-09-03
    * Enhanement (API Change) for unicode handling:
	- [GH #48] decode input params by default. Add new option `no_unicode` for backward compatibility.
	- [GH #45] YATT::Lite::Factory->render now returns decoded string by default.
    * Enhanement to help testing:
	- [GH #47] $site->mount_action($location => $action_sub)) and $dir->set_action_handler($filename => sub ($this, $con))
	- [GH #16] $site->mount_psgi($location => $psgi_app)
    * Fixes
        - [GH #50] [RT #106776] Test failure (caused by SQLite).
	- [GH #49] use safer fatalized warnings.
	- [GH #46] convert_array_param(parse_nested_query) conflicts with Plack::Request->upload.

0.100 2015-04-28
    * Docs
        - Better docs for YATT::Lite::LRXML::Syntax
    * Enhanement
        - [GH #43] - allow use of ".html" instead of ".yatt"
    * Fixes
        - Add Locale::PO to cpanfile

0.0.9_002 2015-04-09
    * fixes
        - [GH #42] [RT#103406] Test suite fails if LANG environment variable is unset (0.0.9_001)
        - [GH #41] [RT #103393] - YATT::Lite::Util::define_const
        - [GH #35] CGI->multi_param adaption
        - [GH #40] yatt.render / yatt.genperl relative path problems
        - [GH #38] - Add $CON->raw_body .. without tests(><)
        - [GH #37] - Fix test failures on LC_ALL=C
        - [GH #36] - to adapt recent mmm-mode
        - [GH #34] - Just added $this->SITE, $this->DIR. no tests.
        - [GH #32] - DirApp should inherit SiteApp
        - [GH #31] - samples/sess_backed/1 :att_value_of(radio,:name,:value,{in,:dict}) bug.
        - [GH #30] - to detect TAG mismatch for attribute element.
        - [GH #29] - to make error messages shorter for entity path syntax errors.

0.0.9 2014-05-26

 * To revert $app_root/.htdebug_env feature.
 * Not to invoke yatt-lint-any-mode unless yatt-lint-any-mode

0.0_9 2014-05-14

 * Mainly fix for perl 5.20 RC
 * Also, YATT::Lite::Types pod and tests.
 *  YATT::Lite::Types now correctly handles fields inheritance.

0.0.8 2014-05-13

 Major changes:

 * GH#20 - New type "bool" is introduced for yatt:widget arguments.
 * GH#23 - Detect cyclic inheritance error.

 Also minor fixes:

 * GH#7  - Wrong line number is reported for element-attribute errors.
 * GH#22 - CGI related tests didn't work.
 * GH#27 - RT#95388 t/lite_xhf.t fails with non-UTF-8 locale.

0.0_8 2013-08-25

 * Mainly for README.md polishment
 * As its side effect, YATT::Lite::Factory now supports render() method;-)

0.0.7 2013-06-20

 * GH#19 PHP/RoR like hash-and-array parameters.
 * GH#2 support for .htyattconfig.yml
 * SiteApp psgi_fallback, for 404 not found handler.
 * better backtrace in ytmpl/error.ytmpl
 * escape($array_or_hash) behavior change. This is still experimental.
 * yatt:foreach nth

 * ylpodview more for alt_lang link.
 * To pass/skip safely more tests on MSWin.

0.0.6 2013-05-18

 * To make sure all tests are runnable for cpantesters (except on perl-5.17)

0.0_4 2013-05-15

 * First CPAN release

0.0.3_4 2012-05-04

 * Directory layout is totally changed.
   Previous runyatt.lib/YATT is current top directory.

 * Also, massive internal changes.
   class Web::* namespace is renamed to WebMVC0::*.
   Some options (eg. appns and baseclass) are changed.

0.0.3  2011-11-16

 * PSGI Adaption. It is usable, but I'm not enough satisfied though.
   In next release, to adapt more for psgi, massive internal change will occur.

0.0.1  2010-10-18

 * Initial release.
