@actions/workflow-parser 0.2.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 (292) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +87 -0
  3. package/dist/index.d.ts +6 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +5 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/model/convert.d.ts +31 -0
  8. package/dist/model/convert.d.ts.map +1 -0
  9. package/dist/model/convert.js +105 -0
  10. package/dist/model/convert.js.map +1 -0
  11. package/dist/model/converter/concurrency.d.ts +5 -0
  12. package/dist/model/converter/concurrency.d.ts.map +1 -0
  13. package/dist/model/converter/concurrency.js +30 -0
  14. package/dist/model/converter/concurrency.js.map +1 -0
  15. package/dist/model/converter/container.d.ts +6 -0
  16. package/dist/model/converter/container.d.ts.map +1 -0
  17. package/dist/model/converter/container.js +97 -0
  18. package/dist/model/converter/container.js.map +1 -0
  19. package/dist/model/converter/cron-constants.d.ts +44 -0
  20. package/dist/model/converter/cron-constants.d.ts.map +1 -0
  21. package/dist/model/converter/cron-constants.js +30 -0
  22. package/dist/model/converter/cron-constants.js.map +1 -0
  23. package/dist/model/converter/cron.d.ts +3 -0
  24. package/dist/model/converter/cron.d.ts.map +1 -0
  25. package/dist/model/converter/cron.js +92 -0
  26. package/dist/model/converter/cron.js.map +1 -0
  27. package/dist/model/converter/events.d.ts +5 -0
  28. package/dist/model/converter/events.d.ts.map +1 -0
  29. package/dist/model/converter/events.js +123 -0
  30. package/dist/model/converter/events.js.map +1 -0
  31. package/dist/model/converter/handle-errors.d.ts +4 -0
  32. package/dist/model/converter/handle-errors.d.ts.map +1 -0
  33. package/dist/model/converter/handle-errors.js +18 -0
  34. package/dist/model/converter/handle-errors.js.map +1 -0
  35. package/dist/model/converter/id-builder.d.ts +23 -0
  36. package/dist/model/converter/id-builder.d.ts.map +1 -0
  37. package/dist/model/converter/id-builder.js +113 -0
  38. package/dist/model/converter/id-builder.js.map +1 -0
  39. package/dist/model/converter/job/environment.d.ts +5 -0
  40. package/dist/model/converter/job/environment.d.ts.map +1 -0
  41. package/dist/model/converter/job/environment.js +28 -0
  42. package/dist/model/converter/job/environment.js.map +1 -0
  43. package/dist/model/converter/job/inputs.d.ts +8 -0
  44. package/dist/model/converter/job/inputs.d.ts.map +1 -0
  45. package/dist/model/converter/job/inputs.js +38 -0
  46. package/dist/model/converter/job/inputs.js.map +1 -0
  47. package/dist/model/converter/job/runs-on.d.ts +9 -0
  48. package/dist/model/converter/job/runs-on.d.ts.map +1 -0
  49. package/dist/model/converter/job/runs-on.js +78 -0
  50. package/dist/model/converter/job/runs-on.js.map +1 -0
  51. package/dist/model/converter/job/secrets.d.ts +4 -0
  52. package/dist/model/converter/job/secrets.d.ts.map +1 -0
  53. package/dist/model/converter/job/secrets.js +32 -0
  54. package/dist/model/converter/job/secrets.js.map +1 -0
  55. package/dist/model/converter/job.d.ts +5 -0
  56. package/dist/model/converter/job.d.ts.map +1 -0
  57. package/dist/model/converter/job.js +144 -0
  58. package/dist/model/converter/job.js.map +1 -0
  59. package/dist/model/converter/jobs.d.ts +5 -0
  60. package/dist/model/converter/jobs.d.ts.map +1 -0
  61. package/dist/model/converter/jobs.js +74 -0
  62. package/dist/model/converter/jobs.js.map +1 -0
  63. package/dist/model/converter/referencedWorkflow.d.ts +5 -0
  64. package/dist/model/converter/referencedWorkflow.d.ts.map +1 -0
  65. package/dist/model/converter/referencedWorkflow.js +85 -0
  66. package/dist/model/converter/referencedWorkflow.js.map +1 -0
  67. package/dist/model/converter/steps.d.ts +5 -0
  68. package/dist/model/converter/steps.d.ts.map +1 -0
  69. package/dist/model/converter/steps.js +113 -0
  70. package/dist/model/converter/steps.js.map +1 -0
  71. package/dist/model/converter/string-list.d.ts +3 -0
  72. package/dist/model/converter/string-list.d.ts.map +1 -0
  73. package/dist/model/converter/string-list.js +8 -0
  74. package/dist/model/converter/string-list.js.map +1 -0
  75. package/dist/model/converter/workflow-call.d.ts +5 -0
  76. package/dist/model/converter/workflow-call.d.ts.map +1 -0
  77. package/dist/model/converter/workflow-call.js +45 -0
  78. package/dist/model/converter/workflow-call.js.map +1 -0
  79. package/dist/model/converter/workflow-dispatch.d.ts +9 -0
  80. package/dist/model/converter/workflow-dispatch.d.ts.map +1 -0
  81. package/dist/model/converter/workflow-dispatch.js +82 -0
  82. package/dist/model/converter/workflow-dispatch.js.map +1 -0
  83. package/dist/model/type-guards.d.ts +6 -0
  84. package/dist/model/type-guards.d.ts.map +1 -0
  85. package/dist/model/type-guards.js +13 -0
  86. package/dist/model/type-guards.js.map +1 -0
  87. package/dist/model/workflow-template.d.ts +157 -0
  88. package/dist/model/workflow-template.d.ts.map +1 -0
  89. package/dist/model/workflow-template.js +8 -0
  90. package/dist/model/workflow-template.js.map +1 -0
  91. package/dist/templates/allowed-context.d.ts +6 -0
  92. package/dist/templates/allowed-context.d.ts.map +1 -0
  93. package/dist/templates/allowed-context.js +30 -0
  94. package/dist/templates/allowed-context.js.map +1 -0
  95. package/dist/templates/json-object-reader.d.ts +20 -0
  96. package/dist/templates/json-object-reader.d.ts.map +1 -0
  97. package/dist/templates/json-object-reader.js +135 -0
  98. package/dist/templates/json-object-reader.js.map +1 -0
  99. package/dist/templates/object-reader.d.ts +15 -0
  100. package/dist/templates/object-reader.d.ts.map +1 -0
  101. package/dist/templates/object-reader.js +2 -0
  102. package/dist/templates/object-reader.js.map +1 -0
  103. package/dist/templates/parse-event.d.ts +16 -0
  104. package/dist/templates/parse-event.d.ts.map +1 -0
  105. package/dist/templates/parse-event.js +17 -0
  106. package/dist/templates/parse-event.js.map +1 -0
  107. package/dist/templates/schema/boolean-definition.d.ts +10 -0
  108. package/dist/templates/schema/boolean-definition.d.ts.map +1 -0
  109. package/dist/templates/schema/boolean-definition.js +41 -0
  110. package/dist/templates/schema/boolean-definition.js.map +1 -0
  111. package/dist/templates/schema/definition-info.d.ts +16 -0
  112. package/dist/templates/schema/definition-info.d.ts.map +1 -0
  113. package/dist/templates/schema/definition-info.js +40 -0
  114. package/dist/templates/schema/definition-info.js.map +1 -0
  115. package/dist/templates/schema/definition-type.d.ts +11 -0
  116. package/dist/templates/schema/definition-type.d.ts.map +1 -0
  117. package/dist/templates/schema/definition-type.js +12 -0
  118. package/dist/templates/schema/definition-type.js.map +1 -0
  119. package/dist/templates/schema/definition.d.ts +24 -0
  120. package/dist/templates/schema/definition.d.ts.map +1 -0
  121. package/dist/templates/schema/definition.js +62 -0
  122. package/dist/templates/schema/definition.js.map +1 -0
  123. package/dist/templates/schema/index.d.ts +2 -0
  124. package/dist/templates/schema/index.d.ts.map +1 -0
  125. package/dist/templates/schema/index.js +2 -0
  126. package/dist/templates/schema/index.js.map +1 -0
  127. package/dist/templates/schema/mapping-definition.d.ts +16 -0
  128. package/dist/templates/schema/mapping-definition.d.ts.map +1 -0
  129. package/dist/templates/schema/mapping-definition.js +81 -0
  130. package/dist/templates/schema/mapping-definition.js.map +1 -0
  131. package/dist/templates/schema/null-definition.d.ts +10 -0
  132. package/dist/templates/schema/null-definition.d.ts.map +1 -0
  133. package/dist/templates/schema/null-definition.js +41 -0
  134. package/dist/templates/schema/null-definition.js.map +1 -0
  135. package/dist/templates/schema/number-definition.d.ts +10 -0
  136. package/dist/templates/schema/number-definition.d.ts.map +1 -0
  137. package/dist/templates/schema/number-definition.js +41 -0
  138. package/dist/templates/schema/number-definition.js.map +1 -0
  139. package/dist/templates/schema/one-of-definition.d.ts +15 -0
  140. package/dist/templates/schema/one-of-definition.d.ts.map +1 -0
  141. package/dist/templates/schema/one-of-definition.js +154 -0
  142. package/dist/templates/schema/one-of-definition.js.map +1 -0
  143. package/dist/templates/schema/property-definition.d.ts +8 -0
  144. package/dist/templates/schema/property-definition.d.ts.map +1 -0
  145. package/dist/templates/schema/property-definition.js +31 -0
  146. package/dist/templates/schema/property-definition.js.map +1 -0
  147. package/dist/templates/schema/scalar-definition.d.ts +7 -0
  148. package/dist/templates/schema/scalar-definition.d.ts.map +1 -0
  149. package/dist/templates/schema/scalar-definition.js +7 -0
  150. package/dist/templates/schema/scalar-definition.js.map +1 -0
  151. package/dist/templates/schema/sequence-definition.d.ts +11 -0
  152. package/dist/templates/schema/sequence-definition.d.ts.map +1 -0
  153. package/dist/templates/schema/sequence-definition.js +47 -0
  154. package/dist/templates/schema/sequence-definition.js.map +1 -0
  155. package/dist/templates/schema/string-definition.d.ts +14 -0
  156. package/dist/templates/schema/string-definition.d.ts.map +1 -0
  157. package/dist/templates/schema/string-definition.js +79 -0
  158. package/dist/templates/schema/string-definition.js.map +1 -0
  159. package/dist/templates/schema/template-schema.d.ts +47 -0
  160. package/dist/templates/schema/template-schema.d.ts.map +1 -0
  161. package/dist/templates/schema/template-schema.js +377 -0
  162. package/dist/templates/schema/template-schema.js.map +1 -0
  163. package/dist/templates/template-constants.d.ts +49 -0
  164. package/dist/templates/template-constants.d.ts.map +1 -0
  165. package/dist/templates/template-constants.js +49 -0
  166. package/dist/templates/template-constants.js.map +1 -0
  167. package/dist/templates/template-context.d.ts +66 -0
  168. package/dist/templates/template-context.d.ts.map +1 -0
  169. package/dist/templates/template-context.js +118 -0
  170. package/dist/templates/template-context.js.map +1 -0
  171. package/dist/templates/template-reader.d.ts +9 -0
  172. package/dist/templates/template-reader.d.ts.map +1 -0
  173. package/dist/templates/template-reader.js +595 -0
  174. package/dist/templates/template-reader.js.map +1 -0
  175. package/dist/templates/template-validation-error.d.ts +14 -0
  176. package/dist/templates/template-validation-error.d.ts.map +1 -0
  177. package/dist/templates/template-validation-error.js +21 -0
  178. package/dist/templates/template-validation-error.js.map +1 -0
  179. package/dist/templates/tokens/basic-expression-token.d.ts +27 -0
  180. package/dist/templates/tokens/basic-expression-token.d.ts.map +1 -0
  181. package/dist/templates/tokens/basic-expression-token.js +38 -0
  182. package/dist/templates/tokens/basic-expression-token.js.map +1 -0
  183. package/dist/templates/tokens/boolean-token.d.ts +12 -0
  184. package/dist/templates/tokens/boolean-token.d.ts.map +1 -0
  185. package/dist/templates/tokens/boolean-token.js +23 -0
  186. package/dist/templates/tokens/boolean-token.js.map +1 -0
  187. package/dist/templates/tokens/expression-token.d.ts +11 -0
  188. package/dist/templates/tokens/expression-token.d.ts.map +1 -0
  189. package/dist/templates/tokens/expression-token.js +24 -0
  190. package/dist/templates/tokens/expression-token.js.map +1 -0
  191. package/dist/templates/tokens/index.d.ts +14 -0
  192. package/dist/templates/tokens/index.d.ts.map +1 -0
  193. package/dist/templates/tokens/index.js +14 -0
  194. package/dist/templates/tokens/index.js.map +1 -0
  195. package/dist/templates/tokens/insert-expression-token.d.ts +12 -0
  196. package/dist/templates/tokens/insert-expression-token.d.ts.map +1 -0
  197. package/dist/templates/tokens/insert-expression-token.js +26 -0
  198. package/dist/templates/tokens/insert-expression-token.js.map +1 -0
  199. package/dist/templates/tokens/key-value-pair.d.ts +8 -0
  200. package/dist/templates/tokens/key-value-pair.d.ts.map +1 -0
  201. package/dist/templates/tokens/key-value-pair.js +7 -0
  202. package/dist/templates/tokens/key-value-pair.js.map +1 -0
  203. package/dist/templates/tokens/literal-token.d.ts +14 -0
  204. package/dist/templates/tokens/literal-token.d.ts.map +1 -0
  205. package/dist/templates/tokens/literal-token.js +22 -0
  206. package/dist/templates/tokens/literal-token.js.map +1 -0
  207. package/dist/templates/tokens/mapping-token.d.ts +20 -0
  208. package/dist/templates/tokens/mapping-token.d.ts.map +1 -0
  209. package/dist/templates/tokens/mapping-token.js +58 -0
  210. package/dist/templates/tokens/mapping-token.js.map +1 -0
  211. package/dist/templates/tokens/null-token.d.ts +10 -0
  212. package/dist/templates/tokens/null-token.d.ts.map +1 -0
  213. package/dist/templates/tokens/null-token.js +19 -0
  214. package/dist/templates/tokens/null-token.js.map +1 -0
  215. package/dist/templates/tokens/number-token.d.ts +12 -0
  216. package/dist/templates/tokens/number-token.d.ts.map +1 -0
  217. package/dist/templates/tokens/number-token.js +23 -0
  218. package/dist/templates/tokens/number-token.js.map +1 -0
  219. package/dist/templates/tokens/scalar-token.d.ts +14 -0
  220. package/dist/templates/tokens/scalar-token.d.ts.map +1 -0
  221. package/dist/templates/tokens/scalar-token.js +22 -0
  222. package/dist/templates/tokens/scalar-token.js.map +1 -0
  223. package/dist/templates/tokens/sequence-token.d.ts +18 -0
  224. package/dist/templates/tokens/sequence-token.d.ts.map +1 -0
  225. package/dist/templates/tokens/sequence-token.js +47 -0
  226. package/dist/templates/tokens/sequence-token.js.map +1 -0
  227. package/dist/templates/tokens/serialization.d.ts +21 -0
  228. package/dist/templates/tokens/serialization.d.ts.map +1 -0
  229. package/dist/templates/tokens/serialization.js +2 -0
  230. package/dist/templates/tokens/serialization.js.map +1 -0
  231. package/dist/templates/tokens/string-token.d.ts +12 -0
  232. package/dist/templates/tokens/string-token.d.ts.map +1 -0
  233. package/dist/templates/tokens/string-token.js +21 -0
  234. package/dist/templates/tokens/string-token.js.map +1 -0
  235. package/dist/templates/tokens/template-token.d.ts +70 -0
  236. package/dist/templates/tokens/template-token.d.ts.map +1 -0
  237. package/dist/templates/tokens/template-token.js +138 -0
  238. package/dist/templates/tokens/template-token.js.map +1 -0
  239. package/dist/templates/tokens/token-range.d.ts +12 -0
  240. package/dist/templates/tokens/token-range.d.ts.map +1 -0
  241. package/dist/templates/tokens/token-range.js +2 -0
  242. package/dist/templates/tokens/token-range.js.map +1 -0
  243. package/dist/templates/tokens/traversal-state.d.ts +12 -0
  244. package/dist/templates/tokens/traversal-state.d.ts.map +1 -0
  245. package/dist/templates/tokens/traversal-state.js +54 -0
  246. package/dist/templates/tokens/traversal-state.js.map +1 -0
  247. package/dist/templates/tokens/type-guards.d.ts +18 -0
  248. package/dist/templates/tokens/type-guards.d.ts.map +1 -0
  249. package/dist/templates/tokens/type-guards.js +28 -0
  250. package/dist/templates/tokens/type-guards.js.map +1 -0
  251. package/dist/templates/tokens/types.d.ts +12 -0
  252. package/dist/templates/tokens/types.d.ts.map +1 -0
  253. package/dist/templates/tokens/types.js +37 -0
  254. package/dist/templates/tokens/types.js.map +1 -0
  255. package/dist/templates/trace-writer.d.ts +11 -0
  256. package/dist/templates/trace-writer.d.ts.map +1 -0
  257. package/dist/templates/trace-writer.js +12 -0
  258. package/dist/templates/trace-writer.js.map +1 -0
  259. package/dist/test-utils/null-trace.d.ts +3 -0
  260. package/dist/test-utils/null-trace.d.ts.map +1 -0
  261. package/dist/test-utils/null-trace.js +3 -0
  262. package/dist/test-utils/null-trace.js.map +1 -0
  263. package/dist/workflow-v1.0.json +2511 -0
  264. package/dist/workflows/file-provider.d.ts +6 -0
  265. package/dist/workflows/file-provider.d.ts.map +1 -0
  266. package/dist/workflows/file-provider.js +2 -0
  267. package/dist/workflows/file-provider.js.map +1 -0
  268. package/dist/workflows/file-reference.d.ts +13 -0
  269. package/dist/workflows/file-reference.d.ts.map +1 -0
  270. package/dist/workflows/file-reference.js +25 -0
  271. package/dist/workflows/file-reference.js.map +1 -0
  272. package/dist/workflows/file.d.ts +5 -0
  273. package/dist/workflows/file.d.ts.map +1 -0
  274. package/dist/workflows/file.js +2 -0
  275. package/dist/workflows/file.js.map +1 -0
  276. package/dist/workflows/workflow-constants.d.ts +2 -0
  277. package/dist/workflows/workflow-constants.d.ts.map +1 -0
  278. package/dist/workflows/workflow-constants.js +2 -0
  279. package/dist/workflows/workflow-constants.js.map +1 -0
  280. package/dist/workflows/workflow-parser.d.ts +11 -0
  281. package/dist/workflows/workflow-parser.d.ts.map +1 -0
  282. package/dist/workflows/workflow-parser.js +28 -0
  283. package/dist/workflows/workflow-parser.js.map +1 -0
  284. package/dist/workflows/workflow-schema.d.ts +3 -0
  285. package/dist/workflows/workflow-schema.d.ts.map +1 -0
  286. package/dist/workflows/workflow-schema.js +12 -0
  287. package/dist/workflows/workflow-schema.js.map +1 -0
  288. package/dist/workflows/yaml-object-reader.d.ts +26 -0
  289. package/dist/workflows/yaml-object-reader.d.ts.map +1 -0
  290. package/dist/workflows/yaml-object-reader.js +178 -0
  291. package/dist/workflows/yaml-object-reader.js.map +1 -0
  292. package/package.json +70 -0
@@ -0,0 +1,595 @@
1
+ // template-reader *just* does schema validation
2
+ /* eslint-disable @typescript-eslint/no-non-null-assertion */
3
+ import { DefinitionInfo } from "./schema/definition-info";
4
+ import { DefinitionType } from "./schema/definition-type";
5
+ import { StringDefinition } from "./schema/string-definition";
6
+ import { ANY, CLOSE_EXPRESSION, INSERT_DIRECTIVE, OPEN_EXPRESSION } from "./template-constants";
7
+ import { BasicExpressionToken, ExpressionToken, InsertExpressionToken, StringToken } from "./tokens";
8
+ import { isString } from "./tokens/type-guards";
9
+ import { TokenType } from "./tokens/types";
10
+ const WHITESPACE_PATTERN = /\s/;
11
+ export function readTemplate(context, type, objectReader, fileId) {
12
+ const reader = new TemplateReader(context, objectReader, fileId);
13
+ let value;
14
+ try {
15
+ objectReader.validateStart();
16
+ const definition = new DefinitionInfo(context.schema, type);
17
+ value = reader.readValue(definition);
18
+ objectReader.validateEnd();
19
+ }
20
+ catch (err) {
21
+ context.error(fileId, err);
22
+ }
23
+ return value;
24
+ }
25
+ class TemplateReader {
26
+ constructor(context, objectReader, fileId) {
27
+ this._context = context;
28
+ this._schema = context.schema;
29
+ this._objectReader = objectReader;
30
+ this._fileId = fileId;
31
+ }
32
+ readValue(definition) {
33
+ // Scalar
34
+ const literal = this._objectReader.allowLiteral();
35
+ if (literal) {
36
+ let scalar = this.parseScalar(literal, definition);
37
+ scalar = this.validate(scalar, definition);
38
+ return scalar;
39
+ }
40
+ // Sequence
41
+ const sequence = this._objectReader.allowSequenceStart();
42
+ if (sequence) {
43
+ const sequenceDefinition = definition.getDefinitionsOfType(DefinitionType.Sequence)[0];
44
+ // Legal
45
+ if (sequenceDefinition) {
46
+ const itemDefinition = new DefinitionInfo(definition, sequenceDefinition.itemType);
47
+ // Add each item
48
+ while (!this._objectReader.allowSequenceEnd()) {
49
+ const item = this.readValue(itemDefinition);
50
+ sequence.add(item);
51
+ }
52
+ }
53
+ // Illegal
54
+ else {
55
+ // Error
56
+ this._context.error(sequence, "A sequence was not expected");
57
+ // Skip each item
58
+ while (!this._objectReader.allowSequenceEnd()) {
59
+ this.skipValue();
60
+ }
61
+ }
62
+ sequence.definitionInfo = definition;
63
+ return sequence;
64
+ }
65
+ // Mapping
66
+ const mapping = this._objectReader.allowMappingStart();
67
+ if (mapping) {
68
+ const mappingDefinitions = definition.getDefinitionsOfType(DefinitionType.Mapping);
69
+ // Legal
70
+ if (mappingDefinitions.length > 0) {
71
+ if (mappingDefinitions.length > 1 ||
72
+ Object.keys(mappingDefinitions[0].properties).length > 0 ||
73
+ !mappingDefinitions[0].looseKeyType) {
74
+ this.handleMappingWithWellKnownProperties(definition, mappingDefinitions, mapping);
75
+ }
76
+ else {
77
+ const keyDefinition = new DefinitionInfo(definition, mappingDefinitions[0].looseKeyType);
78
+ const valueDefinition = new DefinitionInfo(definition, mappingDefinitions[0].looseValueType);
79
+ this.handleMappingWithAllLooseProperties(definition, keyDefinition, valueDefinition, mappingDefinitions[0], mapping);
80
+ }
81
+ }
82
+ // Illegal
83
+ else {
84
+ this._context.error(mapping, "A mapping was not expected");
85
+ while (!this._objectReader.allowMappingEnd()) {
86
+ this.skipValue();
87
+ this.skipValue();
88
+ }
89
+ }
90
+ // handleMappingWithWellKnownProperties will only set a definition
91
+ // if it can identify a single matching definition
92
+ if (!mapping.definitionInfo) {
93
+ mapping.definitionInfo = definition;
94
+ }
95
+ return mapping;
96
+ }
97
+ throw new Error("Expected a scalar value, a sequence, or a mapping");
98
+ }
99
+ handleMappingWithWellKnownProperties(definition, mappingDefinitions, mapping) {
100
+ // Check if loose properties are allowed
101
+ let looseKeyType;
102
+ let looseValueType;
103
+ let looseKeyDefinition;
104
+ let looseValueDefinition;
105
+ if (mappingDefinitions[0].looseKeyType) {
106
+ looseKeyType = mappingDefinitions[0].looseKeyType;
107
+ looseValueType = mappingDefinitions[0].looseValueType;
108
+ }
109
+ const upperKeys = {};
110
+ let hasExpressionKey = false;
111
+ let rawLiteral;
112
+ while ((rawLiteral = this._objectReader.allowLiteral())) {
113
+ const nextKeyScalar = this.parseScalar(rawLiteral, definition);
114
+ // Expression
115
+ if (nextKeyScalar.isExpression) {
116
+ hasExpressionKey = true;
117
+ // Legal
118
+ if (definition.allowedContext.length > 0) {
119
+ const anyDefinition = new DefinitionInfo(definition, ANY);
120
+ mapping.add(nextKeyScalar, this.readValue(anyDefinition));
121
+ }
122
+ // Illegal
123
+ else {
124
+ this._context.error(nextKeyScalar, "A template expression is not allowed in this context");
125
+ this.skipValue();
126
+ }
127
+ continue;
128
+ }
129
+ // Convert to StringToken if required
130
+ const nextKey = nextKeyScalar.templateTokenType === TokenType.String
131
+ ? nextKeyScalar
132
+ : new StringToken(nextKeyScalar.file, nextKeyScalar.range, nextKeyScalar.toString(), nextKeyScalar.definitionInfo);
133
+ // Duplicate
134
+ if (nextKey.value) {
135
+ const upperKey = nextKey.value.toUpperCase();
136
+ if (upperKeys[upperKey]) {
137
+ this._context.error(nextKey, `'${nextKey.value}' is already defined`);
138
+ this.skipValue();
139
+ continue;
140
+ }
141
+ upperKeys[upperKey] = true;
142
+ }
143
+ // Well known
144
+ const nextPropertyDef = this._schema.matchPropertyAndFilter(mappingDefinitions, nextKey.value);
145
+ if (nextPropertyDef) {
146
+ const nextDefinition = new DefinitionInfo(definition, nextPropertyDef.type);
147
+ // Store the definition on the key, the value may have its own definition
148
+ nextKey.definitionInfo = nextDefinition;
149
+ // If the property has a description, it's a parameter that uses a shared type
150
+ // and we need to make sure its description is set if there is one
151
+ if (nextPropertyDef.description) {
152
+ nextKey.description = nextPropertyDef.description;
153
+ }
154
+ const nextValue = this.readValue(nextDefinition);
155
+ mapping.add(nextKey, nextValue);
156
+ continue;
157
+ }
158
+ // Loose
159
+ if (looseKeyType) {
160
+ if (!looseKeyDefinition) {
161
+ looseKeyDefinition = new DefinitionInfo(definition, looseKeyType);
162
+ looseValueDefinition = new DefinitionInfo(definition, looseValueType);
163
+ }
164
+ this.validate(nextKey, looseKeyDefinition);
165
+ // Store the definition on the key, the value may have its own definition
166
+ const nextDefinition = new DefinitionInfo(definition, mappingDefinitions[0].looseValueType);
167
+ nextKey.definitionInfo = nextDefinition;
168
+ const nextValue = this.readValue(looseValueDefinition);
169
+ mapping.add(nextKey, nextValue);
170
+ continue;
171
+ }
172
+ // Error
173
+ this._context.error(nextKey, `Unexpected value '${nextKey.value}'`);
174
+ this.skipValue();
175
+ }
176
+ // If we matched a single definition from multiple,
177
+ // update the token's definition to enable more specific editor
178
+ // completion and validation
179
+ if (mappingDefinitions.length === 1) {
180
+ mapping.definitionInfo = new DefinitionInfo(definition, mappingDefinitions[0]);
181
+ }
182
+ // Unable to filter to one definition
183
+ if (mappingDefinitions.length > 1) {
184
+ const hitCount = {};
185
+ for (const mappingDefinition of mappingDefinitions) {
186
+ for (const key of Object.keys(mappingDefinition.properties)) {
187
+ hitCount[key] = (hitCount[key] ?? 0) + 1;
188
+ }
189
+ }
190
+ const nonDuplicates = [];
191
+ for (const key of Object.keys(hitCount)) {
192
+ if (hitCount[key] === 1) {
193
+ nonDuplicates.push(key);
194
+ }
195
+ }
196
+ this._context.error(mapping, `There's not enough info to determine what you meant. Add one of these properties: ${nonDuplicates
197
+ .sort()
198
+ .join(", ")}`);
199
+ }
200
+ // Check required properties
201
+ else if (mappingDefinitions.length === 1 && !hasExpressionKey) {
202
+ for (const propertyName of Object.keys(mappingDefinitions[0].properties)) {
203
+ const propertyDef = mappingDefinitions[0].properties[propertyName];
204
+ if (propertyDef.required && !upperKeys[propertyName.toUpperCase()]) {
205
+ this._context.error(mapping, `Required property is missing: ${propertyName}`);
206
+ }
207
+ }
208
+ }
209
+ this.expectMappingEnd();
210
+ }
211
+ handleMappingWithAllLooseProperties(definition, keyDefinition, valueDefinition, mappingDefinition, mapping) {
212
+ let nextValue;
213
+ const upperKeys = {};
214
+ let rawLiteral;
215
+ while ((rawLiteral = this._objectReader.allowLiteral())) {
216
+ const nextKeyScalar = this.parseScalar(rawLiteral, definition);
217
+ nextKeyScalar.definitionInfo = keyDefinition;
218
+ // Expression
219
+ if (nextKeyScalar.isExpression) {
220
+ // Legal
221
+ if (definition.allowedContext.length > 0) {
222
+ nextValue = this.readValue(valueDefinition);
223
+ mapping.add(nextKeyScalar, nextValue);
224
+ }
225
+ // Illegal
226
+ else {
227
+ this._context.error(nextKeyScalar, "A template expression is not allowed in this context");
228
+ this.skipValue();
229
+ }
230
+ continue;
231
+ }
232
+ // Convert to StringToken if required
233
+ const nextKey = nextKeyScalar.templateTokenType === TokenType.String
234
+ ? nextKeyScalar
235
+ : new StringToken(nextKeyScalar.file, nextKeyScalar.range, nextKeyScalar.toString(), nextKeyScalar.definitionInfo);
236
+ // Duplicate
237
+ if (nextKey.value) {
238
+ const upperKey = nextKey.value.toUpperCase();
239
+ if (upperKeys[upperKey]) {
240
+ this._context.error(nextKey, `'${nextKey.value}' is already defined`);
241
+ this.skipValue();
242
+ continue;
243
+ }
244
+ upperKeys[upperKey] = true;
245
+ }
246
+ // Validate
247
+ this.validate(nextKey, keyDefinition);
248
+ // Store the definition on the key, the value may have its own definition
249
+ const nextDefinition = new DefinitionInfo(definition, mappingDefinition.looseValueType);
250
+ nextKey.definitionInfo = nextDefinition;
251
+ // Add the pair
252
+ nextValue = this.readValue(valueDefinition);
253
+ mapping.add(nextKey, nextValue);
254
+ }
255
+ this.expectMappingEnd();
256
+ }
257
+ expectMappingEnd() {
258
+ if (!this._objectReader.allowMappingEnd()) {
259
+ throw new Error("Expected mapping end"); // Should never happen
260
+ }
261
+ }
262
+ skipValue() {
263
+ // Scalar
264
+ if (this._objectReader.allowLiteral()) {
265
+ // Intentionally empty
266
+ }
267
+ // Sequence
268
+ else if (this._objectReader.allowSequenceStart()) {
269
+ while (!this._objectReader.allowSequenceEnd()) {
270
+ this.skipValue();
271
+ }
272
+ }
273
+ // Mapping
274
+ else if (this._objectReader.allowMappingStart()) {
275
+ while (!this._objectReader.allowMappingEnd()) {
276
+ this.skipValue();
277
+ this.skipValue();
278
+ }
279
+ }
280
+ // Unexpected
281
+ else {
282
+ throw new Error("Expected a scalar value, a sequence, or a mapping");
283
+ }
284
+ }
285
+ validate(scalar, definition) {
286
+ switch (scalar.templateTokenType) {
287
+ case TokenType.Null:
288
+ case TokenType.Boolean:
289
+ case TokenType.Number:
290
+ case TokenType.String: {
291
+ const literal = scalar;
292
+ // Legal
293
+ const scalarDefinitions = definition.getScalarDefinitions();
294
+ let relevantDefinition;
295
+ if ((relevantDefinition = scalarDefinitions.find(x => x.isMatch(literal)))) {
296
+ scalar.definitionInfo = new DefinitionInfo(definition, relevantDefinition);
297
+ return scalar;
298
+ }
299
+ // Not a string, convert
300
+ if (literal.templateTokenType !== TokenType.String) {
301
+ const stringLiteral = new StringToken(literal.file, literal.range, literal.toString(), literal.definitionInfo);
302
+ // Legal
303
+ if ((relevantDefinition = scalarDefinitions.find(x => x.isMatch(stringLiteral)))) {
304
+ stringLiteral.definitionInfo = new DefinitionInfo(definition, relevantDefinition);
305
+ return stringLiteral;
306
+ }
307
+ }
308
+ // Illegal
309
+ this._context.error(literal, `Unexpected value '${literal.toString()}'`);
310
+ return scalar;
311
+ }
312
+ case TokenType.BasicExpression:
313
+ // Illegal
314
+ if (definition.allowedContext.length === 0) {
315
+ this._context.error(scalar, "A template expression is not allowed in this context");
316
+ }
317
+ return scalar;
318
+ default:
319
+ this._context.error(scalar, `Unexpected value '${scalar.toString()}'`);
320
+ return scalar;
321
+ }
322
+ }
323
+ parseScalar(token, definitionInfo) {
324
+ // Not a string
325
+ if (!isString(token) || !token.value) {
326
+ return token;
327
+ }
328
+ const allowedContext = definitionInfo.allowedContext;
329
+ const raw = token.source || token.value;
330
+ let startExpression = raw.indexOf(OPEN_EXPRESSION);
331
+ if (startExpression < 0) {
332
+ // Doesn't contain "${{"
333
+ // Check if value should still be evaluated as an expression
334
+ if (definitionInfo.definition instanceof StringDefinition && definitionInfo.definition.isExpression) {
335
+ const expression = this.parseIntoExpressionToken(token.range, raw, allowedContext, token, definitionInfo);
336
+ if (expression) {
337
+ return expression;
338
+ }
339
+ }
340
+ return token;
341
+ }
342
+ // Break the value into segments of LiteralToken and ExpressionToken
343
+ let encounteredError = false;
344
+ const segments = [];
345
+ let i = 0;
346
+ while (i < raw.length) {
347
+ // An expression starts here
348
+ if (i === startExpression) {
349
+ // Find the end of the expression - i.e. "}}"
350
+ startExpression = i;
351
+ let endExpression = -1;
352
+ let inString = false;
353
+ for (i += OPEN_EXPRESSION.length; i < raw.length; i++) {
354
+ if (raw[i] === "'") {
355
+ inString = !inString; // Note, this handles escaped single quotes gracefully. E.x. 'foo''bar'
356
+ }
357
+ else if (!inString && raw[i] === "}" && raw[i - 1] === "}") {
358
+ endExpression = i;
359
+ i++;
360
+ break;
361
+ }
362
+ }
363
+ // Check if not closed
364
+ if (endExpression < startExpression) {
365
+ this._context.error(token, "The expression is not closed. An unescaped ${{ sequence was found, but the closing }} sequence was not found.");
366
+ return token;
367
+ }
368
+ // Parse the expression
369
+ const rawExpression = raw.substr(startExpression + OPEN_EXPRESSION.length, endExpression - startExpression + 1 - OPEN_EXPRESSION.length - CLOSE_EXPRESSION.length);
370
+ let tr = token.range;
371
+ if (tr.start.line === tr.end.line) {
372
+ // If it's a single line expression, adjust the range to only cover the sub-expression
373
+ tr = {
374
+ start: { line: tr.start.line, column: tr.start.column + startExpression },
375
+ end: { line: tr.end.line, column: tr.start.column + endExpression + 1 }
376
+ };
377
+ }
378
+ else {
379
+ // Adjust the range to only cover the expression for multi-line strings
380
+ const startRaw = raw.substring(0, startExpression);
381
+ const adjustedStartLine = startRaw.split("\n").length;
382
+ const beginningOfLine = startRaw.lastIndexOf("\n");
383
+ const adjustedStart = startExpression - beginningOfLine;
384
+ const adjustedEnd = endExpression - beginningOfLine + 1;
385
+ tr = {
386
+ start: { line: tr.start.line + adjustedStartLine, column: adjustedStart },
387
+ end: { line: tr.start.line + adjustedStartLine, column: adjustedEnd }
388
+ };
389
+ }
390
+ const expression = this.parseIntoExpressionToken(tr, rawExpression, allowedContext, token, definitionInfo);
391
+ if (!expression) {
392
+ // Record that we've hit an error but continue to validate any other expressions
393
+ // that might be in the string
394
+ encounteredError = true;
395
+ }
396
+ else {
397
+ // Check if a directive was used when not allowed
398
+ if (expression.directive && (startExpression !== 0 || i < raw.length)) {
399
+ this._context.error(token, `The directive '${expression.directive}' is not allowed in this context. Directives are not supported for expressions that are embedded within a string. Directives are only supported when the entire value is an expression.`);
400
+ return token;
401
+ }
402
+ // Add the segment
403
+ segments.push(expression);
404
+ }
405
+ // Look for the next expression
406
+ startExpression = raw.indexOf(OPEN_EXPRESSION, i);
407
+ }
408
+ // The next expression is further ahead
409
+ else if (i < startExpression) {
410
+ // Append the segment
411
+ this.addString(segments, token.range, raw.substr(i, startExpression - i), token.definitionInfo);
412
+ // Adjust the position
413
+ i = startExpression;
414
+ }
415
+ // No remaining expressions
416
+ else {
417
+ this.addString(segments, token.range, raw.substr(i), token.definitionInfo);
418
+ break;
419
+ }
420
+ }
421
+ // If we've hit any error during parsing, return the original token
422
+ if (encounteredError) {
423
+ return token;
424
+ }
425
+ // Check if can convert to a literal
426
+ // For example, the escaped expression: ${{ '{{ this is a literal }}' }}
427
+ if (segments.length === 1 && segments[0].templateTokenType === TokenType.BasicExpression) {
428
+ const basicExpression = segments[0];
429
+ const str = this.getExpressionString(basicExpression.expression);
430
+ if (str !== undefined) {
431
+ return new StringToken(this._fileId, token.range, str, token.definitionInfo);
432
+ }
433
+ }
434
+ // Check if only one segment
435
+ if (segments.length === 1) {
436
+ return segments[0];
437
+ }
438
+ // Build the new expression, using the format function
439
+ const format = [];
440
+ const args = [];
441
+ const expressionTokens = [];
442
+ let argIndex = 0;
443
+ for (const segment of segments) {
444
+ if (isString(segment)) {
445
+ const text = segment.value
446
+ .replace(/'/g, "''") // Escape quotes
447
+ .replace(/\{/g, "{{") // Escape braces
448
+ .replace(/\}/g, "}}");
449
+ format.push(text);
450
+ }
451
+ else {
452
+ format.push(`{${argIndex}}`); // Append format arg
453
+ argIndex++;
454
+ const expression = segment;
455
+ args.push(", ");
456
+ args.push(expression.expression);
457
+ expressionTokens.push(expression);
458
+ }
459
+ }
460
+ return new BasicExpressionToken(this._fileId, token.range, `format('${format.join("")}'${args.join("")})`, definitionInfo, expressionTokens, raw);
461
+ }
462
+ parseIntoExpressionToken(tr, rawExpression, allowedContext, token, definitionInfo) {
463
+ const parseExpressionResult = this.parseExpression(tr, token, rawExpression, allowedContext, definitionInfo);
464
+ // Check for error
465
+ if (parseExpressionResult.error) {
466
+ this._context.error(token, parseExpressionResult.error, tr);
467
+ return undefined;
468
+ }
469
+ return parseExpressionResult.expression;
470
+ }
471
+ parseExpression(range, token, value, allowedContext, definitionInfo) {
472
+ const trimmed = value.trim();
473
+ // Check if the value is empty
474
+ if (!trimmed) {
475
+ return {
476
+ error: new Error("An expression was expected")
477
+ };
478
+ }
479
+ // Try to find a matching directive
480
+ const matchDirectiveResult = this.matchDirective(trimmed, INSERT_DIRECTIVE, 0);
481
+ if (matchDirectiveResult.isMatch) {
482
+ return {
483
+ expression: new InsertExpressionToken(this._fileId, range, definitionInfo)
484
+ };
485
+ }
486
+ else if (matchDirectiveResult.error) {
487
+ return {
488
+ error: matchDirectiveResult.error
489
+ };
490
+ }
491
+ // Check if valid expression
492
+ try {
493
+ ExpressionToken.validateExpression(trimmed, allowedContext);
494
+ }
495
+ catch (err) {
496
+ return {
497
+ error: err
498
+ };
499
+ }
500
+ const startTrim = value.length - value.trimStart().length;
501
+ const endTrim = value.length - value.trimEnd().length;
502
+ const expressionRange = {
503
+ start: {
504
+ ...range.start,
505
+ column: range.start.column + OPEN_EXPRESSION.length + startTrim
506
+ },
507
+ end: {
508
+ ...range.end,
509
+ column: range.end.column - CLOSE_EXPRESSION.length - endTrim
510
+ }
511
+ };
512
+ // Return the expression
513
+ return {
514
+ expression: new BasicExpressionToken(this._fileId, range, trimmed, definitionInfo, undefined, token.source, expressionRange),
515
+ error: undefined
516
+ };
517
+ }
518
+ addString(segments, range, value, definition) {
519
+ // If the last segment was a LiteralToken, then append to the last segment
520
+ if (segments.length > 0 && segments[segments.length - 1].templateTokenType === TokenType.String) {
521
+ const lastSegment = segments[segments.length - 1];
522
+ segments[segments.length - 1] = new StringToken(this._fileId, range, `${lastSegment.value}${value}`, definition);
523
+ }
524
+ // Otherwise add a new LiteralToken
525
+ else {
526
+ segments.push(new StringToken(this._fileId, range, value, definition));
527
+ }
528
+ }
529
+ matchDirective(trimmed, directive, expectedParameters) {
530
+ const parameters = [];
531
+ if (trimmed.startsWith(directive) &&
532
+ (trimmed.length === directive.length || WHITESPACE_PATTERN.test(trimmed[directive.length]))) {
533
+ let startIndex = directive.length;
534
+ let inString = false;
535
+ let parens = 0;
536
+ for (let i = startIndex; i < trimmed.length; i++) {
537
+ const c = trimmed[i];
538
+ if (WHITESPACE_PATTERN.test(c) && !inString && parens == 0) {
539
+ if (startIndex < 1) {
540
+ parameters.push(trimmed.substr(startIndex, i - startIndex));
541
+ }
542
+ startIndex = i + 1;
543
+ }
544
+ else if (c === "'") {
545
+ inString = !inString;
546
+ }
547
+ else if (c === "(" && !inString) {
548
+ parens++;
549
+ }
550
+ else if (c === ")" && !inString) {
551
+ parens--;
552
+ }
553
+ }
554
+ if (startIndex < trimmed.length) {
555
+ parameters.push(trimmed.substr(startIndex));
556
+ }
557
+ if (expectedParameters != parameters.length) {
558
+ return {
559
+ isMatch: false,
560
+ parameters: [],
561
+ error: new Error(`Exactly ${expectedParameters} parameter(s) were expected following the directive '${directive}'. Actual parameter count: ${parameters.length}`)
562
+ };
563
+ }
564
+ return {
565
+ isMatch: true,
566
+ parameters: parameters
567
+ };
568
+ }
569
+ return {
570
+ isMatch: false,
571
+ parameters: parameters
572
+ };
573
+ }
574
+ getExpressionString(trimmed) {
575
+ const result = [];
576
+ let inString = false;
577
+ for (let i = 0; i < trimmed.length; i++) {
578
+ const c = trimmed[i];
579
+ if (c === "'") {
580
+ inString = !inString;
581
+ if (inString && i !== 0) {
582
+ result.push(c);
583
+ }
584
+ }
585
+ else if (!inString) {
586
+ return undefined;
587
+ }
588
+ else {
589
+ result.push(c);
590
+ }
591
+ }
592
+ return result.join("");
593
+ }
594
+ }
595
+ //# sourceMappingURL=template-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-reader.js","sourceRoot":"","sources":["../../src/templates/template-reader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { TokenRange } from "./tokens/token-range";
2
+ /**
3
+ * Provides information about an error which occurred during validation
4
+ */
5
+ export declare class TemplateValidationError {
6
+ readonly rawMessage: string;
7
+ readonly prefix: string | undefined;
8
+ readonly code: string | undefined;
9
+ readonly range: TokenRange | undefined;
10
+ constructor(rawMessage: string, prefix: string | undefined, code: string | undefined, range: TokenRange | undefined);
11
+ get message(): string;
12
+ toString(): string;
13
+ }
14
+ //# sourceMappingURL=template-validation-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-validation-error.d.ts","sourceRoot":"","sources":["../../src/templates/template-validation-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAEhD;;GAEG;AACH,qBAAa,uBAAuB;aAEhB,UAAU,EAAE,MAAM;aAClB,MAAM,EAAE,MAAM,GAAG,SAAS;aAC1B,IAAI,EAAE,MAAM,GAAG,SAAS;aACxB,KAAK,EAAE,UAAU,GAAG,SAAS;gBAH7B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,KAAK,EAAE,UAAU,GAAG,SAAS;IAG/C,IAAW,OAAO,IAAI,MAAM,CAM3B;IAEM,QAAQ,IAAI,MAAM;CAG1B"}