backend-plus 2.6.8 → 2.6.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +293 -263
- package/lib/backend-plus.js +16 -2
- package/package.json +18 -15
package/README.md
CHANGED
|
@@ -1,263 +1,293 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
# backend-plus
|
|
4
|
-
|
|
5
|
-
Backend for the anti Pareto rule.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
](https://npmjs.org/package/backend-plus)
|
|
9
|
+
[](https://npmjs.org/package/backend-plus)
|
|
10
|
+
[](https://github.com/codenautas/backend-plus/actions/workflows/build-and-test.yml)
|
|
11
|
+
[](https://socket.dev/npm/package/backend-plus)
|
|
12
|
+
[](https://github.com/codenautas/backend-plus/actions/workflows/qa-control.yml)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
language: 
|
|
16
|
+
also available in:
|
|
17
|
+
[](LEEME.md)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
It's a framework for developing web applications based on PostgreSQL database. Its main features are:
|
|
22
|
+
|
|
23
|
+
1. It is based on centralized metadata that defines:
|
|
24
|
+
1. The data structure (tables and views structure)
|
|
25
|
+
2. The procedures structure (param definition, permissions, encoding)
|
|
26
|
+
3. The menus structure
|
|
27
|
+
2. It provides:
|
|
28
|
+
1. Editable grids (orderable and filterable), with support for edit data using XLSX format files
|
|
29
|
+
2. Login mechanism
|
|
30
|
+
3. Menus
|
|
31
|
+
4. Skins definition
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
## API
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
### [table definitions](doc/table-definitions.md)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
### [module definitions](doc/module-definitions.md)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
### [client side definitions](doc/client-side-definitions.md)
|
|
45
|
+
|
|
46
|
+
### Menus definition
|
|
47
|
+
|
|
48
|
+
menuType | use
|
|
49
|
+
---------|----------
|
|
50
|
+
menu | menu or submenu
|
|
51
|
+
table | grid or table
|
|
52
|
+
proc | procedures
|
|
53
|
+
|
|
54
|
+
property | type | default value | menuType | use
|
|
55
|
+
------------|------|----------------|----------|---------
|
|
56
|
+
menuType | T | | | menu Type
|
|
57
|
+
name | T | | | option name (id)
|
|
58
|
+
menuContent | A | | menu | menu content
|
|
59
|
+
table | T | `name` | table | table name
|
|
60
|
+
label | T | `name` | | if you don't want to use default value to display in menu
|
|
61
|
+
selectedByDefault | B | | | is the selected by default option
|
|
62
|
+
autoproced | B | `false` | proc | if yo want to execute the procedure without clicking the proced button
|
|
63
|
+
|
|
64
|
+
Integrating example:
|
|
65
|
+
|
|
66
|
+
```js
|
|
67
|
+
getMenu(context){
|
|
68
|
+
return {menu:[
|
|
69
|
+
{menuType:'menu', name:'periodic table', menuContent:[
|
|
70
|
+
{menuType:'table', name:'ptable' , label:'elements'},
|
|
71
|
+
{menuType:'table', name:'pgroups' , label:'groups' },
|
|
72
|
+
{menuType:'table', name:'isotopes', label:'isotopes'},
|
|
73
|
+
{menuType:'proc' , name:'count_without_isotopes', label:'count'}
|
|
74
|
+
]},
|
|
75
|
+
{menuType:'table', name:'images', table:'element_images'},
|
|
76
|
+
{menuType:'menu', name:'test', menuContent:[
|
|
77
|
+
{menuType:'table', name:'bigint'},
|
|
78
|
+
]},
|
|
79
|
+
{menuType:'menu', name:'config', menuContent:[
|
|
80
|
+
{name:'users', menuType:'table'},
|
|
81
|
+
]},
|
|
82
|
+
]}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
### Procedures definition
|
|
87
|
+
|
|
88
|
+
#### procDef:
|
|
89
|
+
|
|
90
|
+
property | type | default value | use
|
|
91
|
+
------------|------|-------------------------------|-----------------------------------------------------
|
|
92
|
+
action | T | | Name that will be invoked the procedure
|
|
93
|
+
bitacora | BO | { error:false, always:false } | Bitacora Object for core functions register
|
|
94
|
+
parameters | POA | `[]` | Param Objects Array
|
|
95
|
+
cacheable | Bool | false | The result can be cached
|
|
96
|
+
coreFunction| F | | Function that implements the procedure
|
|
97
|
+
|
|
98
|
+
#### bitacoraDef:
|
|
99
|
+
|
|
100
|
+
property | type | default value | use
|
|
101
|
+
----------------------------------|----------------|----------------------------|-------------------
|
|
102
|
+
error | B | false | If true, bitacora saves data of error ocurred during core function execution
|
|
103
|
+
always | B | false | If true, bitacora saves all data ocurred during core function execution (overrides error)
|
|
104
|
+
targetTable | T | null | Tablename for update result of execution data (must to exists a record for update) (see **targetTableBitacoraFields**). Use null for ignore option
|
|
105
|
+
targetTableBitacoraFields | O | { **init_date**: 'init_date', **end_date**: 'end_date', **has_error**: 'has_error', **end_status**: 'end_status'} | Objects who defines the fields where **'targetTable'** will reply bitacora fields (If targetTable is null it's ommited)
|
|
106
|
+
targetTableUpdateFieldsCondition | A | null | Fields array to define update condition (each value must to be passed as parameter with the same field name)
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
#### paramDef:
|
|
110
|
+
|
|
111
|
+
property | type | default value | use
|
|
112
|
+
--------------|----------------|----------------|-------------------
|
|
113
|
+
name | T | | name of the parameter that is sent to the procedure
|
|
114
|
+
defaultValue | according to typeName | | parameter default value
|
|
115
|
+
typeName | T | | to define the data type
|
|
116
|
+
label | T | name | if you don't want to use default value to display on screen
|
|
117
|
+
|
|
118
|
+
#### coreFunction(context, parameters)
|
|
119
|
+
|
|
120
|
+
context | use
|
|
121
|
+
---------|----------------------
|
|
122
|
+
be | backendApp object
|
|
123
|
+
username | username
|
|
124
|
+
|
|
125
|
+
Process definition example:
|
|
126
|
+
|
|
127
|
+
```js
|
|
128
|
+
{
|
|
129
|
+
action:'count_without_isotopes',
|
|
130
|
+
bitacora:{
|
|
131
|
+
error:true,
|
|
132
|
+
always:true,
|
|
133
|
+
targetTable:'other_table',
|
|
134
|
+
targetTableBitacoraFields: {
|
|
135
|
+
init_date: 'fecha_hora_inicio',
|
|
136
|
+
end_date: 'fecha_hora_final',
|
|
137
|
+
has_error: 'hubo_error',
|
|
138
|
+
end_status: 'resultado'
|
|
139
|
+
},
|
|
140
|
+
targetTableUpdateFieldsCondition: ['id']
|
|
141
|
+
},
|
|
142
|
+
parameters:[
|
|
143
|
+
{name:'first_atomic_number', defaultValue:10, typeName:'integer'},
|
|
144
|
+
{name:'last_atomic_number' , defaultValue:99, typeName:'integer'},
|
|
145
|
+
],
|
|
146
|
+
coreFunction:function(context, parameters){
|
|
147
|
+
return context.client.query(
|
|
148
|
+
`SELECT count(*) as number_of_elements
|
|
149
|
+
FROM ptable p left join isotopes i on p.atomic_number=i.atomic_number
|
|
150
|
+
WHERE i.atomic_number IS NULL
|
|
151
|
+
AND p.atomic_number between coalesce($1,0) and coalesce($2,999)`,
|
|
152
|
+
[parameters.first_atomic_number, parameters.last_atomic_number]
|
|
153
|
+
).fetchUniqueRow().then(function(result){
|
|
154
|
+
return result.row.number_of_elements;
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## def-config
|
|
161
|
+
|
|
162
|
+
```js
|
|
163
|
+
/// def-config.ts
|
|
164
|
+
export defConfig=`
|
|
165
|
+
server:
|
|
166
|
+
port: 3000
|
|
167
|
+
base-url: /my-app
|
|
168
|
+
db:
|
|
169
|
+
motor: postgresql
|
|
170
|
+
host: localhost
|
|
171
|
+
database: my_app_db
|
|
172
|
+
user: my_app_user
|
|
173
|
+
install:
|
|
174
|
+
dump:
|
|
175
|
+
db:
|
|
176
|
+
owner: my_app_owner
|
|
177
|
+
client-setup:
|
|
178
|
+
title: My app
|
|
179
|
+
lang: es
|
|
180
|
+
`;
|
|
181
|
+
|
|
182
|
+
/// main.ts
|
|
183
|
+
import {defConfig} from "./def-config"
|
|
184
|
+
|
|
185
|
+
export function emergeMyApp<T extends Constructor<AppBackend>>(Base:T){
|
|
186
|
+
/// ...
|
|
187
|
+
configStaticConfig(){
|
|
188
|
+
super.configStaticConfig();
|
|
189
|
+
this.setStaticConfig(defConfig);
|
|
190
|
+
}
|
|
191
|
+
///...
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
The general application config is setted with `setStaticConfig`.
|
|
197
|
+
Any option can be overwrited in `local-config.yaml` file.
|
|
198
|
+
|
|
199
|
+
`BACKEND_PLUS_LOCAL_CONFIG` enviroment variable can be a `filename.yaml` with more config options.
|
|
200
|
+
|
|
201
|
+
### config format:
|
|
202
|
+
|
|
203
|
+
entry | usage
|
|
204
|
+
-----------------------------|---------------
|
|
205
|
+
server | server level options
|
|
206
|
+
.port | port where it is listening
|
|
207
|
+
.base-url | base url added to domain name
|
|
208
|
+
.module-store | name of the module that stores sessions: file, memory (in devel mode it saves to disk from time to time)
|
|
209
|
+
install | install options
|
|
210
|
+
.table-data-dir | directory or list of directories where the .tabs used by the dump-db command are located (it creates inserts into the local-db-dump.sql file)
|
|
211
|
+
.dump | install dump options
|
|
212
|
+
..db.owner | database owner user
|
|
213
|
+
..scripts.post-adapt | list of file names to adapt the database structure
|
|
214
|
+
..scripts.parts-order | order of the parts in which the dump-db is generated
|
|
215
|
+
devel | set of options for the development and testing environment
|
|
216
|
+
.delay | additional average wait time (to simulate a slow server)
|
|
217
|
+
.cache-content | caches images and files in general (when not in "devel" mode it always caches, the cache can't be turned off outside devel mode)
|
|
218
|
+
.forceShowAsEditable | forces grids to be shown as editable grids to show how the server prevents modification
|
|
219
|
+
.useFileDevelopment | uses the fileDevelopment versions instead of file coming from clientIncludes()
|
|
220
|
+
login | login options
|
|
221
|
+
.plus | options to pass to the login-plus module
|
|
222
|
+
..allowHttpLogin | whether it allows login from HTTP connections
|
|
223
|
+
.table | name of the table where users are validated
|
|
224
|
+
.schema | schema where the users table is located
|
|
225
|
+
.userFieldName | name of the field that contains the user
|
|
226
|
+
.passFieldName | name of the field that contains md5(password+user)
|
|
227
|
+
.rolFieldName | name of the field where the user role is
|
|
228
|
+
.passUpdatedAtFieldName | name of the field where the date of the last password change is stored (optional)
|
|
229
|
+
.passAlgorithmFieldName | name of the field where the password algorithm is stored (optional)
|
|
230
|
+
.infoFieldList | array with the field names that go to the user field
|
|
231
|
+
.activeClausule | SQL boolean expression that determines whether the user is active
|
|
232
|
+
.messages | messages to show on the login screen
|
|
233
|
+
.keepAlive | maximum logged-in duration if only keep-alive messages are received
|
|
234
|
+
.preserve-case | whether it accepts users with uppercase letters
|
|
235
|
+
log | console log
|
|
236
|
+
.req | shows each request
|
|
237
|
+
.session | shows session info
|
|
238
|
+
.serve-content | whether it should log everything served with `serve-content`
|
|
239
|
+
.db | database connection logs
|
|
240
|
+
..last-error | whether it should always log the last error (saved in `last-pg-error-local.sql`)
|
|
241
|
+
..until | whether it should log every executed SQL statement. In `until` you must specify how long since startup (e.g.: '1m30s') or until which day and time (e.g.: '2018-01-20 10:30')
|
|
242
|
+
..on-demand | whether the logging of all executed SQL can be restarted with `URLbase/--log-db`
|
|
243
|
+
..results | whether it includes the results in the log of all SQL
|
|
244
|
+
client-setup | front-end options
|
|
245
|
+
.cursors | (in preparation) tells whether it uses cursors to show where (with the cursor on which record) each user is
|
|
246
|
+
.skin | skin name
|
|
247
|
+
.menu | whether it uses the integrated menus
|
|
248
|
+
.title | screen title
|
|
249
|
+
.lang | frontend language (and locale), for now "es" or "en"
|
|
250
|
+
db | database options
|
|
251
|
+
.motor | for now only 'postgresql'
|
|
252
|
+
.database |
|
|
253
|
+
.tablespace | tablespace where the database is created (only if applicable)
|
|
254
|
+
.user |
|
|
255
|
+
.password |
|
|
256
|
+
.port |
|
|
257
|
+
.schema | main schema where to create the new objects
|
|
258
|
+
.search_path | array of schema names, if not specified `search_path = [schema, 'public']`
|
|
259
|
+
.log-last-error | true if you want the last SQL statement that contained an error to be left in a file (only works if config.devel is specified)
|
|
260
|
+
.allow_double_lodash_fields | whether fields with double `_` underscore are allowed
|
|
261
|
+
imports | options for importing to the platform
|
|
262
|
+
.allow-plain-xls | whether it allows importing xlsx that don't have the #backend-plus signal in cell A1
|
|
263
|
+
|
|
264
|
+
```yaml
|
|
265
|
+
install:
|
|
266
|
+
dump:
|
|
267
|
+
db:
|
|
268
|
+
owner: user_owner
|
|
269
|
+
scripts:
|
|
270
|
+
post-adapt: [special_triggers.sql, other_constraints.sql]
|
|
271
|
+
login:
|
|
272
|
+
plus:
|
|
273
|
+
allowHttpLogin: true
|
|
274
|
+
store:
|
|
275
|
+
module-name: file
|
|
276
|
+
log:
|
|
277
|
+
req: true
|
|
278
|
+
session: true
|
|
279
|
+
devel:
|
|
280
|
+
cache-content: true
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
## Install
|
|
284
|
+
|
|
285
|
+
```sh
|
|
286
|
+
$ npm install backend-plus
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
## License
|
|
290
|
+
|
|
291
|
+
[MIT](LICENSE)
|
|
292
|
+
|
|
293
|
+
----------------
|
package/lib/backend-plus.js
CHANGED
|
@@ -2063,6 +2063,18 @@ function require_resolve(moduleName){
|
|
|
2063
2063
|
return resolved;
|
|
2064
2064
|
}
|
|
2065
2065
|
|
|
2066
|
+
/* MEJORA:
|
|
2067
|
+
function module_root_dir(file){
|
|
2068
|
+
var dir = Path.dirname(file);
|
|
2069
|
+
while(!fs.existsSync(Path.join(dir,'package.json'))){
|
|
2070
|
+
var parent = Path.dirname(dir);
|
|
2071
|
+
if(parent==dir){ return Path.dirname(file); }
|
|
2072
|
+
dir = parent;
|
|
2073
|
+
}
|
|
2074
|
+
return dir;
|
|
2075
|
+
}
|
|
2076
|
+
// */
|
|
2077
|
+
|
|
2066
2078
|
function resolve_module_dir(moduleName,path,fileToCheck){
|
|
2067
2079
|
var baseDir;
|
|
2068
2080
|
if(packagejson.name==moduleName){
|
|
@@ -2070,12 +2082,13 @@ function resolve_module_dir(moduleName,path,fileToCheck){
|
|
|
2070
2082
|
}else{
|
|
2071
2083
|
baseDir=require_resolve(moduleName);
|
|
2072
2084
|
}
|
|
2085
|
+
// var resultDir = Path.join(path?module_root_dir(baseDir):Path.dirname(baseDir),path||'');
|
|
2073
2086
|
var resultDir = Path.join(Path.dirname(baseDir),path||'');
|
|
2074
2087
|
if (fileToCheck) {
|
|
2075
2088
|
fs.stat(Path.join(resultDir, fileToCheck)).then(function(status){
|
|
2076
2089
|
if (!status) {
|
|
2077
2090
|
console.error('Error resolve_module_dir in:',resultDir,'no:',fileToCheck);
|
|
2078
|
-
} else if(!status.isFile()) {
|
|
2091
|
+
} else if(!status.isFile() && fileToCheck != '.') {
|
|
2079
2092
|
console.error('Error resolve_module_dir in:',resultDir,',',fileToCheck,'is not a file');
|
|
2080
2093
|
}
|
|
2081
2094
|
},function(err){
|
|
@@ -2276,6 +2289,7 @@ AppBackend.prototype.addUnloggedServices = function addUnloggedServices(mainApp,
|
|
|
2276
2289
|
baseUrl='';
|
|
2277
2290
|
}
|
|
2278
2291
|
let baseLib = baseUrl + '/' + (moduleDef.path ? moduleDef.path : be.esJavascript(moduleDef.type)? 'lib': 'css');
|
|
2292
|
+
resolve_module_dir(moduleDef.module, moduleDef.modPath, moduleDef.file ?? '.')
|
|
2279
2293
|
try {
|
|
2280
2294
|
var allowedExts=(moduleDef.type=='js'?['js','map']:[moduleDef.type]);
|
|
2281
2295
|
mainApp.use(baseLib, serveContent(resolve_module_dir(moduleDef.module, moduleDef.modPath), { allowedExts }));
|
|
@@ -2354,10 +2368,10 @@ AppBackend.prototype.clientIncludes = function clientIncludes(req, opts) {
|
|
|
2354
2368
|
var list = [];
|
|
2355
2369
|
if (!hideBEPlusInclusions) {
|
|
2356
2370
|
list = [
|
|
2357
|
-
{ type: 'js', module: 'js-yaml', modPath: 'dist', file: 'js-yaml.js' },
|
|
2358
2371
|
// { type: 'js', module: 'xlsx', modPath: 'dist', file: 'xlsx.core.min.js' },
|
|
2359
2372
|
{ type: 'js', module: 'xlsx', modPath: 'dist', file: 'xlsx.full.min.js' },
|
|
2360
2373
|
{ type: 'js', module: 'require-bro' },
|
|
2374
|
+
{ type: 'js', module: 'js-yaml', modPath: 'browser', file: 'js-yaml.umd.min.js' },
|
|
2361
2375
|
{ type: 'js', module: 'cast-error' },
|
|
2362
2376
|
{ type: 'js', module: 'lazy-some' },
|
|
2363
2377
|
{ type: 'js', module: 'like-ar' },
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "backend-plus",
|
|
3
3
|
"description": "Backend for the anti Pareto rule",
|
|
4
|
-
"version": "2.6.
|
|
4
|
+
"version": "2.6.10",
|
|
5
5
|
"author": "Codenautas <codenautas@googlegroups.com>",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": "codenautas/backend-plus",
|
|
@@ -37,10 +37,10 @@
|
|
|
37
37
|
"@upgraded/locate-path": "^6.0.0-alfa.1",
|
|
38
38
|
"ajax-best-promise": "^0.4.3",
|
|
39
39
|
"backend-skins": "^0.1.34",
|
|
40
|
-
"best-globals": "^2.2.
|
|
40
|
+
"best-globals": "^2.2.2",
|
|
41
41
|
"big.js": "^7.0.1",
|
|
42
42
|
"body-parser": "^2.3.0",
|
|
43
|
-
"cast-error": "^0.1.
|
|
43
|
+
"cast-error": "^0.1.4",
|
|
44
44
|
"castellano": "^0.1.5",
|
|
45
45
|
"connect-pg-simple": "^10.0.0",
|
|
46
46
|
"cookie-parser": "^1.4.7",
|
|
@@ -51,11 +51,11 @@
|
|
|
51
51
|
"express-session": "^1.19.0",
|
|
52
52
|
"express-useragent": "^2.2.0",
|
|
53
53
|
"fs-extra": "^11.3.5",
|
|
54
|
-
"js-to-html": "^1.3.
|
|
55
|
-
"js-yaml": "^5.
|
|
56
|
-
"json4all": "^1.4.
|
|
54
|
+
"js-to-html": "^1.3.6",
|
|
55
|
+
"js-yaml": "^5.1.0",
|
|
56
|
+
"json4all": "^1.4.4",
|
|
57
57
|
"lazy-some": "^0.1.0",
|
|
58
|
-
"like-ar": "^0.5.
|
|
58
|
+
"like-ar": "^0.5.3",
|
|
59
59
|
"login-plus": "^1.8.1",
|
|
60
60
|
"memorystore": "^1.6.8",
|
|
61
61
|
"mini-tools": "^1.13.6",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"pug": "^3.0.4",
|
|
70
70
|
"read-yaml-promise": "^1.0.2",
|
|
71
71
|
"regexplicit": "^0.1.3",
|
|
72
|
-
"require-bro": "^0.3.
|
|
72
|
+
"require-bro": "^0.3.6",
|
|
73
73
|
"self-explain": "^0.11.0",
|
|
74
74
|
"serve-content": "^1.0.4",
|
|
75
75
|
"session-file-store": "^1.5.0",
|
|
@@ -77,8 +77,8 @@
|
|
|
77
77
|
"sql-tools": "^0.1.7",
|
|
78
78
|
"stack-trace": "^1.0.0",
|
|
79
79
|
"stylus": "0.64.0",
|
|
80
|
-
"type-store": "^0.
|
|
81
|
-
"typed-controls": "^0.12.
|
|
80
|
+
"type-store": "^0.5.1",
|
|
81
|
+
"typed-controls": "^0.12.6",
|
|
82
82
|
"xlsx": "https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz"
|
|
83
83
|
},
|
|
84
84
|
"devDependencies": {
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
"@types/js-yaml": "^4.0.9",
|
|
91
91
|
"@types/mocha": "^10.0.10",
|
|
92
92
|
"@types/multiparty": "~4.2.1",
|
|
93
|
-
"@types/node": "^26.0.
|
|
93
|
+
"@types/node": "^26.0.1",
|
|
94
94
|
"@types/nodemailer": "^8.0.1",
|
|
95
95
|
"@types/numeral": "~2.0.5",
|
|
96
96
|
"@types/session-file-store": "^1.2.6",
|
|
@@ -107,7 +107,8 @@
|
|
|
107
107
|
"kill-9": "~0.4.3",
|
|
108
108
|
"mocha": "^11.7.6",
|
|
109
109
|
"nyc": "^18.0.0",
|
|
110
|
-
"puppeteer": "^25.1
|
|
110
|
+
"puppeteer": "^25.2.1",
|
|
111
|
+
"qa-control": "0.7.0",
|
|
111
112
|
"sinon": "^22.0.0",
|
|
112
113
|
"supertest": "^7.2.2",
|
|
113
114
|
"types.d.ts": "~0.6.22",
|
|
@@ -134,10 +135,12 @@
|
|
|
134
135
|
"prepublish": "(tsc -p tsconfig-server.json || echo \"continue w/error\") && (tsc -p tsconfig-client.json || echo \"continue w/error\")"
|
|
135
136
|
},
|
|
136
137
|
"qa-control": {
|
|
137
|
-
"
|
|
138
|
+
"profile": "minimum",
|
|
138
139
|
"run-in": "server",
|
|
139
140
|
"type": "lib",
|
|
140
|
-
"
|
|
141
|
-
"
|
|
141
|
+
"gha": "all",
|
|
142
|
+
"silenced": [
|
|
143
|
+
"invalid_dependency_version_number_format_in_dep_1"
|
|
144
|
+
]
|
|
142
145
|
}
|
|
143
146
|
}
|