gina 0.1.9-alpha.5 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/FUNDING.yml +1 -0
- package/CHANGELOG.md +48 -0
- package/README.md +2 -2
- package/ROADMAP.md +6 -5
- package/framework/v0.2.0/VERSION +1 -0
- package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/gna.js +19 -1
- package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/model/entity.js +69 -65
- package/framework/v0.2.0/core/template/boilerplate/bundle/config/watchers.json +3 -0
- package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/conf/env.json +1 -1
- package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/add.js +11 -0
- package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/init.js +19 -5
- package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/index.js +3 -0
- package/framework/v0.2.0/lib/watcher/package.json +20 -0
- package/framework/v0.2.0/lib/watcher/src/main.js +248 -0
- package/package.json +20 -8
- package/framework/v0.1.9-alpha.5/VERSION +0 -1
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/AUTHORS +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/LICENSE +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/html/static.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/dist/vendor/gina/html/toolbar.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/dist/vendor/gina/html/toolbar.html.br +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/dist/vendor/gina/html/toolbar.html.gz +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/dist/vendor/gina/js/gina.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/uuid.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/config.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/couchbase/lib/connector.v2.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/couchbase/lib/session-store.v2.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/content.encoding +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/controller/controller.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/controller/controller.render-json.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/controller/controller.render-swig.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/controller/index.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/busboy-1.6.0/LICENSE +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/busboy-1.6.0/README.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/busboy-1.6.0/lib/index.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/busboy-1.6.0/package.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/optimist-0.6.1/LICENSE +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/optimist-0.6.1/index.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/optimist-0.6.1/package.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/optimist-0.6.1/readme.markdown +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/CONTRIBUTING.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/HISTORY.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/LICENSE +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/Makefile +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/README.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/bin/swig.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/browser/comments.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/browser/index.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/api.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/browser.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/cli.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/extending.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/filters.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/includes/TYPES.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/includes/macros.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/index.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/layout.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/loaders.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/previous.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/tags.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/docs.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/index.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/index.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/js/lib/rainbow.min.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/js/master.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/layouts/html5.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/layouts/master.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/less/button.less +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/less/fork.less +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/less/header.less +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/less/layout.less +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/less/mixins.less +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/less/rainbow.less +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/less/reset.less +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/less/sidenav.less +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/less/swig.less +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/less/variables.less +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/index.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/dateformatter.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/filters.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/lexer.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/loaders/filesystem.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/loaders/index.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/loaders/memory.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/parser.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/swig.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/autoescape.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/block.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/else.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/elseif.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/extends.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/filter.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/for.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/if.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/import.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/include.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/index.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/macro.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/parent.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/raw.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/set.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/spaceless.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/utils.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/package.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/scripts/config-lint.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/scripts/githooks/post-merge +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/scripts/githooks/pre-commit +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/basic.test.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/bin.filters.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/bin.locals.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/bin.locals.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/bin.tags.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/bin.test.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/custom_filter.bin.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/custom_tag.bin.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/custom_tagControls.bin.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/custom_varControls.bin.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/options.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_1.expectation.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_1.test.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_2.expectation.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_2.test.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_base.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_4.base.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_4.middle.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_bare.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_base.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_include.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_real_base.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_set.expectation.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_set.test.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_tests/extends_3.expectation.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_tests/extends_3.test.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_tests/extends_4.expectation.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_tests/extends_4.test.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/import.expectation.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/import.test.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/include.expectation.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/include.test.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/include_bar.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/include_extends.expectation.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/include_extends.test.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/includes.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/macros.expectation.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/macros.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/macros.test.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/nested_blocks.expectation.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/nested_blocks.test.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/nested_blocks_parent.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/parent-parent.expectation.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/parent-parent.test.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/parent.expectation.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/parent.test.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/set.expectation.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/set.test.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases-error/circular.test.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases-error/circular_parent.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases-error/extends-non-existent.test.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases-error/report-filename-partial.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases-error/report-filename.test.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/comments.test.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/filters.test.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/loaders.test.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/regressions.test.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/autoescape.test.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/else.test.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/extend.test.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/filter.test.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/for.test.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/if.test.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/import.test.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/include.test.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/macro.test.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/parent.test.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/raw.test.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/set.test.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/spaceless.test.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags.test.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/templates.test.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/variables.test.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/whitespace.test.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-client/swig-2.0.0.min.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-client/swig.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/dev/index.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/locales/README.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/locales/currency.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/locales/index.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/mime.types +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/model/index.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/model/template/index.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/README.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/index.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/file/README.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/file/build.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/file/package.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/intl/README.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/intl/build.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/intl/package.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/intl/src/main.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/validator/src/main.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/router.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/server.express.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/server.isaac.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/server.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/status.codes +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/_gitignore +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/conf/package.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/conf/settings.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/console.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/context.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/data/README.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/data/package.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/index.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/json/README.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/json/package.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/path.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/prototypes.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/task.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/text.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/archiver/README.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/archiver/build.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/archiver/package.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cache/README.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cache/build.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cache/package.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/index.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/collection/README.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/collection/build.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/collection/package.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/config.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cron/README.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cron/package.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/domain/README.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/domain/dist/2025-03-14_13-41-20_UTC.dat +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/domain/dist/public_suffix_list.dat +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/domain/dist/public_suffix_list.dat.br +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/domain/dist/public_suffix_list.dat.gz +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/domain/package.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/generator/index.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/inherits/README.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/inherits/package.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/logger/README.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/logger/package.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/math/index.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/merge/README.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/merge/package.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/model.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/proc.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/routing/README.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/routing/build.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/routing/package.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/routing/src/main.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/session-store.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/shell.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/state.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/url/README.md +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/url/index.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/url/routing.json +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/validator.js +0 -0
- /package/framework/{v0.1.9-alpha.5 → v0.2.0}/package.json +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
github: gina-automator
|
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,54 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
|
|
|
6
6
|
and is generated by [Changie](https://github.com/miniscruff/changie).
|
|
7
7
|
|
|
8
8
|
|
|
9
|
+
## 0.2.0 - 2026-03-29
|
|
10
|
+
### Added
|
|
11
|
+
* NODE_COMPILE_CACHE (#P1): set at startup in gna.js to ~/.gina/cache/v8 — Node.js >= 22.8 caches V8 bytecode to disk, reducing cold-start time by 30–60% on subsequent runs. No-op on older Node versions.
|
|
12
|
+
* JSON Schemas for routing.json, app.json, connectors.json, settings.json, app.crons.json — machine-readable schemas at schema/ in the package root. Scaffold templates now include "$schema" references to https://gina.io/schema/ for free editor validation and autocomplete in VS Code and any JSON Schema-aware IDE (#AI1)
|
|
13
|
+
* GitHub Discussions enabled — community Q&A and Show and Tell categories now available on the repo (#A10)
|
|
14
|
+
* Added V8 pointer compression detection at startup: sets GINA_V8_POINTER_COMPRESSED=true and logs heap limit when Node.js is built with --experimental-enable-pointer-compression (#P4)
|
|
15
|
+
* Added unit tests for #M2 entity._arguments buffer management — covers Promise path deletion and DISPATCH:BUFFER_CALLBACK deletion (3 tests, test/core/entity-arguments.test.js)
|
|
16
|
+
* Redis session store connector (CN1): ioredis-backed store with standalone, Cluster, and TLS support; configured via connectors.json — no credentials in application code
|
|
17
|
+
* SQLite session store connector (CN2 v1): node:sqlite-backed store (built-in since Node 22.5.0, zero npm deps) with WAL mode, prepared-statement caching, and background expiry cleanup; supports file-based and ':memory:' databases
|
|
18
|
+
* Added GitHub Actions CI pipeline — runs the full test suite (494+ tests) on Node.js 18, 20, and 22 on every push and PR to `develop` and `master` (#A1)
|
|
19
|
+
* Stable release now auto-tags, merges to master, and publishes the next alpha to npm
|
|
20
|
+
* SQLite ORM connector v2: entity wiring + SQL method generation from .sql files, Option-B Promise/.onComplete() pattern, connector.js (WAL, FK, synchronous open), 56 unit tests
|
|
21
|
+
* Added llms.txt — LLM-optimised framework reference for Cursor, Copilot, Claude.ai
|
|
22
|
+
* Added peerDependencies (all optional) for connector client libraries: couchbase, ioredis, mysql2, pg, mongodb, @scylladb/scylla-driver
|
|
23
|
+
* Added GitHub issue templates (bug_report, feature_request) and PR template
|
|
24
|
+
* SQLite state storage for ~/.gina/ config files (CN2 v3): lib/state.js StateStore routes all state-file writes through node:sqlite (DatabaseSync) for atomic writes and concurrent access safety; JSON sidecars kept for backwards-compat read paths
|
|
25
|
+
* Added WatcherService (lib/watcher): fs.watch-based file-change registry. Reads watchers.json bundle config and starts native file watchers on server startup. Exposes gna.watcher for framework-internal registration (#M6). 9 new tests in test/core/watcher.test.js.
|
|
26
|
+
* bundle:add preserves existing bundle source when the src/ directory already exists and rewrite is false — cloned starter repos are no longer overwritten
|
|
27
|
+
### Changed
|
|
28
|
+
* README: added 3-bullet why-Gina summary, feature highlights table, and Quick start section at the top; added MIT license and Node.js >= 18 badges; updated npm keywords to be search-relevant (http2, multi-bundle, event-driven, rest, api, couchbase) (#A9, #V3)
|
|
29
|
+
### Fixed
|
|
30
|
+
* Removed dead singleton infrastructure from SuperController (SuperController.instance, SuperController.initialized, init()/getInstance() singleton path); removed 4 no-op freeMemory([], false) calls; fixed throwError() HTML error path missing local.req/res/next = null after res.end() (#M1)
|
|
31
|
+
* Added deprecation warning to Couchbase SDK v2 connector: logs on every connection when sdk.version is 2 (EOL since 2021, removal planned for 0.4.0). Adds a separate fatal error when GINA_V8_POINTER_COMPRESSED=true, as v2 NAN bindings are incompatible with pointer-compressed Node.js builds.
|
|
32
|
+
* Fixed DISPATCH:BUFFER_CALLBACK path (util.promisify path in entity method wrappers): entity._arguments[trigger] was consumed but not deleted after use, allowing a buffered result from one request to persist and resolve all subsequent callers with stale data. Now deletes the buffer after consuming, matching the Promise path behaviour (#M2).
|
|
33
|
+
* Retired freeMemory() helper in controller pipeline — replaced all call sites with explicit local.req/res/next nulling so intent is visible at each response exit point (#M3)
|
|
34
|
+
* Fixed `/_gina/info` HTTP/2 endpoint returning `[object Object]` — `stream.end(infoHeaders)` was passing the headers object instead of the JSON string `infoStatus` (#H1)
|
|
35
|
+
* Added stream-closed guard (`stream.destroyed || stream.closed`) to `throwError()` HTML error response path — prevents unhandled error on HTTP/2 when a stream closes between error trigger and response write (#H2)
|
|
36
|
+
* Fixed infinite recursion in connector ping() when keepAlive is false (CB-BUG-4): replaced unconditional self.ping() recursive call with return in v2/v3/v4
|
|
37
|
+
* Removed redundant modelUtil.setConnection() call in connector v2/v3/v4 onConnect() (CB-PERF-3): first unconditional call before the existsSync guard was a no-op duplicate
|
|
38
|
+
* Fixed gina.onError() handler accumulation on Couchbase reconnect (CB-BUG-1): guarded registration with _errorHandlerRegistered flag so only one handler is registered per connector instance across reconnections (v2/v3/v4)
|
|
39
|
+
* Fixed session-store.v3 get() always returning session-not-found (CB-BUG-2): converted to async/await so Promise resolves before checks run — every session lookup was failing silently, forcing re-authentication on every request
|
|
40
|
+
* Fixed session-store.v3 set() silently discarding writes (CB-BUG-3): converted to async/await so upsert is awaited before calling fn() — writes appeared to succeed but were never confirmed
|
|
41
|
+
* Fixed CB-PERF-1 (300ms startup delay), CB-PERF-2 (ping reconnect drops callback), CB-QUAL-2 (eval() for @options parsing), CB-QUAL-3 (bulkInsert returns plain object instead of Promise) in Couchbase connector
|
|
42
|
+
* Fixed CB-QUAL-4, CB-LOW-1–5, CB-LOW-7: sanitised bulkInsert key in N1QL, fixed uuid implicit global, re-enabled strict mode in index.js, removed dead os.version import, removed duplicate use-strict in session-store.v4, added exponential backoff for Couchbase reconnects, removed dead commented-out blocks in connector files
|
|
43
|
+
* Fixed bundle:start hang: JSON.parse(process.argv[3]) in gna.start() threw SyntaxError in CLI mode where argv[3] is the project name (plain string), causing every bundle to crash silently and wait the full 60-second timeout. Added JSON format guard. Also added immediate crash detection in the start.js child watcher for non-zero exits during startup (#B9).
|
|
44
|
+
* Made engine.io a lazy require in server.isaac.js — loaded only when options.ioServer is configured, so bundles without WebSocket support no longer crash at startup if engine.io is absent
|
|
45
|
+
* Made ssl-checker a lazy require in server.js — loaded only inside verifyCertificate(), so bundles not using HTTPS cert verification no longer crash at startup if ssl-checker is absent
|
|
46
|
+
* Fixed Couchbase entity methods called via util.promisify without .bind(): instead of crashing with a cryptic 'Cannot set properties of undefined (setting _isRegisteredFromProto)', the framework now transparently recovers the entity singleton so the call succeeds
|
|
47
|
+
* Fixed EventEmitter listener leak on entity singleton when using util.promisify without .bind() (intermittent 500 errors under repeated requests on the same entity method)
|
|
48
|
+
* Boilerplate templates installed by view:add now render correctly — doubled html/ prefix removed from extends and include paths
|
|
49
|
+
* cache:stats now falls back through all assigned port/scheme combinations instead of trying only the first — fixes ECONNREFUSED on bundles that run HTTP/2 only
|
|
50
|
+
* Fixed entity method concurrency: concurrent callers on the same method now each receive their own result (FIFO queue dispatch replaces single-slot _callbacks; DISPATCH:PREEMPTIVE_BUFFER and consume paths queue-aware)
|
|
51
|
+
* All user-customisable settings (port, debug_port, mq_port, host_v4, hostname, logdir, tmpdir, rundir, log_level) now survive a shortVersion bump (e.g. 0.1 → 0.2) — previously they were silently reset to defaults because post_install pre-creates ~/.gina/<shortVersion>/settings.json from the template before init.js runs, making the migration block unreachable; fixed by detecting the unresolved template and triggering migration in that case too
|
|
52
|
+
### Security
|
|
53
|
+
* Added four missing HTTP/2 server security settings in `isaac.js`: `maxHeaderListSize: 65536` (HPACK bomb defense), `enablePush: false` (deprecated in browsers), `maxSessionRejectedStreams: 100` (RST/rapid reset flood defense — CVE-2019-9514, CVE-2023-44487), `maxSessionInvalidFrames: 1000` (CONTINUATION flood defense — CVE-2024-27316, CVE-2024-27983) (#H3)
|
|
54
|
+
* Fixed Couchbase restQuery() credential exposure and shell injection (CB-SEC-1, CB-SEC-2): replaced exec(curl...) with http.request(), credentials now sent via Authorization header, no shell involved
|
|
55
|
+
* Removed err.stack from HTTP 500 JSON response body in Couchbase connector (CB-QUAL-1): stack traces with filesystem paths now logged server-side only, never sent to clients
|
|
56
|
+
|
|
9
57
|
## 0.1.8 - 2026-03-27
|
|
10
58
|
### Added
|
|
11
59
|
* Added .github/dependabot.yml — weekly npm dependency updates for root package.json; vendored framework deps excluded
|
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Gina <img src="https://gina.io/favicon-16x16.png" alt="Gina icon" style="position: absolute; top:10px; margin-right: 10px;" />
|
|
2
2
|
|
|
3
|
-
[](https://badge.fury.io/js/gina) [](https://badge.fury.io/js/gina) [](https://badge.fury.io/gh/gina-io%2Fgina) [](https://opensource.org/licenses/MIT) [](https://nodejs.org) [](https://github.com/gina-io/gina/actions/workflows/test.yml)
|
|
4
4
|
|
|
5
|
-
> **Documentation:** [https://gina.io/docs/](https://gina.io/docs/) · **Issues:** [GitHub](https://github.com/
|
|
5
|
+
> **Documentation:** [https://gina.io/docs/](https://gina.io/docs/) · **Issues:** [GitHub](https://github.com/gina-io/gina/issues)
|
|
6
6
|
|
|
7
7
|
Node.js MVC framework with built-in HTTP/2, multi-bundle architecture, and scope-based data isolation — no Express dependency.
|
|
8
8
|
|
package/ROADMAP.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
This roadmap covers planned features, architectural improvements, new connectors, and AI integration. Items marked ✅ are shipped. All planned items are open to community contribution — see [CONTRIBUTING.md](./CONTRIBUTING.md) for how to get involved.
|
|
4
4
|
|
|
5
|
-
> **Docs:** [gina.io/docs](https://gina.io/docs/) · **Issues:** [github.com/
|
|
5
|
+
> **Docs:** [gina.io/docs](https://gina.io/docs/) · **Issues:** [github.com/gina-io/gina/issues](https://github.com/gina-io/gina/issues)
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -12,7 +12,7 @@ This roadmap covers planned features, architectural improvements, new connectors
|
|
|
12
12
|
| --- | --- | --- |
|
|
13
13
|
| **Apr 2026** | `0.1.8` ✅ | Scaffold correctness · K8s support · Dependency injection · Automatic version migration |
|
|
14
14
|
| **Q2 2026** | `0.2.0` | Stability · WatcherService · Redis & SQLite connectors · K8s session storage · Startup cache · Pointer compression · Couchbase v2 deprecation · Couchbase security & critical bug fixes · HTTP/2 security hardening |
|
|
15
|
-
| **Q3 2026** | `0.3.0` | Async/await · Dev hot-reload · MySQL & PostgreSQL connectors · AI Phase 2 · Tutorials · Mobile backend guide · Route radix tree · Connector peerDependencies · 103 Early Hints · HTTP/2 observability · Security & CVE page · Couchbase connector hardening · Beemaster Phase 1 |
|
|
15
|
+
| **Q3 2026** | `0.3.0` | Async/await · Dev hot-reload · MySQL & PostgreSQL connectors · AI Phase 2 · Tutorials · Mobile backend guide · Route radix tree · Connector peerDependencies · 103 Early Hints · HTTP/2 observability · Security & CVE page · Per-bundle framework version · Couchbase connector hardening · Beemaster Phase 1 |
|
|
16
16
|
| **Q4 2026** | `0.4.0` | TypeScript declarations · AI agents (OpenAPI, MCP) · ScyllaDB connector · PWA scaffold · Advanced tutorial · Website redesign · Docs offline ZIP · Bun investigation · Couchbase v2 removal · HTTP/2 hardening · Trailer support · Beemaster core |
|
|
17
17
|
| **Q1 2027** | `0.5.0` | ESM support · Template engine migration · Structured logging · Alt-Svc · HTTP/2 priorities · WebSocket over HTTP/2 · Beemaster admin |
|
|
18
18
|
| **Q3 2027** | `1.0.0` | First stable release — Windows alpha compatibility is a hard gate |
|
|
@@ -24,8 +24,9 @@ This roadmap covers planned features, architectural improvements, new connectors
|
|
|
24
24
|
| Status | Feature | Version | Target |
|
|
25
25
|
| --- | --- | --- | --- |
|
|
26
26
|
| ✅ | **Automatic version migration** — Upgrading or downgrading gina (e.g. `0.1.x → 0.2.0`, `0.5.x → 1.0.0`) automatically migrates `~/.gina/` config to the new version on first startup. Downgrade is free — old version data is never removed. | `0.1.8` | 2026-03-26 |
|
|
27
|
-
|
|
|
27
|
+
| ✅ | **`watchers.json`** — First-class bundle config for file watchers. Declare watchers on config files with event-based notification (no polling). Foundation for the dev-mode hot-reload system. | `0.2.0` | 2026-03-29 |
|
|
28
28
|
| 📋 | **PWA scaffold** — `gina bundle:add` drops `manifest.json`, a service worker stub (`sw.js`), and the required `<meta>` / `<link>` tags into the bundle boilerplate. Zero runtime dependency. Enables Gina apps to be installed on mobile as PWAs without additional tooling. | `0.4.0` | Q4 2026 |
|
|
29
|
+
| 📋 | **Per-bundle framework version** — Declare `"gina_version": "0.1.8"` on any bundle entry in `manifest.json` to pin that bundle to a specific installed framework version. The socket server continues running its own version; only the spawned bundle process uses the declared version. Validated against the tracked version list in `main.json` before start. `--gina-version=X.Y.Z` flag on `bundle:start` provides the same override without touching config files. | `0.3.0` | Q3 2026 |
|
|
29
30
|
|
|
30
31
|
---
|
|
31
32
|
|
|
@@ -36,7 +37,7 @@ This roadmap covers planned features, architectural improvements, new connectors
|
|
|
36
37
|
| Status | Feature | Version | Target |
|
|
37
38
|
| --- | --- | --- | --- |
|
|
38
39
|
| ✅ | **Per-request controller instances** — Each HTTP request gets its own isolated controller instance with its own request state. Removes dead singleton infrastructure and fixes edge-case memory retention in error paths. | `0.2.0` | Q2 2026 |
|
|
39
|
-
|
|
|
40
|
+
| ✅ | **Entity `_arguments` buffer scoped to call** — Move the event result buffer from the entity to the individual call, preventing concurrent callers from sharing state. | `0.2.0` | 2026-03-29 |
|
|
40
41
|
| ✅ | **Retire `freeMemory`** — Once per-request instances land (#M1), there is no shared `local` closure to null. Replace `freeMemory` call sites with explicit `local.req = null; local.res = null; local.next = null` at response exit points. | `0.2.0` | Q2 2026 |
|
|
41
42
|
|
|
42
43
|
### Phase 2 — Async
|
|
@@ -261,4 +262,4 @@ Standalone gina dev and admin tool. A dedicated browser-tab app (`services/src/b
|
|
|
261
262
|
|
|
262
263
|
---
|
|
263
264
|
|
|
264
|
-
*Last updated: 2026-03-
|
|
265
|
+
*Last updated: 2026-03-29 (Per-bundle framework version added) · To suggest a feature, [open an issue](https://github.com/gina-io/gina/issues).*
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.2.0
|
|
@@ -805,7 +805,25 @@ isBundleMounted(projects, bundlesPath, getContext('bundle'), function onBundleMo
|
|
|
805
805
|
// }
|
|
806
806
|
// }
|
|
807
807
|
|
|
808
|
-
//
|
|
808
|
+
// #R1 — start user-defined watchers declared in watchers.json via WatcherService.
|
|
809
|
+
// conf.watchers is the parsed content of the bundle's watchers.json (auto-loaded
|
|
810
|
+
// by config.js). conf.bundlePath is the absolute bundle source directory.
|
|
811
|
+
// Framework internal watchers (#M6) will register against gna.watcher using
|
|
812
|
+
// WatcherService.register() before calling start().
|
|
813
|
+
var _watchersConf = (conf && conf.watchers && typeof conf.watchers === 'object')
|
|
814
|
+
? conf.watchers
|
|
815
|
+
: null;
|
|
816
|
+
var _hasUserWatchers = _watchersConf && Object.keys(_watchersConf).some(function(k) {
|
|
817
|
+
return k.charAt(0) !== '$';
|
|
818
|
+
});
|
|
819
|
+
if (_hasUserWatchers && lib.Watcher) {
|
|
820
|
+
var _watcher = new lib.Watcher();
|
|
821
|
+
var _configDir = conf.bundlePath + '/config';
|
|
822
|
+
_watcher.load(_configDir, _watchersConf);
|
|
823
|
+
_watcher.start();
|
|
824
|
+
// expose so #M6 and user bundle code can register against the same service
|
|
825
|
+
gna.watcher = _watcher;
|
|
826
|
+
}
|
|
809
827
|
callback()
|
|
810
828
|
})
|
|
811
829
|
}
|
|
@@ -214,32 +214,31 @@ function EntitySuper(conn, caller, injected) {
|
|
|
214
214
|
if (entity._triggers.indexOf(events[i].shortName) > -1) {
|
|
215
215
|
console.debug('[ MODEL ][ ENTITY ] Setting promise listener for: [ ' + self.model + '/' + events[i].entityName + '::' + events[i].shortName + ' ]');
|
|
216
216
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
if (entity.listenerCount(events[i].shortName) > 0) {
|
|
220
|
-
entity.removeAllListeners([events[i].shortName])
|
|
221
|
-
}
|
|
217
|
+
// #M2 — queue check: buffer is now an array; treat missing/empty as "no buffer".
|
|
218
|
+
if (!entity._arguments || !entity._arguments[events[i].shortName] || entity._arguments[events[i].shortName].length === 0) {
|
|
222
219
|
|
|
220
|
+
// #M2 — removeAllListeners removed: it was killing the queue
|
|
221
|
+
// dispatch listener registered by concurrent in-flight callers.
|
|
223
222
|
entity.once(events[i].shortName, function () { // cannot be `entity.on` for prod/stage
|
|
224
223
|
// check if not already fired
|
|
225
224
|
if (entity._callbacks[events[i].shortName]) {
|
|
226
225
|
|
|
227
|
-
entity.removeAllListeners([events[i].shortName]);
|
|
228
226
|
console.log('\nDISPATCH:ONCE_LISTENER ' + events[i].shortName +'('+ events[i].index +')');
|
|
229
227
|
cb.apply(this, arguments);
|
|
230
228
|
}
|
|
231
229
|
});
|
|
232
230
|
|
|
233
231
|
|
|
234
|
-
// backing up callback
|
|
232
|
+
// backing up callback (scalar — promisify fast-path bypasses queue)
|
|
235
233
|
entity._callbacks[events[i].shortName] = cb;
|
|
236
234
|
} else { // in case the event is not ready yet
|
|
237
235
|
console.log('\nDISPATCH:BUFFER_CALLBACK ' + events[i].shortName);
|
|
238
|
-
// #M2 — consume
|
|
239
|
-
//
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
236
|
+
// #M2 — queue consume: shift oldest buffered result so concurrent
|
|
237
|
+
// callers each receive their own result, not a shared stale one.
|
|
238
|
+
var _firing2Args = entity._arguments[events[i].shortName].shift();
|
|
239
|
+
if (entity._arguments[events[i].shortName].length === 0) {
|
|
240
|
+
delete entity._arguments[events[i].shortName];
|
|
241
|
+
}
|
|
243
242
|
cb.apply(entity[m], _firing2Args);
|
|
244
243
|
}
|
|
245
244
|
}
|
|
@@ -270,9 +269,9 @@ function EntitySuper(conn, caller, injected) {
|
|
|
270
269
|
// existing callers keep working unchanged:
|
|
271
270
|
// entity.method(args).onComplete(function(err, data) {...})
|
|
272
271
|
//
|
|
273
|
-
// entity._callbacks[shortName] is
|
|
274
|
-
//
|
|
275
|
-
//
|
|
272
|
+
// entity._callbacks[shortName] is a FIFO queue (array) of
|
|
273
|
+
// per-invocation resolvers (#M2). A single persistent .on
|
|
274
|
+
// listener dequeues the oldest resolver on each emit.
|
|
276
275
|
//
|
|
277
276
|
// The util.promisify fast-path above (lines 192-229) is
|
|
278
277
|
// untouched — it fires when this[m] is undefined (called
|
|
@@ -289,56 +288,57 @@ function EntitySuper(conn, caller, injected) {
|
|
|
289
288
|
|
|
290
289
|
if (entity._triggers.indexOf(events[i].shortName) > -1) {
|
|
291
290
|
|
|
292
|
-
|
|
291
|
+
// #M2 — queue check: buffer is now an array; treat missing/empty as "no buffer".
|
|
292
|
+
if (!entity._arguments || !entity._arguments[events[i].shortName] || entity._arguments[events[i].shortName].length === 0) {
|
|
293
293
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
// Shared resolver — whichever fires first (DISPATCH:CALLBACK_FLUSH or the
|
|
299
|
-
// once-listener) resolves/rejects the Promise. The second call
|
|
300
|
-
// is a no-op (guard: _callbacks[shortName] is null after first).
|
|
294
|
+
// #M2 — resolver: double-resolution guard replaces the old _callbacks
|
|
295
|
+
// delete guard. The queue dispatch listener manages _callbacks —
|
|
296
|
+
// _resolver no longer needs to touch it.
|
|
301
297
|
//
|
|
302
|
-
//
|
|
303
|
-
//
|
|
304
|
-
//
|
|
305
|
-
|
|
306
|
-
// boolean `true`. setListener's DISPATCH:CALLBACK_FLUSH then calls
|
|
307
|
-
// `_callbacks[trigger].apply(this, args)` — `true.apply` throws.
|
|
308
|
-
// Storing a function makes DISPATCH:CALLBACK_FLUSH the primary resolution
|
|
309
|
-
// path (same as old code where _callbacks stored the cb).
|
|
298
|
+
// _innerResult.then() (connector Promise path) and the queue dispatch
|
|
299
|
+
// listener may both call _resolver; the _resolved flag ensures only
|
|
300
|
+
// the first call wins.
|
|
301
|
+
var _resolved = false;
|
|
310
302
|
var _resolver = function(err, data) {
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
// typeof(_callbacks[trigger]) != 'undefined' check correctly
|
|
314
|
-
// sees 'undefined' and skips the null.apply() call.
|
|
315
|
-
if (!entity._callbacks[events[i].shortName]) return;
|
|
316
|
-
delete entity._callbacks[events[i].shortName];
|
|
317
|
-
entity.removeAllListeners([events[i].shortName]);
|
|
303
|
+
if (_resolved) return;
|
|
304
|
+
_resolved = true;
|
|
318
305
|
if (err) _reject(err);
|
|
319
306
|
else _resolve(data);
|
|
320
307
|
};
|
|
321
308
|
|
|
322
|
-
//
|
|
323
|
-
//
|
|
324
|
-
//
|
|
325
|
-
entity.
|
|
326
|
-
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
309
|
+
// #M2 — FIFO queue: push this invocation's resolver instead of
|
|
310
|
+
// overwriting the single _callbacks slot. removeAllListeners is
|
|
311
|
+
// removed — it was killing in-flight callers' queue dispatch listener.
|
|
312
|
+
if (!entity._callbacks[e]) {
|
|
313
|
+
entity._callbacks[e] = [];
|
|
314
|
+
}
|
|
315
|
+
entity._callbacks[e].push(_resolver);
|
|
316
|
+
|
|
317
|
+
// Register a single persistent dispatch listener only when none is
|
|
318
|
+
// active. It dequeues the oldest resolver on each emit so concurrent
|
|
319
|
+
// callers each receive their own result in arrival order.
|
|
320
|
+
if (entity.listenerCount(e) === 0) {
|
|
321
|
+
var _onQueueEmit = function onQueueEmit() {
|
|
322
|
+
var _q = entity._callbacks[e];
|
|
323
|
+
if (!_q || _q.length === 0) return;
|
|
324
|
+
var _fn = _q.shift();
|
|
325
|
+
_fn.apply(null, arguments);
|
|
326
|
+
if (!_q || _q.length === 0) {
|
|
327
|
+
delete entity._callbacks[e];
|
|
328
|
+
entity.removeListener(e, _onQueueEmit);
|
|
329
|
+
}
|
|
330
|
+
};
|
|
331
|
+
entity.on(e, _onQueueEmit);
|
|
332
|
+
}
|
|
331
333
|
|
|
332
334
|
} else {
|
|
333
|
-
// Event already fired — args were buffered in _arguments.
|
|
334
|
-
//
|
|
335
|
-
//
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
var _args = entity._arguments[events[i].shortName];
|
|
341
|
-
delete entity._arguments[events[i].shortName];
|
|
335
|
+
// Event already fired — args were buffered in _arguments queue.
|
|
336
|
+
// #M2 — shift oldest buffered result: concurrent callers each
|
|
337
|
+
// consume their own result, not a shared stale scalar.
|
|
338
|
+
var _args = entity._arguments[events[i].shortName].shift();
|
|
339
|
+
if (entity._arguments[events[i].shortName].length === 0) {
|
|
340
|
+
delete entity._arguments[events[i].shortName];
|
|
341
|
+
}
|
|
342
342
|
if (_args[0]) _reject(_args[0]);
|
|
343
343
|
else _resolve(_args[1]);
|
|
344
344
|
}
|
|
@@ -356,9 +356,9 @@ function EntitySuper(conn, caller, injected) {
|
|
|
356
356
|
// via 'N1QL:entity#method' (different event), so entity.emit() is
|
|
357
357
|
// never called for them — _promise would hang forever.
|
|
358
358
|
//
|
|
359
|
-
// _resolver
|
|
360
|
-
//
|
|
361
|
-
//
|
|
359
|
+
// _resolver guards against double-resolution via the _resolved flag (#M2).
|
|
360
|
+
// The queue dispatch listener and _innerResult.then() may both call it;
|
|
361
|
+
// the flag ensures only the first call wins.
|
|
362
362
|
//
|
|
363
363
|
// Additional guard: _resolver is only defined when shortName is in
|
|
364
364
|
// entity._triggers (lines 268+). If the method returns a Promise
|
|
@@ -495,12 +495,14 @@ function EntitySuper(conn, caller, injected) {
|
|
|
495
495
|
this._arguments = {}
|
|
496
496
|
}
|
|
497
497
|
|
|
498
|
-
//
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
this._arguments[trigger] =
|
|
498
|
+
// #M2 — queue mode: push to array so each concurrent caller consumes
|
|
499
|
+
// its own buffered result instead of sharing a single scalar slot.
|
|
500
|
+
// Before: scalar assignment silently dropped every emit after the first.
|
|
501
|
+
if (!this._arguments[trigger]) {
|
|
502
|
+
this._arguments[trigger] = [];
|
|
503
503
|
}
|
|
504
|
+
console.log('\nDISPATCH:PREEMPTIVE_BUFFER ' + trigger);
|
|
505
|
+
this._arguments[trigger].push(arguments);
|
|
504
506
|
|
|
505
507
|
})
|
|
506
508
|
}
|
|
@@ -567,7 +569,9 @@ function EntitySuper(conn, caller, injected) {
|
|
|
567
569
|
if (
|
|
568
570
|
self._triggers && self._triggers.indexOf(type) == -1 && self._triggers.indexOf(type.replace(/[0-9]/g, '')) > -1
|
|
569
571
|
|| self._triggers && self._triggers.indexOf(type) > -1 && typeof(self._callbacks[type]) == 'undefined' && typeof(self._events[type]) == 'undefined'
|
|
570
|
-
|
|
572
|
+
// #M2 — skip DISPATCH:CALLBACK_FLUSH for queue mode (_callbacks is an array);
|
|
573
|
+
// the persistent .on dispatch listener handles routing in that case.
|
|
574
|
+
|| self._triggers && self._triggers.indexOf(type) > -1 && typeof(self._callbacks[type]) != 'undefined' && !Array.isArray(self._callbacks[type])
|
|
571
575
|
) {
|
|
572
576
|
setListener(arguments)
|
|
573
577
|
}
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"publicPath": "${bundlesPath}/${bundle}/public",
|
|
46
46
|
"templatesPath": "${bundlesPath}/${bundle}/templates",
|
|
47
47
|
"handlersPath": "${bundlesPath}/${bundle}/templates/handlers",
|
|
48
|
-
"
|
|
48
|
+
"watchersPath": "${bundlesPath}/${bundle}/watchers",
|
|
49
49
|
"workersPath": "${bundlesPath}/${bundle}/workers",
|
|
50
50
|
"template": false,
|
|
51
51
|
"server": {
|
|
@@ -312,6 +312,8 @@ function Add(opt, cmd) {
|
|
|
312
312
|
if (rewrite) {
|
|
313
313
|
delete content.bundles[local.bundle]
|
|
314
314
|
}
|
|
315
|
+
// #A6 — pass rewrite flag so createBundle can detect pre-existing source
|
|
316
|
+
local.rewrite = rewrite;
|
|
315
317
|
createBundle()
|
|
316
318
|
})
|
|
317
319
|
})
|
|
@@ -443,6 +445,15 @@ function Add(opt, cmd) {
|
|
|
443
445
|
, target = _( self.projects[self.projectName].path +'/'+ projectData.bundles[local.bundle].src, true )
|
|
444
446
|
, sample = new _( getPath('gina').core + '/template/boilerplate/bundle/' );
|
|
445
447
|
|
|
448
|
+
// #A6 — if source already exists and rewrite is false (new bundle, not replace),
|
|
449
|
+
// preserve the existing files (e.g. cloned starter repos) and skip the boilerplate copy.
|
|
450
|
+
if (!local.rewrite && fs.existsSync(target)) {
|
|
451
|
+
console.log('Bundle [ '+ local.bundle +' ] has been added to your project with success ;)');
|
|
452
|
+
rl.clearLine();
|
|
453
|
+
++local.b;
|
|
454
|
+
addBundles(local.b);
|
|
455
|
+
return;
|
|
456
|
+
}
|
|
446
457
|
|
|
447
458
|
sample.cp(target, function done(err, destination) {
|
|
448
459
|
|
|
@@ -552,10 +552,20 @@ function Initialize(opt) {
|
|
|
552
552
|
var localUserSettings = null;
|
|
553
553
|
if ( targetObj.existsSync() ) {
|
|
554
554
|
localUserSettings = requireJSON(target);
|
|
555
|
-
|
|
556
|
-
//
|
|
557
|
-
//
|
|
558
|
-
//
|
|
555
|
+
// post_install.js copies resources/home/settings.json (which has ${...} placeholders)
|
|
556
|
+
// into ~/.gina/<shortVersion>/settings.json before init.js runs. On a shortVersion
|
|
557
|
+
// bump the file therefore exists but is an unresolved template — detect this by
|
|
558
|
+
// checking whether the port field is still a placeholder string, and treat it the
|
|
559
|
+
// same as "file absent" so the migration block below runs.
|
|
560
|
+
if (typeof(localUserSettings['port']) === 'string' && localUserSettings['port'].indexOf('${') === 0) {
|
|
561
|
+
localUserSettings = null;
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
if (!localUserSettings) {
|
|
565
|
+
// MIGRATION: seed user-customisable values from the previous release's settings.json
|
|
566
|
+
// so port, hostname, logdir, tmpdir, rundir, and log_level survive a short-version
|
|
567
|
+
// bump. All assignments are env-var-gated so CLI flags or a prior checkIfSettings
|
|
568
|
+
// run take precedence. On a fresh install no previous version exists — defaults apply.
|
|
559
569
|
var _prevShortForSettings = null;
|
|
560
570
|
for (var _sfk in main['frameworks']) {
|
|
561
571
|
if (_sfk === '_comment' || _sfk === self.release) continue;
|
|
@@ -572,7 +582,11 @@ function Initialize(opt) {
|
|
|
572
582
|
'debug_port' : 'GINA_DEBUG_PORT',
|
|
573
583
|
'mq_port' : 'GINA_MQ_PORT',
|
|
574
584
|
'host_v4' : 'GINA_HOST_V4',
|
|
575
|
-
'hostname' : 'GINA_HOSTNAME'
|
|
585
|
+
'hostname' : 'GINA_HOSTNAME',
|
|
586
|
+
'logdir' : 'GINA_LOGDIR',
|
|
587
|
+
'tmpdir' : 'GINA_TMPDIR',
|
|
588
|
+
'rundir' : 'GINA_RUNDIR',
|
|
589
|
+
'log_level' : 'GINA_LOG_LEVEL'
|
|
576
590
|
};
|
|
577
591
|
for (var _smk in _settingsMigrationMap) {
|
|
578
592
|
if (!getEnvVar(_settingsMigrationMap[_smk]) && typeof(_prevSettings[_smk]) !== 'undefined') {
|
|
@@ -69,6 +69,9 @@ function Lib() {
|
|
|
69
69
|
SessionStore : _require('./session-store'),
|
|
70
70
|
SwigFilters : _require('./swig-filters'),
|
|
71
71
|
Cache : _require('./cache'),
|
|
72
|
+
// #R1 — WatcherService: fs.watch-based file-change registry. Class is hot-reloadable;
|
|
73
|
+
// instantiated once per bundle in gna.js:onStarted and stored as gna.watcher.
|
|
74
|
+
Watcher : _require('./watcher'),
|
|
72
75
|
// replaced: _require('./state') — StateStore is a singleton backed by node:sqlite
|
|
73
76
|
// (DatabaseSync). Hot-reloading it in dev mode would close and re-open the DB
|
|
74
77
|
// connection on every HTTP request, racing with in-flight writes. Use plain
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "gina-lib-watcher",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "WatcherService — shared fs.watch registry for user-defined and framework watchers",
|
|
5
|
+
|
|
6
|
+
"author": {
|
|
7
|
+
"name": "Maritn-Luther ETOUMAN",
|
|
8
|
+
"email": "contact@gina.io"
|
|
9
|
+
},
|
|
10
|
+
"copyright": "Copyright (c) 2009-2026 Rhinostone <contact@gina.io>",
|
|
11
|
+
"engines": {
|
|
12
|
+
"node": ">=16.0.0"
|
|
13
|
+
},
|
|
14
|
+
"main": "src/main",
|
|
15
|
+
"scripts": {
|
|
16
|
+
"test": "node --test test"
|
|
17
|
+
},
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"readmeFilename": "README.md"
|
|
20
|
+
}
|