gina 0.2.1-alpha.2 → 0.3.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/CHANGELOG.md +74 -0
- package/CONTRIBUTING.md +9 -0
- package/CONVENTIONS.md +564 -0
- package/README.md +35 -611
- package/ROADMAP.md +90 -47
- package/bin/cli +24 -0
- package/bin/gina-container +23 -0
- package/framework/v0.3.0/VERSION +1 -0
- package/framework/v0.3.0/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +493 -0
- package/framework/v0.3.0/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +513 -0
- package/framework/v0.3.0/core/asset/plugin/dist/vendor/gina/beemaster/index.html +108 -0
- package/framework/v0.3.0/core/asset/plugin/dist/vendor/gina/html/statusbar.html +152 -0
- package/framework/v0.3.0/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- package/framework/v0.3.0/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/asset/plugin/dist/vendor/gina/html/toolbar.html +0 -2
- package/framework/v0.3.0/core/asset/plugin/dist/vendor/gina/html/toolbar.html.br +0 -0
- package/framework/v0.3.0/core/asset/plugin/dist/vendor/gina/html/toolbar.html.gz +0 -0
- package/framework/v0.3.0/core/asset/plugin/dist/vendor/gina/inspector/index.html +269 -0
- package/framework/v0.3.0/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +3442 -0
- package/framework/v0.3.0/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +4186 -0
- package/framework/v0.3.0/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +1 -0
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/asset/plugin/dist/vendor/gina/js/gina.js +5005 -6592
- package/framework/v0.3.0/core/asset/plugin/dist/vendor/gina/js/gina.min.js +21544 -0
- package/framework/v0.3.0/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.3.0/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/v0.3.0/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +286 -0
- package/framework/v0.3.0/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- package/framework/v0.3.0/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- package/framework/v0.3.0/core/connectors/ai/index.js +183 -0
- package/framework/v0.3.0/core/connectors/ai/lib/connector.js +186 -0
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/connectors/couchbase/index.js +241 -21
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/connectors/couchbase/lib/session-store.v3.js +8 -4
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/connectors/couchbase/lib/session-store.v4.js +18 -7
- package/framework/v0.3.0/core/connectors/mysql/index.js +355 -0
- package/framework/v0.3.0/core/connectors/mysql/lib/connector.js +115 -0
- package/framework/v0.3.0/core/connectors/postgresql/index.js +356 -0
- package/framework/v0.3.0/core/connectors/postgresql/lib/connector.js +123 -0
- package/framework/v0.3.0/core/connectors/sql-parser.js +152 -0
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/connectors/sqlite/index.js +53 -6
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/controller/controller.js +437 -59
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/controller/controller.render-json.js +67 -0
- package/framework/v0.3.0/core/controller/controller.render-stream.js +142 -0
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/controller/controller.render-swig.js +251 -24
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/controller/controller.render-v1.js +47 -7
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/gna.js +36 -9
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/model/entity.js +74 -54
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/plugins/lib/storage/src/main.js +1 -1
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/plugins/lib/validator/src/main.js +1 -1
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/router.js +63 -8
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/server.express.js +7 -0
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/server.isaac.js +260 -16
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/server.js +436 -18
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/status.codes +1 -1
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/boilerplate/bundle/config/settings.server.json +16 -0
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/conf/env.json +5 -5
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/conf/manifest.json +1 -0
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/conf/settings.json +12 -3
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/helpers/context.js +1 -1
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/helpers/path.js +28 -0
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/helpers/prototypes.js +1 -7
- package/framework/v0.3.0/lib/async/package.json +20 -0
- package/framework/v0.3.0/lib/async/src/main.js +70 -0
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cache/src/main.js +1 -1
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/bundle/add.js +7 -6
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/bundle/arguments.json +2 -1
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/bundle/help.txt +18 -0
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/bundle/start.js +26 -1
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/env/help.txt +23 -0
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/gina.1.md +8 -0
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/helper.js +68 -9
- package/framework/v0.3.0/lib/cmd/port/help.txt +60 -0
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/port/inc/scan.js +8 -1
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/project/help.txt +5 -5
- package/framework/v0.3.0/lib/cmd/project/restart.js +82 -0
- package/framework/v0.3.0/lib/cmd/project/start.js +82 -0
- package/framework/v0.3.0/lib/cmd/project/stop.js +63 -0
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/protocol/help.txt +2 -2
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/scope/help.txt +11 -0
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/collection/src/main.js +1 -1
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/index.js +3 -0
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/proc.js +5 -1
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/routing/src/main.js +60 -0
- package/framework/v0.3.0/lib/routing/src/radix.js +114 -0
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/swig-filters/src/main.js +54 -0
- package/framework/{v0.2.1-alpha.2 → v0.3.0}/package.json +1 -1
- package/llms.txt +388 -28
- package/package.json +15 -5
- package/resources/img/logo.svg +1 -0
- package/schema/manifest.json +103 -0
- package/script/post_install.js +24 -0
- package/utils/helper.js +1 -1
- package/framework/v0.2.1-alpha.2/VERSION +0 -1
- package/framework/v0.2.1-alpha.2/core/asset/plugin/dist/vendor/gina/html/toolbar.html.br +0 -0
- package/framework/v0.2.1-alpha.2/core/asset/plugin/dist/vendor/gina/html/toolbar.html.gz +0 -0
- package/framework/v0.2.1-alpha.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -791
- package/framework/v0.2.1-alpha.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.2.1-alpha.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/v0.2.1-alpha.2/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -9
- package/framework/v0.2.1-alpha.2/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- package/framework/v0.2.1-alpha.2/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- package/framework/v0.2.1-alpha.2/core/asset/plugin/uuid.json +0 -23
- package/framework/v0.2.1-alpha.2/lib/cmd/port/help.txt +0 -31
- package/framework/v0.2.1-alpha.2/lib/cmd/project/restart.js +0 -0
- package/framework/v0.2.1-alpha.2/lib/cmd/project/start.js +0 -0
- package/framework/v0.2.1-alpha.2/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/AUTHORS +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/LICENSE +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/asset/html/static.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/config.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/connectors/couchbase/lib/connector.v2.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/connectors/couchbase/lib/session-store.v2.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/content.encoding +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/controller/index.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/busboy-1.6.0/LICENSE +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/busboy-1.6.0/README.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/busboy-1.6.0/lib/index.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/busboy-1.6.0/package.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/optimist-0.6.1/LICENSE +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/optimist-0.6.1/index.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/optimist-0.6.1/package.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/optimist-0.6.1/readme.markdown +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/CONTRIBUTING.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/HISTORY.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/LICENSE +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/Makefile +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/README.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/bin/swig.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/browser/comments.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/browser/index.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/docs/api.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/docs/browser.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/docs/cli.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/docs/extending.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/docs/filters.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/docs/includes/TYPES.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/docs/includes/macros.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/docs/index.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/docs/layout.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/docs/loaders.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/docs/previous.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/docs/tags.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/docs.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/index.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/index.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/js/lib/rainbow.min.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/js/master.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/layouts/html5.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/layouts/master.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/less/button.less +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/less/fork.less +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/less/header.less +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/less/layout.less +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/less/mixins.less +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/less/rainbow.less +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/less/reset.less +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/less/sidenav.less +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/less/swig.less +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/docs/less/variables.less +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/index.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/lib/dateformatter.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/lib/filters.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/lib/lexer.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/lib/loaders/filesystem.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/lib/loaders/index.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/lib/loaders/memory.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/lib/parser.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/lib/swig.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/lib/tags/autoescape.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/lib/tags/block.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/lib/tags/else.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/lib/tags/elseif.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/lib/tags/extends.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/lib/tags/filter.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/lib/tags/for.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/lib/tags/if.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/lib/tags/import.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/lib/tags/include.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/lib/tags/index.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/lib/tags/macro.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/lib/tags/parent.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/lib/tags/raw.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/lib/tags/set.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/lib/tags/spaceless.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/lib/utils.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/package.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/scripts/config-lint.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/scripts/githooks/post-merge +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/scripts/githooks/pre-commit +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/basic.test.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/bin/bin.filters.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/bin/bin.locals.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/bin/bin.locals.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/bin/bin.tags.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/bin/bin.test.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/bin/custom_filter.bin.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/bin/custom_tag.bin.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/bin/custom_tagControls.bin.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/bin/custom_varControls.bin.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/bin/options.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/extends_1.expectation.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/extends_1.test.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/extends_2.expectation.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/extends_2.test.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/extends_base.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_4.base.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_4.middle.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_bare.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_base.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_include.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_real_base.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/extends_set.expectation.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/extends_set.test.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/extends_tests/extends_3.expectation.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/extends_tests/extends_3.test.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/extends_tests/extends_4.expectation.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/extends_tests/extends_4.test.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/import.expectation.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/import.test.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/include.expectation.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/include.test.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/include_bar.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/include_extends.expectation.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/include_extends.test.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/includes.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/macros.expectation.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/macros.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/macros.test.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/nested_blocks.expectation.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/nested_blocks.test.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/nested_blocks_parent.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/parent-parent.expectation.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/parent-parent.test.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/parent.expectation.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/parent.test.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/set.expectation.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases/set.test.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases-error/circular.test.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases-error/circular_parent.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases-error/extends-non-existent.test.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases-error/report-filename-partial.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/cases-error/report-filename.test.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/comments.test.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/filters.test.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/loaders.test.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/regressions.test.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/tags/autoescape.test.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/tags/else.test.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/tags/extend.test.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/tags/filter.test.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/tags/for.test.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/tags/if.test.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/tags/import.test.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/tags/include.test.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/tags/macro.test.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/tags/parent.test.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/tags/raw.test.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/tags/set.test.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/tags/spaceless.test.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/tags.test.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/templates.test.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/variables.test.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-1.4.2/tests/whitespace.test.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-client/swig-2.0.0.min.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/deps/swig-client/swig.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/dev/index.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/locales/README.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/locales/currency.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/locales/index.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/mime.types +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/model/index.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/model/template/index.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/plugins/README.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/plugins/index.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/plugins/lib/file/README.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/plugins/lib/file/build.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/plugins/lib/file/package.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/plugins/lib/intl/README.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/plugins/lib/intl/build.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/plugins/lib/intl/package.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/plugins/lib/intl/src/main.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/_gitignore +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/conf/package.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/helpers/console.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/helpers/data/README.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/helpers/data/package.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/helpers/index.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/helpers/json/README.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/helpers/json/package.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/helpers/task.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/helpers/text.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/archiver/README.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/archiver/build.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/archiver/package.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cache/README.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cache/build.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cache/package.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/index.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/collection/README.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/collection/build.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/collection/package.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/config.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cron/README.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cron/package.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/domain/README.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/domain/dist/2025-03-14_13-41-20_UTC.dat +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/domain/dist/public_suffix_list.dat +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/domain/dist/public_suffix_list.dat.br +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/domain/dist/public_suffix_list.dat.gz +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/domain/package.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/generator/index.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/inherits/README.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/inherits/package.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/logger/README.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/logger/package.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/math/index.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/merge/README.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/merge/package.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/model.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/routing/README.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/routing/build.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/routing/package.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/session-store.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/shell.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/state.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/url/README.md +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/url/index.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/url/routing.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/validator.js +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/watcher/package.json +0 -0
- /package/framework/{v0.2.1-alpha.2 → v0.3.0}/lib/watcher/src/main.js +0 -0
package/CONVENTIONS.md
ADDED
|
@@ -0,0 +1,564 @@
|
|
|
1
|
+
# Gina — Coding Conventions
|
|
2
|
+
|
|
3
|
+
Observed from the current framework codebase. Each convention includes current practice, consistency estimate, and improvement recommendations.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Variable Declarations
|
|
8
|
+
|
|
9
|
+
**Current practice:** `var` dominates (~90%). `const` appears for top-level `require()` imports in newer files and a few module-level constants. `let` is used almost exclusively in `for` loop counters.
|
|
10
|
+
|
|
11
|
+
```js
|
|
12
|
+
// dominant pattern — all scopes
|
|
13
|
+
var self = this;
|
|
14
|
+
var local = {};
|
|
15
|
+
var fs = require('fs');
|
|
16
|
+
|
|
17
|
+
// newer files only — top-level imports
|
|
18
|
+
const path = require('path');
|
|
19
|
+
const { EventEmitter } = require('events');
|
|
20
|
+
|
|
21
|
+
// rare — loop counters in recent code
|
|
22
|
+
for (let i = 0, len = arr.length; i < len; ++i) { ... }
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**Rules:**
|
|
26
|
+
- `var` for all function-scoped variables in existing code
|
|
27
|
+
- `const` for imports and values that never reassign (new files)
|
|
28
|
+
- `let` for block-scoped temporaries and loop counters (new files)
|
|
29
|
+
- No arrow functions — see §2
|
|
30
|
+
|
|
31
|
+
**Recommendation:**
|
|
32
|
+
Standardise new files on `const` for imports, `let` for locals, `var` only where hoisting is intentionally relied upon. Do not do a mass refactor of existing files — the risk outweighs the gain. Apply the new standard file-by-file as files are touched for other reasons.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 2. Function Definition Style
|
|
37
|
+
|
|
38
|
+
**Current practice:** Named function expressions for private inner functions; `this.method = function()` for public instance methods; named declarations for constructors and top-level utilities. Arrow functions are absent by convention.
|
|
39
|
+
|
|
40
|
+
```js
|
|
41
|
+
// constructor (top-level declaration)
|
|
42
|
+
function SuperController(options) { ... }
|
|
43
|
+
|
|
44
|
+
// private inner function (expression)
|
|
45
|
+
var init = function() { ... }
|
|
46
|
+
var freeMemory = function(variables, isGlobalModeNeeded) { ... }
|
|
47
|
+
|
|
48
|
+
// public instance method
|
|
49
|
+
this.render = function(userData, displayInspector, errOptions) { ... }
|
|
50
|
+
|
|
51
|
+
// async addition (recent)
|
|
52
|
+
this.store = async function(key, value, ttl) { ... }
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Rules:**
|
|
56
|
+
- No arrow functions `=>` in framework code — not a restriction to lift, but a deliberate choice that avoids `this`-binding ambiguity in the constructor/closure patterns used
|
|
57
|
+
- `async function` is acceptable for new I/O-bound operations
|
|
58
|
+
- Do not convert existing callbacks to `async` without also converting all callers (see §5)
|
|
59
|
+
|
|
60
|
+
**Recommendation:**
|
|
61
|
+
Arrow functions may be introduced carefully in pure utility functions with no `this` reference. Keep the ban on arrow functions inside constructor bodies where `self = this` captures are in use — the risk of confusing `this` contexts is real.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## 3. Constructor / Class Patterns
|
|
66
|
+
|
|
67
|
+
**Current practice:** Pre-ES6 constructor functions exclusively. No `class` keyword anywhere. Singleton via static properties. Inheritance via `lib/inherits(Child, Parent)`.
|
|
68
|
+
|
|
69
|
+
```js
|
|
70
|
+
// Singleton pattern
|
|
71
|
+
function Router(env, scope) {
|
|
72
|
+
var self = this;
|
|
73
|
+
var local = {};
|
|
74
|
+
var init = function() {
|
|
75
|
+
if (typeof(Router.initialized) != 'undefined') return self.getInstance();
|
|
76
|
+
Router.instance = self;
|
|
77
|
+
Router.initialized = true;
|
|
78
|
+
}
|
|
79
|
+
init();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Public instance method
|
|
83
|
+
Router.prototype.getInstance = function() { return Router.instance; }
|
|
84
|
+
|
|
85
|
+
// Inheritance
|
|
86
|
+
Entity = inherits(Entity, EntitySuperClass);
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**Rules:**
|
|
90
|
+
- No ES6 `class` syntax — existing code uses pre-ES6 patterns throughout
|
|
91
|
+
- Singletons use `Constructor.initialized` + `Constructor.instance` static flags
|
|
92
|
+
- `var self = this;` is mandatory in all constructors and methods referencing instance state
|
|
93
|
+
- `var local = {};` is the private closure for per-instance or per-request state
|
|
94
|
+
- Static factory methods (e.g., `SuperController.createTestInstance`) are the approved pattern for test instances
|
|
95
|
+
|
|
96
|
+
**Recommendation:**
|
|
97
|
+
ES6 `class` can be introduced for entirely new modules that have no inheritance relationship with existing framework classes. Do not mix `class extends` with `inherits()` — they are incompatible. The singleton `#C1` pattern (#M1 roadmap item) is the primary architectural risk — see architecture docs.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## 4. Error Handling
|
|
102
|
+
|
|
103
|
+
**Current practice:** Four patterns coexist across different generations of the codebase.
|
|
104
|
+
|
|
105
|
+
```js
|
|
106
|
+
// 1. try/catch (dominant in core)
|
|
107
|
+
try {
|
|
108
|
+
var config = new Config().getInstance();
|
|
109
|
+
} catch (configErr) {
|
|
110
|
+
serverInstance.throwError(response, 500, configErr);
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// 2. self.throwError / controller.throwError (HTTP errors)
|
|
115
|
+
self.throwError(local.res, 404, new Error('Not found'));
|
|
116
|
+
|
|
117
|
+
// 3. next(err) (middleware chain)
|
|
118
|
+
return next(err);
|
|
119
|
+
|
|
120
|
+
// 4. error-as-value return (path helpers — anti-pattern)
|
|
121
|
+
var result = pathObj.mkdirSync(); // may return Error, callers rarely check
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**Rules:**
|
|
125
|
+
- `try/catch` for all I/O and JSON operations
|
|
126
|
+
- `self.throwError(res, code, err)` for HTTP error responses in controllers
|
|
127
|
+
- `next(err)` for middleware-style propagation
|
|
128
|
+
- **Never** use error-as-value returns in new code — always `throw` or callback with `err`
|
|
129
|
+
- Always null `local.req/res/next` at every error exit point in controllers (memory hygiene)
|
|
130
|
+
|
|
131
|
+
**Recommendation:**
|
|
132
|
+
Audit all `_.prototype.mkdirSync()` call sites (~25) that ignore the return value — this is a silent failure risk documented in security.md. New code must either `throw` on error or use the callback/Promise pattern. Introduce a lint rule to catch unchecked return values from `mkdirSync`.
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## 5. Async Patterns
|
|
137
|
+
|
|
138
|
+
**Current practice:** Three generations coexist. Migration from callbacks → EventEmitter → Promises is in progress.
|
|
139
|
+
|
|
140
|
+
```js
|
|
141
|
+
// Gen 1: error-first callbacks (original, still used in cmd handlers)
|
|
142
|
+
self.checkIfMain(function(err) {
|
|
143
|
+
if (err) return done(err);
|
|
144
|
+
done();
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
// Gen 2: EventEmitter .onComplete() (entity model layer, backward-compat bridge)
|
|
148
|
+
entity.findById(id).onComplete(function(err, data) { ... });
|
|
149
|
+
|
|
150
|
+
// Gen 3: native Promise + .onComplete() bridge (added 2026-03-20)
|
|
151
|
+
var _promise = new Promise(function(resolve, reject) {
|
|
152
|
+
entity.once('user#findById', function(err, result) {
|
|
153
|
+
if (err) reject(err); else resolve(result);
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
_promise.onComplete = function(cb) { _promise.then(cb.bind(null,null)).catch(cb); return _promise; };
|
|
157
|
+
return _promise;
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**Rules:**
|
|
161
|
+
- `.onComplete(cb)` is the public contract for all entity methods — never break it
|
|
162
|
+
- `.once()` not `.on()` for entity event listeners — mandatory (documented in architecture)
|
|
163
|
+
- `entity.removeAllListeners([eventName])` before every `.once()` registration
|
|
164
|
+
- New non-entity async code may use `async/await` directly
|
|
165
|
+
- Do not `await` inside a constructor — use lazy init patterns instead
|
|
166
|
+
|
|
167
|
+
**Recommendation:**
|
|
168
|
+
Complete the migration by adding `onCompleteCall(emitter)` Promise adapter (#M4) so controllers can use `async/await` without touching entity internals. Avoid creating any new callback-only APIs — all new async APIs should return Promises with an optional `.onComplete()` bridge for backward compatibility.
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## 6. Module System
|
|
173
|
+
|
|
174
|
+
**Current practice:** CommonJS exclusively. No ESM. Extensive use of global helpers injected by `gna.js` without explicit `require()`.
|
|
175
|
+
|
|
176
|
+
```js
|
|
177
|
+
// Standard CJS
|
|
178
|
+
var fs = require('fs');
|
|
179
|
+
module.exports = SuperController;
|
|
180
|
+
|
|
181
|
+
// Dev-mode cache-busting pattern
|
|
182
|
+
var _require = function(path) {
|
|
183
|
+
if (isCacheless) { delete require.cache[require.resolve(path)]; }
|
|
184
|
+
return require(path);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// Globals (no require needed — injected by gna.js)
|
|
188
|
+
_(path, true) // PathObject constructor
|
|
189
|
+
getContext('gina') // global context read
|
|
190
|
+
setEnvVar('KEY', val) // env var write
|
|
191
|
+
requireJSON(path) // cached JSON read
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**Rules:**
|
|
195
|
+
- No ESM `import`/`export` in framework files (roadmap item #M10 for Q1 2027)
|
|
196
|
+
- `_require()` only for hot-reload delegate files; use plain `require()` for singletons (logger, cache)
|
|
197
|
+
- Do not add new global injections — use explicit `require()` in new files
|
|
198
|
+
- Circular dependencies must be resolved at the module level, not papered over with `require.cache` fallbacks
|
|
199
|
+
|
|
200
|
+
**Recommendation:**
|
|
201
|
+
Document all globals injected by `gna.js` with `@global` JSDoc so IDEs can discover them. Long-term, migrate toward explicit exports (#M8) so static analysis tools can trace the dependency graph. The `utils/helper.js ↔ lib/logger` circular dependency is a known risk — resolve before the async migration (#M4/M5).
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## 7. Naming Conventions
|
|
206
|
+
|
|
207
|
+
**Current practice:**
|
|
208
|
+
|
|
209
|
+
| Element | Convention | Example |
|
|
210
|
+
| --- | --- | --- |
|
|
211
|
+
| Files (multi-word) | dot-separated namespacing | `controller.render-json.js`, `server.isaac.js` |
|
|
212
|
+
| Files (versioned) | `.vN` suffix | `connector.v4.js`, `session-store.v2.js` |
|
|
213
|
+
| Files (kebab) | kebab-case | `link-dev.js`, `api-error.js` |
|
|
214
|
+
| Files (test) | numeric prefix + snake | `01-init_new_project.js` |
|
|
215
|
+
| Constructors | PascalCase | `SuperController`, `EntitySuper`, `CmdHelper` |
|
|
216
|
+
| Variables | camelCase | `envIsDev`, `scopeIsLocal`, `isLoadedThroughCLI` |
|
|
217
|
+
| Private/internal | `_` prefix | `_isDev`, `_options`, `_scope`, `_conn`, `_promise` |
|
|
218
|
+
| Instance capture | always `self` | `var self = this;` |
|
|
219
|
+
| Private closure | always `local` | `var local = {};` |
|
|
220
|
+
| EventEmitter instance | `e` | `var e = new EventEmitter();` |
|
|
221
|
+
| Env vars / globals | SCREAMING_SNAKE | `GINA_DIR`, `GINA_HOMEDIR`, `NODE_SCOPE` |
|
|
222
|
+
| Config keys (settings) | snake_case | `dev_env`, `def_scope`, `log_level` |
|
|
223
|
+
| Config keys (routing) | camelCase | `startingApp`, `projectName`, `bundlesConfiguration` |
|
|
224
|
+
|
|
225
|
+
**Rules:**
|
|
226
|
+
- `self` and `local` are reserved names — do not use them for other purposes inside constructors
|
|
227
|
+
- Underscore prefix means "not part of the public API" — never call `_prefixed` methods from user bundles
|
|
228
|
+
- Settings/home dir config: `snake_case`. Routing/server config: `camelCase`. Do not mix within one config file.
|
|
229
|
+
- **Names must be human-readable:** functions, methods, classes, and variables must use full words that describe intent. Single-letter names (`x`, `n`, `fn`) are only acceptable as loop counters (`i`, `j`, `k`, `len`) and in arrow-function shorthands where context is unambiguous. Abbreviations are allowed only when universally understood in the domain (`req`, `res`, `err`, `env`, `cfg`, `cb`). Never use names like `tmp2`, `foo`, `data2`, or `handler1` — name the thing by what it actually does or represents.
|
|
230
|
+
|
|
231
|
+
**Recommendation:**
|
|
232
|
+
Standardise config file field naming to `camelCase` across all new config files (`snake_case` is a legacy of early framework development). Document the reserved words (`self`, `local`, `e`) in this file so contributors know not to repurpose them.
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## 8. Comments and JSDoc
|
|
237
|
+
|
|
238
|
+
**Current practice:** JSDoc on constructors and public methods in recently refactored files. Inline comments use `//` with a `TODO -` format. Ticket references use `#` prefix.
|
|
239
|
+
|
|
240
|
+
```js
|
|
241
|
+
// Copyright block (most files)
|
|
242
|
+
/*
|
|
243
|
+
* This file is part of the gina package.
|
|
244
|
+
* Copyright (c) 2009-2026 Rhinostone <contact@gina.io>
|
|
245
|
+
* ...
|
|
246
|
+
*/
|
|
247
|
+
|
|
248
|
+
// JSDoc (recent files)
|
|
249
|
+
/**
|
|
250
|
+
* @class SuperController
|
|
251
|
+
* @constructor
|
|
252
|
+
* @this {SuperController}
|
|
253
|
+
*/
|
|
254
|
+
|
|
255
|
+
// Inline markers
|
|
256
|
+
// TODO - handle windows case
|
|
257
|
+
// N.B.: must be called before setOptions()
|
|
258
|
+
// replaced: old pattern — reason (#ticket)
|
|
259
|
+
// BO - section description
|
|
260
|
+
// EO - section description
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
**Rules:**
|
|
264
|
+
- **Every time code is written or modified, add or update JSDoc on the affected functions.** This is not a deferred task — JSDoc is part of the definition of done for any code change. New functions must ship with JSDoc; modified functions must have their JSDoc updated to reflect the change.
|
|
265
|
+
- Every constructor must have `@class`, `@constructor`, `@this` JSDoc
|
|
266
|
+
- Every public method must have at minimum `@param`, `@returns`, and at least one `@example`
|
|
267
|
+
- Private/inner functions (inside IIFEs or closures) must have `@inner` and `@private`
|
|
268
|
+
- Use `@typedef` for reusable data shapes at the top of the file
|
|
269
|
+
- Use `@constant` for module-level constants with a brief description of purpose
|
|
270
|
+
- State variables should have `@type` annotations describing their role
|
|
271
|
+
- `TODO - ` (with dash and space) is the standard TODO format
|
|
272
|
+
- Preserve replaced code as inline comments with `// replaced: <what> — <why>` when the change is non-obvious
|
|
273
|
+
- `"use strict";` should be present in all new files
|
|
274
|
+
- **Never use `*/` inside a JSDoc comment** (e.g. in code examples showing block comments) — it prematurely closes the comment block and causes syntax errors. Reword to avoid it.
|
|
275
|
+
|
|
276
|
+
**Recommendation:**
|
|
277
|
+
Add `"use strict";` to all new files immediately (no mass refactor of old files). Add ESLint or JSHint config (`.jshintrc` / `.eslintrc`) to enforce it on new code. The JSDoc backfill is tracked as #M9 in the roadmap.
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## 9. EventEmitter Patterns
|
|
282
|
+
|
|
283
|
+
**Current practice:** Well-established and consistently applied.
|
|
284
|
+
|
|
285
|
+
```js
|
|
286
|
+
// Entity trigger naming: <entity>#<method>
|
|
287
|
+
entity.removeAllListeners(['user#findById']);
|
|
288
|
+
entity.once('user#findById', function(err, result) {
|
|
289
|
+
if (err) reject(err); else resolve(result);
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
// Framework lifecycle events: descriptive strings
|
|
293
|
+
emitter.emit('server#started', server, app);
|
|
294
|
+
emitter.once('config#complete', function(err, config) { ... });
|
|
295
|
+
|
|
296
|
+
// Listener cap
|
|
297
|
+
var ENTITY_MAX_LISTENERS = 100;
|
|
298
|
+
self.setMaxListeners(Math.min(self._maxListeners + 1, ENTITY_MAX_LISTENERS));
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
**Rules:**
|
|
302
|
+
- `.once()` not `.on()` for all entity trigger listeners — mandatory
|
|
303
|
+
- `removeAllListeners([name])` before every `.once()` registration
|
|
304
|
+
- `ENTITY_MAX_LISTENERS = 100` — never exceed without understanding the implication
|
|
305
|
+
- Framework lifecycle events use `#` separator: `component#event`
|
|
306
|
+
- Entity triggers use `#` separator: `entityName#methodName`
|
|
307
|
+
- Numbered variant (`entity#method1`) exists for loop/recursive emit safety — avoid in new code
|
|
308
|
+
|
|
309
|
+
**Recommendation:**
|
|
310
|
+
This is the best-maintained convention in the codebase. The only risk is `_arguments` buffer poisoning under concurrent load (#M2) — tracked in the roadmap.
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
## 10. Path Handling
|
|
315
|
+
|
|
316
|
+
**Current practice:** The `_()` global is the primary tool for path normalization.
|
|
317
|
+
|
|
318
|
+
```js
|
|
319
|
+
// String path (most common)
|
|
320
|
+
var filename = _(opt.path + '/' + bundle + '/data' + url + '.json', true);
|
|
321
|
+
|
|
322
|
+
// PathObject (for existence checks, mkdir, cp, mv)
|
|
323
|
+
var obj = new _(self.opt.homedir + '/main.json', true);
|
|
324
|
+
if (obj.existsSync()) { ... }
|
|
325
|
+
|
|
326
|
+
// Node path module — used when `_()` is insufficient
|
|
327
|
+
const nodePath = require('path'); // renamed to avoid collision with local `path` var
|
|
328
|
+
nodePath.resolve(root, userPath);
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
**Rules:**
|
|
332
|
+
- Always use `_()` for framework-internal path construction
|
|
333
|
+
- Import `path` as `nodePath` in files where a local variable named `path` already exists
|
|
334
|
+
- Use `nodePath.resolve()` for security-sensitive path validation (CVE-2023-25345 pattern)
|
|
335
|
+
- Never concatenate user-supplied strings into file paths without a `nodePath.resolve()` boundary check
|
|
336
|
+
|
|
337
|
+
**Recommendation:**
|
|
338
|
+
Replace string concatenation paths with `nodePath.join()` in new code — more readable and avoids double-slash issues. The `_()` helper should remain the primary API but should internally use `path.join` instead of raw concatenation.
|
|
339
|
+
|
|
340
|
+
---
|
|
341
|
+
|
|
342
|
+
## 11. Logging
|
|
343
|
+
|
|
344
|
+
**Current practice:** Consistent and well-standardised.
|
|
345
|
+
|
|
346
|
+
```js
|
|
347
|
+
var console = lib.logger; // shadows Node's console — present in virtually every file
|
|
348
|
+
|
|
349
|
+
console.log('message'); // info-level
|
|
350
|
+
console.info('message'); // info-level
|
|
351
|
+
console.warn('message'); // warn-level
|
|
352
|
+
console.error('message'); // error-level
|
|
353
|
+
console.debug('message'); // debug-level (suppressed unless GINA_LOG_LEVEL=debug)
|
|
354
|
+
console.emerg('message'); // fatal/emergency
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
**Rules:**
|
|
358
|
+
- Always shadow `console` with `lib.logger` — never use `process.stdout.write()` directly in bundle code
|
|
359
|
+
- `console.debug()` for developer-only tracing (filtered by log level)
|
|
360
|
+
- `console.emerg()` for conditions that require immediate attention
|
|
361
|
+
- Bootstrap code (before logger is ready) may use `fs.writeSync(2, msg)` directly
|
|
362
|
+
|
|
363
|
+
**Recommendation:**
|
|
364
|
+
Introduce structured logging (#M12) as a future migration, not a replacement — the `%d [%s][%a] %m` template format will need to produce `{ ts, level, group, msg }` JSON when `GINA_LOG_STDOUT=true` is set.
|
|
365
|
+
|
|
366
|
+
---
|
|
367
|
+
|
|
368
|
+
## 12. Test Conventions
|
|
369
|
+
|
|
370
|
+
**Current practice:** `nodeunit` framework. Tests use `exports['test name'] = function(test) {}`. Files are numerically prefixed and named with `snake_case`.
|
|
371
|
+
|
|
372
|
+
```js
|
|
373
|
+
// Test structure
|
|
374
|
+
exports['[ find limit ] Hotel WHERE country === "France"'] = function(test) {
|
|
375
|
+
test.equal(actual, expected, 'message');
|
|
376
|
+
test.deepEqual(obj1, obj2);
|
|
377
|
+
test.done(); // mandatory — hangs if omitted
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
// Setup
|
|
381
|
+
exports.setUp = function(done) {
|
|
382
|
+
if (initialized) return done();
|
|
383
|
+
initialized = true;
|
|
384
|
+
// setup code
|
|
385
|
+
done();
|
|
386
|
+
}
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
**Rules:**
|
|
390
|
+
- `test.done()` is mandatory at every exit path
|
|
391
|
+
- Test names use `[ category ] description` format for grouping
|
|
392
|
+
- Setup guards (`if (initialized) return done()`) prevent re-execution across test suites
|
|
393
|
+
- New unit tests go in `test/core/` with numeric prefix for ordering
|
|
394
|
+
|
|
395
|
+
**Recommendation:**
|
|
396
|
+
Migrate to `node:test` (built-in, Node 18+) for all new test files — `nodeunit` is unmaintained. Do not convert existing tests; add `node:test` tests alongside. The HTTP/2 client mock harness (#UT1) should use `node:test + node:assert` natively.
|
|
397
|
+
|
|
398
|
+
---
|
|
399
|
+
|
|
400
|
+
## 13. Git Commit Style
|
|
401
|
+
|
|
402
|
+
**Current practice:** Short imperative or gerund subject lines. Ticket references in subject or body. No AI references. No co-author footers.
|
|
403
|
+
|
|
404
|
+
```
|
|
405
|
+
Fixed ReferenceError: defIsoShort/defDate used across function boundary in init.js
|
|
406
|
+
Added SuperController.createTestInstance for controller unit testing (#R4)
|
|
407
|
+
Removed stale root core/ directory left over from pre-versioned framework layout
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
**Rules:**
|
|
411
|
+
- No AI tool references anywhere in commit messages or comments
|
|
412
|
+
- No `Co-Authored-By:` footers
|
|
413
|
+
- Ticket references: `(#ID)` at end of subject line, or inline in body
|
|
414
|
+
- Subject line: max ~72 characters
|
|
415
|
+
- Body: explain *why*, not *what* (the diff shows what)
|
|
416
|
+
|
|
417
|
+
---
|
|
418
|
+
|
|
419
|
+
## 14. File Headers
|
|
420
|
+
|
|
421
|
+
**Current practice:** Copyright block present in most files. `"use strict"` in ~40% of files. `@module` JSDoc in recently refactored files.
|
|
422
|
+
|
|
423
|
+
```js
|
|
424
|
+
/*
|
|
425
|
+
* This file is part of the gina package.
|
|
426
|
+
* Copyright (c) 2009-2026 Rhinostone <contact@gina.io>
|
|
427
|
+
*
|
|
428
|
+
* For the full copyright and license information, please view the LICENSE
|
|
429
|
+
* file that was distributed with this source code.
|
|
430
|
+
*/
|
|
431
|
+
'use strict';
|
|
432
|
+
|
|
433
|
+
/**
|
|
434
|
+
* @module gina/core/config
|
|
435
|
+
* @class Config
|
|
436
|
+
* @constructor
|
|
437
|
+
*/
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
**Rules:**
|
|
441
|
+
- Copyright block is mandatory in all framework files
|
|
442
|
+
- `"use strict";` is required in all new files
|
|
443
|
+
- `@module` is required in all new files
|
|
444
|
+
- `@class` + `@constructor` on every constructor function
|
|
445
|
+
|
|
446
|
+
---
|
|
447
|
+
|
|
448
|
+
## 15. Version & Home Directory Schema
|
|
449
|
+
|
|
450
|
+
**Current practice:** Version strings use `0.MINOR.PATCH-STAGE.N` format (e.g., `0.1.8-alpha.1`). The "short version" is the first two components (`0.1`), used as the namespace key in `~/.gina/main.json` and the `~/.gina/0.1/` directory name.
|
|
451
|
+
|
|
452
|
+
```js
|
|
453
|
+
// Short version derivation in init.js
|
|
454
|
+
var shortVersion = version.split('.');
|
|
455
|
+
shortVersion.splice(2);
|
|
456
|
+
shortVersion = shortVersion.join('.'); // "0.1.8-alpha.1" → "0.1"
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
**Rules:**
|
|
460
|
+
- All `main.json` config keys are namespaced by short version: `main['def_culture']['0.1']`
|
|
461
|
+
- Incrementing the minor version (`0.1.x → 0.1.(x+1)`) keeps short version `"0.1"` — no migration
|
|
462
|
+
- Incrementing the middle version (`0.1.x → 0.2.0`) changes short version to `"0.2"` — **requires migration script**
|
|
463
|
+
- Patch releases within a minor version use `-pN` suffix: `0.1.8-p1`, `0.1.8-p2`
|
|
464
|
+
|
|
465
|
+
**Recommendation:**
|
|
466
|
+
All planned releases should stay in the `0.1.x` series (see roadmap) to avoid the home directory migration until a dedicated `gina framework:migrate` command is built. When a `0.2.0` release is eventually warranted, the migration script must: (1) copy all `"0.1"` keys to `"0.2"` in `main.json`, (2) create `~/.gina/0.2/` from `~/.gina/0.1/`, (3) update `projects.json` entries.
|
|
467
|
+
|
|
468
|
+
---
|
|
469
|
+
|
|
470
|
+
## 16. `whisper()` Substitution — `${variable}` Syntax and `reps` Completeness
|
|
471
|
+
|
|
472
|
+
**Background:** `helpers/context.js::whisper(dictionary, replaceable)` performs a single-pass `${variable}` substitution on JSON config objects. It was migrated from `{variable}` syntax to `${variable}` syntax.
|
|
473
|
+
|
|
474
|
+
**Critical rule — single-pass, no self-resolution:**
|
|
475
|
+
`whisper()` does **not** do multi-pass resolution. If `env.json` defines `bundlesPath` as `"${homedir}/bundles"`, and `bundlePath` as `"${bundlesPath}/${bundle}"`, whisper **cannot** derive `bundlePath` from `homedir` alone — both `homedir` AND `bundlesPath` must be in the `reps` dictionary at call time.
|
|
476
|
+
|
|
477
|
+
**Rule for every `getCoreEnv` / `whisper()` call site:**
|
|
478
|
+
> Pre-compute all derived values before building `reps`. The dictionary must contain every `${placeholder}` key that appears anywhere in the template being substituted, including keys whose values are themselves derived from other keys.
|
|
479
|
+
|
|
480
|
+
**Required keys for `lib/cmd/helper.js::getCoreEnv`** (covers `core/template/conf/env.json`):
|
|
481
|
+
|
|
482
|
+
| Key | Source |
|
|
483
|
+
| --- | --- |
|
|
484
|
+
| `frameworkDir` | `GINA_FRAMEWORK_DIR` |
|
|
485
|
+
| `executionPath` | `cmd.projects[name].path` |
|
|
486
|
+
| `projectPath` | `cmd.projects[name].path` |
|
|
487
|
+
| `projectName` | `cmd.projectName` |
|
|
488
|
+
| `homedir` | `cmd.projects[name].homedir` or `os.homedir() + '/.' + projectName` |
|
|
489
|
+
| `bundlesPath` | `cmd.projects[name].bundles_path` or `homedir + '/bundles'` |
|
|
490
|
+
| `cachePath` | `homedir + '/cache'` |
|
|
491
|
+
| `projectVersion` | `manifest.version` from `projectPath/manifest.json` |
|
|
492
|
+
| `projectVersionMajor` | `manifest.version.split('.')[0]` |
|
|
493
|
+
| `env` | `cmd.projects[name].def_env` |
|
|
494
|
+
| `bundle` | bundle argument |
|
|
495
|
+
| `version` | `GINA_VERSION` |
|
|
496
|
+
|
|
497
|
+
**Error message format:** When a key is missing, `context.js` logs `[Whisper Error]: The key ${varName} was not found`. If you see `{varName}` (without `$`) in logs, the error message itself has a formatting bug — report it and fix `context.js` line 743.
|
|
498
|
+
|
|
499
|
+
**Syntax migration note:** The old `{variable}` (without `$`) placeholder syntax is no longer supported as of a breaking change in `0.1.8`. Any template file still using `{variable}` will silently pass through substitution without replacement. Always use `${variable}`.
|
|
500
|
+
|
|
501
|
+
---
|
|
502
|
+
|
|
503
|
+
## Known Anti-Patterns
|
|
504
|
+
|
|
505
|
+
| Anti-pattern | Location | Risk | Roadmap item |
|
|
506
|
+
| --- | --- | --- | --- |
|
|
507
|
+
| Shared `local` closure on singleton controller | `controller.js` | Data corruption under concurrency | #M1 |
|
|
508
|
+
| `_arguments` buffer persists across concurrent calls | `entity.js` | Stale null results | #M2 |
|
|
509
|
+
| Error-as-value from `_.prototype.mkdirSync()` | `helpers/path.js`, ~25 call sites | Silent failures | — |
|
|
510
|
+
| Implicit globals injected by `gna.js` | Everywhere | Not statically analysable | #M8 |
|
|
511
|
+
| `typeof(x)` with parentheses | Everywhere | Style inconsistency | — |
|
|
512
|
+
| `"use strict"` absent from ~60% of files | Everywhere | Sloppy mode bugs | #M9 |
|
|
513
|
+
| `eval()` in install script | `script/pre_install.js:222` | Low-risk but code smell | — |
|
|
514
|
+
| Circular dep `utils/helper ↔ lib/logger` | `lib/index.js:32` | Import order fragility | — |
|
|
515
|
+
| Commented-out code preserved in large blocks | `context.js`, `controller.render-json.js` | Dead code maintenance burden | — |
|
|
516
|
+
| Incomplete `reps` dict in `getCoreEnv` | `lib/cmd/helper.js` | whisper silently leaves `${placeholder}` unresolved | — |
|
|
517
|
+
|
|
518
|
+
---
|
|
519
|
+
|
|
520
|
+
## Unit Tests — `node:test` Async Patterns
|
|
521
|
+
|
|
522
|
+
**Framework:** `node:test` (built-in, used throughout `test/`)
|
|
523
|
+
|
|
524
|
+
### Async tests must return a Promise or use `async function`
|
|
525
|
+
|
|
526
|
+
`node:test` does **not** support the Mocha-style `done` callback. If you write:
|
|
527
|
+
|
|
528
|
+
```js
|
|
529
|
+
it('name', function(_, done) {
|
|
530
|
+
somePromise.then(function(val) {
|
|
531
|
+
assert.equal(val, 'expected');
|
|
532
|
+
done(); // ← done is undefined — this throws, but AFTER the test passes
|
|
533
|
+
});
|
|
534
|
+
// function returns undefined → test is marked passing immediately
|
|
535
|
+
});
|
|
536
|
+
```
|
|
537
|
+
|
|
538
|
+
The test appears to pass without executing the assertion. The `.then()` callback runs asynchronously after `node:test` has already closed the test. The `done()` call throws silently. **This is a silent false positive.**
|
|
539
|
+
|
|
540
|
+
**Correct patterns:**
|
|
541
|
+
|
|
542
|
+
```js
|
|
543
|
+
// Option A — async function (preferred)
|
|
544
|
+
it('name', async function() {
|
|
545
|
+
var val = await somePromise;
|
|
546
|
+
assert.equal(val, 'expected');
|
|
547
|
+
});
|
|
548
|
+
|
|
549
|
+
// Option B — return the Promise
|
|
550
|
+
it('name', function() {
|
|
551
|
+
return somePromise.then(function(val) {
|
|
552
|
+
assert.equal(val, 'expected');
|
|
553
|
+
});
|
|
554
|
+
});
|
|
555
|
+
|
|
556
|
+
// Option C — assert.rejects for rejection tests
|
|
557
|
+
it('name', async function() {
|
|
558
|
+
await assert.rejects(somePromise, expectedError);
|
|
559
|
+
});
|
|
560
|
+
```
|
|
561
|
+
|
|
562
|
+
**Rule**
|
|
563
|
+
|
|
564
|
+
> Every async `it()` block must either be declared `async` or explicitly `return` a Promise. Any test that calls an async API without doing either will silently pass without testing anything.
|