import { CallExpressionShape, Plugin } from '@servicenow/sdk-build-core' import { createWidgetToRecord, createWidgetToShape } from './utils' export const SPWidgetPlugin = Plugin.create({ name: 'SPWidgetPlugin', records: { sp_widget: { relationships: { m2m_sp_widget_dependency: { via: 'sp_widget', descendant: true }, m2m_sp_ng_pro_sp_widget: { via: 'sp_widget', descendant: true }, sp_ng_template: { via: 'sp_widget', descendant: true }, }, async toShape(record, { descendants }) { return createWidgetToShape(record, descendants, 'SPWidget') }, }, m2m_sp_widget_dependency: { coalesce: ['sp_widget', 'sp_dependency'], }, m2m_sp_ng_pro_sp_widget: { coalesce: ['sp_widget', 'sp_angular_provider'], }, }, shapes: [ { shape: CallExpressionShape, fileTypes: ['fluent'], async toRecord(callExpression, { diagnostics, factory, config }) { if (callExpression.getCallee() !== 'SPWidget') { return { success: false } } return createWidgetToRecord( callExpression, { diagnostics, factory, config }, { callee: 'SPWidget', table: 'sp_widget', getDefaultClientScript, defaultServerScript: SP_WIDGET_DEFAULT_SERVER_SCRIPT, defaultLinkScript: SP_WIDGET_DEFAULT_LINK_SCRIPT, defaultHtmlTemplate: SP_WIDGET_DEFAULT_HTML_TEMPLATE, } ) }, }, ], }) export const getDefaultClientScript = (controller: string) => `api.controller = function () { /* widget controller */ var ${controller} = this; }; ` export const SP_WIDGET_DEFAULT_LINK_SCRIPT = `function link(scope, element, attrs, controller) { }` export const SP_WIDGET_DEFAULT_SERVER_SCRIPT = `(function () { /* populate the 'data' object */ /* e.g., data.table = $sp.getValue('table'); */ })();` export const SP_WIDGET_DEFAULT_HTML_TEMPLATE = `
`