@jsreport/jsreport-core 3.1.1 → 3.3.0

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.
Files changed (80) hide show
  1. package/LICENSE +166 -166
  2. package/README.md +298 -298
  3. package/index.js +29 -29
  4. package/lib/main/blobStorage/blobStorage.js +52 -52
  5. package/lib/main/blobStorage/inMemoryProvider.js +27 -27
  6. package/lib/main/blobStorage/mainActions.js +24 -24
  7. package/lib/main/createDefaultLoggerFormat.js +17 -17
  8. package/lib/main/defaults.js +14 -14
  9. package/lib/main/extensions/discover.js +20 -20
  10. package/lib/main/extensions/extensionsManager.js +264 -264
  11. package/lib/main/extensions/fileUtils.js +56 -56
  12. package/lib/main/extensions/findVersion.js +49 -49
  13. package/lib/main/extensions/locationCache.js +103 -103
  14. package/lib/main/extensions/sorter.js +10 -10
  15. package/lib/main/extensions/validateMinimalVersion.js +50 -50
  16. package/lib/main/folders/cascadeFolderRemove.js +25 -25
  17. package/lib/main/folders/getEntitiesInFolder.js +53 -53
  18. package/lib/main/folders/index.js +42 -42
  19. package/lib/main/folders/moveBetweenFolders.js +354 -354
  20. package/lib/main/folders/validateDuplicatedName.js +107 -107
  21. package/lib/main/folders/validateReservedName.js +53 -53
  22. package/lib/main/logger.js +254 -244
  23. package/lib/main/migration/resourcesToAssets.js +230 -230
  24. package/lib/main/migration/xlsxTemplatesToAssets.js +128 -128
  25. package/lib/main/monitoring.js +92 -91
  26. package/lib/main/optionsLoad.js +237 -237
  27. package/lib/main/optionsSchema.js +237 -237
  28. package/lib/main/profiler.js +13 -1
  29. package/lib/main/reporter.js +593 -579
  30. package/lib/main/schemaValidator.js +252 -252
  31. package/lib/main/settings.js +154 -154
  32. package/lib/main/store/checkDuplicatedId.js +27 -27
  33. package/lib/main/store/collection.js +329 -329
  34. package/lib/main/store/documentStore.js +469 -469
  35. package/lib/main/store/mainActions.js +28 -28
  36. package/lib/main/store/memoryStoreProvider.js +99 -99
  37. package/lib/main/store/queue.js +48 -48
  38. package/lib/main/store/referenceUtils.js +251 -251
  39. package/lib/main/store/setupValidateId.js +43 -43
  40. package/lib/main/store/setupValidateShortid.js +71 -71
  41. package/lib/main/store/transaction.js +69 -69
  42. package/lib/main/store/typeUtils.js +180 -180
  43. package/lib/main/templates.js +34 -34
  44. package/lib/main/validateEntityName.js +62 -62
  45. package/lib/shared/createError.js +36 -36
  46. package/lib/shared/encryption.js +114 -114
  47. package/lib/shared/folders/index.js +11 -11
  48. package/lib/shared/folders/normalizeEntityPath.js +15 -15
  49. package/lib/shared/folders/resolveEntityFromPath.js +88 -88
  50. package/lib/shared/folders/resolveEntityPath.js +46 -46
  51. package/lib/shared/folders/resolveFolderFromPath.js +38 -38
  52. package/lib/shared/generateRequestId.js +4 -4
  53. package/lib/shared/listenerCollection.js +169 -169
  54. package/lib/shared/normalizeMetaFromLogs.js +30 -30
  55. package/lib/shared/reporter.js +128 -123
  56. package/lib/shared/request.js +64 -64
  57. package/lib/shared/tempFilesHandler.js +81 -81
  58. package/lib/shared/templates.js +82 -82
  59. package/lib/static/helpers.js +33 -33
  60. package/lib/worker/blobStorage.js +34 -34
  61. package/lib/worker/defaultProxyExtend.js +46 -46
  62. package/lib/worker/documentStore.js +49 -49
  63. package/lib/worker/extensionsManager.js +17 -17
  64. package/lib/worker/logger.js +48 -48
  65. package/lib/worker/render/diff.js +138 -138
  66. package/lib/worker/render/executeEngine.js +232 -207
  67. package/lib/worker/render/htmlRecipe.js +10 -10
  68. package/lib/worker/render/moduleHelper.js +45 -43
  69. package/lib/worker/render/noneEngine.js +12 -12
  70. package/lib/worker/render/profiler.js +162 -158
  71. package/lib/worker/render/render.js +202 -201
  72. package/lib/worker/render/resolveReferences.js +60 -60
  73. package/lib/worker/reporter.js +197 -191
  74. package/lib/worker/sandbox/runInSandbox.js +65 -13
  75. package/lib/worker/sandbox/safeSandbox.js +829 -828
  76. package/lib/worker/templates.js +80 -78
  77. package/lib/worker/workerHandler.js +54 -54
  78. package/package.json +91 -92
  79. package/test/blobStorage/common.js +21 -21
  80. package/test/store/common.js +1449 -1449
@@ -1,88 +1,88 @@
1
- const normalizeEntityPath = require('./normalizeEntityPath')
2
-
3
- module.exports = (reporter) => async (entityPathParam, targetEntitySet, options, req) => {
4
- if (req == null) {
5
- req = options
6
- options = {}
7
- }
8
-
9
- const entityPath = normalizeEntityPath(entityPathParam, options, req)
10
- const fragments = entityPath.split('/').filter(s => s)
11
- let currentEntity = null
12
- let currentEntitySet = null
13
- let currentFolder = null
14
-
15
- if (targetEntitySet) {
16
- const entitySet = reporter.documentStore.model.entitySets[targetEntitySet]
17
-
18
- if (!entitySet) {
19
- throw new Error(`Target entity set "${targetEntitySet}" does not exists`)
20
- }
21
-
22
- if (!entitySet.entityTypeDef.name) {
23
- throw new Error(`Entity set "${targetEntitySet}" does not have a name attribute`)
24
- }
25
- }
26
-
27
- if (fragments.length === 0) {
28
- return
29
- }
30
-
31
- const lastIndex = fragments.length - 1
32
-
33
- for (const [index, entityName] of fragments.entries()) {
34
- if (lastIndex === index) {
35
- if (!targetEntitySet) {
36
- for (const c of Object.keys(reporter.documentStore.collections)) {
37
- if (!reporter.documentStore.model.entitySets[c].entityTypeDef.name) {
38
- continue
39
- }
40
-
41
- const query = getSearchQuery(entityName, currentFolder)
42
- currentEntitySet = c
43
- currentEntity = await reporter.documentStore.collection(c).findOne(query, req)
44
-
45
- if (currentEntity) {
46
- break
47
- }
48
- }
49
- } else {
50
- const query = getSearchQuery(entityName, currentFolder)
51
- currentEntitySet = targetEntitySet
52
- currentEntity = await reporter.documentStore.collection(targetEntitySet).findOne(query, req)
53
- }
54
- } else {
55
- const query = getSearchQuery(entityName, currentFolder)
56
- const folder = await reporter.documentStore.collection('folders').findOne(query, req)
57
-
58
- if (!folder) {
59
- break
60
- }
61
-
62
- currentFolder = folder
63
- }
64
- }
65
-
66
- if (!currentEntity) {
67
- return
68
- }
69
-
70
- return {
71
- entitySet: currentEntitySet,
72
- entity: currentEntity
73
- }
74
- }
75
-
76
- function getSearchQuery (name, currentFolder) {
77
- const query = {
78
- name
79
- }
80
-
81
- if (currentFolder) {
82
- query.folder = { shortid: currentFolder.shortid }
83
- } else {
84
- query.folder = null
85
- }
86
-
87
- return query
88
- }
1
+ const normalizeEntityPath = require('./normalizeEntityPath')
2
+
3
+ module.exports = (reporter) => async (entityPathParam, targetEntitySet, options, req) => {
4
+ if (req == null) {
5
+ req = options
6
+ options = {}
7
+ }
8
+
9
+ const entityPath = normalizeEntityPath(entityPathParam, options, req)
10
+ const fragments = entityPath.split('/').filter(s => s)
11
+ let currentEntity = null
12
+ let currentEntitySet = null
13
+ let currentFolder = null
14
+
15
+ if (targetEntitySet) {
16
+ const entitySet = reporter.documentStore.model.entitySets[targetEntitySet]
17
+
18
+ if (!entitySet) {
19
+ throw new Error(`Target entity set "${targetEntitySet}" does not exists`)
20
+ }
21
+
22
+ if (!entitySet.entityTypeDef.name) {
23
+ throw new Error(`Entity set "${targetEntitySet}" does not have a name attribute`)
24
+ }
25
+ }
26
+
27
+ if (fragments.length === 0) {
28
+ return
29
+ }
30
+
31
+ const lastIndex = fragments.length - 1
32
+
33
+ for (const [index, entityName] of fragments.entries()) {
34
+ if (lastIndex === index) {
35
+ if (!targetEntitySet) {
36
+ for (const c of Object.keys(reporter.documentStore.collections)) {
37
+ if (!reporter.documentStore.model.entitySets[c].entityTypeDef.name) {
38
+ continue
39
+ }
40
+
41
+ const query = getSearchQuery(entityName, currentFolder)
42
+ currentEntitySet = c
43
+ currentEntity = await reporter.documentStore.collection(c).findOne(query, req)
44
+
45
+ if (currentEntity) {
46
+ break
47
+ }
48
+ }
49
+ } else {
50
+ const query = getSearchQuery(entityName, currentFolder)
51
+ currentEntitySet = targetEntitySet
52
+ currentEntity = await reporter.documentStore.collection(targetEntitySet).findOne(query, req)
53
+ }
54
+ } else {
55
+ const query = getSearchQuery(entityName, currentFolder)
56
+ const folder = await reporter.documentStore.collection('folders').findOne(query, req)
57
+
58
+ if (!folder) {
59
+ break
60
+ }
61
+
62
+ currentFolder = folder
63
+ }
64
+ }
65
+
66
+ if (!currentEntity) {
67
+ return
68
+ }
69
+
70
+ return {
71
+ entitySet: currentEntitySet,
72
+ entity: currentEntity
73
+ }
74
+ }
75
+
76
+ function getSearchQuery (name, currentFolder) {
77
+ const query = {
78
+ name
79
+ }
80
+
81
+ if (currentFolder) {
82
+ query.folder = { shortid: currentFolder.shortid }
83
+ } else {
84
+ query.folder = null
85
+ }
86
+
87
+ return query
88
+ }
@@ -1,46 +1,46 @@
1
-
2
- async function resolveEntityPath (reporter, entity, lookup, req) {
3
- const fullPath = []
4
- let currentEntity = entity
5
-
6
- while (currentEntity != null) {
7
- if (currentEntity.folder != null) {
8
- let folder
9
-
10
- if (lookup) {
11
- folder = await lookup(currentEntity.folder.shortid)
12
- } else {
13
- folder = await reporter.documentStore.collection('folders').findOne({
14
- shortid: currentEntity.folder.shortid
15
- }, req)
16
- }
17
-
18
- if (folder != null) {
19
- fullPath.unshift(folder.name)
20
- currentEntity = folder
21
- } else {
22
- throw new Error(`Folder with shortid "${currentEntity.folder.shortid}" does not exists`)
23
- }
24
- } else {
25
- currentEntity = null
26
- }
27
- }
28
-
29
- fullPath.push(entity.name)
30
-
31
- return `/${fullPath.join('/')}`
32
- }
33
-
34
- module.exports = (reporter) => async (entity, entitySet, req, lookup) => {
35
- const entitySetInfo = reporter.documentStore.model.entitySets[entitySet]
36
-
37
- if (!entitySetInfo) {
38
- throw new Error(`Unknown entitySet "${entitySet}"`)
39
- }
40
-
41
- if (entitySetInfo.entityTypeDef.name == null) {
42
- throw new Error(`Could not find name attribute of entity of type "${entitySet}"`)
43
- }
44
-
45
- return resolveEntityPath(reporter, entity, lookup, req)
46
- }
1
+
2
+ async function resolveEntityPath (reporter, entity, lookup, req) {
3
+ const fullPath = []
4
+ let currentEntity = entity
5
+
6
+ while (currentEntity != null) {
7
+ if (currentEntity.folder != null) {
8
+ let folder
9
+
10
+ if (lookup) {
11
+ folder = await lookup(currentEntity.folder.shortid)
12
+ } else {
13
+ folder = await reporter.documentStore.collection('folders').findOne({
14
+ shortid: currentEntity.folder.shortid
15
+ }, req)
16
+ }
17
+
18
+ if (folder != null) {
19
+ fullPath.unshift(folder.name)
20
+ currentEntity = folder
21
+ } else {
22
+ throw new Error(`Folder with shortid "${currentEntity.folder.shortid}" does not exists`)
23
+ }
24
+ } else {
25
+ currentEntity = null
26
+ }
27
+ }
28
+
29
+ fullPath.push(entity.name)
30
+
31
+ return `/${fullPath.join('/')}`
32
+ }
33
+
34
+ module.exports = (reporter) => async (entity, entitySet, req, lookup) => {
35
+ const entitySetInfo = reporter.documentStore.model.entitySets[entitySet]
36
+
37
+ if (!entitySetInfo) {
38
+ throw new Error(`Unknown entitySet "${entitySet}"`)
39
+ }
40
+
41
+ if (entitySetInfo.entityTypeDef.name == null) {
42
+ throw new Error(`Could not find name attribute of entity of type "${entitySet}"`)
43
+ }
44
+
45
+ return resolveEntityPath(reporter, entity, lookup, req)
46
+ }
@@ -1,38 +1,38 @@
1
- const normalizeEntityPath = require('./normalizeEntityPath')
2
-
3
- module.exports = (reporter) => async (entityPathParam, req) => {
4
- const entityPath = normalizeEntityPath(entityPathParam, {}, req)
5
- const fragments = entityPath.split('/').filter(s => s)
6
- let found = false
7
- let currentFolder = null
8
-
9
- for (const f of fragments) {
10
- if (found) {
11
- currentFolder = null
12
- break
13
- }
14
-
15
- const query = {
16
- name: f
17
- }
18
-
19
- if (currentFolder) {
20
- query.folder = { shortid: currentFolder.shortid }
21
- } else {
22
- query.folder = null
23
- }
24
-
25
- const folder = await reporter.documentStore.collection('folders').findOne(query, req)
26
-
27
- if (!folder) {
28
- found = true
29
- // we don't know from path /a/b if b is template or folder,
30
- // so if folder is not found, we assume it was other entity and continue
31
- continue
32
- }
33
-
34
- currentFolder = folder
35
- }
36
-
37
- return currentFolder
38
- }
1
+ const normalizeEntityPath = require('./normalizeEntityPath')
2
+
3
+ module.exports = (reporter) => async (entityPathParam, req) => {
4
+ const entityPath = normalizeEntityPath(entityPathParam, {}, req)
5
+ const fragments = entityPath.split('/').filter(s => s)
6
+ let found = false
7
+ let currentFolder = null
8
+
9
+ for (const f of fragments) {
10
+ if (found) {
11
+ currentFolder = null
12
+ break
13
+ }
14
+
15
+ const query = {
16
+ name: f
17
+ }
18
+
19
+ if (currentFolder) {
20
+ query.folder = { shortid: currentFolder.shortid }
21
+ } else {
22
+ query.folder = null
23
+ }
24
+
25
+ const folder = await reporter.documentStore.collection('folders').findOne(query, req)
26
+
27
+ if (!folder) {
28
+ found = true
29
+ // we don't know from path /a/b if b is template or folder,
30
+ // so if folder is not found, we assume it was other entity and continue
31
+ continue
32
+ }
33
+
34
+ currentFolder = folder
35
+ }
36
+
37
+ return currentFolder
38
+ }
@@ -1,4 +1,4 @@
1
- const { customAlphabet } = require('nanoid')
2
- const nanoid = customAlphabet('0123456789abcdefghijklmnopqrstuvwxyz', 15)
3
-
4
- module.exports = () => nanoid()
1
+ const { customAlphabet } = require('nanoid')
2
+ const nanoid = customAlphabet('0123456789abcdefghijklmnopqrstuvwxyz', 15)
3
+
4
+ module.exports = () => nanoid()