@gtkx/codegen 1.1.0 → 1.2.0

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 (149) hide show
  1. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  2. package/dist/analysis/descriptor-render.js +14 -10
  3. package/dist/analysis/descriptor-render.js.map +1 -1
  4. package/dist/analysis/descriptor.d.ts +11 -5
  5. package/dist/analysis/descriptor.d.ts.map +1 -1
  6. package/dist/analysis/descriptor.js +25 -9
  7. package/dist/analysis/descriptor.js.map +1 -1
  8. package/dist/analysis/interface-conflicts.d.ts +3 -1
  9. package/dist/analysis/interface-conflicts.d.ts.map +1 -1
  10. package/dist/analysis/interface-conflicts.js +3 -8
  11. package/dist/analysis/interface-conflicts.js.map +1 -1
  12. package/dist/analysis/ts-type.d.ts +3 -2
  13. package/dist/analysis/ts-type.d.ts.map +1 -1
  14. package/dist/analysis/ts-type.js +16 -9
  15. package/dist/analysis/ts-type.js.map +1 -1
  16. package/dist/analysis/type-shape.d.ts +3 -2
  17. package/dist/analysis/type-shape.d.ts.map +1 -1
  18. package/dist/analysis/type-shape.js +2 -1
  19. package/dist/analysis/type-shape.js.map +1 -1
  20. package/dist/compile.d.ts +4 -5
  21. package/dist/compile.d.ts.map +1 -1
  22. package/dist/compile.js +56 -4
  23. package/dist/compile.js.map +1 -1
  24. package/dist/docs/api-reference.d.ts +2 -0
  25. package/dist/docs/api-reference.d.ts.map +1 -1
  26. package/dist/docs/api-reference.js +1 -1
  27. package/dist/docs/api-reference.js.map +1 -1
  28. package/dist/docs/pipeline.d.ts +1 -0
  29. package/dist/docs/pipeline.d.ts.map +1 -1
  30. package/dist/docs/pipeline.js +10 -3
  31. package/dist/docs/pipeline.js.map +1 -1
  32. package/dist/docs/symbol-page.d.ts.map +1 -1
  33. package/dist/docs/symbol-page.js +1 -3
  34. package/dist/docs/symbol-page.js.map +1 -1
  35. package/dist/fingerprint.d.ts +11 -5
  36. package/dist/fingerprint.d.ts.map +1 -1
  37. package/dist/fingerprint.js +22 -19
  38. package/dist/fingerprint.js.map +1 -1
  39. package/dist/gi.d.ts +1 -0
  40. package/dist/gi.d.ts.map +1 -1
  41. package/dist/gi.js +7 -2
  42. package/dist/gi.js.map +1 -1
  43. package/dist/gir/gir-path.d.ts +1 -1
  44. package/dist/gir/gir-path.js +1 -1
  45. package/dist/gir/gir-path.js.map +1 -1
  46. package/dist/gir/library.d.ts +5 -1
  47. package/dist/gir/library.d.ts.map +1 -1
  48. package/dist/gir/library.js +8 -1
  49. package/dist/gir/library.js.map +1 -1
  50. package/dist/gir/parse.d.ts.map +1 -1
  51. package/dist/gir/parse.js +4 -1
  52. package/dist/gir/parse.js.map +1 -1
  53. package/dist/gir/primitives.js +1 -1
  54. package/dist/gir/primitives.js.map +1 -1
  55. package/dist/khronos/args.d.ts.map +1 -1
  56. package/dist/khronos/args.js +8 -6
  57. package/dist/khronos/args.js.map +1 -1
  58. package/dist/khronos/render.d.ts.map +1 -1
  59. package/dist/khronos/render.js +8 -4
  60. package/dist/khronos/render.js.map +1 -1
  61. package/dist/runner.d.ts +2 -0
  62. package/dist/runner.d.ts.map +1 -1
  63. package/dist/runner.js +5 -3
  64. package/dist/runner.js.map +1 -1
  65. package/dist/staging.d.ts.map +1 -1
  66. package/dist/staging.js +1 -1
  67. package/dist/staging.js.map +1 -1
  68. package/dist/store/compile-store.d.ts +0 -1
  69. package/dist/store/compile-store.d.ts.map +1 -1
  70. package/dist/store/compile-store.js +7 -34
  71. package/dist/store/compile-store.js.map +1 -1
  72. package/dist/store/gi/callables.d.ts +1 -3
  73. package/dist/store/gi/callables.d.ts.map +1 -1
  74. package/dist/store/gi/callables.js +19 -4
  75. package/dist/store/gi/callables.js.map +1 -1
  76. package/dist/store/gi/class.d.ts.map +1 -1
  77. package/dist/store/gi/class.js +48 -9
  78. package/dist/store/gi/class.js.map +1 -1
  79. package/dist/store/gi/constant.js +1 -1
  80. package/dist/store/gi/constant.js.map +1 -1
  81. package/dist/store/gi/enum.d.ts.map +1 -1
  82. package/dist/store/gi/enum.js +2 -5
  83. package/dist/store/gi/enum.js.map +1 -1
  84. package/dist/store/gi/interface.js +2 -2
  85. package/dist/store/gi/interface.js.map +1 -1
  86. package/dist/store/gi/method.d.ts.map +1 -1
  87. package/dist/store/gi/method.js +4 -7
  88. package/dist/store/gi/method.js.map +1 -1
  89. package/dist/store/gi/property-accessor.d.ts +0 -3
  90. package/dist/store/gi/property-accessor.d.ts.map +1 -1
  91. package/dist/store/gi/property-accessor.js +15 -108
  92. package/dist/store/gi/property-accessor.js.map +1 -1
  93. package/dist/store/gi/record-constructor.js +3 -3
  94. package/dist/store/gi/record-constructor.js.map +1 -1
  95. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  96. package/dist/store/gi/record-field-accessor.js +15 -3
  97. package/dist/store/gi/record-field-accessor.js.map +1 -1
  98. package/dist/store/gi/return-wrap.js +1 -1
  99. package/dist/store/gi/return-wrap.js.map +1 -1
  100. package/dist/store/gi/signal.d.ts.map +1 -1
  101. package/dist/store/gi/signal.js +25 -4
  102. package/dist/store/gi/signal.js.map +1 -1
  103. package/dist/store/jsx-store.d.ts.map +1 -1
  104. package/dist/store/jsx-store.js +0 -1
  105. package/dist/store/jsx-store.js.map +1 -1
  106. package/dist/store/store-fs.d.ts +0 -1
  107. package/dist/store/store-fs.d.ts.map +1 -1
  108. package/dist/store/store-fs.js +2 -7
  109. package/dist/store/store-fs.js.map +1 -1
  110. package/dist/xml.d.ts +1 -0
  111. package/dist/xml.d.ts.map +1 -1
  112. package/dist/xml.js +28 -1
  113. package/dist/xml.js.map +1 -1
  114. package/overrides/gobject/object.ts.ejs +2 -0
  115. package/package.json +3 -3
  116. package/src/analysis/descriptor-render.ts +19 -10
  117. package/src/analysis/descriptor.ts +43 -9
  118. package/src/analysis/interface-conflicts.ts +6 -8
  119. package/src/analysis/ts-type.ts +30 -11
  120. package/src/analysis/type-shape.ts +5 -2
  121. package/src/compile.ts +87 -6
  122. package/src/docs/api-reference.ts +3 -1
  123. package/src/docs/pipeline.ts +13 -7
  124. package/src/docs/symbol-page.ts +0 -4
  125. package/src/fingerprint.ts +31 -38
  126. package/src/gi.ts +9 -2
  127. package/src/gir/gir-path.ts +1 -1
  128. package/src/gir/library.ts +9 -1
  129. package/src/gir/parse.ts +6 -1
  130. package/src/gir/primitives.ts +1 -1
  131. package/src/khronos/args.ts +9 -6
  132. package/src/khronos/render.ts +8 -6
  133. package/src/runner.ts +7 -3
  134. package/src/staging.ts +1 -3
  135. package/src/store/compile-store.ts +7 -40
  136. package/src/store/gi/callables.ts +26 -7
  137. package/src/store/gi/class.ts +63 -7
  138. package/src/store/gi/constant.ts +1 -1
  139. package/src/store/gi/enum.ts +2 -6
  140. package/src/store/gi/interface.ts +2 -2
  141. package/src/store/gi/method.ts +4 -9
  142. package/src/store/gi/property-accessor.ts +22 -193
  143. package/src/store/gi/record-constructor.ts +3 -3
  144. package/src/store/gi/record-field-accessor.ts +18 -3
  145. package/src/store/gi/return-wrap.ts +1 -1
  146. package/src/store/gi/signal.ts +30 -4
  147. package/src/store/jsx-store.ts +0 -1
  148. package/src/store/store-fs.ts +3 -9
  149. package/src/xml.ts +43 -1
@@ -180,6 +180,18 @@ const visitInlineStructFields = (context, fields, baseOffset, visitors) => {
180
180
  visitInlineStructSlot(context, entry, baseOffset, visitors);
181
181
  }
182
182
  };
183
+ const inlineLeafCount = (context, fields) => {
184
+ let count = 0;
185
+ visitInlineStructFields(context, fields, 0, {
186
+ leaf: () => {
187
+ count += 1;
188
+ },
189
+ nested: (_jsName, nested) => {
190
+ count += inlineLeafCount(context, nested);
191
+ },
192
+ });
193
+ return count;
194
+ };
183
195
  const elementAccessExpr = (descriptor, offset) => `read(__array, ${descriptor}, __base + ${String(offset)})`;
184
196
  const renderElementReadEntry = (context, visit) => {
185
197
  const { jsName, descriptor, offset, slot, type } = visit;
@@ -243,7 +255,7 @@ const structArrayGetterBlock = (options) => {
243
255
  return renderBlock(`get ${jsName}(): ${tsType}`, body);
244
256
  };
245
257
  const structArraySetterStatements = (context, options) => {
246
- const { elementDescriptor, offset, elementSize, elementFields } = options;
258
+ const { elementDescriptor, offset, elementSize, elementFields, lengthExpr } = options;
247
259
  const writes = [];
248
260
  appendElementWriteStatements(context, {
249
261
  fields: elementFields,
@@ -256,7 +268,7 @@ const structArraySetterStatements = (context, options) => {
256
268
  `const __descriptor = ${elementDescriptor};`,
257
269
  `const __array = read(getHandle(this), __descriptor, ${String(offset)}) as ReturnType<typeof getHandle>;`,
258
270
  "for (const [__index, __element] of __value.entries()) {",
259
- indent(loop, 1),
271
+ indent(`if (__index >= ${lengthExpr}) {\n break;\n}\n\n${loop}`, 1),
260
272
  "}",
261
273
  `write(getHandle(this), __descriptor, ${String(offset)}, __array);`,
262
274
  ].join("\n");
@@ -302,7 +314,7 @@ const resolveStructArray = (context, target) => {
302
314
  return undefined;
303
315
  }
304
316
  const shape = resolveStructArrayShape(context, elements, siblingFields);
305
- if (shape === undefined) {
317
+ if (shape === undefined || inlineLeafCount(context, elements.elementFields) === 0) {
306
318
  return undefined;
307
319
  }
308
320
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"record-field-accessor.js","sourceRoot":"","sources":["../../../src/store/gi/record-field-accessor.ts"],"names":[],"mappings":"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","sourcesContent":["import { toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirAnnotations } from \"../../gir/annotations.js\";\nimport type { GirField } from \"../../gir/field.js\";\nimport type { GirRecord } from \"../../gir/record.js\";\nimport type { FieldSlot } from \"../../gir/size.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { GirType } from \"../../gir/type.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { isInlineCallbackRef, renderDescriptor } from \"../../analysis/descriptor-render.js\";\nimport { tStruct } from \"../../analysis/descriptor.js\";\nimport { renderTsType } from \"../../analysis/ts-type.js\";\nimport { indent, renderBlock } from \"../../writer/emit.js\";\nimport { getDoc } from \"./doc-spec.js\";\nimport { bitMask, computeRecordFieldSlots, mergeBitfield, type RecordFieldSlot } from \"./record-layout.js\";\nimport { wrapReturnValue } from \"./return-wrap.js\";\nimport { isValueMarshalable } from \"./value-marshalable.js\";\n\ntype FieldWriteSpec = {\n descriptor: string;\n slot: FieldSlot;\n targetExpr: string;\n valueExpr: string;\n};\n\ntype AdmittedField = {\n field: GirField & { type: TypeId };\n jsName: string;\n};\n\ntype RecordFieldEntry = {\n jsName: string;\n tsType: string;\n isWritable: boolean;\n doc: string | undefined;\n annotations: GirAnnotations;\n};\n\ntype InlineFieldVisit = {\n jsName: string;\n descriptor: string;\n offset: number;\n slot: FieldSlot;\n type: TypeId;\n};\n\ntype InlineFieldVisitors = {\n leaf: (visit: InlineFieldVisit) => void;\n nested: (jsName: string, nested: GirField[], offset: number) => void;\n};\n\ntype ElementWriteOptions = {\n fields: GirField[];\n baseOffset: number;\n valuePath: string;\n out: string[];\n};\n\ntype StructArrayTarget = {\n field: GirField;\n jsName: string;\n slot: FieldSlot;\n siblingFields: GirField[];\n};\n\ntype StructArrayAccessorOptions = {\n context: ModuleContext;\n jsName: string;\n tsType: string;\n elementDescriptor: string;\n offset: number;\n lengthExpr: string;\n elementSize: number;\n elementFields: GirField[];\n};\n\ntype StructArrayResolution = {\n fieldType: TypeId;\n elementFields: GirField[];\n lengthExpr: string;\n elementSize: number;\n};\n\ntype StructArrayElements = {\n arrayType: Extract<GirType, { kind: \"carray\" }>;\n elementFields: GirField[];\n};\n\ntype AccessorOptions = {\n context: ModuleContext;\n jsName: string;\n tsType: string;\n descriptor: string;\n slot: FieldSlot;\n fieldType: TypeId;\n};\n\nconst isMarshalableField = (context: ModuleContext, field: GirField): boolean => {\n if (field.cType?.endsWith(\"*\") === true) {\n return true;\n }\n\n const type = field.type === undefined ? undefined : context.library.typeFor(field.type);\n\n if (type?.kind !== \"record\") {\n return true;\n }\n\n return isValueMarshalable(context, type.namespace.name, type.value);\n};\n\nconst isEmittableField = (context: ModuleContext, field: GirField): field is GirField & { type: TypeId } =>\n !field.private &&\n field.type !== undefined &&\n !isInlineCallbackRef(context.library, field.type) &&\n isMarshalableField(context, field);\n\nconst emitFieldWrite = (context: ModuleContext, spec: FieldWriteSpec): string => {\n const { descriptor, slot, targetExpr, valueExpr } = spec;\n context.addRuntimeImport(\"write\");\n\n if (slot.bitWidth === undefined) {\n context.addRuntimeImport(\"toNative\");\n\n return (\n `write(${targetExpr}, ${descriptor}, ${String(slot.byteOffset)}, ` +\n `toNative(${descriptor}, ${valueExpr}));`\n );\n }\n\n context.addRuntimeImport(\"read\");\n\n const merged = mergeBitfield(\n `(read(${targetExpr}, ${descriptor}, ${String(slot.byteOffset)}) as number)`,\n valueExpr,\n bitMask(slot.bitWidth),\n slot.bitOffset ?? 0,\n );\n\n return `write(${targetExpr}, ${descriptor}, ${String(slot.byteOffset)}, ${merged});`;\n};\n\nconst admitField = (\n context: ModuleContext,\n slot: RecordFieldSlot,\n claimedNames: Set<string>,\n): AdmittedField | undefined => {\n const { field } = slot;\n\n if (!field.readable && !field.writable) {\n return undefined;\n }\n\n if (!isEmittableField(context, field)) {\n return undefined;\n }\n\n const jsName = toCamelIdentifier(field.name);\n\n if (claimedNames.has(jsName)) {\n return undefined;\n }\n\n if (jsName === \"constructor\") {\n return undefined;\n }\n\n return { field, jsName };\n};\n\nconst resolveRecordFieldEntry = (\n context: ModuleContext,\n slot: RecordFieldSlot,\n claimedNames: Set<string>,\n): RecordFieldEntry | undefined => {\n const admitted = admitField(context, slot, claimedNames);\n\n if (admitted === undefined) {\n return undefined;\n }\n\n return {\n jsName: admitted.jsName,\n tsType: renderTsType(context, admitted.field.type, false),\n isWritable: admitted.field.writable,\n doc: admitted.field.doc,\n annotations: admitted.field.annotations,\n };\n};\n\nconst renderRecordFieldAccessor = (\n context: ModuleContext,\n slot: RecordFieldSlot,\n claimedNames: Set<string>,\n siblingFields: GirField[],\n): string | undefined => {\n const admitted = admitField(context, slot, claimedNames);\n\n if (admitted === undefined) {\n return undefined;\n }\n\n const { field, jsName } = admitted;\n const doc = getDoc(field);\n const structArray = renderStructArrayAccessor(context, { field, jsName, slot: slot.slot, siblingFields });\n\n if (structArray !== undefined) {\n return `${doc}${structArray}`;\n }\n\n if (!isAccessorEligibleType(context, field.type)) {\n const tsType = renderTsType(context, field.type, false);\n\n return `${doc}declare ${jsName}: ${tsType};`;\n }\n\n const descriptor = context.hoistDescriptor(\n renderDescriptor(context, field.type, \"none\", { isInline: isInlineField(context, field) }),\n );\n\n const tsType = renderTsType(context, field.type, false);\n\n const accessorOptions: AccessorOptions = {\n context,\n jsName,\n tsType,\n descriptor,\n slot: slot.slot,\n fieldType: field.type,\n };\n\n const blocks: string[] = [getterBlock(accessorOptions)];\n\n if (field.writable) {\n blocks.push(setterBlock(accessorOptions));\n }\n\n return `${doc}${blocks.join(\"\\n\\n\")}`;\n};\n\nconst isAccessorEligibleType = (context: ModuleContext, ref: TypeId): boolean => {\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return true;\n }\n\n switch (type.kind) {\n case \"primitive\": {\n return type.category !== \"void\" && type.category !== \"unichar\";\n }\n case \"class\":\n case \"interface\":\n case \"record\":\n case \"enum\":\n case \"alias\": {\n return true;\n }\n case \"callback\": {\n return context.library.nameFor(ref) !== undefined;\n }\n case \"carray\": {\n return type.fixedSize !== undefined;\n }\n case \"list\":\n case \"hashtable\":\n case \"varargs\": {\n return false;\n }\n }\n};\n\nconst isInlineField = (context: ModuleContext, field: GirField): boolean =>\n field.type !== undefined && resolveInlineStructFields(context, field.type, field.cType) !== undefined;\n\nconst resolveInlineStructFields = (\n context: ModuleContext,\n ref: TypeId | undefined,\n occurrenceCType: string | undefined,\n): GirField[] | undefined => {\n if (ref === undefined) {\n return undefined;\n }\n\n if (occurrenceCType?.endsWith(\"*\") === true) {\n return undefined;\n }\n\n const type = context.library.typeFor(ref);\n\n if (type?.kind !== \"record\") {\n return undefined;\n }\n\n if (type.value.cType?.endsWith(\"*\") === true) {\n return undefined;\n }\n\n if (type.value.fields.length === 0) {\n return undefined;\n }\n\n return type.value.fields;\n};\n\nconst arrayLengthExpression = (\n arrayRef: Extract<GirType, { kind: \"carray\" }>,\n siblingFields: GirField[],\n): string | undefined => {\n if (arrayRef.fixedSize !== undefined) {\n return String(arrayRef.fixedSize);\n }\n\n if (arrayRef.lengthParameterIndex === undefined) {\n return undefined;\n }\n\n const lengthField = siblingFields.filter((field) => !field.private)[arrayRef.lengthParameterIndex];\n\n if (lengthField === undefined) {\n return undefined;\n }\n\n return `this.${toCamelIdentifier(lengthField.name)}`;\n};\n\nconst visitInlineStructSlot = (\n context: ModuleContext,\n entry: RecordFieldSlot,\n baseOffset: number,\n visitors: InlineFieldVisitors,\n): void => {\n const { field, slot } = entry;\n\n if (field.private || field.type === undefined || isInlineCallbackRef(context.library, field.type)) {\n return;\n }\n\n const jsName = toCamelIdentifier(field.name);\n const offset = baseOffset + slot.byteOffset;\n const nested = resolveInlineStructFields(context, field.type, field.cType);\n\n if (nested !== undefined) {\n visitors.nested(jsName, nested, offset);\n\n return;\n }\n\n if (!isAccessorEligibleType(context, field.type)) {\n return;\n }\n\n const descriptor = context.hoistDescriptor(renderDescriptor(context, field.type, \"none\"));\n visitors.leaf({ jsName, descriptor, offset, slot, type: field.type });\n};\n\nconst visitInlineStructFields = (\n context: ModuleContext,\n fields: GirField[],\n baseOffset: number,\n visitors: InlineFieldVisitors,\n): void => {\n const { slots } = computeRecordFieldSlots(context, fields);\n\n for (const entry of slots) {\n visitInlineStructSlot(context, entry, baseOffset, visitors);\n }\n};\n\nconst elementAccessExpr = (descriptor: string, offset: number): string =>\n `read(__array, ${descriptor}, __base + ${String(offset)})`;\n\nconst renderElementReadEntry = (context: ModuleContext, visit: InlineFieldVisit): string => {\n const { jsName, descriptor, offset, slot, type } = visit;\n const access = elementAccessExpr(descriptor, offset);\n\n if (slot.bitWidth === undefined) {\n return `${jsName}: ${access} as ${renderTsType(context, type, false)}`;\n }\n\n const shift = slot.bitOffset ?? 0;\n\n return `${jsName}: (((${access} as number) >>> ${String(shift)}) & ${String(bitMask(slot.bitWidth))})`;\n};\n\nconst renderElementReadObject = (context: ModuleContext, fields: GirField[], baseOffset: number): string => {\n const entries: string[] = [];\n\n visitInlineStructFields(context, fields, baseOffset, {\n leaf: (visit) => {\n entries.push(renderElementReadEntry(context, visit));\n },\n nested: (jsName, nested, offset) => {\n entries.push(`${jsName}: ${renderElementReadObject(context, nested, offset)}`);\n },\n });\n\n return `{ ${entries.join(\", \")} }`;\n};\n\nconst renderElementWriteStatement = (visit: InlineFieldVisit, valuePath: string): string => {\n const { jsName, descriptor, offset, slot } = visit;\n const valueExpr = `${valuePath}.${jsName}`;\n\n if (slot.bitWidth === undefined) {\n return `write(__array, ${descriptor}, __base + ${String(offset)}, ${valueExpr});`;\n }\n\n const merged = mergeBitfield(\n `(${elementAccessExpr(descriptor, offset)} as number)`,\n valueExpr,\n bitMask(slot.bitWidth),\n slot.bitOffset ?? 0,\n );\n\n return `write(__array, ${descriptor}, __base + ${String(offset)}, ${merged});`;\n};\n\nconst appendElementWriteStatements = (context: ModuleContext, options: ElementWriteOptions): void => {\n const { fields, baseOffset, valuePath, out } = options;\n\n visitInlineStructFields(context, fields, baseOffset, {\n leaf: (visit) => {\n out.push(renderElementWriteStatement(visit, valuePath));\n },\n nested: (jsName, nested, offset) => {\n appendElementWriteStatements(context, {\n fields: nested,\n baseOffset: offset,\n valuePath: `${valuePath}.${jsName}`,\n out,\n });\n },\n });\n};\n\nconst structArrayGetterBlock = (options: StructArrayAccessorOptions): string => {\n const { context, jsName, tsType, elementDescriptor, offset, lengthExpr, elementSize, elementFields } = options;\n const element = renderElementReadObject(context, elementFields, 0);\n const loop = [`const __base = __index * ${String(elementSize)};`, `__result.push(${element});`].join(\"\\n\");\n const handleType = \"ReturnType<typeof getHandle>\";\n\n const body = [\n `const __array = read(getHandle(this), ${elementDescriptor}, ${String(offset)}) as ${handleType};`,\n `const __result: ${tsType} = [];`,\n `for (let __index = 0; __index < ${lengthExpr}; __index++) {`,\n indent(loop, 1),\n \"}\",\n \"return __result;\",\n ].join(\"\\n\");\n\n return renderBlock(`get ${jsName}(): ${tsType}`, body);\n};\n\nconst structArraySetterStatements = (context: ModuleContext, options: StructArrayAccessorOptions): string => {\n const { elementDescriptor, offset, elementSize, elementFields } = options;\n const writes: string[] = [];\n\n appendElementWriteStatements(context, {\n fields: elementFields,\n baseOffset: 0,\n valuePath: \"__element\",\n out: writes,\n });\n\n const loop = [`const __base = __index * ${String(elementSize)};`, ...writes].join(\"\\n\");\n\n return [\n `const __descriptor = ${elementDescriptor};`,\n `const __array = read(getHandle(this), __descriptor, ${String(offset)}) as ReturnType<typeof getHandle>;`,\n \"for (const [__index, __element] of __value.entries()) {\",\n indent(loop, 1),\n \"}\",\n `write(getHandle(this), __descriptor, ${String(offset)}, __array);`,\n ].join(\"\\n\");\n};\n\nconst structArraySetterBlock = (options: StructArrayAccessorOptions): string =>\n renderBlock(\n `set ${options.jsName}(__value: ${options.tsType})`,\n structArraySetterStatements(options.context, options),\n );\n\nconst isPlainDataRecord = (record: GirRecord): boolean =>\n record.glibGetType === undefined &&\n record.constructors.length === 0 &&\n record.functions.length === 0 &&\n record.methods.length === 0;\n\nconst resolveStructArrayElements = (context: ModuleContext, fieldType: TypeId): StructArrayElements | undefined => {\n const arrayType = context.library.typeFor(fieldType);\n\n if (arrayType?.kind !== \"carray\") {\n return undefined;\n }\n\n const elementType = context.library.typeFor(arrayType.element);\n\n if (elementType?.kind === \"record\" && !isPlainDataRecord(elementType.value)) {\n return undefined;\n }\n\n const elementFields = resolveInlineStructFields(context, arrayType.element, arrayType.elementCType);\n\n if (elementFields === undefined) {\n return undefined;\n }\n\n return { arrayType, elementFields };\n};\n\nconst resolveStructArrayShape = (\n context: ModuleContext,\n elements: StructArrayElements,\n siblingFields: GirField[],\n): { lengthExpr: string; elementSize: number } | undefined => {\n const lengthExpr = arrayLengthExpression(elements.arrayType, siblingFields);\n\n if (lengthExpr === undefined) {\n return undefined;\n }\n\n const elementSize = computeRecordFieldSlots(context, elements.elementFields).size;\n\n if (elementSize === 0) {\n return undefined;\n }\n\n return { lengthExpr, elementSize };\n};\n\nconst resolveStructArray = (context: ModuleContext, target: StructArrayTarget): StructArrayResolution | undefined => {\n const { field, slot, siblingFields } = target;\n\n if (field.type === undefined || slot.bitWidth !== undefined) {\n return undefined;\n }\n\n const elements = resolveStructArrayElements(context, field.type);\n\n if (elements === undefined) {\n return undefined;\n }\n\n const shape = resolveStructArrayShape(context, elements, siblingFields);\n\n if (shape === undefined) {\n return undefined;\n }\n\n return {\n fieldType: field.type,\n elementFields: elements.elementFields,\n lengthExpr: shape.lengthExpr,\n elementSize: shape.elementSize,\n };\n};\n\nconst renderStructArrayAccessor = (context: ModuleContext, target: StructArrayTarget): string | undefined => {\n const resolution = resolveStructArray(context, target);\n\n if (resolution === undefined) {\n return undefined;\n }\n\n const { field, jsName, slot } = target;\n const { fieldType, elementFields, lengthExpr, elementSize } = resolution;\n context.addRuntimeImport(\"read\");\n context.addRuntimeImport(\"getHandle\");\n context.addRuntimeImport(\"t\");\n\n const options: StructArrayAccessorOptions = {\n context,\n jsName,\n tsType: renderTsType(context, fieldType, false),\n elementDescriptor: tStruct(\"borrowed\", {\n size: `${lengthExpr} * ${String(elementSize)}`,\n wrapperClass: undefined,\n isCallerAllocated: false,\n }),\n offset: slot.byteOffset,\n lengthExpr,\n elementSize,\n elementFields,\n };\n\n const blocks: string[] = [];\n\n if (field.readable) {\n blocks.push(structArrayGetterBlock(options));\n }\n\n if (field.writable) {\n context.addRuntimeImport(\"write\");\n blocks.push(structArraySetterBlock(options));\n }\n\n return blocks.length === 0 ? undefined : blocks.join(\"\\n\\n\");\n};\n\nconst getterBlock = (options: AccessorOptions): string => {\n const { context, jsName, tsType, descriptor, slot, fieldType } = options;\n context.addRuntimeImport(\"read\");\n context.addRuntimeImport(\"getHandle\");\n\n if (slot.bitWidth === undefined) {\n const valueExpression = `read(getHandle(this), ${descriptor}, ${String(slot.byteOffset)})`;\n\n const wrapped = wrapReturnValue(context, {\n ref: fieldType,\n isNullable: false,\n valueExpression,\n });\n\n const body = `return ${wrapped};`;\n\n return renderBlock(`get ${jsName}(): ${tsType}`, body);\n }\n\n const mask = bitMask(slot.bitWidth);\n const shift = slot.bitOffset ?? 0;\n const readUnit = `const __unit = read(getHandle(this), ${descriptor}, ${String(slot.byteOffset)}) as number;`;\n const body = `${readUnit}\\nreturn (((__unit >>> ${String(shift)}) & ${String(mask)}) >>> 0) as ${tsType};`;\n\n return renderBlock(`get ${jsName}(): ${tsType}`, body);\n};\n\nconst setterBody = (context: ModuleContext, descriptor: string, slot: FieldSlot): string => {\n context.addRuntimeImport(\"getHandle\");\n\n return emitFieldWrite(context, { descriptor, slot, targetExpr: \"getHandle(this)\", valueExpr: \"value\" });\n};\n\nconst setterBlock = (options: AccessorOptions): string =>\n renderBlock(\n `set ${options.jsName}(value: ${options.tsType})`,\n setterBody(options.context, options.descriptor, options.slot),\n );\n\nexport {\n isEmittableField,\n isInlineField,\n emitFieldWrite,\n resolveRecordFieldEntry,\n renderRecordFieldAccessor,\n};\n"]}
1
+ {"version":3,"file":"record-field-accessor.js","sourceRoot":"","sources":["../../../src/store/gi/record-field-accessor.ts"],"names":[],"mappings":"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","sourcesContent":["import { toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirAnnotations } from \"../../gir/annotations.js\";\nimport type { GirField } from \"../../gir/field.js\";\nimport type { GirRecord } from \"../../gir/record.js\";\nimport type { FieldSlot } from \"../../gir/size.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { GirType } from \"../../gir/type.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { isInlineCallbackRef, renderDescriptor } from \"../../analysis/descriptor-render.js\";\nimport { tStruct } from \"../../analysis/descriptor.js\";\nimport { renderTsType } from \"../../analysis/ts-type.js\";\nimport { indent, renderBlock } from \"../../writer/emit.js\";\nimport { getDoc } from \"./doc-spec.js\";\nimport { bitMask, computeRecordFieldSlots, mergeBitfield, type RecordFieldSlot } from \"./record-layout.js\";\nimport { wrapReturnValue } from \"./return-wrap.js\";\nimport { isValueMarshalable } from \"./value-marshalable.js\";\n\ntype FieldWriteSpec = {\n descriptor: string;\n slot: FieldSlot;\n targetExpr: string;\n valueExpr: string;\n};\n\ntype AdmittedField = {\n field: GirField & { type: TypeId };\n jsName: string;\n};\n\ntype RecordFieldEntry = {\n jsName: string;\n tsType: string;\n isWritable: boolean;\n doc: string | undefined;\n annotations: GirAnnotations;\n};\n\ntype InlineFieldVisit = {\n jsName: string;\n descriptor: string;\n offset: number;\n slot: FieldSlot;\n type: TypeId;\n};\n\ntype InlineFieldVisitors = {\n leaf: (visit: InlineFieldVisit) => void;\n nested: (jsName: string, nested: GirField[], offset: number) => void;\n};\n\ntype ElementWriteOptions = {\n fields: GirField[];\n baseOffset: number;\n valuePath: string;\n out: string[];\n};\n\ntype StructArrayTarget = {\n field: GirField;\n jsName: string;\n slot: FieldSlot;\n siblingFields: GirField[];\n};\n\ntype StructArrayAccessorOptions = {\n context: ModuleContext;\n jsName: string;\n tsType: string;\n elementDescriptor: string;\n offset: number;\n lengthExpr: string;\n elementSize: number;\n elementFields: GirField[];\n};\n\ntype StructArrayResolution = {\n fieldType: TypeId;\n elementFields: GirField[];\n lengthExpr: string;\n elementSize: number;\n};\n\ntype StructArrayElements = {\n arrayType: Extract<GirType, { kind: \"carray\" }>;\n elementFields: GirField[];\n};\n\ntype AccessorOptions = {\n context: ModuleContext;\n jsName: string;\n tsType: string;\n descriptor: string;\n slot: FieldSlot;\n fieldType: TypeId;\n};\n\nconst isMarshalableField = (context: ModuleContext, field: GirField): boolean => {\n if (field.cType?.endsWith(\"*\") === true) {\n return true;\n }\n\n const type = field.type === undefined ? undefined : context.library.typeFor(field.type);\n\n if (type?.kind !== \"record\") {\n return true;\n }\n\n return isValueMarshalable(context, type.namespace.name, type.value);\n};\n\nconst isEmittableField = (context: ModuleContext, field: GirField): field is GirField & { type: TypeId } =>\n !field.private &&\n field.type !== undefined &&\n !isInlineCallbackRef(context.library, field.type) &&\n isMarshalableField(context, field);\n\nconst emitFieldWrite = (context: ModuleContext, spec: FieldWriteSpec): string => {\n const { descriptor, slot, targetExpr, valueExpr } = spec;\n context.addRuntimeImport(\"write\");\n\n if (slot.bitWidth === undefined) {\n context.addRuntimeImport(\"toNative\");\n\n return (\n `write(${targetExpr}, ${descriptor}, ${String(slot.byteOffset)}, ` +\n `toNative(${descriptor}, ${valueExpr}));`\n );\n }\n\n context.addRuntimeImport(\"read\");\n\n const merged = mergeBitfield(\n `(read(${targetExpr}, ${descriptor}, ${String(slot.byteOffset)}) as number)`,\n valueExpr,\n bitMask(slot.bitWidth),\n slot.bitOffset ?? 0,\n );\n\n return `write(${targetExpr}, ${descriptor}, ${String(slot.byteOffset)}, ${merged});`;\n};\n\nconst admitField = (\n context: ModuleContext,\n slot: RecordFieldSlot,\n claimedNames: Set<string>,\n): AdmittedField | undefined => {\n const { field } = slot;\n\n if (!field.readable && !field.writable) {\n return undefined;\n }\n\n if (!isEmittableField(context, field)) {\n return undefined;\n }\n\n const jsName = toCamelIdentifier(field.name);\n\n if (claimedNames.has(jsName)) {\n return undefined;\n }\n\n if (jsName === \"constructor\") {\n return undefined;\n }\n\n return { field, jsName };\n};\n\nconst resolveRecordFieldEntry = (\n context: ModuleContext,\n slot: RecordFieldSlot,\n claimedNames: Set<string>,\n): RecordFieldEntry | undefined => {\n const admitted = admitField(context, slot, claimedNames);\n\n if (admitted === undefined) {\n return undefined;\n }\n\n return {\n jsName: admitted.jsName,\n tsType: renderTsType(context, admitted.field.type, false),\n isWritable: admitted.field.writable,\n doc: admitted.field.doc,\n annotations: admitted.field.annotations,\n };\n};\n\nconst renderRecordFieldAccessor = (\n context: ModuleContext,\n slot: RecordFieldSlot,\n claimedNames: Set<string>,\n siblingFields: GirField[],\n): string | undefined => {\n const admitted = admitField(context, slot, claimedNames);\n\n if (admitted === undefined) {\n return undefined;\n }\n\n const { field, jsName } = admitted;\n const doc = getDoc(field);\n const structArray = renderStructArrayAccessor(context, { field, jsName, slot: slot.slot, siblingFields });\n\n if (structArray !== undefined) {\n return `${doc}${structArray}`;\n }\n\n if (!isAccessorEligibleType(context, field.type)) {\n const tsType = renderTsType(context, field.type, false);\n\n return `${doc}declare ${jsName}: ${tsType};`;\n }\n\n const descriptor = context.hoistDescriptor(\n renderDescriptor(context, field.type, \"none\", { isInline: isInlineField(context, field) }),\n );\n\n const tsType = renderTsType(context, field.type, false);\n\n const accessorOptions: AccessorOptions = {\n context,\n jsName,\n tsType,\n descriptor,\n slot: slot.slot,\n fieldType: field.type,\n };\n\n const blocks: string[] = [getterBlock(accessorOptions)];\n\n if (field.writable) {\n blocks.push(setterBlock(accessorOptions));\n }\n\n return `${doc}${blocks.join(\"\\n\\n\")}`;\n};\n\nconst isAccessorEligibleType = (context: ModuleContext, ref: TypeId): boolean => {\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return true;\n }\n\n switch (type.kind) {\n case \"primitive\": {\n return type.category !== \"void\" && type.category !== \"unichar\";\n }\n case \"class\":\n case \"interface\":\n case \"record\":\n case \"enum\":\n case \"alias\": {\n return true;\n }\n case \"callback\": {\n return context.library.nameFor(ref) !== undefined;\n }\n case \"carray\": {\n return type.fixedSize !== undefined;\n }\n case \"list\":\n case \"hashtable\":\n case \"varargs\": {\n return false;\n }\n }\n};\n\nconst isInlineField = (context: ModuleContext, field: GirField): boolean =>\n field.type !== undefined && resolveInlineStructFields(context, field.type, field.cType) !== undefined;\n\nconst resolveInlineStructFields = (\n context: ModuleContext,\n ref: TypeId | undefined,\n occurrenceCType: string | undefined,\n): GirField[] | undefined => {\n if (ref === undefined) {\n return undefined;\n }\n\n if (occurrenceCType?.endsWith(\"*\") === true) {\n return undefined;\n }\n\n const type = context.library.typeFor(ref);\n\n if (type?.kind !== \"record\") {\n return undefined;\n }\n\n if (type.value.cType?.endsWith(\"*\") === true) {\n return undefined;\n }\n\n if (type.value.fields.length === 0) {\n return undefined;\n }\n\n return type.value.fields;\n};\n\nconst arrayLengthExpression = (\n arrayRef: Extract<GirType, { kind: \"carray\" }>,\n siblingFields: GirField[],\n): string | undefined => {\n if (arrayRef.fixedSize !== undefined) {\n return String(arrayRef.fixedSize);\n }\n\n if (arrayRef.lengthParameterIndex === undefined) {\n return undefined;\n }\n\n const lengthField = siblingFields.filter((field) => !field.private)[arrayRef.lengthParameterIndex];\n\n if (lengthField === undefined) {\n return undefined;\n }\n\n return `this.${toCamelIdentifier(lengthField.name)}`;\n};\n\nconst visitInlineStructSlot = (\n context: ModuleContext,\n entry: RecordFieldSlot,\n baseOffset: number,\n visitors: InlineFieldVisitors,\n): void => {\n const { field, slot } = entry;\n\n if (field.private || field.type === undefined || isInlineCallbackRef(context.library, field.type)) {\n return;\n }\n\n const jsName = toCamelIdentifier(field.name);\n const offset = baseOffset + slot.byteOffset;\n const nested = resolveInlineStructFields(context, field.type, field.cType);\n\n if (nested !== undefined) {\n visitors.nested(jsName, nested, offset);\n\n return;\n }\n\n if (!isAccessorEligibleType(context, field.type)) {\n return;\n }\n\n const descriptor = context.hoistDescriptor(renderDescriptor(context, field.type, \"none\"));\n visitors.leaf({ jsName, descriptor, offset, slot, type: field.type });\n};\n\nconst visitInlineStructFields = (\n context: ModuleContext,\n fields: GirField[],\n baseOffset: number,\n visitors: InlineFieldVisitors,\n): void => {\n const { slots } = computeRecordFieldSlots(context, fields);\n\n for (const entry of slots) {\n visitInlineStructSlot(context, entry, baseOffset, visitors);\n }\n};\n\nconst inlineLeafCount = (context: ModuleContext, fields: GirField[]): number => {\n let count = 0;\n\n visitInlineStructFields(context, fields, 0, {\n leaf: () => {\n count += 1;\n },\n nested: (_jsName, nested) => {\n count += inlineLeafCount(context, nested);\n },\n });\n\n return count;\n};\n\nconst elementAccessExpr = (descriptor: string, offset: number): string =>\n `read(__array, ${descriptor}, __base + ${String(offset)})`;\n\nconst renderElementReadEntry = (context: ModuleContext, visit: InlineFieldVisit): string => {\n const { jsName, descriptor, offset, slot, type } = visit;\n const access = elementAccessExpr(descriptor, offset);\n\n if (slot.bitWidth === undefined) {\n return `${jsName}: ${access} as ${renderTsType(context, type, false)}`;\n }\n\n const shift = slot.bitOffset ?? 0;\n\n return `${jsName}: (((${access} as number) >>> ${String(shift)}) & ${String(bitMask(slot.bitWidth))})`;\n};\n\nconst renderElementReadObject = (context: ModuleContext, fields: GirField[], baseOffset: number): string => {\n const entries: string[] = [];\n\n visitInlineStructFields(context, fields, baseOffset, {\n leaf: (visit) => {\n entries.push(renderElementReadEntry(context, visit));\n },\n nested: (jsName, nested, offset) => {\n entries.push(`${jsName}: ${renderElementReadObject(context, nested, offset)}`);\n },\n });\n\n return `{ ${entries.join(\", \")} }`;\n};\n\nconst renderElementWriteStatement = (visit: InlineFieldVisit, valuePath: string): string => {\n const { jsName, descriptor, offset, slot } = visit;\n const valueExpr = `${valuePath}.${jsName}`;\n\n if (slot.bitWidth === undefined) {\n return `write(__array, ${descriptor}, __base + ${String(offset)}, ${valueExpr});`;\n }\n\n const merged = mergeBitfield(\n `(${elementAccessExpr(descriptor, offset)} as number)`,\n valueExpr,\n bitMask(slot.bitWidth),\n slot.bitOffset ?? 0,\n );\n\n return `write(__array, ${descriptor}, __base + ${String(offset)}, ${merged});`;\n};\n\nconst appendElementWriteStatements = (context: ModuleContext, options: ElementWriteOptions): void => {\n const { fields, baseOffset, valuePath, out } = options;\n\n visitInlineStructFields(context, fields, baseOffset, {\n leaf: (visit) => {\n out.push(renderElementWriteStatement(visit, valuePath));\n },\n nested: (jsName, nested, offset) => {\n appendElementWriteStatements(context, {\n fields: nested,\n baseOffset: offset,\n valuePath: `${valuePath}.${jsName}`,\n out,\n });\n },\n });\n};\n\nconst structArrayGetterBlock = (options: StructArrayAccessorOptions): string => {\n const { context, jsName, tsType, elementDescriptor, offset, lengthExpr, elementSize, elementFields } = options;\n const element = renderElementReadObject(context, elementFields, 0);\n const loop = [`const __base = __index * ${String(elementSize)};`, `__result.push(${element});`].join(\"\\n\");\n const handleType = \"ReturnType<typeof getHandle>\";\n\n const body = [\n `const __array = read(getHandle(this), ${elementDescriptor}, ${String(offset)}) as ${handleType};`,\n `const __result: ${tsType} = [];`,\n `for (let __index = 0; __index < ${lengthExpr}; __index++) {`,\n indent(loop, 1),\n \"}\",\n \"return __result;\",\n ].join(\"\\n\");\n\n return renderBlock(`get ${jsName}(): ${tsType}`, body);\n};\n\nconst structArraySetterStatements = (context: ModuleContext, options: StructArrayAccessorOptions): string => {\n const { elementDescriptor, offset, elementSize, elementFields, lengthExpr } = options;\n const writes: string[] = [];\n\n appendElementWriteStatements(context, {\n fields: elementFields,\n baseOffset: 0,\n valuePath: \"__element\",\n out: writes,\n });\n\n const loop = [`const __base = __index * ${String(elementSize)};`, ...writes].join(\"\\n\");\n\n return [\n `const __descriptor = ${elementDescriptor};`,\n `const __array = read(getHandle(this), __descriptor, ${String(offset)}) as ReturnType<typeof getHandle>;`,\n \"for (const [__index, __element] of __value.entries()) {\",\n indent(`if (__index >= ${lengthExpr}) {\\n break;\\n}\\n\\n${loop}`, 1),\n \"}\",\n `write(getHandle(this), __descriptor, ${String(offset)}, __array);`,\n ].join(\"\\n\");\n};\n\nconst structArraySetterBlock = (options: StructArrayAccessorOptions): string =>\n renderBlock(\n `set ${options.jsName}(__value: ${options.tsType})`,\n structArraySetterStatements(options.context, options),\n );\n\nconst isPlainDataRecord = (record: GirRecord): boolean =>\n record.glibGetType === undefined &&\n record.constructors.length === 0 &&\n record.functions.length === 0 &&\n record.methods.length === 0;\n\nconst resolveStructArrayElements = (context: ModuleContext, fieldType: TypeId): StructArrayElements | undefined => {\n const arrayType = context.library.typeFor(fieldType);\n\n if (arrayType?.kind !== \"carray\") {\n return undefined;\n }\n\n const elementType = context.library.typeFor(arrayType.element);\n\n if (elementType?.kind === \"record\" && !isPlainDataRecord(elementType.value)) {\n return undefined;\n }\n\n const elementFields = resolveInlineStructFields(context, arrayType.element, arrayType.elementCType);\n\n if (elementFields === undefined) {\n return undefined;\n }\n\n return { arrayType, elementFields };\n};\n\nconst resolveStructArrayShape = (\n context: ModuleContext,\n elements: StructArrayElements,\n siblingFields: GirField[],\n): { lengthExpr: string; elementSize: number } | undefined => {\n const lengthExpr = arrayLengthExpression(elements.arrayType, siblingFields);\n\n if (lengthExpr === undefined) {\n return undefined;\n }\n\n const elementSize = computeRecordFieldSlots(context, elements.elementFields).size;\n\n if (elementSize === 0) {\n return undefined;\n }\n\n return { lengthExpr, elementSize };\n};\n\nconst resolveStructArray = (context: ModuleContext, target: StructArrayTarget): StructArrayResolution | undefined => {\n const { field, slot, siblingFields } = target;\n\n if (field.type === undefined || slot.bitWidth !== undefined) {\n return undefined;\n }\n\n const elements = resolveStructArrayElements(context, field.type);\n\n if (elements === undefined) {\n return undefined;\n }\n\n const shape = resolveStructArrayShape(context, elements, siblingFields);\n\n if (shape === undefined || inlineLeafCount(context, elements.elementFields) === 0) {\n return undefined;\n }\n\n return {\n fieldType: field.type,\n elementFields: elements.elementFields,\n lengthExpr: shape.lengthExpr,\n elementSize: shape.elementSize,\n };\n};\n\nconst renderStructArrayAccessor = (context: ModuleContext, target: StructArrayTarget): string | undefined => {\n const resolution = resolveStructArray(context, target);\n\n if (resolution === undefined) {\n return undefined;\n }\n\n const { field, jsName, slot } = target;\n const { fieldType, elementFields, lengthExpr, elementSize } = resolution;\n context.addRuntimeImport(\"read\");\n context.addRuntimeImport(\"getHandle\");\n context.addRuntimeImport(\"t\");\n\n const options: StructArrayAccessorOptions = {\n context,\n jsName,\n tsType: renderTsType(context, fieldType, false),\n elementDescriptor: tStruct(\"borrowed\", {\n size: `${lengthExpr} * ${String(elementSize)}`,\n wrapperClass: undefined,\n isCallerAllocated: false,\n }),\n offset: slot.byteOffset,\n lengthExpr,\n elementSize,\n elementFields,\n };\n\n const blocks: string[] = [];\n\n if (field.readable) {\n blocks.push(structArrayGetterBlock(options));\n }\n\n if (field.writable) {\n context.addRuntimeImport(\"write\");\n blocks.push(structArraySetterBlock(options));\n }\n\n return blocks.length === 0 ? undefined : blocks.join(\"\\n\\n\");\n};\n\nconst getterBlock = (options: AccessorOptions): string => {\n const { context, jsName, tsType, descriptor, slot, fieldType } = options;\n context.addRuntimeImport(\"read\");\n context.addRuntimeImport(\"getHandle\");\n\n if (slot.bitWidth === undefined) {\n const valueExpression = `read(getHandle(this), ${descriptor}, ${String(slot.byteOffset)})`;\n\n const wrapped = wrapReturnValue(context, {\n ref: fieldType,\n isNullable: false,\n valueExpression,\n });\n\n const body = `return ${wrapped};`;\n\n return renderBlock(`get ${jsName}(): ${tsType}`, body);\n }\n\n const mask = bitMask(slot.bitWidth);\n const shift = slot.bitOffset ?? 0;\n const readUnit = `const __unit = read(getHandle(this), ${descriptor}, ${String(slot.byteOffset)}) as number;`;\n const body = `${readUnit}\\nreturn (((__unit >>> ${String(shift)}) & ${String(mask)}) >>> 0) as ${tsType};`;\n\n return renderBlock(`get ${jsName}(): ${tsType}`, body);\n};\n\nconst setterBody = (context: ModuleContext, descriptor: string, slot: FieldSlot): string => {\n context.addRuntimeImport(\"getHandle\");\n\n return emitFieldWrite(context, { descriptor, slot, targetExpr: \"getHandle(this)\", valueExpr: \"value\" });\n};\n\nconst setterBlock = (options: AccessorOptions): string =>\n renderBlock(\n `set ${options.jsName}(value: ${options.tsType})`,\n setterBody(options.context, options.descriptor, options.slot),\n );\n\nexport {\n isEmittableField,\n isInlineField,\n emitFieldWrite,\n resolveRecordFieldEntry,\n renderRecordFieldAccessor,\n};\n"]}
@@ -1,6 +1,6 @@
1
1
  import { renderDescriptor } from "../../analysis/descriptor-render.js";
2
2
  import { renderTsType } from "../../analysis/ts-type.js";
3
- const BIGINT_CATEGORIES = new Set(["gtype", "bigint64", "biguint64"]);
3
+ const BIGINT_CATEGORIES = new Set(["gtype", "bigint64", "biguint64", "pointer"]);
4
4
  const wrapReturnValue = (context, options) => {
5
5
  const { ref, isNullable, valueExpression } = options;
6
6
  if (ref === undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"return-wrap.js","sourceRoot":"","sources":["../../../src/store/gi/return-wrap.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PrimitiveCategory } from \"../../gir/primitives.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { renderDescriptor } from \"../../analysis/descriptor-render.js\";\nimport { renderTsType } from \"../../analysis/ts-type.js\";\n\ntype WrapReturnOptions = {\n ref: TypeId | undefined;\n isNullable: boolean;\n valueExpression: string;\n};\n\nconst BIGINT_CATEGORIES: Set<PrimitiveCategory> = new Set([\"gtype\", \"bigint64\", \"biguint64\"]);\n\nconst wrapReturnValue = (context: ModuleContext, options: WrapReturnOptions): string => {\n const { ref, isNullable, valueExpression } = options;\n\n if (ref === undefined) {\n return valueExpression;\n }\n\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return wrapValue(context, ref, valueExpression);\n }\n\n switch (type.kind) {\n case \"primitive\": {\n return wrapPrimitive(type.category, isNullable, valueExpression);\n }\n case \"varargs\": {\n return `(${valueExpression} as unknown[])`;\n }\n case \"callback\": {\n return wrapCallback(context, ref, valueExpression);\n }\n case \"enum\": {\n return `(${valueExpression} as number)`;\n }\n case \"alias\": {\n return wrapAlias(context, type.value.target, isNullable, valueExpression);\n }\n case \"carray\":\n case \"class\":\n case \"hashtable\":\n case \"interface\":\n case \"list\":\n case \"record\": {\n return wrapValue(context, ref, valueExpression);\n }\n }\n};\n\nconst wrapCallback = (context: ModuleContext, ref: TypeId, valueExpression: string): string =>\n context.library.nameFor(ref) === undefined\n ? `(${valueExpression} as unknown[])`\n : `(${valueExpression} as ${renderTsType(context, ref, false)})`;\n\nconst wrapAlias = (\n context: ModuleContext,\n target: TypeId | undefined,\n isNullable: boolean,\n valueExpression: string,\n): string =>\n target === undefined\n ? valueExpression\n : wrapReturnValue(context, { ref: target, isNullable, valueExpression });\n\nconst wrapValue = (context: ModuleContext, ref: TypeId, valueExpression: string): string => {\n context.addRuntimeImport(\"fromNative\");\n const descriptor = context.hoistDescriptor(renderDescriptor(context, ref, \"none\"));\n\n return `(fromNative(${descriptor}, ${valueExpression}) as ${renderTsType(context, ref, false)})`;\n};\n\nconst wrapStringPrimitive = (isNullable: boolean, valueExpression: string): string =>\n `(${valueExpression} as ${isNullable ? \"string | null\" : \"string\"})`;\n\nconst wrapPrimitive = (category: PrimitiveCategory, isNullable: boolean, valueExpression: string): string => {\n if (category === \"void\") {\n return valueExpression;\n }\n\n if (category === \"string\") {\n return wrapStringPrimitive(isNullable, valueExpression);\n }\n\n if (category === \"boolean\") {\n return `Boolean(${valueExpression})`;\n }\n\n if (BIGINT_CATEGORIES.has(category)) {\n return `(${valueExpression} as bigint)`;\n }\n\n return `(${valueExpression} as number)`;\n};\n\nexport { wrapReturnValue };\n"]}
1
+ {"version":3,"file":"return-wrap.js","sourceRoot":"","sources":["../../../src/store/gi/return-wrap.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAQzD,MAAM,iBAAiB,GAA2B,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;AAEzG,MAAM,eAAe,GAAG,CAAC,OAAsB,EAAE,OAA0B,EAAU,EAAE;IACnF,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IAErD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,OAAO,eAAe,CAAC;IAC3B,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAE1C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC;IACpD,CAAC;IAED,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAChB,KAAK,WAAW,CAAC,CAAC,CAAC;YACf,OAAO,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;QACrE,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACb,OAAO,IAAI,eAAe,gBAAgB,CAAC;QAC/C,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YACd,OAAO,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC;QACvD,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACV,OAAO,IAAI,eAAe,aAAa,CAAC;QAC5C,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACX,OAAO,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;QAC9E,CAAC;QACD,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO,CAAC;QACb,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW,CAAC;QACjB,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC,CAAC,CAAC;YACZ,OAAO,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC;QACpD,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,OAAsB,EAAE,GAAW,EAAE,eAAuB,EAAU,EAAE,CAC1F,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS;IACtC,CAAC,CAAC,IAAI,eAAe,gBAAgB;IACrC,CAAC,CAAC,IAAI,eAAe,OAAO,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;AAEzE,MAAM,SAAS,GAAG,CACd,OAAsB,EACtB,MAA0B,EAC1B,UAAmB,EACnB,eAAuB,EACjB,EAAE,CACR,MAAM,KAAK,SAAS;IAChB,CAAC,CAAC,eAAe;IACjB,CAAC,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,CAAC;AAEjF,MAAM,SAAS,GAAG,CAAC,OAAsB,EAAE,GAAW,EAAE,eAAuB,EAAU,EAAE;IACvF,OAAO,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;IAEnF,OAAO,eAAe,UAAU,KAAK,eAAe,QAAQ,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;AACrG,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,UAAmB,EAAE,eAAuB,EAAU,EAAE,CACjF,IAAI,eAAe,OAAO,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC;AAEzE,MAAM,aAAa,GAAG,CAAC,QAA2B,EAAE,UAAmB,EAAE,eAAuB,EAAU,EAAE;IACxG,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,eAAe,CAAC;IAC3B,CAAC;IAED,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO,mBAAmB,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,WAAW,eAAe,GAAG,CAAC;IACzC,CAAC;IAED,IAAI,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,eAAe,aAAa,CAAC;IAC5C,CAAC;IAED,OAAO,IAAI,eAAe,aAAa,CAAC;AAC5C,CAAC,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,CAAC","sourcesContent":["import type { PrimitiveCategory } from \"../../gir/primitives.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { renderDescriptor } from \"../../analysis/descriptor-render.js\";\nimport { renderTsType } from \"../../analysis/ts-type.js\";\n\ntype WrapReturnOptions = {\n ref: TypeId | undefined;\n isNullable: boolean;\n valueExpression: string;\n};\n\nconst BIGINT_CATEGORIES: Set<PrimitiveCategory> = new Set([\"gtype\", \"bigint64\", \"biguint64\", \"pointer\"]);\n\nconst wrapReturnValue = (context: ModuleContext, options: WrapReturnOptions): string => {\n const { ref, isNullable, valueExpression } = options;\n\n if (ref === undefined) {\n return valueExpression;\n }\n\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return wrapValue(context, ref, valueExpression);\n }\n\n switch (type.kind) {\n case \"primitive\": {\n return wrapPrimitive(type.category, isNullable, valueExpression);\n }\n case \"varargs\": {\n return `(${valueExpression} as unknown[])`;\n }\n case \"callback\": {\n return wrapCallback(context, ref, valueExpression);\n }\n case \"enum\": {\n return `(${valueExpression} as number)`;\n }\n case \"alias\": {\n return wrapAlias(context, type.value.target, isNullable, valueExpression);\n }\n case \"carray\":\n case \"class\":\n case \"hashtable\":\n case \"interface\":\n case \"list\":\n case \"record\": {\n return wrapValue(context, ref, valueExpression);\n }\n }\n};\n\nconst wrapCallback = (context: ModuleContext, ref: TypeId, valueExpression: string): string =>\n context.library.nameFor(ref) === undefined\n ? `(${valueExpression} as unknown[])`\n : `(${valueExpression} as ${renderTsType(context, ref, false)})`;\n\nconst wrapAlias = (\n context: ModuleContext,\n target: TypeId | undefined,\n isNullable: boolean,\n valueExpression: string,\n): string =>\n target === undefined\n ? valueExpression\n : wrapReturnValue(context, { ref: target, isNullable, valueExpression });\n\nconst wrapValue = (context: ModuleContext, ref: TypeId, valueExpression: string): string => {\n context.addRuntimeImport(\"fromNative\");\n const descriptor = context.hoistDescriptor(renderDescriptor(context, ref, \"none\"));\n\n return `(fromNative(${descriptor}, ${valueExpression}) as ${renderTsType(context, ref, false)})`;\n};\n\nconst wrapStringPrimitive = (isNullable: boolean, valueExpression: string): string =>\n `(${valueExpression} as ${isNullable ? \"string | null\" : \"string\"})`;\n\nconst wrapPrimitive = (category: PrimitiveCategory, isNullable: boolean, valueExpression: string): string => {\n if (category === \"void\") {\n return valueExpression;\n }\n\n if (category === \"string\") {\n return wrapStringPrimitive(isNullable, valueExpression);\n }\n\n if (category === \"boolean\") {\n return `Boolean(${valueExpression})`;\n }\n\n if (BIGINT_CATEGORIES.has(category)) {\n return `(${valueExpression} as bigint)`;\n }\n\n return `(${valueExpression} as number)`;\n};\n\nexport { wrapReturnValue };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../../src/store/gi/signal.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AA6C1D,QAAA,MAAM,mBAAmB,GAAI,SAAS,aAAa,EAAE,OAAO,QAAQ,KAAG,MAAM,EAsC5E,CAAC;AAEF,QAAA,MAAM,wBAAwB,GAC1B,SAAS,aAAa,EACtB,OAAO,QAAQ,EACf,WAAW,MAAM,EACjB,4BAA4B,OAAO,KACpC,WAAW,EAyBb,CAAC;AAsUF,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,CAAC"}
1
+ {"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../../src/store/gi/signal.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AA4D1D,QAAA,MAAM,mBAAmB,GAAI,SAAS,aAAa,EAAE,OAAO,QAAQ,KAAG,MAAM,EAsC5E,CAAC;AAEF,QAAA,MAAM,wBAAwB,GAC1B,SAAS,aAAa,EACtB,OAAO,QAAQ,EACf,WAAW,MAAM,EACjB,4BAA4B,OAAO,KACpC,WAAW,EAyBb,CAAC;AAiVF,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,CAAC"}
@@ -14,6 +14,17 @@ import { isAllocatableCallerOut, isRecordInout, renderCallerOutInstance } from "
14
14
  const SIGNAL_HANDLER_TYPE = "(...args: any[]) => any";
15
15
  const SIGNALS_SUFFIX = "Signals";
16
16
  const SIGNAL_EMIT_SUFFIX = "SignalEmit";
17
+ const DEPRECATED_SIGNAL_ALIASES = new Map([
18
+ ["addEventListener", "on"],
19
+ ["removeEventListener", "off"],
20
+ ]);
21
+ const deprecatedAliasDoc = (method) => {
22
+ const replacement = DEPRECATED_SIGNAL_ALIASES.get(method);
23
+ if (replacement === undefined) {
24
+ return "";
25
+ }
26
+ return `/** @deprecated Since 1.2. Use \`${replacement}\` instead. Removed in v2. */\n`;
27
+ };
17
28
  const renderSignalMembers = (context, klass) => {
18
29
  if (klass.glibGetType === undefined) {
19
30
  return [];
@@ -30,7 +41,7 @@ const renderSignalMembers = (context, klass) => {
30
41
  const emitCases = signals.map((signal) => renderEmitCase(context, signal));
31
42
  const connectDefault = isRootObject
32
43
  ? "default:\n throw new globalThis.Error(\"Unknown signal '\" + signal + \"'\");"
33
- : "default:\n return super.connect(signal, handler, isAfter);";
44
+ : "default:\n return super.connect(signal as never, handler as never, isAfter);";
34
45
  const emitDefault = isRootObject
35
46
  ? "default:\n throw new globalThis.Error(\"Unknown signal '\" + sigName + \"'\");"
36
47
  : "default:\n return super.emit(sigName, ...args);";
@@ -69,10 +80,20 @@ const renderSignalMap = (spec) => {
69
80
  const extendsRefs = signalMapParentRefs(context, klass, isParentlessObjectSubclass, suffix);
70
81
  const extendsClause = extendsRefs.length === 0 ? "" : ` extends ${extendsRefs.join(", ")}`;
71
82
  const signalEntries = collectClassSignals(context, klass).map((signal) => `${signalDoc(signal)}${sourceStringLiteral(signal.name)}: ${renderEntry(context, signal)};`);
72
- const entries = [...signalEntries, ...renderNotifyDetailEntries(context, klass, suffix)];
83
+ const entries = [
84
+ ...signalEntries,
85
+ ...renderNotifyDetailEntries(context, klass, suffix),
86
+ ...renderCustomNotifyEntry(context, klass, suffix),
87
+ ];
73
88
  return renderBracedOrEmpty(`export interface ${className}${suffix}${extendsClause}`, entries.join("\n"));
74
89
  };
75
90
  const signalDoc = (signal) => renderJsDoc(signal.doc, undefined, handlerSpec(signal, signal.parameters));
91
+ const renderCustomNotifyEntry = (context, klass, suffix) => {
92
+ if (context.namespace.name !== "GObject" || klass.name !== "Object") {
93
+ return [];
94
+ }
95
+ return [`[detail: \`notify::\${string}\`]: ${gobjectObjectMapRef(context, suffix)}["notify"];`];
96
+ };
76
97
  const renderNotifyDetailEntries = (context, klass, suffix) => {
77
98
  const notifyValue = `${gobjectObjectMapRef(context, suffix)}["notify"]`;
78
99
  return collectNotifyDetails(context, klass).map((property) => {
@@ -110,14 +131,14 @@ const renderSignalConnectInterface = (className, isRootObject) => {
110
131
  const lines = [
111
132
  `__signals__?: ${map};`,
112
133
  `connect<K extends keyof ${map}>(signal: K, handler: ${map}[K], isAfter?: boolean): number;`,
113
- `connect(signal: string, handler: ${SIGNAL_HANDLER_TYPE}, isAfter?: boolean): number;`,
114
134
  `emit<K extends keyof ${emitMap}>(sigName: K, ...args: ${emitMap}[K]["args"]): ${emitMap}[K]["result"];`,
115
135
  "emit(sigName: string, ...args: unknown[]): unknown;",
116
136
  ];
117
137
  if (!isRootObject) {
118
138
  const chainable = (methods, trailing) => {
119
139
  for (const method of methods) {
120
- lines.push(`${method}<K extends keyof ${map}>(signal: K, handler: ${map}[K]${trailing}): this;`, `${method}(signal: string, handler: ${SIGNAL_HANDLER_TYPE}${trailing}): this;`);
140
+ lines.push(deprecatedAliasDoc(method) +
141
+ `${method}<K extends keyof ${map}>(signal: K, handler: ${map}[K]${trailing}): this;`);
121
142
  }
122
143
  };
123
144
  chainable(["on", "once", "addEventListener"], ", isAfter?: boolean");
@@ -1 +1 @@
1
- {"version":3,"file":"signal.js","sourceRoot":"","sources":["../../../src/store/gi/signal.ts"],"names":[],"mappings":"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","sourcesContent":["import { camelCase, sourceStringLiteral } from \"@gtkx/utils\";\nimport type { GirClass } from \"../../gir/class.js\";\nimport type { GirCallable, GirParameter, GirReturnValue } from \"../../gir/parameter.js\";\nimport type { GirProperty } from \"../../gir/property.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport type { Declaration } from \"../../writer/module.js\";\nimport {\n isCellInout,\n primaryReturnKind,\n renderDescriptor,\n renderParamDescriptor,\n} from \"../../analysis/descriptor-render.js\";\nimport { tCallback, tObject, tVoid } from \"../../analysis/descriptor.js\";\nimport {\n collectInterfaceProperties,\n forEachAncestor,\n resolvePrerequisiteReference,\n} from \"../../analysis/inheritance.js\";\nimport { renderHandlerParameters, renderHandlerResultType } from \"../../analysis/param-structure.js\";\nimport { renderTsType } from \"../../analysis/ts-type.js\";\nimport { resolveInterfaces } from \"../../gir/ancestry.js\";\nimport { isCallerAllocatedOut, isOutParameter } from \"../../gir/parameter.js\";\nimport { renderJsDoc } from \"../../writer/doc.js\";\nimport { indent, renderBlock, renderBracedOrEmpty } from \"../../writer/emit.js\";\nimport { parentCompanionRef } from \"./companion.js\";\nimport { getDoc, handlerSpec } from \"./doc-spec.js\";\nimport { isAllocatableCallerOut, isRecordInout, renderCallerOutInstance } from \"./param-marshal.js\";\n\ntype SignalMapSpec = {\n context: ModuleContext;\n klass: GirClass;\n className: string;\n isParentlessObjectSubclass: boolean;\n suffix: string;\n renderEntry: (context: ModuleContext, signal: GirCallable) => string;\n};\n\ntype EmitArgOptions = {\n context: ModuleContext;\n parameter: GirParameter;\n descriptor: string;\n argIndex: number;\n};\n\ntype NamedMember = { name: string };\n\nconst SIGNAL_HANDLER_TYPE = \"(...args: any[]) => any\";\nconst SIGNALS_SUFFIX = \"Signals\";\nconst SIGNAL_EMIT_SUFFIX = \"SignalEmit\";\n\nconst renderSignalMembers = (context: ModuleContext, klass: GirClass): string[] => {\n if (klass.glibGetType === undefined) {\n return [];\n }\n\n const signals = collectClassSignals(context, klass);\n\n if (signals.length === 0) {\n return [];\n }\n\n const isRootObject = context.namespace.name === \"GObject\" && klass.name === \"Object\";\n context.addRuntimeImport(\"connectSignal\");\n context.addRuntimeImport(\"getSignalBaseName\");\n context.addRuntimeImport(\"t\");\n const connectCases = signals.map((signal) => renderConnectCase(context, signal));\n const emitCases = signals.map((signal) => renderEmitCase(context, signal));\n\n const connectDefault = isRootObject\n ? \"default:\\n throw new globalThis.Error(\\\"Unknown signal '\\\" + signal + \\\"'\\\");\"\n : \"default:\\n return super.connect(signal, handler, isAfter);\";\n\n const emitDefault = isRootObject\n ? \"default:\\n throw new globalThis.Error(\\\"Unknown signal '\\\" + sigName + \\\"'\\\");\"\n : \"default:\\n return super.emit(sigName, ...args);\";\n\n const connectBody = indent([...connectCases, connectDefault].join(\"\\n\"), 1);\n const connectSwitch = `switch (getSignalBaseName(signal)) {\\n${connectBody}\\n}`;\n const emitBody = indent([...emitCases, emitDefault].join(\"\\n\"), 1);\n const emitSwitch = `switch (getSignalBaseName(sigName)) {\\n${emitBody}\\n}`;\n\n return [\n renderBlock(\n `connect(signal: string, handler: ${SIGNAL_HANDLER_TYPE}, isAfter?: boolean): number`,\n connectSwitch,\n ),\n renderBlock(\"emit(sigName: string, ...args: unknown[]): unknown\", emitSwitch),\n ];\n};\n\nconst renderSignalDeclarations = (\n context: ModuleContext,\n klass: GirClass,\n className: string,\n isParentlessObjectSubclass: boolean,\n): Declaration[] => {\n const base = { context, klass, className, isParentlessObjectSubclass };\n\n const declarations: Declaration[] = [\n {\n name: `${className}${SIGNALS_SUFFIX}`,\n code: renderSignalMap({ ...base, suffix: SIGNALS_SUFFIX, renderEntry: renderSignalHandlerType }),\n },\n {\n name: `${className}${SIGNAL_EMIT_SUFFIX}`,\n code: renderSignalMap({ ...base, suffix: SIGNAL_EMIT_SUFFIX, renderEntry: renderSignalEmitEntry }),\n },\n ];\n\n if (\n klass.glibGetType !== undefined &&\n (collectClassSignals(context, klass).length > 0 ||\n collectNotifyDetails(context, klass).length > 0 ||\n klass.implements.length > 0)\n ) {\n const isRootObject = context.namespace.name === \"GObject\" && klass.name === \"Object\";\n declarations.push({ name: className, code: renderSignalConnectInterface(className, isRootObject) });\n }\n\n return declarations;\n};\n\nconst renderSignalMap = (spec: SignalMapSpec): string => {\n const { context, klass, className, isParentlessObjectSubclass, suffix, renderEntry } = spec;\n const extendsRefs = signalMapParentRefs(context, klass, isParentlessObjectSubclass, suffix);\n const extendsClause = extendsRefs.length === 0 ? \"\" : ` extends ${extendsRefs.join(\", \")}`;\n\n const signalEntries = collectClassSignals(context, klass).map(\n (signal) => `${signalDoc(signal)}${sourceStringLiteral(signal.name)}: ${renderEntry(context, signal)};`,\n );\n\n const entries = [...signalEntries, ...renderNotifyDetailEntries(context, klass, suffix)];\n\n return renderBracedOrEmpty(`export interface ${className}${suffix}${extendsClause}`, entries.join(\"\\n\"));\n};\n\nconst signalDoc = (signal: GirCallable): string =>\n renderJsDoc(signal.doc, undefined, handlerSpec(signal, signal.parameters));\n\nconst renderNotifyDetailEntries = (context: ModuleContext, klass: GirClass, suffix: string): string[] => {\n const notifyValue = `${gobjectObjectMapRef(context, suffix)}[\"notify\"]`;\n\n return collectNotifyDetails(context, klass).map((property) => {\n const detailedSignal = `notify::${property.name}`;\n const doc = getDoc(property);\n\n return `${doc}${sourceStringLiteral(detailedSignal)}: ${notifyValue};`;\n });\n};\n\nconst signalMapParentRefs = (\n context: ModuleContext,\n klass: GirClass,\n isParentlessObjectSubclass: boolean,\n suffix: string,\n): string[] => {\n const parentRef = parentCompanionRef(context, klass, suffix);\n\n if (parentRef !== undefined) {\n return [parentRef];\n }\n\n if (!isParentlessObjectSubclass) {\n return [];\n }\n\n const prerequisiteRefs = klass.prerequisites\n .map((name) => resolvePrerequisiteReference(context, name))\n .filter((entry): entry is string => entry !== undefined)\n .map((entry) => `${entry}${suffix}`);\n\n if (prerequisiteRefs.length > 0) {\n return prerequisiteRefs;\n }\n\n return [gobjectObjectMapRef(context, suffix)];\n};\n\nconst gobjectObjectMapRef = (context: ModuleContext, suffix: string): string => {\n if (context.namespace.name === \"GObject\") {\n return `Object${suffix}`;\n }\n\n return `${context.addCrossNamespaceImport(\"GObject\")}.Object${suffix}`;\n};\n\nconst renderSignalConnectInterface = (className: string, isRootObject: boolean): string => {\n const map = `${className}${SIGNALS_SUFFIX}`;\n const emitMap = `${className}${SIGNAL_EMIT_SUFFIX}`;\n\n const lines = [\n `__signals__?: ${map};`,\n `connect<K extends keyof ${map}>(signal: K, handler: ${map}[K], isAfter?: boolean): number;`,\n `connect(signal: string, handler: ${SIGNAL_HANDLER_TYPE}, isAfter?: boolean): number;`,\n `emit<K extends keyof ${emitMap}>(sigName: K, ...args: ${emitMap}[K][\"args\"]): ${emitMap}[K][\"result\"];`,\n \"emit(sigName: string, ...args: unknown[]): unknown;\",\n ];\n\n if (!isRootObject) {\n const chainable = (methods: string[], trailing: string): void => {\n for (const method of methods) {\n lines.push(\n `${method}<K extends keyof ${map}>(signal: K, handler: ${map}[K]${trailing}): this;`,\n `${method}(signal: string, handler: ${SIGNAL_HANDLER_TYPE}${trailing}): this;`,\n );\n }\n };\n\n chainable([\"on\", \"once\", \"addEventListener\"], \", isAfter?: boolean\");\n chainable([\"off\", \"removeEventListener\"], \"\");\n }\n\n return renderBracedOrEmpty(`export interface ${className}`, lines.join(\"\\n\"));\n};\n\nconst renderSignalHandlerType = (context: ModuleContext, signal: GirCallable): string => {\n const params = renderHandlerParameters(signal.parameters, (ref, nullable) => renderTsType(context, ref, nullable));\n\n return `(${params.join(\", \")}) => ${renderResultType(context, signal, false, true)}`;\n};\n\nconst renderResultType = (\n context: ModuleContext,\n signal: GirCallable,\n shouldIncludeCallerAllocated: boolean,\n isOptOut: boolean,\n): string =>\n renderHandlerResultType({\n library: context.library,\n signal,\n renderType: (ref, nullable) => renderTsType(context, ref, nullable),\n shouldIncludeCallerAllocated,\n isOptOut,\n });\n\nconst renderSignalEmitEntry = (context: ModuleContext, signal: GirCallable): string => {\n const args = renderHandlerParameters(\n signal.parameters,\n (ref, nullable) => renderTsType(context, ref, nullable),\n isCallerAllocatedOut,\n );\n\n const result = renderResultType(context, signal, true, false);\n\n return `{ args: [${args.join(\", \")}]; result: ${result} }`;\n};\n\nconst nonVarargParameters = (signal: GirCallable): GirParameter[] =>\n signal.parameters.filter((parameter) => !parameter.isVarargs);\n\nconst renderConnectCase = (context: ModuleContext, signal: GirCallable): string => {\n const callback = renderCallback(context, signal);\n const body = `return connectSignal(this, signal, { callback: ${callback}, handler, isAfter: isAfter ?? false });`;\n\n return renderBlock(`case ${sourceStringLiteral(signal.name)}:`, body);\n};\n\nconst renderEmitArgLiteral = (options: EmitArgOptions): { literal: string; nextArgIndex: number } => {\n const { context, parameter, descriptor, argIndex } = options;\n\n if (isOutParameter(parameter)) {\n return { literal: `{ type: ${descriptor}, direction: \"out\" }`, nextArgIndex: argIndex };\n }\n\n if (isCellInout(context.library, parameter)) {\n return {\n literal: `{ type: ${descriptor}, direction: \"inout\", value: args[${String(argIndex)}] }`,\n nextArgIndex: argIndex + 1,\n };\n }\n\n if (isCallerAllocatedOut(parameter)) {\n const value = renderCallerOutInstance(context, parameter);\n\n return {\n literal: `{ type: ${descriptor}, direction: \"out\", isCallerAllocated: true, value: ${value} }`,\n nextArgIndex: argIndex,\n };\n }\n\n if (isRecordInout(context, parameter)) {\n return {\n literal:\n `{ type: ${descriptor}, direction: \"inout\", isCallerAllocated: true, ` +\n `value: args[${String(argIndex)}] }`,\n nextArgIndex: argIndex + 1,\n };\n }\n\n return { literal: `{ type: ${descriptor}, value: args[${String(argIndex)}] }`, nextArgIndex: argIndex + 1 };\n};\n\nconst renderEmitReturnArg = (context: ModuleContext, returnValue: GirReturnValue): string => {\n if (primaryReturnKind(context.library, returnValue) === \"void\") {\n return \"\";\n }\n\n return `, ${renderDescriptor(context, returnValue.type, returnValue.transferOwnership)}`;\n};\n\nconst renderEmitCase = (context: ModuleContext, signal: GirCallable): string => {\n const params = nonVarargParameters(signal);\n\n if (params.some((parameter) => isCallerAllocatedOut(parameter) && !isAllocatableCallerOut(context, parameter))) {\n return renderUnsupportedEmitCase(signal);\n }\n\n context.addRuntimeImport(\"emitSignal\");\n let argIndex = 0;\n\n const argLiterals = params.map((parameter) => {\n const descriptor = renderDescriptor(context, parameter.type, parameter.transferOwnership);\n const rendered = renderEmitArgLiteral({ context, parameter, descriptor, argIndex });\n argIndex = rendered.nextArgIndex;\n\n return rendered.literal;\n });\n\n const returnArg = renderEmitReturnArg(context, signal.returnValue);\n const body = `return emitSignal(this, sigName, [${argLiterals.join(\", \")}]${returnArg});`;\n\n return renderBlock(`case ${sourceStringLiteral(signal.name)}:`, body);\n};\n\nconst renderUnsupportedEmitCase = (signal: GirCallable): string => {\n const message = `emit() cannot allocate the caller-allocated out-parameter of '${signal.name}'`;\n\n return renderBlock(\n `case ${sourceStringLiteral(signal.name)}:`,\n `throw new globalThis.Error(${sourceStringLiteral(message)});`,\n );\n};\n\nconst renderCallback = (context: ModuleContext, signal: GirCallable): string => {\n const params = nonVarargParameters(signal);\n\n const callbackParamDescriptors = params.map((parameter) =>\n renderParamDescriptor(context, parameter, parameter.type, { argIndexOffset: 1 }),\n );\n\n const callbackArgs = [tObject(\"borrowed\"), ...callbackParamDescriptors, tVoid];\n const userDataIndex = String(params.length + 1);\n\n return tCallback({\n argTypes: callbackArgs,\n returns: renderDescriptor(context, signal.returnValue.type, signal.returnValue.transferOwnership),\n options: [\n \"hasDestroy: true\",\n \"destroyKind: \\\"closureNotify\\\"\",\n \"hasUserData: true\",\n `userDataIndex: ${userDataIndex}`,\n ],\n });\n};\n\nconst forEachInterfaceSignal = (\n context: ModuleContext,\n klass: GirClass,\n consider: (signal: GirCallable) => void,\n): void => {\n for (const iface of resolveInterfaces(context.library, context.namespace.name, klass.implements)) {\n for (const signal of iface.klass.signals) {\n consider(signal);\n }\n }\n};\n\nconst collectClassSignals = (context: ModuleContext, klass: GirClass): GirCallable[] => {\n const inheritedNames = collectInheritedSignalNames(context, klass);\n const seen: Set<string> = new Set();\n const result: GirCallable[] = [];\n\n const consider = (signal: GirCallable): void => {\n const name = camelCase(signal.name);\n\n if (!signal.introspectable || inheritedNames.has(name) || seen.has(name)) {\n return;\n }\n\n seen.add(name);\n result.push(signal);\n };\n\n for (const signal of klass.signals) {\n consider(signal);\n }\n\n forEachInterfaceSignal(context, klass, consider);\n\n return result;\n};\n\nconst addMemberNames = (target: Set<string>, source: GirClass, select: (source: GirClass) => NamedMember[]): void => {\n for (const member of select(source)) {\n target.add(camelCase(member.name));\n }\n};\n\nconst collectInheritedMemberNames = (\n context: ModuleContext,\n klass: GirClass,\n select: (source: GirClass) => NamedMember[],\n): Set<string> => {\n const names: Set<string> = new Set();\n\n forEachAncestor(context, klass, (ancestor, interfaces) => {\n addMemberNames(names, ancestor.klass, select);\n\n for (const iface of interfaces) {\n addMemberNames(names, iface.klass, select);\n }\n });\n\n return names;\n};\n\nconst collectInheritedSignalNames = (context: ModuleContext, klass: GirClass): Set<string> =>\n collectInheritedMemberNames(context, klass, (source) => source.signals);\n\nconst collectNotifyDetails = (context: ModuleContext, klass: GirClass): GirProperty[] => {\n const inherited = collectInheritedMemberNames(context, klass, (source) => source.properties);\n const seen: Set<string> = new Set();\n const result: GirProperty[] = [];\n\n const consider = (property: GirProperty): void => {\n const name = camelCase(property.name);\n\n if (inherited.has(name) || seen.has(name)) {\n return;\n }\n\n seen.add(name);\n result.push(property);\n };\n\n for (const property of klass.properties) {\n consider(property);\n }\n\n for (const { property } of collectInterfaceProperties(context, klass)) {\n consider(property);\n }\n\n return result;\n};\n\nexport { renderSignalMembers, renderSignalDeclarations };\n"]}
1
+ {"version":3,"file":"signal.js","sourceRoot":"","sources":["../../../src/store/gi/signal.ts"],"names":[],"mappings":"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","sourcesContent":["import { camelCase, sourceStringLiteral } from \"@gtkx/utils\";\nimport type { GirClass } from \"../../gir/class.js\";\nimport type { GirCallable, GirParameter, GirReturnValue } from \"../../gir/parameter.js\";\nimport type { GirProperty } from \"../../gir/property.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport type { Declaration } from \"../../writer/module.js\";\nimport {\n isCellInout,\n primaryReturnKind,\n renderDescriptor,\n renderParamDescriptor,\n} from \"../../analysis/descriptor-render.js\";\nimport { tCallback, tObject, tVoid } from \"../../analysis/descriptor.js\";\nimport {\n collectInterfaceProperties,\n forEachAncestor,\n resolvePrerequisiteReference,\n} from \"../../analysis/inheritance.js\";\nimport { renderHandlerParameters, renderHandlerResultType } from \"../../analysis/param-structure.js\";\nimport { renderTsType } from \"../../analysis/ts-type.js\";\nimport { resolveInterfaces } from \"../../gir/ancestry.js\";\nimport { isCallerAllocatedOut, isOutParameter } from \"../../gir/parameter.js\";\nimport { renderJsDoc } from \"../../writer/doc.js\";\nimport { indent, renderBlock, renderBracedOrEmpty } from \"../../writer/emit.js\";\nimport { parentCompanionRef } from \"./companion.js\";\nimport { getDoc, handlerSpec } from \"./doc-spec.js\";\nimport { isAllocatableCallerOut, isRecordInout, renderCallerOutInstance } from \"./param-marshal.js\";\n\ntype SignalMapSpec = {\n context: ModuleContext;\n klass: GirClass;\n className: string;\n isParentlessObjectSubclass: boolean;\n suffix: string;\n renderEntry: (context: ModuleContext, signal: GirCallable) => string;\n};\n\ntype EmitArgOptions = {\n context: ModuleContext;\n parameter: GirParameter;\n descriptor: string;\n argIndex: number;\n};\n\ntype NamedMember = { name: string };\n\nconst SIGNAL_HANDLER_TYPE = \"(...args: any[]) => any\";\nconst SIGNALS_SUFFIX = \"Signals\";\nconst SIGNAL_EMIT_SUFFIX = \"SignalEmit\";\n\nconst DEPRECATED_SIGNAL_ALIASES: Map<string, string> = new Map([\n [\"addEventListener\", \"on\"],\n [\"removeEventListener\", \"off\"],\n]);\n\nconst deprecatedAliasDoc = (method: string): string => {\n const replacement = DEPRECATED_SIGNAL_ALIASES.get(method);\n\n if (replacement === undefined) {\n return \"\";\n }\n\n return `/** @deprecated Since 1.2. Use \\`${replacement}\\` instead. Removed in v2. */\\n`;\n};\n\nconst renderSignalMembers = (context: ModuleContext, klass: GirClass): string[] => {\n if (klass.glibGetType === undefined) {\n return [];\n }\n\n const signals = collectClassSignals(context, klass);\n\n if (signals.length === 0) {\n return [];\n }\n\n const isRootObject = context.namespace.name === \"GObject\" && klass.name === \"Object\";\n context.addRuntimeImport(\"connectSignal\");\n context.addRuntimeImport(\"getSignalBaseName\");\n context.addRuntimeImport(\"t\");\n const connectCases = signals.map((signal) => renderConnectCase(context, signal));\n const emitCases = signals.map((signal) => renderEmitCase(context, signal));\n\n const connectDefault = isRootObject\n ? \"default:\\n throw new globalThis.Error(\\\"Unknown signal '\\\" + signal + \\\"'\\\");\"\n : \"default:\\n return super.connect(signal as never, handler as never, isAfter);\";\n\n const emitDefault = isRootObject\n ? \"default:\\n throw new globalThis.Error(\\\"Unknown signal '\\\" + sigName + \\\"'\\\");\"\n : \"default:\\n return super.emit(sigName, ...args);\";\n\n const connectBody = indent([...connectCases, connectDefault].join(\"\\n\"), 1);\n const connectSwitch = `switch (getSignalBaseName(signal)) {\\n${connectBody}\\n}`;\n const emitBody = indent([...emitCases, emitDefault].join(\"\\n\"), 1);\n const emitSwitch = `switch (getSignalBaseName(sigName)) {\\n${emitBody}\\n}`;\n\n return [\n renderBlock(\n `connect(signal: string, handler: ${SIGNAL_HANDLER_TYPE}, isAfter?: boolean): number`,\n connectSwitch,\n ),\n renderBlock(\"emit(sigName: string, ...args: unknown[]): unknown\", emitSwitch),\n ];\n};\n\nconst renderSignalDeclarations = (\n context: ModuleContext,\n klass: GirClass,\n className: string,\n isParentlessObjectSubclass: boolean,\n): Declaration[] => {\n const base = { context, klass, className, isParentlessObjectSubclass };\n\n const declarations: Declaration[] = [\n {\n name: `${className}${SIGNALS_SUFFIX}`,\n code: renderSignalMap({ ...base, suffix: SIGNALS_SUFFIX, renderEntry: renderSignalHandlerType }),\n },\n {\n name: `${className}${SIGNAL_EMIT_SUFFIX}`,\n code: renderSignalMap({ ...base, suffix: SIGNAL_EMIT_SUFFIX, renderEntry: renderSignalEmitEntry }),\n },\n ];\n\n if (\n klass.glibGetType !== undefined &&\n (collectClassSignals(context, klass).length > 0 ||\n collectNotifyDetails(context, klass).length > 0 ||\n klass.implements.length > 0)\n ) {\n const isRootObject = context.namespace.name === \"GObject\" && klass.name === \"Object\";\n declarations.push({ name: className, code: renderSignalConnectInterface(className, isRootObject) });\n }\n\n return declarations;\n};\n\nconst renderSignalMap = (spec: SignalMapSpec): string => {\n const { context, klass, className, isParentlessObjectSubclass, suffix, renderEntry } = spec;\n const extendsRefs = signalMapParentRefs(context, klass, isParentlessObjectSubclass, suffix);\n const extendsClause = extendsRefs.length === 0 ? \"\" : ` extends ${extendsRefs.join(\", \")}`;\n\n const signalEntries = collectClassSignals(context, klass).map(\n (signal) => `${signalDoc(signal)}${sourceStringLiteral(signal.name)}: ${renderEntry(context, signal)};`,\n );\n\n const entries = [\n ...signalEntries,\n ...renderNotifyDetailEntries(context, klass, suffix),\n ...renderCustomNotifyEntry(context, klass, suffix),\n ];\n\n return renderBracedOrEmpty(`export interface ${className}${suffix}${extendsClause}`, entries.join(\"\\n\"));\n};\n\nconst signalDoc = (signal: GirCallable): string =>\n renderJsDoc(signal.doc, undefined, handlerSpec(signal, signal.parameters));\n\nconst renderCustomNotifyEntry = (context: ModuleContext, klass: GirClass, suffix: string): string[] => {\n if (context.namespace.name !== \"GObject\" || klass.name !== \"Object\") {\n return [];\n }\n\n return [`[detail: \\`notify::\\${string}\\`]: ${gobjectObjectMapRef(context, suffix)}[\"notify\"];`];\n};\n\nconst renderNotifyDetailEntries = (context: ModuleContext, klass: GirClass, suffix: string): string[] => {\n const notifyValue = `${gobjectObjectMapRef(context, suffix)}[\"notify\"]`;\n\n return collectNotifyDetails(context, klass).map((property) => {\n const detailedSignal = `notify::${property.name}`;\n const doc = getDoc(property);\n\n return `${doc}${sourceStringLiteral(detailedSignal)}: ${notifyValue};`;\n });\n};\n\nconst signalMapParentRefs = (\n context: ModuleContext,\n klass: GirClass,\n isParentlessObjectSubclass: boolean,\n suffix: string,\n): string[] => {\n const parentRef = parentCompanionRef(context, klass, suffix);\n\n if (parentRef !== undefined) {\n return [parentRef];\n }\n\n if (!isParentlessObjectSubclass) {\n return [];\n }\n\n const prerequisiteRefs = klass.prerequisites\n .map((name) => resolvePrerequisiteReference(context, name))\n .filter((entry): entry is string => entry !== undefined)\n .map((entry) => `${entry}${suffix}`);\n\n if (prerequisiteRefs.length > 0) {\n return prerequisiteRefs;\n }\n\n return [gobjectObjectMapRef(context, suffix)];\n};\n\nconst gobjectObjectMapRef = (context: ModuleContext, suffix: string): string => {\n if (context.namespace.name === \"GObject\") {\n return `Object${suffix}`;\n }\n\n return `${context.addCrossNamespaceImport(\"GObject\")}.Object${suffix}`;\n};\n\nconst renderSignalConnectInterface = (className: string, isRootObject: boolean): string => {\n const map = `${className}${SIGNALS_SUFFIX}`;\n const emitMap = `${className}${SIGNAL_EMIT_SUFFIX}`;\n\n const lines = [\n `__signals__?: ${map};`,\n `connect<K extends keyof ${map}>(signal: K, handler: ${map}[K], isAfter?: boolean): number;`,\n `emit<K extends keyof ${emitMap}>(sigName: K, ...args: ${emitMap}[K][\"args\"]): ${emitMap}[K][\"result\"];`,\n \"emit(sigName: string, ...args: unknown[]): unknown;\",\n ];\n\n if (!isRootObject) {\n const chainable = (methods: string[], trailing: string): void => {\n for (const method of methods) {\n lines.push(\n deprecatedAliasDoc(method) +\n `${method}<K extends keyof ${map}>(signal: K, handler: ${map}[K]${trailing}): this;`,\n );\n }\n };\n\n chainable([\"on\", \"once\", \"addEventListener\"], \", isAfter?: boolean\");\n chainable([\"off\", \"removeEventListener\"], \"\");\n }\n\n return renderBracedOrEmpty(`export interface ${className}`, lines.join(\"\\n\"));\n};\n\nconst renderSignalHandlerType = (context: ModuleContext, signal: GirCallable): string => {\n const params = renderHandlerParameters(signal.parameters, (ref, nullable) => renderTsType(context, ref, nullable));\n\n return `(${params.join(\", \")}) => ${renderResultType(context, signal, false, true)}`;\n};\n\nconst renderResultType = (\n context: ModuleContext,\n signal: GirCallable,\n shouldIncludeCallerAllocated: boolean,\n isOptOut: boolean,\n): string =>\n renderHandlerResultType({\n library: context.library,\n signal,\n renderType: (ref, nullable) => renderTsType(context, ref, nullable),\n shouldIncludeCallerAllocated,\n isOptOut,\n });\n\nconst renderSignalEmitEntry = (context: ModuleContext, signal: GirCallable): string => {\n const args = renderHandlerParameters(\n signal.parameters,\n (ref, nullable) => renderTsType(context, ref, nullable),\n isCallerAllocatedOut,\n );\n\n const result = renderResultType(context, signal, true, false);\n\n return `{ args: [${args.join(\", \")}]; result: ${result} }`;\n};\n\nconst nonVarargParameters = (signal: GirCallable): GirParameter[] =>\n signal.parameters.filter((parameter) => !parameter.isVarargs);\n\nconst renderConnectCase = (context: ModuleContext, signal: GirCallable): string => {\n const callback = renderCallback(context, signal);\n const body = `return connectSignal(this, signal, { callback: ${callback}, handler, isAfter: isAfter ?? false });`;\n\n return renderBlock(`case ${sourceStringLiteral(signal.name)}:`, body);\n};\n\nconst renderEmitArgLiteral = (options: EmitArgOptions): { literal: string; nextArgIndex: number } => {\n const { context, parameter, descriptor, argIndex } = options;\n\n if (isOutParameter(parameter)) {\n return { literal: `{ type: ${descriptor}, direction: \"out\" }`, nextArgIndex: argIndex };\n }\n\n if (isCellInout(context.library, parameter)) {\n return {\n literal: `{ type: ${descriptor}, direction: \"inout\", value: args[${String(argIndex)}] }`,\n nextArgIndex: argIndex + 1,\n };\n }\n\n if (isCallerAllocatedOut(parameter)) {\n const value = renderCallerOutInstance(context, parameter);\n\n return {\n literal: `{ type: ${descriptor}, direction: \"out\", isCallerAllocated: true, value: ${value} }`,\n nextArgIndex: argIndex,\n };\n }\n\n if (isRecordInout(context, parameter)) {\n return {\n literal:\n `{ type: ${descriptor}, direction: \"inout\", isCallerAllocated: true, ` +\n `value: args[${String(argIndex)}] }`,\n nextArgIndex: argIndex + 1,\n };\n }\n\n return { literal: `{ type: ${descriptor}, value: args[${String(argIndex)}] }`, nextArgIndex: argIndex + 1 };\n};\n\nconst renderEmitReturnArg = (context: ModuleContext, returnValue: GirReturnValue): string => {\n if (primaryReturnKind(context.library, returnValue) === \"void\") {\n return \"\";\n }\n\n return `, ${renderDescriptor(context, returnValue.type, returnValue.transferOwnership)}`;\n};\n\nconst renderEmitCase = (context: ModuleContext, signal: GirCallable): string => {\n const params = nonVarargParameters(signal);\n\n if (params.some((parameter) => isCallerAllocatedOut(parameter) && !isAllocatableCallerOut(context, parameter))) {\n return renderUnsupportedEmitCase(signal);\n }\n\n context.addRuntimeImport(\"emitSignal\");\n let argIndex = 0;\n\n const argLiterals = params.map((parameter) => {\n const descriptor = renderDescriptor(context, parameter.type, parameter.transferOwnership);\n const rendered = renderEmitArgLiteral({ context, parameter, descriptor, argIndex });\n argIndex = rendered.nextArgIndex;\n\n return rendered.literal;\n });\n\n const returnArg = renderEmitReturnArg(context, signal.returnValue);\n const body = `return emitSignal(this, sigName, [${argLiterals.join(\", \")}]${returnArg});`;\n\n return renderBlock(`case ${sourceStringLiteral(signal.name)}:`, body);\n};\n\nconst renderUnsupportedEmitCase = (signal: GirCallable): string => {\n const message = `emit() cannot allocate the caller-allocated out-parameter of '${signal.name}'`;\n\n return renderBlock(\n `case ${sourceStringLiteral(signal.name)}:`,\n `throw new globalThis.Error(${sourceStringLiteral(message)});`,\n );\n};\n\nconst renderCallback = (context: ModuleContext, signal: GirCallable): string => {\n const params = nonVarargParameters(signal);\n\n const callbackParamDescriptors = params.map((parameter) =>\n renderParamDescriptor(context, parameter, parameter.type, { argIndexOffset: 1 }),\n );\n\n const callbackArgs = [tObject(\"borrowed\"), ...callbackParamDescriptors, tVoid];\n const userDataIndex = String(params.length + 1);\n\n return tCallback({\n argTypes: callbackArgs,\n returns: renderDescriptor(context, signal.returnValue.type, signal.returnValue.transferOwnership),\n options: [\n \"hasDestroy: true\",\n \"destroyKind: \\\"closureNotify\\\"\",\n \"hasUserData: true\",\n `userDataIndex: ${userDataIndex}`,\n ],\n });\n};\n\nconst forEachInterfaceSignal = (\n context: ModuleContext,\n klass: GirClass,\n consider: (signal: GirCallable) => void,\n): void => {\n for (const iface of resolveInterfaces(context.library, context.namespace.name, klass.implements)) {\n for (const signal of iface.klass.signals) {\n consider(signal);\n }\n }\n};\n\nconst collectClassSignals = (context: ModuleContext, klass: GirClass): GirCallable[] => {\n const inheritedNames = collectInheritedSignalNames(context, klass);\n const seen: Set<string> = new Set();\n const result: GirCallable[] = [];\n\n const consider = (signal: GirCallable): void => {\n const name = camelCase(signal.name);\n\n if (!signal.introspectable || inheritedNames.has(name) || seen.has(name)) {\n return;\n }\n\n seen.add(name);\n result.push(signal);\n };\n\n for (const signal of klass.signals) {\n consider(signal);\n }\n\n forEachInterfaceSignal(context, klass, consider);\n\n return result;\n};\n\nconst addMemberNames = (target: Set<string>, source: GirClass, select: (source: GirClass) => NamedMember[]): void => {\n for (const member of select(source)) {\n target.add(camelCase(member.name));\n }\n};\n\nconst collectInheritedMemberNames = (\n context: ModuleContext,\n klass: GirClass,\n select: (source: GirClass) => NamedMember[],\n): Set<string> => {\n const names: Set<string> = new Set();\n\n forEachAncestor(context, klass, (ancestor, interfaces) => {\n addMemberNames(names, ancestor.klass, select);\n\n for (const iface of interfaces) {\n addMemberNames(names, iface.klass, select);\n }\n });\n\n return names;\n};\n\nconst collectInheritedSignalNames = (context: ModuleContext, klass: GirClass): Set<string> =>\n collectInheritedMemberNames(context, klass, (source) => source.signals);\n\nconst collectNotifyDetails = (context: ModuleContext, klass: GirClass): GirProperty[] => {\n const inherited = collectInheritedMemberNames(context, klass, (source) => source.properties);\n const seen: Set<string> = new Set();\n const result: GirProperty[] = [];\n\n const consider = (property: GirProperty): void => {\n const name = camelCase(property.name);\n\n if (inherited.has(name) || seen.has(name)) {\n return;\n }\n\n seen.add(name);\n result.push(property);\n };\n\n for (const property of klass.properties) {\n consider(property);\n }\n\n for (const { property } of collectInterfaceProperties(context, klass)) {\n consider(property);\n }\n\n return result;\n};\n\nexport { renderSignalMembers, renderSignalDeclarations };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"jsx-store.d.ts","sourceRoot":"","sources":["../../src/store/jsx-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAkC,KAAK,YAAY,EAA6B,MAAM,eAAe,CAAC;AAE7G,QAAA,MAAM,aAAa,GACf,SAAS,YAAY,EACrB,YAAY,gBAAgB,EAAE,EAC9B,UAAU,MAAM,EAChB,UAAU,OAAO,EAAE,KACpB,IAyBF,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"jsx-store.d.ts","sourceRoot":"","sources":["../../src/store/jsx-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAkC,KAAK,YAAY,EAA6B,MAAM,eAAe,CAAC;AAE7G,QAAA,MAAM,aAAa,GACf,SAAS,YAAY,EACrB,YAAY,gBAAgB,EAAE,EAC9B,UAAU,MAAM,EAChB,UAAU,OAAO,EAAE,KACpB,IAwBF,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -19,7 +19,6 @@ const writeJsxStore = (options, namespaces, metadata, rawFiles) => {
19
19
  peerDependencies: { "@gtkx/gi": "*", "@gtkx/react": "*", react: "*" },
20
20
  }),
21
21
  rawFiles,
22
- requiresEnvReference: true,
23
22
  });
24
23
  };
25
24
  export { writeJsxStore };
@@ -1 +1 @@
1
- {"version":3,"file":"jsx-store.js","sourceRoot":"","sources":["../../src/store/jsx-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAqB,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE7G,MAAM,aAAa,GAAG,CAClB,OAAqB,EACrB,UAA8B,EAC9B,QAAgB,EAChB,QAAmB,EACf,EAAE;IACN,MAAM,UAAU,GAA4B;QACxC,YAAY,EAAE,aAAa,CAAC,UAAU,CAAC;KAC1C,CAAC;IAEF,MAAM,KAAK,GAAG,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE9D,KAAK,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,SAAS,IAAI,SAAS,MAAM,EAAE,MAAM,EAAE,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9F,UAAU,CAAC,KAAK,SAAS,EAAE,CAAC,GAAG,aAAa,CAAC,GAAG,SAAS,QAAQ,CAAC,CAAC;IACvE,CAAC;IAED,UAAU,CAAC;QACP,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK;QACL,QAAQ,EAAE,aAAa,CAAC;YACpB,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,UAAU;YACnB,gBAAgB,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;SACxE,CAAC;QACF,QAAQ;QACR,oBAAoB,EAAE,IAAI;KAC7B,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC","sourcesContent":["import type { JsxNamespaceFile } from \"./jsx/pipeline.js\";\nimport type { RawFile } from \"./store-fs.js\";\nimport { buildManifest, namespaceBarrel, type StoreOptions, subpathExport, writeStore } from \"./store-fs.js\";\n\nconst writeJsxStore = (\n options: StoreOptions,\n namespaces: JsxNamespaceFile[],\n metadata: string,\n rawFiles: RawFile[],\n): void => {\n const exportsMap: Record<string, unknown> = {\n \"./metadata\": subpathExport(\"metadata\"),\n };\n\n const files = [{ fileName: \"metadata.ts\", source: metadata }];\n\n for (const { directory, source } of namespaces) {\n files.push({ fileName: `${directory}/${directory}.tsx`, source }, namespaceBarrel(directory));\n exportsMap[`./${directory}`] = subpathExport(`${directory}/index`);\n }\n\n writeStore({\n storeDir: options.storeDir,\n linkDir: options.linkDir,\n files,\n manifest: buildManifest({\n name: \"@gtkx/jsx\",\n version: options.version,\n exports: exportsMap,\n peerDependencies: { \"@gtkx/gi\": \"*\", \"@gtkx/react\": \"*\", react: \"*\" },\n }),\n rawFiles,\n requiresEnvReference: true,\n });\n};\n\nexport { writeJsxStore };\n"]}
1
+ {"version":3,"file":"jsx-store.js","sourceRoot":"","sources":["../../src/store/jsx-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAqB,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE7G,MAAM,aAAa,GAAG,CAClB,OAAqB,EACrB,UAA8B,EAC9B,QAAgB,EAChB,QAAmB,EACf,EAAE;IACN,MAAM,UAAU,GAA4B;QACxC,YAAY,EAAE,aAAa,CAAC,UAAU,CAAC;KAC1C,CAAC;IAEF,MAAM,KAAK,GAAG,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE9D,KAAK,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,SAAS,IAAI,SAAS,MAAM,EAAE,MAAM,EAAE,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9F,UAAU,CAAC,KAAK,SAAS,EAAE,CAAC,GAAG,aAAa,CAAC,GAAG,SAAS,QAAQ,CAAC,CAAC;IACvE,CAAC;IAED,UAAU,CAAC;QACP,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK;QACL,QAAQ,EAAE,aAAa,CAAC;YACpB,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,UAAU;YACnB,gBAAgB,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;SACxE,CAAC;QACF,QAAQ;KACX,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC","sourcesContent":["import type { JsxNamespaceFile } from \"./jsx/pipeline.js\";\nimport type { RawFile } from \"./store-fs.js\";\nimport { buildManifest, namespaceBarrel, type StoreOptions, subpathExport, writeStore } from \"./store-fs.js\";\n\nconst writeJsxStore = (\n options: StoreOptions,\n namespaces: JsxNamespaceFile[],\n metadata: string,\n rawFiles: RawFile[],\n): void => {\n const exportsMap: Record<string, unknown> = {\n \"./metadata\": subpathExport(\"metadata\"),\n };\n\n const files = [{ fileName: \"metadata.ts\", source: metadata }];\n\n for (const { directory, source } of namespaces) {\n files.push({ fileName: `${directory}/${directory}.tsx`, source }, namespaceBarrel(directory));\n exportsMap[`./${directory}`] = subpathExport(`${directory}/index`);\n }\n\n writeStore({\n storeDir: options.storeDir,\n linkDir: options.linkDir,\n files,\n manifest: buildManifest({\n name: \"@gtkx/jsx\",\n version: options.version,\n exports: exportsMap,\n peerDependencies: { \"@gtkx/gi\": \"*\", \"@gtkx/react\": \"*\", react: \"*\" },\n }),\n rawFiles,\n });\n};\n\nexport { writeJsxStore };\n"]}
@@ -33,7 +33,6 @@ type WriteStoreParams = {
33
33
  files: SourceModule[];
34
34
  manifest: Manifest;
35
35
  rawFiles?: RawFile[];
36
- requiresEnvReference?: boolean;
37
36
  };
38
37
  declare const subpathExport: (stem: string) => {
39
38
  types: string;
@@ -1 +1 @@
1
- {"version":3,"file":"store-fs.d.ts","sourceRoot":"","sources":["../../src/store/store-fs.ts"],"names":[],"mappings":"AAYA,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAIrE,kEAAkE;AAClE,KAAK,YAAY,GAAG;IAChB,sFAAsF;IACtF,QAAQ,EAAE,MAAM,CAAC;IACjB,uGAAuG;IACvG,OAAO,EAAE,MAAM,CAAC;IAChB,2GAA2G;IAC3G,OAAO,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,SAAS,CAAC,CAAC;AAE5D,KAAK,QAAQ,GAAG;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,IAAI,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7C,CAAC;AAEF,KAAK,aAAa,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7C,CAAC;AAEF,KAAK,OAAO,GAAG;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD,KAAK,gBAAgB,GAAG;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAClC,CAAC;AAKF,QAAA,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAGpE,CAAC;AAEH,QAAA,MAAM,eAAe,GAAI,WAAW,MAAM,KAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAG7E,CAAC;AAEH,QAAA,MAAM,aAAa,GAAI,OAAO,aAAa,KAAG,QAc7C,CAAC;AAEF,QAAA,MAAM,UAAU,GAAI,QAAQ,gBAAgB,KAAG,IAa9C,CAAC;AA0DF,QAAA,MAAM,eAAe,GAAI,MAAM,SAAS,KAAG,IAM1C,CAAC;AAkBF,OAAO,EACH,aAAa,EACb,aAAa,EACb,eAAe,EACf,eAAe,EACf,UAAU,EACV,KAAK,YAAY,EACjB,KAAK,OAAO,GACf,CAAC"}
1
+ {"version":3,"file":"store-fs.d.ts","sourceRoot":"","sources":["../../src/store/store-fs.ts"],"names":[],"mappings":"AAYA,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAIrE,kEAAkE;AAClE,KAAK,YAAY,GAAG;IAChB,sFAAsF;IACtF,QAAQ,EAAE,MAAM,CAAC;IACjB,uGAAuG;IACvG,OAAO,EAAE,MAAM,CAAC;IAChB,2GAA2G;IAC3G,OAAO,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,SAAS,CAAC,CAAC;AAE5D,KAAK,QAAQ,GAAG;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,IAAI,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7C,CAAC;AAEF,KAAK,aAAa,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7C,CAAC;AAEF,KAAK,OAAO,GAAG;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD,KAAK,gBAAgB,GAAG;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;CACxB,CAAC;AAKF,QAAA,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAGpE,CAAC;AAEH,QAAA,MAAM,eAAe,GAAI,WAAW,MAAM,KAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAG7E,CAAC;AAEH,QAAA,MAAM,aAAa,GAAI,OAAO,aAAa,KAAG,QAc7C,CAAC;AAEF,QAAA,MAAM,UAAU,GAAI,QAAQ,gBAAgB,KAAG,IAa9C,CAAC;AAqDF,QAAA,MAAM,eAAe,GAAI,MAAM,SAAS,KAAG,IAM1C,CAAC;AAkBF,OAAO,EACH,aAAa,EACb,aAAa,EACb,eAAe,EACf,eAAe,EACf,UAAU,EACV,KAAK,YAAY,EACjB,KAAK,OAAO,GACf,CAAC"}
@@ -41,16 +41,11 @@ const writeStore = (params) => {
41
41
  rmSync(keepAt, { recursive: true, force: true });
42
42
  };
43
43
  const buildTempStore = (tmp, params) => {
44
+ writePackageJson(tmp, params.manifest);
44
45
  for (const file of params.files) {
45
46
  writeSourceFile(tmp, file.fileName, file.source);
46
47
  }
47
- compileStore({
48
- storeDir: tmp,
49
- files: params.files,
50
- packageName: params.manifest.name,
51
- ...(params.requiresEnvReference !== undefined && { requiresEnvReference: params.requiresEnvReference }),
52
- });
53
- writePackageJson(tmp, params.manifest);
48
+ compileStore({ storeDir: tmp, files: params.files, packageName: params.manifest.name });
54
49
  const rawFiles = params.rawFiles ?? [];
55
50
  for (const raw of rawFiles) {
56
51
  writeFileSync(join(tmp, raw.relativePath), raw.content);