@gtkx/codegen 1.1.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analysis/descriptor-render.d.ts.map +1 -1
- package/dist/analysis/descriptor-render.js +14 -10
- package/dist/analysis/descriptor-render.js.map +1 -1
- package/dist/analysis/descriptor.d.ts +11 -5
- package/dist/analysis/descriptor.d.ts.map +1 -1
- package/dist/analysis/descriptor.js +25 -9
- package/dist/analysis/descriptor.js.map +1 -1
- package/dist/analysis/interface-conflicts.d.ts +3 -1
- package/dist/analysis/interface-conflicts.d.ts.map +1 -1
- package/dist/analysis/interface-conflicts.js +3 -8
- package/dist/analysis/interface-conflicts.js.map +1 -1
- package/dist/analysis/ts-type.d.ts +3 -2
- package/dist/analysis/ts-type.d.ts.map +1 -1
- package/dist/analysis/ts-type.js +16 -9
- package/dist/analysis/ts-type.js.map +1 -1
- package/dist/analysis/type-shape.d.ts +3 -2
- package/dist/analysis/type-shape.d.ts.map +1 -1
- package/dist/analysis/type-shape.js +2 -1
- package/dist/analysis/type-shape.js.map +1 -1
- package/dist/compile.d.ts +4 -5
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +56 -4
- package/dist/compile.js.map +1 -1
- package/dist/docs/api-reference.d.ts +2 -0
- package/dist/docs/api-reference.d.ts.map +1 -1
- package/dist/docs/api-reference.js +1 -1
- package/dist/docs/api-reference.js.map +1 -1
- package/dist/docs/pipeline.d.ts +1 -0
- package/dist/docs/pipeline.d.ts.map +1 -1
- package/dist/docs/pipeline.js +10 -3
- package/dist/docs/pipeline.js.map +1 -1
- package/dist/docs/symbol-page.d.ts.map +1 -1
- package/dist/docs/symbol-page.js +2 -4
- package/dist/docs/symbol-page.js.map +1 -1
- package/dist/fingerprint.d.ts +11 -5
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +22 -19
- package/dist/fingerprint.js.map +1 -1
- package/dist/gi.d.ts +1 -0
- package/dist/gi.d.ts.map +1 -1
- package/dist/gi.js +7 -2
- package/dist/gi.js.map +1 -1
- package/dist/gir/class.d.ts +7 -2
- package/dist/gir/class.d.ts.map +1 -1
- package/dist/gir/class.js +4 -1
- package/dist/gir/class.js.map +1 -1
- package/dist/gir/gir-path.d.ts +1 -1
- package/dist/gir/gir-path.js +1 -1
- package/dist/gir/gir-path.js.map +1 -1
- package/dist/gir/library.d.ts +5 -1
- package/dist/gir/library.d.ts.map +1 -1
- package/dist/gir/library.js +8 -1
- package/dist/gir/library.js.map +1 -1
- package/dist/gir/parse.d.ts.map +1 -1
- package/dist/gir/parse.js +4 -1
- package/dist/gir/parse.js.map +1 -1
- package/dist/gir/primitives.js +1 -1
- package/dist/gir/primitives.js.map +1 -1
- package/dist/khronos/args.d.ts.map +1 -1
- package/dist/khronos/args.js +8 -6
- package/dist/khronos/args.js.map +1 -1
- package/dist/khronos/render.d.ts.map +1 -1
- package/dist/khronos/render.js +8 -4
- package/dist/khronos/render.js.map +1 -1
- package/dist/runner.d.ts +2 -0
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +5 -3
- package/dist/runner.js.map +1 -1
- package/dist/staging.d.ts.map +1 -1
- package/dist/staging.js +1 -1
- package/dist/staging.js.map +1 -1
- package/dist/store/compile-store.d.ts +0 -1
- package/dist/store/compile-store.d.ts.map +1 -1
- package/dist/store/compile-store.js +7 -34
- package/dist/store/compile-store.js.map +1 -1
- package/dist/store/gi/callables.d.ts +2 -4
- package/dist/store/gi/callables.d.ts.map +1 -1
- package/dist/store/gi/callables.js +22 -7
- package/dist/store/gi/callables.js.map +1 -1
- package/dist/store/gi/class.d.ts.map +1 -1
- package/dist/store/gi/class.js +63 -17
- package/dist/store/gi/class.js.map +1 -1
- package/dist/store/gi/constant.js +1 -1
- package/dist/store/gi/constant.js.map +1 -1
- package/dist/store/gi/enum.d.ts.map +1 -1
- package/dist/store/gi/enum.js +2 -5
- package/dist/store/gi/enum.js.map +1 -1
- package/dist/store/gi/gtype-binding.d.ts +2 -1
- package/dist/store/gi/gtype-binding.d.ts.map +1 -1
- package/dist/store/gi/gtype-binding.js +13 -1
- package/dist/store/gi/gtype-binding.js.map +1 -1
- package/dist/store/gi/interface.js +4 -4
- package/dist/store/gi/interface.js.map +1 -1
- package/dist/store/gi/method.d.ts.map +1 -1
- package/dist/store/gi/method.js +4 -7
- package/dist/store/gi/method.js.map +1 -1
- package/dist/store/gi/property-accessor.d.ts +0 -3
- package/dist/store/gi/property-accessor.d.ts.map +1 -1
- package/dist/store/gi/property-accessor.js +15 -108
- package/dist/store/gi/property-accessor.js.map +1 -1
- package/dist/store/gi/record-constructor.d.ts.map +1 -1
- package/dist/store/gi/record-constructor.js +7 -5
- package/dist/store/gi/record-constructor.js.map +1 -1
- package/dist/store/gi/record-field-accessor.d.ts +3 -2
- package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
- package/dist/store/gi/record-field-accessor.js +42 -12
- package/dist/store/gi/record-field-accessor.js.map +1 -1
- package/dist/store/gi/record.d.ts.map +1 -1
- package/dist/store/gi/record.js +5 -9
- package/dist/store/gi/record.js.map +1 -1
- package/dist/store/gi/return-wrap.js +1 -1
- package/dist/store/gi/return-wrap.js.map +1 -1
- package/dist/store/gi/signal.d.ts.map +1 -1
- package/dist/store/gi/signal.js +27 -6
- package/dist/store/gi/signal.js.map +1 -1
- package/dist/store/jsx-store.d.ts.map +1 -1
- package/dist/store/jsx-store.js +0 -1
- package/dist/store/jsx-store.js.map +1 -1
- package/dist/store/resolve-store.d.ts.map +1 -1
- package/dist/store/resolve-store.js +1 -0
- package/dist/store/resolve-store.js.map +1 -1
- package/dist/store/store-fs.d.ts +0 -1
- package/dist/store/store-fs.d.ts.map +1 -1
- package/dist/store/store-fs.js +2 -7
- package/dist/store/store-fs.js.map +1 -1
- package/dist/xml.d.ts +1 -0
- package/dist/xml.d.ts.map +1 -1
- package/dist/xml.js +28 -1
- package/dist/xml.js.map +1 -1
- package/overrides/gobject/object.ts.ejs +2 -0
- package/package.json +3 -3
- package/src/analysis/descriptor-render.ts +19 -10
- package/src/analysis/descriptor.ts +43 -9
- package/src/analysis/interface-conflicts.ts +6 -8
- package/src/analysis/ts-type.ts +30 -11
- package/src/analysis/type-shape.ts +5 -2
- package/src/compile.ts +87 -6
- package/src/docs/api-reference.ts +3 -1
- package/src/docs/pipeline.ts +13 -7
- package/src/docs/symbol-page.ts +1 -5
- package/src/fingerprint.ts +31 -38
- package/src/gi.ts +9 -2
- package/src/gir/class.ts +12 -3
- package/src/gir/gir-path.ts +1 -1
- package/src/gir/library.ts +9 -1
- package/src/gir/parse.ts +6 -1
- package/src/gir/primitives.ts +1 -1
- package/src/khronos/args.ts +9 -6
- package/src/khronos/render.ts +8 -6
- package/src/runner.ts +7 -3
- package/src/staging.ts +1 -3
- package/src/store/compile-store.ts +7 -40
- package/src/store/gi/callables.ts +30 -11
- package/src/store/gi/class.ts +96 -21
- package/src/store/gi/constant.ts +1 -1
- package/src/store/gi/enum.ts +2 -6
- package/src/store/gi/gtype-binding.ts +16 -1
- package/src/store/gi/interface.ts +4 -4
- package/src/store/gi/method.ts +4 -9
- package/src/store/gi/property-accessor.ts +22 -193
- package/src/store/gi/record-constructor.ts +7 -5
- package/src/store/gi/record-field-accessor.ts +65 -13
- package/src/store/gi/record.ts +13 -17
- package/src/store/gi/return-wrap.ts +1 -1
- package/src/store/gi/signal.ts +36 -13
- package/src/store/jsx-store.ts +0 -1
- package/src/store/resolve-store.ts +1 -0
- package/src/store/store-fs.ts +3 -9
- package/src/xml.ts +43 -1
package/dist/gir/gir-path.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gir-path.js","sourceRoot":"","sources":["../../src/gir/gir-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAE7C;;;;;;GAMG;AACH,MAAM,cAAc,GAAG,CAAC,aAAmC,EAAY,EAAE;IACrE,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,aAAa,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAE1C,IAAI,OAAO,EAAE,CAAC;QACV,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,aAAa,GAAG,oBAAoB,EAAE,CAAC;IAE7C,IAAI,aAAa,KAAK,SAAS,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,KAAc,EAAS,EAAE;IACnD,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9C,OAAO,IAAI,KAAK,CAAC,8DAA8D,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/G,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,GAAuB,EAAE;IAC9C,IAAI,CAAC;QACD,OAAO,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACrB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,GAAuB,EAAE;IAClD,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAC;IAErC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,CAAC,mBAAmB,EAAE,2BAA2B,CAAC,EAAE;YACvF,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SACpC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAE9B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO;QACX,CAAC;QAED,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;AACL,CAAC,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC","sourcesContent":["import { formatChildProcessError, resolveExecutable } from \"@gtkx/utils\";\nimport { execFileSync } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\n\nconst SYSTEM_GIR_PATH = \"/usr/share/gir-1.0\";\n\n/**\n * The directories to search for `.gir` files, in precedence order: the config's own `girPath`, then\n * `GTKX_GIR_PATH`, then `/usr/share/gir-1.0`, then the girdir pkg-config reports for\n * gobject-introspection-1.0. Duplicates are dropped, and the
|
|
1
|
+
{"version":3,"file":"gir-path.js","sourceRoot":"","sources":["../../src/gir/gir-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAE7C;;;;;;GAMG;AACH,MAAM,cAAc,GAAG,CAAC,aAAmC,EAAY,EAAE;IACrE,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,aAAa,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAE1C,IAAI,OAAO,EAAE,CAAC;QACV,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,aAAa,GAAG,oBAAoB,EAAE,CAAC;IAE7C,IAAI,aAAa,KAAK,SAAS,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,KAAc,EAAS,EAAE;IACnD,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9C,OAAO,IAAI,KAAK,CAAC,8DAA8D,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/G,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,GAAuB,EAAE;IAC9C,IAAI,CAAC;QACD,OAAO,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACrB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,GAAuB,EAAE;IAClD,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAC;IAErC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,CAAC,mBAAmB,EAAE,2BAA2B,CAAC,EAAE;YACvF,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SACpC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAE9B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO;QACX,CAAC;QAED,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;AACL,CAAC,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC","sourcesContent":["import { formatChildProcessError, resolveExecutable } from \"@gtkx/utils\";\nimport { execFileSync } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\n\nconst SYSTEM_GIR_PATH = \"/usr/share/gir-1.0\";\n\n/**\n * The directories to search for `.gir` files, in precedence order: the config's own `girPath`, then\n * `GTKX_GIR_PATH`, then `/usr/share/gir-1.0`, then the girdir pkg-config reports for\n * gobject-introspection-1.0. Duplicates are dropped, and the system directories are included only when they exist.\n *\n * @throws If pkg-config is installed but fails while being queried.\n */\nconst resolveGirPath = (configGirPath: string[] | undefined): string[] => {\n const paths: string[] = [];\n\n if (configGirPath) {\n paths.push(...configGirPath);\n }\n\n const envPath = process.env.GTKX_GIR_PATH;\n\n if (envPath) {\n paths.push(...envPath.split(\":\").filter((path) => path.length > 0));\n }\n\n if (existsSync(SYSTEM_GIR_PATH)) {\n paths.push(SYSTEM_GIR_PATH);\n }\n\n const pkgConfigPath = queryPkgConfigGirDir();\n\n if (pkgConfigPath !== undefined && existsSync(pkgConfigPath)) {\n paths.push(pkgConfigPath);\n }\n\n return [...new Set(paths)];\n};\n\nconst pkgConfigGirDirError = (error: unknown): Error => {\n const details = formatChildProcessError(error);\n const suffix = details ? `:\\n${details}` : \"\";\n\n return new Error(`pkg-config failed querying gobject-introspection-1.0 girdir${suffix}`, { cause: error });\n};\n\nconst resolvePkgConfig = (): string | undefined => {\n try {\n return resolveExecutable(\"pkg-config\");\n } catch {\n return undefined;\n }\n};\n\nconst queryPkgConfigGirDir = (): string | undefined => {\n const pkgConfig = resolvePkgConfig();\n\n if (pkgConfig === undefined) {\n return undefined;\n }\n\n try {\n const output = execFileSync(pkgConfig, [\"--variable=girdir\", \"gobject-introspection-1.0\"], {\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n const trimmed = output.trim();\n\n return trimmed.length > 0 ? trimmed : undefined;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return;\n }\n\n throw pkgConfigGirDirError(error);\n }\n};\n\nexport { resolveGirPath };\n"]}
|
package/dist/gir/library.d.ts
CHANGED
|
@@ -12,15 +12,17 @@ declare class Library {
|
|
|
12
12
|
*
|
|
13
13
|
* @param libraries GIR identifiers to load, such as `Gtk-4.0`.
|
|
14
14
|
* @param girPath Directories searched, in order, for each `.gir` file.
|
|
15
|
+
* @param isByteArrayTyped Whether byte sequences render as `Uint8Array` rather than `number[]`.
|
|
15
16
|
* @returns A library holding every namespace that was parsed.
|
|
16
17
|
*/
|
|
17
|
-
static load(libraries: string[], girPath: string[]): Library;
|
|
18
|
+
static load(libraries: string[], girPath: string[], isByteArrayTyped?: boolean): Library;
|
|
18
19
|
private namespacesByName;
|
|
19
20
|
private namespaceById;
|
|
20
21
|
private nsNameById;
|
|
21
22
|
private nsIdByName;
|
|
22
23
|
private typeTables;
|
|
23
24
|
private girFilesValue;
|
|
25
|
+
private isByteArrayTypedValue;
|
|
24
26
|
/** Creates a library with no namespaces loaded; {@link Library.load} builds a populated one. */
|
|
25
27
|
constructor();
|
|
26
28
|
private ensureNsId;
|
|
@@ -44,6 +46,8 @@ declare class Library {
|
|
|
44
46
|
private discoverNamespaces;
|
|
45
47
|
/** The loaded namespaces, keyed by their GIR name such as `Gtk`. */
|
|
46
48
|
get namespaces(): Map<string, GirNamespace>;
|
|
49
|
+
/** Whether byte sequences render as `Uint8Array` rather than `number[]`. */
|
|
50
|
+
get isByteArrayTyped(): boolean;
|
|
47
51
|
/** Paths of the `.gir` files that were read, in the order they were discovered. */
|
|
48
52
|
get girFiles(): string[];
|
|
49
53
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../../src/gir/library.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAqD,MAAM,EAAE,MAAM,cAAc,CAAC;AAC9F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAEH,KAAK,YAAY,EAIpB,MAAM,gBAAgB,CAAC;AAkDxB;;;GAGG;AACH,cAAM,OAAO;IACT,OAAO,CAAC,MAAM,CAAC,KAAK;IAcpB
|
|
1
|
+
{"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../../src/gir/library.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAqD,MAAM,EAAE,MAAM,cAAc,CAAC;AAC9F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAEH,KAAK,YAAY,EAIpB,MAAM,gBAAgB,CAAC;AAkDxB;;;GAGG;AACH,cAAM,OAAO;IACT,OAAO,CAAC,MAAM,CAAC,KAAK;IAcpB;;;;;;;OAOG;IACH,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,gBAAgB,UAAQ,GAAG,OAAO;IAQtF,OAAO,CAAC,gBAAgB,CAAwC;IAChE,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,qBAAqB,CAAS;IAEtC,gGAAgG;;IAOhG,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,mBAAmB;IAe3B,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,oBAAoB;IAgB5B,OAAO,CAAC,oBAAoB;IAgB5B,OAAO,CAAC,iBAAiB;IA2BzB,OAAO,CAAC,kBAAkB;IAoB1B,oEAAoE;IACpE,IAAW,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAEjD;IAED,4EAA4E;IAC5E,IAAW,gBAAgB,IAAI,OAAO,CAErC;IAED,mFAAmF;IACnF,IAAW,QAAQ,IAAI,MAAM,EAAE,CAE9B;IAED;;;;;OAKG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAIzC;;;;;OAKG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG;QAClB,6DAA6D;QAC7D,aAAa,EAAE,MAAM,CAAC;QACtB,kEAAkE;QAClE,QAAQ,EAAE,MAAM,CAAC;KACpB,GAAG,SAAS;IAWb;;;;;;;OAOG;IACH,WAAW,CAAC,oBAAoB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;CAsB/E;AAED,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
package/dist/gir/library.js
CHANGED
|
@@ -44,10 +44,12 @@ class Library {
|
|
|
44
44
|
*
|
|
45
45
|
* @param libraries GIR identifiers to load, such as `Gtk-4.0`.
|
|
46
46
|
* @param girPath Directories searched, in order, for each `.gir` file.
|
|
47
|
+
* @param isByteArrayTyped Whether byte sequences render as `Uint8Array` rather than `number[]`.
|
|
47
48
|
* @returns A library holding every namespace that was parsed.
|
|
48
49
|
*/
|
|
49
|
-
static load(libraries, girPath) {
|
|
50
|
+
static load(libraries, girPath, isByteArrayTyped = false) {
|
|
50
51
|
const library = new Library();
|
|
52
|
+
library.isByteArrayTypedValue = isByteArrayTyped;
|
|
51
53
|
this.drive(library, libraries, girPath);
|
|
52
54
|
return library;
|
|
53
55
|
}
|
|
@@ -57,6 +59,7 @@ class Library {
|
|
|
57
59
|
nsIdByName = new Map();
|
|
58
60
|
typeTables = [];
|
|
59
61
|
girFilesValue = [];
|
|
62
|
+
isByteArrayTypedValue = false;
|
|
60
63
|
/** Creates a library with no namespaces loaded; {@link Library.load} builds a populated one. */
|
|
61
64
|
constructor() {
|
|
62
65
|
this.typeTables[INTERNAL_NS_ID] = { types: [], names: [], index: new Map() };
|
|
@@ -220,6 +223,10 @@ class Library {
|
|
|
220
223
|
get namespaces() {
|
|
221
224
|
return this.namespacesByName;
|
|
222
225
|
}
|
|
226
|
+
/** Whether byte sequences render as `Uint8Array` rather than `number[]`. */
|
|
227
|
+
get isByteArrayTyped() {
|
|
228
|
+
return this.isByteArrayTypedValue;
|
|
229
|
+
}
|
|
223
230
|
/** Paths of the `.gir` files that were read, in the order they were discovered. */
|
|
224
231
|
get girFiles() {
|
|
225
232
|
return this.girFilesValue;
|
package/dist/gir/library.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library.js","sourceRoot":"","sources":["../../src/gir/library.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { PrimitiveCategory } from \"./primitives.js\";\nimport type { CArrayType, HashTableType, ListType, ParseContext, TypeId } from \"./type-id.js\";\nimport type { GirType } from \"./type.js\";\nimport { callbackFromNode } from \"./callback.js\";\nimport {\n createNamespaceShell,\n type GirNamespace,\n type NamespaceHeader,\n parseNamespaceHeader,\n populateNamespaceBody,\n} from \"./namespace.js\";\nimport { parseGirFile, type RawNode } from \"./parse.js\";\nimport { splitOptionalNamespace } from \"./type-ref.js\";\n\n/** The types belonging to one namespace, addressed by the id half of a {@link TypeId}. */\ntype TypeTable = {\n /** Parsed type in each slot, still `undefined` while only a forward reference to it has been seen. */\n types: (GirType | undefined)[];\n /** Declared name of each slot, `undefined` for anonymous types such as containers and inline callbacks. */\n names: (string | undefined)[];\n /** Slot id each named type occupies, so repeated references resolve to the same id. */\n index: Map<string, number>;\n};\n\n/** A namespace whose header has been read and whose shell is registered, before its body is parsed. */\ntype DiscoveredNamespace = {\n /** Attributes and includes read from the namespace's GIR file. */\n header: NamespaceHeader;\n /** Empty namespace registered for the header, populated once every header is known. */\n shell: GirNamespace;\n};\n\nconst INTERNAL_NS_ID = 0;\n\nconst readRepositoryNode = (path: string): RawNode => {\n const root = parseGirFile(path);\n const repository = root.repository;\n\n if (typeof repository !== \"object\" || repository === null) {\n throw new Error(`GIR file at ${path} has no <repository> root`);\n }\n\n return repository as RawNode;\n};\n\nconst locateGirFile = (identifier: string, girPath: string[]): string => {\n const filename = `${identifier}.gir`;\n\n for (const directory of girPath) {\n const candidate = join(directory, filename);\n\n if (existsSync(candidate)) {\n return candidate;\n }\n }\n\n const tried = girPath.map((directory) => join(directory, filename)).join(\", \");\n throw new Error(`GIR file ${filename} not found on girPath. Tried: ${tried}`);\n};\n\n/**\n * The parsed GIR universe: every requested namespace plus everything those namespaces include,\n * with types resolvable across namespace boundaries.\n */\nclass Library {\n private static drive(library: Library, libraries: string[], girPath: string[]): void {\n const { discovered, girFiles } = library.discoverNamespaces(libraries, girPath);\n\n for (const { header, shell } of discovered) {\n populateNamespaceBody(shell, header.namespaceNode, library.parseContext(shell.id));\n }\n\n for (const { shell } of discovered) {\n library.addDeclarations(shell);\n }\n\n library.girFilesValue = girFiles;\n }\n\n /**\n * Parses the named GIR libraries along with every namespace they transitively include.\n *\n * @param libraries GIR identifiers to load, such as `Gtk-4.0`.\n * @param girPath Directories searched, in order, for each `.gir` file.\n * @returns A library holding every namespace that was parsed.\n */\n static load(libraries: string[], girPath: string[]): Library {\n const library = new Library();\n this.drive(library, libraries, girPath);\n\n return library;\n }\n\n private namespacesByName: Map<string, GirNamespace> = new Map();\n private namespaceById: (GirNamespace | undefined)[] = [];\n private nsNameById: string[] = [];\n private nsIdByName: Map<string, number> = new Map();\n private typeTables: TypeTable[] = [];\n private girFilesValue: string[] = [];\n\n /** Creates a library with no namespaces loaded; {@link Library.load} builds a populated one. */\n constructor() {\n this.typeTables[INTERNAL_NS_ID] = { types: [], names: [], index: new Map() };\n this.namespaceById[INTERNAL_NS_ID] = undefined;\n this.nsNameById[INTERNAL_NS_ID] = \"$internal\";\n }\n\n private ensureNsId(name: string): number {\n const existing = this.nsIdByName.get(name);\n\n if (existing !== undefined) {\n return existing;\n }\n\n const nsId = this.typeTables.length;\n this.typeTables[nsId] = { types: [], names: [], index: new Map() };\n this.namespaceById[nsId] = undefined;\n this.nsNameById[nsId] = name;\n this.nsIdByName.set(name, nsId);\n\n return nsId;\n }\n\n private registerNamespace(header: NamespaceHeader): GirNamespace {\n const nsId = this.ensureNsId(header.name);\n const shell = createNamespaceShell(header, nsId);\n this.namespaceById[nsId] = shell;\n this.namespacesByName.set(header.name, shell);\n\n return shell;\n }\n\n private namespaceFor(nsId: number): GirNamespace {\n const namespace = this.namespaceById[nsId];\n\n if (namespace === undefined) {\n throw new Error(`No namespace registered for type table id ${String(nsId)}`);\n }\n\n return namespace;\n }\n\n private typeTableFor(nsId: number): TypeTable {\n const typeTable = this.typeTables[nsId];\n\n if (typeTable === undefined) {\n throw new Error(`No type table for namespace id ${String(nsId)}`);\n }\n\n return typeTable;\n }\n\n private insertIntoTypeTable(\n typeTable: TypeTable,\n slot: { type: GirType | undefined; indexKey?: string; displayName?: string },\n ): number {\n const id = typeTable.types.length;\n typeTable.types.push(slot.type);\n typeTable.names.push(slot.displayName);\n\n if (slot.indexKey !== undefined) {\n typeTable.index.set(slot.indexKey, id);\n }\n\n return id;\n }\n\n private resolveTypeId(nsId: number, name: string, type: GirType | undefined): number {\n const typeTable = this.typeTableFor(nsId);\n const existing = typeTable.index.get(name);\n\n if (existing !== undefined) {\n return existing;\n }\n\n return this.insertIntoTypeTable(typeTable, { type, indexKey: name, displayName: name });\n }\n\n private addType(nsId: number, name: string, type: GirType): void {\n this.typeTableFor(nsId).types[this.resolveTypeId(nsId, name, type)] = type;\n }\n\n private findType(nsId: number, name: string): TypeId {\n return { nsId, id: this.resolveTypeId(nsId, name, undefined) };\n }\n\n private addAnonymousType(nsId: number, type: GirType): TypeId {\n const typeTable = this.typeTableFor(nsId);\n const id = this.insertIntoTypeTable(typeTable, { type });\n\n return { nsId, id };\n }\n\n private findTypeByName(currentNsId: number, name: string): TypeId {\n const [namespaceName, localName] = splitOptionalNamespace(name);\n const targetNsId = namespaceName === undefined ? currentNsId : this.ensureNsId(namespaceName);\n\n return this.findType(targetNsId, localName);\n }\n\n private parseContext(nsId: number): ParseContext {\n const context: ParseContext = {\n nsId,\n findType: (name) => this.findTypeByName(nsId, name),\n addPrimitive: (category) => this.addPrimitive(category),\n addVarargs: () => this.addVarargs(),\n addContainer: (type: CArrayType | ListType | HashTableType) => this.addAnonymousType(nsId, type),\n addAnonymousCallback: (node) =>\n this.addAnonymousType(nsId, {\n kind: \"callback\",\n namespace: this.namespaceFor(nsId),\n value: callbackFromNode(node, context),\n }),\n };\n\n return context;\n }\n\n private addPrimitive(category: PrimitiveCategory): TypeId {\n return this.findOrAddContainer(`primitive:${category}`, { kind: \"primitive\", category });\n }\n\n private addVarargs(): TypeId {\n return this.findOrAddContainer(\"varargs\", { kind: \"varargs\" });\n }\n\n private findOrAddContainer(key: string, type: GirType): TypeId {\n const typeTable = this.typeTableFor(INTERNAL_NS_ID);\n const existing = typeTable.index.get(key);\n\n if (existing !== undefined) {\n return { nsId: INTERNAL_NS_ID, id: existing };\n }\n\n const id = this.insertIntoTypeTable(typeTable, { type, indexKey: key });\n\n return { nsId: INTERNAL_NS_ID, id };\n }\n\n private addDeclarations(shell: GirNamespace): void {\n this.addClassDeclarations(shell);\n this.addValueDeclarations(shell);\n }\n\n private addClassDeclarations(shell: GirNamespace): void {\n const nsId = shell.id;\n\n for (const value of shell.classes) {\n this.addType(nsId, value.name, { kind: \"class\", namespace: shell, value });\n }\n\n for (const value of shell.interfaces) {\n this.addType(nsId, value.name, { kind: \"interface\", namespace: shell, value });\n }\n\n for (const value of shell.records) {\n this.addType(nsId, value.name, { kind: \"record\", namespace: shell, value });\n }\n }\n\n private addValueDeclarations(shell: GirNamespace): void {\n const nsId = shell.id;\n\n for (const value of shell.enums) {\n this.addType(nsId, value.name, { kind: \"enum\", namespace: shell, value });\n }\n\n for (const value of shell.callbacks) {\n this.addType(nsId, value.name, { kind: \"callback\", namespace: shell, value });\n }\n\n for (const alias of shell.aliases) {\n this.addType(nsId, alias.name, { kind: \"alias\", namespace: shell, value: alias });\n }\n }\n\n private processIdentifier(input: {\n identifier: string;\n girPath: string[];\n seen: Set<string>;\n queue: string[];\n girFiles: string[];\n discovered: DiscoveredNamespace[];\n }): void {\n const { identifier, girPath, seen, queue, girFiles, discovered } = input;\n const namespaceName = identifier.split(\"-\", 1)[0] ?? identifier;\n\n if (seen.has(namespaceName)) {\n return;\n }\n\n seen.add(namespaceName);\n const path = locateGirFile(identifier, girPath);\n girFiles.push(path);\n const header = parseNamespaceHeader(readRepositoryNode(path), path);\n const shell = this.registerNamespace(header);\n discovered.push({ header, shell });\n\n for (const include of header.includes) {\n queue.push(`${include.name}-${include.version}`);\n }\n }\n\n private discoverNamespaces(\n libraries: string[],\n girPath: string[],\n ): { discovered: DiscoveredNamespace[]; girFiles: string[] } {\n const queue: string[] = [...libraries];\n const seen: Set<string> = new Set();\n const discovered: DiscoveredNamespace[] = [];\n const girFiles: string[] = [];\n\n while (queue.length > 0) {\n const identifier = queue.shift();\n\n if (identifier !== undefined) {\n this.processIdentifier({ identifier, girPath, seen, queue, girFiles, discovered });\n }\n }\n\n return { discovered, girFiles };\n }\n\n /** The loaded namespaces, keyed by their GIR name such as `Gtk`. */\n public get namespaces(): Map<string, GirNamespace> {\n return this.namespacesByName;\n }\n\n /** Paths of the `.gir` files that were read, in the order they were discovered. */\n public get girFiles(): string[] {\n return this.girFilesValue;\n }\n\n /**\n * Reads the type a {@link TypeId} points at.\n *\n * @param tid The type id to dereference.\n * @returns The parsed type, or `undefined` when nothing has been parsed into that slot.\n */\n typeFor(tid: TypeId): GirType | undefined {\n return this.typeTables[tid.nsId]?.types[tid.id];\n }\n\n /**\n * Reads the name a {@link TypeId} was registered under.\n *\n * @param tid The type id to name.\n * @returns The namespace and type name, or `undefined` for an anonymous type.\n */\n nameFor(tid: TypeId): {\n /** GIR namespace to qualify the type with, such as `Gtk`. */\n namespaceName: string;\n /** Unqualified type name as GIR declares it, such as `Widget`. */\n typeName: string;\n } | undefined {\n const typeName = this.typeTables[tid.nsId]?.names[tid.id];\n const namespaceName = this.nsNameById[tid.nsId];\n\n if (typeName === undefined || namespaceName === undefined) {\n return undefined;\n }\n\n return { namespaceName, typeName };\n }\n\n /**\n * Looks up a type by the name a GIR file writes, resolving an unqualified name against the\n * namespace it appears in and a `Namespace.Type` name against the loaded namespaces.\n *\n * @param currentNamespaceName Namespace the name is written in.\n * @param name Type name, optionally qualified with a namespace prefix.\n * @returns The parsed type, or `undefined` when the name is unknown or only a forward reference to it exists.\n */\n resolveType(currentNamespaceName: string, name: string): GirType | undefined {\n const currentNsId = this.nsIdByName.get(currentNamespaceName);\n\n if (currentNsId === undefined) {\n return undefined;\n }\n\n const [namespaceName, localName] = splitOptionalNamespace(name);\n const targetNsId = namespaceName === undefined ? currentNsId : this.nsIdByName.get(namespaceName);\n\n if (targetNsId === undefined) {\n return undefined;\n }\n\n const id = this.typeTableFor(targetNsId).index.get(localName);\n\n if (id === undefined) {\n return undefined;\n }\n\n return this.typeTableFor(targetNsId).types[id];\n }\n}\n\nexport { Library };\n"]}
|
|
1
|
+
{"version":3,"file":"library.js","sourceRoot":"","sources":["../../src/gir/library.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { PrimitiveCategory } from \"./primitives.js\";\nimport type { CArrayType, HashTableType, ListType, ParseContext, TypeId } from \"./type-id.js\";\nimport type { GirType } from \"./type.js\";\nimport { callbackFromNode } from \"./callback.js\";\nimport {\n createNamespaceShell,\n type GirNamespace,\n type NamespaceHeader,\n parseNamespaceHeader,\n populateNamespaceBody,\n} from \"./namespace.js\";\nimport { parseGirFile, type RawNode } from \"./parse.js\";\nimport { splitOptionalNamespace } from \"./type-ref.js\";\n\n/** The types belonging to one namespace, addressed by the id half of a {@link TypeId}. */\ntype TypeTable = {\n /** Parsed type in each slot, still `undefined` while only a forward reference to it has been seen. */\n types: (GirType | undefined)[];\n /** Declared name of each slot, `undefined` for anonymous types such as containers and inline callbacks. */\n names: (string | undefined)[];\n /** Slot id each named type occupies, so repeated references resolve to the same id. */\n index: Map<string, number>;\n};\n\n/** A namespace whose header has been read and whose shell is registered, before its body is parsed. */\ntype DiscoveredNamespace = {\n /** Attributes and includes read from the namespace's GIR file. */\n header: NamespaceHeader;\n /** Empty namespace registered for the header, populated once every header is known. */\n shell: GirNamespace;\n};\n\nconst INTERNAL_NS_ID = 0;\n\nconst readRepositoryNode = (path: string): RawNode => {\n const root = parseGirFile(path);\n const repository = root.repository;\n\n if (typeof repository !== \"object\" || repository === null) {\n throw new Error(`GIR file at ${path} has no <repository> root`);\n }\n\n return repository as RawNode;\n};\n\nconst locateGirFile = (identifier: string, girPath: string[]): string => {\n const filename = `${identifier}.gir`;\n\n for (const directory of girPath) {\n const candidate = join(directory, filename);\n\n if (existsSync(candidate)) {\n return candidate;\n }\n }\n\n const tried = girPath.map((directory) => join(directory, filename)).join(\", \");\n throw new Error(`GIR file ${filename} not found on girPath. Tried: ${tried}`);\n};\n\n/**\n * The parsed GIR universe: every requested namespace plus everything those namespaces include,\n * with types resolvable across namespace boundaries.\n */\nclass Library {\n private static drive(library: Library, libraries: string[], girPath: string[]): void {\n const { discovered, girFiles } = library.discoverNamespaces(libraries, girPath);\n\n for (const { header, shell } of discovered) {\n populateNamespaceBody(shell, header.namespaceNode, library.parseContext(shell.id));\n }\n\n for (const { shell } of discovered) {\n library.addDeclarations(shell);\n }\n\n library.girFilesValue = girFiles;\n }\n\n /**\n * Parses the named GIR libraries along with every namespace they transitively include.\n *\n * @param libraries GIR identifiers to load, such as `Gtk-4.0`.\n * @param girPath Directories searched, in order, for each `.gir` file.\n * @param isByteArrayTyped Whether byte sequences render as `Uint8Array` rather than `number[]`.\n * @returns A library holding every namespace that was parsed.\n */\n static load(libraries: string[], girPath: string[], isByteArrayTyped = false): Library {\n const library = new Library();\n library.isByteArrayTypedValue = isByteArrayTyped;\n this.drive(library, libraries, girPath);\n\n return library;\n }\n\n private namespacesByName: Map<string, GirNamespace> = new Map();\n private namespaceById: (GirNamespace | undefined)[] = [];\n private nsNameById: string[] = [];\n private nsIdByName: Map<string, number> = new Map();\n private typeTables: TypeTable[] = [];\n private girFilesValue: string[] = [];\n private isByteArrayTypedValue = false;\n\n /** Creates a library with no namespaces loaded; {@link Library.load} builds a populated one. */\n constructor() {\n this.typeTables[INTERNAL_NS_ID] = { types: [], names: [], index: new Map() };\n this.namespaceById[INTERNAL_NS_ID] = undefined;\n this.nsNameById[INTERNAL_NS_ID] = \"$internal\";\n }\n\n private ensureNsId(name: string): number {\n const existing = this.nsIdByName.get(name);\n\n if (existing !== undefined) {\n return existing;\n }\n\n const nsId = this.typeTables.length;\n this.typeTables[nsId] = { types: [], names: [], index: new Map() };\n this.namespaceById[nsId] = undefined;\n this.nsNameById[nsId] = name;\n this.nsIdByName.set(name, nsId);\n\n return nsId;\n }\n\n private registerNamespace(header: NamespaceHeader): GirNamespace {\n const nsId = this.ensureNsId(header.name);\n const shell = createNamespaceShell(header, nsId);\n this.namespaceById[nsId] = shell;\n this.namespacesByName.set(header.name, shell);\n\n return shell;\n }\n\n private namespaceFor(nsId: number): GirNamespace {\n const namespace = this.namespaceById[nsId];\n\n if (namespace === undefined) {\n throw new Error(`No namespace registered for type table id ${String(nsId)}`);\n }\n\n return namespace;\n }\n\n private typeTableFor(nsId: number): TypeTable {\n const typeTable = this.typeTables[nsId];\n\n if (typeTable === undefined) {\n throw new Error(`No type table for namespace id ${String(nsId)}`);\n }\n\n return typeTable;\n }\n\n private insertIntoTypeTable(\n typeTable: TypeTable,\n slot: { type: GirType | undefined; indexKey?: string; displayName?: string },\n ): number {\n const id = typeTable.types.length;\n typeTable.types.push(slot.type);\n typeTable.names.push(slot.displayName);\n\n if (slot.indexKey !== undefined) {\n typeTable.index.set(slot.indexKey, id);\n }\n\n return id;\n }\n\n private resolveTypeId(nsId: number, name: string, type: GirType | undefined): number {\n const typeTable = this.typeTableFor(nsId);\n const existing = typeTable.index.get(name);\n\n if (existing !== undefined) {\n return existing;\n }\n\n return this.insertIntoTypeTable(typeTable, { type, indexKey: name, displayName: name });\n }\n\n private addType(nsId: number, name: string, type: GirType): void {\n this.typeTableFor(nsId).types[this.resolveTypeId(nsId, name, type)] = type;\n }\n\n private findType(nsId: number, name: string): TypeId {\n return { nsId, id: this.resolveTypeId(nsId, name, undefined) };\n }\n\n private addAnonymousType(nsId: number, type: GirType): TypeId {\n const typeTable = this.typeTableFor(nsId);\n const id = this.insertIntoTypeTable(typeTable, { type });\n\n return { nsId, id };\n }\n\n private findTypeByName(currentNsId: number, name: string): TypeId {\n const [namespaceName, localName] = splitOptionalNamespace(name);\n const targetNsId = namespaceName === undefined ? currentNsId : this.ensureNsId(namespaceName);\n\n return this.findType(targetNsId, localName);\n }\n\n private parseContext(nsId: number): ParseContext {\n const context: ParseContext = {\n nsId,\n findType: (name) => this.findTypeByName(nsId, name),\n addPrimitive: (category) => this.addPrimitive(category),\n addVarargs: () => this.addVarargs(),\n addContainer: (type: CArrayType | ListType | HashTableType) => this.addAnonymousType(nsId, type),\n addAnonymousCallback: (node) =>\n this.addAnonymousType(nsId, {\n kind: \"callback\",\n namespace: this.namespaceFor(nsId),\n value: callbackFromNode(node, context),\n }),\n };\n\n return context;\n }\n\n private addPrimitive(category: PrimitiveCategory): TypeId {\n return this.findOrAddContainer(`primitive:${category}`, { kind: \"primitive\", category });\n }\n\n private addVarargs(): TypeId {\n return this.findOrAddContainer(\"varargs\", { kind: \"varargs\" });\n }\n\n private findOrAddContainer(key: string, type: GirType): TypeId {\n const typeTable = this.typeTableFor(INTERNAL_NS_ID);\n const existing = typeTable.index.get(key);\n\n if (existing !== undefined) {\n return { nsId: INTERNAL_NS_ID, id: existing };\n }\n\n const id = this.insertIntoTypeTable(typeTable, { type, indexKey: key });\n\n return { nsId: INTERNAL_NS_ID, id };\n }\n\n private addDeclarations(shell: GirNamespace): void {\n this.addClassDeclarations(shell);\n this.addValueDeclarations(shell);\n }\n\n private addClassDeclarations(shell: GirNamespace): void {\n const nsId = shell.id;\n\n for (const value of shell.classes) {\n this.addType(nsId, value.name, { kind: \"class\", namespace: shell, value });\n }\n\n for (const value of shell.interfaces) {\n this.addType(nsId, value.name, { kind: \"interface\", namespace: shell, value });\n }\n\n for (const value of shell.records) {\n this.addType(nsId, value.name, { kind: \"record\", namespace: shell, value });\n }\n }\n\n private addValueDeclarations(shell: GirNamespace): void {\n const nsId = shell.id;\n\n for (const value of shell.enums) {\n this.addType(nsId, value.name, { kind: \"enum\", namespace: shell, value });\n }\n\n for (const value of shell.callbacks) {\n this.addType(nsId, value.name, { kind: \"callback\", namespace: shell, value });\n }\n\n for (const alias of shell.aliases) {\n this.addType(nsId, alias.name, { kind: \"alias\", namespace: shell, value: alias });\n }\n }\n\n private processIdentifier(input: {\n identifier: string;\n girPath: string[];\n seen: Set<string>;\n queue: string[];\n girFiles: string[];\n discovered: DiscoveredNamespace[];\n }): void {\n const { identifier, girPath, seen, queue, girFiles, discovered } = input;\n const namespaceName = identifier.split(\"-\", 1)[0] ?? identifier;\n\n if (seen.has(namespaceName)) {\n return;\n }\n\n seen.add(namespaceName);\n const path = locateGirFile(identifier, girPath);\n girFiles.push(path);\n const header = parseNamespaceHeader(readRepositoryNode(path), path);\n const shell = this.registerNamespace(header);\n discovered.push({ header, shell });\n\n for (const include of header.includes) {\n queue.push(`${include.name}-${include.version}`);\n }\n }\n\n private discoverNamespaces(\n libraries: string[],\n girPath: string[],\n ): { discovered: DiscoveredNamespace[]; girFiles: string[] } {\n const queue: string[] = [...libraries];\n const seen: Set<string> = new Set();\n const discovered: DiscoveredNamespace[] = [];\n const girFiles: string[] = [];\n\n while (queue.length > 0) {\n const identifier = queue.shift();\n\n if (identifier !== undefined) {\n this.processIdentifier({ identifier, girPath, seen, queue, girFiles, discovered });\n }\n }\n\n return { discovered, girFiles };\n }\n\n /** The loaded namespaces, keyed by their GIR name such as `Gtk`. */\n public get namespaces(): Map<string, GirNamespace> {\n return this.namespacesByName;\n }\n\n /** Whether byte sequences render as `Uint8Array` rather than `number[]`. */\n public get isByteArrayTyped(): boolean {\n return this.isByteArrayTypedValue;\n }\n\n /** Paths of the `.gir` files that were read, in the order they were discovered. */\n public get girFiles(): string[] {\n return this.girFilesValue;\n }\n\n /**\n * Reads the type a {@link TypeId} points at.\n *\n * @param tid The type id to dereference.\n * @returns The parsed type, or `undefined` when nothing has been parsed into that slot.\n */\n typeFor(tid: TypeId): GirType | undefined {\n return this.typeTables[tid.nsId]?.types[tid.id];\n }\n\n /**\n * Reads the name a {@link TypeId} was registered under.\n *\n * @param tid The type id to name.\n * @returns The namespace and type name, or `undefined` for an anonymous type.\n */\n nameFor(tid: TypeId): {\n /** GIR namespace to qualify the type with, such as `Gtk`. */\n namespaceName: string;\n /** Unqualified type name as GIR declares it, such as `Widget`. */\n typeName: string;\n } | undefined {\n const typeName = this.typeTables[tid.nsId]?.names[tid.id];\n const namespaceName = this.nsNameById[tid.nsId];\n\n if (typeName === undefined || namespaceName === undefined) {\n return undefined;\n }\n\n return { namespaceName, typeName };\n }\n\n /**\n * Looks up a type by the name a GIR file writes, resolving an unqualified name against the\n * namespace it appears in and a `Namespace.Type` name against the loaded namespaces.\n *\n * @param currentNamespaceName Namespace the name is written in.\n * @param name Type name, optionally qualified with a namespace prefix.\n * @returns The parsed type, or `undefined` when the name is unknown or only a forward reference to it exists.\n */\n resolveType(currentNamespaceName: string, name: string): GirType | undefined {\n const currentNsId = this.nsIdByName.get(currentNamespaceName);\n\n if (currentNsId === undefined) {\n return undefined;\n }\n\n const [namespaceName, localName] = splitOptionalNamespace(name);\n const targetNsId = namespaceName === undefined ? currentNsId : this.nsIdByName.get(namespaceName);\n\n if (targetNsId === undefined) {\n return undefined;\n }\n\n const id = this.typeTableFor(targetNsId).index.get(localName);\n\n if (id === undefined) {\n return undefined;\n }\n\n return this.typeTableFor(targetNsId).types[id];\n }\n}\n\nexport { Library };\n"]}
|
package/dist/gir/parse.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/gir/parse.ts"],"names":[],"mappings":"AAEA,6GAA6G;AAC7G,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/gir/parse.ts"],"names":[],"mappings":"AAEA,6GAA6G;AAC7G,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAiCvC,QAAA,MAAM,mBAAmB,oBAAoB,CAAC;AAc9C,QAAA,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,OACyE,CAAC;AAE/G,QAAA,MAAM,IAAI,GAAI,MAAM,OAAO,GAAG,SAAS,EAAE,MAAM,MAAM,KAAG,MAAM,GAAG,SAQhE,CAAC;AAEF,QAAA,MAAM,UAAU,GAAI,MAAM,OAAO,GAAG,SAAS,EAAE,MAAM,MAAM,EAAE,yBAAuB,KAAG,OAQtF,CAAC;AAEF,QAAA,MAAM,QAAQ,GAAI,MAAM,OAAO,KAAG,MAAkC,CAAC;AAErE,QAAA,MAAM,OAAO,GAAI,MAAM,OAAO,EAAE,MAAM,MAAM,KAAG,MAAM,GAAG,SAIvD,CAAC;AAYF,QAAA,MAAM,aAAa,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,SAAS,EAC5D,KAAK,MAAM,GAAG,SAAS,EACvB,SAAS,GAAG,CAAC,CAAC,CAAC,EACf,UAAU,CAAC,EACX,OAAO,MAAM,KACd,CAAC,GAAG,CAAqE,CAAC;AAE7E,QAAA,MAAM,WAAW,GAAI,MAAM,OAAO,GAAG,SAAS,EAAE,KAAK,MAAM,KAAG,OAAO,EAgBpE,CAAC;AAEF,QAAA,MAAM,QAAQ,GAAI,MAAM,OAAO,GAAG,SAAS,EAAE,KAAK,MAAM,KAAG,OAAO,GAAG,SAgBpE,CAAC;AAkCF,QAAA,MAAM,MAAM,GAAI,MAAM,OAAO,GAAG,SAAS,KAAG,MAAM,GAAG,SAAwC,CAAC;AAC9F,QAAA,MAAM,gBAAgB,GAAI,MAAM,OAAO,GAAG,SAAS,KAAG,MAAM,GAAG,SAAmD,CAAC;AAEnH,OAAO,EACH,mBAAmB,EACnB,YAAY,EACZ,IAAI,EACJ,UAAU,EACV,QAAQ,EACR,OAAO,EACP,aAAa,EACb,WAAW,EACX,QAAQ,EACR,MAAM,EACN,gBAAgB,EAChB,KAAK,OAAO,GACf,CAAC"}
|
package/dist/gir/parse.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { createXmlParser, parseXmlFile } from "../xml.js";
|
|
2
2
|
const GIR_LABEL = "GIR file";
|
|
3
|
+
const GIR_MALFORMED_REMEDY = "No XML parser can read this file, so report it to whoever ships it. To get past it now, name the " +
|
|
4
|
+
"libraries you need explicitly in `libraries` and leave this one out, or put a corrected copy of the " +
|
|
5
|
+
"file in a directory listed in `girPath`, which is searched ahead of the system location.";
|
|
3
6
|
const MULTI_TAGS = new Set([
|
|
4
7
|
"include",
|
|
5
8
|
"class",
|
|
@@ -34,7 +37,7 @@ const PARSER = createXmlParser({
|
|
|
34
37
|
function renameReservedTag(tag) {
|
|
35
38
|
return RESERVED_TAG_RENAMES.get(tag) ?? tag;
|
|
36
39
|
}
|
|
37
|
-
const parseGirFile = (path) => parseXmlFile({ parser: PARSER, label: GIR_LABEL, path });
|
|
40
|
+
const parseGirFile = (path) => parseXmlFile({ parser: PARSER, label: GIR_LABEL, path, malformedRemedy: GIR_MALFORMED_REMEDY });
|
|
38
41
|
const attr = (node, name) => {
|
|
39
42
|
if (node === undefined) {
|
|
40
43
|
return undefined;
|
package/dist/gir/parse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/gir/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAK1D,MAAM,SAAS,GAAG,UAAU,CAAC;AAE7B,MAAM,UAAU,GAAgB,IAAI,GAAG,CAAC;IACpC,SAAS;IACT,OAAO;IACP,WAAW;IACX,QAAQ;IACR,aAAa;IACb,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,OAAO;IACP,OAAO;IACP,QAAQ;IACR,gBAAgB;IAChB,aAAa;IACb,UAAU;IACV,OAAO;IACP,aAAa;IACb,YAAY;IACZ,cAAc;IACd,QAAQ;IACR,WAAW;CACd,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AAC9C,MAAM,oBAAoB,GAAwB,IAAI,GAAG,CAAC,CAAC,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;AAClG,MAAM,kBAAkB,GAAgB,IAAI,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEtG,MAAM,MAAM,GAAG,eAAe,CAAC;IAC3B,UAAU,EAAE,IAAI;IAChB,gBAAgB,EAAE,iBAAiB;IACnC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;CAClD,CAAC,CAAC;AAEH,SAAS,iBAAiB,CAAC,GAAW;IAClC,OAAO,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;AAChD,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,IAAY,EAAW,EAAE,CAC3C,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/gir/parse.ts"],"names":[],"mappings":"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","sourcesContent":["import { createXmlParser, parseXmlFile } from \"../xml.js\";\n\n/** An element of the parsed GIR XML: attributes under `@_`-prefixed keys, children under their tag names. */\ntype RawNode = Record<string, unknown>;\n\nconst GIR_LABEL = \"GIR file\";\n\nconst GIR_MALFORMED_REMEDY =\n \"No XML parser can read this file, so report it to whoever ships it. To get past it now, name the \" +\n \"libraries you need explicitly in `libraries` and leave this one out, or put a corrected copy of the \" +\n \"file in a directory listed in `girPath`, which is searched ahead of the system location.\";\n\nconst MULTI_TAGS: Set<string> = new Set([\n \"include\",\n \"class\",\n \"interface\",\n \"record\",\n \"enumeration\",\n \"bitfield\",\n \"callback\",\n \"function\",\n \"constant\",\n \"alias\",\n \"union\",\n \"method\",\n \"virtual-method\",\n \"constructor\",\n \"property\",\n \"field\",\n \"glib:signal\",\n \"implements\",\n \"prerequisite\",\n \"member\",\n \"parameter\",\n]);\n\nconst GIR_CONSTRUCTOR_TAG = \"gir-constructor\";\nconst RESERVED_TAG_RENAMES: Map<string, string> = new Map([[\"constructor\", GIR_CONSTRUCTOR_TAG]]);\nconst RENAMED_MULTI_TAGS: Set<string> = new Set([...MULTI_TAGS].map((tag) => renameReservedTag(tag)));\n\nconst PARSER = createXmlParser({\n trimValues: true,\n transformTagName: renameReservedTag,\n isArray: (name) => RENAMED_MULTI_TAGS.has(name),\n});\n\nfunction renameReservedTag(tag: string): string {\n return RESERVED_TAG_RENAMES.get(tag) ?? tag;\n}\n\nconst parseGirFile = (path: string): RawNode =>\n parseXmlFile({ parser: PARSER, label: GIR_LABEL, path, malformedRemedy: GIR_MALFORMED_REMEDY }) as RawNode;\n\nconst attr = (node: RawNode | undefined, name: string): string | undefined => {\n if (node === undefined) {\n return undefined;\n }\n\n const value = node[`@_${name}`];\n\n return typeof value === \"string\" ? value : undefined;\n};\n\nconst isAttrTrue = (node: RawNode | undefined, name: string, isTrueByDefault = false): boolean => {\n const value = attr(node, name);\n\n if (value === undefined) {\n return isTrueByDefault;\n }\n\n return value === \"1\";\n};\n\nconst nameAttr = (node: RawNode): string => attr(node, \"name\") ?? \"\";\n\nconst intAttr = (node: RawNode, name: string): number | undefined => {\n const raw = attr(node, name);\n\n return raw === undefined ? undefined : Number(raw);\n};\n\nconst enumMember = <T extends string>(raw: string, members: Set<T>, label: string): T => {\n for (const member of members) {\n if (member === raw) {\n return member;\n }\n }\n\n throw new Error(`Unknown ${label} value \"${raw}\"`);\n};\n\nconst parseEnumAttr = <T extends string, F extends T | undefined>(\n raw: string | undefined,\n members: Set<T>,\n fallback: F,\n label: string,\n): T | F => (raw === undefined ? fallback : enumMember(raw, members, label));\n\nconst getChildren = (node: RawNode | undefined, tag: string): RawNode[] => {\n if (node === undefined) {\n return [];\n }\n\n const value = node[tag];\n\n if (value === undefined) {\n return [];\n }\n\n if (Array.isArray(value)) {\n return value as RawNode[];\n }\n\n return [value as RawNode];\n};\n\nconst getChild = (node: RawNode | undefined, tag: string): RawNode | undefined => {\n if (node === undefined) {\n return undefined;\n }\n\n const value = node[tag];\n\n if (value === undefined) {\n return undefined;\n }\n\n if (Array.isArray(value)) {\n return value.length === 0 ? undefined : (value[0] as RawNode);\n }\n\n return value as RawNode;\n};\n\nconst normalizeDoc = (text: string): string | undefined => {\n const trimmed = text.trim();\n\n return trimmed.length === 0 ? undefined : trimmed;\n};\n\nconst firstDocValue = (raw: unknown): unknown => (Array.isArray(raw) ? raw[0] : raw);\n\nconst docTextFromObject = (value: object): string | undefined => {\n const text = (value as RawNode)[\"#text\"];\n\n return typeof text === \"string\" ? normalizeDoc(text) : undefined;\n};\n\nconst docElementText = (node: RawNode | undefined, tag: string): string | undefined => {\n if (node === undefined) {\n return undefined;\n }\n\n const value = firstDocValue(node[tag]);\n\n if (typeof value === \"string\") {\n return normalizeDoc(value);\n }\n\n if (value === null || typeof value !== \"object\") {\n return undefined;\n }\n\n return docTextFromObject(value);\n};\n\nconst getDoc = (node: RawNode | undefined): string | undefined => docElementText(node, \"doc\");\nconst getDocDeprecated = (node: RawNode | undefined): string | undefined => docElementText(node, \"doc-deprecated\");\n\nexport {\n GIR_CONSTRUCTOR_TAG,\n parseGirFile,\n attr,\n isAttrTrue,\n nameAttr,\n intAttr,\n parseEnumAttr,\n getChildren,\n getChild,\n getDoc,\n getDocDeprecated,\n type RawNode,\n};\n"]}
|
package/dist/gir/primitives.js
CHANGED
|
@@ -87,7 +87,7 @@ const PRIMITIVE_TS_TYPE = {
|
|
|
87
87
|
float64: "number",
|
|
88
88
|
string: "string",
|
|
89
89
|
unichar: "string",
|
|
90
|
-
pointer: "
|
|
90
|
+
pointer: "bigint",
|
|
91
91
|
};
|
|
92
92
|
const primitiveCategory = (name) => PRIMITIVE_BY_NAME.get(name);
|
|
93
93
|
export { PRIMITIVE_SIZE, PRIMITIVE_TS_TYPE, primitiveCategory };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../src/gir/primitives.ts"],"names":[],"mappings":"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","sourcesContent":["/** A fundamental C type GIR can name, collapsed to the marshalling category GTKX treats it as. */\ntype PrimitiveCategory =\n | \"void\" |\n \"boolean\" |\n \"int8\" |\n \"uint8\" |\n \"int16\" |\n \"uint16\" |\n \"int32\" |\n \"uint32\" |\n \"int64\" |\n \"uint64\" |\n \"bigint64\" |\n \"biguint64\" |\n \"gtype\" |\n \"float32\" |\n \"float64\" |\n \"string\" |\n \"unichar\" |\n \"pointer\";\n\nconst PRIMITIVE_SIZE: Record<PrimitiveCategory, number> = {\n void: 0,\n boolean: 4,\n int8: 1,\n uint8: 1,\n int16: 2,\n uint16: 2,\n int32: 4,\n uint32: 4,\n int64: 8,\n uint64: 8,\n bigint64: 8,\n biguint64: 8,\n gtype: 8,\n float32: 4,\n float64: 8,\n string: 8,\n unichar: 4,\n pointer: 8,\n};\n\nconst PRIMITIVE_BY_NAME: Map<string, PrimitiveCategory> = new Map([\n [\"none\", \"void\"],\n [\"void\", \"void\"],\n [\"gboolean\", \"boolean\"],\n [\"gchar\", \"int8\"],\n [\"gint8\", \"int8\"],\n [\"guchar\", \"uint8\"],\n [\"guint8\", \"uint8\"],\n [\"gshort\", \"int16\"],\n [\"gint16\", \"int16\"],\n [\"gushort\", \"uint16\"],\n [\"guint16\", \"uint16\"],\n [\"gint\", \"int32\"],\n [\"gint32\", \"int32\"],\n [\"int\", \"int32\"],\n [\"int8\", \"int8\"],\n [\"uint8\", \"uint8\"],\n [\"int16\", \"int16\"],\n [\"uint16\", \"uint16\"],\n [\"int32\", \"int32\"],\n [\"uint32\", \"uint32\"],\n [\"int64\", \"bigint64\"],\n [\"uint64\", \"biguint64\"],\n [\"guint\", \"uint32\"],\n [\"guint32\", \"uint32\"],\n [\"glong\", \"bigint64\"],\n [\"gint64\", \"bigint64\"],\n [\"long\", \"bigint64\"],\n [\"gssize\", \"int64\"],\n [\"gintptr\", \"int64\"],\n [\"gulong\", \"biguint64\"],\n [\"guint64\", \"biguint64\"],\n [\"gsize\", \"uint64\"],\n [\"guintptr\", \"uint64\"],\n [\"GType\", \"gtype\"],\n [\"time_t\", \"bigint64\"],\n [\"pid_t\", \"int32\"],\n [\"uid_t\", \"uint32\"],\n [\"gid_t\", \"uint32\"],\n [\"gfloat\", \"float32\"],\n [\"float\", \"float32\"],\n [\"gdouble\", \"float64\"],\n [\"double\", \"float64\"],\n [\"long double\", \"float64\"],\n [\"utf8\", \"string\"],\n [\"filename\", \"string\"],\n [\"gchararray\", \"string\"],\n [\"gunichar\", \"unichar\"],\n [\"gpointer\", \"pointer\"],\n [\"gconstpointer\", \"pointer\"],\n] as const);\n\nconst PRIMITIVE_TS_TYPE: Record<PrimitiveCategory, string> = {\n void: \"void\",\n boolean: \"boolean\",\n int8: \"number\",\n uint8: \"number\",\n int16: \"number\",\n uint16: \"number\",\n int32: \"number\",\n uint32: \"number\",\n int64: \"number\",\n uint64: \"number\",\n bigint64: \"bigint\",\n biguint64: \"bigint\",\n gtype: \"bigint\",\n float32: \"number\",\n float64: \"number\",\n string: \"string\",\n unichar: \"string\",\n pointer: \"
|
|
1
|
+
{"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../src/gir/primitives.ts"],"names":[],"mappings":"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","sourcesContent":["/** A fundamental C type GIR can name, collapsed to the marshalling category GTKX treats it as. */\ntype PrimitiveCategory =\n | \"void\" |\n \"boolean\" |\n \"int8\" |\n \"uint8\" |\n \"int16\" |\n \"uint16\" |\n \"int32\" |\n \"uint32\" |\n \"int64\" |\n \"uint64\" |\n \"bigint64\" |\n \"biguint64\" |\n \"gtype\" |\n \"float32\" |\n \"float64\" |\n \"string\" |\n \"unichar\" |\n \"pointer\";\n\nconst PRIMITIVE_SIZE: Record<PrimitiveCategory, number> = {\n void: 0,\n boolean: 4,\n int8: 1,\n uint8: 1,\n int16: 2,\n uint16: 2,\n int32: 4,\n uint32: 4,\n int64: 8,\n uint64: 8,\n bigint64: 8,\n biguint64: 8,\n gtype: 8,\n float32: 4,\n float64: 8,\n string: 8,\n unichar: 4,\n pointer: 8,\n};\n\nconst PRIMITIVE_BY_NAME: Map<string, PrimitiveCategory> = new Map([\n [\"none\", \"void\"],\n [\"void\", \"void\"],\n [\"gboolean\", \"boolean\"],\n [\"gchar\", \"int8\"],\n [\"gint8\", \"int8\"],\n [\"guchar\", \"uint8\"],\n [\"guint8\", \"uint8\"],\n [\"gshort\", \"int16\"],\n [\"gint16\", \"int16\"],\n [\"gushort\", \"uint16\"],\n [\"guint16\", \"uint16\"],\n [\"gint\", \"int32\"],\n [\"gint32\", \"int32\"],\n [\"int\", \"int32\"],\n [\"int8\", \"int8\"],\n [\"uint8\", \"uint8\"],\n [\"int16\", \"int16\"],\n [\"uint16\", \"uint16\"],\n [\"int32\", \"int32\"],\n [\"uint32\", \"uint32\"],\n [\"int64\", \"bigint64\"],\n [\"uint64\", \"biguint64\"],\n [\"guint\", \"uint32\"],\n [\"guint32\", \"uint32\"],\n [\"glong\", \"bigint64\"],\n [\"gint64\", \"bigint64\"],\n [\"long\", \"bigint64\"],\n [\"gssize\", \"int64\"],\n [\"gintptr\", \"int64\"],\n [\"gulong\", \"biguint64\"],\n [\"guint64\", \"biguint64\"],\n [\"gsize\", \"uint64\"],\n [\"guintptr\", \"uint64\"],\n [\"GType\", \"gtype\"],\n [\"time_t\", \"bigint64\"],\n [\"pid_t\", \"int32\"],\n [\"uid_t\", \"uint32\"],\n [\"gid_t\", \"uint32\"],\n [\"gfloat\", \"float32\"],\n [\"float\", \"float32\"],\n [\"gdouble\", \"float64\"],\n [\"double\", \"float64\"],\n [\"long double\", \"float64\"],\n [\"utf8\", \"string\"],\n [\"filename\", \"string\"],\n [\"gchararray\", \"string\"],\n [\"gunichar\", \"unichar\"],\n [\"gpointer\", \"pointer\"],\n [\"gconstpointer\", \"pointer\"],\n] as const);\n\nconst PRIMITIVE_TS_TYPE: Record<PrimitiveCategory, string> = {\n void: \"void\",\n boolean: \"boolean\",\n int8: \"number\",\n uint8: \"number\",\n int16: \"number\",\n uint16: \"number\",\n int32: \"number\",\n uint32: \"number\",\n int64: \"number\",\n uint64: \"number\",\n bigint64: \"bigint\",\n biguint64: \"bigint\",\n gtype: \"bigint\",\n float32: \"number\",\n float64: \"number\",\n string: \"string\",\n unichar: \"string\",\n pointer: \"bigint\",\n};\n\nconst primitiveCategory = (name: string): PrimitiveCategory | undefined => PRIMITIVE_BY_NAME.get(name);\n\nexport { PRIMITIVE_SIZE, PRIMITIVE_TS_TYPE, primitiveCategory, type PrimitiveCategory };\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/khronos/args.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAa,UAAU,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/khronos/args.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAa,UAAU,EAAE,MAAM,WAAW,CAAC;AAe9E,KAAK,KAAK,GAAG;IACT,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,MAAM,GAAG;IACV,KAAK,EAAE,IAAI,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,UAAU,GAAG,KAAK,GAAG,MAAM,CAAC;AAsBjC,QAAA,MAAM,kBAAkB,GAAI,QAAQ,QAAQ,EAAE,OAAO,MAAM,GAAG,SAAS,KAAG,MACQ,CAAC;AAEnF,QAAA,MAAM,gBAAgB,GAAI,MAAM,UAAU,EAAE,OAAO,MAAM,GAAG,SAAS,KAAG,MAqBvE,CAAC;AA+IF,QAAA,MAAM,SAAS,GACV,WAAW,GAAG,CAAC,MAAM,CAAC,MAClB,OAAO,MAAM,KAAG,MAIhB,CAAC;AAEV,QAAA,MAAM,QAAQ,GACV,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,EAClC,WAAW,GAAG,CAAC,MAAM,CAAC,KACvB;IAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAAC,GAAG,EAAE,KAAK,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAsBpD,CAAC;AAwBF,QAAA,MAAM,gBAAgB,GAAI,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,EAAE,WAAW,GAAG,CAAC,MAAM,CAAC,KAAG,KAAK,EAAE,GAAG,SAehG,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,KAAK,EAAE,KAAK,MAAM,EAAE,CAAC"}
|
package/dist/khronos/args.js
CHANGED
|
@@ -2,6 +2,7 @@ import { toCamelIdentifier } from "@gtkx/utils";
|
|
|
2
2
|
import { tArray, tBoolean, tBuffer, tFixedArray, tInlineStruct, tRef, tSizedArray, tString, tUint64, } from "../analysis/descriptor.js";
|
|
3
3
|
import { paramPairAt } from "./param-pair.js";
|
|
4
4
|
const OUT_PLAN_KINDS = new Set(["ref-out", "ref-array-out", "ref-fixed-out", "string-out"]);
|
|
5
|
+
const NUMERIC_LAYOUT = { isBytes: false };
|
|
5
6
|
const scalarAliasOrGroup = (scalar, group) => group !== undefined && scalar.isGroupBearing === true ? group : scalar.tsAlias;
|
|
6
7
|
const returnPlanTsType = (plan, group) => {
|
|
7
8
|
switch (plan.kind) {
|
|
@@ -62,11 +63,12 @@ const buildInArg = (options, name, track) => {
|
|
|
62
63
|
return inArg(name, "string", tString("borrowed"));
|
|
63
64
|
}
|
|
64
65
|
case "string-array-in": {
|
|
65
|
-
return inArg(name, "string[]", tArray(tString("borrowed")));
|
|
66
|
+
return inArg(name, "string[]", tArray(tString("borrowed"), undefined, NUMERIC_LAYOUT));
|
|
66
67
|
}
|
|
67
68
|
case "array-in": {
|
|
68
69
|
track(scalarAliasOrGroup(plan.scalar, param.group));
|
|
69
|
-
|
|
70
|
+
const descriptor = tArray(plan.scalar.descriptor, undefined, NUMERIC_LAYOUT);
|
|
71
|
+
return inArg(name, arrayInTsType(plan.scalar, param.group), descriptor);
|
|
70
72
|
}
|
|
71
73
|
case "buffer": {
|
|
72
74
|
return inArg(name, `ArrayBufferView | ${track("GLintptr")} | null`, tBuffer);
|
|
@@ -75,7 +77,7 @@ const buildInArg = (options, name, track) => {
|
|
|
75
77
|
return inArg(name, track("GLintptr"), tUint64);
|
|
76
78
|
}
|
|
77
79
|
case "byte-offset-array": {
|
|
78
|
-
return inArg(name, `${track("GLintptr")}[]`, tArray(tUint64));
|
|
80
|
+
return inArg(name, `${track("GLintptr")}[]`, tArray(tUint64, undefined, NUMERIC_LAYOUT));
|
|
79
81
|
}
|
|
80
82
|
case "ref-array-out":
|
|
81
83
|
case "ref-fixed-out":
|
|
@@ -101,14 +103,14 @@ const outArgFields = (options) => {
|
|
|
101
103
|
return {
|
|
102
104
|
seed: `const ${cellName} = { value: new Array<number>(${lenIdentifier}).fill(0) };`,
|
|
103
105
|
tsType: `${track(scalarAliasOrGroup(plan.scalar, param.group))}[]`,
|
|
104
|
-
descriptor: tRef(tSizedArray(plan.scalar.descriptor, sizeIndex)),
|
|
106
|
+
descriptor: tRef(tSizedArray(plan.scalar.descriptor, sizeIndex, undefined, NUMERIC_LAYOUT)),
|
|
105
107
|
};
|
|
106
108
|
}
|
|
107
109
|
case "ref-fixed-out": {
|
|
108
110
|
return {
|
|
109
111
|
seed: `const ${cellName} = { value: new Array<number>(${String(plan.length)}).fill(0) };`,
|
|
110
112
|
tsType: `${track(plan.scalar.tsAlias)}[]`,
|
|
111
|
-
descriptor: tRef(tFixedArray(plan.scalar.descriptor, plan.length)),
|
|
113
|
+
descriptor: tRef(tFixedArray(plan.scalar.descriptor, plan.length, undefined, NUMERIC_LAYOUT)),
|
|
112
114
|
};
|
|
113
115
|
}
|
|
114
116
|
case "string-out": {
|
|
@@ -137,7 +139,7 @@ const buildOutArg = (options, track) => {
|
|
|
137
139
|
if (param === undefined) {
|
|
138
140
|
throw new Error(`Parameter index ${String(index)} out of range on ${command.name}`);
|
|
139
141
|
}
|
|
140
|
-
const cellName = `
|
|
142
|
+
const cellName = `__out${String(outIndex)}`;
|
|
141
143
|
const cell = { isOut: true, cellName, paramIndex: index };
|
|
142
144
|
return { ...cell, ...outArgFields({ command, plan, param, cellName, track }) };
|
|
143
145
|
};
|
package/dist/khronos/args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/khronos/args.ts"],"names":[],"mappings":"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","sourcesContent":["import { toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GlCommand, GlParam } from \"./model.js\";\nimport type { CommandPlan, GlScalar, ParamPlan, ReturnPlan } from \"./plan.js\";\nimport {\n tArray,\n tBoolean,\n tBuffer,\n tFixedArray,\n tInlineStruct,\n tRef,\n tSizedArray,\n tString,\n tUint64,\n} from \"../analysis/descriptor.js\";\nimport { paramPairAt } from \"./param-pair.js\";\n\ntype InArg = {\n isOut: false;\n name: string;\n tsType: string;\n descriptor: string;\n};\n\ntype OutArg = {\n isOut: true;\n cellName: string;\n seed: string;\n tsType: string;\n descriptor: string;\n paramIndex: number;\n};\n\ntype PlannedArg = InArg | OutArg;\ntype OutArgCell = Pick<OutArg, \"isOut\" | \"cellName\" | \"paramIndex\">;\ntype OutArgFields = Pick<OutArg, \"seed\" | \"tsType\" | \"descriptor\">;\n\ntype OutArgFieldsOptions = {\n command: GlCommand;\n plan: ParamPlan;\n param: GlParam;\n cellName: string;\n track: (alias: string) => string;\n};\n\ntype BuildArgOptions = {\n command: GlCommand;\n index: number;\n plan: ParamPlan;\n outIndex: number;\n};\n\nconst OUT_PLAN_KINDS: Set<string> = new Set([\"ref-out\", \"ref-array-out\", \"ref-fixed-out\", \"string-out\"]);\n\nconst scalarAliasOrGroup = (scalar: GlScalar, group: string | undefined): string =>\n group !== undefined && scalar.isGroupBearing === true ? group : scalar.tsAlias;\n\nconst returnPlanTsType = (plan: ReturnPlan, group: string | undefined): string => {\n switch (plan.kind) {\n case \"void\": {\n return \"void\";\n }\n case \"scalar\": {\n return scalarAliasOrGroup(plan.scalar, group);\n }\n case \"boolean\": {\n return \"boolean\";\n }\n case \"string\": {\n return \"string\";\n }\n case \"sync\": {\n return \"GLsync\";\n }\n case \"opaque-pointer\": {\n return \"GLpointer\";\n }\n }\n};\n\nconst paramIndexByName = (command: GlCommand, name: string): number => {\n const index = command.params.findIndex((param) => param.name === name);\n\n if (index === -1) {\n throw new Error(`Command ${command.name} has no parameter named ${name}`);\n }\n\n return index;\n};\n\nconst arrayInTsType = (scalar: GlScalar, group: string | undefined): string => {\n const element = scalarAliasOrGroup(scalar, group);\n\n return scalar.viewType === undefined ? `${element}[]` : `${element}[] | ${scalar.viewType}`;\n};\n\nconst inArg = (name: string, tsType: string, descriptor: string): InArg => ({\n isOut: false,\n name,\n tsType,\n descriptor,\n});\n\nconst buildInArg = (options: BuildArgOptions, name: string, track: (alias: string) => string): InArg => {\n const { command, index, plan } = options;\n const param = command.params[index];\n\n if (param === undefined) {\n throw new Error(`Parameter index ${String(index)} out of range on ${command.name}`);\n }\n\n switch (plan.kind) {\n case \"scalar\": {\n return inArg(name, track(scalarAliasOrGroup(plan.scalar, param.group)), plan.scalar.descriptor);\n }\n case \"boolean\": {\n return inArg(name, \"boolean\", tBoolean);\n }\n case \"sync\": {\n return inArg(name, track(\"GLsync\"), tInlineStruct());\n }\n case \"string-in\": {\n return inArg(name, \"string\", tString(\"borrowed\"));\n }\n case \"string-array-in\": {\n return inArg(name, \"string[]\", tArray(tString(\"borrowed\")));\n }\n case \"array-in\": {\n track(scalarAliasOrGroup(plan.scalar, param.group));\n\n return inArg(name, arrayInTsType(plan.scalar, param.group), tArray(plan.scalar.descriptor));\n }\n case \"buffer\": {\n return inArg(name, `ArrayBufferView | ${track(\"GLintptr\")} | null`, tBuffer);\n }\n case \"byte-offset\": {\n return inArg(name, track(\"GLintptr\"), tUint64);\n }\n case \"byte-offset-array\": {\n return inArg(name, `${track(\"GLintptr\")}[]`, tArray(tUint64));\n }\n case \"ref-array-out\":\n case \"ref-fixed-out\":\n case \"ref-out\":\n case \"string-out\": {\n throw new Error(`Plan kind ${plan.kind} is not an input parameter`);\n }\n }\n};\n\nconst outArgFields = (options: OutArgFieldsOptions): OutArgFields => {\n const { command, plan, param, cellName, track } = options;\n\n switch (plan.kind) {\n case \"ref-out\": {\n return {\n seed: `const ${cellName} = { value: 0 };`,\n tsType: track(scalarAliasOrGroup(plan.scalar, param.group)),\n descriptor: tRef(plan.scalar.descriptor),\n };\n }\n case \"ref-array-out\": {\n const sizeIndex = paramIndexByName(command, plan.lenParamName);\n const lenIdentifier = toCamelIdentifier(plan.lenParamName);\n\n return {\n seed: `const ${cellName} = { value: new Array<number>(${lenIdentifier}).fill(0) };`,\n tsType: `${track(scalarAliasOrGroup(plan.scalar, param.group))}[]`,\n descriptor: tRef(tSizedArray(plan.scalar.descriptor, sizeIndex)),\n };\n }\n case \"ref-fixed-out\": {\n return {\n seed: `const ${cellName} = { value: new Array<number>(${String(plan.length)}).fill(0) };`,\n tsType: `${track(plan.scalar.tsAlias)}[]`,\n descriptor: tRef(tFixedArray(plan.scalar.descriptor, plan.length)),\n };\n }\n case \"string-out\": {\n return {\n seed: `const ${cellName} = { value: \"\" };`,\n tsType: \"string\",\n descriptor: tRef(tString(\"borrowed\", toCamelIdentifier(plan.lenParamName))),\n };\n }\n case \"array-in\":\n case \"boolean\":\n case \"buffer\":\n case \"byte-offset\":\n case \"byte-offset-array\":\n case \"scalar\":\n case \"string-array-in\":\n case \"string-in\":\n case \"sync\": {\n throw new Error(`Plan kind ${plan.kind} is not an output parameter`);\n }\n }\n};\n\nconst buildOutArg = (options: BuildArgOptions, track: (alias: string) => string): OutArg => {\n const { command, index, plan, outIndex } = options;\n const param = command.params[index];\n\n if (param === undefined) {\n throw new Error(`Parameter index ${String(index)} out of range on ${command.name}`);\n }\n\n const cellName = `out${String(outIndex)}`;\n const cell: OutArgCell = { isOut: true, cellName, paramIndex: index };\n\n return { ...cell, ...outArgFields({ command, plan, param, cellName, track }) };\n};\n\nconst isOutPlan = (plan: ParamPlan): boolean => OUT_PLAN_KINDS.has(plan.kind);\nconst isInArg = (arg: PlannedArg): arg is InArg => !arg.isOut;\nconst isOutArg = (arg: PlannedArg): arg is OutArg => arg.isOut;\n\nconst buildArg = (options: BuildArgOptions, name: string, track: (alias: string) => string): PlannedArg =>\n isOutPlan(options.plan) ? buildOutArg(options, track) : buildInArg(options, name, track);\n\nconst trackInto =\n (usedTypes: Set<string>) =>\n (alias: string): string => {\n usedTypes.add(alias);\n\n return alias;\n };\n\nconst planArgs = (\n plan: CommandPlan & { isOk: true },\n usedTypes: Set<string>,\n): { args: PlannedArg[]; ins: InArg[]; outs: OutArg[] } => {\n const track = trackInto(usedTypes);\n const args: PlannedArg[] = [];\n\n for (const [index, paramPlan] of plan.params.entries()) {\n const param = plan.command.params[index];\n\n if (param === undefined) {\n throw new Error(`Parameter index ${String(index)} out of range on ${plan.command.name}`);\n }\n\n const options: BuildArgOptions = {\n command: plan.command,\n index,\n plan: paramPlan,\n outIndex: args.filter(isOutArg).length,\n };\n\n args.push(buildArg(options, toCamelIdentifier(param.name), track));\n }\n\n return { args, ins: args.filter(isInArg), outs: args.filter(isOutArg) };\n};\n\nconst scalarPrefixArg = (\n plan: CommandPlan & { isOk: true },\n index: number,\n track: (alias: string) => string,\n): InArg | undefined => {\n const { paramPlan, param } = paramPairAt(plan, index);\n\n if (param === undefined) {\n return undefined;\n }\n\n if (paramPlan?.kind !== \"scalar\") {\n return undefined;\n }\n\n return buildInArg(\n { command: plan.command, index, plan: paramPlan, outIndex: 0 },\n toCamelIdentifier(param.name),\n track,\n );\n};\n\nconst scalarPrefixArgs = (plan: CommandPlan & { isOk: true }, usedTypes: Set<string>): InArg[] | undefined => {\n const track = trackInto(usedTypes);\n const prefix: InArg[] = [];\n\n for (let index = 0; index < plan.params.length - 2; index++) {\n const arg = scalarPrefixArg(plan, index, track);\n\n if (arg === undefined) {\n return undefined;\n }\n\n prefix.push(arg);\n }\n\n return prefix;\n};\n\nexport { returnPlanTsType, scalarAliasOrGroup, trackInto, planArgs, scalarPrefixArgs, type InArg, type OutArg };\n"]}
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/khronos/args.ts"],"names":[],"mappings":"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","sourcesContent":["import { toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GlCommand, GlParam } from \"./model.js\";\nimport type { CommandPlan, GlScalar, ParamPlan, ReturnPlan } from \"./plan.js\";\nimport {\n type ArrayLayout,\n tArray,\n tBoolean,\n tBuffer,\n tFixedArray,\n tInlineStruct,\n tRef,\n tSizedArray,\n tString,\n tUint64,\n} from \"../analysis/descriptor.js\";\nimport { paramPairAt } from \"./param-pair.js\";\n\ntype InArg = {\n isOut: false;\n name: string;\n tsType: string;\n descriptor: string;\n};\n\ntype OutArg = {\n isOut: true;\n cellName: string;\n seed: string;\n tsType: string;\n descriptor: string;\n paramIndex: number;\n};\n\ntype PlannedArg = InArg | OutArg;\ntype OutArgCell = Pick<OutArg, \"isOut\" | \"cellName\" | \"paramIndex\">;\ntype OutArgFields = Pick<OutArg, \"seed\" | \"tsType\" | \"descriptor\">;\n\ntype OutArgFieldsOptions = {\n command: GlCommand;\n plan: ParamPlan;\n param: GlParam;\n cellName: string;\n track: (alias: string) => string;\n};\n\ntype BuildArgOptions = {\n command: GlCommand;\n index: number;\n plan: ParamPlan;\n outIndex: number;\n};\n\nconst OUT_PLAN_KINDS: Set<string> = new Set([\"ref-out\", \"ref-array-out\", \"ref-fixed-out\", \"string-out\"]);\nconst NUMERIC_LAYOUT: ArrayLayout = { isBytes: false };\n\nconst scalarAliasOrGroup = (scalar: GlScalar, group: string | undefined): string =>\n group !== undefined && scalar.isGroupBearing === true ? group : scalar.tsAlias;\n\nconst returnPlanTsType = (plan: ReturnPlan, group: string | undefined): string => {\n switch (plan.kind) {\n case \"void\": {\n return \"void\";\n }\n case \"scalar\": {\n return scalarAliasOrGroup(plan.scalar, group);\n }\n case \"boolean\": {\n return \"boolean\";\n }\n case \"string\": {\n return \"string\";\n }\n case \"sync\": {\n return \"GLsync\";\n }\n case \"opaque-pointer\": {\n return \"GLpointer\";\n }\n }\n};\n\nconst paramIndexByName = (command: GlCommand, name: string): number => {\n const index = command.params.findIndex((param) => param.name === name);\n\n if (index === -1) {\n throw new Error(`Command ${command.name} has no parameter named ${name}`);\n }\n\n return index;\n};\n\nconst arrayInTsType = (scalar: GlScalar, group: string | undefined): string => {\n const element = scalarAliasOrGroup(scalar, group);\n\n return scalar.viewType === undefined ? `${element}[]` : `${element}[] | ${scalar.viewType}`;\n};\n\nconst inArg = (name: string, tsType: string, descriptor: string): InArg => ({\n isOut: false,\n name,\n tsType,\n descriptor,\n});\n\nconst buildInArg = (options: BuildArgOptions, name: string, track: (alias: string) => string): InArg => {\n const { command, index, plan } = options;\n const param = command.params[index];\n\n if (param === undefined) {\n throw new Error(`Parameter index ${String(index)} out of range on ${command.name}`);\n }\n\n switch (plan.kind) {\n case \"scalar\": {\n return inArg(name, track(scalarAliasOrGroup(plan.scalar, param.group)), plan.scalar.descriptor);\n }\n case \"boolean\": {\n return inArg(name, \"boolean\", tBoolean);\n }\n case \"sync\": {\n return inArg(name, track(\"GLsync\"), tInlineStruct());\n }\n case \"string-in\": {\n return inArg(name, \"string\", tString(\"borrowed\"));\n }\n case \"string-array-in\": {\n return inArg(name, \"string[]\", tArray(tString(\"borrowed\"), undefined, NUMERIC_LAYOUT));\n }\n case \"array-in\": {\n track(scalarAliasOrGroup(plan.scalar, param.group));\n const descriptor = tArray(plan.scalar.descriptor, undefined, NUMERIC_LAYOUT);\n\n return inArg(name, arrayInTsType(plan.scalar, param.group), descriptor);\n }\n case \"buffer\": {\n return inArg(name, `ArrayBufferView | ${track(\"GLintptr\")} | null`, tBuffer);\n }\n case \"byte-offset\": {\n return inArg(name, track(\"GLintptr\"), tUint64);\n }\n case \"byte-offset-array\": {\n return inArg(name, `${track(\"GLintptr\")}[]`, tArray(tUint64, undefined, NUMERIC_LAYOUT));\n }\n case \"ref-array-out\":\n case \"ref-fixed-out\":\n case \"ref-out\":\n case \"string-out\": {\n throw new Error(`Plan kind ${plan.kind} is not an input parameter`);\n }\n }\n};\n\nconst outArgFields = (options: OutArgFieldsOptions): OutArgFields => {\n const { command, plan, param, cellName, track } = options;\n\n switch (plan.kind) {\n case \"ref-out\": {\n return {\n seed: `const ${cellName} = { value: 0 };`,\n tsType: track(scalarAliasOrGroup(plan.scalar, param.group)),\n descriptor: tRef(plan.scalar.descriptor),\n };\n }\n case \"ref-array-out\": {\n const sizeIndex = paramIndexByName(command, plan.lenParamName);\n const lenIdentifier = toCamelIdentifier(plan.lenParamName);\n\n return {\n seed: `const ${cellName} = { value: new Array<number>(${lenIdentifier}).fill(0) };`,\n tsType: `${track(scalarAliasOrGroup(plan.scalar, param.group))}[]`,\n descriptor: tRef(tSizedArray(plan.scalar.descriptor, sizeIndex, undefined, NUMERIC_LAYOUT)),\n };\n }\n case \"ref-fixed-out\": {\n return {\n seed: `const ${cellName} = { value: new Array<number>(${String(plan.length)}).fill(0) };`,\n tsType: `${track(plan.scalar.tsAlias)}[]`,\n descriptor: tRef(tFixedArray(plan.scalar.descriptor, plan.length, undefined, NUMERIC_LAYOUT)),\n };\n }\n case \"string-out\": {\n return {\n seed: `const ${cellName} = { value: \"\" };`,\n tsType: \"string\",\n descriptor: tRef(tString(\"borrowed\", toCamelIdentifier(plan.lenParamName))),\n };\n }\n case \"array-in\":\n case \"boolean\":\n case \"buffer\":\n case \"byte-offset\":\n case \"byte-offset-array\":\n case \"scalar\":\n case \"string-array-in\":\n case \"string-in\":\n case \"sync\": {\n throw new Error(`Plan kind ${plan.kind} is not an output parameter`);\n }\n }\n};\n\nconst buildOutArg = (options: BuildArgOptions, track: (alias: string) => string): OutArg => {\n const { command, index, plan, outIndex } = options;\n const param = command.params[index];\n\n if (param === undefined) {\n throw new Error(`Parameter index ${String(index)} out of range on ${command.name}`);\n }\n\n const cellName = `__out${String(outIndex)}`;\n const cell: OutArgCell = { isOut: true, cellName, paramIndex: index };\n\n return { ...cell, ...outArgFields({ command, plan, param, cellName, track }) };\n};\n\nconst isOutPlan = (plan: ParamPlan): boolean => OUT_PLAN_KINDS.has(plan.kind);\nconst isInArg = (arg: PlannedArg): arg is InArg => !arg.isOut;\nconst isOutArg = (arg: PlannedArg): arg is OutArg => arg.isOut;\n\nconst buildArg = (options: BuildArgOptions, name: string, track: (alias: string) => string): PlannedArg =>\n isOutPlan(options.plan) ? buildOutArg(options, track) : buildInArg(options, name, track);\n\nconst trackInto =\n (usedTypes: Set<string>) =>\n (alias: string): string => {\n usedTypes.add(alias);\n\n return alias;\n };\n\nconst planArgs = (\n plan: CommandPlan & { isOk: true },\n usedTypes: Set<string>,\n): { args: PlannedArg[]; ins: InArg[]; outs: OutArg[] } => {\n const track = trackInto(usedTypes);\n const args: PlannedArg[] = [];\n\n for (const [index, paramPlan] of plan.params.entries()) {\n const param = plan.command.params[index];\n\n if (param === undefined) {\n throw new Error(`Parameter index ${String(index)} out of range on ${plan.command.name}`);\n }\n\n const options: BuildArgOptions = {\n command: plan.command,\n index,\n plan: paramPlan,\n outIndex: args.filter(isOutArg).length,\n };\n\n args.push(buildArg(options, toCamelIdentifier(param.name), track));\n }\n\n return { args, ins: args.filter(isInArg), outs: args.filter(isOutArg) };\n};\n\nconst scalarPrefixArg = (\n plan: CommandPlan & { isOk: true },\n index: number,\n track: (alias: string) => string,\n): InArg | undefined => {\n const { paramPlan, param } = paramPairAt(plan, index);\n\n if (param === undefined) {\n return undefined;\n }\n\n if (paramPlan?.kind !== \"scalar\") {\n return undefined;\n }\n\n return buildInArg(\n { command: plan.command, index, plan: paramPlan, outIndex: 0 },\n toCamelIdentifier(param.name),\n track,\n );\n};\n\nconst scalarPrefixArgs = (plan: CommandPlan & { isOk: true }, usedTypes: Set<string>): InArg[] | undefined => {\n const track = trackInto(usedTypes);\n const prefix: InArg[] = [];\n\n for (let index = 0; index < plan.params.length - 2; index++) {\n const arg = scalarPrefixArg(plan, index, track);\n\n if (arg === undefined) {\n return undefined;\n }\n\n prefix.push(arg);\n }\n\n return prefix;\n};\n\nexport { returnPlanTsType, scalarAliasOrGroup, trackInto, planArgs, scalarPrefixArgs, type InArg, type OutArg };\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/khronos/render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAwB,MAAM,WAAW,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAMtD,KAAK,eAAe,GAAG;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC;AA0GF,QAAA,MAAM,aAAa,GACf,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,EAClC,YAAY,kBAAkB,EAC9B,WAAW,GAAG,CAAC,MAAM,CAAC,EACtB,MAAM,YAAY,KACnB,eA4BF,CAAC;AA0EF,QAAA,MAAM,iBAAiB,GACnB,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,EAClC,YAAY,kBAAkB,EAC9B,WAAW,GAAG,CAAC,MAAM,CAAC,EACtB,MAAM,YAAY,KACnB,eAAe,GAAG,
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/khronos/render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAwB,MAAM,WAAW,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAMtD,KAAK,eAAe,GAAG;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC;AA0GF,QAAA,MAAM,aAAa,GACf,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,EAClC,YAAY,kBAAkB,EAC9B,WAAW,GAAG,CAAC,MAAM,CAAC,EACtB,MAAM,YAAY,KACnB,eA4BF,CAAC;AA0EF,QAAA,MAAM,iBAAiB,GACnB,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,EAClC,YAAY,kBAAkB,EAC9B,WAAW,GAAG,CAAC,MAAM,CAAC,EACtB,MAAM,YAAY,KACnB,eAAe,GAAG,SAuCpB,CAAC;AAkCF,QAAA,MAAM,oBAAoB,GACtB,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,EAClC,YAAY,kBAAkB,EAC9B,WAAW,GAAG,CAAC,MAAM,CAAC,EACtB,MAAM,YAAY,KACnB,eAAe,GAAG,SAgCpB,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,KAAK,eAAe,EAAE,CAAC"}
|
package/dist/khronos/render.js
CHANGED
|
@@ -61,7 +61,7 @@ const returnStatements = (call, returned, outs) => {
|
|
|
61
61
|
: `return [${outValues.join(", ")}];`;
|
|
62
62
|
return [`${call};`, tail];
|
|
63
63
|
}
|
|
64
|
-
return [`const
|
|
64
|
+
return [`const __result = ${call};`, `return [${returned.expr("__result")}, ${outValues.join(", ")}];`];
|
|
65
65
|
};
|
|
66
66
|
const renderCommand = (plan, provenance, usedTypes, docs) => {
|
|
67
67
|
const { command } = plan;
|
|
@@ -76,7 +76,7 @@ const renderCommand = (plan, provenance, usedTypes, docs) => {
|
|
|
76
76
|
const seeds = outs.map((out) => out.seed);
|
|
77
77
|
const bindExpression = glBind(command.name, descriptors, returned.descriptor);
|
|
78
78
|
const isInline = plan.params.some((paramPlan) => paramPlan.kind === "string-out");
|
|
79
|
-
const bindingName = isInline ? "
|
|
79
|
+
const bindingName = isInline ? "__binding" : toCamelIdentifier(command.name);
|
|
80
80
|
const body = [
|
|
81
81
|
...seeds,
|
|
82
82
|
...(isInline ? [`const ${bindingName} = ${bindExpression};`] : []),
|
|
@@ -156,9 +156,13 @@ const deriveGenSingular = (plan, provenance, usedTypes, docs) => {
|
|
|
156
156
|
const descriptors = [...prefix.map((arg) => arg.descriptor), countScalar.descriptor, tRef(outScalar.descriptor)];
|
|
157
157
|
usedTypes.add(outScalar.tsAlias);
|
|
158
158
|
const signature = prefix.map((arg) => `${arg.name}: ${arg.tsType}`).join(", ");
|
|
159
|
-
const callArgs = [...prefix.map((arg) => arg.name), "1", "
|
|
159
|
+
const callArgs = [...prefix.map((arg) => arg.name), "1", "__out"].join(", ");
|
|
160
160
|
const jsDoc = genSingularJsDoc({ plan, provenance, docs }, prefix, shape);
|
|
161
|
-
const body = [
|
|
161
|
+
const body = [
|
|
162
|
+
" const __out = { value: 0 };",
|
|
163
|
+
` ${bindingName}(${callArgs});`,
|
|
164
|
+
" return __out.value;",
|
|
165
|
+
].join("\n");
|
|
162
166
|
const binding = glBind(plan.command.name, renderDescriptorList(descriptors), tVoid);
|
|
163
167
|
return {
|
|
164
168
|
exportName,
|