/** * TODO: Everything in this file is only used by Flow plugin and should be moved to their repo */ import { ArrayShape, type CallExpressionShape, type Diagnostics, type Factory, type Record, StringShape, } from '@servicenow/sdk-build-core' import { generateDeprecatedDiagnostics } from '../utils' import { BCP47_LANGUAGE_TAG_PATTERN, generatePlural } from '../column-plugin' export async function getDocumentationRecords( callExpression: CallExpressionShape, aliasedKeys: globalThis.Record, factory: Factory, diagnostics: Diagnostics, generateDefaultDoc: boolean = false, defaultLanguage: string = 'en' ) { const column = callExpression.getArgument(0).asObject() const documentation = column.get('label') const columnName = column.get('name') if (!documentation.if([ArrayShape, StringShape])) { return [ await factory.createRecord({ source: callExpression, table: 'sys_documentation', properties: column.transform(({ $ }) => ({ name: $.from('table'), element: $.val(columnName), language: $.def(defaultLanguage), hint: $.def(''), label: $.val(documentation.ifDefined() ?? columnName), plural: $.val( generatePlural( documentation.ifDefined()?.asString().getValue() ?? columnName.asString().getValue() ) ), })), }), ] } if (documentation.ifArray()) { const docRecords: Record[] = [] const languages = new Set() for (const doc of documentation.asArray().getElements()) { const docObject = doc.asObject().withAliasedKeys(aliasedKeys) generateDeprecatedDiagnostics(docObject, diagnostics) const language = docObject.get('language').ifString()?.getValue() if (language) { if (!BCP47_LANGUAGE_TAG_PATTERN.test(language)) { diagnostics.error( doc.getOriginalNode(), `'language' must be a valid BCP 47 language tag (e.g., 'en', 'es', 'en-US', 'zh-Hans')` ) } if (languages.has(language)) { diagnostics.error( doc.getOriginalNode(), `Duplicate language '${language}' found. Each language must be unique per column.` ) } languages.add(language) } docRecords.push( await factory.createRecord({ source: callExpression, table: 'sys_documentation', properties: docObject.transform(({ $ }) => ({ name: $.val(column.get('table')), element: $.val(column.get('name')), language: $.def(defaultLanguage), hint: $.def(''), help: $, label: $, plural: $, url: $, url_target: $.from('urlTarget'), })), }) ) } return docRecords } if (!generateDefaultDoc) { return [] } return [ await factory.createRecord({ source: callExpression, table: 'sys_documentation', properties: column.transform(({ $ }) => ({ name: $.from('table'), element: $.val(columnName), language: $.def(defaultLanguage), hint: $.def(''), label: $.val(documentation.ifDefined() ?? columnName), plural: $.val( generatePlural(documentation.ifDefined()?.asString().getValue() ?? columnName.asString().getValue()) ), })), }), ] }