@platformos/platformos-language-server-common 0.0.7 → 0.0.8

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 (239) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/PropertyShapeInference.d.ts +18 -0
  3. package/dist/PropertyShapeInference.js +58 -0
  4. package/dist/PropertyShapeInference.js.map +1 -1
  5. package/dist/TypeSystem.d.ts +4 -9
  6. package/dist/TypeSystem.js +234 -388
  7. package/dist/TypeSystem.js.map +1 -1
  8. package/dist/codeActions/providers/GenerateDocBlockProvider.d.ts +10 -0
  9. package/dist/codeActions/providers/GenerateDocBlockProvider.js +39 -0
  10. package/dist/codeActions/providers/GenerateDocBlockProvider.js.map +1 -0
  11. package/dist/commands/providers/GenerateDocBlockCommandProvider.d.ts +19 -0
  12. package/dist/commands/providers/GenerateDocBlockCommandProvider.js +64 -0
  13. package/dist/commands/providers/GenerateDocBlockCommandProvider.js.map +1 -0
  14. package/dist/completions/CompletionsProvider.d.ts +6 -10
  15. package/dist/completions/CompletionsProvider.js +6 -9
  16. package/dist/completions/CompletionsProvider.js.map +1 -1
  17. package/dist/completions/params/LiquidCompletionParams.js +4 -16
  18. package/dist/completions/params/LiquidCompletionParams.js.map +1 -1
  19. package/dist/completions/providers/ContentForCompletionProvider.js +2 -4
  20. package/dist/completions/providers/ContentForCompletionProvider.js.map +1 -1
  21. package/dist/completions/providers/FilterNamedParameterCompletionProvider.d.ts +3 -3
  22. package/dist/completions/providers/FilterNamedParameterCompletionProvider.js +6 -6
  23. package/dist/completions/providers/FilterNamedParameterCompletionProvider.js.map +1 -1
  24. package/dist/completions/providers/LiquidDocParamTypeCompletionProvider.d.ts +3 -3
  25. package/dist/completions/providers/LiquidDocParamTypeCompletionProvider.js +3 -3
  26. package/dist/completions/providers/LiquidDocParamTypeCompletionProvider.js.map +1 -1
  27. package/dist/completions/providers/LiquidTagsCompletionProvider.d.ts +3 -3
  28. package/dist/completions/providers/LiquidTagsCompletionProvider.js +3 -3
  29. package/dist/completions/providers/LiquidTagsCompletionProvider.js.map +1 -1
  30. package/dist/completions/providers/RenderPartialParameterCompletionProvider.js +1 -1
  31. package/dist/completions/providers/RenderPartialParameterCompletionProvider.js.map +1 -1
  32. package/dist/completions/providers/index.d.ts +0 -3
  33. package/dist/completions/providers/index.js +1 -7
  34. package/dist/completions/providers/index.js.map +1 -1
  35. package/dist/css/CSSLanguageService.d.ts +19 -5
  36. package/dist/css/CSSLanguageService.js +77 -63
  37. package/dist/css/CSSLanguageService.js.map +1 -1
  38. package/dist/definitions/DefinitionProvider.d.ts +1 -1
  39. package/dist/definitions/DefinitionProvider.js +1 -3
  40. package/dist/definitions/DefinitionProvider.js.map +1 -1
  41. package/dist/diagnostics/offenseToDiagnostic.js +1 -1
  42. package/dist/diagnostics/offenseToDiagnostic.js.map +1 -1
  43. package/dist/diagnostics/runChecks.d.ts +3 -5
  44. package/dist/diagnostics/runChecks.js +12 -64
  45. package/dist/diagnostics/runChecks.js.map +1 -1
  46. package/dist/docset/MarkdownRenderer.js +1 -1
  47. package/dist/docset/MarkdownRenderer.js.map +1 -1
  48. package/dist/documentLinks/DocumentLinksProvider.d.ts +3 -3
  49. package/dist/documentLinks/DocumentLinksProvider.js +3 -3
  50. package/dist/documentLinks/DocumentLinksProvider.js.map +1 -1
  51. package/dist/documents/DocumentManager.d.ts +4 -5
  52. package/dist/documents/DocumentManager.js +12 -11
  53. package/dist/documents/DocumentManager.js.map +1 -1
  54. package/dist/documents/types.d.ts +16 -3
  55. package/dist/documents/types.js +3 -3
  56. package/dist/documents/types.js.map +1 -1
  57. package/dist/hover/HoverProvider.d.ts +5 -8
  58. package/dist/hover/HoverProvider.js +8 -14
  59. package/dist/hover/HoverProvider.js.map +1 -1
  60. package/dist/hover/providers/LiquidFilterArgumentHoverProvider.d.ts +3 -3
  61. package/dist/hover/providers/LiquidFilterArgumentHoverProvider.js +3 -3
  62. package/dist/hover/providers/LiquidFilterArgumentHoverProvider.js.map +1 -1
  63. package/dist/hover/providers/LiquidFilterHoverProvider.d.ts +3 -3
  64. package/dist/hover/providers/LiquidFilterHoverProvider.js +3 -3
  65. package/dist/hover/providers/LiquidFilterHoverProvider.js.map +1 -1
  66. package/dist/hover/providers/LiquidTagHoverProvider.d.ts +3 -3
  67. package/dist/hover/providers/LiquidTagHoverProvider.js +3 -3
  68. package/dist/hover/providers/LiquidTagHoverProvider.js.map +1 -1
  69. package/dist/hover/providers/RenderPartialHoverProvider.js +1 -1
  70. package/dist/hover/providers/RenderPartialHoverProvider.js.map +1 -1
  71. package/dist/hover/providers/RenderPartialParameterHoverProvider.js +1 -1
  72. package/dist/hover/providers/RenderPartialParameterHoverProvider.js.map +1 -1
  73. package/dist/hover/providers/TranslationHoverProvider.d.ts +3 -3
  74. package/dist/hover/providers/TranslationHoverProvider.js +3 -3
  75. package/dist/hover/providers/TranslationHoverProvider.js.map +1 -1
  76. package/dist/index.d.ts +1 -1
  77. package/dist/index.js.map +1 -1
  78. package/dist/internal-types.d.ts +1 -1
  79. package/dist/json/JSONContributions.d.ts +1 -5
  80. package/dist/json/JSONContributions.js +4 -36
  81. package/dist/json/JSONContributions.js.map +1 -1
  82. package/dist/json/JSONLanguageService.d.ts +4 -12
  83. package/dist/json/JSONLanguageService.js +17 -80
  84. package/dist/json/JSONLanguageService.js.map +1 -1
  85. package/dist/json/test/test-helpers.d.ts +1 -3
  86. package/dist/json/test/test-helpers.js +3 -19
  87. package/dist/json/test/test-helpers.js.map +1 -1
  88. package/dist/json/utils.d.ts +0 -5
  89. package/dist/json/utils.js +0 -24
  90. package/dist/json/utils.js.map +1 -1
  91. package/dist/rename/RenameProvider.d.ts +2 -2
  92. package/dist/rename/RenameProvider.js +2 -2
  93. package/dist/rename/RenameProvider.js.map +1 -1
  94. package/dist/rename/providers/LiquidVariableRenameProvider.d.ts +3 -3
  95. package/dist/rename/providers/LiquidVariableRenameProvider.js +4 -4
  96. package/dist/rename/providers/LiquidVariableRenameProvider.js.map +1 -1
  97. package/dist/renamed/RenameHandler.d.ts +2 -3
  98. package/dist/renamed/RenameHandler.js +3 -8
  99. package/dist/renamed/RenameHandler.js.map +1 -1
  100. package/dist/renamed/handlers/AssetRenameHandler.d.ts +3 -3
  101. package/dist/renamed/handlers/AssetRenameHandler.js +5 -5
  102. package/dist/renamed/handlers/AssetRenameHandler.js.map +1 -1
  103. package/dist/renamed/handlers/PartialRenameHandler.d.ts +3 -3
  104. package/dist/renamed/handlers/PartialRenameHandler.js +5 -5
  105. package/dist/renamed/handlers/PartialRenameHandler.js.map +1 -1
  106. package/dist/renamed/handlers/utils.d.ts +1 -1
  107. package/dist/server/AppGraphManager.d.ts +32 -0
  108. package/dist/server/AppGraphManager.js +155 -0
  109. package/dist/server/AppGraphManager.js.map +1 -0
  110. package/dist/server/startServer.d.ts +2 -2
  111. package/dist/server/startServer.js +62 -164
  112. package/dist/server/startServer.js.map +1 -1
  113. package/dist/tsconfig.tsbuildinfo +1 -1
  114. package/dist/types.d.ts +33 -54
  115. package/dist/types.js +21 -26
  116. package/dist/types.js.map +1 -1
  117. package/dist/utils/liquidDoc.js +1 -1
  118. package/dist/utils/liquidDoc.js.map +1 -1
  119. package/dist/utils/uri.d.ts +0 -8
  120. package/dist/utils/uri.js +1 -17
  121. package/dist/utils/uri.js.map +1 -1
  122. package/package.json +4 -4
  123. package/src/PropertyShapeInference.ts +76 -1
  124. package/src/TypeSystem.spec.ts +188 -450
  125. package/src/TypeSystem.ts +251 -457
  126. package/src/completions/CompletionsProvider.ts +13 -34
  127. package/src/completions/params/LiquidCompletionParams.spec.ts +0 -9
  128. package/src/completions/params/LiquidCompletionParams.ts +4 -14
  129. package/src/completions/params/fix.spec.ts +0 -3
  130. package/src/completions/providers/FilterCompletionProvider.spec.ts +2 -8
  131. package/src/completions/providers/FilterNamedParameterCompletionProvider.spec.ts +1 -5
  132. package/src/completions/providers/FilterNamedParameterCompletionProvider.ts +6 -6
  133. package/src/completions/providers/HtmlAttributeCompletionProvider.spec.ts +1 -4
  134. package/src/completions/providers/HtmlAttributeValueCompletionProvider.spec.ts +1 -4
  135. package/src/completions/providers/HtmlTagCompletionProvider.spec.ts +1 -4
  136. package/src/completions/providers/LiquidDocParamTypeCompletionProvider.spec.ts +1 -28
  137. package/src/completions/providers/LiquidDocParamTypeCompletionProvider.ts +3 -3
  138. package/src/completions/providers/LiquidDocTagCompletionProvider.spec.ts +1 -26
  139. package/src/completions/providers/LiquidTagsCompletionProvider.spec.ts +2 -16
  140. package/src/completions/providers/LiquidTagsCompletionProvider.ts +3 -3
  141. package/src/completions/providers/ObjectAttributeCompletionProvider.spec.ts +2 -31
  142. package/src/completions/providers/ObjectCompletionProvider.spec.ts +34 -123
  143. package/src/completions/providers/PartialCompletionProvider.spec.ts +4 -13
  144. package/src/completions/providers/RenderPartialParameterCompletionProvider.spec.ts +3 -5
  145. package/src/completions/providers/RenderPartialParameterCompletionProvider.ts +0 -1
  146. package/src/completions/providers/TranslationCompletionProvider.spec.ts +1 -4
  147. package/src/completions/providers/index.ts +0 -3
  148. package/src/css/CSSLanguageService.ts +97 -81
  149. package/src/definitions/DefinitionProvider.ts +0 -6
  150. package/src/definitions/providers/TranslationStringDefinitionProvider.spec.ts +1 -5
  151. package/src/diagnostics/offenseToDiagnostic.ts +1 -1
  152. package/src/diagnostics/runChecks.spec.ts +16 -24
  153. package/src/diagnostics/runChecks.ts +17 -91
  154. package/src/docset/MarkdownRenderer.ts +1 -1
  155. package/src/documentLinks/DocumentLinksProvider.ts +3 -3
  156. package/src/documents/DocumentManager.spec.ts +12 -97
  157. package/src/documents/DocumentManager.ts +13 -14
  158. package/src/documents/types.ts +18 -9
  159. package/src/hover/HoverProvider.ts +9 -21
  160. package/src/hover/providers/HtmlAttributeHoverProvider.spec.ts +1 -3
  161. package/src/hover/providers/HtmlAttributeValueHoverProvider.spec.ts +1 -3
  162. package/src/hover/providers/HtmlTagHoverProvider.spec.ts +1 -3
  163. package/src/hover/providers/LiquidDocTagHoverProvider.spec.ts +0 -3
  164. package/src/hover/providers/LiquidFilterArgumentHoverProvider.spec.ts +0 -3
  165. package/src/hover/providers/LiquidFilterArgumentHoverProvider.ts +3 -3
  166. package/src/hover/providers/LiquidFilterHoverProvider.spec.ts +0 -3
  167. package/src/hover/providers/LiquidFilterHoverProvider.ts +3 -3
  168. package/src/hover/providers/LiquidObjectAttributeHoverProvider.spec.ts +1 -3
  169. package/src/hover/providers/LiquidObjectHoverProvider.spec.ts +46 -129
  170. package/src/hover/providers/LiquidTagHoverProvider.spec.ts +0 -3
  171. package/src/hover/providers/LiquidTagHoverProvider.ts +3 -3
  172. package/src/hover/providers/RenderPartialHoverProvider.spec.ts +1 -4
  173. package/src/hover/providers/RenderPartialHoverProvider.ts +1 -5
  174. package/src/hover/providers/RenderPartialParameterHoverProvider.spec.ts +1 -4
  175. package/src/hover/providers/RenderPartialParameterHoverProvider.ts +0 -1
  176. package/src/hover/providers/TranslationHoverProvider.spec.ts +1 -4
  177. package/src/hover/providers/TranslationHoverProvider.ts +3 -3
  178. package/src/index.ts +2 -5
  179. package/src/internal-types.ts +1 -1
  180. package/src/json/JSONContributions.ts +4 -61
  181. package/src/json/JSONLanguageService.ts +19 -117
  182. package/src/json/test/test-helpers.ts +4 -35
  183. package/src/json/utils.ts +0 -27
  184. package/src/rename/RenameProvider.ts +3 -3
  185. package/src/rename/providers/LiquidVariableRenameProvider.spec.ts +4 -4
  186. package/src/rename/providers/LiquidVariableRenameProvider.ts +4 -4
  187. package/src/renamed/RenameHandler.ts +4 -9
  188. package/src/renamed/handlers/AssetRenameHandler.spec.ts +3 -3
  189. package/src/renamed/handlers/AssetRenameHandler.ts +5 -5
  190. package/src/renamed/handlers/PartialRenameHandler.spec.ts +2 -2
  191. package/src/renamed/handlers/PartialRenameHandler.ts +5 -5
  192. package/src/renamed/handlers/utils.ts +1 -1
  193. package/src/server/{ThemeGraphManager.ts → AppGraphManager.ts} +21 -90
  194. package/src/server/startServer.spec.ts +7 -9
  195. package/src/server/startServer.ts +65 -217
  196. package/src/test/CompletionItemsAssertion.spec.ts +1 -4
  197. package/src/types.ts +33 -63
  198. package/src/utils/liquidDoc.ts +1 -1
  199. package/src/utils/uri.ts +0 -14
  200. package/src/completions/providers/ContentForBlockTypeCompletionProvider.spec.ts +0 -41
  201. package/src/completions/providers/ContentForBlockTypeCompletionProvider.ts +0 -42
  202. package/src/completions/providers/ContentForCompletionProvider.spec.ts +0 -96
  203. package/src/completions/providers/ContentForCompletionProvider.ts +0 -113
  204. package/src/completions/providers/ContentForParameterCompletionProvider.spec.ts +0 -362
  205. package/src/completions/providers/ContentForParameterCompletionProvider.ts +0 -187
  206. package/src/completions/providers/data/contentForParameterCompletionOptions.ts +0 -9
  207. package/src/css/CSSLanguageService.spec.ts +0 -159
  208. package/src/css/test/test-helpers.ts +0 -30
  209. package/src/definitions/providers/SchemaTranslationStringDefinitionProvider.spec.ts +0 -96
  210. package/src/definitions/providers/SchemaTranslationStringDefinitionProvider.ts +0 -82
  211. package/src/hover/providers/ContentForArgumentHoverProvider.spec.ts +0 -76
  212. package/src/hover/providers/ContentForArgumentHoverProvider.ts +0 -56
  213. package/src/hover/providers/ContentForTypeHoverProvider.spec.ts +0 -91
  214. package/src/hover/providers/ContentForTypeHoverProvider.ts +0 -42
  215. package/src/json/JSONLanguageService.spec.ts +0 -424
  216. package/src/json/completions/providers/BlockSettingsPropertyCompletionProvider.spec.ts +0 -163
  217. package/src/json/completions/providers/BlockSettingsPropertyCompletionProvider.ts +0 -121
  218. package/src/json/completions/providers/BlockTypeCompletionProvider.spec.ts +0 -137
  219. package/src/json/completions/providers/BlockTypeCompletionProvider.ts +0 -108
  220. package/src/json/completions/providers/ReferencedBlockTypeCompletionProvider.spec.ts +0 -132
  221. package/src/json/completions/providers/ReferencedBlockTypeCompletionProvider.ts +0 -120
  222. package/src/json/completions/providers/SchemaTranslationCompletionProvider.ts +0 -51
  223. package/src/json/completions/providers/SettingsPropertyCompletionProvider.spec.ts +0 -211
  224. package/src/json/completions/providers/SettingsPropertyCompletionProvider.ts +0 -75
  225. package/src/json/documentLinks/DocumentLinksProvider.spec.ts +0 -223
  226. package/src/json/documentLinks/DocumentLinksProvider.ts +0 -61
  227. package/src/json/hover/providers/BlockSettingsHoverProvider.spec.ts +0 -292
  228. package/src/json/hover/providers/BlockSettingsHoverProvider.ts +0 -99
  229. package/src/json/hover/providers/SchemaTranslationHoverProvider.ts +0 -35
  230. package/src/json/hover/providers/SettingsHoverProvider.spec.ts +0 -139
  231. package/src/json/hover/providers/SettingsHoverProvider.ts +0 -79
  232. package/src/json/schemaSettings.spec.ts +0 -103
  233. package/src/json/schemaSettings.ts +0 -53
  234. package/src/plugins/css.ts +0 -12
  235. package/src/renamed/handlers/BlockRenameHandler.spec.ts +0 -399
  236. package/src/renamed/handlers/BlockRenameHandler.ts +0 -402
  237. package/src/renamed/handlers/SectionRenameHandler.spec.ts +0 -321
  238. package/src/renamed/handlers/SectionRenameHandler.ts +0 -224
  239. package/src/settings/index.ts +0 -50
@@ -8,19 +8,16 @@ exports.isUnionType = isUnionType;
8
8
  exports.typeToDisplayString = typeToDisplayString;
9
9
  const liquid_html_parser_1 = require("@platformos/liquid-html-parser");
10
10
  const platformos_check_common_1 = require("@platformos/platformos-check-common");
11
- const settings_1 = require("./settings");
12
11
  const utils_1 = require("./utils");
13
12
  const platformos_check_common_2 = require("@platformos/platformos-check-common");
14
13
  const PropertyShapeInference_1 = require("./PropertyShapeInference");
15
14
  const vscode_uri_1 = require("vscode-uri");
16
15
  class TypeSystem {
17
- constructor(themeDocset, getThemeSettingsSchemaForURI, getMetafieldDefinitions, fs, documentsLocator, findThemeRootURI) {
18
- this.themeDocset = themeDocset;
19
- this.getThemeSettingsSchemaForURI = getThemeSettingsSchemaForURI;
20
- this.getMetafieldDefinitions = getMetafieldDefinitions;
16
+ constructor(platformosDocset, fs, documentsLocator, findAppRootURI) {
17
+ this.platformosDocset = platformosDocset;
21
18
  this.fs = fs;
22
19
  this.documentsLocator = documentsLocator;
23
- this.findThemeRootURI = findThemeRootURI;
20
+ this.findAppRootURI = findAppRootURI;
24
21
  this.graphqlSchemaLoaded = false;
25
22
  /**
26
23
  * An indexed representation of objects.json by name
@@ -28,72 +25,7 @@ class TypeSystem {
28
25
  * e.g. objectMap['product'] returns the product ObjectEntry.
29
26
  */
30
27
  this.objectMap = async (uri, ast) => {
31
- const [objectMap, themeSettingProperties, metafieldDefinitionsObjectMap] = await Promise.all([
32
- this._objectMap(),
33
- this.themeSettingProperties(uri),
34
- this.metafieldDefinitionsObjectMap(uri),
35
- ]);
36
- // Here we shallow mutate `settings.properties` to have the properties made
37
- // available by settings_schema.json
38
- const result = {
39
- ...objectMap,
40
- settings: {
41
- ...(objectMap.settings ?? {}),
42
- properties: themeSettingProperties,
43
- },
44
- ...customMetafieldTypeEntries(objectMap['metafield']),
45
- ...metafieldDefinitionsObjectMap,
46
- };
47
- // For each metafield definition fetched, we need to override existing types with `metafields` property
48
- // to `${category}_metafield`.
49
- //
50
- // WARNING: Since we aren't cloning the object, we are mutating the original type for all themes in
51
- // the workspace. However, this is fine since these changes are not unique to a theme.
52
- for (let category of platformos_check_common_1.FETCHED_METAFIELD_CATEGORIES) {
53
- if (!result[category])
54
- continue;
55
- let metafieldsProperty = result[category].properties?.find((prop) => prop.name === 'metafields');
56
- if (!metafieldsProperty)
57
- continue;
58
- metafieldsProperty.return_type = [{ type: `${category}_metafields`, name: '' }];
59
- }
60
- // Deal with sections/file.liquid section.settings by infering the type from the {% schema %}
61
- if (/[\/\\]sections[\/\\]/.test(uri) && result.section) {
62
- result.section = JSON.parse(JSON.stringify(result.section)); // easy deep clone
63
- const settings = result.section.properties?.find((x) => x.name === 'settings');
64
- if (!settings || !settings.return_type)
65
- return result;
66
- settings.return_type = [{ type: 'section_settings', name: '' }];
67
- result.section_settings = {
68
- name: 'section_settings',
69
- access: {
70
- global: false,
71
- parents: [],
72
- template: [],
73
- },
74
- properties: schemaSettingsAsProperties(ast),
75
- return_type: [],
76
- };
77
- }
78
- // Deal with blocks/files.liquid block.settings in a similar fashion
79
- if (/[\/\\]blocks[\/\\]/.test(uri) && result.block) {
80
- result.block = JSON.parse(JSON.stringify(result.block)); // easy deep clone
81
- const settings = result.block.properties?.find((x) => x.name === 'settings');
82
- if (!settings || !settings.return_type)
83
- return result;
84
- settings.return_type = [{ type: 'block_settings', name: '' }];
85
- result.block_settings = {
86
- name: 'block_settings',
87
- access: {
88
- global: false,
89
- parents: [],
90
- template: [],
91
- },
92
- properties: schemaSettingsAsProperties(ast),
93
- return_type: [],
94
- };
95
- }
96
- return result;
28
+ return this._objectMap();
97
29
  };
98
30
  // This is the big one we reuse (memoized)
99
31
  this._objectMap = (0, utils_1.memo)(async () => {
@@ -112,10 +44,10 @@ class TypeSystem {
112
44
  }, {});
113
45
  });
114
46
  this.filterEntries = (0, utils_1.memo)(async () => {
115
- return this.themeDocset.filters();
47
+ return this.platformosDocset.filters();
116
48
  });
117
49
  this.objectEntries = (0, utils_1.memo)(async () => {
118
- return this.themeDocset.objects();
50
+ return this.platformosDocset.objects();
119
51
  });
120
52
  /**
121
53
  * The seedSymbolsTable contains all the global variables.
@@ -153,7 +85,7 @@ class TypeSystem {
153
85
  }
154
86
  async getGraphQLSchema() {
155
87
  if (!this.graphqlSchemaLoaded) {
156
- this.graphqlSchemaCache = (await this.themeDocset.graphQL()) ?? undefined;
88
+ this.graphqlSchemaCache = (await this.platformosDocset.graphQL()) ?? undefined;
157
89
  this.graphqlSchemaLoaded = true;
158
90
  }
159
91
  return this.graphqlSchemaCache;
@@ -190,87 +122,12 @@ class TypeSystem {
190
122
  };
191
123
  });
192
124
  }
193
- async themeSettingProperties(uri) {
194
- const themeSettingsSchema = await this.getThemeSettingsSchemaForURI(uri);
195
- const categories = themeSettingsSchema.filter(settings_1.isSettingsCategory);
196
- const result = [];
197
- for (const category of categories) {
198
- const inputSettings = category.settings.filter(settings_1.isInputSetting);
199
- for (const setting of inputSettings) {
200
- result.push({
201
- name: setting.id,
202
- summary: '', // TODO, this should lookup the locale file for settings... setting.label
203
- description: '', // TODO , this should lookup the locale file as well... setting.info,
204
- return_type: settingReturnType(setting),
205
- access: {
206
- global: false,
207
- parents: [],
208
- template: [],
209
- },
210
- });
211
- }
212
- }
213
- return result;
214
- }
215
- async metafieldDefinitionsObjectMap(uri) {
216
- let result = {};
217
- const metafieldDefinitionMap = await this.getMetafieldDefinitions(uri);
218
- for (let [category, definitions] of Object.entries(metafieldDefinitionMap)) {
219
- // Metafield definitions need to be grouped by their namespace
220
- let metafieldNamespaces = new Map();
221
- for (let definition of definitions) {
222
- if (!metafieldNamespaces.has(definition.namespace)) {
223
- metafieldNamespaces.set(definition.namespace, []);
224
- }
225
- metafieldNamespaces.get(definition.namespace).push({
226
- name: definition.key,
227
- description: definition.description,
228
- return_type: metafieldReturnType(definition.type.name),
229
- });
230
- }
231
- let metafieldGroupProperties = [];
232
- for (let [namespace, namespaceProperties] of metafieldNamespaces) {
233
- const metafieldCategoryNamespaceHandle = `${category}_metafield_${namespace}`;
234
- // Since the namespace can be shared by multiple categories, we need to make sure the return_type
235
- // handle is unique across all categories
236
- metafieldGroupProperties.push({
237
- name: namespace,
238
- return_type: [{ type: metafieldCategoryNamespaceHandle, name: '' }],
239
- access: {
240
- global: false,
241
- parents: [],
242
- template: [],
243
- },
244
- });
245
- result[metafieldCategoryNamespaceHandle] = {
246
- name: metafieldCategoryNamespaceHandle,
247
- properties: namespaceProperties,
248
- access: {
249
- global: false,
250
- parents: [],
251
- template: [],
252
- },
253
- };
254
- }
255
- const metafieldCategoryHandle = `${category}_metafields`;
256
- result[metafieldCategoryHandle] = {
257
- name: metafieldCategoryHandle,
258
- properties: metafieldGroupProperties,
259
- access: {
260
- global: false,
261
- parents: [],
262
- template: [],
263
- },
264
- };
265
- }
266
- return result;
267
- }
268
125
  async symbolsTable(partialAst, uri) {
269
126
  const [seedSymbolsTable, liquidDrops, graphqlSchema, rootUri, objectMap, filtersMap] = await Promise.all([
270
127
  this.seedSymbolsTable(uri),
271
- this.themeDocset.liquidDrops(),
128
+ this.platformosDocset.liquidDrops(),
272
129
  this.getGraphQLSchema(),
273
- this.findThemeRootURI?.(uri) ?? null,
130
+ this.findAppRootURI?.(uri) ?? null,
274
131
  this.objectMap(uri, partialAst),
275
132
  this.filtersMap(),
276
133
  ]);
@@ -279,35 +136,9 @@ class TypeSystem {
279
136
  }
280
137
  }
281
138
  exports.TypeSystem = TypeSystem;
282
- const SECTION_FILE_REGEX = /sections[\/\\][^.\\\/]*\.liquid$/;
283
- const BLOCK_FILE_REGEX = /blocks[\/\\][^.\\\/]*\.liquid$/;
284
139
  const PARTIAL_FILE_REGEX = /(views[\/\\]partials[\/\\]|[\/\\]lib[\/\\])[^.]*\.liquid$/;
285
- const LAYOUT_FILE_REGEX = /layout[\/\\]checkout\.liquid$/;
286
140
  function getContextualEntries(uri) {
287
141
  const normalizedUri = platformos_check_common_1.path.normalize(uri);
288
- if (LAYOUT_FILE_REGEX.test(normalizedUri)) {
289
- return [
290
- 'locale',
291
- 'direction',
292
- 'skip_to_content_link',
293
- 'checkout_html_classes',
294
- 'checkout_stylesheets',
295
- 'checkout_scripts',
296
- 'content_for_logo',
297
- 'breadcrumb',
298
- 'order_summary_toggle',
299
- 'content_for_order_summary',
300
- 'alternative_payment_methods',
301
- 'content_for_footer',
302
- 'tracking_code',
303
- ];
304
- }
305
- if (SECTION_FILE_REGEX.test(normalizedUri)) {
306
- return ['section', 'predictive_search', 'recommendations', 'comment'];
307
- }
308
- if (BLOCK_FILE_REGEX.test(normalizedUri)) {
309
- return ['app', 'section', 'recommendations', 'block'];
310
- }
311
142
  if (PARTIAL_FILE_REGEX.test(normalizedUri)) {
312
143
  return ['app'];
313
144
  }
@@ -346,41 +177,184 @@ async function buildSymbolsTable(partialAst, seedSymbolsTable, liquidDrops, grap
346
177
  const typeRanges = await (0, platformos_check_common_2.visit)(partialAst, {
347
178
  // {% assign x = foo.x | filter %}
348
179
  // {% assign x = '{"a": 1}' | parse_json %}
180
+ // {% assign x = {a: 1, b: "hello"} %}
181
+ // {% assign x["key"] = value %}
182
+ // {% assign arr << item %}
349
183
  async AssignMarkup(node) {
350
- // Check if this has a parse_json or to_hash filter
351
- const hasParseJsonFilter = node.value.filters?.some((f) => f.name === 'parse_json' || f.name === 'to_hash');
352
- if (hasParseJsonFilter) {
353
- let jsonString;
354
- // Check if expression is a direct JSON string
355
- if (node.value.expression.type === liquid_html_parser_1.NodeTypes.String) {
356
- jsonString = node.value.expression.value;
184
+ const expression = node.value.expression;
185
+ let valueShape;
186
+ // Resolver for variable references inside JSON literals
187
+ const resolveExpr = (expr) => {
188
+ if (expr.type !== liquid_html_parser_1.NodeTypes.VariableLookup || !expr.name)
189
+ return undefined;
190
+ // Look up the variable's shape from already-processed assignments
191
+ const shapes = variableShapes.get(expr.name);
192
+ const shapeEntry = shapes
193
+ ? findLastApplicableShape(shapes, node.position.start)
194
+ : undefined;
195
+ let shape = shapeEntry?.shape;
196
+ // Fall back to seedSymbolsTable
197
+ if (!shape && seedSymbolsTable[expr.name]) {
198
+ for (const tr of seedSymbolsTable[expr.name]) {
199
+ if (tr.range[0] < node.position.start) {
200
+ if (typeof tr.type !== 'string' && tr.type.kind === 'shape') {
201
+ shape = tr.type.shape;
202
+ }
203
+ else if (typeof tr.type === 'string' || tr.type.kind === 'array') {
204
+ shape = resolvedTypeToShape(tr.type);
205
+ }
206
+ }
207
+ }
357
208
  }
358
- // Check if there's a default filter with a JSON string argument
359
- if (!jsonString && node.value.filters) {
360
- const defaultFilter = node.value.filters.find((f) => f.name === 'default');
361
- if (defaultFilter && defaultFilter.args && defaultFilter.args.length > 0) {
362
- const firstArg = defaultFilter.args[0];
363
- if (firstArg.type === liquid_html_parser_1.NodeTypes.String) {
364
- jsonString = firstArg.value;
209
+ if (!shape)
210
+ return undefined;
211
+ // Resolve lookups (e.g. a.x or a["key"])
212
+ for (const lookup of expr.lookups) {
213
+ if (shape.kind === 'object' && lookup.type === liquid_html_parser_1.NodeTypes.String && shape.properties) {
214
+ const prop = shape.properties.get(lookup.value);
215
+ if (prop) {
216
+ shape = prop;
217
+ }
218
+ else {
219
+ return undefined;
220
+ }
221
+ }
222
+ else if (shape.kind === 'array') {
223
+ if (lookup.type === liquid_html_parser_1.NodeTypes.Number ||
224
+ (lookup.type === liquid_html_parser_1.NodeTypes.String &&
225
+ (lookup.value === 'first' || lookup.value === 'last'))) {
226
+ shape = shape.itemShape;
227
+ if (!shape)
228
+ return undefined;
229
+ }
230
+ else {
231
+ return undefined;
365
232
  }
366
233
  }
234
+ else {
235
+ return undefined;
236
+ }
367
237
  }
368
- if (jsonString) {
369
- const shape = (0, PropertyShapeInference_1.inferShapeFromJSONString)(jsonString);
370
- if (shape) {
371
- // Track shape for potential hash_assign merging
372
- if (!variableShapes.has(node.name)) {
373
- variableShapes.set(node.name, []);
238
+ return shape;
239
+ };
240
+ // Case 1: JSON literal expression
241
+ if (expression.type === liquid_html_parser_1.NodeTypes.JsonHashLiteral ||
242
+ expression.type === liquid_html_parser_1.NodeTypes.JsonArrayLiteral) {
243
+ valueShape = (0, PropertyShapeInference_1.inferShapeFromJsonLiteral)(expression, resolveExpr);
244
+ }
245
+ // Case 2: parse_json / to_hash filter on a string
246
+ if (!valueShape) {
247
+ const hasParseJsonFilter = node.value.filters?.some((f) => f.name === 'parse_json' || f.name === 'to_hash');
248
+ if (hasParseJsonFilter) {
249
+ let jsonString;
250
+ if (expression.type === liquid_html_parser_1.NodeTypes.String) {
251
+ jsonString = expression.value;
252
+ }
253
+ if (!jsonString && node.value.filters) {
254
+ const defaultFilter = node.value.filters.find((f) => f.name === 'default');
255
+ if (defaultFilter &&
256
+ defaultFilter.args &&
257
+ defaultFilter.args.length > 0 &&
258
+ defaultFilter.args[0].type === liquid_html_parser_1.NodeTypes.String) {
259
+ jsonString = defaultFilter.args[0].value;
374
260
  }
375
- variableShapes.get(node.name).push({ shape, rangeEnd: node.position.end });
376
- return {
377
- identifier: node.name,
378
- type: shapeType(shape),
379
- range: [node.position.end],
380
- };
381
261
  }
262
+ if (jsonString) {
263
+ valueShape = (0, PropertyShapeInference_1.inferShapeFromJSONString)(jsonString) ?? undefined;
264
+ }
265
+ }
266
+ }
267
+ // Case 3: Infer primitive shape for << and LHS lookup scenarios
268
+ if (!valueShape && ((node.lookups && node.lookups.length > 0) || node.operator === '<<')) {
269
+ if (expression.type === liquid_html_parser_1.NodeTypes.String) {
270
+ valueShape = { kind: 'primitive', primitiveType: 'string' };
271
+ }
272
+ else if (expression.type === liquid_html_parser_1.NodeTypes.Number) {
273
+ valueShape = { kind: 'primitive', primitiveType: 'number' };
274
+ }
275
+ else if (expression.type === liquid_html_parser_1.NodeTypes.LiquidLiteral) {
276
+ if (expression.value === null) {
277
+ valueShape = { kind: 'primitive', primitiveType: 'null' };
278
+ }
279
+ else if (typeof expression.value === 'boolean') {
280
+ valueShape = { kind: 'primitive', primitiveType: 'boolean' };
281
+ }
282
+ }
283
+ }
284
+ // Handle lookups on the LHS (assign x["key"] = value)
285
+ if (node.lookups && node.lookups.length > 0) {
286
+ const lookupPath = getAssignLookupPath(node.lookups);
287
+ if (lookupPath && lookupPath.length > 0) {
288
+ const existingShapes = variableShapes.get(node.name) || [];
289
+ const existingShapeEntry = findLastApplicableShape(existingShapes, node.position.start);
290
+ let baseShape;
291
+ if (existingShapeEntry) {
292
+ baseShape = existingShapeEntry.shape;
293
+ }
294
+ else {
295
+ let existingType;
296
+ if (seedSymbolsTable[node.name]) {
297
+ for (const tr of seedSymbolsTable[node.name]) {
298
+ if (tr.range[0] < node.position.start) {
299
+ if (typeof tr.type !== 'string' && tr.type.kind === 'shape') {
300
+ existingType = tr.type;
301
+ }
302
+ }
303
+ }
304
+ }
305
+ baseShape =
306
+ existingType && isShapeType(existingType)
307
+ ? existingType.shape
308
+ : { kind: 'object', properties: new Map() };
309
+ }
310
+ const newShape = mergeNestedPropertyIntoShape(baseShape, lookupPath, valueShape ?? { kind: 'primitive' });
311
+ if (!variableShapes.has(node.name))
312
+ variableShapes.set(node.name, []);
313
+ variableShapes.get(node.name).push({ shape: newShape, rangeEnd: node.position.end });
314
+ return {
315
+ identifier: node.name,
316
+ type: shapeType(newShape),
317
+ range: [node.position.end],
318
+ };
319
+ }
320
+ }
321
+ // Handle << operator (array append)
322
+ if (node.operator === '<<') {
323
+ const itemShape = valueShape ?? { kind: 'primitive' };
324
+ const existingShapes = variableShapes.get(node.name) || [];
325
+ const existingShapeEntry = findLastApplicableShape(existingShapes, node.position.start);
326
+ let arrayShape;
327
+ if (existingShapeEntry?.shape.kind === 'array') {
328
+ const existing = existingShapeEntry.shape.itemShape;
329
+ arrayShape = {
330
+ kind: 'array',
331
+ itemShape: existing ? (0, PropertyShapeInference_1.mergeShapes)(existing, itemShape) : itemShape,
332
+ };
333
+ }
334
+ else {
335
+ arrayShape = { kind: 'array', itemShape };
382
336
  }
337
+ if (!variableShapes.has(node.name))
338
+ variableShapes.set(node.name, []);
339
+ variableShapes.get(node.name).push({ shape: arrayShape, rangeEnd: node.position.end });
340
+ return {
341
+ identifier: node.name,
342
+ type: shapeType(arrayShape),
343
+ range: [node.position.end],
344
+ };
383
345
  }
346
+ // Simple assignment with shape (JSON literal or parse_json)
347
+ if (valueShape) {
348
+ if (!variableShapes.has(node.name))
349
+ variableShapes.set(node.name, []);
350
+ variableShapes.get(node.name).push({ shape: valueShape, rangeEnd: node.position.end });
351
+ return {
352
+ identifier: node.name,
353
+ type: shapeType(valueShape),
354
+ range: [node.position.end],
355
+ };
356
+ }
357
+ // Default: lazy variable type
384
358
  return {
385
359
  identifier: node.name,
386
360
  type: lazyVariable(node.value, node.position.start),
@@ -417,13 +391,6 @@ async function buildSymbolsTable(partialAst, seedSymbolsTable, liquidDrops, grap
417
391
  range: [node.position.end],
418
392
  };
419
393
  }
420
- else if (['form', 'paginate'].includes(node.name)) {
421
- return {
422
- identifier: node.name,
423
- type: node.name,
424
- range: [node.blockStartPosition.end, end(node.blockEndPosition?.end)],
425
- };
426
- }
427
394
  else if (['for', 'tablerow'].includes(node.name)) {
428
395
  return {
429
396
  identifier: node.name + 'loop',
@@ -731,6 +698,15 @@ function inferType(thing, symbolsTable, objectMap, filtersMap) {
731
698
  case liquid_html_parser_1.NodeTypes.Range: {
732
699
  return arrayType('number');
733
700
  }
701
+ // JSON literal expressions: {key: val} or [1, 2, 3]
702
+ case liquid_html_parser_1.NodeTypes.JsonHashLiteral:
703
+ case liquid_html_parser_1.NodeTypes.JsonArrayLiteral: {
704
+ const resolver = (expr) => {
705
+ const type = inferType(expr, symbolsTable, objectMap, filtersMap);
706
+ return resolvedTypeToShape(type);
707
+ };
708
+ return shapeType((0, PropertyShapeInference_1.inferShapeFromJsonLiteral)(thing, resolver));
709
+ }
734
710
  // The type of the assign markup is the type of the right hand side.
735
711
  // {% assign x = y.property | filter1 | filter2 %}
736
712
  case liquid_html_parser_1.NodeTypes.AssignMarkup: {
@@ -996,6 +972,34 @@ function shapeToType(shape) {
996
972
  }
997
973
  return exports.Untyped;
998
974
  }
975
+ /**
976
+ * Convert a resolved type back to a PropertyShape (inverse of shapeToType).
977
+ * Used when embedding resolved variable types into JSON literal shapes.
978
+ */
979
+ function resolvedTypeToShape(type) {
980
+ if (typeof type === 'string') {
981
+ switch (type) {
982
+ case 'string':
983
+ return { kind: 'primitive', primitiveType: 'string' };
984
+ case 'number':
985
+ return { kind: 'primitive', primitiveType: 'number' };
986
+ case 'boolean':
987
+ return { kind: 'primitive', primitiveType: 'boolean' };
988
+ case exports.Untyped:
989
+ case exports.Unknown:
990
+ return undefined;
991
+ default:
992
+ return { kind: 'primitive' };
993
+ }
994
+ }
995
+ if (isShapeType(type))
996
+ return type.shape;
997
+ if (isArrayType(type)) {
998
+ const itemShape = resolvedTypeToShape(type.valueType);
999
+ return { kind: 'array', itemShape };
1000
+ }
1001
+ return undefined;
1002
+ }
999
1003
  function inferPseudoTypePropertyType(curr, // settings
1000
1004
  lookup, objectMap) {
1001
1005
  const parentEntry = objectMap[curr];
@@ -1239,6 +1243,25 @@ function typeToDisplayString(type) {
1239
1243
  return type.types.map((t) => typeToDisplayString(t)).join(' | ');
1240
1244
  return 'unknown';
1241
1245
  }
1246
+ /**
1247
+ * Extract the lookup path from assign lookups.
1248
+ * For {% assign a["key1"]["key2"] = value %}, returns ['key1', 'key2']
1249
+ */
1250
+ function getAssignLookupPath(lookups) {
1251
+ const path = [];
1252
+ for (const lookup of lookups) {
1253
+ if (lookup.type === liquid_html_parser_1.NodeTypes.String) {
1254
+ path.push(lookup.value);
1255
+ }
1256
+ else if (lookup.type === liquid_html_parser_1.NodeTypes.Number) {
1257
+ path.push(`${lookup.value}`);
1258
+ }
1259
+ else {
1260
+ return undefined;
1261
+ }
1262
+ }
1263
+ return path.length > 0 ? path : undefined;
1264
+ }
1242
1265
  /**
1243
1266
  * Extract the lookup path from a hash_assign target.
1244
1267
  * For {% hash_assign a['key1']['key2'] = value %}, returns ['key1', 'key2']
@@ -1301,181 +1324,4 @@ function findLastApplicableShape(shapes, position) {
1301
1324
  }
1302
1325
  return result;
1303
1326
  }
1304
- function settingReturnType(setting) {
1305
- switch (setting.type) {
1306
- // basic settings
1307
- case 'checkbox':
1308
- return [{ type: 'boolean', name: '' }];
1309
- case 'range':
1310
- case 'number':
1311
- return [{ type: 'number', name: '' }];
1312
- case 'radio':
1313
- case 'select':
1314
- case 'text':
1315
- case 'textarea':
1316
- return [{ type: 'string', name: '' }];
1317
- // specialized settings
1318
- case 'article':
1319
- return [{ type: 'article', name: '' }];
1320
- case 'blog':
1321
- return [{ type: 'blog', name: '' }];
1322
- case 'collection':
1323
- return [{ type: 'collection', name: '' }];
1324
- case 'collection_list':
1325
- return [{ type: 'array', array_value: 'collection' }];
1326
- case 'color':
1327
- return [{ type: 'color', name: '' }];
1328
- case 'color_background':
1329
- return [{ type: 'string', name: '' }];
1330
- case 'color_scheme':
1331
- return [{ type: 'color_scheme', name: '' }];
1332
- // TODO ??
1333
- case 'color_scheme_group':
1334
- return [];
1335
- case 'font_picker':
1336
- return [{ type: 'font', name: '' }];
1337
- case 'html':
1338
- return [{ type: 'string', name: '' }];
1339
- case 'image_picker':
1340
- return [{ type: 'image', name: '' }];
1341
- case 'inline_richtext':
1342
- return [{ type: 'string', name: '' }];
1343
- case 'link_list':
1344
- return [{ type: 'linklist', name: '' }];
1345
- case 'liquid':
1346
- return [{ type: 'string', name: '' }];
1347
- case 'page':
1348
- return [{ type: 'page', name: '' }];
1349
- case 'product':
1350
- return [{ type: 'product', name: '' }];
1351
- case 'product_list':
1352
- return [{ type: 'array', array_value: 'product' }];
1353
- case 'richtext':
1354
- return [{ type: 'string', name: '' }];
1355
- case 'text_alignment':
1356
- return [{ type: 'string', name: '' }];
1357
- case 'url':
1358
- return [{ type: 'string', name: '' }];
1359
- case 'video':
1360
- return [{ type: 'video', name: '' }];
1361
- case 'video_url':
1362
- return [{ type: 'string', name: '' }];
1363
- default:
1364
- return [];
1365
- }
1366
- }
1367
- const METAFIELD_TYPE_TO_TYPE = Object.freeze({
1368
- single_line_text_field: String,
1369
- multi_line_text_field: String,
1370
- url_reference: String,
1371
- date: String,
1372
- date_time: String,
1373
- number_integer: 'number',
1374
- number_decimal: 'number',
1375
- product_reference: 'product',
1376
- collection_reference: 'collection',
1377
- variant_reference: 'variant',
1378
- page_reference: 'page',
1379
- boolean: 'boolean',
1380
- color: 'color',
1381
- weight: 'measurement',
1382
- volume: 'measurement',
1383
- dimension: 'measurement',
1384
- rating: 'rating',
1385
- money: 'money',
1386
- json: exports.Untyped,
1387
- metaobject_reference: 'metaobject',
1388
- mixed_reference: exports.Untyped,
1389
- rich_text_field: exports.Untyped,
1390
- file_reference: exports.Untyped,
1391
- });
1392
- const REFERENCE_TYPE_METAFIELDS = Object.entries(METAFIELD_TYPE_TO_TYPE)
1393
- .filter(([metafieldType, _type]) => metafieldType.endsWith('_reference'))
1394
- .map(([_metafieldType, type]) => type);
1395
- function metafieldReturnType(metafieldType) {
1396
- let isArray = metafieldType.startsWith('list.');
1397
- if (isArray) {
1398
- metafieldType = metafieldType.split('.')[1];
1399
- }
1400
- let type = 'metafield_' + (METAFIELD_TYPE_TO_TYPE[metafieldType] ?? exports.Untyped);
1401
- if (isArray) {
1402
- return [{ type: `${type}_array`, name: '' }];
1403
- }
1404
- return [{ type: type, name: '' }];
1405
- }
1406
- // The default `metafield` type has an untyped `value` property.
1407
- // We need to create new metafield types with the labels `metafield_x` and `metafield_x_array`
1408
- // where x is the type of metafield inside the `value` property. The metafields ending with `x_array`
1409
- // is where the value is an array of type x.
1410
- const customMetafieldTypeEntries = (0, utils_1.memo)((baseMetafieldEntry) => {
1411
- if (!baseMetafieldEntry)
1412
- return {};
1413
- return [
1414
- ...new Set([...Object.values(METAFIELD_TYPE_TO_TYPE), ...platformos_check_common_1.FETCHED_METAFIELD_CATEGORIES]),
1415
- ].reduce((map, type) => {
1416
- {
1417
- const metafieldEntry = JSON.parse(JSON.stringify(baseMetafieldEntry)); // easy deep clone
1418
- const metafieldValueProp = metafieldEntry.properties?.find((prop) => prop.name === 'value');
1419
- if (metafieldValueProp) {
1420
- metafieldValueProp.return_type = [{ type: type, name: '' }];
1421
- metafieldValueProp.description = '';
1422
- metafieldEntry.name = `metafield_${type}`;
1423
- map[metafieldEntry.name] = metafieldEntry;
1424
- }
1425
- }
1426
- {
1427
- const metafieldArrayEntry = JSON.parse(JSON.stringify(baseMetafieldEntry)); // easy deep clone
1428
- const metafieldArrayValueProp = metafieldArrayEntry.properties?.find((prop) => prop.name === 'value');
1429
- if (metafieldArrayValueProp) {
1430
- // A metafield definition using a list of references does not use an array, but a separate type of collection.
1431
- // For auto-completion purposes, we can't use the array type
1432
- // https://shopify.dev/docs/api/liquid/objects/metafield#metafield-determining-the-length-of-a-list-metafield
1433
- if (REFERENCE_TYPE_METAFIELDS.includes(type)) {
1434
- metafieldArrayValueProp.return_type = [{ type: 'untyped', name: '' }];
1435
- }
1436
- else {
1437
- metafieldArrayValueProp.return_type = [{ type: 'array', name: '', array_value: type }];
1438
- }
1439
- metafieldArrayValueProp.description = '';
1440
- metafieldArrayEntry.name = `metafield_${type}_array`;
1441
- map[metafieldArrayEntry.name] = metafieldArrayEntry;
1442
- }
1443
- }
1444
- return map;
1445
- }, {});
1446
- });
1447
- function schemaSettingsAsProperties(ast) {
1448
- if (ast.type !== liquid_html_parser_1.NodeTypes.Document)
1449
- return [];
1450
- try {
1451
- const source = ast._source; // (the unfixed source)
1452
- const start = /\{%\s*schema\s*%\}/m.exec(source);
1453
- const end = /\{%\s*endschema\s*%\}/m.exec(source);
1454
- if (!start || !end)
1455
- return [];
1456
- const schema = source.slice(start.index + start[0].length, end.index);
1457
- const json = (0, platformos_check_common_1.parseJSON)(schema);
1458
- if ((0, platformos_check_common_1.isError)(json) || !('settings' in json) || !Array.isArray(json.settings))
1459
- return [];
1460
- const result = [];
1461
- const inputSettings = json.settings.filter(settings_1.isInputSetting);
1462
- for (const setting of inputSettings) {
1463
- result.push({
1464
- name: setting.id,
1465
- summary: '', // TODO, this should lookup the locale file for settings... setting.label
1466
- description: '', // TODO , this should lookup the locale file as well... setting.info,
1467
- return_type: settingReturnType(setting),
1468
- access: {
1469
- global: false,
1470
- parents: [],
1471
- template: [],
1472
- },
1473
- });
1474
- }
1475
- return result;
1476
- }
1477
- catch (_) {
1478
- return [];
1479
- }
1480
- }
1481
1327
  //# sourceMappingURL=TypeSystem.js.map