@platformos/platformos-check-common 0.0.11 → 0.0.12
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.
- package/CHANGELOG.md +8 -0
- package/CLAUDE.md +150 -0
- package/dist/AugmentedPlatformOSDocset.js +1 -0
- package/dist/AugmentedPlatformOSDocset.js.map +1 -1
- package/dist/checks/deprecated-filter/index.js +15 -0
- package/dist/checks/deprecated-filter/index.js.map +1 -1
- package/dist/checks/duplicate-content-for-arguments/index.js +1 -1
- package/dist/checks/duplicate-content-for-arguments/index.js.map +1 -1
- package/dist/checks/graphql/index.d.ts +1 -0
- package/dist/checks/graphql/index.js +20 -7
- package/dist/checks/graphql/index.js.map +1 -1
- package/dist/checks/invalid-hash-assign-target/index.js +4 -3
- package/dist/checks/invalid-hash-assign-target/index.js.map +1 -1
- package/dist/checks/missing-content-for-arguments/index.js +1 -1
- package/dist/checks/missing-content-for-arguments/index.js.map +1 -1
- package/dist/checks/pagination-size/index.js +1 -1
- package/dist/checks/pagination-size/index.js.map +1 -1
- package/dist/checks/undefined-object/index.js +14 -13
- package/dist/checks/undefined-object/index.js.map +1 -1
- package/dist/checks/unknown-property/index.js +75 -10
- package/dist/checks/unknown-property/index.js.map +1 -1
- package/dist/checks/unknown-property/property-shape.js +14 -1
- package/dist/checks/unknown-property/property-shape.js.map +1 -1
- package/dist/checks/unrecognized-content-for-arguments/index.js +1 -1
- package/dist/checks/unrecognized-content-for-arguments/index.js.map +1 -1
- package/dist/checks/unused-assign/index.js +23 -1
- package/dist/checks/unused-assign/index.js.map +1 -1
- package/dist/checks/valid-content-for-argument-types/index.js +1 -1
- package/dist/checks/valid-content-for-argument-types/index.js.map +1 -1
- package/dist/checks/variable-name/index.js +4 -0
- package/dist/checks/variable-name/index.js.map +1 -1
- package/dist/doc-generator/DocBlockGenerator.d.ts +16 -0
- package/dist/doc-generator/DocBlockGenerator.js +464 -0
- package/dist/doc-generator/DocBlockGenerator.js.map +1 -0
- package/dist/doc-generator/index.d.ts +1 -0
- package/dist/doc-generator/index.js +6 -0
- package/dist/doc-generator/index.js.map +1 -0
- package/dist/frontmatter/index.d.ts +59 -0
- package/dist/frontmatter/index.js +301 -0
- package/dist/frontmatter/index.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/liquid-doc/arguments.js +5 -0
- package/dist/liquid-doc/arguments.js.map +1 -1
- package/dist/path.d.ts +1 -1
- package/dist/path.js +3 -1
- package/dist/path.js.map +1 -1
- package/dist/to-schema.d.ts +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/block.js.map +1 -1
- package/package.json +2 -2
- package/src/AugmentedPlatformOSDocset.ts +1 -0
- package/src/checks/deprecated-filter/index.spec.ts +41 -1
- package/src/checks/deprecated-filter/index.ts +17 -0
- package/src/checks/graphql/index.spec.ts +173 -0
- package/src/checks/graphql/index.ts +21 -10
- package/src/checks/invalid-hash-assign-target/index.spec.ts +26 -0
- package/src/checks/invalid-hash-assign-target/index.ts +6 -4
- package/src/checks/undefined-object/index.spec.ts +123 -19
- package/src/checks/undefined-object/index.ts +16 -18
- package/src/checks/unknown-property/index.spec.ts +133 -0
- package/src/checks/unknown-property/index.ts +84 -10
- package/src/checks/unknown-property/property-shape.ts +15 -1
- package/src/checks/unused-assign/index.spec.ts +74 -0
- package/src/checks/unused-assign/index.ts +26 -1
- package/src/checks/variable-name/index.spec.ts +9 -0
- package/src/checks/variable-name/index.ts +5 -0
- package/src/frontmatter/index.ts +344 -0
- package/src/index.ts +3 -0
- package/src/liquid-doc/arguments.ts +3 -0
- package/src/path.ts +2 -0
|
@@ -0,0 +1,464 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateDocBlock = generateDocBlock;
|
|
4
|
+
const liquid_html_parser_1 = require("@platformos/liquid-html-parser");
|
|
5
|
+
const utils_1 = require("../utils");
|
|
6
|
+
const visitor_1 = require("../visitor");
|
|
7
|
+
const utils_2 = require("../liquid-doc/utils");
|
|
8
|
+
/**
|
|
9
|
+
* Generate a doc block for a partial/block based on detected parameters and inferred types.
|
|
10
|
+
*/
|
|
11
|
+
async function generateDocBlock(ast, uri, themeDocset) {
|
|
12
|
+
if ((0, utils_1.isError)(ast)) {
|
|
13
|
+
return {
|
|
14
|
+
parameters: [],
|
|
15
|
+
hasExistingDocBlock: false,
|
|
16
|
+
docBlockText: '',
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
// Check for existing doc block
|
|
20
|
+
const hasExistingDocBlock = await hasDocBlock(ast);
|
|
21
|
+
// Get global objects that should not be treated as parameters
|
|
22
|
+
const globalObjectNames = await getGlobalObjectNames(themeDocset);
|
|
23
|
+
// Get contextual objects based on file path
|
|
24
|
+
const contextualObjectNames = getContextualObjects(uri);
|
|
25
|
+
// Collect all variable usages and definitions
|
|
26
|
+
const { usages, definedVariables, docParamNames } = await collectVariableInfo(ast);
|
|
27
|
+
// Detect parameters: variables used but not defined (excluding globals/contextuals)
|
|
28
|
+
const excludedNames = new Set([
|
|
29
|
+
...globalObjectNames,
|
|
30
|
+
...contextualObjectNames,
|
|
31
|
+
...definedVariables,
|
|
32
|
+
...docParamNames,
|
|
33
|
+
]);
|
|
34
|
+
const parameterUsages = new Map();
|
|
35
|
+
for (const usage of usages) {
|
|
36
|
+
if (!usage.name || excludedNames.has(usage.name))
|
|
37
|
+
continue;
|
|
38
|
+
// Group usages by parameter name
|
|
39
|
+
if (!parameterUsages.has(usage.name)) {
|
|
40
|
+
parameterUsages.set(usage.name, []);
|
|
41
|
+
}
|
|
42
|
+
parameterUsages.get(usage.name).push(usage);
|
|
43
|
+
}
|
|
44
|
+
// Infer types and detect optional parameters
|
|
45
|
+
const parameters = [];
|
|
46
|
+
for (const [name, usageList] of parameterUsages) {
|
|
47
|
+
const type = inferTypeFromUsages(usageList);
|
|
48
|
+
const isOptional = detectOptional(usageList);
|
|
49
|
+
parameters.push({ name, type, isOptional });
|
|
50
|
+
}
|
|
51
|
+
// Sort parameters: required first, then by name
|
|
52
|
+
parameters.sort((a, b) => {
|
|
53
|
+
if (a.isOptional !== b.isOptional) {
|
|
54
|
+
return a.isOptional ? 1 : -1;
|
|
55
|
+
}
|
|
56
|
+
return a.name.localeCompare(b.name);
|
|
57
|
+
});
|
|
58
|
+
// Generate doc block text
|
|
59
|
+
const docBlockText = formatDocBlock(parameters);
|
|
60
|
+
return {
|
|
61
|
+
parameters,
|
|
62
|
+
hasExistingDocBlock,
|
|
63
|
+
docBlockText,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Check if the AST already has a {% doc %} block.
|
|
68
|
+
*/
|
|
69
|
+
async function hasDocBlock(ast) {
|
|
70
|
+
let found = false;
|
|
71
|
+
await (0, visitor_1.visit)(ast, {
|
|
72
|
+
async LiquidRawTag(node) {
|
|
73
|
+
if (node.name === 'doc') {
|
|
74
|
+
found = true;
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
return found;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Get global object names from the theme docset.
|
|
82
|
+
*/
|
|
83
|
+
async function getGlobalObjectNames(themeDocset) {
|
|
84
|
+
if (!themeDocset)
|
|
85
|
+
return new Set();
|
|
86
|
+
const objects = await themeDocset.objects();
|
|
87
|
+
const globalObjects = objects.filter(({ access }) => {
|
|
88
|
+
return !access || access.global === true || access.template.length > 0;
|
|
89
|
+
});
|
|
90
|
+
return new Set(globalObjects.map((obj) => obj.name));
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get contextual objects based on file path.
|
|
94
|
+
*/
|
|
95
|
+
function getContextualObjects(uri) {
|
|
96
|
+
if (uri.includes('layout/checkout.liquid')) {
|
|
97
|
+
return [
|
|
98
|
+
'locale',
|
|
99
|
+
'direction',
|
|
100
|
+
'skip_to_content_link',
|
|
101
|
+
'checkout_html_classes',
|
|
102
|
+
'checkout_stylesheets',
|
|
103
|
+
'checkout_scripts',
|
|
104
|
+
'content_for_logo',
|
|
105
|
+
'breadcrumb',
|
|
106
|
+
'order_summary_toggle',
|
|
107
|
+
'content_for_order_summary',
|
|
108
|
+
'alternative_payment_methods',
|
|
109
|
+
'content_for_footer',
|
|
110
|
+
'tracking_code',
|
|
111
|
+
];
|
|
112
|
+
}
|
|
113
|
+
if (uri.includes('/sections/')) {
|
|
114
|
+
return ['section', 'predictive_search', 'recommendations', 'comment'];
|
|
115
|
+
}
|
|
116
|
+
if (uri.includes('/blocks/')) {
|
|
117
|
+
return ['app', 'section', 'recommendations', 'block'];
|
|
118
|
+
}
|
|
119
|
+
if (uri.includes('views/partials/') || uri.includes('/lib/')) {
|
|
120
|
+
return ['app'];
|
|
121
|
+
}
|
|
122
|
+
return [];
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Collect all variable usages and defined variables from the AST.
|
|
126
|
+
*/
|
|
127
|
+
async function collectVariableInfo(ast) {
|
|
128
|
+
const scopedVariables = new Map();
|
|
129
|
+
const fileScopedVariables = new Set();
|
|
130
|
+
const usages = [];
|
|
131
|
+
const docParamNames = new Set();
|
|
132
|
+
function indexVariableScope(variableName, scope) {
|
|
133
|
+
if (!variableName)
|
|
134
|
+
return;
|
|
135
|
+
const indexedScope = scopedVariables.get(variableName) ?? [];
|
|
136
|
+
scopedVariables.set(variableName, indexedScope.concat(scope));
|
|
137
|
+
}
|
|
138
|
+
await (0, visitor_1.visit)(ast, {
|
|
139
|
+
async LiquidDocParamNode(node) {
|
|
140
|
+
const paramName = node.paramName?.value;
|
|
141
|
+
if (paramName) {
|
|
142
|
+
fileScopedVariables.add(paramName);
|
|
143
|
+
docParamNames.add(paramName);
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
async LiquidTag(node, ancestors) {
|
|
147
|
+
if (isLiquidTagAssign(node) || isLiquidTagGraphQL(node)) {
|
|
148
|
+
indexVariableScope(node.markup.name, {
|
|
149
|
+
start: node.blockStartPosition.end,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
if (isLiquidTagHashAssign(node) && node.markup.target.name) {
|
|
153
|
+
indexVariableScope(node.markup.target.name, {
|
|
154
|
+
start: node.blockStartPosition.end,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
if (isLiquidTagCapture(node)) {
|
|
158
|
+
indexVariableScope(node.markup.name, {
|
|
159
|
+
start: node.blockEndPosition?.end,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
if (['form', 'paginate'].includes(node.name)) {
|
|
163
|
+
indexVariableScope(node.name, {
|
|
164
|
+
start: node.blockStartPosition.end,
|
|
165
|
+
end: node.blockEndPosition?.start,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
if (node.name === 'function') {
|
|
169
|
+
indexVariableScope(node.markup.name, {
|
|
170
|
+
start: node.position.end,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
if (node.name === 'layout') {
|
|
174
|
+
indexVariableScope('none', {
|
|
175
|
+
start: node.position.start,
|
|
176
|
+
end: node.position.end,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
if ((isLiquidTagIncrement(node) || isLiquidTagDecrement(node)) &&
|
|
180
|
+
node.markup.name !== null) {
|
|
181
|
+
indexVariableScope(node.markup.name, {
|
|
182
|
+
start: node.position.start,
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
if (isLiquidForTag(node) || isLiquidTableRowTag(node)) {
|
|
186
|
+
indexVariableScope(node.markup.variableName, {
|
|
187
|
+
start: node.blockStartPosition.end,
|
|
188
|
+
end: node.blockEndPosition?.start,
|
|
189
|
+
});
|
|
190
|
+
indexVariableScope(node.name === 'for' ? 'forloop' : 'tablerowloop', {
|
|
191
|
+
start: node.blockStartPosition.end,
|
|
192
|
+
end: node.blockEndPosition?.start,
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
if (isLiquidTagBackground(node)) {
|
|
196
|
+
indexVariableScope(node.markup.jobId.name, {
|
|
197
|
+
start: node.blockEndPosition?.end,
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
},
|
|
201
|
+
async LiquidVariable(node, ancestors) {
|
|
202
|
+
// Collect variable usages from LiquidVariable nodes
|
|
203
|
+
const expression = node.expression;
|
|
204
|
+
if (expression.type === liquid_html_parser_1.NodeTypes.VariableLookup && expression.name) {
|
|
205
|
+
usages.push({
|
|
206
|
+
name: expression.name,
|
|
207
|
+
lookup: expression,
|
|
208
|
+
filters: node.filters,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
},
|
|
212
|
+
async VariableLookup(node, ancestors) {
|
|
213
|
+
const parent = (0, utils_1.last)(ancestors);
|
|
214
|
+
// Skip if inside capture tag markup (being defined, not used)
|
|
215
|
+
if (isLiquidTag(parent) && isLiquidTagCapture(parent))
|
|
216
|
+
return;
|
|
217
|
+
// Skip the jobId variable in background tag markup
|
|
218
|
+
if (isBackgroundInlineMarkup(parent) && parent.jobId === node)
|
|
219
|
+
return;
|
|
220
|
+
// Skip if this is a LiquidVariable's expression (already collected above)
|
|
221
|
+
if (parent &&
|
|
222
|
+
'expression' in parent &&
|
|
223
|
+
parent.expression === node) {
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
if (node.name) {
|
|
227
|
+
usages.push({
|
|
228
|
+
name: node.name,
|
|
229
|
+
lookup: node,
|
|
230
|
+
filters: [],
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
},
|
|
234
|
+
});
|
|
235
|
+
// Filter usages to only those that are undefined at their usage point
|
|
236
|
+
const undefinedUsages = usages.filter((usage) => {
|
|
237
|
+
if (!usage.name)
|
|
238
|
+
return false;
|
|
239
|
+
return !isDefined(usage.name, usage.lookup.position, fileScopedVariables, scopedVariables);
|
|
240
|
+
});
|
|
241
|
+
// Get all defined variables (both file-scoped and scoped)
|
|
242
|
+
const definedVariables = new Set([
|
|
243
|
+
...fileScopedVariables,
|
|
244
|
+
...scopedVariables.keys(),
|
|
245
|
+
]);
|
|
246
|
+
return { usages: undefinedUsages, definedVariables, docParamNames };
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Check if a variable is defined at a given position.
|
|
250
|
+
*/
|
|
251
|
+
function isDefined(variableName, variablePosition, fileScopedVariables, scopedVariables) {
|
|
252
|
+
if (fileScopedVariables.has(variableName)) {
|
|
253
|
+
return true;
|
|
254
|
+
}
|
|
255
|
+
const scopes = scopedVariables.get(variableName);
|
|
256
|
+
if (!scopes) {
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
259
|
+
return scopes.some((scope) => isDefinedInScope(variablePosition, scope));
|
|
260
|
+
}
|
|
261
|
+
function isDefinedInScope(variablePosition, scope) {
|
|
262
|
+
const start = variablePosition.start;
|
|
263
|
+
const isVariableAfterScopeStart = !scope.start || start > scope.start;
|
|
264
|
+
const isVariableBeforeScopeEnd = !scope.end || start < scope.end;
|
|
265
|
+
return isVariableAfterScopeStart && isVariableBeforeScopeEnd;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Infer type from variable usages.
|
|
269
|
+
*/
|
|
270
|
+
function inferTypeFromUsages(usages) {
|
|
271
|
+
// Analyze all usages to determine the most likely type
|
|
272
|
+
const typeVotes = new Map();
|
|
273
|
+
for (const usage of usages) {
|
|
274
|
+
const inferredType = inferTypeFromUsage(usage);
|
|
275
|
+
if (inferredType) {
|
|
276
|
+
const currentVotes = typeVotes.get(inferredType) || 0;
|
|
277
|
+
typeVotes.set(inferredType, currentVotes + 1);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
// Return the type with most votes, or 'object' as default
|
|
281
|
+
let bestType = null;
|
|
282
|
+
let maxVotes = 0;
|
|
283
|
+
for (const [type, votes] of typeVotes) {
|
|
284
|
+
if (votes > maxVotes) {
|
|
285
|
+
maxVotes = votes;
|
|
286
|
+
bestType = type;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
// If no specific type was inferred, check if it has property access (object)
|
|
290
|
+
if (!bestType) {
|
|
291
|
+
for (const usage of usages) {
|
|
292
|
+
if (usage.lookup.lookups.length > 0) {
|
|
293
|
+
return utils_2.BasicParamTypes.Object;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return bestType;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Infer type from a single variable usage.
|
|
301
|
+
*/
|
|
302
|
+
function inferTypeFromUsage(usage) {
|
|
303
|
+
const { lookup, filters } = usage;
|
|
304
|
+
// Check filters for type hints
|
|
305
|
+
for (const filter of filters) {
|
|
306
|
+
const typeFromFilter = inferTypeFromFilter(filter.name);
|
|
307
|
+
if (typeFromFilter) {
|
|
308
|
+
return typeFromFilter;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
// Check property access for object type
|
|
312
|
+
if (lookup.lookups.length > 0) {
|
|
313
|
+
return utils_2.BasicParamTypes.Object;
|
|
314
|
+
}
|
|
315
|
+
return null;
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Infer type from filter name.
|
|
319
|
+
*/
|
|
320
|
+
function inferTypeFromFilter(filterName) {
|
|
321
|
+
// Filters that suggest string input
|
|
322
|
+
const stringFilters = [
|
|
323
|
+
'append',
|
|
324
|
+
'prepend',
|
|
325
|
+
'capitalize',
|
|
326
|
+
'downcase',
|
|
327
|
+
'upcase',
|
|
328
|
+
'strip',
|
|
329
|
+
'lstrip',
|
|
330
|
+
'rstrip',
|
|
331
|
+
'strip_html',
|
|
332
|
+
'strip_newlines',
|
|
333
|
+
'newline_to_br',
|
|
334
|
+
'escape',
|
|
335
|
+
'escape_once',
|
|
336
|
+
'url_encode',
|
|
337
|
+
'url_decode',
|
|
338
|
+
'md5',
|
|
339
|
+
'sha1',
|
|
340
|
+
'sha256',
|
|
341
|
+
'base64_encode',
|
|
342
|
+
'base64_decode',
|
|
343
|
+
'hmac_sha1',
|
|
344
|
+
'hmac_sha256',
|
|
345
|
+
'truncate',
|
|
346
|
+
'truncatewords',
|
|
347
|
+
'split',
|
|
348
|
+
'replace',
|
|
349
|
+
'replace_first',
|
|
350
|
+
'remove',
|
|
351
|
+
'remove_first',
|
|
352
|
+
'slice',
|
|
353
|
+
'pluralize',
|
|
354
|
+
];
|
|
355
|
+
// Filters that suggest number input
|
|
356
|
+
const numberFilters = [
|
|
357
|
+
'plus',
|
|
358
|
+
'minus',
|
|
359
|
+
'times',
|
|
360
|
+
'divided_by',
|
|
361
|
+
'modulo',
|
|
362
|
+
'floor',
|
|
363
|
+
'ceil',
|
|
364
|
+
'round',
|
|
365
|
+
'abs',
|
|
366
|
+
'at_least',
|
|
367
|
+
'at_most',
|
|
368
|
+
];
|
|
369
|
+
// Filters that suggest array input
|
|
370
|
+
const arrayFilters = [
|
|
371
|
+
'join',
|
|
372
|
+
'first',
|
|
373
|
+
'last',
|
|
374
|
+
'size',
|
|
375
|
+
'reverse',
|
|
376
|
+
'sort',
|
|
377
|
+
'sort_natural',
|
|
378
|
+
'uniq',
|
|
379
|
+
'compact',
|
|
380
|
+
'map',
|
|
381
|
+
'where',
|
|
382
|
+
'concat',
|
|
383
|
+
];
|
|
384
|
+
if (stringFilters.includes(filterName)) {
|
|
385
|
+
return utils_2.BasicParamTypes.String;
|
|
386
|
+
}
|
|
387
|
+
if (numberFilters.includes(filterName)) {
|
|
388
|
+
return utils_2.BasicParamTypes.Number;
|
|
389
|
+
}
|
|
390
|
+
if (arrayFilters.includes(filterName)) {
|
|
391
|
+
// Array implies object type in LiquidDoc context
|
|
392
|
+
return utils_2.BasicParamTypes.Object;
|
|
393
|
+
}
|
|
394
|
+
return null;
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Detect if a parameter is optional (has default filter usage).
|
|
398
|
+
*/
|
|
399
|
+
function detectOptional(usages) {
|
|
400
|
+
for (const usage of usages) {
|
|
401
|
+
for (const filter of usage.filters) {
|
|
402
|
+
if (filter.name === 'default') {
|
|
403
|
+
return true;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
return false;
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Format the doc block text.
|
|
411
|
+
*/
|
|
412
|
+
function formatDocBlock(parameters) {
|
|
413
|
+
if (parameters.length === 0) {
|
|
414
|
+
return '{% doc %}\n{% enddoc %}';
|
|
415
|
+
}
|
|
416
|
+
const lines = ['{% doc %}'];
|
|
417
|
+
for (const param of parameters) {
|
|
418
|
+
const typeStr = param.type ? `{${param.type}}` : '{object}';
|
|
419
|
+
const nameStr = param.isOptional ? `[${param.name}]` : param.name;
|
|
420
|
+
lines.push(` @param ${typeStr} ${nameStr} -`);
|
|
421
|
+
}
|
|
422
|
+
lines.push('{% enddoc %}');
|
|
423
|
+
return lines.join('\n');
|
|
424
|
+
}
|
|
425
|
+
// Type guard functions
|
|
426
|
+
function isLiquidTag(node) {
|
|
427
|
+
return node?.type === liquid_html_parser_1.NodeTypes.LiquidTag;
|
|
428
|
+
}
|
|
429
|
+
function isLiquidTagCapture(node) {
|
|
430
|
+
return node.name === liquid_html_parser_1.NamedTags.capture;
|
|
431
|
+
}
|
|
432
|
+
function isLiquidTagAssign(node) {
|
|
433
|
+
return node.name === liquid_html_parser_1.NamedTags.assign && typeof node.markup !== 'string';
|
|
434
|
+
}
|
|
435
|
+
function isLiquidTagHashAssign(node) {
|
|
436
|
+
return node.name === liquid_html_parser_1.NamedTags.hash_assign && typeof node.markup !== 'string';
|
|
437
|
+
}
|
|
438
|
+
function isLiquidTagGraphQL(node) {
|
|
439
|
+
return node.name === liquid_html_parser_1.NamedTags.graphql && typeof node.markup !== 'string';
|
|
440
|
+
}
|
|
441
|
+
function isLiquidForTag(node) {
|
|
442
|
+
return node.name === liquid_html_parser_1.NamedTags.for && typeof node.markup !== 'string';
|
|
443
|
+
}
|
|
444
|
+
function isLiquidTableRowTag(node) {
|
|
445
|
+
return node.name === liquid_html_parser_1.NamedTags.tablerow && typeof node.markup !== 'string';
|
|
446
|
+
}
|
|
447
|
+
function isLiquidTagIncrement(node) {
|
|
448
|
+
return node.name === liquid_html_parser_1.NamedTags.increment && typeof node.markup !== 'string';
|
|
449
|
+
}
|
|
450
|
+
function isLiquidTagDecrement(node) {
|
|
451
|
+
return node.name === liquid_html_parser_1.NamedTags.decrement && typeof node.markup !== 'string';
|
|
452
|
+
}
|
|
453
|
+
function isLiquidTagBackground(node) {
|
|
454
|
+
return (node.name === liquid_html_parser_1.NamedTags.background &&
|
|
455
|
+
typeof node.markup !== 'string' &&
|
|
456
|
+
node.markup.type === liquid_html_parser_1.NodeTypes.BackgroundInlineMarkup);
|
|
457
|
+
}
|
|
458
|
+
function isBackgroundInlineMarkup(node) {
|
|
459
|
+
return (typeof node === 'object' &&
|
|
460
|
+
node !== null &&
|
|
461
|
+
'type' in node &&
|
|
462
|
+
node.type === liquid_html_parser_1.NodeTypes.BackgroundInlineMarkup);
|
|
463
|
+
}
|
|
464
|
+
//# sourceMappingURL=DocBlockGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DocBlockGenerator.js","sourceRoot":"","sources":["../../src/doc-generator/DocBlockGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { generateDocBlock, DetectedParameter, DocBlockResult, } from './DocBlockGenerator';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateDocBlock = void 0;
|
|
4
|
+
var DocBlockGenerator_1 = require("./DocBlockGenerator");
|
|
5
|
+
Object.defineProperty(exports, "generateDocBlock", { enumerable: true, get: function () { return DocBlockGenerator_1.generateDocBlock; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/doc-generator/index.ts"],"names":[],"mappings":";;;AAAA,yDAI6B;AAH3B,qHAAA,gBAAgB,OAAA"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Frontmatter schema definitions for platformOS Liquid file types.
|
|
3
|
+
*
|
|
4
|
+
* Each Liquid file type in platformOS has a YAML frontmatter section at the
|
|
5
|
+
* top of the file that configures server-side behaviour. The schema for each
|
|
6
|
+
* type is different — Pages have slug/layout, Emails have to/from/subject, etc.
|
|
7
|
+
*
|
|
8
|
+
* This module provides:
|
|
9
|
+
* - FrontmatterFieldSchema — type definition for a single field
|
|
10
|
+
* - FrontmatterSchema — type definition for a complete schema
|
|
11
|
+
* - FRONTMATTER_SCHEMAS — per-type schemas keyed by PlatformOSFileType
|
|
12
|
+
* - getFrontmatterSchema() — convenience lookup that returns undefined for
|
|
13
|
+
* types without a frontmatter schema
|
|
14
|
+
*/
|
|
15
|
+
import { PlatformOSFileType } from '@platformos/platformos-common';
|
|
16
|
+
export type FrontmatterFieldType = 'string' | 'boolean' | 'integer' | 'number' | 'array' | 'object';
|
|
17
|
+
export interface FrontmatterFieldSchema {
|
|
18
|
+
/** The expected YAML type(s) for this field's value. */
|
|
19
|
+
type: FrontmatterFieldType | FrontmatterFieldType[];
|
|
20
|
+
/** Whether this field must be present. */
|
|
21
|
+
required?: boolean;
|
|
22
|
+
/** Human-readable description of this field. */
|
|
23
|
+
description?: string;
|
|
24
|
+
/** Whether this field name is deprecated in favour of a newer one. */
|
|
25
|
+
deprecated?: boolean;
|
|
26
|
+
/** Message shown when this deprecated field is used. */
|
|
27
|
+
deprecatedMessage?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface FrontmatterSchema {
|
|
30
|
+
/** Human-readable name of the file type, used in diagnostics. */
|
|
31
|
+
name: string;
|
|
32
|
+
/**
|
|
33
|
+
* Known frontmatter fields.
|
|
34
|
+
* Checks can use this to surface unknown keys or missing required keys.
|
|
35
|
+
*/
|
|
36
|
+
fields: Record<string, FrontmatterFieldSchema>;
|
|
37
|
+
/**
|
|
38
|
+
* Whether fields not listed in `fields` are allowed without a warning.
|
|
39
|
+
* Defaults to true — schemas are additive and may not be exhaustive.
|
|
40
|
+
*/
|
|
41
|
+
allowAdditionalFields?: boolean;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Per-type frontmatter schemas.
|
|
45
|
+
*
|
|
46
|
+
* Only Liquid file types are present here — GraphQL, YAML, and Asset types
|
|
47
|
+
* do not use frontmatter.
|
|
48
|
+
*
|
|
49
|
+
* Field lists are based on real-world usage in platformOS apps. Set
|
|
50
|
+
* `allowAdditionalFields: true` (the default) everywhere so that apps using
|
|
51
|
+
* custom/undocumented keys don't get false-positive warnings until the schemas
|
|
52
|
+
* are finalised.
|
|
53
|
+
*/
|
|
54
|
+
export declare const FRONTMATTER_SCHEMAS: Partial<Record<PlatformOSFileType, FrontmatterSchema>>;
|
|
55
|
+
/**
|
|
56
|
+
* Returns the frontmatter schema for a given file type, or undefined if no
|
|
57
|
+
* schema is defined for that type (e.g. GraphQL, YAML, Asset types).
|
|
58
|
+
*/
|
|
59
|
+
export declare function getFrontmatterSchema(fileType: PlatformOSFileType | undefined): FrontmatterSchema | undefined;
|