@lowdefy/build 4.5.2 → 4.6.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 (165) hide show
  1. package/dist/build/addDefaultPages/404.js +1 -1
  2. package/dist/build/addDefaultPages/addDefaultPages.js +10 -4
  3. package/dist/build/addKeys.js +85 -29
  4. package/dist/build/buildApi/buildApi.js +27 -8
  5. package/dist/build/buildApi/buildEndpoint.js +7 -1
  6. package/dist/build/buildApi/buildRoutine/buildControl.js +1 -1
  7. package/dist/build/buildApi/buildRoutine/buildRoutine.js +1 -1
  8. package/dist/build/buildApi/buildRoutine/buildStep.js +1 -1
  9. package/dist/build/buildApi/buildRoutine/controlTypes.js +34 -11
  10. package/dist/build/buildApi/buildRoutine/countControl.js +1 -1
  11. package/dist/build/buildApi/buildRoutine/countStepTypes.js +2 -2
  12. package/dist/build/buildApi/buildRoutine/setStepId.js +1 -1
  13. package/dist/build/buildApi/buildRoutine/validateStep.js +30 -9
  14. package/dist/build/buildApi/validateEndpoint.js +36 -7
  15. package/dist/build/buildApi/validateStepReferences.js +65 -0
  16. package/dist/build/buildApp.js +1 -1
  17. package/dist/build/buildAuth/buildApiAuth.js +7 -3
  18. package/dist/build/buildAuth/buildAuth.js +7 -4
  19. package/dist/build/buildAuth/buildAuthPlugins.js +42 -13
  20. package/dist/build/buildAuth/buildPageAuth.js +14 -3
  21. package/dist/build/buildAuth/getApiRoles.js +1 -1
  22. package/dist/build/buildAuth/getPageRoles.js +1 -1
  23. package/dist/build/buildAuth/getProtectedApi.js +1 -1
  24. package/dist/build/buildAuth/getProtectedPages.js +1 -1
  25. package/dist/build/buildAuth/validateAuthConfig.js +39 -5
  26. package/dist/build/buildAuth/validateMutualExclusivity.js +13 -5
  27. package/dist/build/buildConnections.js +23 -24
  28. package/dist/build/buildImports/buildIconImports.js +1 -1
  29. package/dist/build/buildImports/buildImports.js +1 -1
  30. package/dist/build/buildImports/buildImportsDev.js +1 -1
  31. package/dist/build/buildImports/buildImportsProd.js +1 -1
  32. package/dist/build/buildImports/buildStyleImports.js +1 -1
  33. package/dist/build/buildImports/defaultIconsDev.js +1 -1
  34. package/dist/build/buildImports/defaultIconsProd.js +1 -1
  35. package/dist/build/buildJs/generateJsFile.js +1 -1
  36. package/dist/build/buildJs/jsMapParser.js +1 -1
  37. package/dist/build/buildJs/writeJs.js +1 -1
  38. package/dist/build/buildLogger.js +41 -0
  39. package/dist/build/buildMenu.js +36 -12
  40. package/dist/build/buildPages/buildBlock/buildBlock.js +1 -1
  41. package/dist/build/buildPages/buildBlock/buildEvents.js +79 -9
  42. package/dist/build/buildPages/buildBlock/buildRequests.js +38 -8
  43. package/dist/build/buildPages/buildBlock/buildSubBlocks.js +6 -2
  44. package/dist/build/buildPages/buildBlock/countBlockOperators.js +1 -1
  45. package/dist/build/buildPages/buildBlock/countBlockTypes.js +2 -2
  46. package/dist/build/buildPages/buildBlock/moveSkeletonBlocksToArea.js +6 -2
  47. package/dist/build/buildPages/buildBlock/moveSubBlocksToArea.js +6 -2
  48. package/dist/build/buildPages/buildBlock/setBlockId.js +1 -1
  49. package/dist/build/buildPages/buildBlock/validateBlock.js +25 -7
  50. package/dist/build/buildPages/buildPage.js +35 -6
  51. package/dist/build/buildPages/validateLinkReferences.js +33 -0
  52. package/dist/build/buildPages/validatePayloadReferences.js +59 -0
  53. package/dist/build/buildPages/validateRequestReferences.js +33 -0
  54. package/dist/build/buildPages/validateServerStateReferences.js +41 -0
  55. package/dist/build/buildPages/validateStateReferences.js +79 -0
  56. package/dist/build/buildRefs/buildRefs.js +20 -3
  57. package/dist/build/buildRefs/createRefReviver.js +28 -0
  58. package/dist/build/buildRefs/evaluateBuildOperators.js +26 -7
  59. package/dist/build/buildRefs/evaluateStaticOperators.js +56 -0
  60. package/dist/build/buildRefs/getConfigFile.js +25 -6
  61. package/dist/build/buildRefs/getKey.js +1 -1
  62. package/dist/build/buildRefs/getRefContent.js +1 -1
  63. package/dist/build/buildRefs/getRefPath.js +1 -1
  64. package/dist/build/buildRefs/getRefsFromFile.js +9 -4
  65. package/dist/build/buildRefs/getUserJavascriptFunction.js +18 -4
  66. package/dist/build/buildRefs/makeRefDefinition.js +10 -5
  67. package/dist/build/buildRefs/parseNunjucks.js +1 -1
  68. package/dist/build/buildRefs/parseRefContent.js +100 -6
  69. package/dist/build/buildRefs/populateRefs.js +75 -13
  70. package/dist/build/buildRefs/recursiveBuild.js +66 -18
  71. package/dist/build/buildRefs/runRefResolver.js +11 -3
  72. package/dist/build/buildRefs/runTransformer.js +7 -3
  73. package/dist/build/buildTypes.js +22 -7
  74. package/dist/build/cleanBuildDirectory.js +1 -1
  75. package/dist/build/collectDynamicIdentifiers.js +35 -0
  76. package/dist/build/collectTypeNames.js +36 -0
  77. package/dist/build/copyPublicFolder.js +1 -1
  78. package/dist/build/{buildJs → full}/buildJs.js +3 -3
  79. package/dist/build/full/buildPages.js +87 -0
  80. package/dist/build/{buildPages → full}/buildTestPage.js +15 -3
  81. package/dist/build/{updateServerPackageJson.js → full/updateServerPackageJson.js} +1 -1
  82. package/dist/build/{writePages.js → full/writePages.js} +1 -1
  83. package/dist/build/{writeRequests.js → full/writeRequests.js} +11 -3
  84. package/dist/build/{writeTypes.js → full/writeTypes.js} +1 -1
  85. package/dist/build/jit/addInstalledTypes.js +51 -0
  86. package/dist/build/jit/buildJsShallow.js +41 -0
  87. package/dist/build/jit/buildPageJit.js +252 -0
  88. package/dist/build/jit/buildShallowPages.js +90 -0
  89. package/dist/build/jit/createPageRegistry.js +80 -0
  90. package/dist/build/jit/detectMissingPluginPackages.js +62 -0
  91. package/dist/build/jit/getRefPositions.js +38 -0
  92. package/dist/build/jit/isPageContentPath.js +24 -0
  93. package/dist/build/jit/pageContentKeys.js +26 -0
  94. package/dist/build/jit/shallowBuild.js +245 -0
  95. package/dist/build/jit/stripPageContent.js +23 -0
  96. package/dist/build/jit/updateServerPackageJsonJit.js +33 -0
  97. package/dist/build/jit/validatePageTypes.js +73 -0
  98. package/dist/build/jit/writePageJit.js +44 -0
  99. package/dist/build/jit/writePageRegistry.js +23 -0
  100. package/dist/build/jit/writeSourcelessPages.js +23 -0
  101. package/dist/build/testSchema.js +45 -7
  102. package/dist/build/validateConfig.js +2 -2
  103. package/dist/build/validateOperatorsDynamic.js +28 -0
  104. package/dist/build/writeApi.js +1 -1
  105. package/dist/build/writeApp.js +1 -1
  106. package/dist/build/writeAuth.js +1 -1
  107. package/dist/build/writeConfig.js +1 -1
  108. package/dist/build/writeConnections.js +1 -1
  109. package/dist/build/writeGlobal.js +1 -1
  110. package/dist/build/writeLogger.js +19 -0
  111. package/dist/build/writeMaps.js +1 -1
  112. package/dist/build/writeMenus.js +1 -1
  113. package/dist/build/writePluginImports/generateImportFile.js +1 -1
  114. package/dist/build/writePluginImports/writeActionImports.js +1 -1
  115. package/dist/build/writePluginImports/writeActionSchemaMap.js +42 -0
  116. package/dist/build/writePluginImports/writeAuthImports.js +1 -1
  117. package/dist/build/writePluginImports/writeBlockImports.js +1 -1
  118. package/dist/build/writePluginImports/writeBlockSchemaMap.js +42 -0
  119. package/dist/build/writePluginImports/writeConnectionImports.js +1 -1
  120. package/dist/build/writePluginImports/writeIconImports.js +1 -1
  121. package/dist/build/writePluginImports/writeOperatorImports.js +1 -1
  122. package/dist/build/writePluginImports/writeOperatorSchemaMap.js +49 -0
  123. package/dist/build/writePluginImports/writePluginImports.js +16 -1
  124. package/dist/build/writePluginImports/writeStyleImports.js +1 -1
  125. package/dist/createContext.js +16 -4
  126. package/dist/defaultTypesMap.js +479 -457
  127. package/dist/index.js +188 -127
  128. package/dist/indexDev.js +18 -0
  129. package/dist/lowdefySchema.js +589 -0
  130. package/dist/scripts/generateDefaultTypes.js +2 -1
  131. package/dist/scripts/run.js +1 -1
  132. package/dist/{test → test-utils}/buildRefs/testBuildRefsAsyncFunction.js +1 -1
  133. package/dist/{test → test-utils}/buildRefs/testBuildRefsErrorResolver.js +1 -1
  134. package/dist/{test → test-utils}/buildRefs/testBuildRefsNullResolver.js +1 -1
  135. package/dist/{test → test-utils}/buildRefs/testBuildRefsParsingResolver.js +1 -1
  136. package/dist/{test → test-utils}/buildRefs/testBuildRefsResolver.js +1 -1
  137. package/dist/{test → test-utils}/buildRefs/testBuildRefsTransform.js +1 -1
  138. package/dist/{test → test-utils}/buildRefs/testBuildRefsTransformIdentity.js +1 -1
  139. package/dist/test-utils/buildRefs/testJitPageResolver.js +24 -0
  140. package/dist/test-utils/createTestLogger.js +36 -0
  141. package/dist/test-utils/parseTestYaml.js +126 -0
  142. package/dist/test-utils/runBuild.js +228 -0
  143. package/dist/test-utils/runBuildForSnapshots.js +704 -0
  144. package/dist/{test → test-utils}/testContext.js +12 -2
  145. package/dist/utils/collectExceptions.js +34 -0
  146. package/dist/utils/countOperators.js +31 -12
  147. package/dist/utils/createBuildHandleError.js +38 -0
  148. package/dist/utils/createCheckDuplicateId.js +15 -9
  149. package/dist/utils/createCounter.js +16 -3
  150. package/dist/utils/createHandleWarning.js +41 -0
  151. package/dist/utils/createPluginTypesMap.js +1 -1
  152. package/dist/utils/extractOperatorKey.js +36 -0
  153. package/dist/utils/findConfigKey.js +37 -0
  154. package/dist/utils/findSimilarString.js +53 -0
  155. package/dist/utils/logCollectedErrors.js +30 -0
  156. package/dist/utils/makeId.js +13 -8
  157. package/dist/utils/preserveMetaProperties.js +27 -0
  158. package/dist/utils/readConfigFile.js +1 -1
  159. package/dist/utils/setNonEnumerableProperty.js +23 -0
  160. package/dist/utils/traverseConfig.js +43 -0
  161. package/dist/utils/tryBuildStep.js +46 -0
  162. package/dist/utils/writeBuildArtifact.js +1 -1
  163. package/package.json +46 -41
  164. package/dist/build/buildPages/buildPages.js +0 -31
  165. package/dist/utils/formatErrorMessage.js +0 -56
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable no-console */ /*
2
- Copyright 2020-2024 Lowdefy, Inc
2
+ Copyright 2020-2026 Lowdefy, Inc
3
3
 
4
4
  Licensed under the Apache License, Version 2.0 (the "License");
5
5
  you may not use this file except in compliance with the License.
@@ -12,8 +12,12 @@
12
12
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
13
  See the License for the specific language governing permissions and
14
14
  limitations under the License.
15
- */ import createContext from './createContext.js';
15
+ */ import { BuildError, LowdefyInternalError } from '@lowdefy/errors';
16
+ import createContext from './createContext.js';
16
17
  import createPluginTypesMap from './utils/createPluginTypesMap.js';
18
+ import logCollectedErrors from './utils/logCollectedErrors.js';
19
+ import makeId from './utils/makeId.js';
20
+ import tryBuildStep from './utils/tryBuildStep.js';
17
21
  import addDefaultPages from './build/addDefaultPages/addDefaultPages.js';
18
22
  import addKeys from './build/addKeys.js';
19
23
  import buildApp from './build/buildApp.js';
@@ -21,15 +25,16 @@ import buildAuth from './build/buildAuth/buildAuth.js';
21
25
  import buildConnections from './build/buildConnections.js';
22
26
  import buildApi from './build/buildApi/buildApi.js';
23
27
  import buildImports from './build/buildImports/buildImports.js';
24
- import buildJs from './build/buildJs/buildJs.js';
28
+ import buildJs from './build/full/buildJs.js';
29
+ import buildLogger from './build/buildLogger.js';
25
30
  import buildMenu from './build/buildMenu.js';
26
- import buildPages from './build/buildPages/buildPages.js';
31
+ import buildPages from './build/full/buildPages.js';
27
32
  import buildRefs from './build/buildRefs/buildRefs.js';
28
33
  import buildTypes from './build/buildTypes.js';
29
34
  import cleanBuildDirectory from './build/cleanBuildDirectory.js';
30
35
  import copyPublicFolder from './build/copyPublicFolder.js';
31
36
  import testSchema from './build/testSchema.js';
32
- import updateServerPackageJson from './build/updateServerPackageJson.js';
37
+ import updateServerPackageJson from './build/full/updateServerPackageJson.js';
33
38
  import validateConfig from './build/validateConfig.js';
34
39
  import writeApp from './build/writeApp.js';
35
40
  import writeAuth from './build/writeAuth.js';
@@ -38,132 +43,188 @@ import writeConnections from './build/writeConnections.js';
38
43
  import writeApi from './build/writeApi.js';
39
44
  import writeGlobal from './build/writeGlobal.js';
40
45
  import writeJs from './build/buildJs/writeJs.js';
46
+ import writeLogger from './build/writeLogger.js';
41
47
  import writeMaps from './build/writeMaps.js';
42
48
  import writeMenus from './build/writeMenus.js';
43
- import writePages from './build/writePages.js';
49
+ import writePages from './build/full/writePages.js';
44
50
  import writePluginImports from './build/writePluginImports/writePluginImports.js';
45
- import writeRequests from './build/writeRequests.js';
46
- import writeTypes from './build/writeTypes.js';
51
+ import writeRequests from './build/full/writeRequests.js';
52
+ import writeTypes from './build/full/writeTypes.js';
47
53
  async function build(options) {
48
- const context = createContext(options);
49
- const components = await buildRefs({
50
- context
51
- });
52
- testSchema({
53
- components,
54
- context
55
- });
56
- buildApp({
57
- components,
58
- context
59
- });
60
- validateConfig({
61
- components,
62
- context
63
- });
64
- addDefaultPages({
65
- components,
66
- context
67
- });
68
- buildAuth({
69
- components,
70
- context
71
- });
72
- buildConnections({
73
- components,
74
- context
75
- });
76
- buildApi({
77
- components,
78
- context
79
- });
80
- buildPages({
81
- components,
82
- context
83
- });
84
- buildMenu({
85
- components,
86
- context
87
- });
88
- buildJs({
89
- components,
90
- context
91
- });
92
- addKeys({
93
- components,
94
- context
95
- });
96
- buildTypes({
97
- components,
98
- context
99
- });
100
- buildImports({
101
- components,
102
- context
103
- });
104
- await cleanBuildDirectory({
105
- context
106
- });
107
- await writeApp({
108
- components,
109
- context
110
- });
111
- await writeAuth({
112
- components,
113
- context
114
- });
115
- await writeConnections({
116
- components,
117
- context
118
- });
119
- await writeApi({
120
- components,
121
- context
122
- });
123
- await writeRequests({
124
- components,
125
- context
126
- });
127
- await writePages({
128
- components,
129
- context
130
- });
131
- await writeConfig({
132
- components,
133
- context
134
- });
135
- await writeGlobal({
136
- components,
137
- context
138
- });
139
- await writeMaps({
140
- components,
141
- context
142
- });
143
- await writeMenus({
144
- components,
145
- context
146
- });
147
- await writeTypes({
148
- components,
149
- context
150
- });
151
- await writePluginImports({
152
- components,
153
- context
154
- });
155
- await writeJs({
156
- components,
157
- context
158
- });
159
- await updateServerPackageJson({
160
- components,
161
- context
162
- });
163
- await copyPublicFolder({
164
- components,
165
- context
166
- });
54
+ // Reset makeId counter for each build (dev server may run multiple builds)
55
+ makeId.reset();
56
+ let context;
57
+ try {
58
+ context = createContext(options);
59
+ let components;
60
+ try {
61
+ components = await buildRefs({
62
+ context
63
+ });
64
+ } catch (err) {
65
+ // Handle ConfigError from buildRefs (e.g., missing _ref files)
66
+ if (err.isLowdefyError) {
67
+ context.handleError(err);
68
+ throw new BuildError('Build failed with 1 error(s). See above for details.');
69
+ }
70
+ throw err;
71
+ }
72
+ // Build steps - collect all errors before stopping
73
+ // addKeys runs first so testSchema has ~k markers for error location info
74
+ tryBuildStep(addKeys, 'addKeys', {
75
+ components,
76
+ context
77
+ });
78
+ tryBuildStep(testSchema, 'testSchema', {
79
+ components,
80
+ context
81
+ });
82
+ // Schema errors mean structurally invalid data - stop before processing further
83
+ logCollectedErrors(context);
84
+ tryBuildStep(buildApp, 'buildApp', {
85
+ components,
86
+ context
87
+ });
88
+ tryBuildStep(buildLogger, 'buildLogger', {
89
+ components,
90
+ context
91
+ });
92
+ tryBuildStep(validateConfig, 'validateConfig', {
93
+ components,
94
+ context
95
+ });
96
+ tryBuildStep(addDefaultPages, 'addDefaultPages', {
97
+ components,
98
+ context
99
+ });
100
+ // addKeys runs again to add keys to any new objects created by earlier build steps
101
+ tryBuildStep(addKeys, 'addKeys', {
102
+ components,
103
+ context
104
+ });
105
+ tryBuildStep(buildAuth, 'buildAuth', {
106
+ components,
107
+ context
108
+ });
109
+ tryBuildStep(buildConnections, 'buildConnections', {
110
+ components,
111
+ context
112
+ });
113
+ tryBuildStep(buildApi, 'buildApi', {
114
+ components,
115
+ context
116
+ });
117
+ tryBuildStep(buildPages, 'buildPages', {
118
+ components,
119
+ context
120
+ });
121
+ tryBuildStep(buildMenu, 'buildMenu', {
122
+ components,
123
+ context
124
+ });
125
+ tryBuildStep(buildJs, 'buildJs', {
126
+ components,
127
+ context
128
+ });
129
+ tryBuildStep(buildTypes, 'buildTypes', {
130
+ components,
131
+ context
132
+ });
133
+ tryBuildStep(buildImports, 'buildImports', {
134
+ components,
135
+ context
136
+ });
137
+ // Final addKeys pass to ensure all objects (including those created by build steps) have ~k
138
+ tryBuildStep(addKeys, 'addKeys', {
139
+ components,
140
+ context
141
+ });
142
+ // Check if there are any collected errors before writing
143
+ logCollectedErrors(context);
144
+ // Write steps - only if no errors
145
+ await cleanBuildDirectory({
146
+ context
147
+ });
148
+ await writeApp({
149
+ components,
150
+ context
151
+ });
152
+ await writeAuth({
153
+ components,
154
+ context
155
+ });
156
+ await writeConnections({
157
+ components,
158
+ context
159
+ });
160
+ await writeApi({
161
+ components,
162
+ context
163
+ });
164
+ await writeRequests({
165
+ components,
166
+ context
167
+ });
168
+ await writePages({
169
+ components,
170
+ context
171
+ });
172
+ await writeConfig({
173
+ components,
174
+ context
175
+ });
176
+ await writeGlobal({
177
+ components,
178
+ context
179
+ });
180
+ await writeLogger({
181
+ components,
182
+ context
183
+ });
184
+ await writeMaps({
185
+ components,
186
+ context
187
+ });
188
+ await writeMenus({
189
+ components,
190
+ context
191
+ });
192
+ await writeTypes({
193
+ components,
194
+ context
195
+ });
196
+ await writePluginImports({
197
+ components,
198
+ context
199
+ });
200
+ await writeJs({
201
+ components,
202
+ context
203
+ });
204
+ await updateServerPackageJson({
205
+ components,
206
+ context
207
+ });
208
+ await copyPublicFolder({
209
+ components,
210
+ context
211
+ });
212
+ } catch (err) {
213
+ if (err instanceof BuildError) {
214
+ throw err;
215
+ }
216
+ // Unexpected internal error - preserve Lowdefy errors as-is, wrap plain errors
217
+ const lowdefyErr = err.isLowdefyError ? err : new LowdefyInternalError(err.message, {
218
+ cause: err
219
+ });
220
+ if (context) {
221
+ context.handleError(lowdefyErr);
222
+ } else {
223
+ const logger = options.logger ?? console;
224
+ logger.error(lowdefyErr);
225
+ }
226
+ throw new BuildError('Build failed due to internal error. See above for details.');
227
+ }
167
228
  }
168
229
  export { createPluginTypesMap };
169
230
  export default build;
@@ -0,0 +1,18 @@
1
+ /*
2
+ Copyright 2020-2026 Lowdefy, Inc
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ */ export { default as shallowBuild } from './build/jit/shallowBuild.js';
16
+ export { default as buildPageJit } from './build/jit/buildPageJit.js';
17
+ export { default as createPageRegistry } from './build/jit/createPageRegistry.js';
18
+ export { default as createContext } from './createContext.js';