diff --git a/package.json b/package.json index 0fd603740e..ca0d53f377 100644 --- a/package.json +++ b/package.json @@ -181,6 +181,7 @@ "@o3r/build-helpers": "workspace:^", "@o3r/eslint-config-otter": "workspace:^", "@o3r/eslint-plugin": "workspace:^", + "@o3r/telemetry": "workspace:^", "@o3r/workspace": "workspace:^", "@popperjs/core": "^2.11.5", "@schematics/angular": "~17.0.3", diff --git a/packages/@ama-sdk/core/schematics/ng-add/index.js b/packages/@ama-sdk/core/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@ama-sdk/core/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@ama-sdk/schematics/package.json b/packages/@ama-sdk/schematics/package.json index dbd479311c..8525598f8b 100644 --- a/packages/@ama-sdk/schematics/package.json +++ b/packages/@ama-sdk/schematics/package.json @@ -105,6 +105,7 @@ "pid-from-port": "^1.1.3", "semver": "^7.5.2", "ts-jest": "~29.1.1", + "ts-node": "~10.9.1", "type-fest": "^4.3.1", "typescript": "~5.2.2" }, diff --git a/packages/@ama-sdk/schematics/schematics/api-extension/index.js b/packages/@ama-sdk/schematics/schematics/api-extension/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@ama-sdk/schematics/schematics/api-extension/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@ama-sdk/schematics/schematics/java/client-core/index.js b/packages/@ama-sdk/schematics/schematics/java/client-core/index.js new file mode 100644 index 0000000000..c1aebc0c27 --- /dev/null +++ b/packages/@ama-sdk/schematics/schematics/java/client-core/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@ama-sdk/schematics/schematics/ng-add/index.js b/packages/@ama-sdk/schematics/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@ama-sdk/schematics/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@ama-sdk/schematics/schematics/typescript/core/index.js b/packages/@ama-sdk/schematics/schematics/typescript/core/index.js new file mode 100644 index 0000000000..c1aebc0c27 --- /dev/null +++ b/packages/@ama-sdk/schematics/schematics/typescript/core/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@ama-sdk/schematics/schematics/typescript/mock/index.js b/packages/@ama-sdk/schematics/schematics/typescript/mock/index.js new file mode 100644 index 0000000000..c1aebc0c27 --- /dev/null +++ b/packages/@ama-sdk/schematics/schematics/typescript/mock/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@ama-sdk/schematics/schematics/typescript/shell/index.js b/packages/@ama-sdk/schematics/schematics/typescript/shell/index.js new file mode 100644 index 0000000000..c1aebc0c27 --- /dev/null +++ b/packages/@ama-sdk/schematics/schematics/typescript/shell/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/analytics/schematics/analytics-to-component/index.js b/packages/@o3r/analytics/schematics/analytics-to-component/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/analytics/schematics/analytics-to-component/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/analytics/schematics/ng-add/index.js b/packages/@o3r/analytics/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/analytics/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/apis-manager/schematics/ng-add/index.js b/packages/@o3r/apis-manager/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/apis-manager/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/application/schematics/ng-add/index.js b/packages/@o3r/application/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/application/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/artifactory-tools/schematics/ng-add/index.js b/packages/@o3r/artifactory-tools/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/artifactory-tools/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/azure-tools/schematics/ng-add/index.js b/packages/@o3r/azure-tools/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/azure-tools/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/components/schematics/ng-add/index.js b/packages/@o3r/components/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/components/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/configuration/schematics/configuration-to-component/index.js b/packages/@o3r/configuration/schematics/configuration-to-component/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/configuration/schematics/configuration-to-component/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/configuration/schematics/ng-add/index.js b/packages/@o3r/configuration/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/configuration/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/core/schematics/add-modules/index.js b/packages/@o3r/core/schematics/add-modules/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/core/schematics/add-modules/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/core/schematics/component/container/index.js b/packages/@o3r/core/schematics/component/container/index.js new file mode 100644 index 0000000000..c1aebc0c27 --- /dev/null +++ b/packages/@o3r/core/schematics/component/container/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/core/schematics/component/index.js b/packages/@o3r/core/schematics/component/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/core/schematics/component/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/core/schematics/component/index.ts b/packages/@o3r/core/schematics/component/index.ts index cecc79819c..bb8ba51eba 100644 --- a/packages/@o3r/core/schematics/component/index.ts +++ b/packages/@o3r/core/schematics/component/index.ts @@ -1,6 +1,14 @@ import { strings } from '@angular-devkit/core'; import { apply, chain, MergeStrategy, mergeWith, move, noop, Rule, schematic, SchematicContext, template, Tree, url } from '@angular-devkit/schematics'; -import { applyEsLintFix, createSchematicWithMetricsIfInstalled, getComponentFolderName, getDestinationPath, getInputComponentName, moduleHasSubEntryPoints, writeSubEntryPointPackageJson } from '@o3r/schematics'; +import { + applyEsLintFix, + createSchematicWithMetricsIfInstalled, + getComponentFolderName, + getDestinationPath, + getInputComponentName, + moduleHasSubEntryPoints, + writeSubEntryPointPackageJson +} from '@o3r/schematics'; import * as path from 'node:path'; import { NgGenerateComponentSchematicsSchema } from './schema'; diff --git a/packages/@o3r/core/schematics/component/presenter/index.js b/packages/@o3r/core/schematics/component/presenter/index.js new file mode 100644 index 0000000000..c1aebc0c27 --- /dev/null +++ b/packages/@o3r/core/schematics/component/presenter/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/core/schematics/context-to-component/index.js b/packages/@o3r/core/schematics/context-to-component/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/core/schematics/context-to-component/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/core/schematics/convert-component/index.js b/packages/@o3r/core/schematics/convert-component/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/core/schematics/convert-component/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/core/schematics/ng-add-create/index.js b/packages/@o3r/core/schematics/ng-add-create/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/core/schematics/ng-add-create/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/core/schematics/ng-add/index.js b/packages/@o3r/core/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/core/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/core/schematics/page/index.js b/packages/@o3r/core/schematics/page/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/core/schematics/page/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/core/schematics/renovate/index.js b/packages/@o3r/core/schematics/renovate/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/core/schematics/renovate/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/core/schematics/schematics-update/index.js b/packages/@o3r/core/schematics/schematics-update/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/core/schematics/schematics-update/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/core/schematics/service/index.js b/packages/@o3r/core/schematics/service/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/core/schematics/service/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/core/schematics/show-modules/index.js b/packages/@o3r/core/schematics/show-modules/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/core/schematics/show-modules/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/core/schematics/store-action/index.js b/packages/@o3r/core/schematics/store-action/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/core/schematics/store-action/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/core/schematics/store/entity-async/index.js b/packages/@o3r/core/schematics/store/entity-async/index.js new file mode 100644 index 0000000000..c1aebc0c27 --- /dev/null +++ b/packages/@o3r/core/schematics/store/entity-async/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/core/schematics/store/entity-sync/index.js b/packages/@o3r/core/schematics/store/entity-sync/index.js new file mode 100644 index 0000000000..c1aebc0c27 --- /dev/null +++ b/packages/@o3r/core/schematics/store/entity-sync/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/core/schematics/store/index.js b/packages/@o3r/core/schematics/store/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/core/schematics/store/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/core/schematics/store/simple-async/index.js b/packages/@o3r/core/schematics/store/simple-async/index.js new file mode 100644 index 0000000000..c1aebc0c27 --- /dev/null +++ b/packages/@o3r/core/schematics/store/simple-async/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/core/schematics/store/simple-sync/index.js b/packages/@o3r/core/schematics/store/simple-sync/index.js new file mode 100644 index 0000000000..c1aebc0c27 --- /dev/null +++ b/packages/@o3r/core/schematics/store/simple-sync/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/design/schematics/ extract-token/index.js b/packages/@o3r/design/schematics/ extract-token/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/design/schematics/ extract-token/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/design/schematics/generate-css/index.js b/packages/@o3r/design/schematics/generate-css/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/design/schematics/generate-css/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/design/schematics/ng-add/index.js b/packages/@o3r/design/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/design/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/dynamic-content/schematics/ng-add/index.js b/packages/@o3r/dynamic-content/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/dynamic-content/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/eslint-config-otter/schematics/ng-add/index.js b/packages/@o3r/eslint-config-otter/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/eslint-config-otter/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/eslint-plugin/schematics/ng-add/index.js b/packages/@o3r/eslint-plugin/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/eslint-plugin/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/extractors/schematics/ng-add/index.js b/packages/@o3r/extractors/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/extractors/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/forms/schematics/ng-add/index.js b/packages/@o3r/forms/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/forms/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/localization/schematics/add-localization-key/index.js b/packages/@o3r/localization/schematics/add-localization-key/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/localization/schematics/add-localization-key/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/localization/schematics/localization-to-component/index.js b/packages/@o3r/localization/schematics/localization-to-component/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/localization/schematics/localization-to-component/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/localization/schematics/ng-add/index.js b/packages/@o3r/localization/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/localization/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/logger/schematics/ng-add/index.js b/packages/@o3r/logger/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/logger/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/mobile/schematics/ng-add/index.js b/packages/@o3r/mobile/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/mobile/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/routing/schematics/ng-add/index.js b/packages/@o3r/routing/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/routing/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/rules-engine/schematics/facts-service/index.js b/packages/@o3r/rules-engine/schematics/facts-service/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/rules-engine/schematics/facts-service/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/rules-engine/schematics/ng-add/index.js b/packages/@o3r/rules-engine/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/rules-engine/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/rules-engine/schematics/operator/index.js b/packages/@o3r/rules-engine/schematics/operator/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/rules-engine/schematics/operator/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/rules-engine/schematics/rules-engine-to-component/index.js b/packages/@o3r/rules-engine/schematics/rules-engine-to-component/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/rules-engine/schematics/rules-engine-to-component/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/schematics/schematics/ng-add/index.js b/packages/@o3r/schematics/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/schematics/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/schematics/src/utility/wrapper.ts b/packages/@o3r/schematics/src/utility/wrapper.ts index e5d4044786..a90943bf93 100644 --- a/packages/@o3r/schematics/src/utility/wrapper.ts +++ b/packages/@o3r/schematics/src/utility/wrapper.ts @@ -7,11 +7,14 @@ const noopSchematicWrapper: SchematicWrapper = (fn) => fn; * if @o3r/telemetry is installed * @param schematicFn */ -export const createSchematicWithMetricsIfInstalled: SchematicWrapper = (schematicFn) => (opts) => async () => { +export const createSchematicWithMetricsIfInstalled: SchematicWrapper = (schematicFn) => (opts) => async (_, context) => { let wrapper: SchematicWrapper = noopSchematicWrapper; try { const { createSchematicWithMetrics } = await import('@o3r/telemetry'); wrapper = createSchematicWithMetrics; - } catch {} + } catch (e: any) { + // Do not throw if `@o3r/telemetry is not installed + context.logger.debug('`@o3r/telemetry` is not available\n' + e.toString()); + } return wrapper(schematicFn)(opts); }; diff --git a/packages/@o3r/store-sync/schematics/ng-add/index.js b/packages/@o3r/store-sync/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/store-sync/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/storybook/schematics/ng-add/index.js b/packages/@o3r/storybook/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/storybook/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/stylelint-plugin/schematics/ng-add/index.js b/packages/@o3r/stylelint-plugin/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/stylelint-plugin/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/styling/schematics/ng-add/index.js b/packages/@o3r/styling/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/styling/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/styling/schematics/theming-to-component/index.js b/packages/@o3r/styling/schematics/theming-to-component/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/styling/schematics/theming-to-component/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/telemetry/package.json b/packages/@o3r/telemetry/package.json index 283aa0f628..ccb3b3d4b1 100644 --- a/packages/@o3r/telemetry/package.json +++ b/packages/@o3r/telemetry/package.json @@ -8,6 +8,7 @@ "build": "yarn nx build telemetry", "postbuild": "patch-package-json-main", "prepare:build:builders": "yarn run cpy 'collection.json' dist && yarn run cpy 'schematics/**/*.json' dist/schematics", + "prepare:publish": "prepare-publish ./dist", "build:builders": "tsc -b tsconfig.builders.json --pretty" }, "dependencies": { @@ -55,5 +56,14 @@ "schematics": "./collection.json", "engines": { "node": ">=18.0.0" + }, + "exports": { + ".": { + "default": "./dist/src/public_api.js", + "typings": "./dist/src/public_api.d.ts" + }, + "./package.json": { + "default": "./package.json" + } } } diff --git a/packages/@o3r/telemetry/project.json b/packages/@o3r/telemetry/project.json index 7ec9fc0817..7ee1ded2fe 100644 --- a/packages/@o3r/telemetry/project.json +++ b/packages/@o3r/telemetry/project.json @@ -57,6 +57,18 @@ "jestConfig": "packages/@o3r/telemetry/jest.config.js", "silent": true } + }, + "prepare-publish": { + "executor": "nx:run-script", + "options": { + "script": "prepare:publish" + } + }, + "publish": { + "executor": "nx:run-commands", + "options": { + "command": "npm publish packages/@o3r/telemetry/dist" + } } }, "tags": [] diff --git a/packages/@o3r/telemetry/schematics/ng-add/index.js b/packages/@o3r/telemetry/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/telemetry/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/telemetry/src/builders/index.ts b/packages/@o3r/telemetry/src/builders/index.ts index c8fa551ce4..38fe3d61c3 100644 --- a/packages/@o3r/telemetry/src/builders/index.ts +++ b/packages/@o3r/telemetry/src/builders/index.ts @@ -4,21 +4,24 @@ import type { } from '@angular-devkit/architect'; import { getEnvironmentInfo } from '../environment/index'; import { performance } from 'node:perf_hooks'; +import { BuilderMetricData, sendData as defaultSendData } from '../sender'; type BuilderWrapperFn = (opts: S, ctx: BuilderContext) => O | Promise; +type SendDataFn = (data: BuilderMetricData, logger?: { error: (msg: string) => void } | undefined) => Promise; + /** * Type of a function that wraps a builder */ export type BuilderWrapper = - (builderFn: BuilderWrapperFn) => BuilderWrapperFn; + (builderFn: BuilderWrapperFn, sendData?: SendDataFn) => BuilderWrapperFn; /** * Wrapper method of a builder to retrieve some metrics around the builder run * @param builderFn */ -export const createBuilderWithMetrics: BuilderWrapper = (builderFn) => +export const createBuilderWithMetrics: BuilderWrapper = (builderFn, sendData = defaultSendData) => async (options, context) => { const startTime = Math.floor(performance.now()); let error; @@ -27,36 +30,43 @@ export const createBuilderWithMetrics: BuilderWrapper = (builderFn) => return result; } catch (e: any) { - error = e.toString(); - throw (e instanceof Error ? e : new Error(error)); + const err = e instanceof Error ? e : new Error(error); + error = err.stack || err.toString(); + throw err; } finally { - const endTime = Math.floor(performance.now()); - const duration = endTime - startTime; - // context.builder.builderName does not contain the package name - const builderName = context.builder.name as string; - context.logger.info(`${builderName} run in ${duration}ms`); - const environment = getEnvironmentInfo(); - const data = { - environment, - duration, - builder: { - name: builderName, - options, - ...(context.target - ? { - target: { - name: context.target.target, - projectName: context.target.project, - configuration: context.target.configuration - } - } : {} - ) - }, - error - }; - context.logger.debug(JSON.stringify(data, null, 2)); - // TODO handle call to log server here https://github.com/AmadeusITGroup/otter/issues/1201 + try { + const endTime = Math.floor(performance.now()); + const duration = endTime - startTime; + // context.builder.builderName does not contain the package name + const builderName = context.builder.name as string; + context.logger.info(`${builderName} run in ${duration}ms`); + const environment = getEnvironmentInfo(); + const data: BuilderMetricData = { + environment, + duration, + builder: { + name: builderName, + options, + ...(context.target + ? { + target: { + name: context.target.target, + projectName: context.target.project, + configuration: context.target.configuration + } + } : {} + ) + }, + error + }; + context.logger.debug(JSON.stringify(data, null, 2)); + await sendData(data, context.logger); + } catch (e: any) { + // Do not throw error if we don't manage to collect data + const err = (e instanceof Error ? e : new Error(error)); + context.logger.error(err.stack || err.toString()); + } } }; diff --git a/packages/@o3r/telemetry/src/environment/index.ts b/packages/@o3r/telemetry/src/environment/index.ts index 4afcf5b406..0cf5fcc22c 100644 --- a/packages/@o3r/telemetry/src/environment/index.ts +++ b/packages/@o3r/telemetry/src/environment/index.ts @@ -1,6 +1,7 @@ import * as fs from 'node:fs'; import * as os from 'node:os'; import { execSync } from 'node:child_process'; +import * as path from 'node:path'; /** Support NPM package managers */ type SupportedPackageManagers = 'npm' | 'yarn'; @@ -45,40 +46,116 @@ function getPackageManagerVersion(): string | undefined { } } +interface PackageManagerInfo { + /** Name of the package manager used */ + name: SupportedPackageManagers; + /** Version of the package manager */ + version?: string; +} + /** * Get package manager information */ -function getPackageManagerInfo() { +function getPackageManagerInfo(): PackageManagerInfo { return { name: getPackageManager(), version: getPackageManagerVersion() }; } +/** + * Operation System information + */ +interface OperatingSystemInfo { + /** Operating System CPU architecture */ + architecture: string; + /** Operating System platform */ + platform: string; + /** Operating System version */ + version: string; +} + +/** + * NodeJS information + */ +interface NodeInfo { + /** Version of NodeJS */ + version: string; +} + +/** + * Otter information + */ +interface OtterInfo { + /** Version of `@o3r/core` or `@o3r/telemetry` */ + version?: string; +} + +/** + * Project information + */ +interface ProjectInfo { + /** Name of the project */ + name: string; +} + +export interface EnvironmentMetricData { + /** OS information */ + os: OperatingSystemInfo; + /** NodeJS information */ + node: NodeInfo; + /** Package manager information */ + packageManager: PackageManagerInfo; + /** Otter information */ + otter: OtterInfo; + /** Is process run in a CI */ + ci: boolean; + /** Project information */ + project?: ProjectInfo; +} + /** * Get all environment information * Could be useful for debugging issue */ -export const getEnvironmentInfo = () => { +export const getEnvironmentInfo = (): EnvironmentMetricData => { const osInfo = { architecture: os.arch(), platform: os.platform(), version: os.release() }; + const nodeInfo = { version: process.version }; + const packageManagerInfo = getPackageManagerInfo(); + let otterCorePackageJsonPath: string | undefined; try { otterCorePackageJsonPath = require.resolve('@o3r/core/package.json'); } catch { - // Do not throw error if @o3r/core is not found + // Fallback to the @o3r/telemetry package version if @o3r/core is not found + otterCorePackageJsonPath = path.posix.join(__dirname, '..', '..', 'package.json'); } const otterInfo = { version: otterCorePackageJsonPath ? JSON.parse(fs.readFileSync(otterCorePackageJsonPath, { encoding: 'utf-8' })).version as string : undefined }; - return { os: osInfo, node: nodeInfo, packageManager: packageManagerInfo, otter: otterInfo }; + + const ci = typeof process.env.CI !== undefined && process.env.CI?.toLowerCase() !== 'false'; + + let projectName: string | undefined; + try { + projectName = JSON.parse(fs.readFileSync(path.posix.join(process.cwd(), 'package.json'), { encoding: 'utf-8' })).name; + } catch {} + + return { + os: osInfo, + node: nodeInfo, + packageManager: packageManagerInfo, + otter: otterInfo, ci, + ...(projectName ? { project: { name: projectName } } : {}) + }; }; /** @@ -86,7 +163,7 @@ export const getEnvironmentInfo = () => { * @see getEnvironmentInfo */ export const getEnvironmentInfoStringify = () => { - const { os: osInfo, node: nodeInfo, packageManager: packageManagerInfo, otter: otterInfo } = getEnvironmentInfo(); + const { os: osInfo, node: nodeInfo, packageManager: packageManagerInfo, otter: otterInfo, ci } = getEnvironmentInfo(); return ` - User Agent Architecture: ${osInfo.architecture} - User Agent Platform: ${osInfo.platform} @@ -95,5 +172,6 @@ export const getEnvironmentInfoStringify = () => { - Package Manager Name: ${packageManagerInfo.name} - Package Manager Version: ${packageManagerInfo.version || 'undefined'} - Otter Version: ${otterInfo.version || 'undefined'} +- CI: ${ci} `; }; diff --git a/packages/@o3r/telemetry/src/public_api.ts b/packages/@o3r/telemetry/src/public_api.ts index 726eeb205b..e6cc7bff3b 100644 --- a/packages/@o3r/telemetry/src/public_api.ts +++ b/packages/@o3r/telemetry/src/public_api.ts @@ -1,3 +1,4 @@ export * from './builders/index'; export * from './environment/index'; export * from './schematics/index'; +export * from './sender/index'; diff --git a/packages/@o3r/telemetry/src/schematics/index.ts b/packages/@o3r/telemetry/src/schematics/index.ts index b3d2f7c918..90ba178fc6 100644 --- a/packages/@o3r/telemetry/src/schematics/index.ts +++ b/packages/@o3r/telemetry/src/schematics/index.ts @@ -2,20 +2,23 @@ import { callRule, Rule } from '@angular-devkit/schematics'; import { performance } from 'node:perf_hooks'; import { lastValueFrom } from 'rxjs'; import { getEnvironmentInfo } from '../environment/index'; +import { sendData as defaultSendData, SchematicMetricData } from '../sender'; type SchematicWrapperFn = (opts: S) => Rule; +type SendDataFn = (data: SchematicMetricData, logger?: { error: (msg: string) => void } | undefined) => Promise; + /** * Type of a function that wraps a schematic */ -export type SchematicWrapper = (schematicFn: SchematicWrapperFn) => SchematicWrapperFn; +export type SchematicWrapper = (schematicFn: SchematicWrapperFn, sendData?: SendDataFn) => SchematicWrapperFn; /** * Wrapper method of a schematic to retrieve some metrics around the schematic run * @param schematicFn */ export const createSchematicWithMetrics: SchematicWrapper = - (schematicFn) => (options) => async (tree, context) => { + (schematicFn, sendData = defaultSendData) => (options) => async (tree, context) => { const startTime = Math.floor(performance.now()); let error; try { @@ -23,26 +26,33 @@ export const createSchematicWithMetrics: SchematicWrapper = await lastValueFrom(callRule(rule, tree, context)); } catch (e: any) { - error = e.toString(); - throw (e instanceof Error ? e : new Error(error)); + const err = e instanceof Error ? e : new Error(error); + error = err.stack || e.toString(); + throw err; } finally { - const endTime = Math.floor(performance.now()); - const duration = endTime - startTime; - const environment = getEnvironmentInfo(); - const schematic = { - name: `${context.schematic.description.collection.name}:${context.schematic.description.name}`, - options, - interactive: context.interactive - }; - const data = { - environment, - schematic, - duration, - error - }; - context.logger.debug(JSON.stringify(data, null, 2)); - // TODO handle call to log server here https://github.com/AmadeusITGroup/otter/issues/1201 + try { + const endTime = Math.floor(performance.now()); + const duration = endTime - startTime; + const environment = getEnvironmentInfo(); + const schematic = { + name: `${context.schematic.description.collection.name}:${context.schematic.description.name}`, + options, + interactive: context.interactive + }; + const data: SchematicMetricData = { + environment, + schematic, + duration, + error + }; + context.logger.debug(JSON.stringify(data, null, 2)); + await sendData(data, context.logger); + } catch (e: any) { + // Do not throw error if we don't manage to collect data + const err = (e instanceof Error ? e : new Error(error)); + context.logger.error(err.stack || err.toString()); + } } }; diff --git a/packages/@o3r/telemetry/src/sender/index.ts b/packages/@o3r/telemetry/src/sender/index.ts new file mode 100644 index 0000000000..9127183279 --- /dev/null +++ b/packages/@o3r/telemetry/src/sender/index.ts @@ -0,0 +1,72 @@ +import { EnvironmentMetricData } from '../environment'; + +export interface BaseMetricData { + /** Environment information */ + environment: EnvironmentMetricData; + /** Time it takes to run */ + duration: number; + /** Error message */ + error?: string; +} + +export interface BuilderMetricData extends BaseMetricData { + /** Builder information */ + builder: { + /** Builder name */ + name: string; + /** Builder options */ + options?: any; + /** Target information */ + target?: { + /** Target name */ + name: string; + /** Target project name */ + projectName: string; + /** Target configuration name */ + configuration?: string; + }; + }; +} + +export interface SchematicMetricData extends BaseMetricData { + /** Schematic information */ + schematic: { + /** Schematic name format @pkg/name:schematic-name */ + name: string; + /** Schematic options */ + options?: any; + /** Is run in an interactive context */ + interactive: boolean; + }; +} + +/** + * Different kinds of metrics + */ +export type MetricData = BuilderMetricData | SchematicMetricData; + +/** + * Send metric to a server + * @param data + * @param logger + */ +export const sendData = async (data: MetricData, logger?: { error: (msg: string) => void }) => { + try { + const message = JSON.stringify(data); + const body = JSON.stringify({ + messages: [{ + applicationName: 'OTTER', + message + }] + }); + await fetch('https://uat.digital-logging.saas.amadeus.com/postUILogs', { + method: 'POST', + body + }); + } catch (e: any) { + // Do not throw error if we don't manage to send data to a server + const err = e instanceof Error ? e : new Error(e); + // eslint-disable-next-line no-console + (logger || console).error(err.stack || err.toString()); + } +}; diff --git a/packages/@o3r/telemetry/tsconfig.build.json b/packages/@o3r/telemetry/tsconfig.build.json index b1f2f21e17..d2c152a4fa 100644 --- a/packages/@o3r/telemetry/tsconfig.build.json +++ b/packages/@o3r/telemetry/tsconfig.build.json @@ -4,6 +4,7 @@ "allowSyntheticDefaultImports": true, "incremental": true, "outDir": "./dist", + "module": "CommonJS", "rootDir": "src", "tsBuildInfoFile": "build/.tsbuildinfo" }, diff --git a/packages/@o3r/test-helpers/schematics/ng-add/index.js b/packages/@o3r/test-helpers/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/test-helpers/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/testing/schematics/add-functions-to-fixture/index.js b/packages/@o3r/testing/schematics/add-functions-to-fixture/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/testing/schematics/add-functions-to-fixture/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/testing/schematics/fixture-to-component/index.js b/packages/@o3r/testing/schematics/fixture-to-component/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/testing/schematics/fixture-to-component/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/testing/schematics/ng-add/index.js b/packages/@o3r/testing/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/testing/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/testing/schematics/playwright/sanity/index.js b/packages/@o3r/testing/schematics/playwright/sanity/index.js new file mode 100644 index 0000000000..c1aebc0c27 --- /dev/null +++ b/packages/@o3r/testing/schematics/playwright/sanity/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/testing/schematics/playwright/scenario/index.js b/packages/@o3r/testing/schematics/playwright/scenario/index.js new file mode 100644 index 0000000000..c1aebc0c27 --- /dev/null +++ b/packages/@o3r/testing/schematics/playwright/scenario/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/third-party/schematics/iframe-to-component/index.js b/packages/@o3r/third-party/schematics/iframe-to-component/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/third-party/schematics/iframe-to-component/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/third-party/schematics/ng-add/index.js b/packages/@o3r/third-party/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/third-party/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/workspace/schematics/application/index.js b/packages/@o3r/workspace/schematics/application/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/workspace/schematics/application/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/workspace/schematics/library/index.js b/packages/@o3r/workspace/schematics/library/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/workspace/schematics/library/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/workspace/schematics/ng-add/index.js b/packages/@o3r/workspace/schematics/ng-add/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/workspace/schematics/ng-add/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/packages/@o3r/workspace/schematics/sdk/index.js b/packages/@o3r/workspace/schematics/sdk/index.js new file mode 100644 index 0000000000..31936d01bc --- /dev/null +++ b/packages/@o3r/workspace/schematics/sdk/index.js @@ -0,0 +1,13 @@ +/* + +This files is used to allow the usage of the builder within @o3r/framework mono-repository. +It should not be part of the package. + +*/ + +const {resolve} = require('node:path'); + +require('ts-node').register({ project: resolve(__dirname, '..', '..', 'tsconfig.builders.json') }); +require('ts-node').register = () => {}; + +module.exports = require('./index.ts'); diff --git a/yarn.lock b/yarn.lock index 52537a8b57..41221c99be 100644 --- a/yarn.lock +++ b/yarn.lock @@ -263,6 +263,7 @@ __metadata: semver: "npm:^7.5.2" sway: "npm:^2.0.6" ts-jest: "npm:~29.1.1" + ts-node: "npm:~10.9.1" tslib: "npm:^2.5.3" type-fest: "npm:^4.3.1" typescript: "npm:~5.2.2" @@ -7464,6 +7465,7 @@ __metadata: "@o3r/build-helpers": "workspace:^" "@o3r/eslint-config-otter": "workspace:^" "@o3r/eslint-plugin": "workspace:^" + "@o3r/telemetry": "workspace:^" "@o3r/workspace": "workspace:^" "@popperjs/core": "npm:^2.11.5" "@schematics/angular": "npm:~17.0.3"