@vaadin/hilla-generator-plugin-signals 24.9.1 → 24.9.3
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/SignalProcessor.js.map +1 -1
- package/index.js.map +1 -1
- package/package.json +6 -6
- package/utils.js.map +1 -1
package/SignalProcessor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","names":["#dependencyManager","#owner","#service","#methods","#sourceFile","service: string","methods: Map<string, string>","sourceFile: SourceFile","owner: Plugin","#createDefaultValue","signalClass: string","returnType?: TypeNode","#getModelId","node: Node","modelName: string | undefined"],"sources":["/opt/agent/work/1af72d8adc613024/hilla/packages/ts/generator-plugin-signals/src/SignalProcessor.ts"],"sourcesContent":["import { dirname, extname } from 'node:path';\nimport type Plugin from '@vaadin/hilla-generator-core/Plugin.js';\nimport { simplifyFullyQualifiedName } from '@vaadin/hilla-generator-core/Schema.js';\nimport { traverse } from '@vaadin/hilla-generator-utils/ast.js';\nimport createSourceFile from '@vaadin/hilla-generator-utils/createSourceFile.js';\nimport DependencyManager from '@vaadin/hilla-generator-utils/dependencies/DependencyManager.js';\nimport PathManager from '@vaadin/hilla-generator-utils/dependencies/PathManager.js';\nimport ast, { createTransformer } from 'tsc-template';\nimport {\n factory,\n isTypeReferenceNode,\n isIdentifier,\n type ReturnStatement,\n type SourceFile,\n type TypeNode,\n type ParameterDeclaration,\n type BinaryExpression,\n type Node,\n SyntaxKind,\n isTypeNode,\n transform,\n isFunctionDeclaration,\n isImportDeclaration,\n isUnionTypeNode,\n type PropertyAccessExpression,\n} from 'typescript';\nimport { ARRAY_TYPES, COLLECTION_SIGNALS, GENERIC_SIGNALS } from './utils.js';\n\nconst HILLA_REACT_SIGNALS = '@vaadin/hilla-react-signals';\nconst HILLA_LIT_FORM = '@vaadin/hilla-lit-form';\n\nexport default class SignalProcessor {\n readonly #dependencyManager: DependencyManager;\n readonly #owner: Plugin;\n readonly #service: string;\n readonly #methods: Map<string, string>;\n readonly #sourceFile: SourceFile;\n\n constructor(service: string, methods: Map<string, string>, sourceFile: SourceFile, owner: Plugin) {\n this.#service = service;\n this.#methods = methods;\n this.#sourceFile = sourceFile;\n this.#owner = owner;\n this.#dependencyManager = new DependencyManager(new PathManager({ extension: '.js' }));\n this.#dependencyManager.imports.fromCode(this.#sourceFile);\n }\n\n process(): SourceFile {\n this.#owner.logger.debug(`Processing signals: ${this.#service}`);\n const { imports } = this.#dependencyManager;\n\n const [, connectClientId] = Iterator.from(imports.default).find(([path]) => path.includes('connect-client'))!;\n\n const initTypeId = imports.named.getIdentifier('@vaadin/hilla-frontend', 'EndpointRequestInit');\n let initTypeUsageCount = 0;\n\n const [file] = transform<SourceFile>(this.#sourceFile, [\n createTransformer((node) => {\n if (isFunctionDeclaration(node)) {\n // Check if the function is a signal method.\n if (node.name && this.#methods.has(node.name.text)) {\n // Get the signal class ID that was already imported in\n // TransferTypes plugin.\n const signalId = imports.named.getIdentifier(\n HILLA_REACT_SIGNALS,\n simplifyFullyQualifiedName(this.#methods.get(node.name.text)!),\n )!;\n\n // Remove the `init` parameter.\n const params = node.parameters.filter(\n (p) => !(p.type && isTypeReferenceNode(p.type) && p.type.typeName === initTypeId),\n );\n\n // Calculate the default value for the signal class.\n const { defaultValue, defaultValueParameter } = this.#createDefaultValue(signalId.text, node.type);\n\n // Remove the `async` modifier if present.\n const modifiers = node.modifiers?.filter((m) => m.kind !== SyntaxKind.AsyncKeyword);\n\n // Remove the `Promise` type if present.\n const type =\n node.type &&\n isTypeReferenceNode(node.type) &&\n isIdentifier(node.type.typeName) &&\n node.type.typeName.text === 'Promise'\n ? node.type.typeArguments?.[0]\n : node.type;\n\n // Get the variable parameter names to be passed to the signal\n // class.\n const paramNames = params\n .map((p) => p.name)\n .filter((n) => isIdentifier(n))\n .map((n) => n.text);\n\n // Create the signal class method body applying all the data we've\n // gathered.\n const result = ast`function dummy() { %{\n return new ${signalId}(${defaultValue}${defaultValue ? ',' : ''}{\n client: ${connectClientId},\n endpoint: '${this.#service}',\n method: '${node.name.text}'\n ${paramNames.length ? `, params: { ${paramNames.join('\\n')} }` : ''} });\n }% });`;\n\n // Update the function declaration accordingly.\n return factory.updateFunctionDeclaration(\n node,\n modifiers,\n node.asteriskToken,\n node.name,\n node.typeParameters,\n defaultValueParameter ? [...params, defaultValueParameter] : params,\n type,\n factory.createBlock([result.node as ReturnStatement]),\n );\n } else if (\n node.parameters.some((p) => p.type && isTypeReferenceNode(p.type) && p.type.typeName === initTypeId)\n ) {\n // Count the number of times the `init` parameter is used to check\n // if the type import is necessary to be removed.\n initTypeUsageCount += 1;\n }\n }\n\n return node;\n }),\n ]).transformed;\n\n // Remove the `EndpointRequestInit` import if it is not used anymore.\n if (initTypeUsageCount === 0) {\n imports.named.remove('@vaadin/hilla-frontend', 'EndpointRequestInit');\n }\n\n return createSourceFile(\n [\n ...this.#dependencyManager.imports.toCode(),\n ...file.statements.filter((statement) => !isImportDeclaration(statement)),\n ],\n file.fileName,\n );\n }\n\n #createDefaultValue(signalClass: string, returnType?: TypeNode) {\n const { imports } = this.#dependencyManager;\n\n // If the signal class is a collection signal, we have no default value to\n // generate.\n if (COLLECTION_SIGNALS.includes(signalClass)) {\n return {};\n }\n\n // If we have the NumberSignal class, we can use `0` as the default.\n if (!GENERIC_SIGNALS.includes(signalClass)) {\n return signalClass.startsWith('NumberSignal') ? { defaultValue: '0' } : {};\n }\n\n // Extract the generic argument of the signal class to get the default\n // value type.\n const type = traverse(returnType!, (node) =>\n isTypeReferenceNode(node) &&\n isIdentifier(node.typeName) &&\n GENERIC_SIGNALS.includes(node.typeName.text) &&\n node.typeArguments\n ? node.typeArguments[0]\n : undefined,\n )!;\n\n // Import the model class for the signal type (or omitting the import if\n // the type is a nullable one).\n const modelId = traverse(type, (node) => {\n // In case the generic argument of a signal class is nullable (e.g.\n // `Signal<Person | undefined>`), the default value will be `undefined`.\n if (isUnionTypeNode(node) && node.types.length > 1 && node.types[1].kind === SyntaxKind.UndefinedKeyword) {\n return SyntaxKind.UndefinedKeyword;\n }\n\n // Otherwise, we have to import the model class.\n return this.#getModelId(node);\n })!;\n\n // If we have a signal class with a generic argument (but not a collection),\n // we need to provide a possibility to set the default value.\n const optionsMethodTypeId =\n imports.named.getIdentifier(HILLA_REACT_SIGNALS, 'SignalMethodOptions') ??\n imports.named.add(HILLA_REACT_SIGNALS, 'SignalMethodOptions');\n\n return {\n defaultValue:\n modelId === SyntaxKind.UndefinedKeyword\n ? (ast`options?.defaultValue`.node as PropertyAccessExpression)\n : (ast`options?.defaultValue ?? ${modelId}.createEmptyValue()`.node as BinaryExpression),\n defaultValueParameter: ast`function dummy( %{ options?: ${optionsMethodTypeId}<${type}> }% ) {}`\n .node as ParameterDeclaration,\n };\n }\n\n #getModelId(node: Node) {\n const { imports } = this.#dependencyManager;\n\n if (isIdentifier(node)) {\n // In case the node is an array type defined as `Array<T>` or\n // `ReadonlyArray<T>`, we need to import the `ArrayModel` class.\n if (ARRAY_TYPES.includes(node.text)) {\n return (\n imports.named.getIdentifier(HILLA_LIT_FORM, 'ArrayModel') ?? imports.named.add(HILLA_LIT_FORM, 'ArrayModel')\n );\n }\n\n // Otherwise, we calculate and import the model class.\n const [path] = Iterator.from(imports.default).find(([, id]) => id === node) ?? [];\n\n if (!path) {\n throw new Error(`Model not found for ${node.text}`);\n }\n\n const modelName = `${node.text}Model`;\n const modelPath = `${dirname(path)}/${modelName}${extname(path)}`;\n\n return imports.default.getIdentifier(modelPath) ?? imports.default.add(modelPath, modelName);\n } else if (isTypeNode(node)) {\n // If the node is a primitive type, we will import the corresponding\n // model class from `@vaadin/hilla-lit-form`.\n let modelName: string | undefined;\n\n switch (node.kind) {\n case SyntaxKind.StringKeyword:\n modelName = 'StringModel';\n break;\n case SyntaxKind.NumberKeyword:\n modelName = 'NumberModel';\n break;\n case SyntaxKind.BooleanKeyword:\n modelName = 'BooleanModel';\n break;\n case SyntaxKind.ArrayType:\n modelName = 'ArrayModel';\n break;\n default:\n return undefined;\n }\n\n return imports.named.getIdentifier(HILLA_LIT_FORM, modelName) ?? imports.named.add(HILLA_LIT_FORM, modelName);\n }\n\n return undefined;\n }\n}\n"],"version":3}
|
|
1
|
+
{"mappings":"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","names":["#dependencyManager","#owner","#service","#methods","#sourceFile","service: string","methods: Map<string, string>","sourceFile: SourceFile","owner: Plugin","#createDefaultValue","signalClass: string","returnType?: TypeNode","#getModelId","node: Node","modelName: string | undefined"],"sources":["/opt/agent/work/649c11185a3798db/packages/ts/generator-plugin-signals/src/SignalProcessor.ts"],"sourcesContent":["import { dirname, extname } from 'node:path';\nimport type Plugin from '@vaadin/hilla-generator-core/Plugin.js';\nimport { simplifyFullyQualifiedName } from '@vaadin/hilla-generator-core/Schema.js';\nimport { traverse } from '@vaadin/hilla-generator-utils/ast.js';\nimport createSourceFile from '@vaadin/hilla-generator-utils/createSourceFile.js';\nimport DependencyManager from '@vaadin/hilla-generator-utils/dependencies/DependencyManager.js';\nimport PathManager from '@vaadin/hilla-generator-utils/dependencies/PathManager.js';\nimport ast, { createTransformer } from 'tsc-template';\nimport {\n factory,\n isTypeReferenceNode,\n isIdentifier,\n type ReturnStatement,\n type SourceFile,\n type TypeNode,\n type ParameterDeclaration,\n type BinaryExpression,\n type Node,\n SyntaxKind,\n isTypeNode,\n transform,\n isFunctionDeclaration,\n isImportDeclaration,\n isUnionTypeNode,\n type PropertyAccessExpression,\n} from 'typescript';\nimport { ARRAY_TYPES, COLLECTION_SIGNALS, GENERIC_SIGNALS } from './utils.js';\n\nconst HILLA_REACT_SIGNALS = '@vaadin/hilla-react-signals';\nconst HILLA_LIT_FORM = '@vaadin/hilla-lit-form';\n\nexport default class SignalProcessor {\n readonly #dependencyManager: DependencyManager;\n readonly #owner: Plugin;\n readonly #service: string;\n readonly #methods: Map<string, string>;\n readonly #sourceFile: SourceFile;\n\n constructor(service: string, methods: Map<string, string>, sourceFile: SourceFile, owner: Plugin) {\n this.#service = service;\n this.#methods = methods;\n this.#sourceFile = sourceFile;\n this.#owner = owner;\n this.#dependencyManager = new DependencyManager(new PathManager({ extension: '.js' }));\n this.#dependencyManager.imports.fromCode(this.#sourceFile);\n }\n\n process(): SourceFile {\n this.#owner.logger.debug(`Processing signals: ${this.#service}`);\n const { imports } = this.#dependencyManager;\n\n const [, connectClientId] = Iterator.from(imports.default).find(([path]) => path.includes('connect-client'))!;\n\n const initTypeId = imports.named.getIdentifier('@vaadin/hilla-frontend', 'EndpointRequestInit');\n let initTypeUsageCount = 0;\n\n const [file] = transform<SourceFile>(this.#sourceFile, [\n createTransformer((node) => {\n if (isFunctionDeclaration(node)) {\n // Check if the function is a signal method.\n if (node.name && this.#methods.has(node.name.text)) {\n // Get the signal class ID that was already imported in\n // TransferTypes plugin.\n const signalId = imports.named.getIdentifier(\n HILLA_REACT_SIGNALS,\n simplifyFullyQualifiedName(this.#methods.get(node.name.text)!),\n )!;\n\n // Remove the `init` parameter.\n const params = node.parameters.filter(\n (p) => !(p.type && isTypeReferenceNode(p.type) && p.type.typeName === initTypeId),\n );\n\n // Calculate the default value for the signal class.\n const { defaultValue, defaultValueParameter } = this.#createDefaultValue(signalId.text, node.type);\n\n // Remove the `async` modifier if present.\n const modifiers = node.modifiers?.filter((m) => m.kind !== SyntaxKind.AsyncKeyword);\n\n // Remove the `Promise` type if present.\n const type =\n node.type &&\n isTypeReferenceNode(node.type) &&\n isIdentifier(node.type.typeName) &&\n node.type.typeName.text === 'Promise'\n ? node.type.typeArguments?.[0]\n : node.type;\n\n // Get the variable parameter names to be passed to the signal\n // class.\n const paramNames = params\n .map((p) => p.name)\n .filter((n) => isIdentifier(n))\n .map((n) => n.text);\n\n // Create the signal class method body applying all the data we've\n // gathered.\n const result = ast`function dummy() { %{\n return new ${signalId}(${defaultValue}${defaultValue ? ',' : ''}{\n client: ${connectClientId},\n endpoint: '${this.#service}',\n method: '${node.name.text}'\n ${paramNames.length ? `, params: { ${paramNames.join('\\n')} }` : ''} });\n }% });`;\n\n // Update the function declaration accordingly.\n return factory.updateFunctionDeclaration(\n node,\n modifiers,\n node.asteriskToken,\n node.name,\n node.typeParameters,\n defaultValueParameter ? [...params, defaultValueParameter] : params,\n type,\n factory.createBlock([result.node as ReturnStatement]),\n );\n } else if (\n node.parameters.some((p) => p.type && isTypeReferenceNode(p.type) && p.type.typeName === initTypeId)\n ) {\n // Count the number of times the `init` parameter is used to check\n // if the type import is necessary to be removed.\n initTypeUsageCount += 1;\n }\n }\n\n return node;\n }),\n ]).transformed;\n\n // Remove the `EndpointRequestInit` import if it is not used anymore.\n if (initTypeUsageCount === 0) {\n imports.named.remove('@vaadin/hilla-frontend', 'EndpointRequestInit');\n }\n\n return createSourceFile(\n [\n ...this.#dependencyManager.imports.toCode(),\n ...file.statements.filter((statement) => !isImportDeclaration(statement)),\n ],\n file.fileName,\n );\n }\n\n #createDefaultValue(signalClass: string, returnType?: TypeNode) {\n const { imports } = this.#dependencyManager;\n\n // If the signal class is a collection signal, we have no default value to\n // generate.\n if (COLLECTION_SIGNALS.includes(signalClass)) {\n return {};\n }\n\n // If we have the NumberSignal class, we can use `0` as the default.\n if (!GENERIC_SIGNALS.includes(signalClass)) {\n return signalClass.startsWith('NumberSignal') ? { defaultValue: '0' } : {};\n }\n\n // Extract the generic argument of the signal class to get the default\n // value type.\n const type = traverse(returnType!, (node) =>\n isTypeReferenceNode(node) &&\n isIdentifier(node.typeName) &&\n GENERIC_SIGNALS.includes(node.typeName.text) &&\n node.typeArguments\n ? node.typeArguments[0]\n : undefined,\n )!;\n\n // Import the model class for the signal type (or omitting the import if\n // the type is a nullable one).\n const modelId = traverse(type, (node) => {\n // In case the generic argument of a signal class is nullable (e.g.\n // `Signal<Person | undefined>`), the default value will be `undefined`.\n if (isUnionTypeNode(node) && node.types.length > 1 && node.types[1].kind === SyntaxKind.UndefinedKeyword) {\n return SyntaxKind.UndefinedKeyword;\n }\n\n // Otherwise, we have to import the model class.\n return this.#getModelId(node);\n })!;\n\n // If we have a signal class with a generic argument (but not a collection),\n // we need to provide a possibility to set the default value.\n const optionsMethodTypeId =\n imports.named.getIdentifier(HILLA_REACT_SIGNALS, 'SignalMethodOptions') ??\n imports.named.add(HILLA_REACT_SIGNALS, 'SignalMethodOptions');\n\n return {\n defaultValue:\n modelId === SyntaxKind.UndefinedKeyword\n ? (ast`options?.defaultValue`.node as PropertyAccessExpression)\n : (ast`options?.defaultValue ?? ${modelId}.createEmptyValue()`.node as BinaryExpression),\n defaultValueParameter: ast`function dummy( %{ options?: ${optionsMethodTypeId}<${type}> }% ) {}`\n .node as ParameterDeclaration,\n };\n }\n\n #getModelId(node: Node) {\n const { imports } = this.#dependencyManager;\n\n if (isIdentifier(node)) {\n // In case the node is an array type defined as `Array<T>` or\n // `ReadonlyArray<T>`, we need to import the `ArrayModel` class.\n if (ARRAY_TYPES.includes(node.text)) {\n return (\n imports.named.getIdentifier(HILLA_LIT_FORM, 'ArrayModel') ?? imports.named.add(HILLA_LIT_FORM, 'ArrayModel')\n );\n }\n\n // Otherwise, we calculate and import the model class.\n const [path] = Iterator.from(imports.default).find(([, id]) => id === node) ?? [];\n\n if (!path) {\n throw new Error(`Model not found for ${node.text}`);\n }\n\n const modelName = `${node.text}Model`;\n const modelPath = `${dirname(path)}/${modelName}${extname(path)}`;\n\n return imports.default.getIdentifier(modelPath) ?? imports.default.add(modelPath, modelName);\n } else if (isTypeNode(node)) {\n // If the node is a primitive type, we will import the corresponding\n // model class from `@vaadin/hilla-lit-form`.\n let modelName: string | undefined;\n\n switch (node.kind) {\n case SyntaxKind.StringKeyword:\n modelName = 'StringModel';\n break;\n case SyntaxKind.NumberKeyword:\n modelName = 'NumberModel';\n break;\n case SyntaxKind.BooleanKeyword:\n modelName = 'BooleanModel';\n break;\n case SyntaxKind.ArrayType:\n modelName = 'ArrayModel';\n break;\n default:\n return undefined;\n }\n\n return imports.named.getIdentifier(HILLA_LIT_FORM, modelName) ?? imports.named.add(HILLA_LIT_FORM, modelName);\n }\n\n return undefined;\n }\n}\n"],"version":3}
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"AAAA,OAAO,oDAAqD;AAG5D,OAAO,2CAA4C;AACnD,SAAS,2BAA4B;AAGrC,MAAM,cAAc,aAAa;CAC/B,MAAM,EAAE,mBAAmB,GAAG,MAAM,OAAO;AAC3C,oBAAmB;AACpB;AAED,MAAM,iBAAiB,QAAQ,IAAI,CAAC,YAAY,8DAA8D,OAAO,EAAE;AAEvH,SAAS,oBAAoBA,SAA6C;AACxE,QAAO,IAAI,IACT,OAAO,QAAQ,QAAQ,IAAI,MAAM,CAC9B,OAAO,CAAC,CAAC,GAAG,WAAW,KAAK;EAC3B,MAAM,cAAc,YAAY,MAAM,UAAU;AAChD,SAAO,iBAAiB,UAAU;CACnC,EAAC,CACD,QAAQ,CAAC,CAAC,MAAM,WAAW,KAAK;EAC/B,MAAM,cAAc,YAAY,MAAM,UAAU;EAChD,MAAM,iBAAkB,YAAyC,UAAU,qBAAqB;AAEhG,SAAO,kBAAkB,WAAW,iBAChC,eAAe,OACX,OACA,CAAC,MAAsC,UAAU,OAAO,EAAE,QAAQ,eAAe,SAAS,EAAE,KAAK,CAClG,CACA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAK,EAAU,GACtC;CACL,EAAC,CACD,OAAO,CAAC,gBAAgB,eAAe,KAAK;AAElD;AAED,SAAS,eAAeC,WAAkE;AACxF,QAAO,UAAU,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,KAAK,KAAK;EAC9D,MAAM,CAAC,GAAG,SAAS,OAAO,GAAG,KAAK,MAAM,IAAI;EAC5C,MAAM,iBAAiB,WAAW,IAAI,QAAQ,IAAI,IAAI;AACtD,iBAAe,IAAI,QAAQ,KAAK;AAChC,aAAW,IAAI,SAAS,eAAe;AACvC,SAAO;CACR,GAAE,IAAI,MAAmC;AAC3C;AAED,eAAe,MAAM,sBAAsB,OAAO;CAChD,AAAS,QAAQC,eAAoC;EACnD,MAAM,qBAAqB,oBAAoB,cAAc;EAC7D,MAAM,WAAW,eAAe,mBAAmB;AACnD,WAAS,QAAQ,CAAC,SAAS,YAAY;GACrC,MAAM,QAAQ,cAAc,QAAQ,UAAU,CAAC,WAAW,OAAO,cAAc,EAAE,QAAQ,KAAK;AAC9F,OAAI,SAAS,GAAG;AACd,kBAAc,QAAQ,SAAS,IAAI,gBACjC,SACA,SACA,cAAc,QAAQ,QACtB,MACA,SAAS;GACZ;EACF,EAAC;CACH;CAID,IAAa,OAAe;AAC1B,SAAO,OAAO,KAAK;CACpB;AACF","names":["storage: SharedStorage","signalMap: Map<string, string>","sharedStorage: SharedStorage"],"sources":["/opt/agent/work/
|
|
1
|
+
{"mappings":"AAAA,OAAO,oDAAqD;AAG5D,OAAO,2CAA4C;AACnD,SAAS,2BAA4B;AAGrC,MAAM,cAAc,aAAa;CAC/B,MAAM,EAAE,mBAAmB,GAAG,MAAM,OAAO;AAC3C,oBAAmB;AACpB;AAED,MAAM,iBAAiB,QAAQ,IAAI,CAAC,YAAY,8DAA8D,OAAO,EAAE;AAEvH,SAAS,oBAAoBA,SAA6C;AACxE,QAAO,IAAI,IACT,OAAO,QAAQ,QAAQ,IAAI,MAAM,CAC9B,OAAO,CAAC,CAAC,GAAG,WAAW,KAAK;EAC3B,MAAM,cAAc,YAAY,MAAM,UAAU;AAChD,SAAO,iBAAiB,UAAU;CACnC,EAAC,CACD,QAAQ,CAAC,CAAC,MAAM,WAAW,KAAK;EAC/B,MAAM,cAAc,YAAY,MAAM,UAAU;EAChD,MAAM,iBAAkB,YAAyC,UAAU,qBAAqB;AAEhG,SAAO,kBAAkB,WAAW,iBAChC,eAAe,OACX,OACA,CAAC,MAAsC,UAAU,OAAO,EAAE,QAAQ,eAAe,SAAS,EAAE,KAAK,CAClG,CACA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAK,EAAU,GACtC;CACL,EAAC,CACD,OAAO,CAAC,gBAAgB,eAAe,KAAK;AAElD;AAED,SAAS,eAAeC,WAAkE;AACxF,QAAO,UAAU,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,KAAK,KAAK;EAC9D,MAAM,CAAC,GAAG,SAAS,OAAO,GAAG,KAAK,MAAM,IAAI;EAC5C,MAAM,iBAAiB,WAAW,IAAI,QAAQ,IAAI,IAAI;AACtD,iBAAe,IAAI,QAAQ,KAAK;AAChC,aAAW,IAAI,SAAS,eAAe;AACvC,SAAO;CACR,GAAE,IAAI,MAAmC;AAC3C;AAED,eAAe,MAAM,sBAAsB,OAAO;CAChD,AAAS,QAAQC,eAAoC;EACnD,MAAM,qBAAqB,oBAAoB,cAAc;EAC7D,MAAM,WAAW,eAAe,mBAAmB;AACnD,WAAS,QAAQ,CAAC,SAAS,YAAY;GACrC,MAAM,QAAQ,cAAc,QAAQ,UAAU,CAAC,WAAW,OAAO,cAAc,EAAE,QAAQ,KAAK;AAC9F,OAAI,SAAS,GAAG;AACd,kBAAc,QAAQ,SAAS,IAAI,gBACjC,SACA,SACA,cAAc,QAAQ,QACtB,MACA,SAAS;GACZ;EACF,EAAC;CACH;CAID,IAAa,OAAe;AAC1B,SAAO,OAAO,KAAK;CACpB;AACF","names":["storage: SharedStorage","signalMap: Map<string, string>","sharedStorage: SharedStorage"],"sources":["/opt/agent/work/649c11185a3798db/packages/ts/generator-plugin-signals/src/index.ts"],"sourcesContent":["import Plugin from '@vaadin/hilla-generator-core/Plugin.js';\nimport type { SharedStorage } from '@vaadin/hilla-generator-core/SharedStorage.js';\nimport type { OpenAPIV3 } from 'openapi-types';\nimport SignalProcessor from './SignalProcessor.js';\nimport { SIGNALS } from './utils.js';\n\n// Polyfill for iterator helpers (Stage 3 proposal)\nif (!('Iterator' in globalThis)) {\n const { installIntoGlobal } = await import('iterator-helpers-polyfill');\n installIntoGlobal();\n}\n\nconst SIGNAL_CLASSES = SIGNALS.map((signal) => `#/components/schemas/com.vaadin.hilla.runtime.transfertypes.${signal}`);\n\nfunction mapPathToSignalType(storage: SharedStorage): Map<string, string> {\n return new Map(\n Object.entries(storage.api.paths)\n .filter(([_, pathObject]) => {\n const response200 = pathObject?.post?.responses['200'];\n return response200 && !('$ref' in response200);\n })\n .flatMap(([path, pathObject]) => {\n const response200 = pathObject?.post?.responses['200'];\n const responseSchema = (response200 as OpenAPIV3.ResponseObject).content?.['application/json']?.schema;\n\n return responseSchema && 'anyOf' in responseSchema\n ? responseSchema.anyOf\n ?.filter(\n (c): c is OpenAPIV3.ReferenceObject => '$ref' in c && !!c.$ref && SIGNAL_CLASSES.includes(c.$ref),\n )\n .map((c) => [path, c.$ref] as const)\n : null;\n })\n .filter((signalArray) => signalArray != null),\n );\n}\n\nfunction groupByService(signalMap: Map<string, string>): Map<string, Map<string, string>> {\n return signalMap.entries().reduce((serviceMap, [path, type]) => {\n const [_, service, method] = path.split('/');\n const serviceMethods = serviceMap.get(service) ?? new Map<string, string>();\n serviceMethods.set(method, type);\n serviceMap.set(service, serviceMethods);\n return serviceMap;\n }, new Map<string, Map<string, string>>());\n}\n\nexport default class SignalsPlugin extends Plugin {\n override execute(sharedStorage: SharedStorage): void {\n const methodsWithSignals = mapPathToSignalType(sharedStorage);\n const services = groupByService(methodsWithSignals);\n services.forEach((methods, service) => {\n const index = sharedStorage.sources.findIndex((source) => source.fileName === `${service}.ts`);\n if (index >= 0) {\n sharedStorage.sources[index] = new SignalProcessor(\n service,\n methods,\n sharedStorage.sources[index],\n this,\n ).process();\n }\n });\n }\n\n declare ['constructor']: typeof SignalsPlugin;\n\n override get path(): string {\n return import.meta.url;\n }\n}\n"],"version":3}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vaadin/hilla-generator-plugin-signals",
|
|
3
|
-
"version": "24.9.
|
|
3
|
+
"version": "24.9.3",
|
|
4
4
|
"description": "A Hilla TypeScript Generator plugin to add Shared Signals support",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -49,8 +49,8 @@
|
|
|
49
49
|
"access": "public"
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
|
-
"@vaadin/hilla-generator-core": "24.9.
|
|
53
|
-
"@vaadin/hilla-generator-utils": "24.9.
|
|
52
|
+
"@vaadin/hilla-generator-core": "24.9.3",
|
|
53
|
+
"@vaadin/hilla-generator-utils": "24.9.3",
|
|
54
54
|
"fast-deep-equal": "3.1.3",
|
|
55
55
|
"iterator-helpers-polyfill": "3.0.1",
|
|
56
56
|
"openapi-types": "12.1.3",
|
|
@@ -58,8 +58,8 @@
|
|
|
58
58
|
"typescript": "5.8.3"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
|
-
"@vaadin/hilla-generator-plugin-backbone": "24.9.
|
|
62
|
-
"@vaadin/hilla-generator-plugin-client": "24.9.
|
|
63
|
-
"@vaadin/hilla-generator-plugin-transfertypes": "24.9.
|
|
61
|
+
"@vaadin/hilla-generator-plugin-backbone": "24.9.3",
|
|
62
|
+
"@vaadin/hilla-generator-plugin-client": "24.9.3",
|
|
63
|
+
"@vaadin/hilla-generator-plugin-transfertypes": "24.9.3"
|
|
64
64
|
}
|
|
65
65
|
}
|
package/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"AAAA,OAAO,MAAMA,UAA6B;CAAC;CAAgB;CAAe;AAAa;AACvF,OAAO,MAAMC,qBAAwC,CAAC,YAAa;AACnE,OAAO,MAAMC,kBAAqC,CAAC,eAAe,YAAa;AAE/E,OAAO,MAAMC,cAAiC,CAAC,SAAS,eAAgB","names":["SIGNALS: readonly string[]","COLLECTION_SIGNALS: readonly string[]","GENERIC_SIGNALS: readonly string[]","ARRAY_TYPES: readonly string[]"],"sources":["/opt/agent/work/
|
|
1
|
+
{"mappings":"AAAA,OAAO,MAAMA,UAA6B;CAAC;CAAgB;CAAe;AAAa;AACvF,OAAO,MAAMC,qBAAwC,CAAC,YAAa;AACnE,OAAO,MAAMC,kBAAqC,CAAC,eAAe,YAAa;AAE/E,OAAO,MAAMC,cAAiC,CAAC,SAAS,eAAgB","names":["SIGNALS: readonly string[]","COLLECTION_SIGNALS: readonly string[]","GENERIC_SIGNALS: readonly string[]","ARRAY_TYPES: readonly string[]"],"sources":["/opt/agent/work/649c11185a3798db/packages/ts/generator-plugin-signals/src/utils.ts"],"sourcesContent":["export const SIGNALS: readonly string[] = ['NumberSignal', 'ValueSignal', 'ListSignal'];\nexport const COLLECTION_SIGNALS: readonly string[] = ['ListSignal'];\nexport const GENERIC_SIGNALS: readonly string[] = ['ValueSignal', 'ListSignal'];\n\nexport const ARRAY_TYPES: readonly string[] = ['Array', 'ReadonlyArray'];\n"],"version":3}
|