mirror of
https://github.com/hcengineering/platform.git
synced 2026-09-10 19:57:43 +02:00
Script to sync eslint deps
This commit is contained in:
@@ -1,10 +0,0 @@
|
||||
{
|
||||
"changes": [
|
||||
{
|
||||
"packageName": "@hcengineering/measurements-otlp",
|
||||
"comment": "Add tests",
|
||||
"type": "none"
|
||||
}
|
||||
],
|
||||
"packageName": "@hcengineering/measurements-otlp"
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
{
|
||||
"changes": [
|
||||
{
|
||||
"packageName": "@hcengineering/measurements",
|
||||
"comment": "Add tests",
|
||||
"type": "none"
|
||||
}
|
||||
],
|
||||
"packageName": "@hcengineering/measurements"
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
{
|
||||
"changes": [
|
||||
{
|
||||
"packageName": "@hcengineering/postgres-base",
|
||||
"comment": "",
|
||||
"type": "none"
|
||||
}
|
||||
],
|
||||
"packageName": "@hcengineering/postgres-base"
|
||||
}
|
||||
Generated
+283
-63
@@ -18,6 +18,30 @@ importers:
|
||||
'@types/jest':
|
||||
specifier: ^29.5.5
|
||||
version: 29.5.14
|
||||
'@typescript-eslint/eslint-plugin':
|
||||
specifier: ^8.46.0
|
||||
version: 8.46.0(@typescript-eslint/parser@8.46.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)
|
||||
'@typescript-eslint/parser':
|
||||
specifier: ^8.46.0
|
||||
version: 8.46.0(eslint@8.57.1)(typescript@5.9.3)
|
||||
eslint:
|
||||
specifier: ^8.54.0
|
||||
version: 8.57.1
|
||||
eslint-config-standard-with-typescript:
|
||||
specifier: ^40.0.0
|
||||
version: 40.0.0(@typescript-eslint/eslint-plugin@8.46.0(@typescript-eslint/parser@8.46.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3))(eslint-plugin-import@2.32.0(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1)(typescript@5.9.3)
|
||||
eslint-plugin-import:
|
||||
specifier: ^2.26.0
|
||||
version: 2.32.0(eslint@8.57.1)
|
||||
eslint-plugin-n:
|
||||
specifier: ^15.4.0
|
||||
version: 15.7.0(eslint@8.57.1)
|
||||
eslint-plugin-node:
|
||||
specifier: ^11.1.0
|
||||
version: 11.1.0(eslint@8.57.1)
|
||||
eslint-plugin-promise:
|
||||
specifier: ^6.1.1
|
||||
version: 6.6.0(eslint@8.57.1)
|
||||
jest:
|
||||
specifier: ^29.7.0
|
||||
version: 29.7.0(@types/node@22.18.1)
|
||||
@@ -79,6 +103,30 @@ importers:
|
||||
'@types/jest':
|
||||
specifier: ^29.5.5
|
||||
version: 29.5.14
|
||||
'@typescript-eslint/eslint-plugin':
|
||||
specifier: ^8.46.0
|
||||
version: 8.46.0(@typescript-eslint/parser@8.46.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)
|
||||
'@typescript-eslint/parser':
|
||||
specifier: ^8.46.0
|
||||
version: 8.46.0(eslint@8.57.1)(typescript@5.9.3)
|
||||
eslint:
|
||||
specifier: ^8.54.0
|
||||
version: 8.57.1
|
||||
eslint-config-standard-with-typescript:
|
||||
specifier: ^40.0.0
|
||||
version: 40.0.0(@typescript-eslint/eslint-plugin@8.46.0(@typescript-eslint/parser@8.46.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3))(eslint-plugin-import@2.32.0(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1)(typescript@5.9.3)
|
||||
eslint-plugin-import:
|
||||
specifier: ^2.26.0
|
||||
version: 2.32.0(eslint@8.57.1)
|
||||
eslint-plugin-n:
|
||||
specifier: ^15.4.0
|
||||
version: 15.7.0(eslint@8.57.1)
|
||||
eslint-plugin-node:
|
||||
specifier: ^11.1.0
|
||||
version: 11.1.0(eslint@8.57.1)
|
||||
eslint-plugin-promise:
|
||||
specifier: ^6.1.1
|
||||
version: 6.6.0(eslint@8.57.1)
|
||||
jest:
|
||||
specifier: ^29.7.0
|
||||
version: 29.7.0(@types/node@22.18.1)
|
||||
@@ -89,11 +137,11 @@ importers:
|
||||
../../packages/platform-rig:
|
||||
dependencies:
|
||||
'@typescript-eslint/eslint-plugin':
|
||||
specifier: ^6.11.0
|
||||
version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)
|
||||
specifier: ^8.46.0
|
||||
version: 8.46.0(@typescript-eslint/parser@8.46.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)
|
||||
'@typescript-eslint/parser':
|
||||
specifier: ^6.11.0
|
||||
version: 6.21.0(eslint@8.57.1)(typescript@5.9.3)
|
||||
specifier: ^8.46.0
|
||||
version: 8.46.0(eslint@8.57.1)(typescript@5.9.3)
|
||||
esbuild:
|
||||
specifier: ^0.25.10
|
||||
version: 0.25.10
|
||||
@@ -105,7 +153,7 @@ importers:
|
||||
version: 8.57.1
|
||||
eslint-config-standard-with-typescript:
|
||||
specifier: ^40.0.0
|
||||
version: 40.0.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3))(eslint-plugin-import@2.32.0(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1)(typescript@5.9.3)
|
||||
version: 40.0.0(@typescript-eslint/eslint-plugin@8.46.0(@typescript-eslint/parser@8.46.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3))(eslint-plugin-import@2.32.0(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1)(typescript@5.9.3)
|
||||
eslint-plugin-import:
|
||||
specifier: ^2.26.0
|
||||
version: 2.32.0(eslint@8.57.1)
|
||||
@@ -143,6 +191,30 @@ importers:
|
||||
'@types/node':
|
||||
specifier: ^22.15.29
|
||||
version: 22.18.1
|
||||
'@typescript-eslint/eslint-plugin':
|
||||
specifier: ^8.46.0
|
||||
version: 8.46.0(@typescript-eslint/parser@8.46.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)
|
||||
'@typescript-eslint/parser':
|
||||
specifier: ^8.46.0
|
||||
version: 8.46.0(eslint@8.57.1)(typescript@5.9.3)
|
||||
eslint:
|
||||
specifier: ^8.54.0
|
||||
version: 8.57.1
|
||||
eslint-config-standard-with-typescript:
|
||||
specifier: ^40.0.0
|
||||
version: 40.0.0(@typescript-eslint/eslint-plugin@8.46.0(@typescript-eslint/parser@8.46.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3))(eslint-plugin-import@2.32.0(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1)(typescript@5.9.3)
|
||||
eslint-plugin-import:
|
||||
specifier: ^2.26.0
|
||||
version: 2.32.0(eslint@8.57.1)
|
||||
eslint-plugin-n:
|
||||
specifier: ^15.4.0
|
||||
version: 15.7.0(eslint@8.57.1)
|
||||
eslint-plugin-node:
|
||||
specifier: ^11.1.0
|
||||
version: 11.1.0(eslint@8.57.1)
|
||||
eslint-plugin-promise:
|
||||
specifier: ^6.1.1
|
||||
version: 6.6.0(eslint@8.57.1)
|
||||
jest:
|
||||
specifier: ^29.7.0
|
||||
version: 29.7.0(@types/node@22.18.1)
|
||||
@@ -155,6 +227,27 @@ importers:
|
||||
'@hcengineering/platform-rig':
|
||||
specifier: workspace:^0.7.12
|
||||
version: link:../../packages/platform-rig
|
||||
'@typescript-eslint/eslint-plugin':
|
||||
specifier: ^8.46.0
|
||||
version: 8.46.0(@typescript-eslint/parser@8.46.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)
|
||||
'@typescript-eslint/parser':
|
||||
specifier: ^8.46.0
|
||||
version: 8.46.0(eslint@8.57.1)(typescript@5.9.3)
|
||||
eslint:
|
||||
specifier: ^8.54.0
|
||||
version: 8.57.1
|
||||
eslint-config-standard-with-typescript:
|
||||
specifier: ^40.0.0
|
||||
version: 40.0.0(@typescript-eslint/eslint-plugin@8.46.0(@typescript-eslint/parser@8.46.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3))(eslint-plugin-import@2.32.0(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1)(typescript@5.9.3)
|
||||
eslint-plugin-import:
|
||||
specifier: ^2.26.0
|
||||
version: 2.32.0(eslint@8.57.1)
|
||||
eslint-plugin-n:
|
||||
specifier: ^15.4.0
|
||||
version: 15.7.0(eslint@8.57.1)
|
||||
eslint-plugin-promise:
|
||||
specifier: ^6.1.1
|
||||
version: 6.6.0(eslint@8.57.1)
|
||||
|
||||
packages:
|
||||
|
||||
@@ -1200,9 +1293,6 @@ packages:
|
||||
'@types/jest@29.5.14':
|
||||
resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==}
|
||||
|
||||
'@types/json-schema@7.0.15':
|
||||
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
|
||||
|
||||
'@types/json5@0.0.29':
|
||||
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
|
||||
|
||||
@@ -1224,9 +1314,6 @@ packages:
|
||||
'@types/pg@8.15.5':
|
||||
resolution: {integrity: sha512-LF7lF6zWEKxuT3/OR8wAZGzkg4ENGXFNyiV/JeOt9z5B+0ZVwbql9McqX5c/WStFq1GaGso7H1AzP/qSzmlCKQ==}
|
||||
|
||||
'@types/semver@7.7.1':
|
||||
resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==}
|
||||
|
||||
'@types/stack-utils@2.0.3':
|
||||
resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==}
|
||||
|
||||
@@ -1239,16 +1326,13 @@ packages:
|
||||
'@types/yargs@17.0.33':
|
||||
resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==}
|
||||
|
||||
'@typescript-eslint/eslint-plugin@6.21.0':
|
||||
resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==}
|
||||
engines: {node: ^16.0.0 || >=18.0.0}
|
||||
'@typescript-eslint/eslint-plugin@8.46.0':
|
||||
resolution: {integrity: sha512-hA8gxBq4ukonVXPy0OKhiaUh/68D0E88GSmtC1iAEnGaieuDi38LhS7jdCHRLi6ErJBNDGCzvh5EnzdPwUc0DA==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
peerDependencies:
|
||||
'@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha
|
||||
eslint: ^7.0.0 || ^8.0.0
|
||||
typescript: '*'
|
||||
peerDependenciesMeta:
|
||||
typescript:
|
||||
optional: true
|
||||
'@typescript-eslint/parser': ^8.46.0
|
||||
eslint: ^8.57.0 || ^9.0.0
|
||||
typescript: '>=4.8.4 <6.0.0'
|
||||
|
||||
'@typescript-eslint/parser@6.21.0':
|
||||
resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==}
|
||||
@@ -1260,24 +1344,48 @@ packages:
|
||||
typescript:
|
||||
optional: true
|
||||
|
||||
'@typescript-eslint/parser@8.46.0':
|
||||
resolution: {integrity: sha512-n1H6IcDhmmUEG7TNVSspGmiHHutt7iVKtZwRppD7e04wha5MrkV1h3pti9xQLcCMt6YWsncpoT0HMjkH1FNwWQ==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
peerDependencies:
|
||||
eslint: ^8.57.0 || ^9.0.0
|
||||
typescript: '>=4.8.4 <6.0.0'
|
||||
|
||||
'@typescript-eslint/project-service@8.46.0':
|
||||
resolution: {integrity: sha512-OEhec0mH+U5Je2NZOeK1AbVCdm0ChyapAyTeXVIYTPXDJ3F07+cu87PPXcGoYqZ7M9YJVvFnfpGg1UmCIqM+QQ==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
peerDependencies:
|
||||
typescript: '>=4.8.4 <6.0.0'
|
||||
|
||||
'@typescript-eslint/scope-manager@6.21.0':
|
||||
resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==}
|
||||
engines: {node: ^16.0.0 || >=18.0.0}
|
||||
|
||||
'@typescript-eslint/type-utils@6.21.0':
|
||||
resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==}
|
||||
engines: {node: ^16.0.0 || >=18.0.0}
|
||||
'@typescript-eslint/scope-manager@8.46.0':
|
||||
resolution: {integrity: sha512-lWETPa9XGcBes4jqAMYD9fW0j4n6hrPtTJwWDmtqgFO/4HF4jmdH/Q6wggTw5qIT5TXjKzbt7GsZUBnWoO3dqw==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@typescript-eslint/tsconfig-utils@8.46.0':
|
||||
resolution: {integrity: sha512-WrYXKGAHY836/N7zoK/kzi6p8tXFhasHh8ocFL9VZSAkvH956gfeRfcnhs3xzRy8qQ/dq3q44v1jvQieMFg2cw==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
peerDependencies:
|
||||
eslint: ^7.0.0 || ^8.0.0
|
||||
typescript: '*'
|
||||
peerDependenciesMeta:
|
||||
typescript:
|
||||
optional: true
|
||||
typescript: '>=4.8.4 <6.0.0'
|
||||
|
||||
'@typescript-eslint/type-utils@8.46.0':
|
||||
resolution: {integrity: sha512-hy+lvYV1lZpVs2jRaEYvgCblZxUoJiPyCemwbQZ+NGulWkQRy0HRPYAoef/CNSzaLt+MLvMptZsHXHlkEilaeg==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
peerDependencies:
|
||||
eslint: ^8.57.0 || ^9.0.0
|
||||
typescript: '>=4.8.4 <6.0.0'
|
||||
|
||||
'@typescript-eslint/types@6.21.0':
|
||||
resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==}
|
||||
engines: {node: ^16.0.0 || >=18.0.0}
|
||||
|
||||
'@typescript-eslint/types@8.46.0':
|
||||
resolution: {integrity: sha512-bHGGJyVjSE4dJJIO5yyEWt/cHyNwga/zXGJbJJ8TiO01aVREK6gCTu3L+5wrkb1FbDkQ+TKjMNe9R/QQQP9+rA==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@typescript-eslint/typescript-estree@6.21.0':
|
||||
resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==}
|
||||
engines: {node: ^16.0.0 || >=18.0.0}
|
||||
@@ -1287,16 +1395,27 @@ packages:
|
||||
typescript:
|
||||
optional: true
|
||||
|
||||
'@typescript-eslint/utils@6.21.0':
|
||||
resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==}
|
||||
engines: {node: ^16.0.0 || >=18.0.0}
|
||||
'@typescript-eslint/typescript-estree@8.46.0':
|
||||
resolution: {integrity: sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
peerDependencies:
|
||||
eslint: ^7.0.0 || ^8.0.0
|
||||
typescript: '>=4.8.4 <6.0.0'
|
||||
|
||||
'@typescript-eslint/utils@8.46.0':
|
||||
resolution: {integrity: sha512-nD6yGWPj1xiOm4Gk0k6hLSZz2XkNXhuYmyIrOWcHoPuAhjT9i5bAG+xbWPgFeNR8HPHHtpNKdYUXJl/D3x7f5g==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
peerDependencies:
|
||||
eslint: ^8.57.0 || ^9.0.0
|
||||
typescript: '>=4.8.4 <6.0.0'
|
||||
|
||||
'@typescript-eslint/visitor-keys@6.21.0':
|
||||
resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==}
|
||||
engines: {node: ^16.0.0 || >=18.0.0}
|
||||
|
||||
'@typescript-eslint/visitor-keys@8.46.0':
|
||||
resolution: {integrity: sha512-FrvMpAK+hTbFy7vH5j1+tMYHMSKLE6RzluFJlkFNKD0p9YsUT75JlBSmr5so3QRzvMwU5/bIEdeNrxm8du8l3Q==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@ungap/structured-clone@1.3.0':
|
||||
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
|
||||
|
||||
@@ -1707,6 +1826,12 @@ packages:
|
||||
eslint:
|
||||
optional: true
|
||||
|
||||
eslint-plugin-es@3.0.1:
|
||||
resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==}
|
||||
engines: {node: '>=8.10.0'}
|
||||
peerDependencies:
|
||||
eslint: '>=4.19.1'
|
||||
|
||||
eslint-plugin-es@4.1.0:
|
||||
resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==}
|
||||
engines: {node: '>=8.10.0'}
|
||||
@@ -1725,6 +1850,12 @@ packages:
|
||||
peerDependencies:
|
||||
eslint: '>=7.0.0'
|
||||
|
||||
eslint-plugin-node@11.1.0:
|
||||
resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==}
|
||||
engines: {node: '>=8.10.0'}
|
||||
peerDependencies:
|
||||
eslint: '>=5.16.0'
|
||||
|
||||
eslint-plugin-promise@6.6.0:
|
||||
resolution: {integrity: sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==}
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
@@ -1757,6 +1888,10 @@ packages:
|
||||
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
|
||||
eslint-visitor-keys@4.2.1:
|
||||
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
eslint@8.57.1:
|
||||
resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==}
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
@@ -2002,6 +2137,10 @@ packages:
|
||||
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
|
||||
engines: {node: '>= 4'}
|
||||
|
||||
ignore@7.0.5:
|
||||
resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
|
||||
engines: {node: '>= 4'}
|
||||
|
||||
import-fresh@3.3.1:
|
||||
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
|
||||
engines: {node: '>=6'}
|
||||
@@ -2443,6 +2582,10 @@ packages:
|
||||
resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
|
||||
engines: {node: '>=16 || 14 >=14.17'}
|
||||
|
||||
minimatch@9.0.5:
|
||||
resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
|
||||
engines: {node: '>=16 || 14 >=14.17'}
|
||||
|
||||
minimist@1.2.8:
|
||||
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
|
||||
|
||||
@@ -2885,6 +3028,12 @@ packages:
|
||||
peerDependencies:
|
||||
typescript: '>=4.2.0'
|
||||
|
||||
ts-api-utils@2.1.0:
|
||||
resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
|
||||
engines: {node: '>=18.12'}
|
||||
peerDependencies:
|
||||
typescript: '>=4.8.4'
|
||||
|
||||
ts-jest@29.4.1:
|
||||
resolution: {integrity: sha512-SaeUtjfpg9Uqu8IbeDKtdaS0g8lS6FT6OzM3ezrDfErPJPHNDo/Ey+VFGP1bQIDfagYDLyRpd7O15XpG1Es2Uw==}
|
||||
engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0}
|
||||
@@ -4382,8 +4531,6 @@ snapshots:
|
||||
expect: 29.7.0
|
||||
pretty-format: 29.7.0
|
||||
|
||||
'@types/json-schema@7.0.15': {}
|
||||
|
||||
'@types/json5@0.0.29': {}
|
||||
|
||||
'@types/memcached@2.2.10':
|
||||
@@ -4412,8 +4559,6 @@ snapshots:
|
||||
pg-protocol: 1.10.3
|
||||
pg-types: 2.2.0
|
||||
|
||||
'@types/semver@7.7.1': {}
|
||||
|
||||
'@types/stack-utils@2.0.3': {}
|
||||
|
||||
'@types/tedious@4.0.14':
|
||||
@@ -4426,22 +4571,19 @@ snapshots:
|
||||
dependencies:
|
||||
'@types/yargs-parser': 21.0.3
|
||||
|
||||
'@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)':
|
||||
'@typescript-eslint/eslint-plugin@8.46.0(@typescript-eslint/parser@8.46.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@eslint-community/regexpp': 4.12.1
|
||||
'@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.9.3)
|
||||
'@typescript-eslint/scope-manager': 6.21.0
|
||||
'@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.9.3)
|
||||
'@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.9.3)
|
||||
'@typescript-eslint/visitor-keys': 6.21.0
|
||||
debug: 4.4.1
|
||||
'@typescript-eslint/parser': 8.46.0(eslint@8.57.1)(typescript@5.9.3)
|
||||
'@typescript-eslint/scope-manager': 8.46.0
|
||||
'@typescript-eslint/type-utils': 8.46.0(eslint@8.57.1)(typescript@5.9.3)
|
||||
'@typescript-eslint/utils': 8.46.0(eslint@8.57.1)(typescript@5.9.3)
|
||||
'@typescript-eslint/visitor-keys': 8.46.0
|
||||
eslint: 8.57.1
|
||||
graphemer: 1.4.0
|
||||
ignore: 5.3.2
|
||||
ignore: 7.0.5
|
||||
natural-compare: 1.4.0
|
||||
semver: 7.7.2
|
||||
ts-api-utils: 1.4.3(typescript@5.9.3)
|
||||
optionalDependencies:
|
||||
ts-api-utils: 2.1.0(typescript@5.9.3)
|
||||
typescript: 5.9.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
@@ -4459,25 +4601,57 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@typescript-eslint/parser@8.46.0(eslint@8.57.1)(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@typescript-eslint/scope-manager': 8.46.0
|
||||
'@typescript-eslint/types': 8.46.0
|
||||
'@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3)
|
||||
'@typescript-eslint/visitor-keys': 8.46.0
|
||||
debug: 4.4.1
|
||||
eslint: 8.57.1
|
||||
typescript: 5.9.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@typescript-eslint/project-service@8.46.0(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@typescript-eslint/tsconfig-utils': 8.46.0(typescript@5.9.3)
|
||||
'@typescript-eslint/types': 8.46.0
|
||||
debug: 4.4.1
|
||||
typescript: 5.9.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@typescript-eslint/scope-manager@6.21.0':
|
||||
dependencies:
|
||||
'@typescript-eslint/types': 6.21.0
|
||||
'@typescript-eslint/visitor-keys': 6.21.0
|
||||
|
||||
'@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.9.3)':
|
||||
'@typescript-eslint/scope-manager@8.46.0':
|
||||
dependencies:
|
||||
'@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3)
|
||||
'@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.9.3)
|
||||
'@typescript-eslint/types': 8.46.0
|
||||
'@typescript-eslint/visitor-keys': 8.46.0
|
||||
|
||||
'@typescript-eslint/tsconfig-utils@8.46.0(typescript@5.9.3)':
|
||||
dependencies:
|
||||
typescript: 5.9.3
|
||||
|
||||
'@typescript-eslint/type-utils@8.46.0(eslint@8.57.1)(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@typescript-eslint/types': 8.46.0
|
||||
'@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3)
|
||||
'@typescript-eslint/utils': 8.46.0(eslint@8.57.1)(typescript@5.9.3)
|
||||
debug: 4.4.1
|
||||
eslint: 8.57.1
|
||||
ts-api-utils: 1.4.3(typescript@5.9.3)
|
||||
optionalDependencies:
|
||||
ts-api-utils: 2.1.0(typescript@5.9.3)
|
||||
typescript: 5.9.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@typescript-eslint/types@6.21.0': {}
|
||||
|
||||
'@typescript-eslint/types@8.46.0': {}
|
||||
|
||||
'@typescript-eslint/typescript-estree@6.21.0(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@typescript-eslint/types': 6.21.0
|
||||
@@ -4493,25 +4667,43 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.9.3)':
|
||||
'@typescript-eslint/typescript-estree@8.46.0(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1)
|
||||
'@types/json-schema': 7.0.15
|
||||
'@types/semver': 7.7.1
|
||||
'@typescript-eslint/scope-manager': 6.21.0
|
||||
'@typescript-eslint/types': 6.21.0
|
||||
'@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3)
|
||||
eslint: 8.57.1
|
||||
'@typescript-eslint/project-service': 8.46.0(typescript@5.9.3)
|
||||
'@typescript-eslint/tsconfig-utils': 8.46.0(typescript@5.9.3)
|
||||
'@typescript-eslint/types': 8.46.0
|
||||
'@typescript-eslint/visitor-keys': 8.46.0
|
||||
debug: 4.4.1
|
||||
fast-glob: 3.3.3
|
||||
is-glob: 4.0.3
|
||||
minimatch: 9.0.5
|
||||
semver: 7.7.2
|
||||
ts-api-utils: 2.1.0(typescript@5.9.3)
|
||||
typescript: 5.9.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@typescript-eslint/utils@8.46.0(eslint@8.57.1)(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1)
|
||||
'@typescript-eslint/scope-manager': 8.46.0
|
||||
'@typescript-eslint/types': 8.46.0
|
||||
'@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3)
|
||||
eslint: 8.57.1
|
||||
typescript: 5.9.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
- typescript
|
||||
|
||||
'@typescript-eslint/visitor-keys@6.21.0':
|
||||
dependencies:
|
||||
'@typescript-eslint/types': 6.21.0
|
||||
eslint-visitor-keys: 3.4.3
|
||||
|
||||
'@typescript-eslint/visitor-keys@8.46.0':
|
||||
dependencies:
|
||||
'@typescript-eslint/types': 8.46.0
|
||||
eslint-visitor-keys: 4.2.1
|
||||
|
||||
'@ungap/structured-clone@1.3.0': {}
|
||||
|
||||
acorn-import-attributes@1.9.5(acorn@8.15.0):
|
||||
@@ -5016,9 +5208,9 @@ snapshots:
|
||||
|
||||
escape-string-regexp@4.0.0: {}
|
||||
|
||||
eslint-config-standard-with-typescript@40.0.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3))(eslint-plugin-import@2.32.0(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1)(typescript@5.9.3):
|
||||
eslint-config-standard-with-typescript@40.0.0(@typescript-eslint/eslint-plugin@8.46.0(@typescript-eslint/parser@8.46.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3))(eslint-plugin-import@2.32.0(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1)(typescript@5.9.3):
|
||||
dependencies:
|
||||
'@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)
|
||||
'@typescript-eslint/eslint-plugin': 8.46.0(@typescript-eslint/parser@8.46.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)
|
||||
'@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.9.3)
|
||||
eslint: 8.57.1
|
||||
eslint-config-standard: 17.1.0(eslint-plugin-import@2.32.0(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1)
|
||||
@@ -5048,6 +5240,12 @@ snapshots:
|
||||
optionalDependencies:
|
||||
eslint: 8.57.1
|
||||
|
||||
eslint-plugin-es@3.0.1(eslint@8.57.1):
|
||||
dependencies:
|
||||
eslint: 8.57.1
|
||||
eslint-utils: 2.1.0
|
||||
regexpp: 3.2.0
|
||||
|
||||
eslint-plugin-es@4.1.0(eslint@8.57.1):
|
||||
dependencies:
|
||||
eslint: 8.57.1
|
||||
@@ -5089,6 +5287,16 @@ snapshots:
|
||||
resolve: 1.22.10
|
||||
semver: 7.7.2
|
||||
|
||||
eslint-plugin-node@11.1.0(eslint@8.57.1):
|
||||
dependencies:
|
||||
eslint: 8.57.1
|
||||
eslint-plugin-es: 3.0.1(eslint@8.57.1)
|
||||
eslint-utils: 2.1.0
|
||||
ignore: 5.3.2
|
||||
minimatch: 3.1.2
|
||||
resolve: 1.22.10
|
||||
semver: 6.3.1
|
||||
|
||||
eslint-plugin-promise@6.6.0(eslint@8.57.1):
|
||||
dependencies:
|
||||
eslint: 8.57.1
|
||||
@@ -5113,6 +5321,8 @@ snapshots:
|
||||
|
||||
eslint-visitor-keys@3.4.3: {}
|
||||
|
||||
eslint-visitor-keys@4.2.1: {}
|
||||
|
||||
eslint@8.57.1:
|
||||
dependencies:
|
||||
'@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1)
|
||||
@@ -5423,6 +5633,8 @@ snapshots:
|
||||
|
||||
ignore@5.3.2: {}
|
||||
|
||||
ignore@7.0.5: {}
|
||||
|
||||
import-fresh@3.3.1:
|
||||
dependencies:
|
||||
parent-module: 1.0.1
|
||||
@@ -6045,6 +6257,10 @@ snapshots:
|
||||
dependencies:
|
||||
brace-expansion: 2.0.2
|
||||
|
||||
minimatch@9.0.5:
|
||||
dependencies:
|
||||
brace-expansion: 2.0.2
|
||||
|
||||
minimist@1.2.8: {}
|
||||
|
||||
module-details-from-path@1.0.4: {}
|
||||
@@ -6509,6 +6725,10 @@ snapshots:
|
||||
dependencies:
|
||||
typescript: 5.9.3
|
||||
|
||||
ts-api-utils@2.1.0(typescript@5.9.3):
|
||||
dependencies:
|
||||
typescript: 5.9.3
|
||||
|
||||
ts-jest@29.4.1(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest-util@29.7.0)(jest@29.7.0(@types/node@22.18.1))(typescript@5.9.3):
|
||||
dependencies:
|
||||
bs-logger: 0.2.6
|
||||
|
||||
@@ -5,7 +5,14 @@
|
||||
"format": "echo \"No format specified\""
|
||||
},
|
||||
"devDependencies": {
|
||||
"@hcengineering/platform-rig": "workspace:^0.7.12"
|
||||
"@hcengineering/platform-rig": "workspace:^0.7.13",
|
||||
"@typescript-eslint/eslint-plugin": "^8.46.0",
|
||||
"eslint-plugin-import": "^2.26.0",
|
||||
"eslint-plugin-promise": "^6.1.1",
|
||||
"eslint-plugin-n": "^15.4.0",
|
||||
"eslint": "^8.54.0",
|
||||
"@typescript-eslint/parser": "^8.46.0",
|
||||
"eslint-config-standard-with-typescript": "^40.0.0"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
|
||||
@@ -1,6 +1,31 @@
|
||||
{
|
||||
"name": "@hcengineering/measurements-otlp",
|
||||
"entries": [
|
||||
{
|
||||
"version": "0.7.11",
|
||||
"tag": "@hcengineering/measurements-otlp_v0.7.11",
|
||||
"date": "Sat, 11 Oct 2025 17:58:53 GMT",
|
||||
"comments": {
|
||||
"none": [
|
||||
{
|
||||
"comment": "Add tests"
|
||||
}
|
||||
],
|
||||
"patch": [
|
||||
{
|
||||
"comment": "Fix eslint deps"
|
||||
}
|
||||
],
|
||||
"dependency": [
|
||||
{
|
||||
"comment": "Updating dependency \"@hcengineering/measurements\" from `^0.7.10` to `0.7.11`"
|
||||
},
|
||||
{
|
||||
"comment": "Updating dependency \"@hcengineering/platform-rig\" from `^0.7.12` to `0.7.13`"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "0.7.10",
|
||||
"tag": "@hcengineering/measurements-otlp_v0.7.10",
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
# Change Log - @hcengineering/measurements-otlp
|
||||
|
||||
This log was last generated on Fri, 10 Oct 2025 12:32:59 GMT and should not be manually modified.
|
||||
This log was last generated on Sat, 11 Oct 2025 17:58:53 GMT and should not be manually modified.
|
||||
|
||||
## 0.7.11
|
||||
Sat, 11 Oct 2025 17:58:53 GMT
|
||||
|
||||
### Patches
|
||||
|
||||
- Fix eslint deps
|
||||
|
||||
## 0.7.10
|
||||
Fri, 10 Oct 2025 12:32:59 GMT
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@hcengineering/measurements-otlp",
|
||||
"version": "0.7.10",
|
||||
"version": "0.7.11",
|
||||
"main": "lib/index.js",
|
||||
"svelte": "src/index.ts",
|
||||
"types": "types/index.d.ts",
|
||||
@@ -27,13 +27,21 @@
|
||||
"_phase:validate": "compile validate"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@hcengineering/platform-rig": "workspace:^0.7.12",
|
||||
"@hcengineering/platform-rig": "workspace:^0.7.13",
|
||||
"jest": "^29.7.0",
|
||||
"ts-jest": "^29.1.1",
|
||||
"@types/jest": "^29.5.5"
|
||||
"@types/jest": "^29.5.5",
|
||||
"@typescript-eslint/eslint-plugin": "^8.46.0",
|
||||
"@typescript-eslint/parser": "^8.46.0",
|
||||
"eslint": "^8.54.0",
|
||||
"eslint-config-standard-with-typescript": "^40.0.0",
|
||||
"eslint-plugin-import": "^2.26.0",
|
||||
"eslint-plugin-node": "^11.1.0",
|
||||
"eslint-plugin-promise": "^6.1.1",
|
||||
"eslint-plugin-n": "^15.4.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@hcengineering/measurements": "workspace:^0.7.10",
|
||||
"@hcengineering/measurements": "workspace:^0.7.11",
|
||||
"@opentelemetry/sdk-node": "^0.203.0",
|
||||
"@opentelemetry/sdk-logs": "^0.203.0",
|
||||
"@opentelemetry/auto-instrumentations-node": "^0.62.0",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { OpenTelemetryMetricsContext } from '../telemetry'
|
||||
import { newMetrics, type MeasureLogger } from '@hcengineering/measurements'
|
||||
import { trace, context, SpanStatusCode } from '@opentelemetry/api'
|
||||
import { context, trace } from '@opentelemetry/api'
|
||||
import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node'
|
||||
import { OpenTelemetryMetricsContext } from '../telemetry'
|
||||
|
||||
describe('telemetry', () => {
|
||||
let tracer: any
|
||||
@@ -14,7 +14,7 @@ describe('telemetry', () => {
|
||||
})
|
||||
|
||||
afterAll(() => {
|
||||
provider.shutdown()
|
||||
void provider.shutdown()
|
||||
})
|
||||
|
||||
describe('OpenTelemetryMetricsContext', () => {
|
||||
@@ -101,7 +101,7 @@ describe('telemetry', () => {
|
||||
let executed = false
|
||||
await ctx.with('operation', { op: 'test' }, async () => {
|
||||
executed = true
|
||||
await new Promise(resolve => setTimeout(resolve, 10))
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
})
|
||||
|
||||
expect(executed).toBe(true)
|
||||
@@ -132,16 +132,7 @@ describe('telemetry', () => {
|
||||
it('should handle errors in async operations', async () => {
|
||||
const metrics = newMetrics()
|
||||
const span = tracer.startSpan('test-span')
|
||||
const ctx = new OpenTelemetryMetricsContext(
|
||||
'test',
|
||||
tracer,
|
||||
context.active(),
|
||||
span,
|
||||
{},
|
||||
{},
|
||||
metrics,
|
||||
mockLogger
|
||||
)
|
||||
const ctx = new OpenTelemetryMetricsContext('test', tracer, context.active(), span, {}, {}, metrics, mockLogger)
|
||||
|
||||
await expect(
|
||||
ctx.with('operation', { op: 'test' }, async () => {
|
||||
@@ -357,16 +348,7 @@ describe('telemetry', () => {
|
||||
const span = tracer.startSpan('test-span')
|
||||
const spanEndSpy = jest.spyOn(span, 'end')
|
||||
|
||||
const ctx = new OpenTelemetryMetricsContext(
|
||||
'test',
|
||||
tracer,
|
||||
context.active(),
|
||||
span,
|
||||
{},
|
||||
{},
|
||||
metrics,
|
||||
mockLogger
|
||||
)
|
||||
const ctx = new OpenTelemetryMetricsContext('test', tracer, context.active(), span, {}, {}, metrics, mockLogger)
|
||||
|
||||
ctx.end()
|
||||
ctx.end() // Second call should be no-op
|
||||
@@ -409,7 +391,7 @@ describe('telemetry', () => {
|
||||
'operation',
|
||||
{ op: 'test' },
|
||||
async () => {
|
||||
await new Promise(resolve => setTimeout(resolve, 10))
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
},
|
||||
{},
|
||||
{ log: true }
|
||||
@@ -442,7 +424,7 @@ describe('telemetry', () => {
|
||||
|
||||
it('should set span attributes from params', () => {
|
||||
const metrics = newMetrics()
|
||||
|
||||
|
||||
const ctx = new OpenTelemetryMetricsContext(
|
||||
'parent',
|
||||
tracer,
|
||||
@@ -455,7 +437,11 @@ describe('telemetry', () => {
|
||||
)
|
||||
|
||||
// When creating a child with span: true, attributes are set on the child's span
|
||||
const child = ctx.newChild('child', { key1: 'value1', key2: 'value2' }, { span: true }) as OpenTelemetryMetricsContext
|
||||
const child = ctx.newChild(
|
||||
'child',
|
||||
{ key1: 'value1', key2: 'value2' },
|
||||
{ span: true }
|
||||
) as OpenTelemetryMetricsContext
|
||||
|
||||
// The child should have been created successfully
|
||||
expect(child).toBeDefined()
|
||||
|
||||
@@ -1,6 +1,28 @@
|
||||
{
|
||||
"name": "@hcengineering/measurements",
|
||||
"entries": [
|
||||
{
|
||||
"version": "0.7.11",
|
||||
"tag": "@hcengineering/measurements_v0.7.11",
|
||||
"date": "Sat, 11 Oct 2025 17:58:53 GMT",
|
||||
"comments": {
|
||||
"none": [
|
||||
{
|
||||
"comment": "Add tests"
|
||||
}
|
||||
],
|
||||
"patch": [
|
||||
{
|
||||
"comment": "Fix eslint deps"
|
||||
}
|
||||
],
|
||||
"dependency": [
|
||||
{
|
||||
"comment": "Updating dependency \"@hcengineering/platform-rig\" from `^0.7.12` to `0.7.13`"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "0.7.10",
|
||||
"tag": "@hcengineering/measurements_v0.7.10",
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
# Change Log - @hcengineering/measurements
|
||||
|
||||
This log was last generated on Fri, 10 Oct 2025 12:32:59 GMT and should not be manually modified.
|
||||
This log was last generated on Sat, 11 Oct 2025 17:58:53 GMT and should not be manually modified.
|
||||
|
||||
## 0.7.11
|
||||
Sat, 11 Oct 2025 17:58:53 GMT
|
||||
|
||||
### Patches
|
||||
|
||||
- Fix eslint deps
|
||||
|
||||
## 0.7.10
|
||||
Fri, 10 Oct 2025 12:32:59 GMT
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@hcengineering/measurements",
|
||||
"version": "0.7.10",
|
||||
"version": "0.7.11",
|
||||
"main": "lib/index.js",
|
||||
"svelte": "src/index.ts",
|
||||
"types": "types/index.d.ts",
|
||||
@@ -27,10 +27,18 @@
|
||||
"_phase:validate": "compile validate"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@hcengineering/platform-rig": "workspace:^0.7.12",
|
||||
"@hcengineering/platform-rig": "workspace:^0.7.13",
|
||||
"jest": "^29.7.0",
|
||||
"ts-jest": "^29.1.1",
|
||||
"@types/jest": "^29.5.5"
|
||||
"@types/jest": "^29.5.5",
|
||||
"@typescript-eslint/eslint-plugin": "^8.46.0",
|
||||
"@typescript-eslint/parser": "^8.46.0",
|
||||
"eslint": "^8.54.0",
|
||||
"eslint-config-standard-with-typescript": "^40.0.0",
|
||||
"eslint-plugin-import": "^2.26.0",
|
||||
"eslint-plugin-node": "^11.1.0",
|
||||
"eslint-plugin-promise": "^6.1.1",
|
||||
"eslint-plugin-n": "^15.4.0"
|
||||
},
|
||||
"repository": "https://github.com/hcengineering/platform",
|
||||
"exports": {
|
||||
|
||||
@@ -16,7 +16,7 @@ describe('context', () => {
|
||||
describe('consoleLogger', () => {
|
||||
it('should create a logger with params', () => {
|
||||
const logger = consoleLogger({ service: 'test' })
|
||||
|
||||
|
||||
expect(logger).toBeDefined()
|
||||
expect(typeof logger.info).toBe('function')
|
||||
expect(typeof logger.error).toBe('function')
|
||||
@@ -27,9 +27,9 @@ describe('context', () => {
|
||||
it('should log info messages', () => {
|
||||
const consoleSpy = jest.spyOn(console, 'info').mockImplementation()
|
||||
const logger = consoleLogger({ service: 'test' })
|
||||
|
||||
|
||||
logger.info('Test message', { key: 'value' })
|
||||
|
||||
|
||||
expect(consoleSpy).toHaveBeenCalled()
|
||||
consoleSpy.mockRestore()
|
||||
})
|
||||
@@ -37,9 +37,9 @@ describe('context', () => {
|
||||
it('should log error messages', () => {
|
||||
const consoleSpy = jest.spyOn(console, 'error').mockImplementation()
|
||||
const logger = consoleLogger({ service: 'test' })
|
||||
|
||||
|
||||
logger.error('Error message', { error: 'details' })
|
||||
|
||||
|
||||
expect(consoleSpy).toHaveBeenCalled()
|
||||
consoleSpy.mockRestore()
|
||||
})
|
||||
@@ -47,9 +47,9 @@ describe('context', () => {
|
||||
it('should log warn messages', () => {
|
||||
const consoleSpy = jest.spyOn(console, 'warn').mockImplementation()
|
||||
const logger = consoleLogger({ service: 'test' })
|
||||
|
||||
|
||||
logger.warn('Warning message', { warning: 'info' })
|
||||
|
||||
|
||||
expect(consoleSpy).toHaveBeenCalled()
|
||||
consoleSpy.mockRestore()
|
||||
})
|
||||
@@ -58,9 +58,9 @@ describe('context', () => {
|
||||
const consoleSpy = jest.spyOn(console, 'error').mockImplementation()
|
||||
const logger = consoleLogger({})
|
||||
const error = new Error('Test error')
|
||||
|
||||
|
||||
logger.error('Error occurred', { error })
|
||||
|
||||
|
||||
expect(consoleSpy).toHaveBeenCalled()
|
||||
const call = consoleSpy.mock.calls[0]
|
||||
expect(call[0]).toBe('Error occurred')
|
||||
@@ -78,7 +78,7 @@ describe('context', () => {
|
||||
it('should create a new context', () => {
|
||||
const metrics = newMetrics()
|
||||
const ctx = new MeasureMetricsContext('test', { op: 'create' }, {}, metrics, logger)
|
||||
|
||||
|
||||
expect(ctx).toBeDefined()
|
||||
expect(ctx.metrics).toBe(metrics)
|
||||
expect(ctx.logger).toBe(logger)
|
||||
@@ -87,10 +87,10 @@ describe('context', () => {
|
||||
it('should measure operation duration', async () => {
|
||||
const metrics = newMetrics()
|
||||
const ctx = new MeasureMetricsContext('test', { op: 'create' }, {}, metrics, logger)
|
||||
|
||||
await new Promise(resolve => setTimeout(resolve, 50))
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 50))
|
||||
ctx.end()
|
||||
|
||||
|
||||
expect(metrics.operations).toBe(1)
|
||||
expect(metrics.value).toBeGreaterThan(40)
|
||||
})
|
||||
@@ -99,7 +99,7 @@ describe('context', () => {
|
||||
const metrics = newMetrics()
|
||||
const ctx = new MeasureMetricsContext('parent', { op: 'parent' }, {}, metrics, logger)
|
||||
const child = ctx.newChild('child', { op: 'child' })
|
||||
|
||||
|
||||
expect(child).toBeDefined()
|
||||
expect(child.parent).toBe(ctx)
|
||||
})
|
||||
@@ -107,13 +107,13 @@ describe('context', () => {
|
||||
it('should execute async operation with context', async () => {
|
||||
const metrics = newMetrics()
|
||||
const ctx = new MeasureMetricsContext('test', {}, {}, metrics, logger)
|
||||
|
||||
|
||||
let executed = false
|
||||
await ctx.with('operation', { op: 'test' }, async () => {
|
||||
executed = true
|
||||
await new Promise(resolve => setTimeout(resolve, 10))
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
})
|
||||
|
||||
|
||||
expect(executed).toBe(true)
|
||||
expect(metrics.measurements.operation).toBeDefined()
|
||||
})
|
||||
@@ -121,11 +121,11 @@ describe('context', () => {
|
||||
it('should execute sync operation with context', () => {
|
||||
const metrics = newMetrics()
|
||||
const ctx = new MeasureMetricsContext('test', {}, {}, metrics, logger)
|
||||
|
||||
|
||||
const result = ctx.withSync('operation', { op: 'test' }, () => {
|
||||
return 42
|
||||
})
|
||||
|
||||
|
||||
expect(result).toBe(42)
|
||||
expect(metrics.measurements.operation).toBeDefined()
|
||||
})
|
||||
@@ -133,9 +133,9 @@ describe('context', () => {
|
||||
it('should measure custom value', () => {
|
||||
const metrics = newMetrics()
|
||||
const ctx = new MeasureMetricsContext('test', {}, {}, metrics, logger)
|
||||
|
||||
|
||||
ctx.measure('custom', 100)
|
||||
|
||||
|
||||
expect(metrics.measurements['#custom']).toBeDefined()
|
||||
expect(metrics.measurements['#custom'].value).toBe(100)
|
||||
})
|
||||
@@ -148,11 +148,14 @@ describe('context', () => {
|
||||
close: jest.fn(async () => {}),
|
||||
logOperation: jest.fn()
|
||||
}
|
||||
|
||||
|
||||
const ctx = new MeasureMetricsContext('test', { op: 'test' }, {}, newMetrics(), mockLogger)
|
||||
ctx.info('Test message', { key: 'value' })
|
||||
|
||||
expect(mockLogger.info).toHaveBeenCalledWith('Test message', expect.objectContaining({ key: 'value', op: 'test' }))
|
||||
|
||||
expect(mockLogger.info).toHaveBeenCalledWith(
|
||||
'Test message',
|
||||
expect.objectContaining({ key: 'value', op: 'test' })
|
||||
)
|
||||
})
|
||||
|
||||
it('should log error messages', () => {
|
||||
@@ -163,11 +166,14 @@ describe('context', () => {
|
||||
close: jest.fn(async () => {}),
|
||||
logOperation: jest.fn()
|
||||
}
|
||||
|
||||
|
||||
const ctx = new MeasureMetricsContext('test', { op: 'test' }, {}, newMetrics(), mockLogger)
|
||||
ctx.error('Error message', { error: 'details' })
|
||||
|
||||
expect(mockLogger.error).toHaveBeenCalledWith('Error message', expect.objectContaining({ error: 'details', op: 'test' }))
|
||||
|
||||
expect(mockLogger.error).toHaveBeenCalledWith(
|
||||
'Error message',
|
||||
expect.objectContaining({ error: 'details', op: 'test' })
|
||||
)
|
||||
})
|
||||
|
||||
it('should log warn messages', () => {
|
||||
@@ -178,17 +184,20 @@ describe('context', () => {
|
||||
close: jest.fn(async () => {}),
|
||||
logOperation: jest.fn()
|
||||
}
|
||||
|
||||
|
||||
const ctx = new MeasureMetricsContext('test', { op: 'test' }, {}, newMetrics(), mockLogger)
|
||||
ctx.warn('Warning message', { warning: 'info' })
|
||||
|
||||
expect(mockLogger.warn).toHaveBeenCalledWith('Warning message', expect.objectContaining({ warning: 'info', op: 'test' }))
|
||||
|
||||
expect(mockLogger.warn).toHaveBeenCalledWith(
|
||||
'Warning message',
|
||||
expect.objectContaining({ warning: 'info', op: 'test' })
|
||||
)
|
||||
})
|
||||
|
||||
it('should get params', () => {
|
||||
const ctx = new MeasureMetricsContext('test', { op: 'test', method: 'GET' }, {}, newMetrics(), logger)
|
||||
const params = ctx.getParams()
|
||||
|
||||
|
||||
expect(params).toEqual({ op: 'test', method: 'GET' })
|
||||
})
|
||||
|
||||
@@ -196,28 +205,29 @@ describe('context', () => {
|
||||
const metrics = newMetrics()
|
||||
const ctx = new MeasureMetricsContext('parent', {}, {}, metrics, logger)
|
||||
ctx.contextData = { userId: '123' }
|
||||
|
||||
|
||||
const child = ctx.newChild('child', {})
|
||||
|
||||
|
||||
expect(child.contextData).toBe(ctx.contextData)
|
||||
})
|
||||
|
||||
it('should handle named parameters', () => {
|
||||
const metrics = newMetrics()
|
||||
new MeasureMetricsContext('test', { method: 'GET' }, {}, metrics, logger)
|
||||
|
||||
const r = new MeasureMetricsContext('test', { method: 'GET' }, {}, metrics, logger)
|
||||
expect(r).toBeNull()
|
||||
expect(metrics.namedParams.method).toBe('GET')
|
||||
})
|
||||
|
||||
it('should update named parameters on multiple contexts', () => {
|
||||
const metrics = newMetrics()
|
||||
const ctx1 = new MeasureMetricsContext('test1', { method: 'GET' }, {}, metrics, logger)
|
||||
|
||||
expect(ctx1).toBeNull()
|
||||
expect(metrics.namedParams.method).toBe('GET')
|
||||
|
||||
|
||||
// Create another context with different value for same param
|
||||
const ctx2 = new MeasureMetricsContext('test2', { method: 'POST' }, {}, metrics, logger)
|
||||
|
||||
expect(ctx2).toBeNull()
|
||||
|
||||
// The second context will see existing value is different, so it will update to '*'
|
||||
// But this happens within the constructor logic
|
||||
expect(metrics.namedParams.method).toBe('POST')
|
||||
@@ -227,33 +237,33 @@ describe('context', () => {
|
||||
describe('NoMetricsContext', () => {
|
||||
it('should create a no-op context', () => {
|
||||
const ctx = new NoMetricsContext()
|
||||
|
||||
|
||||
expect(ctx).toBeDefined()
|
||||
expect(ctx.logger).toBeDefined()
|
||||
})
|
||||
|
||||
it('should execute operations without measuring', async () => {
|
||||
const ctx = new NoMetricsContext()
|
||||
|
||||
|
||||
let executed = false
|
||||
await ctx.with('operation', {}, async () => {
|
||||
executed = true
|
||||
})
|
||||
|
||||
|
||||
expect(executed).toBe(true)
|
||||
})
|
||||
|
||||
it('should create child contexts', () => {
|
||||
const ctx = new NoMetricsContext()
|
||||
const child = ctx.newChild('child', {})
|
||||
|
||||
|
||||
expect(child).toBeDefined()
|
||||
expect(child).toBeInstanceOf(NoMetricsContext)
|
||||
})
|
||||
|
||||
it('should handle measure calls without error', () => {
|
||||
const ctx = new NoMetricsContext()
|
||||
|
||||
|
||||
expect(() => {
|
||||
ctx.measure('test', 100)
|
||||
}).not.toThrow()
|
||||
@@ -261,7 +271,7 @@ describe('context', () => {
|
||||
|
||||
it('should handle end calls without error', () => {
|
||||
const ctx = new NoMetricsContext()
|
||||
|
||||
|
||||
expect(() => {
|
||||
ctx.end()
|
||||
}).not.toThrow()
|
||||
@@ -270,7 +280,7 @@ describe('context', () => {
|
||||
it('should return empty params', () => {
|
||||
const ctx = new NoMetricsContext()
|
||||
const params = ctx.getParams()
|
||||
|
||||
|
||||
expect(params).toEqual({})
|
||||
})
|
||||
})
|
||||
@@ -279,17 +289,17 @@ describe('context', () => {
|
||||
it('should wrap method with context', async () => {
|
||||
class TestClass {
|
||||
@withContext('testOperation', { service: 'test' })
|
||||
async testMethod(ctx: MeasureContext, value: number): Promise<number> {
|
||||
async testMethod (ctx: MeasureContext, value: number): Promise<number> {
|
||||
return value * 2
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const instance = new TestClass()
|
||||
const metrics = newMetrics()
|
||||
const ctx = new MeasureMetricsContext('root', {}, {}, metrics, noParamsLogger)
|
||||
|
||||
|
||||
const result = await instance.testMethod(ctx, 21)
|
||||
|
||||
|
||||
expect(result).toBe(42)
|
||||
expect(metrics.measurements.testOperation).toBeDefined()
|
||||
})
|
||||
@@ -308,9 +318,9 @@ describe('context', () => {
|
||||
setOperationLogProfiling(true)
|
||||
const metrics = newMetrics()
|
||||
const ctx = new MeasureMetricsContext('test', {}, {}, metrics, noParamsLogger)
|
||||
|
||||
|
||||
const { opLogMetrics, op } = registerOperationLog(ctx)
|
||||
|
||||
|
||||
expect(opLogMetrics).toBe(metrics)
|
||||
expect(op).toBeDefined()
|
||||
expect(ctx.id).toBeDefined()
|
||||
@@ -320,9 +330,9 @@ describe('context', () => {
|
||||
setOperationLogProfiling(false)
|
||||
const metrics = newMetrics()
|
||||
const ctx = new MeasureMetricsContext('test', {}, {}, metrics, noParamsLogger)
|
||||
|
||||
|
||||
const { opLogMetrics, op } = registerOperationLog(ctx)
|
||||
|
||||
|
||||
expect(opLogMetrics).toBeUndefined()
|
||||
expect(op).toBeUndefined()
|
||||
})
|
||||
@@ -331,10 +341,10 @@ describe('context', () => {
|
||||
setOperationLogProfiling(true)
|
||||
const metrics = newMetrics()
|
||||
const ctx = new MeasureMetricsContext('test', {}, {}, metrics, noParamsLogger)
|
||||
|
||||
|
||||
const { opLogMetrics, op } = registerOperationLog(ctx)
|
||||
updateOperationLog(opLogMetrics, op)
|
||||
|
||||
|
||||
expect(op?.end).toBeGreaterThan(0)
|
||||
})
|
||||
|
||||
@@ -342,14 +352,14 @@ describe('context', () => {
|
||||
setOperationLogProfiling(true)
|
||||
const metrics = newMetrics()
|
||||
const ctx = new MeasureMetricsContext('test', {}, {}, metrics, noParamsLogger)
|
||||
|
||||
|
||||
registerOperationLog(ctx)
|
||||
|
||||
|
||||
let executed = false
|
||||
await addOperation(ctx, 'asyncOp', { op: 'test' }, async () => {
|
||||
executed = true
|
||||
})
|
||||
|
||||
|
||||
expect(executed).toBe(true)
|
||||
expect(metrics.opLog).toBeDefined()
|
||||
})
|
||||
@@ -358,11 +368,11 @@ describe('context', () => {
|
||||
setOperationLogProfiling(true)
|
||||
const metrics = newMetrics()
|
||||
const ctx = new MeasureMetricsContext('test', {}, {}, metrics, noParamsLogger)
|
||||
|
||||
|
||||
registerOperationLog(ctx)
|
||||
|
||||
|
||||
// Create many operation log entries
|
||||
if (metrics.opLog && ctx.id) {
|
||||
if (metrics.opLog != null && ctx.id != null) {
|
||||
for (let i = 0; i < 50; i++) {
|
||||
metrics.opLog[ctx.id].ops.push({
|
||||
op: `test${i}`,
|
||||
@@ -371,10 +381,10 @@ describe('context', () => {
|
||||
params: {}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
const op = metrics.opLog[ctx.id]
|
||||
updateOperationLog(metrics, op)
|
||||
|
||||
|
||||
expect(Object.keys(metrics.opLog).length).toBeLessThanOrEqual(31)
|
||||
}
|
||||
})
|
||||
@@ -384,7 +394,7 @@ describe('context', () => {
|
||||
it('should return empty metadata', () => {
|
||||
const ctx = new MeasureMetricsContext('test', {}, {}, newMetrics(), noParamsLogger)
|
||||
const meta = ctx.extractMeta()
|
||||
|
||||
|
||||
expect(meta).toEqual({})
|
||||
})
|
||||
})
|
||||
@@ -393,35 +403,35 @@ describe('context', () => {
|
||||
it('should handle promise rejection', async () => {
|
||||
const metrics = newMetrics()
|
||||
const ctx = new MeasureMetricsContext('test', {}, {}, metrics, noParamsLogger)
|
||||
|
||||
|
||||
await expect(
|
||||
ctx.with('operation', { op: 'test' }, async () => {
|
||||
throw new Error('Test error')
|
||||
})
|
||||
).rejects.toThrow('Test error')
|
||||
|
||||
|
||||
expect(metrics.measurements.operation).toBeDefined()
|
||||
})
|
||||
|
||||
it('should return null promise for null sync result', async () => {
|
||||
const metrics = newMetrics()
|
||||
const ctx = new MeasureMetricsContext('test', {}, {}, metrics, noParamsLogger)
|
||||
|
||||
|
||||
const result = await ctx.with('operation', { op: 'test' }, () => {
|
||||
return null
|
||||
})
|
||||
|
||||
|
||||
expect(result).toBeUndefined()
|
||||
})
|
||||
|
||||
it('should handle sync return value', async () => {
|
||||
const metrics = newMetrics()
|
||||
const ctx = new MeasureMetricsContext('test', {}, {}, metrics, noParamsLogger)
|
||||
|
||||
|
||||
const result = await ctx.with('operation', { op: 'test' }, () => {
|
||||
return 42
|
||||
})
|
||||
|
||||
|
||||
expect(result).toBe(42)
|
||||
})
|
||||
|
||||
@@ -433,14 +443,20 @@ describe('context', () => {
|
||||
close: jest.fn(async () => {}),
|
||||
logOperation: jest.fn()
|
||||
}
|
||||
|
||||
|
||||
const metrics = newMetrics()
|
||||
const ctx = new MeasureMetricsContext('test', {}, {}, metrics, mockLogger)
|
||||
|
||||
await ctx.with('operation', { op: 'test' }, async () => {
|
||||
await new Promise(resolve => setTimeout(resolve, 10))
|
||||
}, {}, { log: true })
|
||||
|
||||
|
||||
await ctx.with(
|
||||
'operation',
|
||||
{ op: 'test' },
|
||||
async () => {
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
},
|
||||
{},
|
||||
{ log: true }
|
||||
)
|
||||
|
||||
expect(mockLogger.logOperation).toHaveBeenCalledWith(
|
||||
'operation',
|
||||
expect.any(Number),
|
||||
|
||||
@@ -10,7 +10,7 @@ describe('index', () => {
|
||||
|
||||
it('should return increasing values over time', async () => {
|
||||
const first = platformNow()
|
||||
await new Promise(resolve => setTimeout(resolve, 10))
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
const second = platformNow()
|
||||
expect(second).toBeGreaterThan(first)
|
||||
})
|
||||
@@ -19,27 +19,27 @@ describe('index', () => {
|
||||
describe('platformNowDiff', () => {
|
||||
it('should calculate the difference between timestamps', async () => {
|
||||
const start = platformNow()
|
||||
await new Promise(resolve => setTimeout(resolve, 50))
|
||||
await new Promise((resolve) => setTimeout(resolve, 50))
|
||||
const diff = platformNowDiff(start)
|
||||
|
||||
|
||||
expect(diff).toBeGreaterThan(40)
|
||||
expect(diff).toBeLessThan(100)
|
||||
})
|
||||
|
||||
it('should round to 2 decimal places', async () => {
|
||||
const start = platformNow()
|
||||
await new Promise(resolve => setTimeout(resolve, 10))
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
const diff = platformNowDiff(start)
|
||||
|
||||
|
||||
// Check that it has at most 2 decimal places
|
||||
const decimalPlaces = (diff.toString().split('.')[1] || '').length
|
||||
const decimalPlaces = (diff.toString().split('.')[1] ?? '').length
|
||||
expect(decimalPlaces).toBeLessThanOrEqual(2)
|
||||
})
|
||||
|
||||
it('should handle very small differences', () => {
|
||||
const start = platformNow()
|
||||
const diff = platformNowDiff(start)
|
||||
|
||||
|
||||
expect(diff).toBeGreaterThanOrEqual(0)
|
||||
expect(typeof diff).toBe('number')
|
||||
})
|
||||
|
||||
@@ -14,7 +14,7 @@ describe('metrics', () => {
|
||||
describe('newMetrics', () => {
|
||||
it('should create a new metrics object with default values', () => {
|
||||
const metrics = newMetrics()
|
||||
|
||||
|
||||
expect(metrics.operations).toBe(0)
|
||||
expect(metrics.value).toBe(0)
|
||||
expect(metrics.measurements).toEqual({})
|
||||
@@ -27,10 +27,10 @@ describe('metrics', () => {
|
||||
it('should measure operation duration', async () => {
|
||||
const metrics = newMetrics()
|
||||
const done = measure(metrics, { operation: 'test' })
|
||||
|
||||
await new Promise(resolve => setTimeout(resolve, 50))
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 50))
|
||||
done()
|
||||
|
||||
|
||||
expect(metrics.operations).toBe(1)
|
||||
expect(metrics.value).toBeGreaterThan(40)
|
||||
})
|
||||
@@ -41,24 +41,24 @@ describe('metrics', () => {
|
||||
const done = measure(metrics, { operation: 'test' }, {}, (spend) => {
|
||||
capturedSpend = spend
|
||||
})
|
||||
|
||||
await new Promise(resolve => setTimeout(resolve, 50))
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 50))
|
||||
done()
|
||||
|
||||
|
||||
expect(capturedSpend).toBeGreaterThan(40)
|
||||
})
|
||||
|
||||
it('should handle multiple operations', async () => {
|
||||
const metrics = newMetrics()
|
||||
|
||||
|
||||
const done1 = measure(metrics, { operation: 'test' })
|
||||
await new Promise(resolve => setTimeout(resolve, 20))
|
||||
await new Promise((resolve) => setTimeout(resolve, 20))
|
||||
done1()
|
||||
|
||||
|
||||
const done2 = measure(metrics, { operation: 'test' })
|
||||
await new Promise(resolve => setTimeout(resolve, 20))
|
||||
await new Promise((resolve) => setTimeout(resolve, 20))
|
||||
done2()
|
||||
|
||||
|
||||
expect(metrics.operations).toBe(2)
|
||||
expect(metrics.value).toBeGreaterThan(30)
|
||||
})
|
||||
@@ -68,9 +68,9 @@ describe('metrics', () => {
|
||||
it('should update metrics with custom value', () => {
|
||||
const metrics = newMetrics()
|
||||
const st = platformNow()
|
||||
|
||||
|
||||
updateMeasure(metrics, st, { op: 'test' }, {}, undefined, 100)
|
||||
|
||||
|
||||
expect(metrics.operations).toBe(1)
|
||||
expect(metrics.value).toBe(100)
|
||||
})
|
||||
@@ -78,15 +78,15 @@ describe('metrics', () => {
|
||||
it('should override operations when override is true', () => {
|
||||
const metrics = newMetrics()
|
||||
const st = platformNow()
|
||||
|
||||
|
||||
// First call without override - accumulates value and increments operations
|
||||
updateMeasure(metrics, st, { op: 'test' }, {}, undefined, 50, false)
|
||||
expect(metrics.value).toBe(50)
|
||||
expect(metrics.operations).toBe(1)
|
||||
|
||||
|
||||
// Second call with override - sets operations, doesn't add to value
|
||||
updateMeasure(metrics, st, { op: 'test' }, {}, undefined, 100, true)
|
||||
|
||||
|
||||
expect(metrics.operations).toBe(100) // overridden
|
||||
expect(metrics.value).toBe(50) // not changed when override=true
|
||||
})
|
||||
@@ -94,10 +94,10 @@ describe('metrics', () => {
|
||||
it('should track parameters', () => {
|
||||
const metrics = newMetrics()
|
||||
const st = platformNow()
|
||||
|
||||
|
||||
updateMeasure(metrics, st, { method: 'GET' }, {}, undefined, 100)
|
||||
updateMeasure(metrics, st, { method: 'POST' }, {}, undefined, 200)
|
||||
|
||||
|
||||
expect(metrics.params.method).toBeDefined()
|
||||
expect(metrics.params.method.GET).toBeDefined()
|
||||
expect(metrics.params.method.POST).toBeDefined()
|
||||
@@ -108,10 +108,10 @@ describe('metrics', () => {
|
||||
it('should handle multiple parameters as counters', () => {
|
||||
const metrics = newMetrics()
|
||||
const st = platformNow()
|
||||
|
||||
|
||||
updateMeasure(metrics, st, { method: 'GET', status: '200' }, {}, undefined, 100)
|
||||
updateMeasure(metrics, st, { method: 'GET', status: '404' }, {}, undefined, 50)
|
||||
|
||||
|
||||
expect(metrics.params.method.GET).toBeDefined()
|
||||
expect(metrics.params.method.GET.topResult).toBeDefined()
|
||||
expect(metrics.params.method.GET.topResult?.length).toBeGreaterThan(0)
|
||||
@@ -120,10 +120,10 @@ describe('metrics', () => {
|
||||
it('should update top results', () => {
|
||||
const metrics = newMetrics()
|
||||
const st = platformNow()
|
||||
|
||||
|
||||
updateMeasure(metrics, st, {}, { request: 'slow' }, undefined, 100)
|
||||
updateMeasure(metrics, st, {}, { request: 'fast' }, undefined, 10)
|
||||
|
||||
|
||||
expect(metrics.topResult).toBeDefined()
|
||||
expect(metrics.topResult?.length).toBeGreaterThan(0)
|
||||
})
|
||||
@@ -133,7 +133,7 @@ describe('metrics', () => {
|
||||
it('should create child metrics in hierarchy', () => {
|
||||
const root = newMetrics()
|
||||
const child = childMetrics(root, ['level1', 'level2'])
|
||||
|
||||
|
||||
expect(root.measurements.level1).toBeDefined()
|
||||
expect(root.measurements.level1.measurements.level2).toBeDefined()
|
||||
expect(child).toBe(root.measurements.level1.measurements.level2)
|
||||
@@ -143,14 +143,14 @@ describe('metrics', () => {
|
||||
const root = newMetrics()
|
||||
const child1 = childMetrics(root, ['level1'])
|
||||
const child2 = childMetrics(root, ['level1'])
|
||||
|
||||
|
||||
expect(child1).toBe(child2)
|
||||
})
|
||||
|
||||
it('should create nested paths', () => {
|
||||
const root = newMetrics()
|
||||
childMetrics(root, ['api', 'users', 'create'])
|
||||
|
||||
|
||||
expect(root.measurements.api).toBeDefined()
|
||||
expect(root.measurements.api.measurements.users).toBeDefined()
|
||||
expect(root.measurements.api.measurements.users.measurements.create).toBeDefined()
|
||||
@@ -162,45 +162,45 @@ describe('metrics', () => {
|
||||
const metrics = newMetrics()
|
||||
metrics.value = 100
|
||||
metrics.operations = 10
|
||||
|
||||
|
||||
const child1 = childMetrics(metrics, ['child1'])
|
||||
child1.value = 50
|
||||
child1.operations = 5
|
||||
|
||||
|
||||
const child2 = childMetrics(metrics, ['child2'])
|
||||
child2.value = 30
|
||||
child2.operations = 3
|
||||
|
||||
|
||||
const aggregated = metricsAggregate(metrics)
|
||||
|
||||
|
||||
expect(aggregated.value).toBe(80) // child1 + child2
|
||||
expect(aggregated.operations).toBe(10)
|
||||
})
|
||||
|
||||
it('should limit number of child metrics', () => {
|
||||
const metrics = newMetrics()
|
||||
|
||||
|
||||
for (let i = 0; i < 10; i++) {
|
||||
const child = childMetrics(metrics, [`child${i}`])
|
||||
child.value = i * 10
|
||||
}
|
||||
|
||||
|
||||
const aggregated = metricsAggregate(metrics, 3)
|
||||
|
||||
|
||||
expect(Object.keys(aggregated.measurements).length).toBe(3)
|
||||
})
|
||||
|
||||
it('should filter out metrics starting with #', () => {
|
||||
const metrics = newMetrics()
|
||||
|
||||
|
||||
const child1 = childMetrics(metrics, ['normal'])
|
||||
child1.value = 50
|
||||
|
||||
|
||||
const child2 = childMetrics(metrics, ['#internal'])
|
||||
child2.value = 30
|
||||
|
||||
|
||||
const aggregated = metricsAggregate(metrics)
|
||||
|
||||
|
||||
expect(aggregated.value).toBe(50) // only 'normal' counted
|
||||
})
|
||||
})
|
||||
@@ -210,9 +210,9 @@ describe('metrics', () => {
|
||||
const metrics = newMetrics()
|
||||
metrics.value = 100
|
||||
metrics.operations = 10
|
||||
|
||||
|
||||
const str = metricsToString(metrics, 'TestMetrics', 50)
|
||||
|
||||
|
||||
expect(str).toContain('TestMetrics')
|
||||
expect(str).toContain('100')
|
||||
expect(str).toContain('10')
|
||||
@@ -223,9 +223,9 @@ describe('metrics', () => {
|
||||
const child = childMetrics(metrics, ['operation'])
|
||||
child.value = 50
|
||||
child.operations = 5
|
||||
|
||||
|
||||
const str = metricsToString(metrics, 'TestMetrics', 50)
|
||||
|
||||
|
||||
expect(str).toContain('operation')
|
||||
})
|
||||
})
|
||||
@@ -235,9 +235,9 @@ describe('metrics', () => {
|
||||
const metrics = newMetrics()
|
||||
metrics.value = 100
|
||||
metrics.operations = 10
|
||||
|
||||
|
||||
const json = metricsToJson(metrics)
|
||||
|
||||
|
||||
// aggregated value is the total value when no children
|
||||
expect(json.$total).toBe(100)
|
||||
expect(json.$ops).toBe(10)
|
||||
@@ -248,12 +248,12 @@ describe('metrics', () => {
|
||||
const child = childMetrics(metrics, ['operation'])
|
||||
child.value = 50
|
||||
child.operations = 5
|
||||
|
||||
|
||||
const json = metricsToJson(metrics)
|
||||
|
||||
|
||||
expect(json).toBeDefined()
|
||||
const keys = Object.keys(json)
|
||||
expect(keys.some(k => k.includes('operation'))).toBe(true)
|
||||
expect(keys.some((k) => k.includes('operation'))).toBe(true)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -262,9 +262,9 @@ describe('metrics', () => {
|
||||
const metrics = newMetrics()
|
||||
metrics.value = 100
|
||||
metrics.operations = 10
|
||||
|
||||
|
||||
const rows = metricsToRows(metrics, 'TestMetrics')
|
||||
|
||||
|
||||
expect(Array.isArray(rows)).toBe(true)
|
||||
expect(rows.length).toBeGreaterThan(0)
|
||||
expect(rows[0]).toContain('TestMetrics')
|
||||
@@ -275,20 +275,20 @@ describe('metrics', () => {
|
||||
const child = childMetrics(metrics, ['operation'])
|
||||
child.value = 50
|
||||
child.operations = 5
|
||||
|
||||
|
||||
const rows = metricsToRows(metrics, 'TestMetrics')
|
||||
|
||||
|
||||
expect(rows.length).toBeGreaterThan(1)
|
||||
expect(rows.some(row => row.includes('operation'))).toBe(true)
|
||||
expect(rows.some((row) => row.includes('operation'))).toBe(true)
|
||||
})
|
||||
|
||||
it('should properly format row values', () => {
|
||||
const metrics = newMetrics()
|
||||
metrics.value = 100
|
||||
metrics.operations = 10
|
||||
|
||||
|
||||
const rows = metricsToRows(metrics, 'TestMetrics')
|
||||
|
||||
|
||||
expect(rows[0]).toHaveLength(5) // offset, name, avg, total, ops
|
||||
expect(typeof rows[0][0]).toBe('number') // offset
|
||||
expect(typeof rows[0][1]).toBe('string') // name
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import { MeasureMetricsContext, NoMetricsContext } from '../context'
|
||||
import { MeasureMetricsContext, NoMetricsContext, noParamsLogger } from '../context'
|
||||
import { newMetrics, metricsAggregate } from '../metrics'
|
||||
import { noParamsLogger } from '../context'
|
||||
import type { MeasureContext } from '../types'
|
||||
|
||||
describe('performance', () => {
|
||||
@@ -20,7 +19,7 @@ describe('performance', () => {
|
||||
// With measurement context
|
||||
const metrics = newMetrics()
|
||||
const ctx = new MeasureMetricsContext('root', {}, {}, metrics, noParamsLogger)
|
||||
|
||||
|
||||
const measuredStart = performance.now()
|
||||
for (let i = 0; i < iterations; i++) {
|
||||
await ctx.with('operation', { iteration: i }, async () => {
|
||||
@@ -40,7 +39,7 @@ describe('performance', () => {
|
||||
|
||||
expect(metrics.measurements.operation).toBeDefined()
|
||||
expect(metrics.measurements.operation.operations).toBe(iterations)
|
||||
|
||||
|
||||
// Overhead should be reasonable (typically < 50% for simple operations)
|
||||
// This is informational rather than a strict assertion
|
||||
expect(overheadPercentage).toBeLessThan(200)
|
||||
@@ -95,12 +94,13 @@ describe('performance', () => {
|
||||
// Complex params with multiple tracked values
|
||||
const complexStart = performance.now()
|
||||
for (let i = 0; i < iterations; i++) {
|
||||
await ctx.with('complex',
|
||||
{
|
||||
await ctx.with(
|
||||
'complex',
|
||||
{
|
||||
method: i % 3 === 0 ? 'GET' : i % 3 === 1 ? 'POST' : 'PUT',
|
||||
status: i % 2 === 0 ? 200 : 404,
|
||||
cached: i % 4 === 0
|
||||
},
|
||||
},
|
||||
async () => {
|
||||
await simulateWork(1)
|
||||
},
|
||||
@@ -165,7 +165,7 @@ describe('performance', () => {
|
||||
|
||||
const requests = 50
|
||||
const baselineStart = performance.now()
|
||||
|
||||
|
||||
// Simulate without metrics
|
||||
for (let i = 0; i < requests; i++) {
|
||||
await simulateAPIRequest(null, i)
|
||||
@@ -174,7 +174,7 @@ describe('performance', () => {
|
||||
|
||||
// Reset for measured run
|
||||
const measuredStart = performance.now()
|
||||
|
||||
|
||||
// Simulate with metrics
|
||||
for (let i = 0; i < requests; i++) {
|
||||
await simulateAPIRequest(ctx, i)
|
||||
@@ -189,10 +189,10 @@ describe('performance', () => {
|
||||
console.log(` With metrics: ${measuredTime.toFixed(2)}ms`)
|
||||
console.log(` Overhead: ${overhead.toFixed(2)}ms (${overheadPercentage.toFixed(2)}%)`)
|
||||
console.log(` Per request: ${(overhead / requests).toFixed(4)}ms`)
|
||||
|
||||
|
||||
// Check metrics structure
|
||||
const aggregated = metricsAggregate(metrics, 10)
|
||||
console.log(` Collected operations: ${aggregated.measurements.request?.operations || 0}`)
|
||||
console.log(` Collected operations: ${aggregated.measurements.request?.operations ?? 0}`)
|
||||
|
||||
expect(aggregated.measurements.request).toBeDefined()
|
||||
expect(overheadPercentage).toBeLessThan(100) // Should be less than 100% overhead
|
||||
@@ -202,15 +202,16 @@ describe('performance', () => {
|
||||
|
||||
// Helper functions
|
||||
|
||||
async function simulateWork(durationMs: number): Promise<void> {
|
||||
async function simulateWork (durationMs: number): Promise<void> {
|
||||
const end = performance.now() + durationMs
|
||||
while (performance.now() < end) {
|
||||
// Busy wait to simulate work
|
||||
Math.random() * Math.random()
|
||||
const r = Math.random() * Math.random()
|
||||
expect(r).toBeGreaterThanOrEqual(0)
|
||||
}
|
||||
}
|
||||
|
||||
async function deepNestedExecution(
|
||||
async function deepNestedExecution (
|
||||
ctx: MeasureContext,
|
||||
depth: number,
|
||||
workMs: number,
|
||||
@@ -226,10 +227,10 @@ async function deepNestedExecution(
|
||||
})
|
||||
}
|
||||
|
||||
async function simulateAPIRequest(ctx: MeasureContext | null, requestId: number): Promise<void> {
|
||||
async function simulateAPIRequest (ctx: MeasureContext | null, requestId: number): Promise<void> {
|
||||
const method = ['GET', 'POST', 'PUT'][requestId % 3]
|
||||
const endpoint = `/api/resource/${requestId % 10}`
|
||||
|
||||
|
||||
if (ctx === null) {
|
||||
// No metrics version
|
||||
await simulateWork(1)
|
||||
@@ -256,4 +257,4 @@ async function simulateAPIRequest(ctx: MeasureContext | null, requestId: number)
|
||||
await simulateWork(1)
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
export * from './context'
|
||||
export * from './metrics'
|
||||
export * from './types'
|
||||
export type * from './types'
|
||||
|
||||
/**
|
||||
* Return a current performance timestamp
|
||||
|
||||
@@ -1,6 +1,18 @@
|
||||
{
|
||||
"name": "@hcengineering/platform-rig",
|
||||
"entries": [
|
||||
{
|
||||
"version": "0.7.13",
|
||||
"tag": "@hcengineering/platform-rig_v0.7.13",
|
||||
"date": "Sat, 11 Oct 2025 17:58:53 GMT",
|
||||
"comments": {
|
||||
"patch": [
|
||||
{
|
||||
"comment": "Script to sync eslint deps"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "0.7.12",
|
||||
"tag": "@hcengineering/platform-rig_v0.7.12",
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
# Change Log - @hcengineering/platform-rig
|
||||
|
||||
This log was last generated on Fri, 10 Oct 2025 14:20:06 GMT and should not be manually modified.
|
||||
This log was last generated on Sat, 11 Oct 2025 17:58:53 GMT and should not be manually modified.
|
||||
|
||||
## 0.7.13
|
||||
Sat, 11 Oct 2025 17:58:53 GMT
|
||||
|
||||
### Patches
|
||||
|
||||
- Script to sync eslint deps
|
||||
|
||||
## 0.7.12
|
||||
Fri, 10 Oct 2025 14:20:06 GMT
|
||||
|
||||
+187
@@ -0,0 +1,187 @@
|
||||
#!/usr/bin/env node
|
||||
//
|
||||
// Copyright © 2025 Hardcore Engineering Inc.
|
||||
//
|
||||
// Script to sync ESLint dev dependencies from platform-rig to all Rush packages
|
||||
//
|
||||
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const { execSync } = require('child_process')
|
||||
|
||||
// ESLint related dependency prefixes to sync
|
||||
const ESLINT_PATTERNS = ['eslint', '@typescript-eslint/', 'eslint-plugin-', 'eslint-config-']
|
||||
|
||||
/**
|
||||
* Get list of Rush projects using 'rush list --json'
|
||||
*/
|
||||
function getRushProjects() {
|
||||
try {
|
||||
const output = execSync('rush list --json', {
|
||||
encoding: 'utf-8',
|
||||
stdio: ['pipe', 'pipe', 'pipe']
|
||||
})
|
||||
|
||||
const data = JSON.parse(output)
|
||||
const projects = data.projects || data
|
||||
|
||||
if (!Array.isArray(projects)) {
|
||||
throw new Error('Expected rush list --json to return an array of projects')
|
||||
}
|
||||
|
||||
return projects
|
||||
} catch (err) {
|
||||
if (err.message.includes('rush') || err.code === 'ENOENT') {
|
||||
throw new Error('Failed to run "rush list --json". Make sure you are in a Rush workspace and Rush is installed.')
|
||||
}
|
||||
throw new Error(`Failed to get Rush projects: ${err.message}`)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a dependency name matches ESLint patterns
|
||||
*/
|
||||
function isEslintDependency(depName) {
|
||||
return ESLINT_PATTERNS.some((pattern) => depName.startsWith(pattern))
|
||||
}
|
||||
|
||||
/**
|
||||
* Get ESLint dev dependencies from platform-rig package.json
|
||||
*/
|
||||
function getEslintDepsFromPlatformRig(platformRigPath) {
|
||||
const packageJsonPath = path.join(platformRigPath, 'package.json')
|
||||
|
||||
if (!fs.existsSync(packageJsonPath)) {
|
||||
throw new Error(`platform-rig package.json not found at: ${packageJsonPath}`)
|
||||
}
|
||||
|
||||
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'))
|
||||
const dependencies = packageJson.dependencies || {}
|
||||
|
||||
const eslintDeps = {}
|
||||
for (const [name, version] of Object.entries(dependencies)) {
|
||||
if (isEslintDependency(name)) {
|
||||
eslintDeps[name] = version
|
||||
}
|
||||
}
|
||||
|
||||
return eslintDeps
|
||||
}
|
||||
|
||||
/**
|
||||
* Update package.json with ESLint dependencies
|
||||
*/
|
||||
function updatePackageJson(packagePath, eslintDeps) {
|
||||
const packageJsonPath = path.join(packagePath, 'package.json')
|
||||
|
||||
if (!fs.existsSync(packageJsonPath)) {
|
||||
console.warn(`⚠️ package.json not found at: ${packageJsonPath}`)
|
||||
return { updated: false, changes: [] }
|
||||
}
|
||||
|
||||
const content = fs.readFileSync(packageJsonPath, 'utf-8')
|
||||
const packageJson = JSON.parse(content)
|
||||
|
||||
// Skip if this is the platform-rig package itself
|
||||
if (packageJson.name === '@hcengineering/platform-rig') {
|
||||
return { updated: false, changes: [] }
|
||||
}
|
||||
|
||||
// Initialize devDependencies if it doesn't exist
|
||||
if (!packageJson.devDependencies) {
|
||||
packageJson.devDependencies = {}
|
||||
}
|
||||
|
||||
const changes = []
|
||||
let hasChanges = false
|
||||
|
||||
// Add or update ESLint dependencies
|
||||
for (const [name, version] of Object.entries(eslintDeps)) {
|
||||
const currentVersion = packageJson.devDependencies[name]
|
||||
|
||||
if (currentVersion !== version) {
|
||||
packageJson.devDependencies[name] = version
|
||||
hasChanges = true
|
||||
|
||||
if (currentVersion) {
|
||||
changes.push(` ${name}: ${currentVersion} → ${version}`)
|
||||
} else {
|
||||
changes.push(` ${name}: (new) → ${version}`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (hasChanges) {
|
||||
// Preserve original formatting by maintaining indent detection
|
||||
const indent = content.match(/^(\s+)/m)?.[1]?.length || 2
|
||||
const newContent = JSON.stringify(packageJson, null, indent) + '\n'
|
||||
fs.writeFileSync(packageJsonPath, newContent, 'utf-8')
|
||||
}
|
||||
|
||||
return { updated: hasChanges, changes }
|
||||
}
|
||||
|
||||
/**
|
||||
* Main execution
|
||||
*/
|
||||
function main() {
|
||||
console.log('🔍 Syncing ESLint dependencies from platform-rig to all packages...\n')
|
||||
|
||||
try {
|
||||
// Get all Rush projects
|
||||
const projects = getRushProjects()
|
||||
console.log(`Found ${projects.length} projects in Rush workspace\n`)
|
||||
|
||||
// Find platform-rig project
|
||||
const platformRigProject = projects.find((p) => p.name === '@hcengineering/platform-rig')
|
||||
if (!platformRigProject) {
|
||||
throw new Error('platform-rig package not found in Rush workspace')
|
||||
}
|
||||
|
||||
// Get ESLint dependencies from platform-rig
|
||||
const eslintDeps = getEslintDepsFromPlatformRig(platformRigProject.fullPath)
|
||||
|
||||
if (Object.keys(eslintDeps).length === 0) {
|
||||
console.log('⚠️ No ESLint dependencies found in platform-rig')
|
||||
return
|
||||
}
|
||||
|
||||
console.log('📦 ESLint dependencies from platform-rig:')
|
||||
for (const [name, version] of Object.entries(eslintDeps)) {
|
||||
console.log(` ${name}: ${version}`)
|
||||
}
|
||||
console.log()
|
||||
|
||||
// Update all packages
|
||||
let updatedCount = 0
|
||||
let skippedCount = 0
|
||||
|
||||
for (const project of projects) {
|
||||
const result = updatePackageJson(project.fullPath, eslintDeps)
|
||||
|
||||
if (result.updated) {
|
||||
updatedCount++
|
||||
console.log(`✅ Updated ${project.name}`)
|
||||
result.changes.forEach((change) => console.log(change))
|
||||
console.log()
|
||||
} else if (result.changes.length === 0 && project.name !== '@hcengineering/platform-rig') {
|
||||
skippedCount++
|
||||
}
|
||||
}
|
||||
|
||||
console.log('━'.repeat(50))
|
||||
console.log(`✨ Sync complete!`)
|
||||
console.log(` Updated: ${updatedCount} package(s)`)
|
||||
console.log(` Skipped: ${skippedCount} package(s) (already up-to-date)`)
|
||||
|
||||
if (updatedCount > 0) {
|
||||
console.log('\n💡 Don\'t forget to run "rush update" to install the updated dependencies')
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`\n❌ Error: ${error.message}`)
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
// Run the script
|
||||
main()
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@hcengineering/platform-rig",
|
||||
"version": "0.7.12",
|
||||
"version": "0.7.13",
|
||||
"scripts": {
|
||||
"build": "echo 'Not required'",
|
||||
"format": "echo 'Not required'"
|
||||
@@ -13,12 +13,12 @@
|
||||
"typescript": "^5.9.3",
|
||||
"esbuild": "^0.25.10",
|
||||
"esbuild-plugin-copy": "^2.1.1",
|
||||
"@typescript-eslint/eslint-plugin": "^6.11.0",
|
||||
"@typescript-eslint/eslint-plugin": "^8.46.0",
|
||||
"eslint-plugin-import": "^2.26.0",
|
||||
"eslint-plugin-promise": "^6.1.1",
|
||||
"eslint-plugin-n": "^15.4.0",
|
||||
"eslint": "^8.54.0",
|
||||
"@typescript-eslint/parser": "^6.11.0",
|
||||
"@typescript-eslint/parser": "^8.46.0",
|
||||
"eslint-config-standard-with-typescript": "^40.0.0",
|
||||
"prettier": "^3.6.2",
|
||||
"prettier-plugin-svelte": "^3.4.0",
|
||||
@@ -30,8 +30,14 @@
|
||||
"do-svelte-check": "./bin/do-svelte-check.js",
|
||||
"bump-package-version": "./bin/bump-package-version.js",
|
||||
"bump-changes-from-tag": "./bin/bump-changes-from-tag.js",
|
||||
"update-deps": "./bin/update-deps.js"
|
||||
"update-deps": "./bin/update-deps.js",
|
||||
"sync-eslint-deps": "./bin/sync-eslint-deps.js"
|
||||
},
|
||||
"files": [
|
||||
"bin/**/*",
|
||||
"profiles/**/*",
|
||||
"package.json"
|
||||
],
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,23 @@
|
||||
{
|
||||
"name": "@hcengineering/postgres-base",
|
||||
"entries": [
|
||||
{
|
||||
"version": "0.7.11",
|
||||
"tag": "@hcengineering/postgres-base_v0.7.11",
|
||||
"date": "Sat, 11 Oct 2025 17:58:53 GMT",
|
||||
"comments": {
|
||||
"patch": [
|
||||
{
|
||||
"comment": "Fix eslint deps"
|
||||
}
|
||||
],
|
||||
"dependency": [
|
||||
{
|
||||
"comment": "Updating dependency \"@hcengineering/platform-rig\" from `^0.7.12` to `0.7.13`"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "0.7.10",
|
||||
"tag": "@hcengineering/postgres-base_v0.7.10",
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
# Change Log - @hcengineering/postgres-base
|
||||
|
||||
This log was last generated on Fri, 10 Oct 2025 12:32:59 GMT and should not be manually modified.
|
||||
This log was last generated on Sat, 11 Oct 2025 17:58:53 GMT and should not be manually modified.
|
||||
|
||||
## 0.7.11
|
||||
Sat, 11 Oct 2025 17:58:53 GMT
|
||||
|
||||
### Patches
|
||||
|
||||
- Fix eslint deps
|
||||
|
||||
## 0.7.10
|
||||
Fri, 10 Oct 2025 12:32:59 GMT
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@hcengineering/postgres-base",
|
||||
"version": "0.7.10",
|
||||
"version": "0.7.11",
|
||||
"main": "lib/index.js",
|
||||
"svelte": "src/index.ts",
|
||||
"types": "types/index.d.ts",
|
||||
@@ -28,11 +28,19 @@
|
||||
"_phase:validate": "compile validate"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@hcengineering/platform-rig": "workspace:^0.7.12",
|
||||
"@hcengineering/platform-rig": "workspace:^0.7.13",
|
||||
"jest": "^29.7.0",
|
||||
"ts-jest": "^29.1.1",
|
||||
"@types/jest": "^29.5.5",
|
||||
"@types/node": "^22.15.29"
|
||||
"@types/node": "^22.15.29",
|
||||
"@typescript-eslint/eslint-plugin": "^8.46.0",
|
||||
"@typescript-eslint/parser": "^8.46.0",
|
||||
"eslint": "^8.54.0",
|
||||
"eslint-config-standard-with-typescript": "^40.0.0",
|
||||
"eslint-plugin-import": "^2.26.0",
|
||||
"eslint-plugin-node": "^11.1.0",
|
||||
"eslint-plugin-promise": "^6.1.1",
|
||||
"eslint-plugin-n": "^15.4.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"postgres": "^3.4.7"
|
||||
|
||||
Reference in New Issue
Block a user