@lowdefy/build 4.5.2 → 4.7.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 (163) 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 +40 -7
  57. package/dist/build/buildRefs/evaluateStaticOperators.js +52 -0
  58. package/dist/build/buildRefs/getConfigFile.js +25 -6
  59. package/dist/build/buildRefs/getKey.js +1 -1
  60. package/dist/build/buildRefs/getRefContent.js +1 -1
  61. package/dist/build/buildRefs/getRefPath.js +1 -1
  62. package/dist/build/buildRefs/getUserJavascriptFunction.js +18 -4
  63. package/dist/build/buildRefs/makeRefDefinition.js +10 -5
  64. package/dist/build/buildRefs/parseNunjucks.js +1 -1
  65. package/dist/build/buildRefs/parseRefContent.js +108 -7
  66. package/dist/build/buildRefs/runRefResolver.js +11 -3
  67. package/dist/build/buildRefs/runTransformer.js +7 -3
  68. package/dist/build/buildRefs/walker.js +340 -0
  69. package/dist/build/buildTypes.js +22 -7
  70. package/dist/build/cleanBuildDirectory.js +1 -1
  71. package/dist/build/collectDynamicIdentifiers.js +35 -0
  72. package/dist/build/collectTypeNames.js +36 -0
  73. package/dist/build/copyPublicFolder.js +1 -1
  74. package/dist/build/{buildJs → full}/buildJs.js +3 -3
  75. package/dist/build/full/buildPages.js +87 -0
  76. package/dist/build/{buildPages → full}/buildTestPage.js +15 -3
  77. package/dist/build/{updateServerPackageJson.js → full/updateServerPackageJson.js} +1 -1
  78. package/dist/build/{writePages.js → full/writePages.js} +1 -1
  79. package/dist/build/{writeRequests.js → full/writeRequests.js} +11 -3
  80. package/dist/build/{writeTypes.js → full/writeTypes.js} +1 -1
  81. package/dist/build/jit/addInstalledTypes.js +51 -0
  82. package/dist/build/jit/buildJsShallow.js +41 -0
  83. package/dist/build/jit/buildPageJit.js +271 -0
  84. package/dist/build/jit/buildShallowPages.js +90 -0
  85. package/dist/build/jit/createPageRegistry.js +85 -0
  86. package/dist/build/jit/detectMissingPluginPackages.js +62 -0
  87. package/dist/build/jit/isPageContentPath.js +24 -0
  88. package/dist/build/jit/pageContentKeys.js +26 -0
  89. package/dist/build/jit/shallowBuild.js +242 -0
  90. package/dist/build/jit/updateServerPackageJsonJit.js +33 -0
  91. package/dist/build/jit/validatePageTypes.js +73 -0
  92. package/dist/build/jit/writePageJit.js +44 -0
  93. package/dist/build/jit/writePageRegistry.js +23 -0
  94. package/dist/build/jit/writeSourcelessPages.js +23 -0
  95. package/dist/build/testSchema.js +45 -7
  96. package/dist/build/validateConfig.js +2 -2
  97. package/dist/build/validateOperatorsDynamic.js +28 -0
  98. package/dist/build/writeApi.js +1 -1
  99. package/dist/build/writeApp.js +1 -1
  100. package/dist/build/writeAuth.js +1 -1
  101. package/dist/build/writeConfig.js +1 -1
  102. package/dist/build/writeConnections.js +1 -1
  103. package/dist/build/writeGlobal.js +1 -1
  104. package/dist/build/writeLogger.js +19 -0
  105. package/dist/build/writeMaps.js +1 -1
  106. package/dist/build/writeMenus.js +1 -1
  107. package/dist/build/writePluginImports/generateImportFile.js +1 -1
  108. package/dist/build/writePluginImports/writeActionImports.js +1 -1
  109. package/dist/build/writePluginImports/writeActionSchemaMap.js +42 -0
  110. package/dist/build/writePluginImports/writeAuthImports.js +1 -1
  111. package/dist/build/writePluginImports/writeBlockImports.js +1 -1
  112. package/dist/build/writePluginImports/writeBlockSchemaMap.js +42 -0
  113. package/dist/build/writePluginImports/writeConnectionImports.js +1 -1
  114. package/dist/build/writePluginImports/writeIconImports.js +1 -1
  115. package/dist/build/writePluginImports/writeOperatorImports.js +1 -1
  116. package/dist/build/writePluginImports/writeOperatorSchemaMap.js +49 -0
  117. package/dist/build/writePluginImports/writePluginImports.js +16 -1
  118. package/dist/build/writePluginImports/writeStyleImports.js +1 -1
  119. package/dist/createContext.js +16 -4
  120. package/dist/defaultTypesMap.js +479 -457
  121. package/dist/index.js +190 -127
  122. package/dist/indexDev.js +19 -0
  123. package/dist/lowdefySchema.js +588 -0
  124. package/dist/scripts/generateDefaultTypes.js +2 -1
  125. package/dist/scripts/run.js +1 -1
  126. package/dist/{test → test-utils}/buildRefs/testBuildRefsAsyncFunction.js +1 -1
  127. package/dist/{test → test-utils}/buildRefs/testBuildRefsErrorResolver.js +1 -1
  128. package/dist/{test → test-utils}/buildRefs/testBuildRefsNullResolver.js +1 -1
  129. package/dist/{test → test-utils}/buildRefs/testBuildRefsParsingResolver.js +1 -1
  130. package/dist/{test → test-utils}/buildRefs/testBuildRefsResolver.js +1 -1
  131. package/dist/{test → test-utils}/buildRefs/testBuildRefsTransform.js +1 -1
  132. package/dist/{test → test-utils}/buildRefs/testBuildRefsTransformIdentity.js +1 -1
  133. package/dist/test-utils/buildRefs/testJitPageResolver.js +24 -0
  134. package/dist/test-utils/createTestLogger.js +36 -0
  135. package/dist/test-utils/parseTestYaml.js +126 -0
  136. package/dist/test-utils/runBuild.js +228 -0
  137. package/dist/test-utils/runBuildForSnapshots.js +704 -0
  138. package/dist/{test → test-utils}/testContext.js +12 -2
  139. package/dist/utils/collectExceptions.js +34 -0
  140. package/dist/utils/countOperators.js +31 -12
  141. package/dist/utils/createBuildHandleError.js +38 -0
  142. package/dist/utils/createCheckDuplicateId.js +15 -9
  143. package/dist/utils/createCounter.js +16 -3
  144. package/dist/utils/createHandleWarning.js +41 -0
  145. package/dist/utils/createPluginTypesMap.js +1 -1
  146. package/dist/utils/extractOperatorKey.js +36 -0
  147. package/dist/utils/findConfigKey.js +37 -0
  148. package/dist/utils/findSimilarString.js +53 -0
  149. package/dist/utils/logCollectedErrors.js +30 -0
  150. package/dist/utils/makeId.js +16 -8
  151. package/dist/utils/preserveMetaProperties.js +27 -0
  152. package/dist/utils/readConfigFile.js +1 -1
  153. package/dist/utils/setNonEnumerableProperty.js +23 -0
  154. package/dist/utils/traverseConfig.js +43 -0
  155. package/dist/utils/tryBuildStep.js +46 -0
  156. package/dist/utils/writeBuildArtifact.js +1 -1
  157. package/package.json +46 -41
  158. package/dist/build/buildPages/buildPages.js +0 -31
  159. package/dist/build/buildRefs/evaluateBuildOperators.js +0 -34
  160. package/dist/build/buildRefs/getRefsFromFile.js +0 -37
  161. package/dist/build/buildRefs/populateRefs.js +0 -43
  162. package/dist/build/buildRefs/recursiveBuild.js +0 -85
  163. 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, ConfigError, 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,190 @@ 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
+ // Root lowdefy.yaml failure still throws from buildRefs — collect it
66
+ if (err instanceof ConfigError) {
67
+ context.errors.push(err);
68
+ } else {
69
+ throw err;
70
+ }
71
+ }
72
+ // Stop if buildRefs collected any errors (YAML parse, missing files, etc.)
73
+ logCollectedErrors(context);
74
+ // Build steps - collect all errors before stopping
75
+ // addKeys runs first so testSchema has ~k markers for error location info
76
+ tryBuildStep(addKeys, 'addKeys', {
77
+ components,
78
+ context
79
+ });
80
+ tryBuildStep(testSchema, 'testSchema', {
81
+ components,
82
+ context
83
+ });
84
+ // Schema errors mean structurally invalid data - stop before processing further
85
+ logCollectedErrors(context);
86
+ tryBuildStep(buildApp, 'buildApp', {
87
+ components,
88
+ context
89
+ });
90
+ tryBuildStep(buildLogger, 'buildLogger', {
91
+ components,
92
+ context
93
+ });
94
+ tryBuildStep(validateConfig, 'validateConfig', {
95
+ components,
96
+ context
97
+ });
98
+ tryBuildStep(addDefaultPages, 'addDefaultPages', {
99
+ components,
100
+ context
101
+ });
102
+ // addKeys runs again to add keys to any new objects created by earlier build steps
103
+ tryBuildStep(addKeys, 'addKeys', {
104
+ components,
105
+ context
106
+ });
107
+ tryBuildStep(buildAuth, 'buildAuth', {
108
+ components,
109
+ context
110
+ });
111
+ tryBuildStep(buildConnections, 'buildConnections', {
112
+ components,
113
+ context
114
+ });
115
+ tryBuildStep(buildApi, 'buildApi', {
116
+ components,
117
+ context
118
+ });
119
+ tryBuildStep(buildPages, 'buildPages', {
120
+ components,
121
+ context
122
+ });
123
+ tryBuildStep(buildMenu, 'buildMenu', {
124
+ components,
125
+ context
126
+ });
127
+ tryBuildStep(buildJs, 'buildJs', {
128
+ components,
129
+ context
130
+ });
131
+ tryBuildStep(buildTypes, 'buildTypes', {
132
+ components,
133
+ context
134
+ });
135
+ tryBuildStep(buildImports, 'buildImports', {
136
+ components,
137
+ context
138
+ });
139
+ // Final addKeys pass to ensure all objects (including those created by build steps) have ~k
140
+ tryBuildStep(addKeys, 'addKeys', {
141
+ components,
142
+ context
143
+ });
144
+ // Check if there are any collected errors before writing
145
+ logCollectedErrors(context);
146
+ // Write steps - only if no errors
147
+ await cleanBuildDirectory({
148
+ context
149
+ });
150
+ await writeApp({
151
+ components,
152
+ context
153
+ });
154
+ await writeAuth({
155
+ components,
156
+ context
157
+ });
158
+ await writeConnections({
159
+ components,
160
+ context
161
+ });
162
+ await writeApi({
163
+ components,
164
+ context
165
+ });
166
+ await writeRequests({
167
+ components,
168
+ context
169
+ });
170
+ await writePages({
171
+ components,
172
+ context
173
+ });
174
+ await writeConfig({
175
+ components,
176
+ context
177
+ });
178
+ await writeGlobal({
179
+ components,
180
+ context
181
+ });
182
+ await writeLogger({
183
+ components,
184
+ context
185
+ });
186
+ await writeMaps({
187
+ components,
188
+ context
189
+ });
190
+ await writeMenus({
191
+ components,
192
+ context
193
+ });
194
+ await writeTypes({
195
+ components,
196
+ context
197
+ });
198
+ await writePluginImports({
199
+ components,
200
+ context
201
+ });
202
+ await writeJs({
203
+ components,
204
+ context
205
+ });
206
+ await updateServerPackageJson({
207
+ components,
208
+ context
209
+ });
210
+ await copyPublicFolder({
211
+ components,
212
+ context
213
+ });
214
+ } catch (err) {
215
+ if (err instanceof BuildError) {
216
+ throw err;
217
+ }
218
+ // Unexpected internal error - preserve Lowdefy errors as-is, wrap plain errors
219
+ const lowdefyErr = err.isLowdefyError ? err : new LowdefyInternalError(err.message, {
220
+ cause: err
221
+ });
222
+ if (context) {
223
+ context.handleError(lowdefyErr);
224
+ } else {
225
+ const logger = options.logger ?? console;
226
+ logger.error(lowdefyErr);
227
+ }
228
+ throw new BuildError('Build failed due to internal error. See above for details.');
229
+ }
167
230
  }
168
231
  export { createPluginTypesMap };
169
232
  export default build;
@@ -0,0 +1,19 @@
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';
19
+ export { default as makeId } from './utils/makeId.js';