From e628afa6d6633d9dba34fe81f1e7a12d30f8120e Mon Sep 17 00:00:00 2001 From: Dariusz Filipiak Date: Thu, 3 Oct 2024 09:34:24 +0200 Subject: [PATCH] refactor: firedev into taon + new deps taon --- .vscode/settings.json | 125 ++- CHANGELOG.md | 4 + TODO.md | 45 + bin/taon | 0 bin/taon-debug | 0 bin/taon-debug-brk | 0 package.json | 10 +- projects/container-v16/package.json | 92 +- .../.vscode/extensions.json | 7 - .../firedev-vscode-ext/.vscode/settings.json | 106 -- .../.editorconfig | 0 .../.eslintrc.json | 0 .../.gitignore | 6 +- .../.npmignore | 0 .../.npmrc | 0 .../.prettierignore | 0 .../.prettierrc | 0 .../taon-vscode-ext/.vscode/extensions.json | 75 ++ .../taon-vscode-ext/.vscode/settings.json | 140 +++ .../CHANGELOG.md | 0 .../LICENSE.txt | 0 .../README.md | 0 .../environment.js | 0 .../linked-projects.json | 0 .../logo-128.png | Bin .../menu.png | Bin .../package.json | 0 .../src/config.ts | 0 .../src/constants.ts | 0 .../src/test/extension.test.ts | 0 .../src/test/index.ts | 0 .../taon.jsonc} | 2 +- .../tsconfig.json | 0 .../tslint.json | 0 .../{firedev.jsonc => taon.jsonc} | 2 +- projects/container-v18/.gitignore | 4 +- projects/container-v18/.prettierignore | 3 +- .../container-v18/examples-v18/.gitignore | 4 +- .../examples-v18/circural-deps-ctx/.gitignore | 4 +- .../circural-deps-ctx/.prettierignore | 3 +- .../circural-deps-ctx/package.json | 32 +- .../circural-deps-ctx/src/app.context.ts | 4 +- .../examples-v18/circural-deps-ctx/src/app.ts | 4 +- .../src/lib/shared/groups/group.context.ts | 4 +- .../src/lib/shared/groups/group.controller.ts | 6 +- .../src/lib/shared/groups/group.ts | 10 +- .../src/lib/shared/session/sesison.ts | 10 +- .../lib/shared/session/session.controller.ts | 8 +- .../src/lib/shared/shared.context.ts | 2 +- .../src/lib/shared/user/user.controller.ts | 6 +- .../src/lib/shared/user/user.ts | 16 +- .../examples-v18/crud/.gitignore | 4 +- .../examples-v18/crud/.prettierignore | 3 +- .../examples-v18/crud/package.json | 32 +- .../examples-v18/crud/src/app.ts | 20 +- .../electron-remote-service/.gitignore | 4 +- .../electron-remote-service/.prettierignore | 3 +- .../electron-remote-service/package.json | 16 +- .../electron-remote-service/src/app.ts | 18 +- .../examples-v18/inject-tests/.gitignore | 4 +- .../examples-v18/inject-tests/.prettierignore | 3 +- .../examples-v18/inject-tests/package.json | 32 +- .../inject-tests/src/app.context.ts | 4 +- .../examples-v18/inject-tests/src/app.ts | 4 +- .../src/lib/shared/admin/admin.controller.ts | 4 +- .../src/lib/shared/admin/admin.ts | 6 +- .../src/lib/shared/session/sesison.ts | 10 +- .../lib/shared/session/session.controller.ts | 8 +- .../src/lib/shared/shared.context.ts | 2 +- .../src/lib/shared/user/user.controller.ts | 6 +- .../src/lib/shared/user/user.repository.ts | 6 +- .../inject-tests/src/lib/shared/user/user.ts | 16 +- .../package.json | 16 +- .../container-v18/examples-v18/package.json | 18 +- .../realtime-subscribers/.gitignore | 4 +- .../realtime-subscribers/.prettierignore | 3 +- .../realtime-subscribers/package.json | 32 +- .../realtime-subscribers/src/app.ts | 20 +- .../examples-v18/single-file/.gitignore | 4 +- .../examples-v18/single-file/.prettierignore | 3 +- .../examples-v18/single-file/package.json | 16 +- .../examples-v18/single-file/src/app.ts | 18 +- .../examples-v18/subscriber-inject/.gitignore | 4 +- .../subscriber-inject/.prettierignore | 3 +- .../subscriber-inject/package.json | 32 +- .../subscriber-inject/src/app.context.ts | 4 +- .../examples-v18/subscriber-inject/src/app.ts | 4 +- .../src/app/user-api.service.ts | 6 +- .../src/app/user.controller.ts | 6 +- .../src/app/user.subscriber.ts | 6 +- .../subscriber-inject/src/app/user.ts | 8 +- .../app-extended/my-entity/app.html | 0 .../app-extended/my-entity/app.scss | 0 .../app-extended/my-entity/app.ts | 10 +- .../my-entity/my-entity.container.html | 0 .../my-entity/my-entity.container.module.ts | 0 .../my-entity/my-entity.container.scss | 0 .../my-entity/my-entity.container.ts | 3 +- .../my-entity/my-entity.component.html | 0 .../my-entity/my-entity.component.scss | 0 .../my-entity/my-entity.component.ts | 5 +- .../my-entity/my-entity.module.ts | 0 .../my-entity/my-entity.component.html | 0 .../my-entity/my-entity.component.scss | 0 .../my-entity/my-entity.component.ts | 19 +- .../my-entity/my-entity.module.ts | 0 .../my-entity/my-entity.component.html | 0 .../my-entity/my-entity.component.scss | 0 .../my-entity/my-entity.component.ts | 21 + .../my-entity/my-entity.component.html | 0 .../my-entity/my-entity.component.scss | 0 .../my-entity/my-entity.component.ts | 19 +- .../my-entity/my-entity.formly-field.ts | 0 .../my-entity/my-entity.module.ts | 0 .../my-entity/actions/my-entity.actions.ts | 0 .../my-entity/components/README.md | 0 .../my-entity/effects/my-entity.effects.ts | 0 .../my-entity/my-entity.container.html | 0 .../my-entity/my-entity.container.module.ts | 3 +- .../my-entity/my-entity.container.scss | 0 .../my-entity/my-entity.container.ts | 25 +- .../my-entity/my-entity.models.ts | 3 +- .../my-entity/reducers/my-entity.reducers.ts | 0 .../selectors/my-entity.selectors.ts | 0 .../my-entity/services/my-entity.service.ts | 0 .../my-entity/actions/my-entity.actions.ts | 14 + .../my-entity/components/README.md | 0 .../my-entity/effects/my-entity.effects.ts | 23 + .../my-entity/my-entity.container.html | 0 .../my-entity/my-entity.container.module.ts | 0 .../my-entity/my-entity.container.scss | 0 .../my-entity/my-entity.container.ts | 17 +- .../my-entity/my-entity.models.ts | 3 +- .../my-entity/reducers/my-entity.reducers.ts | 2 - .../selectors/my-entity.selectors.ts | 3 - .../my-entity/services/my-entity.service.ts | 3 +- .../my-entity/my-entity-backend.test.ts | 0 .../my-entity/my-entity.component.scss | 0 .../my-entity/my-entity.constants.ts | 0 .../my-entity/my-entity.db-query-models.ts | 2 +- .../my-entity/my-entity.helpers.ts | 0 .../my-entity/my-entity.subscriber.ts | 6 +- .../my-entity/my-entity-api.service.ts | 4 +- .../my-entity/my-entity-list.component.ts | 0 .../my-entity/my-entity.component.ts | 23 +- .../my-entity/my-entity.context.ts | 4 +- .../my-entity/my-entity.controller.ts | 10 +- .../my-entity/my-entity.defaults-values.ts | 0 .../taon-minimal}/my-entity/my-entity.ts | 8 +- .../my-entity/index.ts | 4 - .../my-entity/index.ts | 4 - .../dummy-angular-module/my-entity/index.ts | 2 - .../my-entity/index.ts | 1 - .../my-entity/my-entity.component.ts | 17 - .../my-entity/index.ts | 4 - .../firedev-minimal/my-entity/index.ts | 9 - .../formly-angular-module/my-entity/index.ts | 4 - .../my-entity/index.ts | 4 - .../my-entity/actions/my-entity.actions.ts | 26 - .../my-entity/effects/my-entity.effects.ts | 20 - .../my-entity/index.ts | 4 - .../isomorphic-lib-v18/.gitignore | 4 +- .../isomorphic-lib-v18/.prettierignore | 3 +- .../isomorphic-lib-v18/.vscode/settings.json | 2 +- .../isomorphic-lib-v18/bin/start-cli.js | 4 +- .../docs-config.schema.json | 92 ++ .../isomorphic-lib-v18/package.json | 16 +- projects/container-v18/package.json | 4 + .../.vscode/extensions.json | 7 - .../firedev-vscode-ext/.vscode/settings.json | 106 -- .../plugins-v18/firedev-vscode-ext/README.md | 8 - .../plugins-v18/firedev-vscode-ext/menu.png | Bin 135546 -> 0 bytes .../firedev-vscode-ext/tslint.json | 100 -- .../.editorconfig | 0 .../.eslintrc.json | 0 .../.gitignore | 14 +- .../.npmignore | 0 .../.npmrc | 0 .../.prettierignore | 2 +- .../.prettierrc | 0 .../taon-vscode-ext/.vscode/extensions.json | 75 ++ .../taon-vscode-ext/.vscode/settings.json | 154 +++ .../CHANGELOG.md | 0 .../LICENSE.txt | 0 .../plugins-v18/taon-vscode-ext/README.md | 8 + .../environment.js | 0 .../linked-projects.json | 0 .../logo-128.png | Bin .../package.json | 46 +- .../plugins-v18/taon-vscode-ext/src/config.ts | 526 ++++++++++ .../taon-vscode-ext/src/constants.ts | 4 + .../src/test/extension.test.ts | 22 + .../taon-vscode-ext/src/test/index.ts | 22 + .../taon.jsonc} | 2 +- .../tsconfig.json | 0 projects/container-v18/taon | 10 + projects/container-v18/taon.jsonc | 21 +- .../vscode-ext-v18/.editorconfig | 5 + .../vscode-ext-v18/.eslintrc.json | 92 ++ .../container-v18/vscode-ext-v18/.gitignore | 12 +- .../container-v18/vscode-ext-v18/.npmignore | 9 +- .../vscode-ext-v18/.prettierignore | 28 + .../container-v18/vscode-ext-v18/.prettierrc | 13 + .../vscode-ext-v18/.vscode/extensions.json | 78 +- .../vscode-ext-v18/.vscode/launch.json | 27 +- .../vscode-ext-v18/.vscode/settings.json | 156 ++- .../container-v18/vscode-ext-v18/CHANGELOG.md | 2 +- .../vscode-ext-v18/linked-projects.json | 3 + .../container-v18/vscode-ext-v18/menu.png | Bin 135546 -> 0 bytes .../container-v18/vscode-ext-v18/package.json | 22 +- .../vscode-ext-v18/src/config.ts | 31 +- .../vscode-ext-v18/src/execute-command.ts | 975 +++++++++++------- .../vscode-ext-v18/src/extension.ts | 17 +- .../vscode-ext-v18/src/helpers.ts | 65 +- .../vscode-ext-v18/src/models.ts | 53 +- .../vscode-ext-v18/src/progress-output.ts | 23 +- .../{firedev.jsonc => taon.jsonc} | 2 +- .../container-v18/vscode-ext-v18/tslint.json | 142 --- projects/container/package.json | 2 +- src/assets/shared/shared_folder_info.txt | 2 +- taon | 22 + 221 files changed, 2837 insertions(+), 1671 deletions(-) create mode 100644 CHANGELOG.md create mode 100644 TODO.md mode change 100644 => 100755 bin/taon mode change 100644 => 100755 bin/taon-debug mode change 100644 => 100755 bin/taon-debug-brk delete mode 100644 projects/container-v16/plugins-v16/firedev-vscode-ext/.vscode/extensions.json delete mode 100644 projects/container-v16/plugins-v16/firedev-vscode-ext/.vscode/settings.json rename projects/container-v16/plugins-v16/{firedev-vscode-ext => taon-vscode-ext}/.editorconfig (100%) rename projects/container-v16/plugins-v16/{firedev-vscode-ext => taon-vscode-ext}/.eslintrc.json (100%) rename projects/container-v16/plugins-v16/{firedev-vscode-ext => taon-vscode-ext}/.gitignore (92%) rename projects/container-v16/plugins-v16/{firedev-vscode-ext => taon-vscode-ext}/.npmignore (100%) rename projects/container-v16/plugins-v16/{firedev-vscode-ext => taon-vscode-ext}/.npmrc (100%) rename projects/container-v16/plugins-v16/{firedev-vscode-ext => taon-vscode-ext}/.prettierignore (100%) rename projects/container-v16/plugins-v16/{firedev-vscode-ext => taon-vscode-ext}/.prettierrc (100%) create mode 100644 projects/container-v16/plugins-v16/taon-vscode-ext/.vscode/extensions.json create mode 100644 projects/container-v16/plugins-v16/taon-vscode-ext/.vscode/settings.json rename projects/container-v16/plugins-v16/{firedev-vscode-ext => taon-vscode-ext}/CHANGELOG.md (100%) rename projects/container-v16/plugins-v16/{firedev-vscode-ext => taon-vscode-ext}/LICENSE.txt (100%) rename projects/container-v16/plugins-v16/{firedev-vscode-ext => taon-vscode-ext}/README.md (100%) rename projects/container-v16/plugins-v16/{firedev-vscode-ext => taon-vscode-ext}/environment.js (100%) rename projects/container-v16/plugins-v16/{firedev-vscode-ext => taon-vscode-ext}/linked-projects.json (100%) rename projects/container-v16/plugins-v16/{firedev-vscode-ext => taon-vscode-ext}/logo-128.png (100%) rename projects/container-v16/plugins-v16/{firedev-vscode-ext => taon-vscode-ext}/menu.png (100%) rename projects/container-v16/plugins-v16/{firedev-vscode-ext => taon-vscode-ext}/package.json (100%) rename projects/container-v16/plugins-v16/{firedev-vscode-ext => taon-vscode-ext}/src/config.ts (100%) rename projects/container-v16/plugins-v16/{firedev-vscode-ext => taon-vscode-ext}/src/constants.ts (100%) rename projects/container-v16/plugins-v16/{firedev-vscode-ext => taon-vscode-ext}/src/test/extension.test.ts (100%) rename projects/container-v16/plugins-v16/{firedev-vscode-ext => taon-vscode-ext}/src/test/index.ts (100%) rename projects/container-v16/plugins-v16/{firedev-vscode-ext/firedev.jsonc => taon-vscode-ext/taon.jsonc} (99%) rename projects/container-v16/plugins-v16/{firedev-vscode-ext => taon-vscode-ext}/tsconfig.json (100%) rename projects/container-v16/plugins-v16/{firedev-vscode-ext => taon-vscode-ext}/tslint.json (100%) rename projects/container-v16/vscode-ext-v16/{firedev.jsonc => taon.jsonc} (99%) rename projects/container-v18/{gen-examples => gen-examples-v18}/app-extended/my-entity/app.html (100%) rename projects/container-v18/{gen-examples => gen-examples-v18}/app-extended/my-entity/app.scss (100%) rename projects/container-v18/{gen-examples => gen-examples-v18}/app-extended/my-entity/app.ts (89%) rename projects/container-v18/{gen-examples => gen-examples-v18}/dummy-angular-lazy-module-container/my-entity/my-entity.container.html (100%) rename projects/container-v18/{gen-examples => gen-examples-v18}/dummy-angular-lazy-module-container/my-entity/my-entity.container.module.ts (100%) rename projects/container-v18/{gen-examples => gen-examples-v18}/dummy-angular-lazy-module-container/my-entity/my-entity.container.scss (100%) rename projects/container-v18/{gen-examples => gen-examples-v18}/dummy-angular-lazy-module-container/my-entity/my-entity.container.ts (81%) rename projects/container-v18/{gen-examples => gen-examples-v18}/dummy-angular-lazy-module/my-entity/my-entity.component.html (100%) rename projects/container-v18/{gen-examples => gen-examples-v18}/dummy-angular-lazy-module/my-entity/my-entity.component.scss (100%) rename projects/container-v18/{gen-examples => gen-examples-v18}/dummy-angular-lazy-module/my-entity/my-entity.component.ts (64%) rename projects/container-v18/{gen-examples => gen-examples-v18}/dummy-angular-lazy-module/my-entity/my-entity.module.ts (100%) rename projects/container-v18/{gen-examples => gen-examples-v18}/dummy-angular-module/my-entity/my-entity.component.html (100%) rename projects/container-v18/{gen-examples => gen-examples-v18}/dummy-angular-module/my-entity/my-entity.component.scss (100%) rename projects/container-v18/{gen-examples => gen-examples-v18}/dummy-angular-module/my-entity/my-entity.component.ts (57%) rename projects/container-v18/{gen-examples => gen-examples-v18}/dummy-angular-module/my-entity/my-entity.module.ts (100%) rename projects/container-v18/{gen-examples => gen-examples-v18}/dummy-angular-standalone-component/my-entity/my-entity.component.html (100%) rename projects/container-v18/{gen-examples => gen-examples-v18}/dummy-angular-standalone-component/my-entity/my-entity.component.scss (100%) create mode 100644 projects/container-v18/gen-examples-v18/dummy-angular-standalone-component/my-entity/my-entity.component.ts rename projects/container-v18/{gen-examples => gen-examples-v18}/formly-angular-module/my-entity/my-entity.component.html (100%) rename projects/container-v18/{gen-examples/firedev-minimal-to-full => gen-examples-v18/formly-angular-module}/my-entity/my-entity.component.scss (100%) rename projects/container-v18/{gen-examples => gen-examples-v18}/formly-angular-module/my-entity/my-entity.component.ts (58%) rename projects/container-v18/{gen-examples => gen-examples-v18}/formly-angular-module/my-entity/my-entity.formly-field.ts (100%) rename projects/container-v18/{gen-examples => gen-examples-v18}/formly-angular-module/my-entity/my-entity.module.ts (100%) rename projects/container-v18/{gen-examples => gen-examples-v18}/ngrx-feature-container-module-for-lazy-routing/my-entity/actions/my-entity.actions.ts (100%) rename projects/container-v18/{gen-examples => gen-examples-v18}/ngrx-feature-container-module-for-lazy-routing/my-entity/components/README.md (100%) rename projects/container-v18/{gen-examples => gen-examples-v18}/ngrx-feature-container-module-for-lazy-routing/my-entity/effects/my-entity.effects.ts (100%) rename projects/container-v18/{gen-examples => gen-examples-v18}/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.container.html (100%) rename projects/container-v18/{gen-examples => gen-examples-v18}/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.container.module.ts (96%) rename projects/container-v18/{gen-examples => gen-examples-v18}/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.container.scss (100%) rename projects/container-v18/{gen-examples => gen-examples-v18}/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.container.ts (61%) rename projects/container-v18/{gen-examples => gen-examples-v18}/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.models.ts (77%) rename projects/container-v18/{gen-examples => gen-examples-v18}/ngrx-feature-container-module-for-lazy-routing/my-entity/reducers/my-entity.reducers.ts (100%) rename projects/container-v18/{gen-examples => gen-examples-v18}/ngrx-feature-container-module-for-lazy-routing/my-entity/selectors/my-entity.selectors.ts (100%) rename projects/container-v18/{gen-examples => gen-examples-v18}/ngrx-feature-container-module-for-lazy-routing/my-entity/services/my-entity.service.ts (100%) create mode 100644 projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/actions/my-entity.actions.ts rename projects/container-v18/{gen-examples => gen-examples-v18}/ngrx-feature-container-module/my-entity/components/README.md (100%) create mode 100644 projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/effects/my-entity.effects.ts rename projects/container-v18/{gen-examples => gen-examples-v18}/ngrx-feature-container-module/my-entity/my-entity.container.html (100%) rename projects/container-v18/{gen-examples => gen-examples-v18}/ngrx-feature-container-module/my-entity/my-entity.container.module.ts (100%) rename projects/container-v18/{gen-examples => gen-examples-v18}/ngrx-feature-container-module/my-entity/my-entity.container.scss (100%) rename projects/container-v18/{gen-examples => gen-examples-v18}/ngrx-feature-container-module/my-entity/my-entity.container.ts (66%) rename projects/container-v18/{gen-examples => gen-examples-v18}/ngrx-feature-container-module/my-entity/my-entity.models.ts (77%) rename projects/container-v18/{gen-examples => gen-examples-v18}/ngrx-feature-container-module/my-entity/reducers/my-entity.reducers.ts (93%) rename projects/container-v18/{gen-examples => gen-examples-v18}/ngrx-feature-container-module/my-entity/selectors/my-entity.selectors.ts (93%) rename projects/container-v18/{gen-examples => gen-examples-v18}/ngrx-feature-container-module/my-entity/services/my-entity.service.ts (77%) rename projects/container-v18/{gen-examples/firedev-minimal-to-full => gen-examples-v18/taon-minimal-to-full}/my-entity/my-entity-backend.test.ts (100%) rename projects/container-v18/{gen-examples/formly-angular-module => gen-examples-v18/taon-minimal-to-full}/my-entity/my-entity.component.scss (100%) rename projects/container-v18/{gen-examples/firedev-minimal-to-full => gen-examples-v18/taon-minimal-to-full}/my-entity/my-entity.constants.ts (100%) rename projects/container-v18/{gen-examples/firedev-minimal-to-full => gen-examples-v18/taon-minimal-to-full}/my-entity/my-entity.db-query-models.ts (97%) rename projects/container-v18/{gen-examples/firedev-minimal-to-full => gen-examples-v18/taon-minimal-to-full}/my-entity/my-entity.helpers.ts (100%) rename projects/container-v18/{gen-examples/firedev-minimal-to-full => gen-examples-v18/taon-minimal-to-full}/my-entity/my-entity.subscriber.ts (64%) rename projects/container-v18/{gen-examples/firedev-minimal => gen-examples-v18/taon-minimal}/my-entity/my-entity-api.service.ts (76%) rename projects/container-v18/{gen-examples/firedev-minimal => gen-examples-v18/taon-minimal}/my-entity/my-entity-list.component.ts (100%) rename projects/container-v18/{gen-examples/firedev-minimal => gen-examples-v18/taon-minimal}/my-entity/my-entity.component.ts (59%) rename projects/container-v18/{gen-examples/firedev-minimal => gen-examples-v18/taon-minimal}/my-entity/my-entity.context.ts (71%) rename projects/container-v18/{gen-examples/firedev-minimal => gen-examples-v18/taon-minimal}/my-entity/my-entity.controller.ts (76%) rename projects/container-v18/{gen-examples/firedev-minimal => gen-examples-v18/taon-minimal}/my-entity/my-entity.defaults-values.ts (100%) rename projects/container-v18/{gen-examples/firedev-minimal => gen-examples-v18/taon-minimal}/my-entity/my-entity.ts (69%) delete mode 100644 projects/container-v18/gen-examples/dummy-angular-lazy-module-container/my-entity/index.ts delete mode 100644 projects/container-v18/gen-examples/dummy-angular-lazy-module/my-entity/index.ts delete mode 100644 projects/container-v18/gen-examples/dummy-angular-module/my-entity/index.ts delete mode 100644 projects/container-v18/gen-examples/dummy-angular-standalone-component/my-entity/index.ts delete mode 100644 projects/container-v18/gen-examples/dummy-angular-standalone-component/my-entity/my-entity.component.ts delete mode 100644 projects/container-v18/gen-examples/firedev-minimal-to-full/my-entity/index.ts delete mode 100644 projects/container-v18/gen-examples/firedev-minimal/my-entity/index.ts delete mode 100644 projects/container-v18/gen-examples/formly-angular-module/my-entity/index.ts delete mode 100644 projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/index.ts delete mode 100644 projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/actions/my-entity.actions.ts delete mode 100644 projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/effects/my-entity.effects.ts delete mode 100644 projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/index.ts create mode 100644 projects/container-v18/isomorphic-lib-v18/docs-config.schema.json delete mode 100644 projects/container-v18/plugins-v18/firedev-vscode-ext/.vscode/extensions.json delete mode 100644 projects/container-v18/plugins-v18/firedev-vscode-ext/.vscode/settings.json delete mode 100644 projects/container-v18/plugins-v18/firedev-vscode-ext/README.md delete mode 100644 projects/container-v18/plugins-v18/firedev-vscode-ext/menu.png delete mode 100644 projects/container-v18/plugins-v18/firedev-vscode-ext/tslint.json rename projects/container-v18/plugins-v18/{firedev-vscode-ext => taon-vscode-ext}/.editorconfig (100%) rename projects/container-v18/plugins-v18/{firedev-vscode-ext => taon-vscode-ext}/.eslintrc.json (100%) rename projects/container-v18/plugins-v18/{firedev-vscode-ext => taon-vscode-ext}/.gitignore (89%) rename projects/container-v18/plugins-v18/{firedev-vscode-ext => taon-vscode-ext}/.npmignore (100%) rename projects/container-v18/plugins-v18/{firedev-vscode-ext => taon-vscode-ext}/.npmrc (100%) rename projects/container-v18/plugins-v18/{firedev-vscode-ext => taon-vscode-ext}/.prettierignore (84%) rename projects/container-v18/plugins-v18/{firedev-vscode-ext => taon-vscode-ext}/.prettierrc (100%) create mode 100644 projects/container-v18/plugins-v18/taon-vscode-ext/.vscode/extensions.json create mode 100644 projects/container-v18/plugins-v18/taon-vscode-ext/.vscode/settings.json rename projects/container-v18/plugins-v18/{firedev-vscode-ext => taon-vscode-ext}/CHANGELOG.md (100%) rename projects/container-v18/plugins-v18/{firedev-vscode-ext => taon-vscode-ext}/LICENSE.txt (100%) create mode 100644 projects/container-v18/plugins-v18/taon-vscode-ext/README.md rename projects/container-v18/plugins-v18/{firedev-vscode-ext => taon-vscode-ext}/environment.js (100%) rename projects/container-v18/plugins-v18/{firedev-vscode-ext => taon-vscode-ext}/linked-projects.json (100%) rename projects/container-v18/plugins-v18/{firedev-vscode-ext => taon-vscode-ext}/logo-128.png (100%) rename projects/container-v18/plugins-v18/{firedev-vscode-ext => taon-vscode-ext}/package.json (92%) create mode 100644 projects/container-v18/plugins-v18/taon-vscode-ext/src/config.ts create mode 100644 projects/container-v18/plugins-v18/taon-vscode-ext/src/constants.ts create mode 100644 projects/container-v18/plugins-v18/taon-vscode-ext/src/test/extension.test.ts create mode 100644 projects/container-v18/plugins-v18/taon-vscode-ext/src/test/index.ts rename projects/container-v18/plugins-v18/{firedev-vscode-ext/firedev.jsonc => taon-vscode-ext/taon.jsonc} (99%) rename projects/container-v18/plugins-v18/{firedev-vscode-ext => taon-vscode-ext}/tsconfig.json (100%) create mode 100644 projects/container-v18/taon create mode 100644 projects/container-v18/vscode-ext-v18/.eslintrc.json create mode 100644 projects/container-v18/vscode-ext-v18/.prettierignore create mode 100644 projects/container-v18/vscode-ext-v18/.prettierrc create mode 100644 projects/container-v18/vscode-ext-v18/linked-projects.json delete mode 100644 projects/container-v18/vscode-ext-v18/menu.png rename projects/container-v18/vscode-ext-v18/{firedev.jsonc => taon.jsonc} (99%) delete mode 100644 projects/container-v18/vscode-ext-v18/tslint.json create mode 100644 taon diff --git a/.vscode/settings.json b/.vscode/settings.json index 9da43885..c09a279d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,52 +2,65 @@ "files.exclude": { "**/*____ORIGINAL____.ts": true, "_changelog": true, - "tsconfig.backend.dist.json": true, - "tsconfig.backend.dist.json.filetemplate": true, "webpack.backend-dist-build.js": true, - "node_modules": true, - "tmp*": true, - "dist*": true, - "bundle*": true, - "browser": true, - "browser*": true, - "websql": true, - "websql*": true, - "module*": true, - "backup": true, - "module": true, - "www": true, - "Thumbs.db": true, - ".DS_Store": true, + "**/node_modules": true, + "**/tmp*": true, + "**/dist*": true, + "**/bundle*": true, + "**/browser": true, + "**/browser*": true, + "**/websql": true, + "**/websql*": true, + "**/module*": true, + "**/backup": true, + "**/module": true, + "**/www": true, + "**/Thumbs.db": true, "**/.DS_Store": true, - "npm-debug.log*": true, - ".sass-cache": true, - ".sourcemaps": true, - "tsconfig.isomorphic.json": true, - "tsconfig.isomorphic-flat-dist.json": true, - "tsconfig.browser.json": true, - "tsconfig.json": true, - "index.js": true, - "index.d.ts": true, - "index.js.map": true, - "webpack.config.js": true, - "run.js": true, - "run-org.js": true, - "tsconfig.isomorphic.json.filetemplate": true, - "tsconfig.isomorphic-flat-dist.json.filetemplate": true, - "tsconfig.browser.json.filetemplate": true, - "tsconfig.json.filetemplate": true, - ".gitignore": true, - ".npmignore": true, - ".babelrc": true, - ".npmrc": true, - ".eslintrc.json": true, - ".prettierignore": true, - ".prettierrc": true, - ".editorconfig": true, - "devDependencies.json": true, - "package.json": true, - "logo.svg": true + "**/**/.DS_Store": true, + "**/npm-debug.log*": true, + "**/.sass-cache": true, + "**/.sourcemaps": true, + "**/tsconfig.isomorphic.json": true, + "**/tsconfig.isomorphic-flat-dist.json": true, + "**/tsconfig.browser.json": true, + "**/tsconfig.json": true, + "**/tsconfig.backend.dist.json": true, + "**/index.js": true, + "**/index.d.ts": true, + "**/index.js.map": true, + "**/webpack.config.js": true, + "**/webpack.backend-dist-build.js": true, + "**/run.js": true, + "**/run-org.js": true, + "**/tsconfig.isomorphic.json.filetemplate": true, + "**/tsconfig.isomorphic-flat-dist.json.filetemplate": true, + "**/tsconfig.browser.json.filetemplate": true, + "**/tsconfig.json.filetemplate": true, + "**/tsconfig.backend.dist.json.filetemplate": true, + "**/.gitignore": true, + "**/.npmignore": true, + "**/.babelrc": true, + "**/.npmrc": true, + "**/.eslintrc.json": true, + "**/.prettierignore": true, + "**/.prettierrc": true, + "**/.editorconfig": true, + "**/devDependencies.json": true, + "**/package.json": true, + "**/logo.svg": true, + "**/*.filetemplate": true, + "**/tsconfig.*": true, + "**/tslint.*": true, + "**/recent.json": true, + "**/angular.json": true, + "**/webpack*": true, + "**/docs/**/*.*": true, + "**/run-*": true, + "**/run.*": true, + "**/package-lock.json": true, + "**/protractor.conf.js": true, + "**/karma.conf.js": true }, "workbench.colorCustomizations": { "activityBar.background": "#e66a54", @@ -69,8 +82,22 @@ "projects": true, "bin": true, "local_release": true, - "**/package-lock.json": true, - "package-lock.json": true + "node_modules": true, + ".build": true, + ".vscode": true, + "browser": true, + "dist": true, + "package-lock.json": true, + "**/docs": true, + "**/projects": true, + "**/bin": true, + "**/local_release": true, + "**/node_modules": true, + "**/.build": true, + "**/.vscode": true, + "**/browser": true, + "**/dist": true, + "**/package-lock.json": true }, "[typescriptreact]": { "editor.defaultFormatter": "esbenp.prettier-vscode", @@ -110,5 +137,9 @@ "editor.formatOnSave": false }, "prettier.endOfLine": "auto", - "prettier.prettierPath": "./node_modules/prettier" + "prettier.prettierPath": "./node_modules/prettier", + "search.useIgnoreFiles": false, + "search.include": [ + "**/src/**" + ] } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..e7b61ab2 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,4 @@ +## Changes v18.1.0 + +- [x] firedev -> taon rebranding +- [x] angular 18 support diff --git a/TODO.md b/TODO.md new file mode 100644 index 00000000..5e083daa --- /dev/null +++ b/TODO.md @@ -0,0 +1,45 @@ +## Taon v20.X.X + +- [ ] angular v20 support +- [ ] 2FA authentication +- [ ] simple online payments + +## Taon v19.X.X + +- [ ] angular v19 support +- [ ] 2FA authentication +- [ ] simple online payments +- [ ] fast/stable packeges installer solution +- [ ] organization build based on standalone (single process with multiple entrypoints build) +- [ ] organization multi window electron app +- [ ] cloud build: electron, cli, lib, vscode + +## Taon v18.X.X (CURRENT VERSION) + +- [X] angular v18 support +- [X] firedev -> taon (rebranding) +- [ ] docs for new framework api +- [ ] docs update for new cli +- [ ] docs examples for better understranding +- [ ] relaltime development FE/BE and BE/BE +- [ ] basic authentication +- [ ] excellent isomorphic development programmer experience +- [ ] simple CD/CI develop/build/deploy process +- [ ] local release electron, cli, vscode ext. +- [ ] script installation for server + +## Taon (Firedev) v17.X.X + +< skipped > + +## Taon (Firedev) v16.X.X + +- [X] angular v16 support +- [X] global packages container isomorphic library build +- [X] normal and websql app build +- [X] release/build/deploy websql or normal app to github pages +- [X] electron app build +- [X] prettier, eslint +- [X] taon git commands +- [X] global sources linked inside import src/ +- [X] auto impors fix from 'isomorphic-lib/lib' to 'isomorphic-lib/src' diff --git a/bin/taon b/bin/taon old mode 100644 new mode 100755 diff --git a/bin/taon-debug b/bin/taon-debug old mode 100644 new mode 100755 diff --git a/bin/taon-debug-brk b/bin/taon-debug-brk old mode 100644 new mode 100755 diff --git a/package.json b/package.json index d93d6896..a0460db4 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "ora": "3.4.0", "socket.io": "4.7.5", "taon-type-sql": "18.0.10", - "tnp": "~18.0.10", + "tnp": "~18.0.11", "tslib": "~2.6.3" }, "license": "MIT", @@ -328,8 +328,8 @@ "sweetalert2": "11.7.32", "systeminformation": "3.45.7", "taon": "^18", - "taon-storage": "18.0.8", - "taon-typeorm": "18.0.8", + "taon-storage": "18.0.9", + "taon-typeorm": "18.0.9", "task.js": "0.1.5", "threads": "1.7.0", "tnp-config": "~18.0.12", @@ -352,7 +352,7 @@ "uuid": "10.0.0", "validator": "13.5.2", "video.js": "8.3.0", - "vpn-split": "~18.0.8", + "vpn-split": "~18.0.9", "vscode": "1.1.37", "wait-on": "7.0.1", "watch": "1.0.2", @@ -368,4 +368,4 @@ "taon-debug": "bin/taon-debug", "taon-debug-brk": "bin/taon-debug-brk" } -} +} \ No newline at end of file diff --git a/projects/container-v16/package.json b/projects/container-v16/package.json index 8b80bb98..13e66df3 100644 --- a/projects/container-v16/package.json +++ b/projects/container-v16/package.json @@ -497,7 +497,7 @@ "any-project-cli": "18.0.6", "app-root-path": "3.0.0", "axios": "1.3.5", - "background-worker-process": "16.100.10", + "background-worker-process": "~16.100.10", "base32": "0.0.7", "bcryptjs": "2.4.3", "body-parser": "1.18.2", @@ -549,12 +549,12 @@ "file-loader": "1.1.5", "file-saver": "2.0.5", "file-type": "18.5.0", - "firedev-crud": "18.0.5", - "firedev-crud-deamon": "18.0.6", - "firedev-ports": "18.0.5", - "firedev-storage": "18.0.5", - "firedev-type-sql": "18.0.6", - "firedev-typeorm": "18.0.5", + "firedev-crud": "~16.444.8", + "firedev-crud-deamon": "~16.444.8", + "firedev-ports": "~16.444.8", + "firedev-storage": "~16.444.5", + "firedev-type-sql": "~16.444.8", + "firedev-typeorm": "~16.444.5", "firedev-ui": "18.0.6", "fkill": "6.1.0", "font-awesome": "4.7.0", @@ -573,11 +573,11 @@ "image-focus": "1.2.1", "immer": "10.0.2", "immutable": "4.3.0", - "incremental-compiler": "18.0.6", + "incremental-compiler": "~16.444.9", "inquirer": "7.3.3", "inquirer-autocomplete-prompt": "1.3.0", "is-elevated": "3.0.0", - "isomorphic-region-loader": "18.0.6", + "isomorphic-region-loader": "~16.444.8", "istanbul-instrumenter-loader": "2.0.0", "jest": "29.5.0", "jest-date-mock": "1.0.8", @@ -588,8 +588,8 @@ "joi": "17.9.2", "jscodeshift": "0.6.3", "json-stringify-safe": "5.0.1", - "json10": "18.0.6", - "json10-writer": "18.0.6", + "json10": "~16.444.8", + "json10-writer": "~16.444.8", "json5": "2.2.1", "json5-writer": "0.2.0", "jszip": "3.10.1", @@ -598,9 +598,9 @@ "localforage": "1.10.0", "lockfile": "1.0.4", "lodash": "4.17.20", - "lodash-walk-object": "18.0.6", + "lodash-walk-object": "~16.444.7", "lowdb": "7.0.1", - "magic-renamer": "18.0.6", + "magic-renamer": "~16.444.7", "material-design-icons": "3.0.1", "method-override": "2.3.10", "minimist": "1.2.0", @@ -611,10 +611,10 @@ "ng-in-viewport": "15.0.2", "ng-lock": "16.0.1", "ng-packagr": "16.0.1", - "ng-talkback": "18.0.5", - "ng2-logger": "18.0.8", + "ng-talkback": "~16.444.1", + "ng2-logger": "~16.444.8", "ng2-pdfjs-viewer": "16.0.4", - "ng2-rest": "18.0.6", + "ng2-rest": "~16.444.7", "ngx-ace-wrapper": "14.0.0", "ngx-editor": "15.3.0", "ngx-highlightjs": "9.0.0", @@ -627,7 +627,7 @@ "ngx-scrolltop": "6.0.0", "ngx-store": "3.1.1", "ngx-typed-js": "2.1.1", - "node-cli-tester": "18.0.5", + "node-cli-tester": "~16.444.1", "node-localstorage": "2.1.6", "node-notifier": "6.0.0", "node-polyfill-webpack-plugin": "2.0.1", @@ -656,7 +656,7 @@ "q": "1.5.1", "rallax.js": "2.0.4", "randomcolor": "0.5.3", - "record-replay-req-res-scenario": "18.0.5", + "record-replay-req-res-scenario": "~16.444.1", "reflect-metadata": "0.1.10", "rimraf": "2.6.2", "rxjs": "~7.8.0", @@ -668,20 +668,21 @@ "socket.io-client": "4.7.5", "sort-package-json": "1.11.0", "sql.js": "1.8.0", - "static-columns": "18.0.7", + "static-columns": "~16.444.3", "string-similarity": "4.0.2", "sudo-block": "3.0.0", "supertest": "6.3.3", "sweetalert2": "11.7.12", "systeminformation": "3.45.7", + "taon": "^16", "task.js": "0.1.5", "threads": "1.7.0", - "tnp-cli": "18.0.5", - "tnp-config": "18.0.8", - "tnp-core": "18.0.30", - "tnp-db": "18.0.6", - "tnp-helpers": "18.0.6", - "tnp-models": "18.0.7", + "tnp-cli": "~16.444.1", + "tnp-config": "~16.444.8", + "tnp-core": "~16.444.9", + "tnp-db": "~16.444.7", + "tnp-helpers": "~16.444.15", + "tnp-models": "~16.444.8", "ts-debug": "1.3.0", "ts-json-schema-generator": "2.1.1", "ts-loader": "2.3.1", @@ -692,13 +693,13 @@ "typedoc": "0.25.13", "typedoc-plugin-markdown": "4.0.3", "typescript": "~5.0.2", - "typescript-class-helpers": "18.0.7", + "typescript-class-helpers": "~16.444.8", "typescript-formatter": "~7.2.2", "underscore": "1.9.1", "uuid": "8.3.2", "validator": "9.2.0", "video.js": "8.3.0", - "vpn-split": "18.0.5", + "vpn-split": "~16.444.1", "vscode": "1.1.37", "wait-on": "7.0.1", "watch": "1.0.2", @@ -706,42 +707,9 @@ "webpack-dev-middleware": "~6.0.2", "webpack-dev-server": "~4.13.2", "yup": "1.1.1", - "zone.js": "~0.13.0", - "firedev": "18.0.9", - "tnp": "18.0.6" - }, - "devDependencies": { - "tnp-core": "18.0.30", - "tnp-config": "18.0.8", - "ng2-logger": "18.0.8", - "typescript-class-helpers": "18.0.7", - "tnp-models": "18.0.7", - "json10-writer": "18.0.6", - "tnp-helpers": "18.0.6", - "incremental-compiler": "18.0.6", - "any-project-cli": "18.0.6", - "firedev-crud-deamon": "18.0.6", - "tnp-db": "18.0.6", - "magic-renamer": "18.0.6", - "isomorphic-region-loader": "18.0.6", - "tnp": "18.0.6", - "lodash-walk-object": "18.0.6", - "json10": "18.0.6", - "ng2-rest": "18.0.6", - "firedev-type-sql": "18.0.6", - "firedev": "18.0.9", - "firedev-crud": "18.0.5", - "firedev-ports": "18.0.5", - "firedev-storage": "18.0.5", - "firedev-typeorm": "18.0.5", - "static-columns": "18.0.7", - "firedev-ui": "18.0.6", - "ng-talkback": "18.0.5", - "node-cli-tester": "18.0.5", - "record-replay-req-res-scenario": "18.0.5", - "tnp-cli": "18.0.5", - "vpn-split": "18.0.5" + "zone.js": "~0.13.0" }, + "devDependencies": {}, "license": "UNLICENSED", "private": true, "name": "container-v16", diff --git a/projects/container-v16/plugins-v16/firedev-vscode-ext/.vscode/extensions.json b/projects/container-v16/plugins-v16/firedev-vscode-ext/.vscode/extensions.json deleted file mode 100644 index ee71911b..00000000 --- a/projects/container-v16/plugins-v16/firedev-vscode-ext/.vscode/extensions.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - // See http://go.microsoft.com/fwlink/?LinkId=827846 - // for the documentation about the extensions.json format - "recommendations": [ - "eg2.tslint" - ] -} \ No newline at end of file diff --git a/projects/container-v16/plugins-v16/firedev-vscode-ext/.vscode/settings.json b/projects/container-v16/plugins-v16/firedev-vscode-ext/.vscode/settings.json deleted file mode 100644 index f785a4ca..00000000 --- a/projects/container-v16/plugins-v16/firedev-vscode-ext/.vscode/settings.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "files.exclude": { - "**/*____ORIGINAL____.ts": true, - "_changelog": true, - "tsconfig.backend.dist.json": true, - "tsconfig.backend.dist.json.filetemplate": true, - "out": true, - "update-proj.js": true, - ".vscodeignore": true, - "*.vsix": true, - "node_modules": true, - "tmp*": true, - "dist*": true, - "bundle*": true, - "browser": true, - "browser*": true, - "websql": true, - "websql*": true, - "module*": true, - "backup": true, - "module": true, - "www": true, - "Thumbs.db": true, - ".DS_Store": true, - "**/.DS_Store": true, - "npm-debug.log*": true, - ".sass-cache": true, - ".sourcemaps": true, - ".vscode/tasks.json": true, - ".vscode/launch.json": true, - "vsc-extension-quickstart.md": true, - "tsconfig.json": true, - "src/extension.ts": true, - "src/helpers.ts": true, - "src/models.ts": true, - "src/execute-command.ts": true, - "src/progress-output.ts": true, - ".gitignore": true, - ".npmignore": true, - ".babelrc": true, - ".npmrc": true, - ".eslintrc.json": true, - ".prettierignore": true, - ".prettierrc": true, - ".editorconfig": true, - "devDependencies.json": true, - "package.json": true, - "logo.svg": true - }, - "search.exclude": { - "docs": true, - "projects": true, - "bin": true - }, - "typescript.tsc.autoDetect": "off", - "html.format.wrapAttributes": "force-aligned", - "workbench.colorTheme": "Default Light+", - "workbench.colorCustomizations": { - "activityBar.background": "#2570b6", - "statusBar.background": "#5c3735", - "statusBar.debuggingBackground": "#5c3735" - }, - "[typescriptreact]": { - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": false - }, - "[json]": { - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": false - }, - "[jsonc]": { - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": false - }, - "[json5]": { - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": false - }, - "[scss]": { - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": false - }, - "[html]": { - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": false - }, - "[javascript]": { - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": false - }, - "[typescript]": { - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": false - }, - "editor.rulers": [ - 80, - 120 - ], - "eslint.migration.2_x": "off", - "eslint.enable": true, - "prettier.enable": true, - "editor.suggest.snippetsPreventQuickSuggestions": false, - "editor.inlineSuggest.enabled": true, - "prettier.prettierPath": "./node_modules/prettier", - "prettier.endOfLine": "auto" -} \ No newline at end of file diff --git a/projects/container-v16/plugins-v16/firedev-vscode-ext/.editorconfig b/projects/container-v16/plugins-v16/taon-vscode-ext/.editorconfig similarity index 100% rename from projects/container-v16/plugins-v16/firedev-vscode-ext/.editorconfig rename to projects/container-v16/plugins-v16/taon-vscode-ext/.editorconfig diff --git a/projects/container-v16/plugins-v16/firedev-vscode-ext/.eslintrc.json b/projects/container-v16/plugins-v16/taon-vscode-ext/.eslintrc.json similarity index 100% rename from projects/container-v16/plugins-v16/firedev-vscode-ext/.eslintrc.json rename to projects/container-v16/plugins-v16/taon-vscode-ext/.eslintrc.json diff --git a/projects/container-v16/plugins-v16/firedev-vscode-ext/.gitignore b/projects/container-v16/plugins-v16/taon-vscode-ext/.gitignore similarity index 92% rename from projects/container-v16/plugins-v16/firedev-vscode-ext/.gitignore rename to projects/container-v16/plugins-v16/taon-vscode-ext/.gitignore index 2c942d76..af1e61d7 100644 --- a/projects/container-v16/plugins-v16/firedev-vscode-ext/.gitignore +++ b/projects/container-v16/plugins-v16/taon-vscode-ext/.gitignore @@ -4,6 +4,7 @@ speed-measure-plugin*.json # misc /.sass-cache +/**/tmp-* /connect.lock /coverage /libpeerconnection.log @@ -49,20 +50,17 @@ Thumbs.db /.vscode/launch.json /.vscodeignore /vsc-extension-quickstart.md -/tsconfig.json /update-proj.js /src/extension.ts /src/helpers.ts /src/models.ts /src/execute-command.ts /src/progress-output.ts -/tsconfig.backend.dist.json !tsconfig* # ===================== -!firedev.json -!firedev.jsonc +!taon.jsonc *.filetemplate diff --git a/projects/container-v16/plugins-v16/firedev-vscode-ext/.npmignore b/projects/container-v16/plugins-v16/taon-vscode-ext/.npmignore similarity index 100% rename from projects/container-v16/plugins-v16/firedev-vscode-ext/.npmignore rename to projects/container-v16/plugins-v16/taon-vscode-ext/.npmignore diff --git a/projects/container-v16/plugins-v16/firedev-vscode-ext/.npmrc b/projects/container-v16/plugins-v16/taon-vscode-ext/.npmrc similarity index 100% rename from projects/container-v16/plugins-v16/firedev-vscode-ext/.npmrc rename to projects/container-v16/plugins-v16/taon-vscode-ext/.npmrc diff --git a/projects/container-v16/plugins-v16/firedev-vscode-ext/.prettierignore b/projects/container-v16/plugins-v16/taon-vscode-ext/.prettierignore similarity index 100% rename from projects/container-v16/plugins-v16/firedev-vscode-ext/.prettierignore rename to projects/container-v16/plugins-v16/taon-vscode-ext/.prettierignore diff --git a/projects/container-v16/plugins-v16/firedev-vscode-ext/.prettierrc b/projects/container-v16/plugins-v16/taon-vscode-ext/.prettierrc similarity index 100% rename from projects/container-v16/plugins-v16/firedev-vscode-ext/.prettierrc rename to projects/container-v16/plugins-v16/taon-vscode-ext/.prettierrc diff --git a/projects/container-v16/plugins-v16/taon-vscode-ext/.vscode/extensions.json b/projects/container-v16/plugins-v16/taon-vscode-ext/.vscode/extensions.json new file mode 100644 index 00000000..cd013603 --- /dev/null +++ b/projects/container-v16/plugins-v16/taon-vscode-ext/.vscode/extensions.json @@ -0,0 +1,75 @@ +{ + "recommendations": [ + "Angular.ng-template", + "EditorConfig.EditorConfig", + "GitHub.copilot", + "IBM.output-colorizer", + "Mikael.Angular-BeastCode", + "SimonSiefke.svg-preview", + "Zaczero.bootstrap-v4-snippets", + "aeschli.vscode-css-formatter", + "alefragnani.Bookmarks", + "alexdima.copy-relative-path", + "alexiv.vscode-angular2-files", + "amodio.toggle-excluded-files", + "cg-cnu.vscode-path-tools", + "chrisdias.vscode-opennewinstance", + "ctcuff.font-preview", + "dbaeumer.vscode-eslint", + "dnicolson.binary-plist", + "eamodio.gitlens", + "eg2.tslint", + "esbenp.prettier-vscode", + "henry-li.vscode-import-formatter", + "jack89ita.copy-filename", + "johnpapa.Angular2", + "marclipovsky.string-manipulation", + "marinhobrandao.angular2tests", + "mariusalchimavicius.json-to-ts", + "maximus136.change-string-case", + "mikebovenlander.formate", + "momoko8443.library-version", + "mrmlnc.vscode-json5", + "ms-azuretools.vscode-docker", + "ms-vscode.live-server", + "msjsdiag.debugger-for-chrome", + "natewallace.angular2-inline", + "natqe.reload", + "nemesv.copy-file-name", + "oven.bun-vscode", + "qwtel.sqlite-viewer", + "redhat.vscode-xml", + "ritwickdey.create-file-folder", + "rogalmic.bash-debug", + "rssowl.copy-relative-path-posix", + "ryanlaws.toggle-case", + "saber2pr.file-git-history", + "shakram02.bash-beautify", + "stepanog.angular1-inline", + "taddison.gitlazy", + "unifiedjs.vscode-mdx", + "vespa-dev-works.jestrunit", + "waderyan.gitblame", + "wcwhitehead.bootstrap-3-snippets", + "wenfangdu.snippet-generator", + "xabikos.javascriptsnippets", + "wmaurer.vscode-jumpy", + "nidu.copy-json-path", + "aaron-bond.better-comments", + "mikestead.dotenv", + "ryu1kn.partial-diff", + "Tyriar.sort-lines", + "ms-vscode-remote.remote-containers", + "DavidAnson.vscode-markdownlint", + "bibhasdn.unique-lines", + "streetsidesoftware.code-spell-checker", + "pranaygp.vscode-css-peek", + "kisstkondoros.vscode-codemetrics", + "vscode-icons-team.vscode-icons", + "Gruntfuggly.todo-tree", + "ms-vscode-remote.remote-ssh", + "tomoki1207.pdf", + "hediet.vscode-drawio", + "antfu.file-nesting" + ] +} \ No newline at end of file diff --git a/projects/container-v16/plugins-v16/taon-vscode-ext/.vscode/settings.json b/projects/container-v16/plugins-v16/taon-vscode-ext/.vscode/settings.json new file mode 100644 index 00000000..7ec77682 --- /dev/null +++ b/projects/container-v16/plugins-v16/taon-vscode-ext/.vscode/settings.json @@ -0,0 +1,140 @@ +{ + "files.exclude": { + "**/*____ORIGINAL____.ts": true, + "_changelog": true, + "out": true, + "update-proj.js": true, + ".vscodeignore": true, + "*.vsix": true, + "**/node_modules": true, + "**/tmp*": true, + "**/dist*": true, + "**/bundle*": true, + "**/browser": true, + "**/browser*": true, + "**/websql": true, + "**/websql*": true, + "**/module*": true, + "**/backup": true, + "**/module": true, + "**/www": true, + "**/Thumbs.db": true, + "**/.DS_Store": true, + "**/**/.DS_Store": true, + "**/npm-debug.log*": true, + "**/.sass-cache": true, + "**/.sourcemaps": true, + "**/.vscode/tasks.json": true, + "**/.vscode/launch.json": true, + "**/.vscodeignore": true, + "**/vsc-extension-quickstart.md": true, + "**/tsconfig.json": true, + "**/update-proj.js": true, + "**/src/extension.ts": true, + "**/src/helpers.ts": true, + "**/src/models.ts": true, + "**/src/execute-command.ts": true, + "**/src/progress-output.ts": true, + "**/tsconfig.backend.dist.json": true, + "**/.gitignore": true, + "**/.npmignore": true, + "**/.babelrc": true, + "**/.npmrc": true, + "**/.eslintrc.json": true, + "**/.prettierignore": true, + "**/.prettierrc": true, + "**/.editorconfig": true, + "**/devDependencies.json": true, + "**/package.json": true, + "**/logo.svg": true, + "**/*.filetemplate": true, + "**/tsconfig.*": true, + "**/tslint.*": true, + "**/recent.json": true, + "**/angular.json": true, + "**/webpack*": true, + "**/docs/**/*.*": true, + "**/run-*": true, + "**/run.*": true, + "**/package-lock.json": true, + "**/protractor.conf.js": true, + "**/karma.conf.js": true + }, + "search.exclude": { + "docs": true, + "projects": true, + "bin": true, + "local_release": true, + "node_modules": true, + ".build": true, + ".vscode": true, + "browser": true, + "dist": true, + "package-lock.json": true, + "**/docs": true, + "**/projects": true, + "**/bin": true, + "**/local_release": true, + "**/node_modules": true, + "**/.build": true, + "**/.vscode": true, + "**/browser": true, + "**/dist": true, + "**/package-lock.json": true + }, + "typescript.tsc.autoDetect": "off", + "html.format.wrapAttributes": "force-aligned", + "workbench.colorTheme": "Default Light+", + "workbench.colorCustomizations": { + "activityBar.background": "#2570b6", + "statusBar.background": "#5c3735", + "statusBar.debuggingBackground": "#5c3735" + }, + "[typescriptreact]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": false + }, + "[json]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": false + }, + "[jsonc]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": false + }, + "[json5]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": false + }, + "[scss]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": false + }, + "[html]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": false + }, + "[javascript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": false + }, + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": false + }, + "editor.rulers": [ + 80, + 120 + ], + "eslint.migration.2_x": "off", + "eslint.enable": true, + "prettier.enable": true, + "editor.suggest.snippetsPreventQuickSuggestions": false, + "editor.inlineSuggest.enabled": true, + "prettier.prettierPath": "./node_modules/prettier", + "prettier.endOfLine": "auto", + "search.useIgnoreFiles": false, + "search.include": [ + "**/src/**" + ] +} \ No newline at end of file diff --git a/projects/container-v16/plugins-v16/firedev-vscode-ext/CHANGELOG.md b/projects/container-v16/plugins-v16/taon-vscode-ext/CHANGELOG.md similarity index 100% rename from projects/container-v16/plugins-v16/firedev-vscode-ext/CHANGELOG.md rename to projects/container-v16/plugins-v16/taon-vscode-ext/CHANGELOG.md diff --git a/projects/container-v16/plugins-v16/firedev-vscode-ext/LICENSE.txt b/projects/container-v16/plugins-v16/taon-vscode-ext/LICENSE.txt similarity index 100% rename from projects/container-v16/plugins-v16/firedev-vscode-ext/LICENSE.txt rename to projects/container-v16/plugins-v16/taon-vscode-ext/LICENSE.txt diff --git a/projects/container-v16/plugins-v16/firedev-vscode-ext/README.md b/projects/container-v16/plugins-v16/taon-vscode-ext/README.md similarity index 100% rename from projects/container-v16/plugins-v16/firedev-vscode-ext/README.md rename to projects/container-v16/plugins-v16/taon-vscode-ext/README.md diff --git a/projects/container-v16/plugins-v16/firedev-vscode-ext/environment.js b/projects/container-v16/plugins-v16/taon-vscode-ext/environment.js similarity index 100% rename from projects/container-v16/plugins-v16/firedev-vscode-ext/environment.js rename to projects/container-v16/plugins-v16/taon-vscode-ext/environment.js diff --git a/projects/container-v16/plugins-v16/firedev-vscode-ext/linked-projects.json b/projects/container-v16/plugins-v16/taon-vscode-ext/linked-projects.json similarity index 100% rename from projects/container-v16/plugins-v16/firedev-vscode-ext/linked-projects.json rename to projects/container-v16/plugins-v16/taon-vscode-ext/linked-projects.json diff --git a/projects/container-v16/plugins-v16/firedev-vscode-ext/logo-128.png b/projects/container-v16/plugins-v16/taon-vscode-ext/logo-128.png similarity index 100% rename from projects/container-v16/plugins-v16/firedev-vscode-ext/logo-128.png rename to projects/container-v16/plugins-v16/taon-vscode-ext/logo-128.png diff --git a/projects/container-v16/plugins-v16/firedev-vscode-ext/menu.png b/projects/container-v16/plugins-v16/taon-vscode-ext/menu.png similarity index 100% rename from projects/container-v16/plugins-v16/firedev-vscode-ext/menu.png rename to projects/container-v16/plugins-v16/taon-vscode-ext/menu.png diff --git a/projects/container-v16/plugins-v16/firedev-vscode-ext/package.json b/projects/container-v16/plugins-v16/taon-vscode-ext/package.json similarity index 100% rename from projects/container-v16/plugins-v16/firedev-vscode-ext/package.json rename to projects/container-v16/plugins-v16/taon-vscode-ext/package.json diff --git a/projects/container-v16/plugins-v16/firedev-vscode-ext/src/config.ts b/projects/container-v16/plugins-v16/taon-vscode-ext/src/config.ts similarity index 100% rename from projects/container-v16/plugins-v16/firedev-vscode-ext/src/config.ts rename to projects/container-v16/plugins-v16/taon-vscode-ext/src/config.ts diff --git a/projects/container-v16/plugins-v16/firedev-vscode-ext/src/constants.ts b/projects/container-v16/plugins-v16/taon-vscode-ext/src/constants.ts similarity index 100% rename from projects/container-v16/plugins-v16/firedev-vscode-ext/src/constants.ts rename to projects/container-v16/plugins-v16/taon-vscode-ext/src/constants.ts diff --git a/projects/container-v16/plugins-v16/firedev-vscode-ext/src/test/extension.test.ts b/projects/container-v16/plugins-v16/taon-vscode-ext/src/test/extension.test.ts similarity index 100% rename from projects/container-v16/plugins-v16/firedev-vscode-ext/src/test/extension.test.ts rename to projects/container-v16/plugins-v16/taon-vscode-ext/src/test/extension.test.ts diff --git a/projects/container-v16/plugins-v16/firedev-vscode-ext/src/test/index.ts b/projects/container-v16/plugins-v16/taon-vscode-ext/src/test/index.ts similarity index 100% rename from projects/container-v16/plugins-v16/firedev-vscode-ext/src/test/index.ts rename to projects/container-v16/plugins-v16/taon-vscode-ext/src/test/index.ts diff --git a/projects/container-v16/plugins-v16/firedev-vscode-ext/firedev.jsonc b/projects/container-v16/plugins-v16/taon-vscode-ext/taon.jsonc similarity index 99% rename from projects/container-v16/plugins-v16/firedev-vscode-ext/firedev.jsonc rename to projects/container-v16/plugins-v16/taon-vscode-ext/taon.jsonc index bcc6a81a..40a4375b 100644 --- a/projects/container-v16/plugins-v16/firedev-vscode-ext/firedev.jsonc +++ b/projects/container-v16/plugins-v16/taon-vscode-ext/taon.jsonc @@ -38,4 +38,4 @@ "license": "MIT", "private": false, "workerPlugins": {} -} +} \ No newline at end of file diff --git a/projects/container-v16/plugins-v16/firedev-vscode-ext/tsconfig.json b/projects/container-v16/plugins-v16/taon-vscode-ext/tsconfig.json similarity index 100% rename from projects/container-v16/plugins-v16/firedev-vscode-ext/tsconfig.json rename to projects/container-v16/plugins-v16/taon-vscode-ext/tsconfig.json diff --git a/projects/container-v16/plugins-v16/firedev-vscode-ext/tslint.json b/projects/container-v16/plugins-v16/taon-vscode-ext/tslint.json similarity index 100% rename from projects/container-v16/plugins-v16/firedev-vscode-ext/tslint.json rename to projects/container-v16/plugins-v16/taon-vscode-ext/tslint.json diff --git a/projects/container-v16/vscode-ext-v16/firedev.jsonc b/projects/container-v16/vscode-ext-v16/taon.jsonc similarity index 99% rename from projects/container-v16/vscode-ext-v16/firedev.jsonc rename to projects/container-v16/vscode-ext-v16/taon.jsonc index a37f9578..7b8d8518 100644 --- a/projects/container-v16/vscode-ext-v16/firedev.jsonc +++ b/projects/container-v16/vscode-ext-v16/taon.jsonc @@ -38,4 +38,4 @@ "license": "MIT", "private": false, "isCoreProject": true -} +} \ No newline at end of file diff --git a/projects/container-v18/.gitignore b/projects/container-v18/.gitignore index eaf53966..5a46076f 100644 --- a/projects/container-v18/.gitignore +++ b/projects/container-v18/.gitignore @@ -49,6 +49,6 @@ Thumbs.db /src-for-stanalone /components-for-stanalone # ===================== -!firedev.json -!firedev.jsonc +!taon.json +!taon.jsonc !*.filetemplate diff --git a/projects/container-v18/.prettierignore b/projects/container-v18/.prettierignore index b06381d6..2e39de53 100644 --- a/projects/container-v18/.prettierignore +++ b/projects/container-v18/.prettierignore @@ -1,5 +1,5 @@ -# This file is generated by firedev +# This file is generated by taon build coverage e2e @@ -25,4 +25,3 @@ backup module www - \ No newline at end of file diff --git a/projects/container-v18/examples-v18/.gitignore b/projects/container-v18/examples-v18/.gitignore index a87607c5..e36cff89 100644 --- a/projects/container-v18/examples-v18/.gitignore +++ b/projects/container-v18/examples-v18/.gitignore @@ -52,8 +52,8 @@ Thumbs.db # ===================== -!firedev.json -!firedev.jsonc +!taon.json +!taon.jsonc *.filetemplate diff --git a/projects/container-v18/examples-v18/circural-deps-ctx/.gitignore b/projects/container-v18/examples-v18/circural-deps-ctx/.gitignore index ce9f20a1..ff22cf1c 100644 --- a/projects/container-v18/examples-v18/circural-deps-ctx/.gitignore +++ b/projects/container-v18/examples-v18/circural-deps-ctx/.gitignore @@ -64,8 +64,8 @@ Thumbs.db /tsconfig.backend.dist.json.filetemplate /tsconfig.backend.dist.json # ===================== -!firedev.json -!firedev.jsonc +!taon.json +!taon.jsonc *.filetemplate diff --git a/projects/container-v18/examples-v18/circural-deps-ctx/.prettierignore b/projects/container-v18/examples-v18/circural-deps-ctx/.prettierignore index a1b53764..a89e1fe3 100644 --- a/projects/container-v18/examples-v18/circural-deps-ctx/.prettierignore +++ b/projects/container-v18/examples-v18/circural-deps-ctx/.prettierignore @@ -1,5 +1,5 @@ -# This file is generated by firedev +# This file is generated by taon /build /coverage /e2e @@ -25,4 +25,3 @@ tmp-* /module /www - \ No newline at end of file diff --git a/projects/container-v18/examples-v18/circural-deps-ctx/package.json b/projects/container-v18/examples-v18/circural-deps-ctx/package.json index a68f1c4b..3d5258a9 100644 --- a/projects/container-v18/examples-v18/circural-deps-ctx/package.json +++ b/projects/container-v18/examples-v18/circural-deps-ctx/package.json @@ -148,14 +148,14 @@ "file-loader": "1.1.5", "file-saver": "2.0.5", "file-type": "18.5.0", - "firedev": "^16", - "firedev-crud": "16.444.7", - "firedev-crud-deamon": "16.444.7", - "firedev-ports": "16.444.7", - "firedev-storage": "16.444.5", - "firedev-type-sql": "16.444.7", - "firedev-typeorm": "16.444.5", - "firedev-ui": "16.444.1", + "taon": "^16", + "taon-crud": "16.444.7", + "taon-crud-deamon": "16.444.7", + "taon-ports": "16.444.7", + "taon-storage": "16.444.5", + "taon-type-sql": "16.444.7", + "taon-typeorm": "16.444.5", + "taon-ui": "16.444.1", "fkill": "6.1.0", "font-awesome": "4.7.0", "form-data": "4.0.0", @@ -449,14 +449,14 @@ "file-loader": "1.1.5", "file-saver": "2.0.5", "file-type": "18.5.0", - "firedev": "^16", - "firedev-crud": "16.444.7", - "firedev-crud-deamon": "16.444.7", - "firedev-ports": "16.444.7", - "firedev-storage": "16.444.5", - "firedev-type-sql": "16.444.7", - "firedev-typeorm": "16.444.5", - "firedev-ui": "16.444.1", + "taon": "^16", + "taon-crud": "16.444.7", + "taon-crud-deamon": "16.444.7", + "taon-ports": "16.444.7", + "taon-storage": "16.444.5", + "taon-type-sql": "16.444.7", + "taon-typeorm": "16.444.5", + "taon-ui": "16.444.1", "fkill": "6.1.0", "font-awesome": "4.7.0", "form-data": "4.0.0", diff --git a/projects/container-v18/examples-v18/circural-deps-ctx/src/app.context.ts b/projects/container-v18/examples-v18/circural-deps-ctx/src/app.context.ts index 161b9976..9fe609e2 100644 --- a/projects/container-v18/examples-v18/circural-deps-ctx/src/app.context.ts +++ b/projects/container-v18/examples-v18/circural-deps-ctx/src/app.context.ts @@ -1,10 +1,10 @@ import { SharedContext } from 'circural-deps-ctx/src'; -import { Firedev, BaseContext, createContext } from 'firedev/src'; +import { Taon, BaseContext, createContext } from 'taon/src'; import { HOST_BACKEND_PORT } from './app.hosts'; import { GroupContext } from 'circural-deps-ctx/src'; const host = 'http://localhost:' + HOST_BACKEND_PORT; -const AppContext = Firedev.createContext(() => ({ +const AppContext = Taon.createContext(() => ({ contextName: 'AppContext', host, contexts: { SharedContext, BaseContext, GroupContext }, diff --git a/projects/container-v18/examples-v18/circural-deps-ctx/src/app.ts b/projects/container-v18/examples-v18/circural-deps-ctx/src/app.ts index df9c27e2..f6cc757b 100644 --- a/projects/container-v18/examples-v18/circural-deps-ctx/src/app.ts +++ b/projects/container-v18/examples-v18/circural-deps-ctx/src/app.ts @@ -1,6 +1,6 @@ -import { Firedev } from 'firedev/src'; +import { Taon } from 'taon/src'; import { Observable, map } from 'rxjs'; -import { getMetadataArgsStorage } from 'firedev-typeorm/src'; +import { getMetadataArgsStorage } from 'taon-typeorm/src'; import { HOST_BACKEND_PORT } from './app.hosts'; import { AppContext } from './app.context'; diff --git a/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/groups/group.context.ts b/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/groups/group.context.ts index 5adf3c91..fd11e6c4 100644 --- a/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/groups/group.context.ts +++ b/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/groups/group.context.ts @@ -1,8 +1,8 @@ -import { Firedev, createContext } from "firedev/src"; +import { Taon, createContext } from "taon/src"; import { GroupController } from "./group.controller"; import { Group } from "./group"; -export const GroupContext = Firedev.createContext(() => ({ +export const GroupContext = Taon.createContext(() => ({ contextName: 'GroupContext', host: 'http://abstract.host.com', abstract: true, diff --git a/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/groups/group.controller.ts b/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/groups/group.controller.ts index e02a2da4..815d6408 100644 --- a/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/groups/group.controller.ts +++ b/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/groups/group.controller.ts @@ -1,10 +1,10 @@ -import { Firedev } from 'firedev/src'; +import { Taon } from 'taon/src'; import { Group } from './group'; import { GroupContext } from './group.context'; -@Firedev.Controller({ +@Taon.Controller({ className: 'GroupController', }) -export class GroupController extends Firedev.Base.CrudController { +export class GroupController extends Taon.Base.CrudController { entityClassResolveFn = () => Group; } diff --git a/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/groups/group.ts b/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/groups/group.ts index 872ca4ec..e12e3945 100644 --- a/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/groups/group.ts +++ b/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/groups/group.ts @@ -1,16 +1,16 @@ -import { Firedev } from 'firedev/src'; +import { Taon } from 'taon/src'; -@Firedev.Entity({ +@Taon.Entity({ className: 'Group', }) -export class Group extends Firedev.Base.Entity { +export class Group extends Taon.Base.Entity { //#region @websql - @Firedev.Orm.Column.Generated() + @Taon.Orm.Column.Generated() //#endregion id: string; //#region @websql - @Firedev.Orm.Column.String() + @Taon.Orm.Column.String() //#endregion name: string; } diff --git a/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/session/sesison.ts b/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/session/sesison.ts index 91912ac7..d04e156f 100644 --- a/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/session/sesison.ts +++ b/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/session/sesison.ts @@ -1,16 +1,16 @@ -import { Firedev } from 'firedev/src'; +import { Taon } from 'taon/src'; -@Firedev.Entity({ +@Taon.Entity({ className: 'Session', }) -export class Session extends Firedev.Base.Entity { +export class Session extends Taon.Base.Entity { //#region @websql - @Firedev.Orm.Column.Generated() + @Taon.Orm.Column.Generated() //#endregion id: string; //#region @websql - @Firedev.Orm.Column.Number() + @Taon.Orm.Column.Number() //#endregion timeout: number; } diff --git a/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/session/session.controller.ts b/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/session/session.controller.ts index 4138f4e5..cb86cb67 100644 --- a/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/session/session.controller.ts +++ b/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/session/session.controller.ts @@ -1,12 +1,12 @@ -import { Firedev } from 'firedev/src'; +import { Taon } from 'taon/src'; import { SharedContext } from '../shared.context'; import { Session } from './sesison'; -import { EntityOptions } from 'firedev-typeorm/src'; +import { EntityOptions } from 'taon-typeorm/src'; -@Firedev.Controller({ +@Taon.Controller({ className: 'SessionController', }) -export class SessionController extends Firedev.Base.CrudController { +export class SessionController extends Taon.Base.CrudController { entityClassResolveFn = () => Session; async initExampleDbData(): Promise {} diff --git a/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/shared.context.ts b/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/shared.context.ts index 4ab87b96..2385748e 100644 --- a/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/shared.context.ts +++ b/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/shared.context.ts @@ -1,4 +1,4 @@ -import { BaseContext, Firedev, createContext } from 'firedev/src'; +import { BaseContext, Taon, createContext } from 'taon/src'; import { Session } from './session/sesison'; import { User } from './user/user'; import { UserController } from './user/user.controller'; diff --git a/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/user/user.controller.ts b/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/user/user.controller.ts index cb795a92..4281e5dd 100644 --- a/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/user/user.controller.ts +++ b/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/user/user.controller.ts @@ -1,11 +1,11 @@ -import { ClassHelpers, Firedev } from 'firedev/src'; +import { ClassHelpers, Taon } from 'taon/src'; import { SharedContext } from '../shared.context'; import { User } from './user'; -@Firedev.Controller({ +@Taon.Controller({ className: 'UserController', }) -export class UserController extends Firedev.Base.CrudController { +export class UserController extends Taon.Base.CrudController { entityClassResolveFn = () => User; currentRepo: any; diff --git a/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/user/user.ts b/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/user/user.ts index d74d3632..05ffc6d3 100644 --- a/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/user/user.ts +++ b/projects/container-v18/examples-v18/circural-deps-ctx/src/lib/shared/user/user.ts @@ -1,32 +1,32 @@ -import { Firedev } from 'firedev/src'; +import { Taon } from 'taon/src'; -@Firedev.Entity({ +@Taon.Entity({ className: 'User', createTable: true, }) -export class User extends Firedev.Base.Entity { +export class User extends Taon.Base.Entity { //#region @websql - @Firedev.Orm.Column.Generated() + @Taon.Orm.Column.Generated() //#endregion id: string; //#region @websql - @Firedev.Orm.Column.String() + @Taon.Orm.Column.String() //#endregion name: string; //#region @websql - @Firedev.Orm.Column.String() + @Taon.Orm.Column.String() //#endregion email: string; //#region @websql - @Firedev.Orm.Column.String() + @Taon.Orm.Column.String() //#endregion password: string; //#region @websql - @Firedev.Orm.Column.String() + @Taon.Orm.Column.String() //#endregion pizda: string; } diff --git a/projects/container-v18/examples-v18/crud/.gitignore b/projects/container-v18/examples-v18/crud/.gitignore index ce9f20a1..ff22cf1c 100644 --- a/projects/container-v18/examples-v18/crud/.gitignore +++ b/projects/container-v18/examples-v18/crud/.gitignore @@ -64,8 +64,8 @@ Thumbs.db /tsconfig.backend.dist.json.filetemplate /tsconfig.backend.dist.json # ===================== -!firedev.json -!firedev.jsonc +!taon.json +!taon.jsonc *.filetemplate diff --git a/projects/container-v18/examples-v18/crud/.prettierignore b/projects/container-v18/examples-v18/crud/.prettierignore index a1b53764..a89e1fe3 100644 --- a/projects/container-v18/examples-v18/crud/.prettierignore +++ b/projects/container-v18/examples-v18/crud/.prettierignore @@ -1,5 +1,5 @@ -# This file is generated by firedev +# This file is generated by taon /build /coverage /e2e @@ -25,4 +25,3 @@ tmp-* /module /www - \ No newline at end of file diff --git a/projects/container-v18/examples-v18/crud/package.json b/projects/container-v18/examples-v18/crud/package.json index ff391d65..e9f51a9c 100644 --- a/projects/container-v18/examples-v18/crud/package.json +++ b/projects/container-v18/examples-v18/crud/package.json @@ -148,14 +148,14 @@ "file-loader": "1.1.5", "file-saver": "2.0.5", "file-type": "18.5.0", - "firedev": "^16", - "firedev-crud": "16.444.7", - "firedev-crud-deamon": "16.444.7", - "firedev-ports": "16.444.7", - "firedev-storage": "16.444.5", - "firedev-type-sql": "16.444.7", - "firedev-typeorm": "16.444.5", - "firedev-ui": "16.444.1", + "taon": "^16", + "taon-crud": "16.444.7", + "taon-crud-deamon": "16.444.7", + "taon-ports": "16.444.7", + "taon-storage": "16.444.5", + "taon-type-sql": "16.444.7", + "taon-typeorm": "16.444.5", + "taon-ui": "16.444.1", "fkill": "6.1.0", "font-awesome": "4.7.0", "form-data": "4.0.0", @@ -449,14 +449,14 @@ "file-loader": "1.1.5", "file-saver": "2.0.5", "file-type": "18.5.0", - "firedev": "^16", - "firedev-crud": "16.444.7", - "firedev-crud-deamon": "16.444.7", - "firedev-ports": "16.444.7", - "firedev-storage": "16.444.5", - "firedev-type-sql": "16.444.7", - "firedev-typeorm": "16.444.5", - "firedev-ui": "16.444.1", + "taon": "^16", + "taon-crud": "16.444.7", + "taon-crud-deamon": "16.444.7", + "taon-ports": "16.444.7", + "taon-storage": "16.444.5", + "taon-type-sql": "16.444.7", + "taon-typeorm": "16.444.5", + "taon-ui": "16.444.1", "fkill": "6.1.0", "font-awesome": "4.7.0", "form-data": "4.0.0", diff --git a/projects/container-v18/examples-v18/crud/src/app.ts b/projects/container-v18/examples-v18/crud/src/app.ts index 1187c62a..eaa28d90 100644 --- a/projects/container-v18/examples-v18/crud/src/app.ts +++ b/projects/container-v18/examples-v18/crud/src/app.ts @@ -1,9 +1,9 @@ //#region imports -import { BaseContext, Firedev } from 'firedev/src'; +import { BaseContext, Taon } from 'taon/src'; import { Observable, map } from 'rxjs'; import { HOST_BACKEND_PORT } from './app.hosts'; //#region @websql -import { getMetadataArgsStorage } from 'firedev-typeorm/src'; +import { getMetadataArgsStorage } from 'taon-typeorm/src'; //#endregion //#region @browser import { Injectable, NgModule, inject } from '@angular/core'; @@ -43,7 +43,7 @@ export class CrudComponent { providedIn: 'root', }) export class UserApiService { - userController = Firedev.inject( + userController = Taon.inject( () => Context.types.controllers.UserController, ); @@ -67,19 +67,19 @@ export class CrudModule {} //#endregion //#region entity -@Firedev.Entity({ className: 'User' }) -class User extends Firedev.Base.AbstractEntity { +@Taon.Entity({ className: 'User' }) +class User extends Taon.Base.AbstractEntity { //#region @websql - @Firedev.Orm.Column.String() + @Taon.Orm.Column.String() //#endregion name: string; } //#endregion //#region controller -@Firedev.Controller({ className: 'UserController', realtime: false }) -class UserController extends Firedev.Base.CrudController { +@Taon.Controller({ className: 'UserController', realtime: false }) +class UserController extends Taon.Base.CrudController { entityClassResolveFn = () => User; async initExampleDbData(): Promise { @@ -94,7 +94,7 @@ console.log('hello world'); console.log('Your server will start on port ' + HOST_BACKEND_PORT); const host = 'http://localhost:' + HOST_BACKEND_PORT; -var Context = Firedev.createContext(() => ({ +var Context = Taon.createContext(() => ({ host, contextName: 'Context', contexts: { BaseContext }, @@ -116,7 +116,7 @@ var Context = Firedev.createContext(() => ({ async function start() { await Context.initialize(); - if (Firedev.isBrowser) { + if (Taon.isBrowser) { const users = (await Context.getClassInstance(UserController).getAll().received) .body?.json; console.log({ diff --git a/projects/container-v18/examples-v18/electron-remote-service/.gitignore b/projects/container-v18/examples-v18/electron-remote-service/.gitignore index ce9f20a1..ff22cf1c 100644 --- a/projects/container-v18/examples-v18/electron-remote-service/.gitignore +++ b/projects/container-v18/examples-v18/electron-remote-service/.gitignore @@ -64,8 +64,8 @@ Thumbs.db /tsconfig.backend.dist.json.filetemplate /tsconfig.backend.dist.json # ===================== -!firedev.json -!firedev.jsonc +!taon.json +!taon.jsonc *.filetemplate diff --git a/projects/container-v18/examples-v18/electron-remote-service/.prettierignore b/projects/container-v18/examples-v18/electron-remote-service/.prettierignore index a1b53764..a89e1fe3 100644 --- a/projects/container-v18/examples-v18/electron-remote-service/.prettierignore +++ b/projects/container-v18/examples-v18/electron-remote-service/.prettierignore @@ -1,5 +1,5 @@ -# This file is generated by firedev +# This file is generated by taon /build /coverage /e2e @@ -25,4 +25,3 @@ tmp-* /module /www - \ No newline at end of file diff --git a/projects/container-v18/examples-v18/electron-remote-service/package.json b/projects/container-v18/examples-v18/electron-remote-service/package.json index edb83a51..d6b0dfdf 100644 --- a/projects/container-v18/examples-v18/electron-remote-service/package.json +++ b/projects/container-v18/examples-v18/electron-remote-service/package.json @@ -164,14 +164,14 @@ "file-loader": "1.1.5", "file-saver": "2.0.5", "file-type": "18.5.0", - "firedev": "^16", - "firedev-crud": "16.444.7", - "firedev-crud-deamon": "16.444.7", - "firedev-ports": "16.444.7", - "firedev-storage": "16.444.5", - "firedev-type-sql": "16.444.7", - "firedev-typeorm": "16.444.5", - "firedev-ui": "16.444.1", + "taon": "^16", + "taon-crud": "16.444.7", + "taon-crud-deamon": "16.444.7", + "taon-ports": "16.444.7", + "taon-storage": "16.444.5", + "taon-type-sql": "16.444.7", + "taon-typeorm": "16.444.5", + "taon-ui": "16.444.1", "fkill": "6.1.0", "font-awesome": "4.7.0", "form-data": "4.0.0", diff --git a/projects/container-v18/examples-v18/electron-remote-service/src/app.ts b/projects/container-v18/examples-v18/electron-remote-service/src/app.ts index de38e598..268f0e05 100644 --- a/projects/container-v18/examples-v18/electron-remote-service/src/app.ts +++ b/projects/container-v18/examples-v18/electron-remote-service/src/app.ts @@ -1,5 +1,5 @@ //#region imports -import { Firedev, BaseContext } from 'firedev/src'; +import { Taon, BaseContext } from 'taon/src'; import { Observable, map } from 'rxjs'; import { HOST_BACKEND_PORT } from './app.hosts'; //#region @browser @@ -39,7 +39,7 @@ export class ElectronRemoteServiceComponent { providedIn:'root' }) export class UserApiService { - userControlller = Firedev.inject(()=> MainContext.getClass(UserController)) + userControlller = Taon.inject(()=> MainContext.getClass(UserController)) getAll() { return this.userControlller.getAll() .received @@ -62,19 +62,19 @@ export class ElectronRemoteServiceModule { } //#endregion //#region electron-remote-service entity -@Firedev.Entity({ className: 'User' }) -class User extends Firedev.Base.AbstractEntity { +@Taon.Entity({ className: 'User' }) +class User extends Taon.Base.AbstractEntity { public static ctrl?: UserController; //#region @websql - @Firedev.Orm.Column.String() + @Taon.Orm.Column.String() //#endregion name?: string; } //#endregion //#region electron-remote-service controller -@Firedev.Controller({ className: 'UserController' }) -class UserController extends Firedev.Base.CrudController { +@Taon.Controller({ className: 'UserController' }) +class UserController extends Taon.Base.CrudController { entityClassResolveFn = ()=> User; //#region @websql async initExampleDbData(): Promise { @@ -87,7 +87,7 @@ class UserController extends Firedev.Base.CrudController { //#endregion //#region electron-remote-service context -const MainContext = Firedev.createContext(()=>({ +const MainContext = Taon.createContext(()=>({ host, contextName: 'MainContext', contexts:{ BaseContext }, @@ -108,7 +108,7 @@ async function start() { await MainContext.initialize(); - if (Firedev.isBrowser) { + if (Taon.isBrowser) { const users = (await MainContext.getClassInstance(UserController).getAll().received) .body?.json; console.log({ diff --git a/projects/container-v18/examples-v18/inject-tests/.gitignore b/projects/container-v18/examples-v18/inject-tests/.gitignore index ce9f20a1..ff22cf1c 100644 --- a/projects/container-v18/examples-v18/inject-tests/.gitignore +++ b/projects/container-v18/examples-v18/inject-tests/.gitignore @@ -64,8 +64,8 @@ Thumbs.db /tsconfig.backend.dist.json.filetemplate /tsconfig.backend.dist.json # ===================== -!firedev.json -!firedev.jsonc +!taon.json +!taon.jsonc *.filetemplate diff --git a/projects/container-v18/examples-v18/inject-tests/.prettierignore b/projects/container-v18/examples-v18/inject-tests/.prettierignore index a1b53764..a89e1fe3 100644 --- a/projects/container-v18/examples-v18/inject-tests/.prettierignore +++ b/projects/container-v18/examples-v18/inject-tests/.prettierignore @@ -1,5 +1,5 @@ -# This file is generated by firedev +# This file is generated by taon /build /coverage /e2e @@ -25,4 +25,3 @@ tmp-* /module /www - \ No newline at end of file diff --git a/projects/container-v18/examples-v18/inject-tests/package.json b/projects/container-v18/examples-v18/inject-tests/package.json index 51278981..dee2dd36 100644 --- a/projects/container-v18/examples-v18/inject-tests/package.json +++ b/projects/container-v18/examples-v18/inject-tests/package.json @@ -148,14 +148,14 @@ "file-loader": "1.1.5", "file-saver": "2.0.5", "file-type": "18.5.0", - "firedev": "^16", - "firedev-crud": "16.444.7", - "firedev-crud-deamon": "16.444.7", - "firedev-ports": "16.444.7", - "firedev-storage": "16.444.5", - "firedev-type-sql": "16.444.7", - "firedev-typeorm": "16.444.5", - "firedev-ui": "16.444.1", + "taon": "^16", + "taon-crud": "16.444.7", + "taon-crud-deamon": "16.444.7", + "taon-ports": "16.444.7", + "taon-storage": "16.444.5", + "taon-type-sql": "16.444.7", + "taon-typeorm": "16.444.5", + "taon-ui": "16.444.1", "fkill": "6.1.0", "font-awesome": "4.7.0", "form-data": "4.0.0", @@ -449,14 +449,14 @@ "file-loader": "1.1.5", "file-saver": "2.0.5", "file-type": "18.5.0", - "firedev": "^16", - "firedev-crud": "16.444.7", - "firedev-crud-deamon": "16.444.7", - "firedev-ports": "16.444.7", - "firedev-storage": "16.444.5", - "firedev-type-sql": "16.444.7", - "firedev-typeorm": "16.444.5", - "firedev-ui": "16.444.1", + "taon": "^16", + "taon-crud": "16.444.7", + "taon-crud-deamon": "16.444.7", + "taon-ports": "16.444.7", + "taon-storage": "16.444.5", + "taon-type-sql": "16.444.7", + "taon-typeorm": "16.444.5", + "taon-ui": "16.444.1", "fkill": "6.1.0", "font-awesome": "4.7.0", "form-data": "4.0.0", diff --git a/projects/container-v18/examples-v18/inject-tests/src/app.context.ts b/projects/container-v18/examples-v18/inject-tests/src/app.context.ts index fc5ecdb4..6bbd1de9 100644 --- a/projects/container-v18/examples-v18/inject-tests/src/app.context.ts +++ b/projects/container-v18/examples-v18/inject-tests/src/app.context.ts @@ -1,9 +1,9 @@ import { SharedContext } from 'inject-tests/src'; -import { Firedev, BaseContext, createContext } from 'firedev/src'; +import { Taon, BaseContext, createContext } from 'taon/src'; import { HOST_BACKEND_PORT } from './app.hosts'; const host = 'http://localhost:' + HOST_BACKEND_PORT; -const AppContext = Firedev.createContext(() => ({ +const AppContext = Taon.createContext(() => ({ contextName: 'AppContext', host, contexts: { SharedContext, BaseContext }, diff --git a/projects/container-v18/examples-v18/inject-tests/src/app.ts b/projects/container-v18/examples-v18/inject-tests/src/app.ts index 37a49dc9..2b55ba29 100644 --- a/projects/container-v18/examples-v18/inject-tests/src/app.ts +++ b/projects/container-v18/examples-v18/inject-tests/src/app.ts @@ -1,6 +1,6 @@ -import { Firedev } from 'firedev/src'; +import { Taon } from 'taon/src'; import { Observable, map } from 'rxjs'; -import { getMetadataArgsStorage } from 'firedev-typeorm/src'; +import { getMetadataArgsStorage } from 'taon-typeorm/src'; import { HOST_BACKEND_PORT } from './app.hosts'; import { AppContext } from './app.context'; diff --git a/projects/container-v18/examples-v18/inject-tests/src/lib/shared/admin/admin.controller.ts b/projects/container-v18/examples-v18/inject-tests/src/lib/shared/admin/admin.controller.ts index 9afa3941..0a538996 100644 --- a/projects/container-v18/examples-v18/inject-tests/src/lib/shared/admin/admin.controller.ts +++ b/projects/container-v18/examples-v18/inject-tests/src/lib/shared/admin/admin.controller.ts @@ -1,10 +1,10 @@ -import { ClassHelpers, Firedev } from 'firedev/src'; +import { ClassHelpers, Taon } from 'taon/src'; import { SharedContext } from '../shared.context'; import { Admin } from './admin'; import { User } from '../user/user'; import { UserController } from '../user/user.controller'; -@Firedev.Controller({ +@Taon.Controller({ className: 'AdminController', }) export class AdminController extends UserController { diff --git a/projects/container-v18/examples-v18/inject-tests/src/lib/shared/admin/admin.ts b/projects/container-v18/examples-v18/inject-tests/src/lib/shared/admin/admin.ts index e68f51b1..14d7c7b8 100644 --- a/projects/container-v18/examples-v18/inject-tests/src/lib/shared/admin/admin.ts +++ b/projects/container-v18/examples-v18/inject-tests/src/lib/shared/admin/admin.ts @@ -1,13 +1,13 @@ -import { Firedev } from 'firedev/src'; +import { Taon } from 'taon/src'; import { User } from '../user/user'; -@Firedev.Entity({ +@Taon.Entity({ className: 'Admin', createTable: true, }) export class Admin extends User { //#region @websql - @Firedev.Orm.Column.String() + @Taon.Orm.Column.String() //#endregion permissions: string; } diff --git a/projects/container-v18/examples-v18/inject-tests/src/lib/shared/session/sesison.ts b/projects/container-v18/examples-v18/inject-tests/src/lib/shared/session/sesison.ts index 91912ac7..d04e156f 100644 --- a/projects/container-v18/examples-v18/inject-tests/src/lib/shared/session/sesison.ts +++ b/projects/container-v18/examples-v18/inject-tests/src/lib/shared/session/sesison.ts @@ -1,16 +1,16 @@ -import { Firedev } from 'firedev/src'; +import { Taon } from 'taon/src'; -@Firedev.Entity({ +@Taon.Entity({ className: 'Session', }) -export class Session extends Firedev.Base.Entity { +export class Session extends Taon.Base.Entity { //#region @websql - @Firedev.Orm.Column.Generated() + @Taon.Orm.Column.Generated() //#endregion id: string; //#region @websql - @Firedev.Orm.Column.Number() + @Taon.Orm.Column.Number() //#endregion timeout: number; } diff --git a/projects/container-v18/examples-v18/inject-tests/src/lib/shared/session/session.controller.ts b/projects/container-v18/examples-v18/inject-tests/src/lib/shared/session/session.controller.ts index e4c125c0..6c93c18d 100644 --- a/projects/container-v18/examples-v18/inject-tests/src/lib/shared/session/session.controller.ts +++ b/projects/container-v18/examples-v18/inject-tests/src/lib/shared/session/session.controller.ts @@ -1,15 +1,15 @@ -import { Firedev } from 'firedev/src'; +import { Taon } from 'taon/src'; import { SharedContext } from '../shared.context'; import { Session } from './sesison'; -import { EntityOptions } from 'firedev-typeorm/src'; +import { EntityOptions } from 'taon-typeorm/src'; import { Admin } from '../admin/admin'; import { AdminController } from '../admin/admin.controller'; import { UserRepository } from '../user/user.repository'; -@Firedev.Controller({ +@Taon.Controller({ className: 'SessionController', }) -export class SessionController extends Firedev.Base.CrudController { +export class SessionController extends Taon.Base.CrudController { entityClassResolveFn = () => Session; userCustomRepo = this.injectCustomRepo(UserRepository); diff --git a/projects/container-v18/examples-v18/inject-tests/src/lib/shared/shared.context.ts b/projects/container-v18/examples-v18/inject-tests/src/lib/shared/shared.context.ts index 63139efe..2c117bb3 100644 --- a/projects/container-v18/examples-v18/inject-tests/src/lib/shared/shared.context.ts +++ b/projects/container-v18/examples-v18/inject-tests/src/lib/shared/shared.context.ts @@ -1,4 +1,4 @@ -import { BaseContext, Firedev, createContext } from 'firedev/src'; +import { BaseContext, Taon, createContext } from 'taon/src'; import { Session } from './session/sesison'; import { User } from './user/user'; import { UserController } from './user/user.controller'; diff --git a/projects/container-v18/examples-v18/inject-tests/src/lib/shared/user/user.controller.ts b/projects/container-v18/examples-v18/inject-tests/src/lib/shared/user/user.controller.ts index bc93017a..ff6c169c 100644 --- a/projects/container-v18/examples-v18/inject-tests/src/lib/shared/user/user.controller.ts +++ b/projects/container-v18/examples-v18/inject-tests/src/lib/shared/user/user.controller.ts @@ -1,12 +1,12 @@ -import { ClassHelpers, Firedev } from 'firedev/src'; +import { ClassHelpers, Taon } from 'taon/src'; import { SharedContext } from '../shared.context'; import { User } from './user'; import { UserRepository } from './user.repository'; -@Firedev.Controller({ +@Taon.Controller({ className: 'UserController', }) -export class UserController extends Firedev.Base.CrudController { +export class UserController extends Taon.Base.CrudController { entityClassResolveFn = () => User; backend?: UserRepository = this.injectCustomRepo(UserRepository); diff --git a/projects/container-v18/examples-v18/inject-tests/src/lib/shared/user/user.repository.ts b/projects/container-v18/examples-v18/inject-tests/src/lib/shared/user/user.repository.ts index 34e0d39d..3ae9be27 100644 --- a/projects/container-v18/examples-v18/inject-tests/src/lib/shared/user/user.repository.ts +++ b/projects/container-v18/examples-v18/inject-tests/src/lib/shared/user/user.repository.ts @@ -1,10 +1,10 @@ -import { Firedev } from 'firedev/src'; +import { Taon } from 'taon/src'; import { User } from './user'; -@Firedev.Repository({ +@Taon.Repository({ className: 'UserRepository', }) -export class UserRepository extends Firedev.Base.Repository { +export class UserRepository extends Taon.Base.Repository { entityClassResolveFn = () => User; amCustomRepository = 'testingisnoin'; async findByEmail(email: string) { diff --git a/projects/container-v18/examples-v18/inject-tests/src/lib/shared/user/user.ts b/projects/container-v18/examples-v18/inject-tests/src/lib/shared/user/user.ts index a511a498..56b06fe8 100644 --- a/projects/container-v18/examples-v18/inject-tests/src/lib/shared/user/user.ts +++ b/projects/container-v18/examples-v18/inject-tests/src/lib/shared/user/user.ts @@ -1,31 +1,31 @@ -import { Firedev } from 'firedev/src'; +import { Taon } from 'taon/src'; -@Firedev.Entity({ +@Taon.Entity({ className: 'User', createTable: true, }) -export class User extends Firedev.Base.Entity { +export class User extends Taon.Base.Entity { //#region @websql - @Firedev.Orm.Column.Generated() + @Taon.Orm.Column.Generated() //#endregion id: string; //#region @websql - @Firedev.Orm.Column.String() + @Taon.Orm.Column.String() //#endregion name: string; //#region @websql - @Firedev.Orm.Column.String() + @Taon.Orm.Column.String() //#endregion email: string; //#region @websql - @Firedev.Orm.Column.String() + @Taon.Orm.Column.String() //#endregion password: string; //#region @websql - @Firedev.Orm.Column.String() + @Taon.Orm.Column.String() //#endregion theme: string; } diff --git a/projects/container-v18/examples-v18/multiple-contexts-inheritance/package.json b/projects/container-v18/examples-v18/multiple-contexts-inheritance/package.json index 775ac6ca..93534c0d 100644 --- a/projects/container-v18/examples-v18/multiple-contexts-inheritance/package.json +++ b/projects/container-v18/examples-v18/multiple-contexts-inheritance/package.json @@ -153,14 +153,14 @@ "file-loader": "1.1.5", "file-saver": "2.0.5", "file-type": "18.5.0", - "firedev": "^16", - "firedev-crud": "~16.5.67", - "firedev-crud-deamon": "~16.5.21", - "firedev-ports": "~16.5.23", - "firedev-storage": "~16.5.19", - "firedev-type-sql": "~16.5.19", - "firedev-typeorm": "~16.5.21", - "firedev-ui": "~16.5.20", + "taon": "^16", + "taon-crud": "~16.5.67", + "taon-crud-deamon": "~16.5.21", + "taon-ports": "~16.5.23", + "taon-storage": "~16.5.19", + "taon-type-sql": "~16.5.19", + "taon-typeorm": "~16.5.21", + "taon-ui": "~16.5.20", "fkill": "6.1.0", "font-awesome": "4.7.0", "form-data": "4.0.0", diff --git a/projects/container-v18/examples-v18/package.json b/projects/container-v18/examples-v18/package.json index 553277ed..0301b70b 100644 --- a/projects/container-v18/examples-v18/package.json +++ b/projects/container-v18/examples-v18/package.json @@ -169,14 +169,14 @@ "file-loader": "1.1.5", "file-saver": "2.0.5", "file-type": "18.5.0", - "firedev": "~16.100.19", - "firedev-crud": "~16.444.8", - "firedev-crud-deamon": "~16.444.8", - "firedev-ports": "~16.444.8", - "firedev-storage": "~16.444.5", - "firedev-type-sql": "~16.444.8", - "firedev-typeorm": "~16.444.5", - "firedev-ui": "~16.444.1", + "taon": "~16.100.19", + "taon-crud": "~16.444.8", + "taon-crud-deamon": "~16.444.8", + "taon-ports": "~16.444.8", + "taon-storage": "~16.444.5", + "taon-type-sql": "~16.444.8", + "taon-typeorm": "~16.444.5", + "taon-ui": "~16.444.1", "fkill": "6.1.0", "font-awesome": "4.7.0", "form-data": "4.0.0", @@ -328,4 +328,4 @@ }, "devDependencies": {}, "main": "dist/app.electron.js" -} \ No newline at end of file +} diff --git a/projects/container-v18/examples-v18/realtime-subscribers/.gitignore b/projects/container-v18/examples-v18/realtime-subscribers/.gitignore index ce9f20a1..ff22cf1c 100644 --- a/projects/container-v18/examples-v18/realtime-subscribers/.gitignore +++ b/projects/container-v18/examples-v18/realtime-subscribers/.gitignore @@ -64,8 +64,8 @@ Thumbs.db /tsconfig.backend.dist.json.filetemplate /tsconfig.backend.dist.json # ===================== -!firedev.json -!firedev.jsonc +!taon.json +!taon.jsonc *.filetemplate diff --git a/projects/container-v18/examples-v18/realtime-subscribers/.prettierignore b/projects/container-v18/examples-v18/realtime-subscribers/.prettierignore index a1b53764..a89e1fe3 100644 --- a/projects/container-v18/examples-v18/realtime-subscribers/.prettierignore +++ b/projects/container-v18/examples-v18/realtime-subscribers/.prettierignore @@ -1,5 +1,5 @@ -# This file is generated by firedev +# This file is generated by taon /build /coverage /e2e @@ -25,4 +25,3 @@ tmp-* /module /www - \ No newline at end of file diff --git a/projects/container-v18/examples-v18/realtime-subscribers/package.json b/projects/container-v18/examples-v18/realtime-subscribers/package.json index 8b652759..e16ee483 100644 --- a/projects/container-v18/examples-v18/realtime-subscribers/package.json +++ b/projects/container-v18/examples-v18/realtime-subscribers/package.json @@ -149,14 +149,14 @@ "file-loader": "1.1.5", "file-saver": "2.0.5", "file-type": "18.5.0", - "firedev": "^16", - "firedev-crud": "~16.444.6", - "firedev-crud-deamon": "~16.444.7", - "firedev-ports": "~16.444.6", - "firedev-storage": "~16.444.5", - "firedev-type-sql": "~16.444.6", - "firedev-typeorm": "~16.444.5", - "firedev-ui": "~16.444.1", + "taon": "^16", + "taon-crud": "~16.444.6", + "taon-crud-deamon": "~16.444.7", + "taon-ports": "~16.444.6", + "taon-storage": "~16.444.5", + "taon-type-sql": "~16.444.6", + "taon-typeorm": "~16.444.5", + "taon-ui": "~16.444.1", "fkill": "6.1.0", "font-awesome": "4.7.0", "form-data": "4.0.0", @@ -450,14 +450,14 @@ "file-loader": "1.1.5", "file-saver": "2.0.5", "file-type": "18.5.0", - "firedev": "^16", - "firedev-crud": "~16.444.6", - "firedev-crud-deamon": "~16.444.7", - "firedev-ports": "~16.444.6", - "firedev-storage": "~16.444.5", - "firedev-type-sql": "~16.444.6", - "firedev-typeorm": "~16.444.5", - "firedev-ui": "~16.444.1", + "taon": "^16", + "taon-crud": "~16.444.6", + "taon-crud-deamon": "~16.444.7", + "taon-ports": "~16.444.6", + "taon-storage": "~16.444.5", + "taon-type-sql": "~16.444.6", + "taon-typeorm": "~16.444.5", + "taon-ui": "~16.444.1", "fkill": "6.1.0", "font-awesome": "4.7.0", "form-data": "4.0.0", diff --git a/projects/container-v18/examples-v18/realtime-subscribers/src/app.ts b/projects/container-v18/examples-v18/realtime-subscribers/src/app.ts index 78944bec..693f493c 100644 --- a/projects/container-v18/examples-v18/realtime-subscribers/src/app.ts +++ b/projects/container-v18/examples-v18/realtime-subscribers/src/app.ts @@ -1,5 +1,5 @@ //#region imports -import { Firedev, BaseContext } from 'firedev/src'; +import { Taon, BaseContext } from 'taon/src'; import { Observable, map } from 'rxjs'; import { CLIENT_DEV_NORMAL_APP_PORT, @@ -61,7 +61,7 @@ export class RealtimeSubscribersComponent { providedIn: 'root', }) export class UserApiService { - userControlller = Firedev.inject(() => MainContext.getClass(UserController)); + userControlller = Taon.inject(() => MainContext.getClass(UserController)); getAll() { return this.userControlller .getAll() @@ -83,19 +83,19 @@ export class RealtimeSubscribersModule {} //#endregion //#region realtime-subscribers entity -@Firedev.Entity({ className: 'User' }) -class User extends Firedev.Base.AbstractEntity { +@Taon.Entity({ className: 'User' }) +class User extends Taon.Base.AbstractEntity { public static ctrl?: UserController; //#region @websql - @Firedev.Orm.Column.String() + @Taon.Orm.Column.String() //#endregion name?: string; } //#endregion //#region realtime-subscribers controller -@Firedev.Controller({ className: 'UserController' }) -class UserController extends Firedev.Base.CrudController { +@Taon.Controller({ className: 'UserController' }) +class UserController extends Taon.Base.CrudController { entityClassResolveFn = () => User; //#region @websql async initExampleDbData(): Promise { @@ -108,7 +108,7 @@ class UserController extends Firedev.Base.CrudController { //#endregion //#region realtime-subscribers context -const MainContext = Firedev.createContext(() => ({ +const MainContext = Taon.createContext(() => ({ host: host1, useIpcWhenElectron: true, frontendHost: frontendHost1, @@ -127,7 +127,7 @@ const MainContext = Firedev.createContext(() => ({ //#endregion //#region realtime-subscribers context -// const MainContext2 = Firedev.createContext(() => ({ +// const MainContext2 = Taon.createContext(() => ({ // host: host2, // useIpcWhenElectron: true, // frontendHost: frontendHost1, @@ -181,7 +181,7 @@ async function start() { notifyUser(); //#endregion - if (Firedev.isBrowser) { + if (Taon.isBrowser) { const users = (await MainContext.getClassInstance(UserController).getAll().received) .body?.json; diff --git a/projects/container-v18/examples-v18/single-file/.gitignore b/projects/container-v18/examples-v18/single-file/.gitignore index a6d6cf1e..bbcceccf 100644 --- a/projects/container-v18/examples-v18/single-file/.gitignore +++ b/projects/container-v18/examples-v18/single-file/.gitignore @@ -54,8 +54,8 @@ Thumbs.db /run.js /run-org.js # ===================== -!firedev.json -!firedev.jsonc +!taon.json +!taon.jsonc *.filetemplate diff --git a/projects/container-v18/examples-v18/single-file/.prettierignore b/projects/container-v18/examples-v18/single-file/.prettierignore index a1b53764..a89e1fe3 100644 --- a/projects/container-v18/examples-v18/single-file/.prettierignore +++ b/projects/container-v18/examples-v18/single-file/.prettierignore @@ -1,5 +1,5 @@ -# This file is generated by firedev +# This file is generated by taon /build /coverage /e2e @@ -25,4 +25,3 @@ tmp-* /module /www - \ No newline at end of file diff --git a/projects/container-v18/examples-v18/single-file/package.json b/projects/container-v18/examples-v18/single-file/package.json index 6dc4674c..7424fc4d 100644 --- a/projects/container-v18/examples-v18/single-file/package.json +++ b/projects/container-v18/examples-v18/single-file/package.json @@ -168,14 +168,14 @@ "file-loader": "1.1.11", "file-saver": "2.0.5", "file-type": "19.1.1", - "firedev": "^18", - "firedev-crud": "~16.444.15", - "firedev-crud-deamon": "~16.444.15", - "firedev-ports": "~16.444.15", - "firedev-storage": "~16.444.11", - "firedev-type-sql": "~16.444.15", - "firedev-typeorm": "~16.444.11", - "firedev-ui": "~16.444.1", + "taon": "^18", + "taon-crud": "~16.444.15", + "taon-crud-deamon": "~16.444.15", + "taon-ports": "~16.444.15", + "taon-storage": "~16.444.11", + "taon-type-sql": "~16.444.15", + "taon-typeorm": "~16.444.11", + "taon-ui": "~16.444.1", "fkill": "6.1.0", "font-awesome": "4.7.0", "form-data": "4.0.0", diff --git a/projects/container-v18/examples-v18/single-file/src/app.ts b/projects/container-v18/examples-v18/single-file/src/app.ts index e12cf51b..2d85f1ec 100644 --- a/projects/container-v18/examples-v18/single-file/src/app.ts +++ b/projects/container-v18/examples-v18/single-file/src/app.ts @@ -1,5 +1,5 @@ //#region imports -import { Firedev, BaseContext } from 'firedev/src'; +import { Taon, BaseContext } from 'taon/src'; import { Observable, map } from 'rxjs'; import { HOST_BACKEND_PORT } from './app.hosts'; //#region @browser @@ -42,7 +42,7 @@ export class IsomorphicLibComponent { providedIn:'root' }) export class UserApiService { - userControlller = Firedev.inject(()=> MainContext.getClass(UserController)) + userControlller = Taon.inject(()=> MainContext.getClass(UserController)) getAll() { return this.userControlller.getAll() .received @@ -65,18 +65,18 @@ export class IsomorphicLibModule { } //#endregion //#region isomorphic-lib entity -@Firedev.Entity({ className: 'User' }) -class User extends Firedev.Base.AbstractEntity { +@Taon.Entity({ className: 'User' }) +class User extends Taon.Base.AbstractEntity { //#region @websql - @Firedev.Orm.Column.String() + @Taon.Orm.Column.String() //#endregion name?: string; } //#endregion //#region isomorphic-lib controller -@Firedev.Controller({ className: 'UserController' }) -class UserController extends Firedev.Base.CrudController { +@Taon.Controller({ className: 'UserController' }) +class UserController extends Taon.Base.CrudController { entityClassResolveFn = ()=> User; //#region @websql async initExampleDbData(): Promise { @@ -89,7 +89,7 @@ class UserController extends Firedev.Base.CrudController { //#endregion //#region isomorphic-lib context -const MainContext = Firedev.createContext(()=>({ +const MainContext = Taon.createContext(()=>({ host, contextName: 'MainContext', contexts:{ BaseContext }, @@ -110,7 +110,7 @@ async function start() { await MainContext.initialize(); - if (Firedev.isBrowser) { + if (Taon.isBrowser) { const users = (await MainContext.getClassInstance(UserController).getAll().received) .body?.json; console.log({ diff --git a/projects/container-v18/examples-v18/subscriber-inject/.gitignore b/projects/container-v18/examples-v18/subscriber-inject/.gitignore index de1fabab..6c0d3870 100644 --- a/projects/container-v18/examples-v18/subscriber-inject/.gitignore +++ b/projects/container-v18/examples-v18/subscriber-inject/.gitignore @@ -53,8 +53,8 @@ Thumbs.db /run.js /run-org.js # ===================== -!firedev.json -!firedev.jsonc +!taon.json +!taon.jsonc *.filetemplate diff --git a/projects/container-v18/examples-v18/subscriber-inject/.prettierignore b/projects/container-v18/examples-v18/subscriber-inject/.prettierignore index a1b53764..a89e1fe3 100644 --- a/projects/container-v18/examples-v18/subscriber-inject/.prettierignore +++ b/projects/container-v18/examples-v18/subscriber-inject/.prettierignore @@ -1,5 +1,5 @@ -# This file is generated by firedev +# This file is generated by taon /build /coverage /e2e @@ -25,4 +25,3 @@ tmp-* /module /www - \ No newline at end of file diff --git a/projects/container-v18/examples-v18/subscriber-inject/package.json b/projects/container-v18/examples-v18/subscriber-inject/package.json index 8997bc33..468eeb22 100644 --- a/projects/container-v18/examples-v18/subscriber-inject/package.json +++ b/projects/container-v18/examples-v18/subscriber-inject/package.json @@ -148,14 +148,14 @@ "file-loader": "1.1.5", "file-saver": "2.0.5", "file-type": "18.5.0", - "firedev": "^16", - "firedev-crud": "~16.444.12", - "firedev-crud-deamon": "~16.444.12", - "firedev-ports": "~16.444.12", - "firedev-storage": "~16.444.8", - "firedev-type-sql": "~16.444.12", - "firedev-typeorm": "~16.444.8", - "firedev-ui": "~16.444.1", + "taon": "^16", + "taon-crud": "~16.444.12", + "taon-crud-deamon": "~16.444.12", + "taon-ports": "~16.444.12", + "taon-storage": "~16.444.8", + "taon-type-sql": "~16.444.12", + "taon-typeorm": "~16.444.8", + "taon-ui": "~16.444.1", "fkill": "6.1.0", "font-awesome": "4.7.0", "form-data": "4.0.0", @@ -449,14 +449,14 @@ "file-loader": "1.1.5", "file-saver": "2.0.5", "file-type": "18.5.0", - "firedev": "^16", - "firedev-crud": "~16.444.12", - "firedev-crud-deamon": "~16.444.12", - "firedev-ports": "~16.444.12", - "firedev-storage": "~16.444.8", - "firedev-type-sql": "~16.444.12", - "firedev-typeorm": "~16.444.8", - "firedev-ui": "~16.444.1", + "taon": "^16", + "taon-crud": "~16.444.12", + "taon-crud-deamon": "~16.444.12", + "taon-ports": "~16.444.12", + "taon-storage": "~16.444.8", + "taon-type-sql": "~16.444.12", + "taon-typeorm": "~16.444.8", + "taon-ui": "~16.444.1", "fkill": "6.1.0", "font-awesome": "4.7.0", "form-data": "4.0.0", diff --git a/projects/container-v18/examples-v18/subscriber-inject/src/app.context.ts b/projects/container-v18/examples-v18/subscriber-inject/src/app.context.ts index ed9df94d..69685041 100644 --- a/projects/container-v18/examples-v18/subscriber-inject/src/app.context.ts +++ b/projects/container-v18/examples-v18/subscriber-inject/src/app.context.ts @@ -1,4 +1,4 @@ -import { Firedev, BaseContext } from 'firedev/src'; +import { Taon, BaseContext } from 'taon/src'; import { HOST_BACKEND_PORT } from './app.hosts'; import { UserController } from './app/user.controller'; import { User } from './app/user'; @@ -6,7 +6,7 @@ import { UserSubscriber } from './app/user.subscriber'; const host = 'http://localhost:' + HOST_BACKEND_PORT; -export const AppContext = Firedev.createContext(() => ({ +export const AppContext = Taon.createContext(() => ({ host, contextName: 'AppContext', contexts: { BaseContext }, diff --git a/projects/container-v18/examples-v18/subscriber-inject/src/app.ts b/projects/container-v18/examples-v18/subscriber-inject/src/app.ts index 5ee3d82f..512d5a79 100644 --- a/projects/container-v18/examples-v18/subscriber-inject/src/app.ts +++ b/projects/container-v18/examples-v18/subscriber-inject/src/app.ts @@ -5,7 +5,7 @@ import { CommonModule } from '@angular/common'; import { SubscriberInjectComponent } from './app/user.component'; export { SubscriberInjectModule } from './app/user.module'; //#endregion -import { Firedev } from 'firedev/src'; +import { Taon } from 'taon/src'; import { AppContext } from './app.context'; import { UserController } from './app/user.controller'; import { UserSubscriber } from './app/user.subscriber'; @@ -14,7 +14,7 @@ import { UserSubscriber } from './app/user.subscriber'; async function start() { await AppContext.initialize(); - if (Firedev.isBrowser) { + if (Taon.isBrowser) { const userController = AppContext.getClassInstance(UserController); const users = (await userController.getAll().received).body?.json; console.log({ diff --git a/projects/container-v18/examples-v18/subscriber-inject/src/app/user-api.service.ts b/projects/container-v18/examples-v18/subscriber-inject/src/app/user-api.service.ts index 2e4f2715..b0bc4eda 100644 --- a/projects/container-v18/examples-v18/subscriber-inject/src/app/user-api.service.ts +++ b/projects/container-v18/examples-v18/subscriber-inject/src/app/user-api.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { Firedev } from 'firedev/src'; +import { Taon } from 'taon/src'; import { AppContext } from '../app.context'; import { UserController } from './user.controller'; import { map } from 'rxjs'; @@ -9,8 +9,8 @@ import { UserSubscriber } from './user.subscriber'; providedIn: 'root', }) export class UserApiService { - userControlller = Firedev.inject(() => AppContext.getClass(UserController)); - userCustomevent = Firedev.injectSubscriberEvents( + userControlller = Taon.inject(() => AppContext.getClass(UserController)); + userCustomevent = Taon.injectSubscriberEvents( () => AppContext.getClass(UserSubscriber), 'customEvent', ); diff --git a/projects/container-v18/examples-v18/subscriber-inject/src/app/user.controller.ts b/projects/container-v18/examples-v18/subscriber-inject/src/app/user.controller.ts index 996c9f6d..3f8f76a9 100644 --- a/projects/container-v18/examples-v18/subscriber-inject/src/app/user.controller.ts +++ b/projects/container-v18/examples-v18/subscriber-inject/src/app/user.controller.ts @@ -1,9 +1,9 @@ -import { Firedev } from 'firedev/src'; +import { Taon } from 'taon/src'; import { User } from './user'; import { UserSubscriber } from './user.subscriber'; -@Firedev.Controller({ className: 'UserController' }) -export class UserController extends Firedev.Base.CrudController { +@Taon.Controller({ className: 'UserController' }) +export class UserController extends Taon.Base.CrudController { entityClassResolveFn = () => User; //#region @websql diff --git a/projects/container-v18/examples-v18/subscriber-inject/src/app/user.subscriber.ts b/projects/container-v18/examples-v18/subscriber-inject/src/app/user.subscriber.ts index 368fcce1..f6ead790 100644 --- a/projects/container-v18/examples-v18/subscriber-inject/src/app/user.subscriber.ts +++ b/projects/container-v18/examples-v18/subscriber-inject/src/app/user.subscriber.ts @@ -1,10 +1,10 @@ -import { Firedev } from "firedev/src"; +import { Taon } from "taon/src"; import { User } from "./user"; -@Firedev.Subscriber({ +@Taon.Subscriber({ className: 'UserSubscriber', }) -export class UserSubscriber extends Firedev.Base.Subscriber { +export class UserSubscriber extends Taon.Base.Subscriber { // listenTo() { // return User; // } diff --git a/projects/container-v18/examples-v18/subscriber-inject/src/app/user.ts b/projects/container-v18/examples-v18/subscriber-inject/src/app/user.ts index 274dd548..c0b4b958 100644 --- a/projects/container-v18/examples-v18/subscriber-inject/src/app/user.ts +++ b/projects/container-v18/examples-v18/subscriber-inject/src/app/user.ts @@ -1,9 +1,9 @@ -import { Firedev } from "firedev/src"; +import { Taon } from "taon/src"; -@Firedev.Entity({ className: 'User' }) -export class User extends Firedev.Base.AbstractEntity { +@Taon.Entity({ className: 'User' }) +export class User extends Taon.Base.AbstractEntity { //#region @websql - @Firedev.Orm.Column.String() + @Taon.Orm.Column.String() //#endregion name?: string; } diff --git a/projects/container-v18/gen-examples/app-extended/my-entity/app.html b/projects/container-v18/gen-examples-v18/app-extended/my-entity/app.html similarity index 100% rename from projects/container-v18/gen-examples/app-extended/my-entity/app.html rename to projects/container-v18/gen-examples-v18/app-extended/my-entity/app.html diff --git a/projects/container-v18/gen-examples/app-extended/my-entity/app.scss b/projects/container-v18/gen-examples-v18/app-extended/my-entity/app.scss similarity index 100% rename from projects/container-v18/gen-examples/app-extended/my-entity/app.scss rename to projects/container-v18/gen-examples-v18/app-extended/my-entity/app.scss diff --git a/projects/container-v18/gen-examples/app-extended/my-entity/app.ts b/projects/container-v18/gen-examples-v18/app-extended/my-entity/app.ts similarity index 89% rename from projects/container-v18/gen-examples/app-extended/my-entity/app.ts rename to projects/container-v18/gen-examples-v18/app-extended/my-entity/app.ts index e2343b1e..abb0bc13 100644 --- a/projects/container-v18/gen-examples/app-extended/my-entity/app.ts +++ b/projects/container-v18/gen-examples-v18/app-extended/my-entity/app.ts @@ -1,5 +1,5 @@ //#region imports -import { Firedev } from 'firedev'; +import { Taon } from 'taon'; import { _ } from 'tnp-core'; const host = 'http://localhost:4199'; //#region @browser @@ -53,7 +53,7 @@ export class MyEntityModule { } //#endregion //#endregion -var MainContext = Firedev.createContext(()=>({ +var MainContext = Taon.createContext(()=>({ contextName: 'MainContext', host, controllers: { @@ -65,13 +65,13 @@ var MainContext = Firedev.createContext(()=>({ database: true, })); -//#region firedev start function +//#region taon start function async function start() { - // Firedev.enableProductionMode(); + // Taon.enableProductionMode(); await MainContext.initialize(); //#region @backend - if (Firedev.isNode) { + if (Taon.isNode) { context.node.app.get('/hello', (req, res) => { res.send('Hello my-entity') }) diff --git a/projects/container-v18/gen-examples/dummy-angular-lazy-module-container/my-entity/my-entity.container.html b/projects/container-v18/gen-examples-v18/dummy-angular-lazy-module-container/my-entity/my-entity.container.html similarity index 100% rename from projects/container-v18/gen-examples/dummy-angular-lazy-module-container/my-entity/my-entity.container.html rename to projects/container-v18/gen-examples-v18/dummy-angular-lazy-module-container/my-entity/my-entity.container.html diff --git a/projects/container-v18/gen-examples/dummy-angular-lazy-module-container/my-entity/my-entity.container.module.ts b/projects/container-v18/gen-examples-v18/dummy-angular-lazy-module-container/my-entity/my-entity.container.module.ts similarity index 100% rename from projects/container-v18/gen-examples/dummy-angular-lazy-module-container/my-entity/my-entity.container.module.ts rename to projects/container-v18/gen-examples-v18/dummy-angular-lazy-module-container/my-entity/my-entity.container.module.ts diff --git a/projects/container-v18/gen-examples/dummy-angular-lazy-module-container/my-entity/my-entity.container.scss b/projects/container-v18/gen-examples-v18/dummy-angular-lazy-module-container/my-entity/my-entity.container.scss similarity index 100% rename from projects/container-v18/gen-examples/dummy-angular-lazy-module-container/my-entity/my-entity.container.scss rename to projects/container-v18/gen-examples-v18/dummy-angular-lazy-module-container/my-entity/my-entity.container.scss diff --git a/projects/container-v18/gen-examples/dummy-angular-lazy-module-container/my-entity/my-entity.container.ts b/projects/container-v18/gen-examples-v18/dummy-angular-lazy-module-container/my-entity/my-entity.container.ts similarity index 81% rename from projects/container-v18/gen-examples/dummy-angular-lazy-module-container/my-entity/my-entity.container.ts rename to projects/container-v18/gen-examples-v18/dummy-angular-lazy-module-container/my-entity/my-entity.container.ts index d7be64dd..fcdfacc3 100644 --- a/projects/container-v18/gen-examples/dummy-angular-lazy-module-container/my-entity/my-entity.container.ts +++ b/projects/container-v18/gen-examples-v18/dummy-angular-lazy-module-container/my-entity/my-entity.container.ts @@ -1,5 +1,5 @@ //#region imports -import { Component, Input, OnInit } from '@angular/core'; +import { Component, Input, OnInit, ChangeDetectionStrategy } from '@angular/core'; import { Subscription } from 'rxjs'; import { _ } from 'tnp-core'; //#endregion @@ -9,6 +9,7 @@ import { _ } from 'tnp-core'; selector: 'app-my-entity', templateUrl: './my-entity.container.html', styleUrls: ['./my-entity.container.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, //#endregion }) export class MyEntityContainer { diff --git a/projects/container-v18/gen-examples/dummy-angular-lazy-module/my-entity/my-entity.component.html b/projects/container-v18/gen-examples-v18/dummy-angular-lazy-module/my-entity/my-entity.component.html similarity index 100% rename from projects/container-v18/gen-examples/dummy-angular-lazy-module/my-entity/my-entity.component.html rename to projects/container-v18/gen-examples-v18/dummy-angular-lazy-module/my-entity/my-entity.component.html diff --git a/projects/container-v18/gen-examples/dummy-angular-lazy-module/my-entity/my-entity.component.scss b/projects/container-v18/gen-examples-v18/dummy-angular-lazy-module/my-entity/my-entity.component.scss similarity index 100% rename from projects/container-v18/gen-examples/dummy-angular-lazy-module/my-entity/my-entity.component.scss rename to projects/container-v18/gen-examples-v18/dummy-angular-lazy-module/my-entity/my-entity.component.scss diff --git a/projects/container-v18/gen-examples/dummy-angular-lazy-module/my-entity/my-entity.component.ts b/projects/container-v18/gen-examples-v18/dummy-angular-lazy-module/my-entity/my-entity.component.ts similarity index 64% rename from projects/container-v18/gen-examples/dummy-angular-lazy-module/my-entity/my-entity.component.ts rename to projects/container-v18/gen-examples-v18/dummy-angular-lazy-module/my-entity/my-entity.component.ts index 98fcf821..524f857c 100644 --- a/projects/container-v18/gen-examples/dummy-angular-lazy-module/my-entity/my-entity.component.ts +++ b/projects/container-v18/gen-examples-v18/dummy-angular-lazy-module/my-entity/my-entity.component.ts @@ -1,5 +1,5 @@ //#region imports -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core'; import { Subscription } from 'rxjs'; import { _ } from 'tnp-core'; //#endregion @@ -8,7 +8,8 @@ import { _ } from 'tnp-core'; //#region component options selector: 'app-my-entity', templateUrl: './my-entity.component.html', - styleUrls: ['./my-entity.component.scss'] + styleUrls: ['./my-entity.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, //#endregion }) export class MyEntityComponent { diff --git a/projects/container-v18/gen-examples/dummy-angular-lazy-module/my-entity/my-entity.module.ts b/projects/container-v18/gen-examples-v18/dummy-angular-lazy-module/my-entity/my-entity.module.ts similarity index 100% rename from projects/container-v18/gen-examples/dummy-angular-lazy-module/my-entity/my-entity.module.ts rename to projects/container-v18/gen-examples-v18/dummy-angular-lazy-module/my-entity/my-entity.module.ts diff --git a/projects/container-v18/gen-examples/dummy-angular-module/my-entity/my-entity.component.html b/projects/container-v18/gen-examples-v18/dummy-angular-module/my-entity/my-entity.component.html similarity index 100% rename from projects/container-v18/gen-examples/dummy-angular-module/my-entity/my-entity.component.html rename to projects/container-v18/gen-examples-v18/dummy-angular-module/my-entity/my-entity.component.html diff --git a/projects/container-v18/gen-examples/dummy-angular-module/my-entity/my-entity.component.scss b/projects/container-v18/gen-examples-v18/dummy-angular-module/my-entity/my-entity.component.scss similarity index 100% rename from projects/container-v18/gen-examples/dummy-angular-module/my-entity/my-entity.component.scss rename to projects/container-v18/gen-examples-v18/dummy-angular-module/my-entity/my-entity.component.scss diff --git a/projects/container-v18/gen-examples/dummy-angular-module/my-entity/my-entity.component.ts b/projects/container-v18/gen-examples-v18/dummy-angular-module/my-entity/my-entity.component.ts similarity index 57% rename from projects/container-v18/gen-examples/dummy-angular-module/my-entity/my-entity.component.ts rename to projects/container-v18/gen-examples-v18/dummy-angular-module/my-entity/my-entity.component.ts index 5caec07a..48bf82ae 100644 --- a/projects/container-v18/gen-examples/dummy-angular-module/my-entity/my-entity.component.ts +++ b/projects/container-v18/gen-examples-v18/dummy-angular-module/my-entity/my-entity.component.ts @@ -1,20 +1,27 @@ -import { Component, EventEmitter, HostBinding, Input, OnInit, Output } from '@angular/core'; +import { + Component, + EventEmitter, + HostBinding, + Input, + OnInit, + Output, + ChangeDetectionStrategy, +} from '@angular/core'; import { Subscription } from 'rxjs'; // import { _ } from 'tnp-core'; @Component({ selector: 'app-my-entity', templateUrl: './my-entity.component.html', - styleUrls: ['./my-entity.component.scss'] + styleUrls: ['./my-entity.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, }) export class MyEntityComponent { @HostBinding('style.minHeight.px') @Input() height: number = 100; @Output() myEntityDataChanged = new EventEmitter(); @Input() myEntityData: any = {}; - constructor() { } + constructor() {} - ngOnInit() { - } + ngOnInit() {} } - diff --git a/projects/container-v18/gen-examples/dummy-angular-module/my-entity/my-entity.module.ts b/projects/container-v18/gen-examples-v18/dummy-angular-module/my-entity/my-entity.module.ts similarity index 100% rename from projects/container-v18/gen-examples/dummy-angular-module/my-entity/my-entity.module.ts rename to projects/container-v18/gen-examples-v18/dummy-angular-module/my-entity/my-entity.module.ts diff --git a/projects/container-v18/gen-examples/dummy-angular-standalone-component/my-entity/my-entity.component.html b/projects/container-v18/gen-examples-v18/dummy-angular-standalone-component/my-entity/my-entity.component.html similarity index 100% rename from projects/container-v18/gen-examples/dummy-angular-standalone-component/my-entity/my-entity.component.html rename to projects/container-v18/gen-examples-v18/dummy-angular-standalone-component/my-entity/my-entity.component.html diff --git a/projects/container-v18/gen-examples/dummy-angular-standalone-component/my-entity/my-entity.component.scss b/projects/container-v18/gen-examples-v18/dummy-angular-standalone-component/my-entity/my-entity.component.scss similarity index 100% rename from projects/container-v18/gen-examples/dummy-angular-standalone-component/my-entity/my-entity.component.scss rename to projects/container-v18/gen-examples-v18/dummy-angular-standalone-component/my-entity/my-entity.component.scss diff --git a/projects/container-v18/gen-examples-v18/dummy-angular-standalone-component/my-entity/my-entity.component.ts b/projects/container-v18/gen-examples-v18/dummy-angular-standalone-component/my-entity/my-entity.component.ts new file mode 100644 index 00000000..b92d2506 --- /dev/null +++ b/projects/container-v18/gen-examples-v18/dummy-angular-standalone-component/my-entity/my-entity.component.ts @@ -0,0 +1,21 @@ +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + HostBinding, + Input, + OnInit, + Output, +} from '@angular/core'; +import { Subscription } from 'rxjs'; +import { CommonModule } from '@angular/common'; + +@Component({ + selector: 'app-my-entity', + templateUrl: './my-entity.component.html', + styleUrls: ['./my-entity.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + imports: [CommonModule], + standalone: true, +}) +export class MyEntityComponent {} diff --git a/projects/container-v18/gen-examples/formly-angular-module/my-entity/my-entity.component.html b/projects/container-v18/gen-examples-v18/formly-angular-module/my-entity/my-entity.component.html similarity index 100% rename from projects/container-v18/gen-examples/formly-angular-module/my-entity/my-entity.component.html rename to projects/container-v18/gen-examples-v18/formly-angular-module/my-entity/my-entity.component.html diff --git a/projects/container-v18/gen-examples/firedev-minimal-to-full/my-entity/my-entity.component.scss b/projects/container-v18/gen-examples-v18/formly-angular-module/my-entity/my-entity.component.scss similarity index 100% rename from projects/container-v18/gen-examples/firedev-minimal-to-full/my-entity/my-entity.component.scss rename to projects/container-v18/gen-examples-v18/formly-angular-module/my-entity/my-entity.component.scss diff --git a/projects/container-v18/gen-examples/formly-angular-module/my-entity/my-entity.component.ts b/projects/container-v18/gen-examples-v18/formly-angular-module/my-entity/my-entity.component.ts similarity index 58% rename from projects/container-v18/gen-examples/formly-angular-module/my-entity/my-entity.component.ts rename to projects/container-v18/gen-examples-v18/formly-angular-module/my-entity/my-entity.component.ts index 1668595a..7cc7b65a 100644 --- a/projects/container-v18/gen-examples/formly-angular-module/my-entity/my-entity.component.ts +++ b/projects/container-v18/gen-examples-v18/formly-angular-module/my-entity/my-entity.component.ts @@ -1,20 +1,27 @@ -import { Component, EventEmitter, HostBinding, Input, OnInit, Output } from '@angular/core'; +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + HostBinding, + Input, + OnInit, + Output, +} from '@angular/core'; import { Subscription } from 'rxjs'; import { _ } from 'tnp-core'; @Component({ selector: 'app-my-entity', templateUrl: './my-entity.component.html', - styleUrls: ['./my-entity.component.scss'] + styleUrls: ['./my-entity.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, }) export class MyEntityComponent implements OnInit { @HostBinding('style.minHeight.px') @Input() height: number = 100; @Output() myEntityDataChanged = new EventEmitter(); @Input() myEntityData: any = {}; - constructor() { } + constructor() {} - ngOnInit() { - } + ngOnInit() {} } - diff --git a/projects/container-v18/gen-examples/formly-angular-module/my-entity/my-entity.formly-field.ts b/projects/container-v18/gen-examples-v18/formly-angular-module/my-entity/my-entity.formly-field.ts similarity index 100% rename from projects/container-v18/gen-examples/formly-angular-module/my-entity/my-entity.formly-field.ts rename to projects/container-v18/gen-examples-v18/formly-angular-module/my-entity/my-entity.formly-field.ts diff --git a/projects/container-v18/gen-examples/formly-angular-module/my-entity/my-entity.module.ts b/projects/container-v18/gen-examples-v18/formly-angular-module/my-entity/my-entity.module.ts similarity index 100% rename from projects/container-v18/gen-examples/formly-angular-module/my-entity/my-entity.module.ts rename to projects/container-v18/gen-examples-v18/formly-angular-module/my-entity/my-entity.module.ts diff --git a/projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/actions/my-entity.actions.ts b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module-for-lazy-routing/my-entity/actions/my-entity.actions.ts similarity index 100% rename from projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/actions/my-entity.actions.ts rename to projects/container-v18/gen-examples-v18/ngrx-feature-container-module-for-lazy-routing/my-entity/actions/my-entity.actions.ts diff --git a/projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/components/README.md b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module-for-lazy-routing/my-entity/components/README.md similarity index 100% rename from projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/components/README.md rename to projects/container-v18/gen-examples-v18/ngrx-feature-container-module-for-lazy-routing/my-entity/components/README.md diff --git a/projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/effects/my-entity.effects.ts b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module-for-lazy-routing/my-entity/effects/my-entity.effects.ts similarity index 100% rename from projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/effects/my-entity.effects.ts rename to projects/container-v18/gen-examples-v18/ngrx-feature-container-module-for-lazy-routing/my-entity/effects/my-entity.effects.ts diff --git a/projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.container.html b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.container.html similarity index 100% rename from projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.container.html rename to projects/container-v18/gen-examples-v18/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.container.html diff --git a/projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.container.module.ts b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.container.module.ts similarity index 96% rename from projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.container.module.ts rename to projects/container-v18/gen-examples-v18/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.container.module.ts index b2e2dc6c..fe2b625a 100644 --- a/projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.container.module.ts +++ b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.container.module.ts @@ -1,4 +1,3 @@ -//#region @browser import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { MyEntityContainer } from './my-entity.container'; @@ -34,4 +33,4 @@ const routes: Routes = [ providers: [MyEntityService], }) export class MyEntityContainerModule { } -//#endregion + diff --git a/projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.container.scss b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.container.scss similarity index 100% rename from projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.container.scss rename to projects/container-v18/gen-examples-v18/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.container.scss diff --git a/projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.container.ts b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.container.ts similarity index 61% rename from projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.container.ts rename to projects/container-v18/gen-examples-v18/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.container.ts index b2e975d3..5238d462 100644 --- a/projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.container.ts +++ b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.container.ts @@ -1,5 +1,9 @@ -//#region @browser -import { Component, Input, OnInit } from '@angular/core'; +import { + ChangeDetectionStrategy, + Component, + Input, + OnInit, +} from '@angular/core'; import { Store } from '@ngrx/store'; import { MyEntityInitialState } from './my-entity.models'; import * as myEntitySelectors from './selectors/my-entity.selectors'; @@ -9,19 +13,20 @@ import { Observable, of } from 'rxjs'; @Component({ selector: 'app-my-entity', templateUrl: './my-entity.container.html', - styleUrls: ['./my-entity.container.scss'] + styleUrls: ['./my-entity.container.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, }) export class MyEntityContainer implements OnInit { - constructor( - private store: Store - ) { } + constructor(private store: Store) {} allData$: Observable; @Input('id') // from routing set id(idFromRouting: string) { if (idFromRouting) { - this.allData$ = this.store.select(myEntitySelectors.filterAllBatchesBy(idFromRouting)); + this.allData$ = this.store.select( + myEntitySelectors.filterAllBatchesBy(idFromRouting), + ); } else { this.allData$ = of([]); } @@ -32,10 +37,8 @@ export class MyEntityContainer implements OnInit { } undo() { - this.store.dispatch(myEntityAction.UNDO({})) + this.store.dispatch(myEntityAction.UNDO({})); } - ngOnInit() { } - + ngOnInit() {} } -//#endregion diff --git a/projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.models.ts b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.models.ts similarity index 77% rename from projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.models.ts rename to projects/container-v18/gen-examples-v18/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.models.ts index 5bb1d2b3..834df575 100644 --- a/projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.models.ts +++ b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module-for-lazy-routing/my-entity/my-entity.models.ts @@ -1,7 +1,6 @@ -//#region @browser export const myEntityFeatureKey = 'myEntity'; export interface MyEntityInitialState { myEntityArr: any[]; }; -//#endregion + diff --git a/projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/reducers/my-entity.reducers.ts b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module-for-lazy-routing/my-entity/reducers/my-entity.reducers.ts similarity index 100% rename from projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/reducers/my-entity.reducers.ts rename to projects/container-v18/gen-examples-v18/ngrx-feature-container-module-for-lazy-routing/my-entity/reducers/my-entity.reducers.ts diff --git a/projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/selectors/my-entity.selectors.ts b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module-for-lazy-routing/my-entity/selectors/my-entity.selectors.ts similarity index 100% rename from projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/selectors/my-entity.selectors.ts rename to projects/container-v18/gen-examples-v18/ngrx-feature-container-module-for-lazy-routing/my-entity/selectors/my-entity.selectors.ts diff --git a/projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/services/my-entity.service.ts b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module-for-lazy-routing/my-entity/services/my-entity.service.ts similarity index 100% rename from projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/services/my-entity.service.ts rename to projects/container-v18/gen-examples-v18/ngrx-feature-container-module-for-lazy-routing/my-entity/services/my-entity.service.ts diff --git a/projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/actions/my-entity.actions.ts b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/actions/my-entity.actions.ts new file mode 100644 index 00000000..37ab8fb7 --- /dev/null +++ b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/actions/my-entity.actions.ts @@ -0,0 +1,14 @@ +import { createAction, props } from '@ngrx/store'; + +export const INIT = createAction('[my-entity] INIT'); + +export const FETCH = createAction('[my-entity] FETCH'); + +export const FETCH_SUCCESS = createAction('[my-entity] FETCH_SUCCESS'); + +export const FETCH_ERROR = createAction( + '[my-entity] FETCH_ERROR', + props<{ error?: any }>(), +); + +export const UNDO = createAction('[my-entity] UNDO', props<{ data?: any }>()); diff --git a/projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/components/README.md b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/components/README.md similarity index 100% rename from projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/components/README.md rename to projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/components/README.md diff --git a/projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/effects/my-entity.effects.ts b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/effects/my-entity.effects.ts new file mode 100644 index 00000000..d08ea0e9 --- /dev/null +++ b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/effects/my-entity.effects.ts @@ -0,0 +1,23 @@ +import { Injectable } from '@angular/core'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; +import * as myEntityActions from '../actions/my-entity.actions'; +import { switchMap, map, of, catchError } from 'rxjs'; +import { MyEntityService } from '../services/my-entity.service'; +import { Store } from '@ngrx/store'; +import { MyEntityInitialState } from '../my-entity.models'; + +@Injectable() +export class MyEntityEffects { + constructor( + private actions$: Actions, + private service: MyEntityService, + private store: Store, + ) {} + + init = createEffect(() => + this.actions$.pipe( + ofType(myEntityActions.INIT), + switchMap(() => of(myEntityActions.FETCH())), + ), + ); +} diff --git a/projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/my-entity.container.html b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/my-entity.container.html similarity index 100% rename from projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/my-entity.container.html rename to projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/my-entity.container.html diff --git a/projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/my-entity.container.module.ts b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/my-entity.container.module.ts similarity index 100% rename from projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/my-entity.container.module.ts rename to projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/my-entity.container.module.ts diff --git a/projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/my-entity.container.scss b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/my-entity.container.scss similarity index 100% rename from projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/my-entity.container.scss rename to projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/my-entity.container.scss diff --git a/projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/my-entity.container.ts b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/my-entity.container.ts similarity index 66% rename from projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/my-entity.container.ts rename to projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/my-entity.container.ts index 8749eee1..0531c64b 100644 --- a/projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/my-entity.container.ts +++ b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/my-entity.container.ts @@ -1,5 +1,4 @@ -//#region @browser -import { Component, OnInit } from '@angular/core'; +import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { Store } from '@ngrx/store'; import { MyEntityInitialState } from './my-entity.models'; import * as myEntitySelectors from './selectors/my-entity.selectors'; @@ -8,12 +7,11 @@ import * as myEntityAction from './actions/my-entity.actions'; @Component({ selector: 'app-my-entity', templateUrl: './my-entity.container.html', - styleUrls: ['./my-entity.container.scss'] + styleUrls: ['./my-entity.container.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, }) export class MyEntityContainer implements OnInit { - constructor( - private store: Store - ) { } + constructor(private store: Store) {} allData$ = this.store.select(myEntitySelectors.allBatches); allowedToUndo$ = this.store.select(myEntitySelectors.allowedToUndo); @@ -22,10 +20,9 @@ export class MyEntityContainer implements OnInit { } undo() { - this.store.dispatch(myEntityAction.UNDO({})) + this.store.dispatch(myEntityAction.UNDO({})); } - ngOnInit() { } - + ngOnInit() {} } -//#endregion + diff --git a/projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/my-entity.models.ts b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/my-entity.models.ts similarity index 77% rename from projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/my-entity.models.ts rename to projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/my-entity.models.ts index 5bb1d2b3..834df575 100644 --- a/projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/my-entity.models.ts +++ b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/my-entity.models.ts @@ -1,7 +1,6 @@ -//#region @browser export const myEntityFeatureKey = 'myEntity'; export interface MyEntityInitialState { myEntityArr: any[]; }; -//#endregion + diff --git a/projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/reducers/my-entity.reducers.ts b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/reducers/my-entity.reducers.ts similarity index 93% rename from projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/reducers/my-entity.reducers.ts rename to projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/reducers/my-entity.reducers.ts index d60571a4..1cf0c386 100644 --- a/projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/reducers/my-entity.reducers.ts +++ b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/reducers/my-entity.reducers.ts @@ -1,4 +1,3 @@ -//#region @browser import { createReducer, on } from '@ngrx/store'; import * as _ from 'lodash'; import * as myEntityActions from '../actions/my-entity.actions' @@ -18,4 +17,3 @@ export const myEntityReducer = createReducer( } ), ); -//#endregion diff --git a/projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/selectors/my-entity.selectors.ts b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/selectors/my-entity.selectors.ts similarity index 93% rename from projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/selectors/my-entity.selectors.ts rename to projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/selectors/my-entity.selectors.ts index 0aa8a798..9f288270 100644 --- a/projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/selectors/my-entity.selectors.ts +++ b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/selectors/my-entity.selectors.ts @@ -1,4 +1,3 @@ -//#region @browser import { createFeatureSelector, createSelector } from '@ngrx/store'; import { myEntityFeatureKey, MyEntityInitialState } from '../my-entity.models'; @@ -11,5 +10,3 @@ export const allBatches = createSelector(myEntityFeatureSelector, state => { export const allowedToUndo = createSelector(myEntityFeatureSelector, state => { return state.myEntityArr.length > 0; }); - -//#endregion diff --git a/projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/services/my-entity.service.ts b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/services/my-entity.service.ts similarity index 77% rename from projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/services/my-entity.service.ts rename to projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/services/my-entity.service.ts index 1fc85bdb..c4310b17 100644 --- a/projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/services/my-entity.service.ts +++ b/projects/container-v18/gen-examples-v18/ngrx-feature-container-module/my-entity/services/my-entity.service.ts @@ -1,4 +1,3 @@ -//#region @browser import { Injectable } from '@angular/core'; @Injectable() @@ -6,4 +5,4 @@ export class MyEntityService { constructor() { } } -//#endregion + diff --git a/projects/container-v18/gen-examples/firedev-minimal-to-full/my-entity/my-entity-backend.test.ts b/projects/container-v18/gen-examples-v18/taon-minimal-to-full/my-entity/my-entity-backend.test.ts similarity index 100% rename from projects/container-v18/gen-examples/firedev-minimal-to-full/my-entity/my-entity-backend.test.ts rename to projects/container-v18/gen-examples-v18/taon-minimal-to-full/my-entity/my-entity-backend.test.ts diff --git a/projects/container-v18/gen-examples/formly-angular-module/my-entity/my-entity.component.scss b/projects/container-v18/gen-examples-v18/taon-minimal-to-full/my-entity/my-entity.component.scss similarity index 100% rename from projects/container-v18/gen-examples/formly-angular-module/my-entity/my-entity.component.scss rename to projects/container-v18/gen-examples-v18/taon-minimal-to-full/my-entity/my-entity.component.scss diff --git a/projects/container-v18/gen-examples/firedev-minimal-to-full/my-entity/my-entity.constants.ts b/projects/container-v18/gen-examples-v18/taon-minimal-to-full/my-entity/my-entity.constants.ts similarity index 100% rename from projects/container-v18/gen-examples/firedev-minimal-to-full/my-entity/my-entity.constants.ts rename to projects/container-v18/gen-examples-v18/taon-minimal-to-full/my-entity/my-entity.constants.ts diff --git a/projects/container-v18/gen-examples/firedev-minimal-to-full/my-entity/my-entity.db-query-models.ts b/projects/container-v18/gen-examples-v18/taon-minimal-to-full/my-entity/my-entity.db-query-models.ts similarity index 97% rename from projects/container-v18/gen-examples/firedev-minimal-to-full/my-entity/my-entity.db-query-models.ts rename to projects/container-v18/gen-examples-v18/taon-minimal-to-full/my-entity/my-entity.db-query-models.ts index 00c99e35..16066ce1 100644 --- a/projects/container-v18/gen-examples/firedev-minimal-to-full/my-entity/my-entity.db-query-models.ts +++ b/projects/container-v18/gen-examples-v18/taon-minimal-to-full/my-entity/my-entity.db-query-models.ts @@ -2,7 +2,7 @@ import type { MyEntity } from "./my-entity"; import { _ } from 'tnp-core'; //#region @websql -import { NumberColumn, PropsEntitySQL, QueryTable, StringColumn } from "firedev-type-sql"; +import { NumberColumn, PropsEntitySQL, QueryTable, StringColumn } from "taon-type-sql"; //#endregion //#endregion diff --git a/projects/container-v18/gen-examples/firedev-minimal-to-full/my-entity/my-entity.helpers.ts b/projects/container-v18/gen-examples-v18/taon-minimal-to-full/my-entity/my-entity.helpers.ts similarity index 100% rename from projects/container-v18/gen-examples/firedev-minimal-to-full/my-entity/my-entity.helpers.ts rename to projects/container-v18/gen-examples-v18/taon-minimal-to-full/my-entity/my-entity.helpers.ts diff --git a/projects/container-v18/gen-examples/firedev-minimal-to-full/my-entity/my-entity.subscriber.ts b/projects/container-v18/gen-examples-v18/taon-minimal-to-full/my-entity/my-entity.subscriber.ts similarity index 64% rename from projects/container-v18/gen-examples/firedev-minimal-to-full/my-entity/my-entity.subscriber.ts rename to projects/container-v18/gen-examples-v18/taon-minimal-to-full/my-entity/my-entity.subscriber.ts index 2d3e29e0..c727fbe1 100644 --- a/projects/container-v18/gen-examples/firedev-minimal-to-full/my-entity/my-entity.subscriber.ts +++ b/projects/container-v18/gen-examples-v18/taon-minimal-to-full/my-entity/my-entity.subscriber.ts @@ -1,11 +1,11 @@ //#region imports -import { Firedev } from 'firedev/src'; +import { Taon } from 'taon/src'; import type { MyEntity } from '../my-entity'; //#endregion -@Firedev.Controller() -export class MyEntitySubscriber implements Firedev.Base.AbstractEntity { +@Taon.Controller() +export class MyEntitySubscriber implements Taon.Base.AbstractEntity { /** * Called after entity update. diff --git a/projects/container-v18/gen-examples/firedev-minimal/my-entity/my-entity-api.service.ts b/projects/container-v18/gen-examples-v18/taon-minimal/my-entity/my-entity-api.service.ts similarity index 76% rename from projects/container-v18/gen-examples/firedev-minimal/my-entity/my-entity-api.service.ts rename to projects/container-v18/gen-examples-v18/taon-minimal/my-entity/my-entity-api.service.ts index cc96ab54..3c6a4e28 100644 --- a/projects/container-v18/gen-examples/firedev-minimal/my-entity/my-entity-api.service.ts +++ b/projects/container-v18/gen-examples-v18/taon-minimal/my-entity/my-entity-api.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import { MyEntityController } from './my-entity.controller'; -import { Firedev } from 'firedev/src'; +import { Taon } from 'taon/src'; import { MyEntityContext } from './my-entity.context'; import { Observable } from 'rxjs'; import type { MyEntity } from './my-entity'; @@ -8,7 +8,7 @@ import { map } from 'rxjs/operators'; @Injectable({ providedIn: 'root' }) export class MyEntityApiService { - private myEntityController: MyEntityController = Firedev.inject(() => MyEntityContext.getClass(MyEntityController)); + private myEntityController: MyEntityController = Taon.inject(() => MyEntityContext.getClass(MyEntityController)); get allMyEntity$(): Observable { return this.myEntityController.getAll().received.observable.pipe( diff --git a/projects/container-v18/gen-examples/firedev-minimal/my-entity/my-entity-list.component.ts b/projects/container-v18/gen-examples-v18/taon-minimal/my-entity/my-entity-list.component.ts similarity index 100% rename from projects/container-v18/gen-examples/firedev-minimal/my-entity/my-entity-list.component.ts rename to projects/container-v18/gen-examples-v18/taon-minimal/my-entity/my-entity-list.component.ts diff --git a/projects/container-v18/gen-examples/firedev-minimal/my-entity/my-entity.component.ts b/projects/container-v18/gen-examples-v18/taon-minimal/my-entity/my-entity.component.ts similarity index 59% rename from projects/container-v18/gen-examples/firedev-minimal/my-entity/my-entity.component.ts rename to projects/container-v18/gen-examples-v18/taon-minimal/my-entity/my-entity.component.ts index 29a64a28..72a299d6 100644 --- a/projects/container-v18/gen-examples/firedev-minimal/my-entity/my-entity.component.ts +++ b/projects/container-v18/gen-examples-v18/taon-minimal/my-entity/my-entity.component.ts @@ -1,5 +1,5 @@ //#region imports -import { Component, Input } from '@angular/core'; +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; import { CommonModule } from '@angular/common'; import { MyEntity } from './my-entity'; //#endregion @@ -8,21 +8,20 @@ import { MyEntity } from './my-entity'; //#region component data selector: 'my-entity', // templateUrl: './my-entity.component.html', - template: ` -

- my-entity ( description: {{ model?.description }} ) -

- `, + template: `

my-entity ( description: {{ model?.description }} )

`, // styleUrls: ['./my-entity.component.scss'], - styles: [` - :host { - display: block; - } - `], + styles: [ + ` + :host { + display: block; + } + `, + ], standalone: true, + changeDetection: ChangeDetectionStrategy.OnPush, imports: [ CommonModule, - // FiredevFullMaterialModule, + // TaonFullMaterialModule, // StaticColumnsModule, ], //#endregion diff --git a/projects/container-v18/gen-examples/firedev-minimal/my-entity/my-entity.context.ts b/projects/container-v18/gen-examples-v18/taon-minimal/my-entity/my-entity.context.ts similarity index 71% rename from projects/container-v18/gen-examples/firedev-minimal/my-entity/my-entity.context.ts rename to projects/container-v18/gen-examples-v18/taon-minimal/my-entity/my-entity.context.ts index cd018afc..a14a6f50 100644 --- a/projects/container-v18/gen-examples/firedev-minimal/my-entity/my-entity.context.ts +++ b/projects/container-v18/gen-examples-v18/taon-minimal/my-entity/my-entity.context.ts @@ -1,10 +1,10 @@ //#region imports -import { Firedev, BaseContext } from 'firedev'; +import { Taon, BaseContext } from 'taon'; import { MyEntity } from './my-entity'; import { MyEntityController } from './my-entity.controller'; //#endregion -export const MyEntityContext = Firedev.createContext(() => ({ +export const MyEntityContext = Taon.createContext(() => ({ contextName: 'MyEntityContext', abstract: true, contexts: { BaseContext }, diff --git a/projects/container-v18/gen-examples/firedev-minimal/my-entity/my-entity.controller.ts b/projects/container-v18/gen-examples-v18/taon-minimal/my-entity/my-entity.controller.ts similarity index 76% rename from projects/container-v18/gen-examples/firedev-minimal/my-entity/my-entity.controller.ts rename to projects/container-v18/gen-examples-v18/taon-minimal/my-entity/my-entity.controller.ts index d3082d9f..4a37747e 100644 --- a/projects/container-v18/gen-examples/firedev-minimal/my-entity/my-entity.controller.ts +++ b/projects/container-v18/gen-examples-v18/taon-minimal/my-entity/my-entity.controller.ts @@ -1,21 +1,21 @@ //#region imports -import { Firedev, ClassHelpers } from 'firedev/src'; +import { Taon, ClassHelpers } from 'taon/src'; import { MyEntity } from './my-entity'; import { _ } from 'tnp-core'; //#endregion -@Firedev.Controller({ +@Taon.Controller({ //#region controller options className: 'MyEntityController', //#endregion }) -export class MyEntityController extends Firedev.Base.CrudController { +export class MyEntityController extends Taon.Base.CrudController { entityClassResolveFn: () => MyEntity; //#region methods & getters / hello world - @Firedev.Http.GET() - helloWord(@Firedev.Http.Param.Query('yourName') yourName:string): Firedev.Response { + @Taon.Http.GET() + helloWord(@Taon.Http.Param.Query('yourName') yourName:string): Taon.Response { //#region @websqlFunc return async (req, res) => { const numOfEntities = await this.db.count(); diff --git a/projects/container-v18/gen-examples/firedev-minimal/my-entity/my-entity.defaults-values.ts b/projects/container-v18/gen-examples-v18/taon-minimal/my-entity/my-entity.defaults-values.ts similarity index 100% rename from projects/container-v18/gen-examples/firedev-minimal/my-entity/my-entity.defaults-values.ts rename to projects/container-v18/gen-examples-v18/taon-minimal/my-entity/my-entity.defaults-values.ts diff --git a/projects/container-v18/gen-examples/firedev-minimal/my-entity/my-entity.ts b/projects/container-v18/gen-examples-v18/taon-minimal/my-entity/my-entity.ts similarity index 69% rename from projects/container-v18/gen-examples/firedev-minimal/my-entity/my-entity.ts rename to projects/container-v18/gen-examples-v18/taon-minimal/my-entity/my-entity.ts index 83364d02..8e66ba4f 100644 --- a/projects/container-v18/gen-examples/firedev-minimal/my-entity/my-entity.ts +++ b/projects/container-v18/gen-examples-v18/taon-minimal/my-entity/my-entity.ts @@ -1,16 +1,16 @@ //#region imports -import { Firedev } from 'firedev'; +import { Taon } from 'taon'; import { _ } from 'tnp-core'; import { MyEntityDefaultsValues } from './my-entity.defaults-values'; //#endregion -@Firedev.Entity({ +@Taon.Entity({ className: 'MyEntity', createTable: true, }) -export class MyEntity extends Firedev.Base.AbstractEntity { +export class MyEntity extends Taon.Base.AbstractEntity { //#region @websql - @Firedev.Orm.Column.Custom({ + @Taon.Orm.Column.Custom({ type: 'varchar', length: 100, default: MyEntityDefaultsValues.description diff --git a/projects/container-v18/gen-examples/dummy-angular-lazy-module-container/my-entity/index.ts b/projects/container-v18/gen-examples/dummy-angular-lazy-module-container/my-entity/index.ts deleted file mode 100644 index 3f0d438b..00000000 --- a/projects/container-v18/gen-examples/dummy-angular-lazy-module-container/my-entity/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -//#region @browser -export * from './my-entity.container'; -export * from './my-entity.container.module'; -//#endregion diff --git a/projects/container-v18/gen-examples/dummy-angular-lazy-module/my-entity/index.ts b/projects/container-v18/gen-examples/dummy-angular-lazy-module/my-entity/index.ts deleted file mode 100644 index 2b4a83f1..00000000 --- a/projects/container-v18/gen-examples/dummy-angular-lazy-module/my-entity/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -//#region @browser -export * from './my-entity.component'; -export * from './my-entity.module'; -//#endregion diff --git a/projects/container-v18/gen-examples/dummy-angular-module/my-entity/index.ts b/projects/container-v18/gen-examples/dummy-angular-module/my-entity/index.ts deleted file mode 100644 index 6390d07b..00000000 --- a/projects/container-v18/gen-examples/dummy-angular-module/my-entity/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './my-entity.component'; -export * from './my-entity.module'; diff --git a/projects/container-v18/gen-examples/dummy-angular-standalone-component/my-entity/index.ts b/projects/container-v18/gen-examples/dummy-angular-standalone-component/my-entity/index.ts deleted file mode 100644 index 23825a54..00000000 --- a/projects/container-v18/gen-examples/dummy-angular-standalone-component/my-entity/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './my-entity.component'; diff --git a/projects/container-v18/gen-examples/dummy-angular-standalone-component/my-entity/my-entity.component.ts b/projects/container-v18/gen-examples/dummy-angular-standalone-component/my-entity/my-entity.component.ts deleted file mode 100644 index c3bca5ea..00000000 --- a/projects/container-v18/gen-examples/dummy-angular-standalone-component/my-entity/my-entity.component.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Component, EventEmitter, HostBinding, Input, OnInit, Output } from '@angular/core'; -import { Subscription } from 'rxjs'; -import { CommonModule } from '@angular/common'; -import { _ } from 'tnp-core'; - -@Component({ - selector: 'app-my-entity', - templateUrl: './my-entity.component.html', - styleUrls: ['./my-entity.component.scss'], - imports: [ - CommonModule, - ], - standalone: true, -}) -export class MyEntityComponent { - -} diff --git a/projects/container-v18/gen-examples/firedev-minimal-to-full/my-entity/index.ts b/projects/container-v18/gen-examples/firedev-minimal-to-full/my-entity/index.ts deleted file mode 100644 index a2c96c6e..00000000 --- a/projects/container-v18/gen-examples/firedev-minimal-to-full/my-entity/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './my-entity.helpers'; -export * from './my-entity.constants'; -export * from './my-entity-subscriber'; - diff --git a/projects/container-v18/gen-examples/firedev-minimal/my-entity/index.ts b/projects/container-v18/gen-examples/firedev-minimal/my-entity/index.ts deleted file mode 100644 index 2792f3b9..00000000 --- a/projects/container-v18/gen-examples/firedev-minimal/my-entity/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -export * from './my-entity'; -export * from './my-entity.controller'; -export * from './my-entity.context'; -export * from './my-entity.defaults-values'; -//#region @browser -export * from './my-entity-api.service'; -export * from './my-entity.component'; -export * from './my-entity-list.component'; -//#endregion diff --git a/projects/container-v18/gen-examples/formly-angular-module/my-entity/index.ts b/projects/container-v18/gen-examples/formly-angular-module/my-entity/index.ts deleted file mode 100644 index 2b4a83f1..00000000 --- a/projects/container-v18/gen-examples/formly-angular-module/my-entity/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -//#region @browser -export * from './my-entity.component'; -export * from './my-entity.module'; -//#endregion diff --git a/projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/index.ts b/projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/index.ts deleted file mode 100644 index 3f0d438b..00000000 --- a/projects/container-v18/gen-examples/ngrx-feature-container-module-for-lazy-routing/my-entity/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -//#region @browser -export * from './my-entity.container'; -export * from './my-entity.container.module'; -//#endregion diff --git a/projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/actions/my-entity.actions.ts b/projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/actions/my-entity.actions.ts deleted file mode 100644 index 5c5d7ffc..00000000 --- a/projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/actions/my-entity.actions.ts +++ /dev/null @@ -1,26 +0,0 @@ -//#region @browser -import { createAction, props } from "@ngrx/store"; - -export const INIT = createAction( - '[my-entity] INIT' -); - -export const FETCH = createAction( - '[my-entity] FETCH', -); - -export const FETCH_SUCCESS = createAction( - '[my-entity] FETCH_SUCCESS', -); - -export const FETCH_ERROR = createAction( - '[my-entity] FETCH_ERROR', - props<{ error?: any }>() -); - -export const UNDO = createAction( - '[my-entity] UNDO', - props<{ data?: any }>() -); - -//#endregion diff --git a/projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/effects/my-entity.effects.ts b/projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/effects/my-entity.effects.ts deleted file mode 100644 index 465abc0f..00000000 --- a/projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/effects/my-entity.effects.ts +++ /dev/null @@ -1,20 +0,0 @@ -//#region @browser -import { Injectable } from '@angular/core'; -import { Actions, createEffect, ofType } from '@ngrx/effects'; -import * as myEntityActions from '../actions/my-entity.actions' -import { switchMap, map, of, catchError } from "rxjs"; -import { MyEntityService } from '../services/my-entity.service'; -import { Store } from '@ngrx/store'; -import { MyEntityInitialState } from '../my-entity.models'; - -@Injectable() -export class MyEntityEffects { - constructor(private actions$: Actions, private service: MyEntityService, private store: Store) { } - - init = createEffect(() => this.actions$.pipe( - ofType(myEntityActions.INIT), - switchMap(() => of(myEntityActions.FETCH())) - )); - -} -//#endregion diff --git a/projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/index.ts b/projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/index.ts deleted file mode 100644 index 3f0d438b..00000000 --- a/projects/container-v18/gen-examples/ngrx-feature-container-module/my-entity/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -//#region @browser -export * from './my-entity.container'; -export * from './my-entity.container.module'; -//#endregion diff --git a/projects/container-v18/isomorphic-lib-v18/.gitignore b/projects/container-v18/isomorphic-lib-v18/.gitignore index ed40a450..f511a3e0 100644 --- a/projects/container-v18/isomorphic-lib-v18/.gitignore +++ b/projects/container-v18/isomorphic-lib-v18/.gitignore @@ -52,8 +52,8 @@ Thumbs.db /components-for-stanalone /tsconfig.backend.dist.json # ===================== -!firedev.json -!firedev.jsonc +!taon.json +!taon.jsonc !*.filetemplate diff --git a/projects/container-v18/isomorphic-lib-v18/.prettierignore b/projects/container-v18/isomorphic-lib-v18/.prettierignore index 6a51e066..626bf5b4 100644 --- a/projects/container-v18/isomorphic-lib-v18/.prettierignore +++ b/projects/container-v18/isomorphic-lib-v18/.prettierignore @@ -1,5 +1,5 @@ -# This file is generated by firedev +# This file is generated by taon /build /coverage /e2e @@ -27,4 +27,3 @@ tmp-* /module /www - \ No newline at end of file diff --git a/projects/container-v18/isomorphic-lib-v18/.vscode/settings.json b/projects/container-v18/isomorphic-lib-v18/.vscode/settings.json index 153fd206..f2f8ae6f 100644 --- a/projects/container-v18/isomorphic-lib-v18/.vscode/settings.json +++ b/projects/container-v18/isomorphic-lib-v18/.vscode/settings.json @@ -56,4 +56,4 @@ "editor.suggest.snippetsPreventQuickSuggestions": false, "editor.inlineSuggest.enabled": true, "prettier.endOfLine": "auto" -} \ No newline at end of file +} diff --git a/projects/container-v18/isomorphic-lib-v18/bin/start-cli.js b/projects/container-v18/isomorphic-lib-v18/bin/start-cli.js index 1242749b..5cea3a72 100644 --- a/projects/container-v18/isomorphic-lib-v18/bin/start-cli.js +++ b/projects/container-v18/isomorphic-lib-v18/bin/start-cli.js @@ -8,7 +8,7 @@ // //#region resolve args // const childprocsecretarg = '-childproc'; // const isWinGitBash = (process.platform === 'win32'); -// const procType = (process.argv[1].endsWith('tnp') || process.argv[1].endsWith('firedev')) ? 'root' +// const procType = (process.argv[1].endsWith('tnp') || process.argv[1].endsWith('taon')) ? 'root' // : ((process.argv.find(a => a.startsWith(childprocsecretarg))) // ? 'child-of-root' // : 'child-of-child' @@ -153,7 +153,7 @@ // if (distExist) { // mode = 'dist'; -// !global.hideLog && setText('- firedev dist -', true); +// !global.hideLog && setText('- taon dist -', true); // // TODO TOOOO MUCH TIME !!!!!! // start = require(pathToDistRun.replace(/\.js$/g, '')).default; // } else { diff --git a/projects/container-v18/isomorphic-lib-v18/docs-config.schema.json b/projects/container-v18/isomorphic-lib-v18/docs-config.schema.json new file mode 100644 index 00000000..77f4dfbc --- /dev/null +++ b/projects/container-v18/isomorphic-lib-v18/docs-config.schema.json @@ -0,0 +1,92 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$ref": "#/definitions/DocsConfig", + "definitions": { + "DocsConfig": { + "type": "object", + "properties": { + "site_name": { + "type": "string", + "description": "override site name" + }, + "priorityOrder": { + "type": "array", + "items": { + "type": "string" + }, + "description": "relative pathes to md files for proper order" + }, + "omitFilesPatters": { + "type": "array", + "items": { + "type": "string" + }, + "description": "glob pattern to omit files" + }, + "additionalAssets": { + "type": "array", + "items": { + "type": "string" + }, + "description": "relative path to the assets folders in project [external assets not allowed... use externalDocs for that]" + }, + "externalDocs": { + "type": "object", + "properties": { + "mdfiles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "path": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ], + "description": "path to *.md file or array of paths (fallbacks pathes for the same file) [in case of multiple files -> you will be ask to choose one]" + }, + "magicRenameRules": { + "type": "string", + "description": "if you want to rename something inside file you can use this magic rename rules example:\n\nframework-name => new-framework-name\n\nexample with array:\n\nframework-name => new-framework-name, framework-name2 => new-framework-name2" + } + }, + "required": ["path", "magicRenameRules"], + "additionalProperties": false + } + }, + "projects": { + "type": "array", + "items": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "path to project or array of paths (fallbacks pathes for the same projec) [in case of multiple projects -> you will be ask to choose one]" + } + }, + "required": ["path"], + "additionalProperties": false + } + } + }, + "required": ["mdfiles", "projects"], + "additionalProperties": false + } + }, + "required": [ + "site_name", + "omitFilesPatters", + "additionalAssets", + "externalDocs" + ], + "additionalProperties": false + } + } +} diff --git a/projects/container-v18/isomorphic-lib-v18/package.json b/projects/container-v18/isomorphic-lib-v18/package.json index ffd1a708..4a4cdb2f 100644 --- a/projects/container-v18/isomorphic-lib-v18/package.json +++ b/projects/container-v18/isomorphic-lib-v18/package.json @@ -178,14 +178,14 @@ "file-loader": "1.1.5", "file-saver": "2.0.5", "file-type": "18.5.0", - "firedev": "^16", - "firedev-crud": "16.100.10", - "firedev-crud-deamon": "16.100.9", - "firedev-ports": "16.100.10", - "firedev-storage": "16.100.6", - "firedev-type-sql": "16.100.7", - "firedev-typeorm": "16.100.7", - "firedev-ui": "16.100.10", + "taon": "^16", + "taon-crud": "16.100.10", + "taon-crud-deamon": "16.100.9", + "taon-ports": "16.100.10", + "taon-storage": "16.100.6", + "taon-type-sql": "16.100.7", + "taon-typeorm": "16.100.7", + "taon-ui": "16.100.10", "fkill": "6.1.0", "font-awesome": "4.7.0", "form-data": "4.0.0", diff --git a/projects/container-v18/package.json b/projects/container-v18/package.json index 566567f3..5c9a8d36 100644 --- a/projects/container-v18/package.json +++ b/projects/container-v18/package.json @@ -196,6 +196,7 @@ "ngx-editor": "~17.5.4", "ngx-monaco-editor": "12.0.0", "ngx-photo-editor": "0.4.4", + "ngx-infinite-scroll": "18.0.0", "@types/diff": "~5.2.1", "diff": "~4.0.2", "base32": "~0.0.7", @@ -291,6 +292,7 @@ "detect-mocha": "0.1.0", "nodemon": "~2.0.22", "enum-values": "1.2.1", + "typescript-string-enums": "^1.0.0", "vscode": "1.1.37", "cross-env": "7.0.2", "node-localstorage": "2.1.6", @@ -611,6 +613,7 @@ "ngx-ace-wrapper": "17.0.0", "ngx-editor": "17.5.4", "ngx-highlightjs": "12.0.0", + "ngx-infinite-scroll": "18.0.0", "ngx-moment": "6.0.2", "ngx-monaco-editor": "12.0.0", "ngx-photo-editor": "0.4.4", @@ -692,6 +695,7 @@ "typescript": "~5.5.4", "typescript-class-helpers": "~18.0.11", "typescript-formatter": "~7.2.2", + "typescript-string-enums": "~1.0.0", "underscore": "1.13.7", "uuid": "10.0.0", "validator": "13.5.2", diff --git a/projects/container-v18/plugins-v18/firedev-vscode-ext/.vscode/extensions.json b/projects/container-v18/plugins-v18/firedev-vscode-ext/.vscode/extensions.json deleted file mode 100644 index ee71911b..00000000 --- a/projects/container-v18/plugins-v18/firedev-vscode-ext/.vscode/extensions.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - // See http://go.microsoft.com/fwlink/?LinkId=827846 - // for the documentation about the extensions.json format - "recommendations": [ - "eg2.tslint" - ] -} \ No newline at end of file diff --git a/projects/container-v18/plugins-v18/firedev-vscode-ext/.vscode/settings.json b/projects/container-v18/plugins-v18/firedev-vscode-ext/.vscode/settings.json deleted file mode 100644 index f785a4ca..00000000 --- a/projects/container-v18/plugins-v18/firedev-vscode-ext/.vscode/settings.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "files.exclude": { - "**/*____ORIGINAL____.ts": true, - "_changelog": true, - "tsconfig.backend.dist.json": true, - "tsconfig.backend.dist.json.filetemplate": true, - "out": true, - "update-proj.js": true, - ".vscodeignore": true, - "*.vsix": true, - "node_modules": true, - "tmp*": true, - "dist*": true, - "bundle*": true, - "browser": true, - "browser*": true, - "websql": true, - "websql*": true, - "module*": true, - "backup": true, - "module": true, - "www": true, - "Thumbs.db": true, - ".DS_Store": true, - "**/.DS_Store": true, - "npm-debug.log*": true, - ".sass-cache": true, - ".sourcemaps": true, - ".vscode/tasks.json": true, - ".vscode/launch.json": true, - "vsc-extension-quickstart.md": true, - "tsconfig.json": true, - "src/extension.ts": true, - "src/helpers.ts": true, - "src/models.ts": true, - "src/execute-command.ts": true, - "src/progress-output.ts": true, - ".gitignore": true, - ".npmignore": true, - ".babelrc": true, - ".npmrc": true, - ".eslintrc.json": true, - ".prettierignore": true, - ".prettierrc": true, - ".editorconfig": true, - "devDependencies.json": true, - "package.json": true, - "logo.svg": true - }, - "search.exclude": { - "docs": true, - "projects": true, - "bin": true - }, - "typescript.tsc.autoDetect": "off", - "html.format.wrapAttributes": "force-aligned", - "workbench.colorTheme": "Default Light+", - "workbench.colorCustomizations": { - "activityBar.background": "#2570b6", - "statusBar.background": "#5c3735", - "statusBar.debuggingBackground": "#5c3735" - }, - "[typescriptreact]": { - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": false - }, - "[json]": { - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": false - }, - "[jsonc]": { - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": false - }, - "[json5]": { - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": false - }, - "[scss]": { - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": false - }, - "[html]": { - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": false - }, - "[javascript]": { - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": false - }, - "[typescript]": { - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": false - }, - "editor.rulers": [ - 80, - 120 - ], - "eslint.migration.2_x": "off", - "eslint.enable": true, - "prettier.enable": true, - "editor.suggest.snippetsPreventQuickSuggestions": false, - "editor.inlineSuggest.enabled": true, - "prettier.prettierPath": "./node_modules/prettier", - "prettier.endOfLine": "auto" -} \ No newline at end of file diff --git a/projects/container-v18/plugins-v18/firedev-vscode-ext/README.md b/projects/container-v18/plugins-v18/firedev-vscode-ext/README.md deleted file mode 100644 index bcbbe4d7..00000000 --- a/projects/container-v18/plugins-v18/firedev-vscode-ext/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Firedev - -INSTALLATION NOTES ------------------- -Firedev is required for this extension: -``` -npm i -g firedev -``` diff --git a/projects/container-v18/plugins-v18/firedev-vscode-ext/menu.png b/projects/container-v18/plugins-v18/firedev-vscode-ext/menu.png deleted file mode 100644 index 6653dc34055f214b323d6427b55014be6282a41e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135546 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 diff --git a/projects/container-v18/plugins-v18/firedev-vscode-ext/tslint.json b/projects/container-v18/plugins-v18/firedev-vscode-ext/tslint.json deleted file mode 100644 index 1b1aa40f..00000000 --- a/projects/container-v18/plugins-v18/firedev-vscode-ext/tslint.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "rulesDirectory": [], - "rules": { - "arrow-return-shorthand": true, - "callable-types": true, - "class-name": true, - "comment-format": [true, "check-space"], - "curly": true, - "deprecation": { - "severity": "warn" - }, - "eofline": true, - "forin": true, - "import-blacklist": [true, "rxjs", "rxjs/Rx"], - "import-spacing": true, - "indent": [true, "spaces"], - "interface-over-type-literal": true, - "label-position": true, - "max-line-length": [true, 140], - "member-access": false, - "member-ordering": [ - true, - { - "order": [ - "static-field", - "instance-field", - "static-method", - "instance-method" - ] - } - ], - "no-arg": true, - "no-bitwise": true, - "no-console": [true, "debug", "info", "time", "timeEnd", "trace"], - "no-construct": true, - "no-debugger": true, - "no-duplicate-super": true, - "no-empty": false, - "no-empty-interface": true, - "no-eval": true, - "no-inferrable-types": [true, "ignore-params"], - "no-misused-new": true, - "no-non-null-assertion": true, - "no-shadowed-variable": true, - "no-string-literal": false, - "no-string-throw": true, - "no-switch-case-fall-through": true, - "no-trailing-whitespace": true, - "no-unnecessary-initializer": true, - "no-unused-expression": true, - "no-use-before-declare": true, - "no-var-keyword": true, - "object-literal-sort-keys": false, - "one-line": [ - true, - "check-open-brace", - "check-catch", - "check-else", - "check-whitespace" - ], - "prefer-const": true, - "quotemark": [true, "single"], - "radix": true, - "semicolon": [true, "always"], - "triple-equals": [true, "allow-null-check"], - "typedef-whitespace": [ - true, - { - "call-signature": "nospace", - "index-signature": "nospace", - "parameter": "nospace", - "property-declaration": "nospace", - "variable-declaration": "nospace" - } - ], - "typeof-compare": true, - "unified-signatures": true, - "variable-name": false, - "whitespace": [ - true, - "check-branch", - "check-decl", - "check-operator", - "check-separator", - "check-type" - ], - "directive-selector": [true, "attribute", "app", "camelCase"], - "component-selector": [true, "element", "app", "kebab-case"], - "no-output-on-prefix": true, - "use-input-property-decorator": true, - "use-output-property-decorator": true, - "use-host-property-decorator": true, - "no-input-rename": true, - "no-output-rename": true, - "use-life-cycle-interface": true, - "use-pipe-transform-interface": true, - "component-class-suffix": true, - "directive-class-suffix": true - } -} diff --git a/projects/container-v18/plugins-v18/firedev-vscode-ext/.editorconfig b/projects/container-v18/plugins-v18/taon-vscode-ext/.editorconfig similarity index 100% rename from projects/container-v18/plugins-v18/firedev-vscode-ext/.editorconfig rename to projects/container-v18/plugins-v18/taon-vscode-ext/.editorconfig diff --git a/projects/container-v18/plugins-v18/firedev-vscode-ext/.eslintrc.json b/projects/container-v18/plugins-v18/taon-vscode-ext/.eslintrc.json similarity index 100% rename from projects/container-v18/plugins-v18/firedev-vscode-ext/.eslintrc.json rename to projects/container-v18/plugins-v18/taon-vscode-ext/.eslintrc.json diff --git a/projects/container-v18/plugins-v18/firedev-vscode-ext/.gitignore b/projects/container-v18/plugins-v18/taon-vscode-ext/.gitignore similarity index 89% rename from projects/container-v18/plugins-v18/firedev-vscode-ext/.gitignore rename to projects/container-v18/plugins-v18/taon-vscode-ext/.gitignore index 2c942d76..3950f385 100644 --- a/projects/container-v18/plugins-v18/firedev-vscode-ext/.gitignore +++ b/projects/container-v18/plugins-v18/taon-vscode-ext/.gitignore @@ -4,6 +4,7 @@ speed-measure-plugin*.json # misc /.sass-cache +/**/tmp-* /connect.lock /coverage /libpeerconnection.log @@ -12,6 +13,14 @@ yarn-error.log testem.log /typings app.hosts.ts +/.firedev +/.taon +/.tnp +/. + .map(c => '/' + c) + .join(' +')} +/docs-config.schema.json /**/*._auto-generated_.ts /**/BUILD-INFO.md /linked-repos @@ -49,20 +58,17 @@ Thumbs.db /.vscode/launch.json /.vscodeignore /vsc-extension-quickstart.md -/tsconfig.json /update-proj.js /src/extension.ts /src/helpers.ts /src/models.ts /src/execute-command.ts /src/progress-output.ts -/tsconfig.backend.dist.json !tsconfig* # ===================== -!firedev.json -!firedev.jsonc +!taon.jsonc *.filetemplate diff --git a/projects/container-v18/plugins-v18/firedev-vscode-ext/.npmignore b/projects/container-v18/plugins-v18/taon-vscode-ext/.npmignore similarity index 100% rename from projects/container-v18/plugins-v18/firedev-vscode-ext/.npmignore rename to projects/container-v18/plugins-v18/taon-vscode-ext/.npmignore diff --git a/projects/container-v18/plugins-v18/firedev-vscode-ext/.npmrc b/projects/container-v18/plugins-v18/taon-vscode-ext/.npmrc similarity index 100% rename from projects/container-v18/plugins-v18/firedev-vscode-ext/.npmrc rename to projects/container-v18/plugins-v18/taon-vscode-ext/.npmrc diff --git a/projects/container-v18/plugins-v18/firedev-vscode-ext/.prettierignore b/projects/container-v18/plugins-v18/taon-vscode-ext/.prettierignore similarity index 84% rename from projects/container-v18/plugins-v18/firedev-vscode-ext/.prettierignore rename to projects/container-v18/plugins-v18/taon-vscode-ext/.prettierignore index a1b53764..19353d3c 100644 --- a/projects/container-v18/plugins-v18/firedev-vscode-ext/.prettierignore +++ b/projects/container-v18/plugins-v18/taon-vscode-ext/.prettierignore @@ -1,5 +1,5 @@ -# This file is generated by firedev +# This file is generated by taon.dev /build /coverage /e2e diff --git a/projects/container-v18/plugins-v18/firedev-vscode-ext/.prettierrc b/projects/container-v18/plugins-v18/taon-vscode-ext/.prettierrc similarity index 100% rename from projects/container-v18/plugins-v18/firedev-vscode-ext/.prettierrc rename to projects/container-v18/plugins-v18/taon-vscode-ext/.prettierrc diff --git a/projects/container-v18/plugins-v18/taon-vscode-ext/.vscode/extensions.json b/projects/container-v18/plugins-v18/taon-vscode-ext/.vscode/extensions.json new file mode 100644 index 00000000..6aec9b35 --- /dev/null +++ b/projects/container-v18/plugins-v18/taon-vscode-ext/.vscode/extensions.json @@ -0,0 +1,75 @@ +{ + "recommendations": [ + "Angular.ng-template", + "EditorConfig.EditorConfig", + "GitHub.copilot", + "IBM.output-colorizer", + "Mikael.Angular-BeastCode", + "SimonSiefke.svg-preview", + "Zaczero.bootstrap-v4-snippets", + "aeschli.vscode-css-formatter", + "alefragnani.Bookmarks", + "alexdima.copy-relative-path", + "alexiv.vscode-angular2-files", + "amodio.toggle-excluded-files", + "cg-cnu.vscode-path-tools", + "chrisdias.vscode-opennewinstance", + "ctcuff.font-preview", + "dbaeumer.vscode-eslint", + "dnicolson.binary-plist", + "eamodio.gitlens", + "eg2.tslint", + "esbenp.prettier-vscode", + "henry-li.vscode-import-formatter", + "jack89ita.copy-filename", + "johnpapa.Angular2", + "marclipovsky.string-manipulation", + "marinhobrandao.angular2tests", + "mariusalchimavicius.json-to-ts", + "maximus136.change-string-case", + "mikebovenlander.formate", + "momoko8443.library-version", + "mrmlnc.vscode-json5", + "ms-azuretools.vscode-docker", + "ms-vscode.live-server", + "msjsdiag.debugger-for-chrome", + "natewallace.angular2-inline", + "natqe.reload", + "nemesv.copy-file-name", + "oven.bun-vscode", + "qwtel.sqlite-viewer", + "redhat.vscode-xml", + "ritwickdey.create-file-folder", + "rogalmic.bash-debug", + "rssowl.copy-relative-path-posix", + "ryanlaws.toggle-case", + "saber2pr.file-git-history", + "shakram02.bash-beautify", + "stepanog.angular1-inline", + "taddison.gitlazy", + "unifiedjs.vscode-mdx", + "firsttris.vscode-jest-runner", + "waderyan.gitblame", + "wcwhitehead.bootstrap-3-snippets", + "wenfangdu.snippet-generator", + "xabikos.javascriptsnippets", + "wmaurer.vscode-jumpy", + "nidu.copy-json-path", + "aaron-bond.better-comments", + "mikestead.dotenv", + "ryu1kn.partial-diff", + "Tyriar.sort-lines", + "ms-vscode-remote.remote-containers", + "DavidAnson.vscode-markdownlint", + "bibhasdn.unique-lines", + "streetsidesoftware.code-spell-checker", + "pranaygp.vscode-css-peek", + "kisstkondoros.vscode-codemetrics", + "vscode-icons-team.vscode-icons", + "Gruntfuggly.todo-tree", + "ms-vscode-remote.remote-ssh", + "tomoki1207.pdf", + "hediet.vscode-drawio", + "antfu.file-nesting" + ] +} \ No newline at end of file diff --git a/projects/container-v18/plugins-v18/taon-vscode-ext/.vscode/settings.json b/projects/container-v18/plugins-v18/taon-vscode-ext/.vscode/settings.json new file mode 100644 index 00000000..2f3b5acd --- /dev/null +++ b/projects/container-v18/plugins-v18/taon-vscode-ext/.vscode/settings.json @@ -0,0 +1,154 @@ +{ + "files.exclude": { + "**/*____ORIGINAL____.ts": true, + "_changelog": true, + "out": true, + "update-proj.js": true, + ".vscodeignore": true, + "*.vsix": true, + "**/node_modules": true, + "**/tmp*": true, + "**/dist*": true, + "**/bundle*": true, + "**/browser": true, + "**/browser*": true, + "**/websql": true, + "**/websql*": true, + "**/module*": true, + "**/backup": true, + "**/module": true, + "**/www": true, + "**/Thumbs.db": true, + "**/.DS_Store": true, + "**/**/.DS_Store": true, + "**/npm-debug.log*": true, + "**/.sass-cache": true, + "**/.sourcemaps": true, + "**/.vscode/tasks.json": true, + "**/.vscode/launch.json": true, + "**/.vscodeignore": true, + "**/vsc-extension-quickstart.md": true, + "**/tsconfig.json": true, + "**/update-proj.js": true, + "**/src/extension.ts": true, + "**/src/helpers.ts": true, + "**/src/models.ts": true, + "**/src/execute-command.ts": true, + "**/src/progress-output.ts": true, + "**/tsconfig.backend.dist.json": true, + "**/.gitignore": true, + "**/.npmignore": true, + "**/.babelrc": true, + "**/.npmrc": true, + "**/.eslintrc.json": true, + "**/.prettierignore": true, + "**/.prettierrc": true, + "**/.editorconfig": true, + "**/devDependencies.json": true, + "**/package.json": true, + "**/logo.svg": true, + ".firedev": true, + ".taon": true, + ".tnp": true, + ".": true, + "**/*.filetemplate": true, + "**/tsconfig.*": true, + "**/tslint.*": true, + "**/recent.json": true, + "**/angular.json": true, + "**/webpack*": true, + "**/docs/**/*.*": true, + "**/run-*": true, + "**/run.*": true, + "**/package-lock.json": true, + "**/protractor.conf.js": true, + "**/karma.conf.js": true, + "**/docs-config.schema.json": true + }, + "search.exclude": { + "docs": true, + "projects": true, + "bin": true, + "local_release": true, + "node_modules": true, + ".build": true, + ".vscode": true, + "browser": true, + "dist": true, + "package-lock.json": true, + ".firedev": true, + ".taon": true, + ".tnp": true, + ".": true, + "**/docs": true, + "**/projects": true, + "**/bin": true, + "**/local_release": true, + "**/node_modules": true, + "**/.build": true, + "**/.vscode": true, + "**/browser": true, + "**/dist": true, + "**/package-lock.json": true, + "**/.firedev": true, + "**/.taon": true, + "**/.tnp": true, + "**/.": true + }, + "typescript.tsc.autoDetect": "off", + "html.format.wrapAttributes": "force-aligned", + "workbench.colorTheme": "Default Light+", + "workbench.colorCustomizations": { + "activityBar.background": "#2570b6", + "statusBar.background": "#5c3735", + "statusBar.debuggingBackground": "#5c3735" + }, + "[typescriptreact]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": false + }, + "[json]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": false + }, + "[jsonc]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": false + }, + "[json5]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": false + }, + "[scss]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": false + }, + "[html]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": false + }, + "[javascript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": false + }, + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": false + }, + "editor.rulers": [ + 80, + 120 + ], + "eslint.migration.2_x": "off", + "eslint.enable": true, + "prettier.enable": true, + "editor.suggest.snippetsPreventQuickSuggestions": false, + "editor.inlineSuggest.enabled": true, + "prettier.prettierPath": "./node_modules/prettier", + "prettier.endOfLine": "auto", + "search.useIgnoreFiles": false, + "search.include": [ + "**/src/**" + ], + "window.title": "plugins-v18/taon-vscode-ext () [ ${activeEditorShort}]" +} \ No newline at end of file diff --git a/projects/container-v18/plugins-v18/firedev-vscode-ext/CHANGELOG.md b/projects/container-v18/plugins-v18/taon-vscode-ext/CHANGELOG.md similarity index 100% rename from projects/container-v18/plugins-v18/firedev-vscode-ext/CHANGELOG.md rename to projects/container-v18/plugins-v18/taon-vscode-ext/CHANGELOG.md diff --git a/projects/container-v18/plugins-v18/firedev-vscode-ext/LICENSE.txt b/projects/container-v18/plugins-v18/taon-vscode-ext/LICENSE.txt similarity index 100% rename from projects/container-v18/plugins-v18/firedev-vscode-ext/LICENSE.txt rename to projects/container-v18/plugins-v18/taon-vscode-ext/LICENSE.txt diff --git a/projects/container-v18/plugins-v18/taon-vscode-ext/README.md b/projects/container-v18/plugins-v18/taon-vscode-ext/README.md new file mode 100644 index 00000000..fe52d93d --- /dev/null +++ b/projects/container-v18/plugins-v18/taon-vscode-ext/README.md @@ -0,0 +1,8 @@ +# Taon + +INSTALLATION NOTES +------------------ +Taon is required for this extension: +``` +npm i -g taon +``` diff --git a/projects/container-v18/plugins-v18/firedev-vscode-ext/environment.js b/projects/container-v18/plugins-v18/taon-vscode-ext/environment.js similarity index 100% rename from projects/container-v18/plugins-v18/firedev-vscode-ext/environment.js rename to projects/container-v18/plugins-v18/taon-vscode-ext/environment.js diff --git a/projects/container-v18/plugins-v18/firedev-vscode-ext/linked-projects.json b/projects/container-v18/plugins-v18/taon-vscode-ext/linked-projects.json similarity index 100% rename from projects/container-v18/plugins-v18/firedev-vscode-ext/linked-projects.json rename to projects/container-v18/plugins-v18/taon-vscode-ext/linked-projects.json diff --git a/projects/container-v18/plugins-v18/firedev-vscode-ext/logo-128.png b/projects/container-v18/plugins-v18/taon-vscode-ext/logo-128.png similarity index 100% rename from projects/container-v18/plugins-v18/firedev-vscode-ext/logo-128.png rename to projects/container-v18/plugins-v18/taon-vscode-ext/logo-128.png diff --git a/projects/container-v18/plugins-v18/firedev-vscode-ext/package.json b/projects/container-v18/plugins-v18/taon-vscode-ext/package.json similarity index 92% rename from projects/container-v18/plugins-v18/firedev-vscode-ext/package.json rename to projects/container-v18/plugins-v18/taon-vscode-ext/package.json index 1b19cc98..f7f5a8f1 100644 --- a/projects/container-v18/plugins-v18/firedev-vscode-ext/package.json +++ b/projects/container-v18/plugins-v18/taon-vscode-ext/package.json @@ -44,17 +44,17 @@ "linkedRepos": [], "smartContainerBuildTarget": "" }, - "name": "firedev-vscode-ext", - "displayName": "firedev-vscode-ext", + "name": "taon-vscode-ext", + "displayName": "taon-vscode-ext", "icon": "logo-128.png", - "publisher": "firedev", + "publisher": "taon", "description": "", "version": "0.0.2", "engines": { "vscode": "^1.30.0" }, "repository": { - "url": "https://github.com/darekf77/firedev.git", + "url": "https://github.com/darekf77/taon.git", "type": "git" }, "categories": [ @@ -83,8 +83,8 @@ "title": "TNP OPEN CORE CONTAINER" }, { - "command": "extension.tnpcodegenfiredevminimal", - "title": "TNP CODE GEN. firedev minimal" + "command": "extension.tnpcodegentaonminimal", + "title": "TNP CODE GEN. taon minimal" }, { "command": "extension.tnpcodegenselect", @@ -106,7 +106,7 @@ "command": "extension.tnpopencorecontainer" }, { - "command": "extension.tnpcodegenfiredevminimal" + "command": "extension.tnpcodegentaonminimal" }, { "command": "extension.tnpcodegenselect" @@ -115,27 +115,27 @@ "editor/title/context": [ { "command": "extension.tnpmagiccopyandrename", - "group": "FIREDEV CLI essentials" + "group": "TAON CLI essentials" }, { "command": "extension.tnpopenroutesfile", - "group": "FIREDEV CLI essentials" + "group": "TAON CLI essentials" }, { "command": "extension.tnpopendatabasefile", - "group": "FIREDEV CLI essentials" + "group": "TAON CLI essentials" }, { "command": "extension.tnpopencorecontainer", - "group": "FIREDEV CLI essentials" + "group": "TAON CLI essentials" }, { - "command": "extension.tnpcodegenfiredevminimal", - "group": "FIREDEV CLI essentials" + "command": "extension.tnpcodegentaonminimal", + "group": "TAON CLI essentials" }, { "command": "extension.tnpcodegenselect", - "group": "FIREDEV CLI essentials" + "group": "TAON CLI essentials" } ] } @@ -279,14 +279,14 @@ "file-loader": "1.1.5", "file-saver": "2.0.5", "file-type": "18.5.0", - "firedev": "^16", - "firedev-crud": "~16.5.11", - "firedev-crud-deamon": "~16.5.11", - "firedev-ports": "~16.5.11", - "firedev-storage": "~16.5.11", - "firedev-type-sql": "~16.5.11", - "firedev-typeorm": "~16.5.13", - "firedev-ui": "~16.5.11", + "taon": "^16", + "taon-crud": "~16.5.11", + "taon-crud-deamon": "~16.5.11", + "taon-ports": "~16.5.11", + "taon-storage": "~16.5.11", + "taon-type-sql": "~16.5.11", + "taon-typeorm": "~16.5.13", + "taon-ui": "~16.5.11", "fkill": "6.1.0", "font-awesome": "4.7.0", "form-data": "4.0.0", @@ -430,4 +430,4 @@ "zone.js": "~0.13.0" }, "dependencies": {} -} +} \ No newline at end of file diff --git a/projects/container-v18/plugins-v18/taon-vscode-ext/src/config.ts b/projects/container-v18/plugins-v18/taon-vscode-ext/src/config.ts new file mode 100644 index 00000000..6749ba99 --- /dev/null +++ b/projects/container-v18/plugins-v18/taon-vscode-ext/src/config.ts @@ -0,0 +1,526 @@ +import { FRAMEWORK_NAME } from './constants'; +// import { capitalizeFirstLetter } from './helpers'; +import { CommandType } from './models'; + +const group = `TAON CLI essentials`; + +export const commands: CommandType[] = ( + [ + //#region MAGIC COPY AND RENAME + { + title: `${FRAMEWORK_NAME.toUpperCase()} MAGIC COPY AND RENAME`, + exec: `${FRAMEWORK_NAME} copy:and:rename '%rules%'`, + options: { + title: `taon is magically renaming files and folders..`, + cancellable: false, + resolveVariables: [ + { + variable: 'rules', + placeholder: `%fileName% -> %fileName%-new`, + encode: true, + }, + ], + }, + }, + //#endregion + //#region OPEN ROUTES FILE + { + title: `${FRAMEWORK_NAME.toUpperCase()} OPEN ROUTES FILE`, + exec: `${FRAMEWORK_NAME} open:routes`, + options: { + title: 'open vscode routes', + showSuccessMessage: false, + }, + }, + //#endregion + //#region OPEN DB FILE + { + title: `${FRAMEWORK_NAME.toUpperCase()} OPEN DATABASE FILE`, + exec: `${FRAMEWORK_NAME} open:db`, + options: { + title: 'open vscode db file', + showSuccessMessage: false, + }, + }, + //#endregion + //#region OPEN CORE CONTAINER + { + title: `${FRAMEWORK_NAME.toUpperCase()} OPEN CORE CONTAINER`, + exec: `${FRAMEWORK_NAME} open:core:container`, + options: { + title: 'opening core container', + findNearestProject: true, + showSuccessMessage: false, + }, + }, + //#endregion + //#region GENERATE taon minimal + { + title: `${FRAMEWORK_NAME.toUpperCase()} CODE GEN. taon minimal`, + exec: `${FRAMEWORK_NAME} generate %absolutePath% taon-minimal %entity%`, + options: { + title: 'generating taon code', + showSuccessMessage: false, + resolveVariables: [ + { + variable: 'entity', + placeholder: `my-entity`, + encode: true, + }, + ], + }, + }, + //#endregion + //#region GENERATE taon minimal + // { + // title: `${FRAMEWORK_NAME.toUpperCase()} CODE GEN. taon minimal=>full`, + // exec: `${FRAMEWORK_NAME} generate %absolutePath% taon-minimal-to-full %entity%`, + // options: { + // title: 'generating taon code', + // showSuccessMessage: false, + // // resolveVariables: [ + // // { + // // variable: 'entity', + // // placeholder: `my-entity`, + // // encode: true, + // // }, + // // ], + // }, + // }, + //#endregion + //#region GENERATE taon extended files + // { + // title: `${FRAMEWORK_NAME.toUpperCase()} CODE GEN. taon full`, + // exec: `${FRAMEWORK_NAME} generate %absolutePath% taon-full %entity%`, + // options: { + // title: 'generating taon code', + // showSuccessMessage: false, + // resolveVariables: [ + // { + // variable: 'entity', + // placeholder: `my-entity`, + // encode: true, + // }, + // ], + // }, + // }, + //#endregion + //#region CODE GEN. + { + title: `${FRAMEWORK_NAME.toUpperCase()} CODE GEN. - select -`, + exec: `${FRAMEWORK_NAME} generate %absolutePath% %moduleName% %entity%`, + // exec: `tnp generate %absolutePath% %moduleName% %entity%`, + options: { + title: 'generating taon code', + resolveVariables: [ + { + variable: 'moduleName', + options: [ + // { + // option: 'app-extended_flat', + // label: 'Generate extended app.* files for taon app', + // }, + { + option: 'dummy-angular-standalone-component', + label: 'Generate dummy Angular component structure', + }, + { + option: 'dummy-angular-module', + label: 'Generate dummy Angular module/component structure', + }, + { + option: 'dummy-angular-lazy-module', + label: + 'Generate dummy Angular lazy routing module/component structure', + }, + { + option: 'dummy-angular-lazy-module-container', + label: + 'Generate dummy Angular lazy routing module/container structure', + }, + // { + // option: 'taon-backend-frontend-module', + // label: 'Generate Taon backend/frontend module structure', + // }, + { + option: 'ngrx-feature-container-module', + label: 'Generate NgRx container module structure', + }, + { + option: 'ngrx-feature-container-module-for-lazy-routing', + label: + 'Generate NgRx container module structure for lazy routing', + }, + // { + // option: 'generated-index-exports_custom', + // label: 'Generate in index.ts typescript exports from folders', + // skipNextVariableResolve: true + // }, + // { + // option: 'wrap-with-browser-regions_custom', + // label: 'Wrap file with @browser regions', + // skipNextVariableResolve: true, + // }, + ], + }, + { + variable: 'entity', + placeholder: `my-entity-name`, + encode: true, + }, + ], + }, + }, + //#endregion + + //#region old commands + //#region TEMP FILES SHOW + // { + // title: `${FRAMEWORK_NAME.toUpperCase()} TEMP FILES => SHOW`, + // exec: `${FRAMEWORK_NAME} vscode:temp:show`, + // options: { + // title: 'show temporary files', + // findNearestProject: true, + // debug: true, + // cancellable: false, + // showSuccessMessage: false, + // }, + // }, + //#endregion + //#region TEMP FILES HIDE + // { + // title: `${FRAMEWORK_NAME.toUpperCase()} TEMP FILES => HIDE`, + // exec: `${FRAMEWORK_NAME} vscode:temp:hide`, + // options: { + // title: 'hide temporary files', + // debug: true, + // findNearestProject: true, + // cancellable: false, + // showSuccessMessage: false, + // }, + // }, + //#endregion + //#region OPEN CORE PROJECT + // { + // title: `${FRAMEWORK_NAME.toUpperCase()} OPEN CORE PROJECT`, + // exec: `${FRAMEWORK_NAME} open:core:project`, + // options: { + // title: 'opening core project', + // findNearestProject: true, + // showSuccessMessage: false, + // }, + // }, + //#endregion + //#region CLEAR ALL AND INIT + // { + // title: `${FRAMEWORK_NAME.toUpperCase()} CLEAR ALL AND INIT`, + // exec: [`${FRAMEWORK_NAME} clean`, `${FRAMEWORK_NAME} init`], + // options: { + // title: 'clear and init project', + // findNearestProject: true, + // askBeforeExecute: true, + // }, + // }, + //#endregion + //#region GIT COMMIT/PUSH UPDATE + // { + // title: `${FRAMEWORK_NAME.toUpperCase()} GIT COMMIT/PUSH UPDATE`, + // exec: `${FRAMEWORK_NAME} push`, + // options: { + // title: 'quick git commit and push', + // findNearestProjectWithGitRoot: true, + // }, + // }, + //#endregion + //#region GENERATE INDEX.TS + // { + // title: `${FRAMEWORK_NAME.toUpperCase()} GENERATE index.ts`, + // exec: `${FRAMEWORK_NAME} generate %absolutePath% generated-index-exports_custom`, + // options: { + // title: 'generating index.ts', + // showSuccessMessage: false, + // }, + // }, + //#endregion + //#region WRAP FILE WITH @BROWSER TAG + // { + // title: `${FRAMEWORK_NAME.toUpperCase()} WRAP FILE WITH @browser TAG`, + // exec: `${FRAMEWORK_NAME} generate %absolutePath% wrap-with-browser-regions_custom`, + // options: { + // title: 'wrapping file with @browser', + // showSuccessMessage: false, + // }, + // }, + //#endregion + + // { + // title: `${FRAMEWORK_NAME.toUpperCase()} OPEN workspace`, + // exec: `${FRAMEWORK_NAME} open:workspace`, + // options: { + // title: 'open vscode workspace', + // findNearestProjectType: 'workspace', + // showSuccessMessage: false + // } + // }, + // { + // title: `${FRAMEWORK_NAME.toUpperCase()} INIT project`, + // exec: `${FRAMEWORK_NAME} init`, + // options: { + // title: 'init project temporary files', + // findNearestProject: true, + // } + // }, + // { + // title: `${FRAMEWORK_NAME.toUpperCase()} OPEN ALL WORKSPACE CHILDS`, + // exec: `${FRAMEWORK_NAME} open:workspace:childs`, + // options: { + // title: 'open vscode workspace childs', + // findNearestProjectType: 'workspace', + // showSuccessMessage: false + // } + // }, + + // { + // title: `${FRAMEWORK_NAME.toUpperCase()} RELEASE PROJECT`, + // exec: `${FRAMEWORK_NAME} release`, + // options: { + // title: 'release project', + // findNearestProject: true + // } + // }, + // { + // title: `${FRAMEWORK_NAME.toUpperCase()} RESET PROJECT`, + // exec: `${FRAMEWORK_NAME} reset`, + // options: { + // title: 'remove project temporary files', + // findNearestProject: true, + // cancellable: false, + // } + // }, + // { + // title: `${FRAMEWORK_NAME.toUpperCase()} TEMP FILES ALL WORKSPACE CHILDS - show`, + // exec: 'tnp filesshowall', + // options: { + // title: `${FRAMEWORK_NAME} temporary files`, + // findNearestProject: true, + // cancellable: false, + // showSuccessMessage: false + // } + // }, + // { + // title:`${FRAMEWORK_NAME.toUpperCase()} FILES ALL WORKSPACE CHILDS - hide`, + // exec: `${FRAMEWORK_NAME} fileshideall`, + // options: { + // title: 'hide temporary files', + // findNearestProject: true, + // cancellable: false, + // showSuccessMessage: false + // } + // }, + // { + // title: 'FIREDEV BUILD dist', + // exec: 'tnp build:dist', + // options: { + // title: 'distribution build', + // findNearestProject: true + // } + // }, + // { + // title: 'FIREDEV STATIC REBUILD AND START', + // exec: 'tnp static:build:dist && tnp start', + // options: { + // findNearestProjectType: 'workspace', + // } + // }, + // { + // title: 'FIREDEV STATIC REBUILD PROD AND START', + // exec: 'tnp static:build:dist:prod && tnp start', + // options: { + // findNearestProjectType: 'workspace', + // } + // }, + // { + // title: 'FIREDEV STATIC START workspace', + // exec: 'tnp start', + // options: { + // findNearestProjectType: 'workspace', + // } + // }, + // { + // title: `${FRAMEWORK_NAME.toUpperCase()} STATIC BUILD`, + // exec: `${FRAMEWORK_NAME} static:build:dist`, + // options: { + // title: 'static (for workspace) distribution build', + // findNearestProject: true, + // } + // }, + // { + // title: `${FRAMEWORK_NAME.toUpperCase()} STATIC BUILD PROD`, + // exec: `${FRAMEWORK_NAME} static:build:dist:prod`, + // options: { + // title: 'static (for workspace) distribution production build', + // findNearestProject: true, + // } + // }, + // { + // title: `${FRAMEWORK_NAME.toUpperCase()} PACKAGE.JSON hide deps`, + // exec: `${FRAMEWORK_NAME} deps:hide`, + // options: { + // title: 'package.json hide dependencies', + // findNearestProject: true, + // cancellable: false, + // } + // }, + // { + // title: `${FRAMEWORK_NAME.toUpperCase()} PACKAGE.JSON show deps`, + // exec: `${FRAMEWORK_NAME} deps:show`, + // options: { + // title: 'package.json show dependencies', + // findNearestProject: true, + // cancellable: false, + // } + // }, + // { + // title: `${FRAMEWORK_NAME.toUpperCase()} NEW LOGIC-UI MODULE`, + // exec: `${FRAMEWORK_NAME} new model %name% %realtivePath%`, + // options: { + // title: 'craete new logic-ui model', + // findNearestProject: true, + // } + // }, + // { + // title: `${FRAMEWORK_NAME.toUpperCase()} NEW UI MODULE`, + // exec: `${FRAMEWORK_NAME} new model %name% %realtivePath%`, + // options: { + // title: 'craete new logic-ui model', + // findNearestProject: true, + // } + // }, + // { + // title: `${FRAMEWORK_NAME.toUpperCase()} QUICK GIT reset hard and pull`, + // exec: `${FRAMEWORK_NAME} ${camelize('$GIT_QUICK_RESET_HARD_AND_PULL')}`, + // options: { + // title: 'quick git reset and pull', + // findNearestProjectWithGitRoot: true, + // askBeforeExecute: true, + // } + // }, + // { + // title: `${FRAMEWORK_NAME.toUpperCase()} AUTOUPDATE`, + // exec: `${FRAMEWORK_NAME} vscode:ext`, + // options: { + // title: 'taon vscode extension autoupdate', + // reloadAfterSuccesFinish: true, + // cancellable: false, + // } + // }, + // { + // title: `${FRAMEWORK_NAME.toUpperCase()} NEW PREVIEW FOR UI MODULE`, + // exec: `${FRAMEWORK_NAME} new model %name% %realtivePath%`, + // options: { + // title: 'craete new logic-ui model', + // findNearestProject: true, + // } + // }, + // { + // title: `${FRAMEWORK_NAME.toUpperCase()} OPEN baseline`, + // exec: `${FRAMEWORK_NAME} open:baseline`, + // options: { + // title: 'open baseline for site', + // findNearestProject: true, + // showSuccessMessage: false + // } + // }, + // { + // title: `${FRAMEWORK_NAME.toUpperCase()} RUN DEFAULT BUILD`, + // exec: `${FRAMEWORK_NAME} default:build`, + // isDefaultBuildCommand: true, + // hideContextMenu: true, + // options: { + // progressLocation: 'statusbar', + // title: 'FIREDEV RUN DEFAULT BUILD', + // cancellable: true, + // findNearestProject: true, + // } + // }, + // { + // hideContextMenu: true, + // title: `${FRAMEWORK_NAME.toUpperCase()} STOP DEFAULT BUILD`, + // exec: `${FRAMEWORK_NAME} stop:default:build`, + // options: { + // title: 'FIREDEV DEFAULT BUILD', + // showSuccessMessage: true, + // cancellable: false, + // findNearestProject: true, + // } + // } + // { + // title: 'FIREDEV: TEST EXT', + // exec: 'tnp show:loop:messages --max 6 --tnpShowProgress', + // options: { + // cancellable: false, + // title: 'Testing progress' + // } + // }, + // { + // title: 'FIREDEV: show version', + // exec: 'tnp version', + // options: { + // syncProcess: true, + // title: 'Show version of taon' + // } + // }, + + // only for tests + // { + // title: 'FIREDEV TEST nearest project', + // exec: 'tnp processcwd', + // options: { + // findNearestProject: true, + // syncProcess: true + // } + // }, + // { + // title: 'FIREDEV TEST nearest project with git root', + // exec: 'tnp processcwd', + // options: { + // findNearestProjectWithGitRoot: true, + // syncProcess: true + // } + // }, + // { + // title: 'FIREDEV TEST nearest project workspace', + // exec: 'tnp processcwd', + // options: { + // findNearestProjectType: 'container', + // syncProcess: true + // } + // }, + // { + // title: 'FIREDEV TEST nearest project workspace with git root', + // exec: 'tnp processcwd', + // options: { + // findNearestProjectTypeWithGitRoot: 'workspace', + // syncProcess: true + // } + // } + //#endregion + ] as CommandType[] +).map(c => { + if (!c.command) { + c.command = `extension.${camelize(c.title)}`; + } + if (!c.group) { + c.group = group; + } + return c; +}); + +function camelize(str: string = '') { + str = str.replace(/\W/g, '').toLowerCase(); + return str + .replace(/(?:^\w|[A-Z]|\b\w)/g, function (word, index) { + return index == 0 ? word.toLowerCase() : word.toUpperCase(); + }) + .replace(/\s+/g, ''); +} diff --git a/projects/container-v18/plugins-v18/taon-vscode-ext/src/constants.ts b/projects/container-v18/plugins-v18/taon-vscode-ext/src/constants.ts new file mode 100644 index 00000000..44838c5f --- /dev/null +++ b/projects/container-v18/plugins-v18/taon-vscode-ext/src/constants.ts @@ -0,0 +1,4 @@ +// import { frameworkName } from 'tnp-core'; +// console.log(process.argv); +import { BUILD_FRAMEWORK_CLI_NAME } from './lib/build-info._auto-generated_'; +export const FRAMEWORK_NAME = BUILD_FRAMEWORK_CLI_NAME; diff --git a/projects/container-v18/plugins-v18/taon-vscode-ext/src/test/extension.test.ts b/projects/container-v18/plugins-v18/taon-vscode-ext/src/test/extension.test.ts new file mode 100644 index 00000000..ecd0b50e --- /dev/null +++ b/projects/container-v18/plugins-v18/taon-vscode-ext/src/test/extension.test.ts @@ -0,0 +1,22 @@ +// // +// // Note: This example test is leveraging the Mocha test framework. +// // Please refer to their documentation on https://mochajs.org/ for help. +// // + +// // The module 'assert' provides assertion methods from node +// import * as assert from 'assert'; + +// // You can import and use all API from the 'vscode' module +// // as well as import your extension to test it +// // import * as vscode from 'vscode'; +// // import * as myExtension from '../extension'; + +// // Defines a Mocha test suite to group tests of similar kind together +// suite("Extension Tests", function () { + +// // Defines a Mocha unit test +// test("Something 1", function() { +// assert.equal(-1, [1, 2, 3].indexOf(5)); +// assert.equal(-1, [1, 2, 3].indexOf(0)); +// }); +// }); \ No newline at end of file diff --git a/projects/container-v18/plugins-v18/taon-vscode-ext/src/test/index.ts b/projects/container-v18/plugins-v18/taon-vscode-ext/src/test/index.ts new file mode 100644 index 00000000..9fa2ea0d --- /dev/null +++ b/projects/container-v18/plugins-v18/taon-vscode-ext/src/test/index.ts @@ -0,0 +1,22 @@ +// +// PLEASE DO NOT MODIFY / DELETE UNLESS YOU KNOW WHAT YOU ARE DOING +// +// This file is providing the test runner to use when running extension tests. +// By default the test runner in use is Mocha based. +// +// You can provide your own test runner if you want to override it by exporting +// a function run(testRoot: string, clb: (error:Error) => void) that the extension +// host can call to run the tests. The test runner is expected to use console.log +// to report the results back to the caller. When the tests are finished, return +// a possible error to the callback or null if none. + +import * as testRunner from 'vscode/lib/testrunner'; + +// You can directly control Mocha options by uncommenting the following lines +// See https://github.com/mochajs/mocha/wiki/Using-mocha-programmatically#set-options for more info +testRunner.configure({ + ui: 'tdd', // the TDD UI is being used in extension.test.ts (suite, test, etc.) + useColors: true // colored output from test results +}); + +module.exports = testRunner; \ No newline at end of file diff --git a/projects/container-v18/plugins-v18/firedev-vscode-ext/firedev.jsonc b/projects/container-v18/plugins-v18/taon-vscode-ext/taon.jsonc similarity index 99% rename from projects/container-v18/plugins-v18/firedev-vscode-ext/firedev.jsonc rename to projects/container-v18/plugins-v18/taon-vscode-ext/taon.jsonc index c2c5b078..bb355489 100644 --- a/projects/container-v18/plugins-v18/firedev-vscode-ext/firedev.jsonc +++ b/projects/container-v18/plugins-v18/taon-vscode-ext/taon.jsonc @@ -38,4 +38,4 @@ "license": "MIT", "private": false, "workerPlugins": {} -} +} \ No newline at end of file diff --git a/projects/container-v18/plugins-v18/firedev-vscode-ext/tsconfig.json b/projects/container-v18/plugins-v18/taon-vscode-ext/tsconfig.json similarity index 100% rename from projects/container-v18/plugins-v18/firedev-vscode-ext/tsconfig.json rename to projects/container-v18/plugins-v18/taon-vscode-ext/tsconfig.json diff --git a/projects/container-v18/taon b/projects/container-v18/taon new file mode 100644 index 00000000..ba33df3a --- /dev/null +++ b/projects/container-v18/taon @@ -0,0 +1,10 @@ + + Current folder (c:/Users/darek/projects/npm/taon-dev/taon/projects/container-v18) + is not a git root folder, but nearest project with + git root has been found in: npm/taon-dev/taon + + +[?25l? Would you like to use this project ? » no / yes× Would you like to use this project ? ... no / yes +[?25h[tnp] This is not git root project folder +Project container-v18 is not a git root + locaiton: c:/Users/darek/projects/npm/taon-dev/taon/projects/container-v18 diff --git a/projects/container-v18/taon.jsonc b/projects/container-v18/taon.jsonc index c9eac157..dcdab0e9 100644 --- a/projects/container-v18/taon.jsonc +++ b/projects/container-v18/taon.jsonc @@ -65,8 +65,8 @@ "babel-preset-es2015": null, "node-sass": null, - // TODO remove firedev ui - // "firedev-ui": null, + // TODO remove taon ui + // "taon-ui": null, //#endregion //#region FIND ALTERNATIVE @@ -541,6 +541,9 @@ // @trusted=major "ngx-photo-editor": "0.4.4", + // @trusted=major + "ngx-infinite-scroll": "18.0.0", + //#endregion //#region STRING MANIPULATIONS // compare advanced strings @@ -894,9 +897,11 @@ // @trusted=patch "nodemon": "~2.0.22", - // @trusted=patch + // @deprecated "enum-values": "1.2.1", + "typescript-string-enums": "^1.0.0", + //#endregion //#region BACKEND FILES/SYSTEM @@ -1091,9 +1096,9 @@ //#region my packages "taon-typeorm": "18.0.9", - // "firedev-crud": "18.0.5", - // "firedev-ports": "18.0.5", - // "firedev-ui": "18.0.6", + // "taon-crud": "18.0.5", + // "taon-ports": "18.0.5", + // "taon-ui": "18.0.6", // "tnp-cli": "18.0.5", "record-replay-req-res-scenario": "18.0.9", "ng-talkback": "18.0.9", @@ -1110,7 +1115,7 @@ "tnp-helpers": "18.0.10", "incremental-compiler": "18.0.10", // "any-project-cli": "18.0.6", - // "firedev-crud-deamon": "18.0.6", + // "taon-crud-deamon": "18.0.6", // "tnp-db": "18.0.6", "magic-renamer": "18.0.10", "isomorphic-region-loader": "18.0.10", @@ -1142,4 +1147,4 @@ "license": "UNLICENSED", "private": true, "workerPlugins": {}, -} \ No newline at end of file +} diff --git a/projects/container-v18/vscode-ext-v18/.editorconfig b/projects/container-v18/vscode-ext-v18/.editorconfig index 6e87a003..578226e7 100644 --- a/projects/container-v18/vscode-ext-v18/.editorconfig +++ b/projects/container-v18/vscode-ext-v18/.editorconfig @@ -1,3 +1,4 @@ + # Editor configuration, see http://editorconfig.org root = true @@ -8,6 +9,10 @@ indent_size = 2 insert_final_newline = true trim_trailing_whitespace = true +[*.ts] +quote_type = single + + [*.md] max_line_length = off trim_trailing_whitespace = false diff --git a/projects/container-v18/vscode-ext-v18/.eslintrc.json b/projects/container-v18/vscode-ext-v18/.eslintrc.json new file mode 100644 index 00000000..abc909e3 --- /dev/null +++ b/projects/container-v18/vscode-ext-v18/.eslintrc.json @@ -0,0 +1,92 @@ +{ + "root": true, + "ignorePatterns": [ + "projects/**/*" + ], + "plugins": [ + "@typescript-eslint" + ], + "overrides": [ + { + "files": [ + "*.ts" + ], + "parserOptions": { + "project": [ + "tsconfig.json" + ], + "createDefaultProgram": true + }, + "extends": [ + "plugin:@angular-eslint/recommended", + "plugin:@angular-eslint/template/process-inline-templates", + "prettier" + ], + "rules": { + "@angular-eslint/component-class-suffix": [ + "warn", + { + "suffixes": [ + "Page", + "Component" + ] + } + ], + "@angular-eslint/component-selector": [ + "warn", + { + "type": "element", + "prefix": "app", + "style": "kebab-case" + } + ], + "@angular-eslint/directive-selector": [ + "warn", + { + "type": "attribute", + "prefix": "app", + "style": "camelCase" + } + ], + "@typescript-eslint/member-ordering": 0, + "@typescript-eslint/explicit-function-return-type": "warn", + "@typescript-eslint/typedef": [ + "warn", + { + "memberVariableDeclaration": true, + "parameter": true, + "propertyDeclaration": true + } + ] + } + }, + { + "files": [ + "*.html" + ], + "extends": [ + "plugin:@angular-eslint/template/recommended" + ], + "rules": {} + }, + { + "files": [ + "*.html" + ], + "excludedFiles": [ + "*inline-template-*.component.html" + ], + "extends": [ + "plugin:prettier/recommended" + ], + "rules": { + "prettier/prettier": [ + "error", + { + "parser": "angular" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/projects/container-v18/vscode-ext-v18/.gitignore b/projects/container-v18/vscode-ext-v18/.gitignore index 2789ef47..a7e911ef 100644 --- a/projects/container-v18/vscode-ext-v18/.gitignore +++ b/projects/container-v18/vscode-ext-v18/.gitignore @@ -4,6 +4,7 @@ speed-measure-plugin*.json # misc /.sass-cache +/**/tmp-* /connect.lock /coverage /libpeerconnection.log @@ -11,9 +12,16 @@ npm-debug.log yarn-error.log testem.log /typings +app.hosts.ts +/**/*._auto-generated_.ts +/**/BUILD-INFO.md /linked-repos /tests-environments +/src/lib/lib-info.md +/src/migrations/migrations-info.md +/src/tests/mocha-tests-info.md +/src/assets/shared/shared_folder_info.txt # System Files .DS_Store @@ -40,11 +48,9 @@ Thumbs.db /.sourcemaps /src-for-stanalone /components-for-stanalone -/tsconfig.backend.dist.json -/tsconfig.backend.bundle.json - !tsconfig* # ===================== +!taon.jsonc !*.filetemplate diff --git a/projects/container-v18/vscode-ext-v18/.npmignore b/projects/container-v18/vscode-ext-v18/.npmignore index b06b2a2d..623e34ae 100644 --- a/projects/container-v18/vscode-ext-v18/.npmignore +++ b/projects/container-v18/vscode-ext-v18/.npmignore @@ -1,11 +1,10 @@ .vscode -dist/ -src/ +/dist +/src +/app +/source /docs /preview /tests tsconfig.json npm-debug.log* -.npmrc -tslint.json -.editorconfig diff --git a/projects/container-v18/vscode-ext-v18/.prettierignore b/projects/container-v18/vscode-ext-v18/.prettierignore new file mode 100644 index 00000000..19353d3c --- /dev/null +++ b/projects/container-v18/vscode-ext-v18/.prettierignore @@ -0,0 +1,28 @@ + +# This file is generated by taon.dev +/build +/coverage +/e2e +/docs +/node_modules +*.md +**/*.md +tmp-* +**/tmp-* +**/src/assets/**/*.* +/.build +/projects +*.js + +/dist* +/bundle* +/browser +/browser* +/websql +/websql* +/module* +/backup +/module +/www + + \ No newline at end of file diff --git a/projects/container-v18/vscode-ext-v18/.prettierrc b/projects/container-v18/vscode-ext-v18/.prettierrc new file mode 100644 index 00000000..87bca2c3 --- /dev/null +++ b/projects/container-v18/vscode-ext-v18/.prettierrc @@ -0,0 +1,13 @@ +{ + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "semi": true, + "bracketSpacing": true, + "arrowParens": "avoid", + "trailingComma": "all", + "bracketSameLine": true, + "printWidth": 80, + "singleAttributePerLine": true, + "endOfLine": "auto" +} \ No newline at end of file diff --git a/projects/container-v18/vscode-ext-v18/.vscode/extensions.json b/projects/container-v18/vscode-ext-v18/.vscode/extensions.json index ee71911b..cd013603 100644 --- a/projects/container-v18/vscode-ext-v18/.vscode/extensions.json +++ b/projects/container-v18/vscode-ext-v18/.vscode/extensions.json @@ -1,7 +1,75 @@ { - // See http://go.microsoft.com/fwlink/?LinkId=827846 - // for the documentation about the extensions.json format - "recommendations": [ - "eg2.tslint" - ] + "recommendations": [ + "Angular.ng-template", + "EditorConfig.EditorConfig", + "GitHub.copilot", + "IBM.output-colorizer", + "Mikael.Angular-BeastCode", + "SimonSiefke.svg-preview", + "Zaczero.bootstrap-v4-snippets", + "aeschli.vscode-css-formatter", + "alefragnani.Bookmarks", + "alexdima.copy-relative-path", + "alexiv.vscode-angular2-files", + "amodio.toggle-excluded-files", + "cg-cnu.vscode-path-tools", + "chrisdias.vscode-opennewinstance", + "ctcuff.font-preview", + "dbaeumer.vscode-eslint", + "dnicolson.binary-plist", + "eamodio.gitlens", + "eg2.tslint", + "esbenp.prettier-vscode", + "henry-li.vscode-import-formatter", + "jack89ita.copy-filename", + "johnpapa.Angular2", + "marclipovsky.string-manipulation", + "marinhobrandao.angular2tests", + "mariusalchimavicius.json-to-ts", + "maximus136.change-string-case", + "mikebovenlander.formate", + "momoko8443.library-version", + "mrmlnc.vscode-json5", + "ms-azuretools.vscode-docker", + "ms-vscode.live-server", + "msjsdiag.debugger-for-chrome", + "natewallace.angular2-inline", + "natqe.reload", + "nemesv.copy-file-name", + "oven.bun-vscode", + "qwtel.sqlite-viewer", + "redhat.vscode-xml", + "ritwickdey.create-file-folder", + "rogalmic.bash-debug", + "rssowl.copy-relative-path-posix", + "ryanlaws.toggle-case", + "saber2pr.file-git-history", + "shakram02.bash-beautify", + "stepanog.angular1-inline", + "taddison.gitlazy", + "unifiedjs.vscode-mdx", + "vespa-dev-works.jestrunit", + "waderyan.gitblame", + "wcwhitehead.bootstrap-3-snippets", + "wenfangdu.snippet-generator", + "xabikos.javascriptsnippets", + "wmaurer.vscode-jumpy", + "nidu.copy-json-path", + "aaron-bond.better-comments", + "mikestead.dotenv", + "ryu1kn.partial-diff", + "Tyriar.sort-lines", + "ms-vscode-remote.remote-containers", + "DavidAnson.vscode-markdownlint", + "bibhasdn.unique-lines", + "streetsidesoftware.code-spell-checker", + "pranaygp.vscode-css-peek", + "kisstkondoros.vscode-codemetrics", + "vscode-icons-team.vscode-icons", + "Gruntfuggly.todo-tree", + "ms-vscode-remote.remote-ssh", + "tomoki1207.pdf", + "hediet.vscode-drawio", + "antfu.file-nesting" + ] } \ No newline at end of file diff --git a/projects/container-v18/vscode-ext-v18/.vscode/launch.json b/projects/container-v18/vscode-ext-v18/.vscode/launch.json index 60182029..436a0552 100644 --- a/projects/container-v18/vscode-ext-v18/.vscode/launch.json +++ b/projects/container-v18/vscode-ext-v18/.vscode/launch.json @@ -5,18 +5,19 @@ { "version": "0.2.0", "configurations": [{ - "name": "Run Extension", - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}" - ], - "outFiles": [ - "${workspaceFolder}/out/**/*.js" - ], - "preLaunchTask": "npm: watch" - }, + "name": "Run Extension", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}" + ], + + "outFiles": [ + "${workspaceFolder}/out/**/*.js" + ] + }, { "name": "Extension Tests", "type": "extensionHost", @@ -32,4 +33,4 @@ "preLaunchTask": "npm: watch" } ] -} +} \ No newline at end of file diff --git a/projects/container-v18/vscode-ext-v18/.vscode/settings.json b/projects/container-v18/vscode-ext-v18/.vscode/settings.json index 1ddb7794..81d86b06 100644 --- a/projects/container-v18/vscode-ext-v18/.vscode/settings.json +++ b/projects/container-v18/vscode-ext-v18/.vscode/settings.json @@ -1,56 +1,65 @@ { "files.exclude": { - "**/*____ORIGINAL____.ts": true, - "_changelog": true, - "tsconfig.backend.dist.json": true, - "tsconfig.backend.bundle.json": true, - "tsconfig.backend.dist.json.filetemplate": true, - "tsconfig.backend.bundle.json.filetemplate": true, - "out": true, - "update-proj.js": true, - ".vscodeignore": true, - "*.vsix": true, + "**/*____ORIGINAL____.ts": false, + "_changelog": false, + "out": false, + "update-proj.js": false, + ".vscodeignore": false, + "*.vsix": false, + "**/node_modules": false, + "**/tmp*": false, + "**/dist*": false, + "**/bundle*": false, + "**/browser": false, + "**/browser*": false, + "**/websql": false, + "**/websql*": false, + "**/module*": false, + "**/backup": false, + "**/module": false, + "**/www": false, + "**/Thumbs.db": false, + "**/.DS_Store": false, + "**/**/.DS_Store": false, + "**/npm-debug.log*": false, + "**/.sass-cache": false, + "**/.sourcemaps": false, + "**/src-for-stanalone": false, + "**/components-for-stanalone": false, + "**/tsconfig.backend.dist.json": false, + "**/.gitignore": false, + "**/.npmignore": false, + "**/.babelrc": false, + "**/.npmrc": false, + "**/.eslintrc.json": false, + "**/.prettierignore": false, + "**/.prettierrc": false, + "**/.editorconfig": false, + "**/devDependencies.json": false, + "**/package.json": false, + "**/logo.svg": false + }, + "search.exclude": { + "docs": true, + "projects": true, + "bin": true, + "local_release": true, "node_modules": true, - "tmp*": true, - "dist*": true, - "bundle*": true, + ".build": true, + ".vscode": true, "browser": true, - "browser*": true, - "websql": true, - "websql*": true, - "module*": true, - "backup": true, - "module": true, - "www": true, - "Thumbs.db": true, - ".DS_Store": true, - "**/.DS_Store": true, - "npm-debug.log*": true, - ".sass-cache": true, - ".sourcemaps": true, - "src-for-stanalone": true, - "components-for-stanalone": true, - ".gitignore": true, - ".npmignore": true, - ".npmrc": true, - ".babelrc": true, - "package.json_devDependencies.json": true, - "package.json": true, - "docs": true, - "logo.svg": true, - "**/*.filetemplate": true, - "**/tsconfig.*": true, - "tslint.*": true, - "index.*": true, + "dist": true, "package-lock.json": true, - "protractor.conf.js": true, - "karma.conf.js": true, - ".editorconfig": true, - ".vscode/launch.json": false, - ".vscode/tasks.json": false - }, - "search.exclude": { - "out": true + "**/docs": true, + "**/projects": true, + "**/bin": true, + "**/local_release": true, + "**/node_modules": true, + "**/.build": true, + "**/.vscode": true, + "**/browser": true, + "**/dist": true, + "**/package-lock.json": true }, "typescript.tsc.autoDetect": "off", "html.format.wrapAttributes": "force-aligned", @@ -59,5 +68,52 @@ "activityBar.background": "#25b6a3", "statusBar.background": "#25b6a3", "statusBar.debuggingBackground": "#25b6a3" - } -} \ No newline at end of file + }, + "search.useIgnoreFiles": false, + "search.include": [ + "**/src/**" + ], + "[typescriptreact]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": false + }, + "[json]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": false + }, + "[jsonc]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": false + }, + "[json5]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": false + }, + "[scss]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": false + }, + "[html]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": false + }, + "[javascript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": false + }, + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": false + }, + "editor.rulers": [ + 80, + 120 + ], + "eslint.migration.2_x": "off", + "eslint.enable": true, + "prettier.enable": true, + "editor.suggest.snippetsPreventQuickSuggestions": false, + "editor.inlineSuggest.enabled": true, + "prettier.prettierPath": "./node_modules/prettier", + "prettier.endOfLine": "auto" +} diff --git a/projects/container-v18/vscode-ext-v18/CHANGELOG.md b/projects/container-v18/vscode-ext-v18/CHANGELOG.md index 79742db7..326d3614 100644 --- a/projects/container-v18/vscode-ext-v18/CHANGELOG.md +++ b/projects/container-v18/vscode-ext-v18/CHANGELOG.md @@ -4,4 +4,4 @@ All notable changes to the "navi-vscode-ext" extension will be documented in thi Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. ## [Unreleased] -- Initial release \ No newline at end of file +- Initial release diff --git a/projects/container-v18/vscode-ext-v18/linked-projects.json b/projects/container-v18/vscode-ext-v18/linked-projects.json new file mode 100644 index 00000000..6a600b3a --- /dev/null +++ b/projects/container-v18/vscode-ext-v18/linked-projects.json @@ -0,0 +1,3 @@ +{ + "projects": [] +} diff --git a/projects/container-v18/vscode-ext-v18/menu.png b/projects/container-v18/vscode-ext-v18/menu.png deleted file mode 100644 index 6653dc34055f214b323d6427b55014be6282a41e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135546 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 diff --git a/projects/container-v18/vscode-ext-v18/package.json b/projects/container-v18/vscode-ext-v18/package.json index dc56b24b..3fc30b11 100644 --- a/projects/container-v18/vscode-ext-v18/package.json +++ b/projects/container-v18/vscode-ext-v18/package.json @@ -82,11 +82,11 @@ "editor/title/context": [ { "command": "extension.hello", - "group": "Firedev CLI essentials" + "group": "Taon CLI essentials" }, { "command": "extension.siema", - "group": "Firedev CLI essentials" + "group": "Taon CLI essentials" } ] } @@ -230,14 +230,14 @@ "file-loader": "1.1.5", "file-saver": "2.0.5", "file-type": "18.5.0", - "firedev": "^16", - "firedev-crud": "~16.0.56", - "firedev-crud-deamon": "~16.0.45", - "firedev-ports": "~16.0.51", - "firedev-storage": "~16.0.42", - "firedev-type-sql": "~16.0.3", - "firedev-typeorm": "~16.0.40", - "firedev-ui": "~16.0.10", + "taon": "^16", + "taon-crud": "~16.0.56", + "taon-crud-deamon": "~16.0.45", + "taon-ports": "~16.0.51", + "taon-storage": "~16.0.42", + "taon-type-sql": "~16.0.3", + "taon-typeorm": "~16.0.40", + "taon-ui": "~16.0.10", "fkill": "6.1.0", "font-awesome": "4.7.0", "form-data": "4.0.0", @@ -386,4 +386,4 @@ "engines": { "vscode": "^1.30.0" } -} +} \ No newline at end of file diff --git a/projects/container-v18/vscode-ext-v18/src/config.ts b/projects/container-v18/vscode-ext-v18/src/config.ts index c1ad0db6..5dd1e09b 100644 --- a/projects/container-v18/vscode-ext-v18/src/config.ts +++ b/projects/container-v18/vscode-ext-v18/src/config.ts @@ -1,15 +1,17 @@ import { CommandType } from './models'; -const group = 'Firedev CLI essentials'; +const group = 'Taon CLI essentials'; -export const commands: CommandType[] = ([ - { - title: 'hello' - }, - { - title: 'siema' - } -] as CommandType[]).map(c => { +export const commands: CommandType[] = ( + [ + { + title: 'hello', + }, + { + title: 'siema', + }, + ] as CommandType[] +).map(c => { if (!c.command) { c.command = `extension.${camelize(c.title)}`; } @@ -17,12 +19,13 @@ export const commands: CommandType[] = ([ c.group = group; } return c; -}) - +}); function camelize(str: string = '') { str = str.replace(/\W/g, '').toLowerCase(); - return str.replace(/(?:^\w|[A-Z]|\b\w)/g, function (word, index) { - return index == 0 ? word.toLowerCase() : word.toUpperCase(); - }).replace(/\s+/g, ''); + return str + .replace(/(?:^\w|[A-Z]|\b\w)/g, function (word, index) { + return index == 0 ? word.toLowerCase() : word.toUpperCase(); + }) + .replace(/\s+/g, ''); } diff --git a/projects/container-v18/vscode-ext-v18/src/execute-command.ts b/projects/container-v18/vscode-ext-v18/src/execute-command.ts index 1ca8c452..5f1d3829 100644 --- a/projects/container-v18/vscode-ext-v18/src/execute-command.ts +++ b/projects/container-v18/vscode-ext-v18/src/execute-command.ts @@ -5,21 +5,32 @@ import * as child from 'child_process'; import { window, ProgressLocation } from 'vscode'; import { ProcesOptions, ProgressData, ResolveVariable } from './models'; import { - capitalizeFirstLetter, optionsFix, Log, getModuleName, shell, - escapeStringForRegEx, deepClone, valueFromCommand, crossPlatformPath + capitalizeFirstLetter, + optionsFix, + Log, + getModuleName, + shell, + escapeStringForRegEx, + deepClone, + valueFromCommand, + crossPlatformPath, } from './helpers'; const log = Log.instance(`execute-command`, 'logmsg'); -export function executeCommand(registerName: string, commandToExecute: string | string[], - pOptions?: ProcesOptions, isDefaultBuildCommand?: boolean, context?: vscode.ExtensionContext) { - - const commandToExecuteReadable = '"' + - ( - (Array.isArray(commandToExecute) ? commandToExecute.join(',') : commandToExecute) - ) - + '"'; - +export function executeCommand( + registerName: string, + commandToExecute: string | string[], + pOptions?: ProcesOptions, + isDefaultBuildCommand?: boolean, + context?: vscode.ExtensionContext, +) { + const commandToExecuteReadable = + '"' + + (Array.isArray(commandToExecute) + ? commandToExecute.join(',') + : commandToExecute) + + '"'; return vscode.commands.registerCommand(registerName, function (uri) { const options = optionsFix(deepClone(pOptions)); @@ -28,10 +39,22 @@ export function executeCommand(registerName: string, commandToExecute: string | progressLocation = ProgressLocation.Window; } - let { findNearestProject, findNearestProjectType, reloadAfterSuccesFinish, - findNearestProjectTypeWithGitRoot, findNearestProjectWithGitRoot, - syncProcess, cancellable, title, tnpNonInteractive, askBeforeExecute, resolveVariables, - tnpShowProgress, showOutputDataOnSuccess, showSuccessMessage } = options; + let { + findNearestProject, + findNearestProjectType, + reloadAfterSuccesFinish, + findNearestProjectTypeWithGitRoot, + findNearestProjectWithGitRoot, + syncProcess, + cancellable, + title, + tnpNonInteractive, + askBeforeExecute, + resolveVariables, + tnpShowProgress, + showOutputDataOnSuccess, + showSuccessMessage, + } = options; //#region prevent incorrect uri if (typeof uri === 'undefined') { @@ -43,12 +66,20 @@ export function executeCommand(registerName: string, commandToExecute: string | //#region resovle cwd, relative path log.data(`root path ${vscode.workspace.rootPath?.toString()}`); - var relativePathToFileFromWorkspaceRoot = uri ? vscode.workspace.asRelativePath(uri) : ''; + var relativePathToFileFromWorkspaceRoot = uri + ? vscode.workspace.asRelativePath(uri) + : ''; log.data(`relativePath: '${relativePathToFileFromWorkspaceRoot}' `); - const isAbsolute = !uri ? true : path.isAbsolute(relativePathToFileFromWorkspaceRoot); + const isAbsolute = !uri + ? true + : path.isAbsolute(relativePathToFileFromWorkspaceRoot); log.data(`isAbsolute: ${isAbsolute} `); - relativePathToFileFromWorkspaceRoot = crossPlatformPath(relativePathToFileFromWorkspaceRoot); - log.data(`relativePath replaced \ '${relativePathToFileFromWorkspaceRoot}' `); + relativePathToFileFromWorkspaceRoot = crossPlatformPath( + relativePathToFileFromWorkspaceRoot, + ); + log.data( + `relativePath replaced \ '${relativePathToFileFromWorkspaceRoot}' `, + ); // @ts-ignore const cwd = crossPlatformPath(vscode.workspace.rootPath); log.data(`cwd: ${cwd} `); @@ -60,14 +91,17 @@ export function executeCommand(registerName: string, commandToExecute: string | //#region handle first asking about executing command if (askBeforeExecute) { - const continueMsg = `Continue: ` + (title ? title : `command: ${commandToExecuteReadable}`); - window.showQuickPick(['Abort', continueMsg], { - canPickMany: false, - }).then((data) => { - if (data === continueMsg) { - process(); - } - }); + const continueMsg = + `Continue: ` + (title ? title : `command: ${commandToExecuteReadable}`); + window + .showQuickPick(['Abort', continueMsg], { + canPickMany: false, + }) + .then(data => { + if (data === continueMsg) { + process(); + } + }); } else { process(); } @@ -75,461 +109,604 @@ export function executeCommand(registerName: string, commandToExecute: string | //#region process async function process() { - let MAIN_TITLE = capitalizeFirstLetter(title ? title : `Executing: ${commandToExecuteReadable}`); + let MAIN_TITLE = capitalizeFirstLetter( + title ? title : `Executing: ${commandToExecuteReadable}`, + ); const resolveVars: ResolveVariable[] = [ { variable: 'relativePath', - variableValue: relativePathToFileFromWorkspaceRoot + variableValue: relativePathToFileFromWorkspaceRoot, } as any, { variable: 'fileName', - variableValue: path.basename(relativePathToFileFromWorkspaceRoot) + variableValue: path.basename(relativePathToFileFromWorkspaceRoot), } as any, ]; - resolveVars.forEach((v) => { + resolveVars.forEach(v => { MAIN_TITLE = MAIN_TITLE.replace( new RegExp(escapeStringForRegEx(`%${v.variable}%`), 'g'), - v.variableValue + v.variableValue, ); }); - window.withProgress({ - //#region initialize progress - location: progressLocation, - title: MAIN_TITLE, - cancellable, - //#endregion - }, (progress, token) => { - - - progress.report({ increment: 0 }); - - var endPromise = new Promise(async (resolve, reject) => { - let dataToDisplayInLog = ''; + window.withProgress( + { + //#region initialize progress + location: progressLocation, + title: MAIN_TITLE, + cancellable, + //#endregion + }, + (progress, token) => { + progress.report({ increment: 0 }); - //#region resolving variables + var endPromise = new Promise(async (resolve, reject) => { + let dataToDisplayInLog = ''; - if (resolveVariables) { - let skipNextVariableResolve = false; - for (let index = 0; index < resolveVariables.length; index++) { + //#region resolving variables - const item = resolveVariables[index]; - if (typeof item.variableValue !== 'undefined') { - continue; - } - if (skipNextVariableResolve) { - skipNextVariableResolve = false; - continue; - } + if (resolveVariables) { + let skipNextVariableResolve = false; + for (let index = 0; index < resolveVariables.length; index++) { + const item = resolveVariables[index]; + if (typeof item.variableValue !== 'undefined') { + continue; + } + if (skipNextVariableResolve) { + skipNextVariableResolve = false; + continue; + } - //#region apply previous resolved vars - resolveVars.forEach(resolved => { - [ - 'exitWithMessgeWhenNoOptions', - 'resolveValueFromCommand', - 'options', - 'placeholder', - 'prompt' - ].forEach(stringKey => { - // @ts-ignore - let propValue = item[stringKey]; - // @ts-ignore - if (typeof propValue === 'string') { + //#region apply previous resolved vars + resolveVars.forEach(resolved => { + [ + 'exitWithMessgeWhenNoOptions', + 'resolveValueFromCommand', + 'options', + 'placeholder', + 'prompt', + ].forEach(stringKey => { // @ts-ignore - propValue = propValue.replace( - new RegExp(escapeStringForRegEx(`%${resolved.variable}%`), 'g'), - resolved.variableValue - ); + let propValue = item[stringKey]; // @ts-ignore - item[stringKey] = propValue; - } + if (typeof propValue === 'string') { + // @ts-ignore + propValue = propValue.replace( + new RegExp( + escapeStringForRegEx(`%${resolved.variable}%`), + 'g', + ), + resolved.variableValue, + ); + // @ts-ignore + item[stringKey] = propValue; + } + }); }); - }); - //#endregion - const { placeholder, prompt } = item; - let placeHolder; - if (typeof placeholder === 'string') { - placeHolder = placeholder; - } + //#endregion + const { placeholder, prompt } = item; + let placeHolder; + if (typeof placeholder === 'string') { + placeHolder = placeholder; + } - //#region handle select - if (item.options) { - if (typeof item.options === 'string') { - try { - const cmdToExec = item.options.replace(`%relativePath%`, relativePathToFileFromWorkspaceRoot); - log.data(`cmdToExec: ${cmdToExec}`) - const res = valueFromCommand({ command: cmdToExec, cwd, bigBuffer: true }) - item.optionsResolved = JSON.parse(res); - } catch (error) { - item.optionsResolved = [] as any; - window.showInformationMessage(`There is nothing baseline fork that matches:` - + ` "${path.basename(relativePathToFileFromWorkspaceRoot)}"`) - reject(); + //#region handle select + if (item.options) { + if (typeof item.options === 'string') { + try { + const cmdToExec = item.options.replace( + `%relativePath%`, + relativePathToFileFromWorkspaceRoot, + ); + log.data(`cmdToExec: ${cmdToExec}`); + const res = valueFromCommand({ + command: cmdToExec, + cwd, + bigBuffer: true, + }); + item.optionsResolved = JSON.parse(res); + } catch (error) { + item.optionsResolved = [] as any; + window.showInformationMessage( + `There is nothing baseline fork that matches:` + + ` "${path.basename(relativePathToFileFromWorkspaceRoot)}"`, + ); + reject(); + return; + } + } else { + item.optionsResolved = JSON.parse( + JSON.stringify(item.options), + ); + } + + if (typeof placeholder === 'function') { + placeHolder = placeholder({ + relativePath: relativePathToFileFromWorkspaceRoot, + cwd, + path, + options: item.optionsResolved, + }); + } + const itemForQuicPick = item.optionsResolved.slice(0, 20); + if ( + item.exitWithMessgeWhenNoOptions && + itemForQuicPick.length === 0 + ) { + window.showInformationMessage( + item.exitWithMessgeWhenNoOptions, + ); + resolve(void 0); return; + } else { + const res = await window.showQuickPick(itemForQuicPick, { + canPickMany: false, + placeHolder, + ignoreFocusOut: true, + }); + skipNextVariableResolve = !!res?.skipNextVariableResolve; + item.variableValue = res?.option; } + + log.data(`Resolve from select: ${item.variableValue}`); } else { - item.optionsResolved = JSON.parse(JSON.stringify(item.options)); + if (typeof placeholder === 'function') { + placeHolder = placeholder({ + relativePath: relativePathToFileFromWorkspaceRoot, + cwd, + path, + }); + } + let res: string | undefined; + if (item.resolveValueFromCommand) { + try { + res = valueFromCommand({ + command: item.resolveValueFromCommand, + cwd, + }); + } catch (err) { + reject(); + return; + } + } else { + res = await vscode.window.showInputBox({ + value: placeHolder, + placeHolder, + ignoreFocusOut: true, + prompt, + }); + } + res = !res ? '' : res; + item.variableValue = res; + log.data(`Resolve from input: ${item.variableValue}`); } + //#endregion - if (typeof placeholder === 'function') { - placeHolder = placeholder({ relativePath: relativePathToFileFromWorkspaceRoot, cwd, path, options: item.optionsResolved }); + //#region regject when undefined + if (!item.variableValue && item.variableValue !== null) { + reject(); + return; } - const itemForQuicPick = item.optionsResolved.slice(0, 20); - if (item.exitWithMessgeWhenNoOptions && itemForQuicPick.length === 0) { - window.showInformationMessage(item.exitWithMessgeWhenNoOptions); + //#endregion + + //#region handle result as link + if (item.useResultAsLinkAndExit) { + try { + // TODO @LAST refactor this + // @ts-ignore + child.execSync(`navi goto ${item.variableValue}`, { + shell, + }); + } catch (error) {} resolve(void 0); return; - } else { - const res = await window.showQuickPick(itemForQuicPick, { - canPickMany: false, - placeHolder, - ignoreFocusOut: true, - }); - skipNextVariableResolve = !!res?.skipNextVariableResolve; - item.variableValue = res?.option; } + //#endregion - log.data(`Resolve from select: ${item.variableValue}`); - - - } else { - if (typeof placeholder === 'function') { - placeHolder = placeholder({ relativePath: relativePathToFileFromWorkspaceRoot, cwd, path }); - } - let res: string | undefined; - if (item.resolveValueFromCommand) { - try { - res = valueFromCommand({ command: item.resolveValueFromCommand, cwd }); - } catch (err) { + //#region handle quick fill next + if ( + item.fillNextVariableResolveWhenSelectedIsActionOption && + !!item?.variableValue?.action + ) { + const nextItem = resolveVariables[index + 1]; + if (!nextItem) { reject(); return; } - } else { - res = await vscode.window.showInputBox({ - value: placeHolder, - placeHolder, - ignoreFocusOut: true, - prompt - }); + nextItem.variableValue = item.variableValue.action; + break; } - res = !res ? '' : res; - item.variableValue = res; - log.data(`Resolve from input: ${item.variableValue}`) - } - //#endregion - - //#region regject when undefined - if (!item.variableValue && item.variableValue !== null) { - reject(); - return; + //#endregion + resolveVars.push(item); } - //#endregion + } + //#endregion - //#region handle result as link - if (item.useResultAsLinkAndExit) { - try { - // TODO @LAST refactor this - // @ts-ignore - child.execSync(`navi goto ${item.variableValue}`, { shell }); - } catch (error) { } - resolve(void 0); - return; - } - //#endregion + //#region endactions - //#region handle quick fill next - if (item.fillNextVariableResolveWhenSelectedIsActionOption - && !!item?.variableValue?.action - ) { - const nextItem = resolveVariables[index + 1]; - if (!nextItem) { - reject(); - return; + //#region finish action + function finishAction(childResult: any) { + if (reloadAfterSuccesFinish) { + vscode.commands.executeCommand('workbench.action.reloadWindow'); + } else { + if (showSuccessMessage) { + let doneMsg = title + ? MAIN_TITLE + : `command: ${commandToExecuteReadable}`; + const message = + `Done executing - ${doneMsg}.\n\n` + + (childResult ? childResult.toString() : ''); + log.data(message); + window.showInformationMessage(message); } - nextItem.variableValue = item.variableValue.action; - break; } - //#endregion - resolveVars.push(item); + resolve(void 0); } - } - //#endregion - - //#region endactions - - //#region finish action - function finishAction(childResult: any) { - if (reloadAfterSuccesFinish) { - vscode.commands.executeCommand('workbench.action.reloadWindow'); - } else { - if (showSuccessMessage) { - let doneMsg = title ? MAIN_TITLE : `command: ${commandToExecuteReadable}`; - const message = `Done executing - ${doneMsg}.\n\n` + (childResult ? childResult.toString() : ''); - log.data(message); - window.showInformationMessage(message); - } - } - resolve(void 0); - } - //#endregion + //#endregion - //#region finish error - function finishError(err: any, data?: string) { - let doneMsg = title ? title : `command: ${commandToExecuteReadable}`; - const message = `Execution of ${doneMsg} failed:\n ${commandToExecuteReadable} + //#region finish error + function finishError(err: any, data?: string) { + let doneMsg = title + ? title + : `command: ${commandToExecuteReadable}`; + const message = `Execution of ${doneMsg} failed:\n ${commandToExecuteReadable} ${err} ${data} `; - log.error(message); - window.showErrorMessage(message); - resolve(void 0); - } - //#endregion - - //#endregion - - //#region cancle action - token.onCancellationRequested(() => { - if (proc) { - proc.kill('SIGINT'); + log.error(message); + window.showErrorMessage(message); + resolve(void 0); } - const message = `User canceled command: ${commandToExecuteReadable}`; - log.data(message); - window.showWarningMessage(message); - }); - //#endregion + //#endregion - //#region resolving cwd - try { - let newCwd = isAbsolute ? cwd : crossPlatformPath(path.join(cwd as string, relativePathToFileFromWorkspaceRoot)); - log.data(`first newCwd : ${newCwd}, relativePath: "${relativePathToFileFromWorkspaceRoot}"`) - if (!fse.existsSync(newCwd as string)) { - // QUICK_FIX for vscode workspace - const cwdBase = path.basename(cwd as string); - log.data(`cwdBase ${cwdBase}`) - const testCwd = (newCwd as string).replace(`/${cwdBase}/${cwdBase}/`, `/${cwdBase}/`); - if (fse.existsSync(testCwd)) { - log.data(`cwdBaseExists`); - newCwd = testCwd; - } - } - log.data(`newCwd: ${newCwd}`) - if (fse.existsSync(newCwd as string)) { - if (!fse.lstatSync(newCwd as string).isDirectory()) { - newCwd = crossPlatformPath(path.dirname(newCwd as string)); - } - } else { - const cwdFixed = (typeof newCwd === 'string') ? crossPlatformPath(path.dirname(newCwd)) : void 0; - if (cwdFixed && fse.existsSync(cwdFixed) && fse.lstatSync(cwdFixed).isDirectory()) { - newCwd = cwdFixed; - log.data(`newCwd fixed: ${newCwd}`) - } else { - window.showErrorMessage(`[vscode] Cwd not found: ${newCwd}`); - resolve(void 0); - return; - } - } //#endregion - //#region applying flags - const flags = [ - tnpShowProgress && '--tnpShowProgress', - tnpNonInteractive && '--tnpNonInteractive', - findNearestProject && '--findNearestProject', - findNearestProjectWithGitRoot && '--findNearestProjectWithGitRoot', - findNearestProjectType && `--findNearestProjectType=${findNearestProjectType}`, - findNearestProjectTypeWithGitRoot && `--findNearestProjectTypeWithGitRoot=${findNearestProjectTypeWithGitRoot}`, - '-verbose' - ].filter(f => !!f).join(' '); - - let cmd = (typeof commandToExecute === 'string') ? `${commandToExecute} --cwd ${newCwd} ${flags}` : - commandToExecute.map(c => `${c} --cwd ${newCwd} ${flags}`).join(' && '); + //#region cancle action + token.onCancellationRequested(() => { + if (proc) { + proc.kill('SIGINT'); + } + const message = `User canceled command: ${commandToExecuteReadable}`; + log.data(message); + window.showWarningMessage(message); + }); //#endregion - log.data(`commandToExecuteReadable before: ${commandToExecuteReadable}`); + //#region resolving cwd + try { + let newCwd = isAbsolute + ? cwd + : crossPlatformPath( + path.join( + cwd as string, + relativePathToFileFromWorkspaceRoot, + ), + ); + log.data( + `first newCwd : ${newCwd}, relativePath: "${relativePathToFileFromWorkspaceRoot}"`, + ); + if (!fse.existsSync(newCwd as string)) { + // QUICK_FIX for vscode workspace + const cwdBase = path.basename(cwd as string); + log.data(`cwdBase ${cwdBase}`); + const testCwd = (newCwd as string).replace( + `/${cwdBase}/${cwdBase}/`, + `/${cwdBase}/`, + ); + if (fse.existsSync(testCwd)) { + log.data(`cwdBaseExists`); + newCwd = testCwd; + } + } + log.data(`newCwd: ${newCwd}`); + if (fse.existsSync(newCwd as string)) { + if (!fse.lstatSync(newCwd as string).isDirectory()) { + newCwd = crossPlatformPath(path.dirname(newCwd as string)); + } + } else { + const cwdFixed = + typeof newCwd === 'string' + ? crossPlatformPath(path.dirname(newCwd)) + : void 0; + if ( + cwdFixed && + fse.existsSync(cwdFixed) && + fse.lstatSync(cwdFixed).isDirectory() + ) { + newCwd = cwdFixed; + log.data(`newCwd fixed: ${newCwd}`); + } else { + window.showErrorMessage(`[vscode] Cwd not found: ${newCwd}`); + resolve(void 0); + return; + } + } + //#endregion - let execCommand = commandToExecuteReadable; + //#region applying flags + const flags = [ + tnpShowProgress && '--tnpShowProgress', + tnpNonInteractive && '--tnpNonInteractive', + findNearestProject && '--findNearestProject', + findNearestProjectWithGitRoot && + '--findNearestProjectWithGitRoot', + findNearestProjectType && + `--findNearestProjectType=${findNearestProjectType}`, + findNearestProjectTypeWithGitRoot && + `--findNearestProjectTypeWithGitRoot=${findNearestProjectTypeWithGitRoot}`, + '-verbose', + ] + .filter(f => !!f) + .join(' '); + + let cmd = + typeof commandToExecute === 'string' + ? `${commandToExecute} --cwd ${newCwd} ${flags}` + : commandToExecute + .map(c => `${c} --cwd ${newCwd} ${flags}`) + .join(' && '); + //#endregion - //#region handle %paramName% variables - const execParams = execCommand.match(/\%[a-zA-Z]+\%/g); - if (Array.isArray(execParams) && execParams.length > 0) { - for (let index = 0; index < execParams.length; index++) { - const paramToResolve = execParams[index]; - if (paramToResolve === '%name%' && resolveVariables && - (typeof resolveVariables.find(({ variable }) => variable === 'name') === 'undefined') - ) { - const name = await getModuleName(); - execCommand = execCommand - .replace(paramToResolve, name); - cmd = cmd - .replace(paramToResolve, name); - if (options?.title) { - options.title = options.title.replace(paramToResolve, relativePathToFileFromWorkspaceRoot); + log.data( + `commandToExecuteReadable before: ${commandToExecuteReadable}`, + ); + + let execCommand = commandToExecuteReadable; + + //#region handle %paramName% variables + const execParams = execCommand.match(/\%[a-zA-Z]+\%/g); + if (Array.isArray(execParams) && execParams.length > 0) { + for (let index = 0; index < execParams.length; index++) { + const paramToResolve = execParams[index]; + if ( + paramToResolve === '%name%' && + resolveVariables && + typeof resolveVariables.find( + ({ variable }) => variable === 'name', + ) === 'undefined' + ) { + const name = await getModuleName(); + execCommand = execCommand.replace(paramToResolve, name); + cmd = cmd.replace(paramToResolve, name); + if (options?.title) { + options.title = options.title.replace( + paramToResolve, + relativePathToFileFromWorkspaceRoot, + ); + } } - } - if (paramToResolve === '%absolutePath%') { - // @ts-ignore - const absolutePath = crossPlatformPath(path.join(cwd, relativePathToFileFromWorkspaceRoot)); - execCommand = execCommand.replace(paramToResolve, absolutePath); - cmd = cmd.replace(paramToResolve, absolutePath); - if (options?.title) { - options.title = options.title.replace(paramToResolve, relativePathToFileFromWorkspaceRoot); + if (paramToResolve === '%absolutePath%') { + // @ts-ignore + const absolutePath = crossPlatformPath( + path.join(cwd, relativePathToFileFromWorkspaceRoot), + ); + execCommand = execCommand.replace( + paramToResolve, + absolutePath, + ); + cmd = cmd.replace(paramToResolve, absolutePath); + if (options?.title) { + options.title = options.title.replace( + paramToResolve, + relativePathToFileFromWorkspaceRoot, + ); + } } - } - // if (paramToResolve === '%cwd%') { - // // @ts-ignore - // const cwdToReplace = cwdToReplace || ''; - // execCommand = execCommand.replace(paramToResolve, cwdToReplace); - // cmd = cmd.replace(paramToResolve, cwdToReplace); - // } - - if (paramToResolve === '%relativePath%') { - log.data(`paramToResolve: '${paramToResolve}'`); - log.data(`relativePath: '${relativePathToFileFromWorkspaceRoot}'`); - execCommand = execCommand.replace(paramToResolve, relativePathToFileFromWorkspaceRoot); - cmd = cmd.replace(paramToResolve, relativePathToFileFromWorkspaceRoot); - if (options?.title) { - options.title = options.title.replace(paramToResolve, relativePathToFileFromWorkspaceRoot); + // if (paramToResolve === '%cwd%') { + // // @ts-ignore + // const cwdToReplace = cwdToReplace || ''; + // execCommand = execCommand.replace(paramToResolve, cwdToReplace); + // cmd = cmd.replace(paramToResolve, cwdToReplace); + // } + + if (paramToResolve === '%relativePath%') { + log.data(`paramToResolve: '${paramToResolve}'`); + log.data( + `relativePath: '${relativePathToFileFromWorkspaceRoot}'`, + ); + execCommand = execCommand.replace( + paramToResolve, + relativePathToFileFromWorkspaceRoot, + ); + cmd = cmd.replace( + paramToResolve, + relativePathToFileFromWorkspaceRoot, + ); + if (options?.title) { + options.title = options.title.replace( + paramToResolve, + relativePathToFileFromWorkspaceRoot, + ); + } } - } - if (paramToResolve === '%relativePathDirname%') { - execCommand = execCommand.replace(paramToResolve, crossPlatformPath(path.dirname(relativePathToFileFromWorkspaceRoot))); - cmd = cmd.replace(paramToResolve, crossPlatformPath(path.dirname(relativePathToFileFromWorkspaceRoot))); - if (options?.title) { - options.title = options.title.replace(paramToResolve, relativePathToFileFromWorkspaceRoot); + if (paramToResolve === '%relativePathDirname%') { + execCommand = execCommand.replace( + paramToResolve, + crossPlatformPath( + path.dirname(relativePathToFileFromWorkspaceRoot), + ), + ); + cmd = cmd.replace( + paramToResolve, + crossPlatformPath( + path.dirname(relativePathToFileFromWorkspaceRoot), + ), + ); + if (options?.title) { + options.title = options.title.replace( + paramToResolve, + relativePathToFileFromWorkspaceRoot, + ); + } } } - } - if (resolveVariables) { - for (let index = 0; index < resolveVariables.length; index++) { - const { variable, variableValue, encode } = resolveVariables[index]; - const variableInsidPrecentSign = `%${variable}%`; - const variableValueFinal = encode ? encodeURIComponent(variableValue) : variableValue; - execCommand = execCommand.replace(variableInsidPrecentSign, variableValueFinal); - cmd = cmd.replace(variableInsidPrecentSign, variableValueFinal); - if (options?.title) { - options.title = options.title.replace(variableInsidPrecentSign, variableValueFinal); + if (resolveVariables) { + for ( + let index = 0; + index < resolveVariables.length; + index++ + ) { + const { variable, variableValue, encode } = + resolveVariables[index]; + const variableInsidPrecentSign = `%${variable}%`; + const variableValueFinal = encode + ? encodeURIComponent(variableValue) + : variableValue; + execCommand = execCommand.replace( + variableInsidPrecentSign, + variableValueFinal, + ); + cmd = cmd.replace( + variableInsidPrecentSign, + variableValueFinal, + ); + if (options?.title) { + options.title = options.title.replace( + variableInsidPrecentSign, + variableValueFinal, + ); + } } } } - } - //#endregion - - log.data(`cmd after replacing: ${cmd}`); - log.data(`execCommand after replacing: ${execCommand}`); - - dataToDisplayInLog += `commandToExecute: ${execCommand}`; - - if (syncProcess) { - //#region handle sync process - let childResult = child.execSync(cmd, { shell }); - progress.report({ increment: 50 }); - if (typeof childResult !== 'object') { - throw `Child result is not a object` - } - progress.report({ increment: 50 }); - finishAction(showOutputDataOnSuccess ? childResult : ''); //#endregion - } else { - //#region handle async process events - if (isDefaultBuildCommand) { - var outputChannel = vscode.window.createOutputChannel('FIREDEV CLI'); - outputChannel.show(); - } - var proc = child.exec(cmd, { cwd, shell }); - if (!proc) { - await window.showErrorMessage(`Incorrect execution of: ${cmd}`); - return; - } - // @ts-ignore - proc.stdout.on('data', (message) => { - // tslint:disable-next-line: no-unused-expression - log.data(message.toString()); - if (isDefaultBuildCommand) { - outputChannel.appendLine(message.toString().trim()); - } else { - dataToDisplayInLog += message.toString(); - ProgressData.resolveFrom(message.toString(), (json) => { - progress.report({ message: json.msg, increment: json.value / 100 }); - }); - } + log.data(`cmd after replacing: ${cmd}`); + log.data(`execCommand after replacing: ${execCommand}`); - }); + dataToDisplayInLog += `commandToExecute: ${execCommand}`; - // @ts-ignore - proc.stdout.on('error', (err) => { - // tslint:disable-next-line: no-unused-expression + if (syncProcess) { + //#region handle sync process + let childResult = child.execSync(cmd, { shell }); + progress.report({ increment: 50 }); + if (typeof childResult !== 'object') { + throw `Child result is not a object`; + } + progress.report({ increment: 50 }); + finishAction(showOutputDataOnSuccess ? childResult : ''); + //#endregion + } else { + //#region handle async process events if (isDefaultBuildCommand) { - outputChannel.appendLine(err.toString().trim()); - } else { - dataToDisplayInLog += err.toString(); - window.showErrorMessage(`Error: ${JSON.stringify(err, null, 2)}`) + var outputChannel = + vscode.window.createOutputChannel('FIREDEV CLI'); + outputChannel.show(); } - }); - - // @ts-ignore - proc.stderr.on('data', (message) => { - // tslint:disable-next-line: no-unused-expression - const msg = message.toString(); - - if (msg.search('UnhandledPromiseRejectionWarning: Error') !== -1) { - if (isDefaultBuildCommand) { - outputChannel.appendLine(msg.toString().trim()); - } else { - dataToDisplayInLog += msg.toString(); - window.showErrorMessage(`Error: \n${msg}`) - } - finishError(`Command crashed with message: \n ${msg}`, dataToDisplayInLog); - } else { + var proc = child.exec(cmd, { cwd, shell }); + if (!proc) { + await window.showErrorMessage( + `Incorrect execution of: ${cmd}`, + ); + return; + } + // @ts-ignore + proc.stdout.on('data', message => { + // tslint:disable-next-line: no-unused-expression + log.data(message.toString()); if (isDefaultBuildCommand) { outputChannel.appendLine(message.toString().trim()); } else { dataToDisplayInLog += message.toString(); - ProgressData.resolveFrom(message.toString(), (json) => { - progress.report({ message: json.msg, increment: json.value / 100 }); + ProgressData.resolveFrom(message.toString(), json => { + progress.report({ + message: json.msg, + increment: json.value / 100, + }); }); } - } + }); - }); + // @ts-ignore + proc.stdout.on('error', err => { + // tslint:disable-next-line: no-unused-expression + if (isDefaultBuildCommand) { + outputChannel.appendLine(err.toString().trim()); + } else { + dataToDisplayInLog += err.toString(); + window.showErrorMessage( + `Error: ${JSON.stringify(err, null, 2)}`, + ); + } + }); - // @ts-ignore - proc.stderr.on('error', (err) => { - // tslint:disable-next-line: no-unused-expression - if (isDefaultBuildCommand) { - outputChannel.appendLine(err.toString().trim()); - } else { - dataToDisplayInLog += (err.toString()); - window.showErrorMessage(`Error: ${JSON.stringify(err, null, 2)}`); - } - }); - proc.on('exit', (code) => { - if (isDefaultBuildCommand) { - outputChannel.appendLine(`--- BUILD TASK ENDED --- code ${code}`.trim()); - resolve(void 0); - } else { - if (code == 0) { - finishAction(showOutputDataOnSuccess ? dataToDisplayInLog : ''); + // @ts-ignore + proc.stderr.on('data', message => { + // tslint:disable-next-line: no-unused-expression + const msg = message.toString(); + + if ( + msg.search('UnhandledPromiseRejectionWarning: Error') !== -1 + ) { + if (isDefaultBuildCommand) { + outputChannel.appendLine(msg.toString().trim()); + } else { + dataToDisplayInLog += msg.toString(); + window.showErrorMessage(`Error: \n${msg}`); + } + finishError( + `Command crashed with message: \n ${msg}`, + dataToDisplayInLog, + ); } else { - finishError(`Command exited with code: ${code}`, dataToDisplayInLog); + if (isDefaultBuildCommand) { + outputChannel.appendLine(message.toString().trim()); + } else { + dataToDisplayInLog += message.toString(); + ProgressData.resolveFrom(message.toString(), json => { + progress.report({ + message: json.msg, + increment: json.value / 100, + }); + }); + } } - } + }); - }); - //#endregion + // @ts-ignore + proc.stderr.on('error', err => { + // tslint:disable-next-line: no-unused-expression + if (isDefaultBuildCommand) { + outputChannel.appendLine(err.toString().trim()); + } else { + dataToDisplayInLog += err.toString(); + window.showErrorMessage( + `Error: ${JSON.stringify(err, null, 2)}`, + ); + } + }); + proc.on('exit', code => { + if (isDefaultBuildCommand) { + outputChannel.appendLine( + `--- BUILD TASK ENDED --- code ${code}`.trim(), + ); + resolve(void 0); + } else { + if (code == 0) { + finishAction( + showOutputDataOnSuccess ? dataToDisplayInLog : '', + ); + } else { + finishError( + `Command exited with code: ${code}`, + dataToDisplayInLog, + ); + } + } + }); + //#endregion + } + } catch (err) { + finishError(err, dataToDisplayInLog); } - - } catch (err) { - finishError(err, dataToDisplayInLog); - } - }); - return endPromise; - }); + }); + return endPromise; + }, + ); } //#endregion }); diff --git a/projects/container-v18/vscode-ext-v18/src/extension.ts b/projects/container-v18/vscode-ext-v18/src/extension.ts index b251c2ee..e4c66994 100644 --- a/projects/container-v18/vscode-ext-v18/src/extension.ts +++ b/projects/container-v18/vscode-ext-v18/src/extension.ts @@ -5,12 +5,23 @@ import { commands } from './config'; export function activate(context: vscode.ExtensionContext) { for (let index = 0; index < commands.length; index++) { - const { command = '', exec = '', options, isDefaultBuildCommand } = commands[index]; - const sub = executeCommand(command, exec, options, isDefaultBuildCommand, context); + const { + command = '', + exec = '', + options, + isDefaultBuildCommand, + } = commands[index]; + const sub = executeCommand( + command, + exec, + options, + isDefaultBuildCommand, + context, + ); if (sub) { context.subscriptions.push(sub); } } } -export function deactivate() { } +export function deactivate() {} diff --git a/projects/container-v18/vscode-ext-v18/src/helpers.ts b/projects/container-v18/vscode-ext-v18/src/helpers.ts index a7170fbf..039cc969 100644 --- a/projects/container-v18/vscode-ext-v18/src/helpers.ts +++ b/projects/container-v18/vscode-ext-v18/src/helpers.ts @@ -9,7 +9,7 @@ function findGitBash() { 'C:\\Program Files (x86)\\Git\\bin\\bash.exe', `${process.env.ProgramW6432}\\Git\\bin\\bash.exe`, `${process.env.ProgramFiles}\\Git\\bin\\bash.exe`, - `${process.env['ProgramFiles(x86)']}\\Git\\bin\\bash.exe` + `${process.env['ProgramFiles(x86)']}\\Git\\bin\\bash.exe`, ]; for (const gitBashPath of possiblePaths) { @@ -22,7 +22,6 @@ function findGitBash() { process.exit(1); } - function getShell() { if (process.platform === 'win32') { // Windows platform @@ -41,7 +40,6 @@ function getShell() { export const shell = getShell(); - export function valueFromCommand({ command, cwd, @@ -49,10 +47,18 @@ export function valueFromCommand({ }: { command: string; cwd?: string; - bigBuffer?: boolean, + bigBuffer?: boolean; }) { - const decode = true - let res = child.execSync(command, { cwd, shell, encoding: 'utf8', maxBuffer: bigBuffer ? (50 * 1024 * 1024) : void 0 }).toString().trim(); + const decode = true; + let res = child + .execSync(command, { + cwd, + shell, + encoding: 'utf8', + maxBuffer: bigBuffer ? 50 * 1024 * 1024 : void 0, + }) + .toString() + .trim(); const splited = (res || '').split('\n'); res = splited.pop() || ''; if (decode) { @@ -62,20 +68,31 @@ export function valueFromCommand({ } export function deepClone(obj: any, hash = new WeakMap()): any { - if (Object(obj) !== obj) { return obj; } // primitives - if (hash.has(obj)) { return hash.get(obj); } // cyclic reference - const result = obj instanceof Set ? new Set(obj) // See note about this! - : obj instanceof Map ? new Map(Array.from(obj, ([key, val]) => - [key, deepClone(val, hash)])) - : obj instanceof Date ? new Date(obj) - : obj instanceof RegExp ? new RegExp(obj.source, obj.flags) - // ... add here any specific treatment for other classes ... - // and finally a catch-all: - : obj.constructor ? new obj.constructor() - : Object.create(null); + if (Object(obj) !== obj) { + return obj; + } // primitives + if (hash.has(obj)) { + return hash.get(obj); + } // cyclic reference + const result = + obj instanceof Set + ? new Set(obj) // See note about this! + : obj instanceof Map + ? new Map(Array.from(obj, ([key, val]) => [key, deepClone(val, hash)])) + : obj instanceof Date + ? new Date(obj) + : obj instanceof RegExp + ? new RegExp(obj.source, obj.flags) + : // ... add here any specific treatment for other classes ... + // and finally a catch-all: + obj.constructor + ? new obj.constructor() + : Object.create(null); hash.set(obj, result); - return Object.assign(result, ...Object.keys(obj).map( - key => ({ [key]: deepClone(obj[key], hash) }))); + return Object.assign( + result, + ...Object.keys(obj).map(key => ({ [key]: deepClone(obj[key], hash) })), + ); } export function capitalizeFirstLetter(str: string) { @@ -146,7 +163,7 @@ export function optionsFix(options?: ProcesOptions) { export function crossPlatformPath(pathStringOrPathParts: string | string[]) { if (Array.isArray(pathStringOrPathParts)) { - pathStringOrPathParts = pathStringOrPathParts.join('/') + pathStringOrPathParts = pathStringOrPathParts.join('/'); } //#region @backend if (process.platform !== 'win32') { @@ -167,23 +184,21 @@ export function crossPlatformPath(pathStringOrPathParts: string | string[]) { return pathStringOrPathParts.replace(/\\/g, '/'); } - export async function getModuleName(value: string = 'Filename') { const result = await vscode.window.showInputBox({ value, - placeHolder: value + placeHolder: value, }); return !result ? '' : result; } export type LogMode = 'dialog' | 'logmsg'; export class Log { - outputChannel: vscode.OutputChannel; constructor( private name: string, private mode: LogMode = 'dialog', - private debugMode = false + private debugMode = false, ) { this.outputChannel = vscode.window.createOutputChannel(name); if (debugMode) { @@ -191,7 +206,6 @@ export class Log { } } - public static instance(name: string, mode: LogMode, debugMode = false) { return new Log(name, mode, debugMode); } @@ -225,5 +239,4 @@ export class Log { this.outputChannel.appendLine(`[error] ${message}`); } } - } diff --git a/projects/container-v18/vscode-ext-v18/src/models.ts b/projects/container-v18/vscode-ext-v18/src/models.ts index 6407a1b6..2f37010f 100644 --- a/projects/container-v18/vscode-ext-v18/src/models.ts +++ b/projects/container-v18/vscode-ext-v18/src/models.ts @@ -1,16 +1,17 @@ -export type NaviGenCommand = 'example' | - 'module' | - 'api:module' | - 'routing:module' | - 'component' | - 'api:service' | - 'service' | - 'pipe' | - 'directive'; +export type NaviGenCommand = + | 'example' + | 'module' + | 'api:module' + | 'routing:module' + | 'component' + | 'api:service' + | 'service' + | 'pipe' + | 'directive'; export type CommandType = { command?: string; - exec?: string[] | string; + exec?: string[] | string; // | { (context: any): any }; title?: string; group?: string; hideContextMenu?: boolean; @@ -18,10 +19,11 @@ export type CommandType = { isDefaultBuildCommand?: boolean; }; -export type LibType = 'angular-lib' - | "isomorphic-lib" +export type LibType = + | 'angular-lib' + | 'isomorphic-lib' | 'angular-client' - | "ionic-client" + | 'ionic-client' | 'workspace' | 'container' | 'docker' @@ -34,8 +36,12 @@ export type ResolveVariable = { placeholder?: string | Function; variableValue?: any; encode?: boolean; - options: { option: any, label: string }[] | string; - optionsResolved: { option: any, label: string, skipNextVariableResolve?: boolean; }[]; + options: { option: any; label: string }[] | string; + optionsResolved: { + option: any; + label: string; + skipNextVariableResolve?: boolean; + }[]; useResultAsLinkAndExit?: boolean; exitWithMessgeWhenNoOptions?: string; /** @@ -61,7 +67,7 @@ export type ProcesOptions = { showOutputDataOnSuccess?: boolean; showSuccessMessage?: boolean; askBeforeExecute?: boolean; - resolveVariables?: ResolveVariable[] + resolveVariables?: ResolveVariable[]; }; export type PROGRESS_DATA_TYPE = 'info' | 'error' | 'warning' | 'event'; @@ -77,10 +83,11 @@ export interface IProgressData { } export class ProgressData implements IProgressData { - - public static resolveFrom(chunk: string, - callbackOnFounded?: (json: ProgressData) => any, checkSplit = true): ProgressData[] { - + public static resolveFrom( + chunk: string, + callbackOnFounded?: (json: ProgressData) => any, + checkSplit = true, + ): ProgressData[] { let progress; let res: ProgressData[] = []; if (typeof chunk !== 'string') { @@ -113,7 +120,7 @@ export class ProgressData implements IProgressData { } } catch (err) { console.log(err); - console.error(`ProgresssBarData: fail to parse "${progress}"`) + console.error(`ProgresssBarData: fail to parse "${progress}"`); } } return res; @@ -124,6 +131,6 @@ export class ProgressData implements IProgressData { public msg: string = '', public type: PROGRESS_DATA_TYPE = 'event', - public date: Date = new Date() - ) { } + public date: Date = new Date(), + ) {} } diff --git a/projects/container-v18/vscode-ext-v18/src/progress-output.ts b/projects/container-v18/vscode-ext-v18/src/progress-output.ts index 85dd3463..42bd4520 100644 --- a/projects/container-v18/vscode-ext-v18/src/progress-output.ts +++ b/projects/container-v18/vscode-ext-v18/src/progress-output.ts @@ -1,4 +1,3 @@ - export type PROGRESS_DATA_TYPE = 'info' | 'error' | 'warning' | 'event'; export interface IProgressData { @@ -11,12 +10,12 @@ export interface IProgressData { date?: Date; } - export class ProgressData implements IProgressData { - - public static resolveFrom(chunk: string, - callbackOnFounded?: (json: ProgressData) => any, checkSplit = true): ProgressData[] { - + public static resolveFrom( + chunk: string, + callbackOnFounded?: (json: ProgressData) => any, + checkSplit = true, + ): ProgressData[] { let progress; let res: ProgressData[] = []; if (typeof chunk !== 'string') { @@ -49,24 +48,18 @@ export class ProgressData implements IProgressData { } } catch (err) { console.log(err); - console.error(`ProgresssBarData: fail to parse "${progress}"`) + console.error(`ProgresssBarData: fail to parse "${progress}"`); } } return res; } - - constructor( public value: number = 0, public msg: string = '', public type: PROGRESS_DATA_TYPE = 'event', - public date: Date = new Date() - ) { - - } - - + public date: Date = new Date(), + ) {} } diff --git a/projects/container-v18/vscode-ext-v18/firedev.jsonc b/projects/container-v18/vscode-ext-v18/taon.jsonc similarity index 99% rename from projects/container-v18/vscode-ext-v18/firedev.jsonc rename to projects/container-v18/vscode-ext-v18/taon.jsonc index 5adcbf26..044d462c 100644 --- a/projects/container-v18/vscode-ext-v18/firedev.jsonc +++ b/projects/container-v18/vscode-ext-v18/taon.jsonc @@ -38,4 +38,4 @@ "license": "MIT", "private": false, "isCoreProject": true -} +} \ No newline at end of file diff --git a/projects/container-v18/vscode-ext-v18/tslint.json b/projects/container-v18/vscode-ext-v18/tslint.json deleted file mode 100644 index 0ea7a020..00000000 --- a/projects/container-v18/vscode-ext-v18/tslint.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "rulesDirectory": [], - "rules": { - "arrow-return-shorthand": true, - "callable-types": true, - "class-name": true, - "comment-format": [ - true, - "check-space" - ], - "curly": true, - "deprecation": { - "severity": "warn" - }, - "eofline": true, - "forin": true, - "import-blacklist": [ - true, - "rxjs", - "rxjs/Rx" - ], - "import-spacing": true, - "indent": [ - true, - "spaces" - ], - "interface-over-type-literal": true, - "label-position": true, - "max-line-length": [ - true, - 140 - ], - "member-access": false, - "member-ordering": [ - true, - { - "order": [ - "static-field", - "instance-field", - "static-method", - "instance-method" - ] - } - ], - "no-arg": true, - "no-bitwise": true, - "no-console": [ - true, - "debug", - "info", - "time", - "timeEnd", - "trace" - ], - "no-construct": true, - "no-debugger": true, - "no-duplicate-super": true, - "no-empty": false, - "no-empty-interface": true, - "no-eval": true, - "no-inferrable-types": [ - true, - "ignore-params" - ], - "no-misused-new": true, - "no-non-null-assertion": true, - "no-shadowed-variable": true, - "no-string-literal": false, - "no-string-throw": true, - "no-switch-case-fall-through": true, - "no-trailing-whitespace": true, - "no-unnecessary-initializer": true, - "no-unused-expression": true, - "no-use-before-declare": true, - "no-var-keyword": true, - "object-literal-sort-keys": false, - "one-line": [ - true, - "check-open-brace", - "check-catch", - "check-else", - "check-whitespace" - ], - "prefer-const": true, - "quotemark": [ - true, - "single" - ], - "radix": true, - "semicolon": [ - true, - "always" - ], - "triple-equals": [ - true, - "allow-null-check" - ], - "typedef-whitespace": [ - true, - { - "call-signature": "nospace", - "index-signature": "nospace", - "parameter": "nospace", - "property-declaration": "nospace", - "variable-declaration": "nospace" - } - ], - "typeof-compare": true, - "unified-signatures": true, - "variable-name": false, - "whitespace": [ - true, - "check-branch", - "check-decl", - "check-operator", - "check-separator", - "check-type" - ], - "directive-selector": [ - true, - "attribute", - "app", - "camelCase" - ], - "component-selector": [ - true, - "element", - "app", - "kebab-case" - ], - "no-output-on-prefix": true, - "use-input-property-decorator": true, - "use-output-property-decorator": true, - "use-host-property-decorator": true, - "no-input-rename": true, - "no-output-rename": true, - "use-life-cycle-interface": true, - "use-pipe-transform-interface": true, - "component-class-suffix": true, - "directive-class-suffix": true - } -} diff --git a/projects/container/package.json b/projects/container/package.json index 25e81d1e..6de8a177 100644 --- a/projects/container/package.json +++ b/projects/container/package.json @@ -36,4 +36,4 @@ "name": "container", "version": "0.0.0", "main": "dist/app.electron.js" -} +} \ No newline at end of file diff --git a/src/assets/shared/shared_folder_info.txt b/src/assets/shared/shared_folder_info.txt index 80f53ea1..038a32c4 100644 --- a/src/assets/shared/shared_folder_info.txt +++ b/src/assets/shared/shared_folder_info.txt @@ -1,6 +1,6 @@ THIS FILE IS GENERATED. THIS FILE IS GENERATED. THIS FILE IS GENERATED. -Assets from this folder are being shipped with this npm package (taon@18.0.15) +Assets from this folder are being shipped with this npm package (taon@18.0.16) created from this project. THIS FILE IS GENERATED.THIS FILE IS GENERATED. THIS FILE IS GENERATED. diff --git a/taon b/taon new file mode 100644 index 00000000..fc30ab87 --- /dev/null +++ b/taon @@ -0,0 +1,22 @@ + + + PROJECT: npm/taon-dev/taon + + Current commit: + - message to include {refactor: firedev +- + new deps taon} + - using current branch {master} + + (generated would be: refactor/firedev-new-deps-taon) + +Commit from args and commit from branch are different + commit message from args: refactor: firedev +- + new deps taon + commit message from branch: refactor: firedev new deps taon + + ADVICE: Is is better to use words instead characters to describe multiple + commit changes in one commit message + + +[?25l? Commit and push this ? » no / yes× Commit and push this ? ... no / yes +[?25h \ No newline at end of file