From 48e38189eff5db914531d2f42825c28cd774626b Mon Sep 17 00:00:00 2001 From: Corinne PAULVE Date: Mon, 30 Sep 2024 14:54:45 +0200 Subject: [PATCH] wip: training --- .vscode/settings.json | 6 +- apps/showcase/.gitignore | 2 + apps/showcase/package.json | 1 + apps/showcase/project.json | 20 +- .../prepare-training-exercises/index.cjs | 27 + apps/showcase/src/app/app-routing.module.ts | 1 + apps/showcase/src/app/app.component.html | 41 +- apps/showcase/src/app/app.component.ts | 6 + apps/showcase/src/app/app.module.ts | 4 +- apps/showcase/src/app/sdk-training/index.ts | 1 + .../sdk-training/sdk-training.component.scss | 3 + .../sdk-training.component.spec.ts | 23 + .../sdk-training/sdk-training.component.ts | 16 + .../assets/sdk-training-openapi-diagram.svg | 1 + .../src/assets/sdk-training/program.json | 113 +++ .../src/assets/sdk-training/shared/empty.json | 127 +++ .../shared/monorepo-template.json | 428 +++++++++ .../sdk-training/shared/monorepo-with-app | 127 +++ .../angular-integration/instructions.html | 56 ++ .../date-sdk-generation/instructions.html | 57 ++ .../steps/date/exercise/app.component.html | 17 + .../steps/date/exercise/app.component.scss | 0 .../steps/date/exercise/app.component.ts | 28 + .../sdk-training/steps/date/instructions.html | 44 + .../steps/date/solution/app.component.ts | 30 + .../steps/introduction/instructions.html | 38 + .../steps/model-extension/instructions.html | 11 + .../steps/plugins/instructions.html | 40 + .../steps/sdk-generation/instructions.html | 67 ++ .../steps/sdk-specs/instructions.html | 48 + .../steps/typescript-sdk/instructions.html | 34 + .../steps/welcome/instructions.html | 60 ++ .../code-editor-control.component.scss | 1 + .../showcase/src/components/training/index.ts | 3 +- .../training/training.component.html | 54 ++ .../training/training.component.scss | 8 + .../training/training.component.spec.ts | 23 + .../components/training/training.component.ts | 237 +++++ .../webcontainer/webcontainer-runner.ts | 2 +- .../webcontainer/webcontainer.helpers.ts | 5 +- .../webcontainer/webcontainer.service.ts | 2 +- .../src/style/dark-theme/dark-theme.scss | 16 +- .../style/horizon-theme/horizon-theme.scss | 2 +- apps/showcase/tsconfig.app.json | 5 +- nx.json | 3 + packages/@ama-sdk/schematics/README.md | 1 + .../typescript/shell/templates/base/readme.md | 9 +- packages/@ama-sdk/showcase-sdk/open-api.yaml | 829 ++++++++++++++++++ .../builders/rules-engine-extractor/index.ts | 14 +- packages/@o3r/training-sdk/.commitlintrc.json | 37 + packages/@o3r/training-sdk/.editorconfig | 13 + packages/@o3r/training-sdk/.eslintignore | 9 + packages/@o3r/training-sdk/.eslintrc.js | 38 + packages/@o3r/training-sdk/.gitignore | 65 ++ .../training-sdk/.openapi-generator-ignore | 1 + packages/@o3r/training-sdk/.renovaterc.json | 37 + packages/@o3r/training-sdk/.swcrc | 16 + packages/@o3r/training-sdk/.versionrc.json | 9 + .../@o3r/training-sdk/.vscode/settings.json | 26 + packages/@o3r/training-sdk/.yarnrc.yml | 5 + packages/@o3r/training-sdk/CONTRIBUTING.md | 4 + .../training-sdk/configs/tsconfig.test.json | 21 + packages/@o3r/training-sdk/jest.config.js | 26 + packages/@o3r/training-sdk/open-api.yaml | 40 + packages/@o3r/training-sdk/openapi.yml | 40 + packages/@o3r/training-sdk/openapitools.json | 19 + packages/@o3r/training-sdk/package.json | 138 +++ packages/@o3r/training-sdk/project.json | 42 + packages/@o3r/training-sdk/readme.md | 205 +++++ .../src/api/dummy/dummy-api.fixture.ts | 12 + .../api/dummy/dummy-api.jasmine.fixture.ts | 12 + .../src/api/dummy/dummy-api.jest.fixture.ts | 14 + .../training-sdk/src/api/dummy/dummy-api.ts | 66 ++ .../@o3r/training-sdk/src/api/dummy/index.ts | 1 + packages/@o3r/training-sdk/src/api/enums.ts | 1 + .../training-sdk/src/api/fixtures.jasmine.ts | 1 + .../training-sdk/src/api/fixtures.jest.ts | 1 + .../@o3r/training-sdk/src/api/fixtures.ts | 3 + packages/@o3r/training-sdk/src/api/index.ts | 3 + .../@o3r/training-sdk/src/api/interfaces.ts | 3 + packages/@o3r/training-sdk/src/index.ts | 3 + .../training-sdk/src/models/base/enums.ts | 1 + .../src/models/base/flight/flight.reviver.ts | 19 + .../src/models/base/flight/flight.ts | 20 + .../src/models/base/flight/index.ts | 2 + .../training-sdk/src/models/base/index.ts | 1 + .../training-sdk/src/models/base/patterns.ts | 1 + .../training-sdk/src/models/base/revivers.ts | 1 + .../@o3r/training-sdk/src/models/index.ts | 1 + .../@o3r/training-sdk/src/spec/api-mock.ts | 34 + .../src/spec/operation-adapter.ts | 7 + .../training-sdk/testing/tsconfig.spec.json | 23 + .../@o3r/training-sdk/tsconfig.build.json | 29 + packages/@o3r/training-sdk/tsconfig.doc.json | 20 + .../@o3r/training-sdk/tsconfig.eslint.json | 8 + packages/@o3r/training-sdk/tsconfig.json | 14 + .../tsconfigs/esm2020/tsconfig.jest.json | 16 + .../tsconfigs/esm2020/tsconfig.json | 10 + .../tsconfigs/esm2020/tsconfig.source.json | 11 + .../training-sdk/tsconfigs/tsconfig.jest.json | 20 + .../tsconfigs/tsconfig.source.json | 13 + packages/@o3r/training-sdk/typedoc.json | 12 + tsconfig.base.json | 3 + tsconfig.build.json | 1 + yarn.lock | 62 ++ 105 files changed, 3880 insertions(+), 51 deletions(-) create mode 100644 apps/showcase/scripts/prepare-training-exercises/index.cjs create mode 100644 apps/showcase/src/app/sdk-training/index.ts create mode 100644 apps/showcase/src/app/sdk-training/sdk-training.component.scss create mode 100644 apps/showcase/src/app/sdk-training/sdk-training.component.spec.ts create mode 100644 apps/showcase/src/app/sdk-training/sdk-training.component.ts create mode 100644 apps/showcase/src/assets/sdk-training-openapi-diagram.svg create mode 100644 apps/showcase/src/assets/sdk-training/program.json create mode 100644 apps/showcase/src/assets/sdk-training/shared/empty.json create mode 100644 apps/showcase/src/assets/sdk-training/shared/monorepo-template.json create mode 100644 apps/showcase/src/assets/sdk-training/shared/monorepo-with-app create mode 100644 apps/showcase/src/assets/sdk-training/steps/angular-integration/instructions.html create mode 100644 apps/showcase/src/assets/sdk-training/steps/date-sdk-generation/instructions.html create mode 100644 apps/showcase/src/assets/sdk-training/steps/date/exercise/app.component.html create mode 100644 apps/showcase/src/assets/sdk-training/steps/date/exercise/app.component.scss create mode 100644 apps/showcase/src/assets/sdk-training/steps/date/exercise/app.component.ts create mode 100644 apps/showcase/src/assets/sdk-training/steps/date/instructions.html create mode 100644 apps/showcase/src/assets/sdk-training/steps/date/solution/app.component.ts create mode 100644 apps/showcase/src/assets/sdk-training/steps/introduction/instructions.html create mode 100644 apps/showcase/src/assets/sdk-training/steps/model-extension/instructions.html create mode 100644 apps/showcase/src/assets/sdk-training/steps/plugins/instructions.html create mode 100644 apps/showcase/src/assets/sdk-training/steps/sdk-generation/instructions.html create mode 100644 apps/showcase/src/assets/sdk-training/steps/sdk-specs/instructions.html create mode 100644 apps/showcase/src/assets/sdk-training/steps/typescript-sdk/instructions.html create mode 100644 apps/showcase/src/assets/sdk-training/steps/welcome/instructions.html create mode 100644 apps/showcase/src/components/training/training.component.html create mode 100644 apps/showcase/src/components/training/training.component.scss create mode 100644 apps/showcase/src/components/training/training.component.spec.ts create mode 100644 apps/showcase/src/components/training/training.component.ts create mode 100644 packages/@ama-sdk/showcase-sdk/open-api.yaml create mode 100644 packages/@o3r/training-sdk/.commitlintrc.json create mode 100644 packages/@o3r/training-sdk/.editorconfig create mode 100644 packages/@o3r/training-sdk/.eslintignore create mode 100644 packages/@o3r/training-sdk/.eslintrc.js create mode 100644 packages/@o3r/training-sdk/.gitignore create mode 100644 packages/@o3r/training-sdk/.openapi-generator-ignore create mode 100644 packages/@o3r/training-sdk/.renovaterc.json create mode 100644 packages/@o3r/training-sdk/.swcrc create mode 100644 packages/@o3r/training-sdk/.versionrc.json create mode 100644 packages/@o3r/training-sdk/.vscode/settings.json create mode 100644 packages/@o3r/training-sdk/.yarnrc.yml create mode 100644 packages/@o3r/training-sdk/CONTRIBUTING.md create mode 100644 packages/@o3r/training-sdk/configs/tsconfig.test.json create mode 100644 packages/@o3r/training-sdk/jest.config.js create mode 100644 packages/@o3r/training-sdk/open-api.yaml create mode 100644 packages/@o3r/training-sdk/openapi.yml create mode 100644 packages/@o3r/training-sdk/openapitools.json create mode 100644 packages/@o3r/training-sdk/package.json create mode 100644 packages/@o3r/training-sdk/project.json create mode 100644 packages/@o3r/training-sdk/readme.md create mode 100644 packages/@o3r/training-sdk/src/api/dummy/dummy-api.fixture.ts create mode 100644 packages/@o3r/training-sdk/src/api/dummy/dummy-api.jasmine.fixture.ts create mode 100644 packages/@o3r/training-sdk/src/api/dummy/dummy-api.jest.fixture.ts create mode 100644 packages/@o3r/training-sdk/src/api/dummy/dummy-api.ts create mode 100644 packages/@o3r/training-sdk/src/api/dummy/index.ts create mode 100644 packages/@o3r/training-sdk/src/api/enums.ts create mode 100644 packages/@o3r/training-sdk/src/api/fixtures.jasmine.ts create mode 100644 packages/@o3r/training-sdk/src/api/fixtures.jest.ts create mode 100644 packages/@o3r/training-sdk/src/api/fixtures.ts create mode 100644 packages/@o3r/training-sdk/src/api/index.ts create mode 100644 packages/@o3r/training-sdk/src/api/interfaces.ts create mode 100644 packages/@o3r/training-sdk/src/index.ts create mode 100644 packages/@o3r/training-sdk/src/models/base/enums.ts create mode 100644 packages/@o3r/training-sdk/src/models/base/flight/flight.reviver.ts create mode 100644 packages/@o3r/training-sdk/src/models/base/flight/flight.ts create mode 100644 packages/@o3r/training-sdk/src/models/base/flight/index.ts create mode 100644 packages/@o3r/training-sdk/src/models/base/index.ts create mode 100644 packages/@o3r/training-sdk/src/models/base/patterns.ts create mode 100644 packages/@o3r/training-sdk/src/models/base/revivers.ts create mode 100644 packages/@o3r/training-sdk/src/models/index.ts create mode 100644 packages/@o3r/training-sdk/src/spec/api-mock.ts create mode 100644 packages/@o3r/training-sdk/src/spec/operation-adapter.ts create mode 100644 packages/@o3r/training-sdk/testing/tsconfig.spec.json create mode 100644 packages/@o3r/training-sdk/tsconfig.build.json create mode 100644 packages/@o3r/training-sdk/tsconfig.doc.json create mode 100644 packages/@o3r/training-sdk/tsconfig.eslint.json create mode 100644 packages/@o3r/training-sdk/tsconfig.json create mode 100644 packages/@o3r/training-sdk/tsconfigs/esm2020/tsconfig.jest.json create mode 100644 packages/@o3r/training-sdk/tsconfigs/esm2020/tsconfig.json create mode 100644 packages/@o3r/training-sdk/tsconfigs/esm2020/tsconfig.source.json create mode 100644 packages/@o3r/training-sdk/tsconfigs/tsconfig.jest.json create mode 100644 packages/@o3r/training-sdk/tsconfigs/tsconfig.source.json create mode 100644 packages/@o3r/training-sdk/typedoc.json diff --git a/.vscode/settings.json b/.vscode/settings.json index f7887a9507..e72223f5ca 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -30,7 +30,7 @@ "jest.debugMode": true, "jest.runMode": "on-save", "testing.openTesting": "neverOpen", - "explorer.fileNesting.enabled": true, + "explorer.fileNesting.enabled": false, "explorer.fileNesting.patterns": { "readme.md": "security.md, code_of_conduct.md, contributing.md", "*.js": "${capture}.js.map, ${capture}.d.ts, ${capture}.d.ts.map", @@ -89,5 +89,7 @@ "files.trimTrailingWhitespace": true, "files.trimFinalNewlines": false, "otter.extract.styling.prefix": "o3r", - "typescript.tsserver.experimental.useVsCodeWatcher": false + "typescript.tsserver.experimental.useVsCodeWatcher": false, + "editor.tabSize": 2, + "explorer.fileNesting.expand": false } diff --git a/apps/showcase/.gitignore b/apps/showcase/.gitignore index 61534a6926..eb5ba15efb 100644 --- a/apps/showcase/.gitignore +++ b/apps/showcase/.gitignore @@ -6,3 +6,5 @@ dist-e2e-playwright playwright-reports test-results training-assets +src/assets/sdk-training/**/exercise.json +src/assets/sdk-training/**/solution.json diff --git a/apps/showcase/package.json b/apps/showcase/package.json index a6db3a37f5..a6ac690e65 100644 --- a/apps/showcase/package.json +++ b/apps/showcase/package.json @@ -14,6 +14,7 @@ "start:no-translation": "ng serve", "generate:translations:dev": "ng run showcase:generate-translations", "generate:translations": "ng run showcase:generate-translations:production", + "prepare-training": "node scripts/prepare-training-exercises/index.cjs", "cms-adapters:localizations": "ng run showcase:extract-translations", "cms-adapters:metadata": "yarn run cms-adapters:localizations", "update:otter": "ng update @o3r/core", diff --git a/apps/showcase/project.json b/apps/showcase/project.json index 27f42baa34..c13d28efde 100644 --- a/apps/showcase/project.json +++ b/apps/showcase/project.json @@ -145,7 +145,8 @@ "generate-theme", "generate-dark-theme", "generate-horizon-theme", - "copy-training-assets" + "copy-training-assets", + "prepare-training" ] }, "serve": { @@ -380,6 +381,23 @@ }, "dependsOn": ["^build-builders"] }, + "prepare-training": { + "executor": "nx:run-script", + "inputs": [ + "global", + "{projectRoot}/package.json", + "{projectRoot}/src/assets/**/exercise/**", + "{projectRoot}/src/assets/**/solution/**", + "{projectRoot}/scripts/prepare-training-exercises/*.cjs" + ], + "outputs": [ + "{projectRoot}/src/assets/**/solution.json", + "{projectRoot}/src/assets/**/exercise.json" + ], + "options": { + "script": "prepare-training" + } + }, "copy-training-assets": { "executor": "nx:run-script", "inputs": [ diff --git a/apps/showcase/scripts/prepare-training-exercises/index.cjs b/apps/showcase/scripts/prepare-training-exercises/index.cjs new file mode 100644 index 0000000000..01998c6831 --- /dev/null +++ b/apps/showcase/scripts/prepare-training-exercises/index.cjs @@ -0,0 +1,27 @@ +const {readdir, readFile, writeFile} = require('node:fs/promises'); +const {getFilesTree} = require('@o3r/training-tools'); +const {dirname, join, resolve} = require('node:path'); +const glob = require('globby'); + +/** + * The Chrome Extension mechanism does not accept exports in loaded module + * The purpose of this script is to remove the empty `export` generated by TSC + */ + +void (async () => { + const root = resolve(__dirname, '..', '..'); + const files = await glob('src/assets/*-training/**/(exercise|solution)/**', {cwd: root}); + const paths = files.reduce((exercisePaths, file) => { + const exerciseDirectory = dirname(file).match('(.*/(?:exercise|solution))')[0]; + exercisePaths.add(`${exerciseDirectory}`); + return exercisePaths; + }, new Set()); + for (const folder of paths) { + const filePath = join(root, folder); + const exerciseStructure = await getFilesTree([{isDir: true, path: `${filePath}`}], {readdir, readFile}); + const [_, commonPath, folderName] = folder.match('(.*)/(exercise|solution)'); + const targetPath = join(commonPath, `${folderName}.json`); + const content = JSON.stringify(exerciseStructure); + await writeFile(targetPath, content); + } +})(); diff --git a/apps/showcase/src/app/app-routing.module.ts b/apps/showcase/src/app/app-routing.module.ts index 5fe834d86b..78d1df3bb2 100644 --- a/apps/showcase/src/app/app-routing.module.ts +++ b/apps/showcase/src/app/app-routing.module.ts @@ -13,6 +13,7 @@ const appRoutes: Routes = [ {path: 'run-app-locally', loadComponent: () => import('./run-app-locally/index').then((m) => m.RunAppLocallyComponent), title: 'Otter Showcase - Run App Locally'}, {path: 'sdk', loadComponent: () => import('./sdk/index').then((m) => m.SdkComponent), title: 'Otter Showcase - SDK'}, {path: 'placeholder', loadComponent: () => import('./placeholder/index').then((m) => m.PlaceholderComponent), title: 'Otter Showcase - Placeholder'}, + {path: 'sdk-training', loadComponent: () => import('./sdk-training/index').then((m) => m.SdkTrainingComponent), title: 'Otter Showcase - SDK Training'}, {path: '**', redirectTo: '/home', pathMatch: 'full'} ]; diff --git a/apps/showcase/src/app/app.component.html b/apps/showcase/src/app/app.component.html index fb9c8bab04..a309bb1e05 100644 --- a/apps/showcase/src/app/app.component.html +++ b/apps/showcase/src/app/app.component.html @@ -1,28 +1,31 @@ - -
-
-
- + +
+
+
+ -
-
- + > +
+
+ +
-