@gtkx/runtime 1.3.0 → 1.5.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.
- package/README.md +5 -4
- package/dist/field.d.ts +42 -0
- package/dist/field.d.ts.map +1 -0
- package/dist/field.js +41 -0
- package/dist/field.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/param-spec.d.ts +2 -1
- package/dist/param-spec.d.ts.map +1 -1
- package/dist/param-spec.js +2 -1
- package/dist/param-spec.js.map +1 -1
- package/dist/properties.d.ts +21 -5
- package/dist/properties.d.ts.map +1 -1
- package/dist/properties.js +55 -15
- package/dist/properties.js.map +1 -1
- package/dist/register-class.d.ts +17 -10
- package/dist/register-class.d.ts.map +1 -1
- package/dist/register-class.js +21 -3
- package/dist/register-class.js.map +1 -1
- package/dist/signal.d.ts +5 -2
- package/dist/signal.d.ts.map +1 -1
- package/dist/signal.js +32 -10
- package/dist/signal.js.map +1 -1
- package/dist/t.d.ts +11 -0
- package/dist/t.d.ts.map +1 -1
- package/dist/t.js +3 -0
- package/dist/t.js.map +1 -1
- package/package.json +5 -5
- package/src/field.ts +76 -0
- package/src/index.ts +16 -2
- package/src/param-spec.ts +2 -0
- package/src/properties.ts +97 -28
- package/src/register-class.ts +47 -12
- package/src/signal.ts +47 -11
- package/src/t.ts +13 -0
package/README.md
CHANGED
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
<h1 align="center">GTKX</h1>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
|
-
The React framework for Linux.<br />
|
|
9
|
-
Write native
|
|
10
|
-
|
|
8
|
+
The React framework for Linux, built on GTK.<br />
|
|
9
|
+
Write native GTK4 desktop applications with React and TypeScript.
|
|
10
|
+
Real GTK widgets, the GNOME stack, and standard web tooling.
|
|
11
11
|
</p>
|
|
12
12
|
|
|
13
13
|
<p align="center">
|
|
@@ -98,7 +98,7 @@ GTK4 is mature, and GtkBuilder XML can lay out a static interface, but nothing r
|
|
|
98
98
|
- a React reconciler that exposes every GObject as a JSX element,
|
|
99
99
|
- a CLI for scaffolding, development, and production builds,
|
|
100
100
|
- a dev server with Fast Refresh that patches your running UI in place,
|
|
101
|
-
- CSS-in-JS styling, React Spring animations, and high-level list, grid, and dialog components,
|
|
101
|
+
- CSS-in-JS styling, React Hook Form-powered Adwaita controls, gettext-backed react-i18next localization, React Spring animations, React Navigation stack, tab, drawer, and split view navigators, and high-level list, grid, and dialog components,
|
|
102
102
|
- a Testing Library-style API for querying and driving your widgets in tests,
|
|
103
103
|
- and a Model Context Protocol (MCP) server that exposes your live app to AI agents.
|
|
104
104
|
|
|
@@ -158,6 +158,7 @@ Explore the [example apps](https://github.com/gtkx-org/gtkx/tree/main/examples):
|
|
|
158
158
|
- [`gtk-demo`](https://github.com/gtkx-org/gtkx/tree/main/examples/gtk-demo): a React port of the official GTK4 widget showcase, covering lists, dialogs, gestures, CSS, and OpenGL.
|
|
159
159
|
- [`browser`](https://github.com/gtkx-org/gtkx/tree/main/examples/browser): a WebKitWebView-based web browser.
|
|
160
160
|
- [`animations`](https://github.com/gtkx-org/gtkx/tree/main/examples/animations): a tour of `@gtkx/animated`, React Spring animations driven by the GTK frame clock.
|
|
161
|
+
- [`navigation`](https://github.com/gtkx-org/gtkx/tree/main/examples/navigation): a tour of `@gtkx/navigation`, React Navigation's stack, tab, and drawer navigators rendered with libadwaita.
|
|
161
162
|
- [`tutorial`](https://github.com/gtkx-org/gtkx/tree/main/examples/tutorial): the Tasks app the documentation builds.
|
|
162
163
|
|
|
163
164
|
## Status
|
package/dist/field.d.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type Descriptor, type ExternalObject, type Handle } from "@gtkx/native";
|
|
2
|
+
/**
|
|
3
|
+
* A field of a native struct at a fixed offset, bound once against the descriptor its bytes are
|
|
4
|
+
* marshalled through, so the descriptor is not parsed again on access.
|
|
5
|
+
*/
|
|
6
|
+
type Field = {
|
|
7
|
+
/** Reads and decodes the field out of `handle`'s memory. */
|
|
8
|
+
read: (handle: ExternalObject<Handle>) => unknown;
|
|
9
|
+
/** Encodes `value` and writes it into the field of `handle`'s memory. */
|
|
10
|
+
write: (handle: ExternalObject<Handle>, value: unknown) => void;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* A field of a native struct whose offset is supplied per access, bound once against the
|
|
14
|
+
* descriptor its bytes are marshalled through, for walking records stored at a stride.
|
|
15
|
+
*/
|
|
16
|
+
type StridedField = {
|
|
17
|
+
/** Reads and decodes the field `offset` bytes into `handle`'s memory. */
|
|
18
|
+
read: (handle: ExternalObject<Handle>, offset: number) => unknown;
|
|
19
|
+
/** Encodes `value` and writes it `offset` bytes into `handle`'s memory. */
|
|
20
|
+
write: (handle: ExternalObject<Handle>, offset: number, value: unknown) => void;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Binds a struct field whose offset is only known per access, compiling `descriptor` once into an
|
|
24
|
+
* accessor that reads and writes it wherever it is pointed. Use it to walk records stored one
|
|
25
|
+
* after another in a buffer; {@link field} is the one to reach for when the offset is fixed.
|
|
26
|
+
*
|
|
27
|
+
* @param descriptor Describes how the field's bytes are marshalled.
|
|
28
|
+
* @returns An accessor reading and writing that field at any offset of any handle it is given.
|
|
29
|
+
*/
|
|
30
|
+
declare const fieldAt: (descriptor: Descriptor) => StridedField;
|
|
31
|
+
/**
|
|
32
|
+
* Binds a struct field at a fixed offset, compiling `descriptor` once into an accessor that reads
|
|
33
|
+
* and writes it. The `read` and `write` functions compile the descriptor on every call instead, so
|
|
34
|
+
* they remain the ones to reach for when a descriptor is only known per access.
|
|
35
|
+
*
|
|
36
|
+
* @param descriptor Describes how the field's bytes are marshalled.
|
|
37
|
+
* @param offset Byte offset of the field within its owner's memory.
|
|
38
|
+
* @returns An accessor reading and writing that field of any handle it is given.
|
|
39
|
+
*/
|
|
40
|
+
declare const field: (descriptor: Descriptor, offset: number) => Field;
|
|
41
|
+
export { field, type Field, fieldAt, type StridedField };
|
|
42
|
+
//# sourceMappingURL=field.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../src/field.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,KAAK,UAAU,EACf,KAAK,cAAc,EAEnB,KAAK,MAAM,EAGd,MAAM,cAAc,CAAC;AAEtB;;;GAGG;AACH,KAAK,KAAK,GAAG;IACT,4DAA4D;IAC5D,IAAI,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC;IAClD,yEAAyE;IACzE,KAAK,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACnE,CAAC;AAEF;;;GAGG;AACH,KAAK,YAAY,GAAG;IAChB,yEAAyE;IACzE,IAAI,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IAClE,2EAA2E;IAC3E,KAAK,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACnF,CAAC;AAEF;;;;;;;GAOG;AACH,QAAA,MAAM,OAAO,GAAI,YAAY,UAAU,KAAG,YASzC,CAAC;AAEF;;;;;;;;GAQG;AACH,QAAA,MAAM,KAAK,GAAI,YAAY,UAAU,EAAE,QAAQ,MAAM,KAAG,KAavD,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,KAAK,KAAK,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,CAAC"}
|
package/dist/field.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { bindField, readField, writeField, } from "@gtkx/native";
|
|
2
|
+
/**
|
|
3
|
+
* Binds a struct field whose offset is only known per access, compiling `descriptor` once into an
|
|
4
|
+
* accessor that reads and writes it wherever it is pointed. Use it to walk records stored one
|
|
5
|
+
* after another in a buffer; {@link field} is the one to reach for when the offset is fixed.
|
|
6
|
+
*
|
|
7
|
+
* @param descriptor Describes how the field's bytes are marshalled.
|
|
8
|
+
* @returns An accessor reading and writing that field at any offset of any handle it is given.
|
|
9
|
+
*/
|
|
10
|
+
const fieldAt = (descriptor) => {
|
|
11
|
+
const bound = bindField(descriptor);
|
|
12
|
+
return {
|
|
13
|
+
read: (handle, offset) => readField(bound, handle, offset),
|
|
14
|
+
write: (handle, offset, value) => {
|
|
15
|
+
writeField(bound, handle, offset, value);
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Binds a struct field at a fixed offset, compiling `descriptor` once into an accessor that reads
|
|
21
|
+
* and writes it. The `read` and `write` functions compile the descriptor on every call instead, so
|
|
22
|
+
* they remain the ones to reach for when a descriptor is only known per access.
|
|
23
|
+
*
|
|
24
|
+
* @param descriptor Describes how the field's bytes are marshalled.
|
|
25
|
+
* @param offset Byte offset of the field within its owner's memory.
|
|
26
|
+
* @returns An accessor reading and writing that field of any handle it is given.
|
|
27
|
+
*/
|
|
28
|
+
const field = (descriptor, offset) => {
|
|
29
|
+
if (!Number.isSafeInteger(offset) || offset < 0) {
|
|
30
|
+
throw new RangeError(`A field offset must be a safe whole byte count, got ${String(offset)}`);
|
|
31
|
+
}
|
|
32
|
+
const bound = fieldAt(descriptor);
|
|
33
|
+
return {
|
|
34
|
+
read: (handle) => bound.read(handle, offset),
|
|
35
|
+
write: (handle, value) => {
|
|
36
|
+
bound.write(handle, offset, value);
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
export { field, fieldAt };
|
|
41
|
+
//# sourceMappingURL=field.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field.js","sourceRoot":"","sources":["../src/field.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,SAAS,EAKT,SAAS,EACT,UAAU,GACb,MAAM,cAAc,CAAC;AAwBtB;;;;;;;GAOG;AACH,MAAM,OAAO,GAAG,CAAC,UAAsB,EAAgB,EAAE;IACrD,MAAM,KAAK,GAAoC,SAAS,CAAC,UAAU,CAAC,CAAC;IAErE,OAAO;QACH,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC;QAC1D,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;YAC7B,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;KACJ,CAAC;AACN,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,KAAK,GAAG,CAAC,UAAsB,EAAE,MAAc,EAAS,EAAE;IAC5D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,UAAU,CAAC,uDAAuD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClG,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAElC,OAAO;QACH,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;QAC5C,KAAK,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACrB,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;KACJ,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,KAAK,EAAc,OAAO,EAAqB,CAAC","sourcesContent":["import {\n bindField,\n type Descriptor,\n type ExternalObject,\n type FieldDescriptor,\n type Handle,\n readField,\n writeField,\n} from \"@gtkx/native\";\n\n/**\n * A field of a native struct at a fixed offset, bound once against the descriptor its bytes are\n * marshalled through, so the descriptor is not parsed again on access.\n */\ntype Field = {\n /** Reads and decodes the field out of `handle`'s memory. */\n read: (handle: ExternalObject<Handle>) => unknown;\n /** Encodes `value` and writes it into the field of `handle`'s memory. */\n write: (handle: ExternalObject<Handle>, value: unknown) => void;\n};\n\n/**\n * A field of a native struct whose offset is supplied per access, bound once against the\n * descriptor its bytes are marshalled through, for walking records stored at a stride.\n */\ntype StridedField = {\n /** Reads and decodes the field `offset` bytes into `handle`'s memory. */\n read: (handle: ExternalObject<Handle>, offset: number) => unknown;\n /** Encodes `value` and writes it `offset` bytes into `handle`'s memory. */\n write: (handle: ExternalObject<Handle>, offset: number, value: unknown) => void;\n};\n\n/**\n * Binds a struct field whose offset is only known per access, compiling `descriptor` once into an\n * accessor that reads and writes it wherever it is pointed. Use it to walk records stored one\n * after another in a buffer; {@link field} is the one to reach for when the offset is fixed.\n *\n * @param descriptor Describes how the field's bytes are marshalled.\n * @returns An accessor reading and writing that field at any offset of any handle it is given.\n */\nconst fieldAt = (descriptor: Descriptor): StridedField => {\n const bound: ExternalObject<FieldDescriptor> = bindField(descriptor);\n\n return {\n read: (handle, offset) => readField(bound, handle, offset),\n write: (handle, offset, value) => {\n writeField(bound, handle, offset, value);\n },\n };\n};\n\n/**\n * Binds a struct field at a fixed offset, compiling `descriptor` once into an accessor that reads\n * and writes it. The `read` and `write` functions compile the descriptor on every call instead, so\n * they remain the ones to reach for when a descriptor is only known per access.\n *\n * @param descriptor Describes how the field's bytes are marshalled.\n * @param offset Byte offset of the field within its owner's memory.\n * @returns An accessor reading and writing that field of any handle it is given.\n */\nconst field = (descriptor: Descriptor, offset: number): Field => {\n if (!Number.isSafeInteger(offset) || offset < 0) {\n throw new RangeError(`A field offset must be a safe whole byte count, got ${String(offset)}`);\n }\n\n const bound = fieldAt(descriptor);\n\n return {\n read: (handle) => bound.read(handle, offset),\n write: (handle, value) => {\n bound.write(handle, offset, value);\n },\n };\n};\n\nexport { field, type Field, fieldAt, type StridedField };\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export { type ClosureCallback, ClosureMarshalError, toClosure, tryToClosure } fr
|
|
|
6
6
|
/** @public */
|
|
7
7
|
export { createErrorDomain, type ErrorDomain } from "./error.js";
|
|
8
8
|
/** @public */
|
|
9
|
+
export { type Field, type StridedField } from "./field.js";
|
|
10
|
+
/** @public */
|
|
9
11
|
export { onExit, quit, quitApplication, runApplication, type RunApplicationResult } from "./lifecycle.js";
|
|
10
12
|
/** @public */
|
|
11
13
|
export { offSignal, onceSignal, onSignal } from "./listeners.js";
|
|
@@ -20,7 +22,7 @@ export { getParamSpecFlags, getParamSpecOwnerType, getParamSpecValueType } from
|
|
|
20
22
|
/** @public */
|
|
21
23
|
export { promisify, trimFinish } from "./promisify.js";
|
|
22
24
|
/** @public */
|
|
23
|
-
export { coerceObjectProperty, newParamSpecOverride } from "./properties.js";
|
|
25
|
+
export { coerceObjectProperty, getDeclaredPropertyName, isReadableProperty, newParamSpecOverride, } from "./properties.js";
|
|
24
26
|
/** @public */
|
|
25
27
|
export { matchAllRegex, matchRegex } from "./regex.js";
|
|
26
28
|
/** @public */
|
|
@@ -28,7 +30,7 @@ export { type Interface, registerClass, type SignalGType, type SignalSpec } from
|
|
|
28
30
|
/** @public */
|
|
29
31
|
export { getClassType, getHandle, getInstanceType, getWrapperClass, peekTypeClass, registerClassStruct, registerInterface, registerWrapperClass, registerWrapperClassResolver, type StaticBase, setHandle, wrapHandle, type WrapperClassResolver, } from "./registry.js";
|
|
30
32
|
/** @public */
|
|
31
|
-
export { connectSignal, disconnectSignal, emitSignal, getSignalBaseName, type SignalHandler } from "./signal.js";
|
|
33
|
+
export { connectSignal, disconnectSignal, emitSignal, getSignalBaseName, type SignalHandler, signalForHandlerName, } from "./signal.js";
|
|
32
34
|
/** @public */
|
|
33
35
|
export { t } from "./t.js";
|
|
34
36
|
/** @public */
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,CAAC;AAExB,cAAc;AACd,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC/G,cAAc;AACd,OAAO,EAAE,KAAK,eAAe,EAAE,mBAAmB,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAClG,cAAc;AACd,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AACjE,cAAc;AACd,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC1G,cAAc;AACd,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACjE,cAAc;AACd,OAAO,EAAE,aAAa,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AACvD,cAAc;AACd,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACzD,cAAc;AACd,OAAO,EACH,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,iBAAiB,EACjB,uBAAuB,EACvB,2BAA2B,EAC3B,iBAAiB,GACpB,MAAM,aAAa,CAAC;AACrB,cAAc;AACd,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAClG,cAAc;AACd,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACvD,cAAc;AACd,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -6,6 +6,8 @@ export { ClosureMarshalError, toClosure, tryToClosure } from "./closure.js";
|
|
|
6
6
|
/** @public */
|
|
7
7
|
export { createErrorDomain } from "./error.js";
|
|
8
8
|
/** @public */
|
|
9
|
+
export {} from "./field.js";
|
|
10
|
+
/** @public */
|
|
9
11
|
export { onExit, quit, quitApplication, runApplication } from "./lifecycle.js";
|
|
10
12
|
/** @public */
|
|
11
13
|
export { offSignal, onceSignal, onSignal } from "./listeners.js";
|
|
@@ -20,7 +22,7 @@ export { getParamSpecFlags, getParamSpecOwnerType, getParamSpecValueType } from
|
|
|
20
22
|
/** @public */
|
|
21
23
|
export { promisify, trimFinish } from "./promisify.js";
|
|
22
24
|
/** @public */
|
|
23
|
-
export { coerceObjectProperty, newParamSpecOverride } from "./properties.js";
|
|
25
|
+
export { coerceObjectProperty, getDeclaredPropertyName, isReadableProperty, newParamSpecOverride, } from "./properties.js";
|
|
24
26
|
/** @public */
|
|
25
27
|
export { matchAllRegex, matchRegex } from "./regex.js";
|
|
26
28
|
/** @public */
|
|
@@ -28,7 +30,7 @@ export { registerClass } from "./register-class.js";
|
|
|
28
30
|
/** @public */
|
|
29
31
|
export { getClassType, getHandle, getInstanceType, getWrapperClass, peekTypeClass, registerClassStruct, registerInterface, registerWrapperClass, registerWrapperClassResolver, setHandle, wrapHandle, } from "./registry.js";
|
|
30
32
|
/** @public */
|
|
31
|
-
export { connectSignal, disconnectSignal, emitSignal, getSignalBaseName } from "./signal.js";
|
|
33
|
+
export { connectSignal, disconnectSignal, emitSignal, getSignalBaseName, signalForHandlerName, } from "./signal.js";
|
|
32
34
|
/** @public */
|
|
33
35
|
export { t } from "./t.js";
|
|
34
36
|
/** @public */
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,CAAC;AAExB,cAAc;AACd,OAAO,EAAsD,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC/G,cAAc;AACd,OAAO,EAAwB,mBAAmB,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAClG,cAAc;AACd,OAAO,EAAE,iBAAiB,EAAoB,MAAM,YAAY,CAAC;AACjE,cAAc;AACd,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,cAAc,EAA6B,MAAM,gBAAgB,CAAC;AAC1G,cAAc;AACd,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACjE,cAAc;AACd,OAAO,EAAE,aAAa,EAAc,MAAM,YAAY,CAAC;AACvD,cAAc;AACd,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACzD,cAAc;AACd,OAAO,EAGH,iBAAiB,EACjB,uBAAuB,EACvB,2BAA2B,EAC3B,iBAAiB,GACpB,MAAM,aAAa,CAAC;AACrB,cAAc;AACd,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAClG,cAAc;AACd,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACvD,cAAc;AACd,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,CAAC;AAExB,cAAc;AACd,OAAO,EAAsD,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC/G,cAAc;AACd,OAAO,EAAwB,mBAAmB,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAClG,cAAc;AACd,OAAO,EAAE,iBAAiB,EAAoB,MAAM,YAAY,CAAC;AACjE,cAAc;AACd,OAAO,EAAiC,MAAM,YAAY,CAAC;AAC3D,cAAc;AACd,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,cAAc,EAA6B,MAAM,gBAAgB,CAAC;AAC1G,cAAc;AACd,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACjE,cAAc;AACd,OAAO,EAAE,aAAa,EAAc,MAAM,YAAY,CAAC;AACvD,cAAc;AACd,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACzD,cAAc;AACd,OAAO,EAGH,iBAAiB,EACjB,uBAAuB,EACvB,2BAA2B,EAC3B,iBAAiB,GACpB,MAAM,aAAa,CAAC;AACrB,cAAc;AACd,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAClG,cAAc;AACd,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACvD,cAAc;AACd,OAAO,EACH,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,GACvB,MAAM,iBAAiB,CAAC;AACzB,cAAc;AACd,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACvD,cAAc;AACd,OAAO,EAAkB,aAAa,EAAqC,MAAM,qBAAqB,CAAC;AACvG,cAAc;AACd,OAAO,EACH,YAAY,EACZ,SAAS,EACT,eAAe,EACf,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,4BAA4B,EAE5B,SAAS,EACT,UAAU,GAEb,MAAM,eAAe,CAAC;AACvB,cAAc;AACd,OAAO,EACH,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EAEjB,oBAAoB,GACvB,MAAM,aAAa,CAAC;AACrB,cAAc;AACd,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,cAAc;AACd,OAAO,EACH,WAAW,EACX,YAAY,EACZ,UAAU,EACV,SAAS,EACT,WAAW,EACX,SAAS,EACT,UAAU,EACV,UAAU,EACV,UAAU,EACV,QAAQ,EACR,UAAU,EACV,cAAc,EACd,YAAY,EACZ,SAAS,EACT,SAAS,EACT,WAAW,EACX,UAAU,EACV,YAAY,EACZ,WAAW,EACX,UAAU,EACV,SAAS,EACT,WAAW,EACX,UAAU,EACV,YAAY,EACZ,YAAY,EAEZ,YAAY,EACZ,cAAc,EACd,OAAO,EACP,QAAQ,EACR,UAAU,EACV,QAAQ,GACX,MAAM,WAAW,CAAC;AACnB,cAAc;AACd,OAAO,EACH,SAAS,EACT,aAAa,EAEb,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,iBAAiB,GACpB,MAAM,YAAY,CAAC;AACpB,cAAc;AACd,OAAO,EAGH,WAAW,EAGX,SAAS,GAGZ,MAAM,cAAc,CAAC;AACtB,cAAc;AACd,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACxD,cAAc;AACd,OAAO,EAAE,KAAK,EAAoC,IAAI,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACpF,cAAc;AACd,OAAO,EAAiB,MAAM,aAAa,CAAC","sourcesContent":["import \"./exit-hook.js\";\n\n/** @public */\nexport { type ApplicationClass, type CommandLineApplication, createApplication } from \"./application-class.js\";\n/** @public */\nexport { type ClosureCallback, ClosureMarshalError, toClosure, tryToClosure } from \"./closure.js\";\n/** @public */\nexport { createErrorDomain, type ErrorDomain } from \"./error.js\";\n/** @public */\nexport { type Field, type StridedField } from \"./field.js\";\n/** @public */\nexport { onExit, quit, quitApplication, runApplication, type RunApplicationResult } from \"./lifecycle.js\";\n/** @public */\nexport { offSignal, onceSignal, onSignal } from \"./listeners.js\";\n/** @public */\nexport { installMixins, type Mixin } from \"./mixin.js\";\n/** @public */\nexport { fromNative, toNative } from \"./native-value.js\";\n/** @public */\nexport {\n type ConstructBinding,\n type ConstructBindings,\n getObjectProperty,\n newObjectWithProperties,\n registerConstructProperties,\n setObjectProperty,\n} from \"./object.js\";\n/** @public */\nexport { getParamSpecFlags, getParamSpecOwnerType, getParamSpecValueType } from \"./param-spec.js\";\n/** @public */\nexport { promisify, trimFinish } from \"./promisify.js\";\n/** @public */\nexport {\n coerceObjectProperty,\n getDeclaredPropertyName,\n isReadableProperty,\n newParamSpecOverride,\n} from \"./properties.js\";\n/** @public */\nexport { matchAllRegex, matchRegex } from \"./regex.js\";\n/** @public */\nexport { type Interface, registerClass, type SignalGType, type SignalSpec } from \"./register-class.js\";\n/** @public */\nexport {\n getClassType,\n getHandle,\n getInstanceType,\n getWrapperClass,\n peekTypeClass,\n registerClassStruct,\n registerInterface,\n registerWrapperClass,\n registerWrapperClassResolver,\n type StaticBase,\n setHandle,\n wrapHandle,\n type WrapperClassResolver,\n} from \"./registry.js\";\n/** @public */\nexport {\n connectSignal,\n disconnectSignal,\n emitSignal,\n getSignalBaseName,\n type SignalHandler,\n signalForHandlerName,\n} from \"./signal.js\";\n/** @public */\nexport { t } from \"./t.js\";\n/** @public */\nexport {\n resolveType,\n TYPE_BOOLEAN,\n TYPE_BOXED,\n TYPE_CHAR,\n TYPE_DOUBLE,\n TYPE_ENUM,\n TYPE_FLAGS,\n TYPE_FLOAT,\n TYPE_GTYPE,\n TYPE_INT,\n TYPE_INT64,\n TYPE_INTERFACE,\n TYPE_INVALID,\n TYPE_LONG,\n TYPE_NONE,\n TYPE_OBJECT,\n TYPE_PARAM,\n TYPE_POINTER,\n TYPE_STRING,\n TYPE_UCHAR,\n TYPE_UINT,\n TYPE_UINT64,\n TYPE_ULONG,\n TYPE_UNICHAR,\n TYPE_VARIANT,\n type TypedClass,\n typeFromName,\n typeInterfaces,\n typeIsA,\n typeName,\n typeParent,\n valueIsA,\n} from \"./type.js\";\n/** @public */\nexport {\n fromValue,\n getBoxedValue,\n type JsValue,\n setBoxedValue,\n toValueHandle,\n tryToValueHandle,\n ValueMarshalError,\n} from \"./value.js\";\n/** @public */\nexport {\n type ByteArray,\n type FromVariantOptions,\n fromVariant,\n type RecursiveFromVariantOptions,\n type RecursiveVariantValue,\n toVariant,\n type VariantInput,\n type VariantValue,\n} from \"./variant.js\";\n/** @public */\nexport { callParent, callVfunc } from \"./vfunc-call.js\";\n/** @public */\nexport { alloc, type ExternalObject, type Handle, read, write } from \"@gtkx/native\";\n/** @public */\nexport { type AnyClass } from \"@gtkx/utils\";\n"]}
|
package/dist/param-spec.d.ts
CHANGED
|
@@ -30,6 +30,7 @@ declare const getParamSpecValueType: (spec: object) => bigint;
|
|
|
30
30
|
*/
|
|
31
31
|
declare const getParamSpecOwnerType: (spec: object) => bigint;
|
|
32
32
|
declare const isParamWritable: (flags: number) => boolean;
|
|
33
|
+
declare const isParamReadable: (flags: number) => boolean;
|
|
33
34
|
declare const isParamConstructOnly: (flags: number) => boolean;
|
|
34
35
|
declare const isParamLaxlyValidated: (flags: number) => boolean;
|
|
35
36
|
declare const isParamExplicitlyNotified: (flags: number) => boolean;
|
|
@@ -37,5 +38,5 @@ declare const wasParamValueModified: (pspec: ExternalObject<Handle>, value: Exte
|
|
|
37
38
|
declare function isStringArray(value: unknown[]): boolean;
|
|
38
39
|
declare function resolveGtype(value: unknown): bigint;
|
|
39
40
|
declare function valueGuardFor(valueType: bigint): ValueGuard;
|
|
40
|
-
export { WHOLE_NUMBER_RANGES, getParamFlags, getParamSpecFlags, getParamSpecOwnerType, getParamSpecValueType, getParamValueType, INT32_MAXIMUM, INT32_MINIMUM, INT64_MAXIMUM, INT64_MINIMUM, isParamConstructOnly, isStringArray, isParamExplicitlyNotified, isParamLaxlyValidated, isParamWritable, resolveGtype, UINT64_MAXIMUM, type ValueGuard, valueGuardFor, wasParamValueModified, };
|
|
41
|
+
export { WHOLE_NUMBER_RANGES, getParamFlags, getParamSpecFlags, getParamSpecOwnerType, getParamSpecValueType, getParamValueType, INT32_MAXIMUM, INT32_MINIMUM, INT64_MAXIMUM, INT64_MINIMUM, isParamConstructOnly, isParamReadable, isStringArray, isParamExplicitlyNotified, isParamLaxlyValidated, isParamWritable, resolveGtype, UINT64_MAXIMUM, type ValueGuard, valueGuardFor, wasParamValueModified, };
|
|
41
42
|
//# sourceMappingURL=param-spec.d.ts.map
|
package/dist/param-spec.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"param-spec.d.ts","sourceRoot":"","sources":["../src/param-spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,MAAM,EAAQ,MAAM,cAAc,CAAC;AAkCtE,KAAK,UAAU,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;AAgB9C,QAAA,MAAM,aAAa,cAAiB,CAAC;AACrC,QAAA,MAAM,aAAa,aAAgB,CAAC;AAEpC,QAAA,MAAM,aAAa,EAAE,MAAqB,CAAC;AAC3C,QAAA,MAAM,aAAa,EAAE,MAAuB,CAAC;AAC7C,QAAA,MAAM,cAAc,EAAE,MAAuB,CAAC;AAa9C,QAAA,MAAM,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAWvE,CAAC;AAgCH,QAAA,MAAM,aAAa,GAAI,OAAO,cAAc,CAAC,MAAM,CAAC,KAAG,MAA2D,CAAC;AAEnH,QAAA,MAAM,iBAAiB,GAAI,OAAO,cAAc,CAAC,MAAM,CAAC,KAAG,MACE,CAAC;AAK9D;;;;;GAKG;AACH,QAAA,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,MAIzC,CAAC;AAEF;;;;;GAKG;AACH,QAAA,MAAM,qBAAqB,GAAI,MAAM,MAAM,KAAG,MAI7C,CAAC;AAEF;;;;;GAKG;AACH,QAAA,MAAM,qBAAqB,GAAI,MAAM,MAAM,KAAG,MAI7C,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,OAAO,MAAM,KAAG,OAAyC,CAAC;AACnF,QAAA,MAAM,oBAAoB,GAAI,OAAO,MAAM,KAAG,OAA+C,CAAC;AAC9F,QAAA,MAAM,qBAAqB,GAAI,OAAO,MAAM,KAAG,OAA+C,CAAC;AAC/F,QAAA,MAAM,yBAAyB,GAAI,OAAO,MAAM,KAAG,OAAgD,CAAC;AAEpG,QAAA,MAAM,qBAAqB,GAAI,OAAO,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,cAAc,CAAC,MAAM,CAAC,KAAG,OAC/C,CAAC;AAUhD,iBAAS,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAQhD;AAsCD,iBAAS,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQ5C;AAcD,iBAAS,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CAepD;AA4CD,OAAO,EACH,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,aAAa,EACb,yBAAyB,EACzB,qBAAqB,EACrB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,KAAK,UAAU,EACf,aAAa,EACb,qBAAqB,GACxB,CAAC"}
|
|
1
|
+
{"version":3,"file":"param-spec.d.ts","sourceRoot":"","sources":["../src/param-spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,MAAM,EAAQ,MAAM,cAAc,CAAC;AAkCtE,KAAK,UAAU,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;AAgB9C,QAAA,MAAM,aAAa,cAAiB,CAAC;AACrC,QAAA,MAAM,aAAa,aAAgB,CAAC;AAEpC,QAAA,MAAM,aAAa,EAAE,MAAqB,CAAC;AAC3C,QAAA,MAAM,aAAa,EAAE,MAAuB,CAAC;AAC7C,QAAA,MAAM,cAAc,EAAE,MAAuB,CAAC;AAa9C,QAAA,MAAM,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAWvE,CAAC;AAgCH,QAAA,MAAM,aAAa,GAAI,OAAO,cAAc,CAAC,MAAM,CAAC,KAAG,MAA2D,CAAC;AAEnH,QAAA,MAAM,iBAAiB,GAAI,OAAO,cAAc,CAAC,MAAM,CAAC,KAAG,MACE,CAAC;AAK9D;;;;;GAKG;AACH,QAAA,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,MAIzC,CAAC;AAEF;;;;;GAKG;AACH,QAAA,MAAM,qBAAqB,GAAI,MAAM,MAAM,KAAG,MAI7C,CAAC;AAEF;;;;;GAKG;AACH,QAAA,MAAM,qBAAqB,GAAI,MAAM,MAAM,KAAG,MAI7C,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,OAAO,MAAM,KAAG,OAAyC,CAAC;AACnF,QAAA,MAAM,eAAe,GAAI,OAAO,MAAM,KAAG,OAAyC,CAAC;AACnF,QAAA,MAAM,oBAAoB,GAAI,OAAO,MAAM,KAAG,OAA+C,CAAC;AAC9F,QAAA,MAAM,qBAAqB,GAAI,OAAO,MAAM,KAAG,OAA+C,CAAC;AAC/F,QAAA,MAAM,yBAAyB,GAAI,OAAO,MAAM,KAAG,OAAgD,CAAC;AAEpG,QAAA,MAAM,qBAAqB,GAAI,OAAO,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,cAAc,CAAC,MAAM,CAAC,KAAG,OAC/C,CAAC;AAUhD,iBAAS,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAQhD;AAsCD,iBAAS,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQ5C;AAcD,iBAAS,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CAepD;AA4CD,OAAO,EACH,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,yBAAyB,EACzB,qBAAqB,EACrB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,KAAK,UAAU,EACf,aAAa,EACb,qBAAqB,GACxB,CAAC"}
|
package/dist/param-spec.js
CHANGED
|
@@ -100,6 +100,7 @@ const getParamSpecOwnerType = (spec) => {
|
|
|
100
100
|
return getParamOwnerType(getHandle(spec));
|
|
101
101
|
};
|
|
102
102
|
const isParamWritable = (flags) => (flags & PARAM_WRITABLE) !== 0;
|
|
103
|
+
const isParamReadable = (flags) => (flags & PARAM_READABLE) !== 0;
|
|
103
104
|
const isParamConstructOnly = (flags) => (flags & PARAM_CONSTRUCT_ONLY) !== 0;
|
|
104
105
|
const isParamLaxlyValidated = (flags) => (flags & PARAM_LAX_VALIDATION) !== 0;
|
|
105
106
|
const isParamExplicitlyNotified = (flags) => (flags & PARAM_EXPLICIT_NOTIFY) !== 0;
|
|
@@ -204,5 +205,5 @@ function assertParamLayout() {
|
|
|
204
205
|
}
|
|
205
206
|
throw new Error("GParamSpec does not match the memory layout this build reads a property's flags and value type at");
|
|
206
207
|
}
|
|
207
|
-
export { WHOLE_NUMBER_RANGES, getParamFlags, getParamSpecFlags, getParamSpecOwnerType, getParamSpecValueType, getParamValueType, INT32_MAXIMUM, INT32_MINIMUM, INT64_MAXIMUM, INT64_MINIMUM, isParamConstructOnly, isStringArray, isParamExplicitlyNotified, isParamLaxlyValidated, isParamWritable, resolveGtype, UINT64_MAXIMUM, valueGuardFor, wasParamValueModified, };
|
|
208
|
+
export { WHOLE_NUMBER_RANGES, getParamFlags, getParamSpecFlags, getParamSpecOwnerType, getParamSpecValueType, getParamValueType, INT32_MAXIMUM, INT32_MINIMUM, INT64_MAXIMUM, INT64_MINIMUM, isParamConstructOnly, isParamReadable, isStringArray, isParamExplicitlyNotified, isParamLaxlyValidated, isParamWritable, resolveGtype, UINT64_MAXIMUM, valueGuardFor, wasParamValueModified, };
|
|
208
209
|
//# sourceMappingURL=param-spec.js.map
|
package/dist/param-spec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"param-spec.js","sourceRoot":"","sources":["../src/param-spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ExternalObject, type Handle, read } from \"@gtkx/native\";\nimport { bind } from \"./bind.js\";\nimport { biguint64T, booleanT, stringT, uint32T, voidT } from \"./descriptors.js\";\nimport { LIB, PARAM_T, VALUE_T } from \"./library.js\";\nimport { getHandle, getInstanceType } from \"./registry.js\";\nimport {\n getStrvType,\n isTypedClass,\n TYPE_BOOLEAN,\n TYPE_BOXED,\n TYPE_CHAR,\n TYPE_DOUBLE,\n TYPE_ENUM,\n TYPE_FLAGS,\n TYPE_FLOAT,\n TYPE_GTYPE,\n TYPE_INT,\n TYPE_INT64,\n TYPE_INTERFACE,\n TYPE_INVALID,\n TYPE_LONG,\n TYPE_OBJECT,\n TYPE_PARAM,\n TYPE_POINTER,\n TYPE_STRING,\n TYPE_UCHAR,\n TYPE_UINT,\n TYPE_UINT64,\n TYPE_ULONG,\n TYPE_VARIANT,\n typeFundamental,\n typeIsA,\n} from \"./type.js\";\n\ntype ValueGuard = (value: unknown) => boolean;\ntype ParamLayout = { flags: number; valueType: bigint; ownerType: bigint };\n\nconst PARAM_READABLE = 1;\nconst PARAM_WRITABLE = 2;\nconst PARAM_CONSTRUCT_ONLY = 8;\nconst PARAM_LAX_VALIDATION = 16;\nconst PARAM_EXPLICIT_NOTIFY = 1 << 30;\nconst READ_FLAGS = PARAM_READABLE | PARAM_WRITABLE | PARAM_CONSTRUCT_ONLY | PARAM_LAX_VALIDATION;\nconst FLAGS_BYTE_OFFSET = 16;\nconst VALUE_TYPE_BYTE_OFFSET = 24;\nconst OWNER_TYPE_BYTE_OFFSET = 32;\nconst LAYOUT_PROBE_NAME = \"gtkx-param-layout\";\nconst INT8_MINIMUM = -128;\nconst INT8_MAXIMUM = 127;\nconst UINT8_MAXIMUM = 255;\nconst INT32_MINIMUM = -2_147_483_648;\nconst INT32_MAXIMUM = 2_147_483_647;\nconst UINT32_MAXIMUM = 4_294_967_295;\nconst INT64_MINIMUM: bigint = -(2n ** 63n);\nconst INT64_MAXIMUM: bigint = 2n ** 63n - 1n;\nconst UINT64_MAXIMUM: bigint = 2n ** 64n - 1n;\n\nconst WRAPPED_FUNDAMENTALS: Set<bigint> = new Set([\n TYPE_BOXED,\n TYPE_INTERFACE,\n TYPE_OBJECT,\n TYPE_PARAM,\n TYPE_VARIANT,\n]);\n\nconst isWideUnsignedValue: ValueGuard = wideIntegerGuardFor(0n, UINT64_MAXIMUM);\nconst MAX_SAFE: number = Number.MAX_SAFE_INTEGER;\n\nconst WHOLE_NUMBER_RANGES: Map<bigint, [minimum: number, maximum: number]> = new Map([\n [TYPE_CHAR, [INT8_MINIMUM, INT8_MAXIMUM]],\n [TYPE_UCHAR, [0, UINT8_MAXIMUM]],\n [TYPE_INT, [INT32_MINIMUM, INT32_MAXIMUM]],\n [TYPE_UINT, [0, UINT32_MAXIMUM]],\n [TYPE_ENUM, [INT32_MINIMUM, INT32_MAXIMUM]],\n [TYPE_FLAGS, [0, UINT32_MAXIMUM]],\n [TYPE_LONG, [-MAX_SAFE, MAX_SAFE]],\n [TYPE_ULONG, [0, MAX_SAFE]],\n [TYPE_INT64, [-MAX_SAFE, MAX_SAFE]],\n [TYPE_UINT64, [0, MAX_SAFE]],\n]);\n\nconst SCALAR_GUARDS: Map<bigint, ValueGuard> = new Map([\n [TYPE_BOOLEAN, isBooleanValue],\n [TYPE_STRING, isStringValue],\n [TYPE_CHAR, integerGuardFor(INT8_MINIMUM, INT8_MAXIMUM)],\n [TYPE_UCHAR, integerGuardFor(0, UINT8_MAXIMUM)],\n [TYPE_INT, integerGuardFor(INT32_MINIMUM, INT32_MAXIMUM)],\n [TYPE_UINT, integerGuardFor(0, UINT32_MAXIMUM)],\n [TYPE_ENUM, integerGuardFor(INT32_MINIMUM, INT32_MAXIMUM)],\n [TYPE_FLAGS, integerGuardFor(0, UINT32_MAXIMUM)],\n [TYPE_LONG, wideIntegerGuardFor(INT64_MINIMUM, INT64_MAXIMUM)],\n [TYPE_ULONG, isWideUnsignedValue],\n [TYPE_INT64, wideIntegerGuardFor(INT64_MINIMUM, INT64_MAXIMUM)],\n [TYPE_UINT64, isWideUnsignedValue],\n [TYPE_FLOAT, isNumberValue],\n [TYPE_DOUBLE, isNumberValue],\n [TYPE_POINTER, isNullValue],\n]);\n\nconst layout = { wasChecked: false };\nconst paramValueValidate = bind(LIB, \"g_param_value_validate\", [PARAM_T, VALUE_T], booleanT);\nconst paramSpecUnref = bind(LIB, \"g_param_spec_unref\", [PARAM_T], voidT);\nconst paramSpecRefSink = bind(LIB, \"g_param_spec_ref_sink\", [PARAM_T], PARAM_T);\n\nconst newParamSpecBoolean = bind(\n LIB,\n \"g_param_spec_boolean\",\n [stringT(\"borrowed\"), stringT(\"borrowed\"), stringT(\"borrowed\"), booleanT, uint32T],\n PARAM_T,\n);\n\nconst getParamFlags = (pspec: ExternalObject<Handle>): number => read(pspec, uint32T, FLAGS_BYTE_OFFSET) as number;\n\nconst getParamValueType = (pspec: ExternalObject<Handle>): bigint =>\n read(pspec, biguint64T, VALUE_TYPE_BYTE_OFFSET) as bigint;\n\nconst getParamOwnerType = (pspec: ExternalObject<Handle>): bigint =>\n read(pspec, biguint64T, OWNER_TYPE_BYTE_OFFSET) as bigint;\n\n/**\n * Reads the `GParamFlags` bitfield of a `GObject.ParamSpec`.\n *\n * @param spec The param spec wrapper to read.\n * @returns The spec's flags.\n */\nconst getParamSpecFlags = (spec: object): number => {\n assertParamLayout();\n\n return getParamFlags(getHandle(spec));\n};\n\n/**\n * Reads the GType of the values a `GObject.ParamSpec` describes.\n *\n * @param spec The param spec wrapper to read.\n * @returns The GType of the spec's values.\n */\nconst getParamSpecValueType = (spec: object): bigint => {\n assertParamLayout();\n\n return getParamValueType(getHandle(spec));\n};\n\n/**\n * Reads the GType a `GObject.ParamSpec` is installed on.\n *\n * @param spec The param spec wrapper to read.\n * @returns The owning GType, or `TYPE_INVALID` while the spec is not installed on any type.\n */\nconst getParamSpecOwnerType = (spec: object): bigint => {\n assertParamLayout();\n\n return getParamOwnerType(getHandle(spec));\n};\n\nconst isParamWritable = (flags: number): boolean => (flags & PARAM_WRITABLE) !== 0;\nconst isParamConstructOnly = (flags: number): boolean => (flags & PARAM_CONSTRUCT_ONLY) !== 0;\nconst isParamLaxlyValidated = (flags: number): boolean => (flags & PARAM_LAX_VALIDATION) !== 0;\nconst isParamExplicitlyNotified = (flags: number): boolean => (flags & PARAM_EXPLICIT_NOTIFY) !== 0;\n\nconst wasParamValueModified = (pspec: ExternalObject<Handle>, value: ExternalObject<Handle>): boolean =>\n paramValueValidate(pspec, value) as boolean;\n\nfunction isBooleanValue(value: unknown): boolean {\n return typeof value === \"boolean\";\n}\n\nfunction isStringValue(value: unknown): boolean {\n return value == null || typeof value === \"string\";\n}\n\nfunction isStringArray(value: unknown[]): boolean {\n for (const item of value) {\n if (typeof item !== \"string\") {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isStrvValue(value: unknown): boolean {\n return value == null || (Array.isArray(value) && isStringArray(value));\n}\n\nfunction isNumberValue(value: unknown): boolean {\n return typeof value === \"number\";\n}\n\nfunction isAnyValue(): boolean {\n return true;\n}\n\nfunction isNullValue(value: unknown): boolean {\n return value == null;\n}\n\nfunction integerGuardFor(minimum: number, maximum: number): ValueGuard {\n return (value) => Number.isSafeInteger(value) && (value as number) >= minimum && (value as number) <= maximum;\n}\n\nfunction toWideInteger(value: unknown): bigint | undefined {\n if (typeof value === \"bigint\") {\n return value;\n }\n\n return Number.isSafeInteger(value) ? BigInt(value as number) : undefined;\n}\n\nfunction wideIntegerGuardFor(minimum: bigint, maximum: bigint): ValueGuard {\n return (value) => {\n const wide = toWideInteger(value);\n\n return wide !== undefined && wide >= minimum && wide <= maximum;\n };\n}\n\nfunction resolveGtype(value: unknown): bigint {\n const instanceType = getInstanceType(value as object);\n\n if (instanceType !== TYPE_INVALID) {\n return instanceType;\n }\n\n return isTypedClass(value) ? value.__type__ : TYPE_INVALID;\n}\n\nfunction wrappedGuardFor(valueType: bigint): ValueGuard {\n return (value) => value == null || typeIsA(resolveGtype(value), valueType);\n}\n\nfunction exactGuardFor(valueType: bigint): ValueGuard | undefined {\n if (valueType === TYPE_GTYPE) {\n return isWideUnsignedValue;\n }\n\n return valueType === getStrvType() ? isStrvValue : undefined;\n}\n\nfunction valueGuardFor(valueType: bigint): ValueGuard {\n assertParamLayout();\n const exact = exactGuardFor(valueType);\n\n if (exact !== undefined) {\n return exact;\n }\n\n const fundamental = typeFundamental(valueType);\n\n if (WRAPPED_FUNDAMENTALS.has(fundamental)) {\n return wrappedGuardFor(valueType);\n }\n\n return SCALAR_GUARDS.get(fundamental) ?? isAnyValue;\n}\n\nfunction readProbeLayout(flags: number): ParamLayout {\n const probe = newParamSpecBoolean(LAYOUT_PROBE_NAME, null, null, false, flags) as ExternalObject<Handle>;\n paramSpecRefSink(probe);\n\n try {\n return {\n flags: getParamFlags(probe),\n valueType: getParamValueType(probe),\n ownerType: getParamOwnerType(probe),\n };\n } finally {\n paramSpecUnref(probe);\n }\n}\n\nfunction isLayoutIntact(flags: number): boolean {\n const layout = readProbeLayout(flags);\n\n return (\n (layout.flags & READ_FLAGS) === flags &&\n layout.valueType === TYPE_BOOLEAN &&\n layout.ownerType === TYPE_INVALID\n );\n}\n\nfunction assertParamLayout(): void {\n if (layout.wasChecked) {\n return;\n }\n\n layout.wasChecked = true;\n const readWrite = PARAM_READABLE | PARAM_WRITABLE;\n\n if (isLayoutIntact(readWrite) && isLayoutIntact(readWrite | PARAM_CONSTRUCT_ONLY | PARAM_LAX_VALIDATION)) {\n return;\n }\n\n throw new Error(\n \"GParamSpec does not match the memory layout this build reads a property's flags and value type at\",\n );\n}\n\nexport {\n WHOLE_NUMBER_RANGES,\n getParamFlags,\n getParamSpecFlags,\n getParamSpecOwnerType,\n getParamSpecValueType,\n getParamValueType,\n INT32_MAXIMUM,\n INT32_MINIMUM,\n INT64_MAXIMUM,\n INT64_MINIMUM,\n isParamConstructOnly,\n isStringArray,\n isParamExplicitlyNotified,\n isParamLaxlyValidated,\n isParamWritable,\n resolveGtype,\n UINT64_MAXIMUM,\n type ValueGuard,\n valueGuardFor,\n wasParamValueModified,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"param-spec.js","sourceRoot":"","sources":["../src/param-spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ExternalObject, type Handle, read } from \"@gtkx/native\";\nimport { bind } from \"./bind.js\";\nimport { biguint64T, booleanT, stringT, uint32T, voidT } from \"./descriptors.js\";\nimport { LIB, PARAM_T, VALUE_T } from \"./library.js\";\nimport { getHandle, getInstanceType } from \"./registry.js\";\nimport {\n getStrvType,\n isTypedClass,\n TYPE_BOOLEAN,\n TYPE_BOXED,\n TYPE_CHAR,\n TYPE_DOUBLE,\n TYPE_ENUM,\n TYPE_FLAGS,\n TYPE_FLOAT,\n TYPE_GTYPE,\n TYPE_INT,\n TYPE_INT64,\n TYPE_INTERFACE,\n TYPE_INVALID,\n TYPE_LONG,\n TYPE_OBJECT,\n TYPE_PARAM,\n TYPE_POINTER,\n TYPE_STRING,\n TYPE_UCHAR,\n TYPE_UINT,\n TYPE_UINT64,\n TYPE_ULONG,\n TYPE_VARIANT,\n typeFundamental,\n typeIsA,\n} from \"./type.js\";\n\ntype ValueGuard = (value: unknown) => boolean;\ntype ParamLayout = { flags: number; valueType: bigint; ownerType: bigint };\n\nconst PARAM_READABLE = 1;\nconst PARAM_WRITABLE = 2;\nconst PARAM_CONSTRUCT_ONLY = 8;\nconst PARAM_LAX_VALIDATION = 16;\nconst PARAM_EXPLICIT_NOTIFY = 1 << 30;\nconst READ_FLAGS = PARAM_READABLE | PARAM_WRITABLE | PARAM_CONSTRUCT_ONLY | PARAM_LAX_VALIDATION;\nconst FLAGS_BYTE_OFFSET = 16;\nconst VALUE_TYPE_BYTE_OFFSET = 24;\nconst OWNER_TYPE_BYTE_OFFSET = 32;\nconst LAYOUT_PROBE_NAME = \"gtkx-param-layout\";\nconst INT8_MINIMUM = -128;\nconst INT8_MAXIMUM = 127;\nconst UINT8_MAXIMUM = 255;\nconst INT32_MINIMUM = -2_147_483_648;\nconst INT32_MAXIMUM = 2_147_483_647;\nconst UINT32_MAXIMUM = 4_294_967_295;\nconst INT64_MINIMUM: bigint = -(2n ** 63n);\nconst INT64_MAXIMUM: bigint = 2n ** 63n - 1n;\nconst UINT64_MAXIMUM: bigint = 2n ** 64n - 1n;\n\nconst WRAPPED_FUNDAMENTALS: Set<bigint> = new Set([\n TYPE_BOXED,\n TYPE_INTERFACE,\n TYPE_OBJECT,\n TYPE_PARAM,\n TYPE_VARIANT,\n]);\n\nconst isWideUnsignedValue: ValueGuard = wideIntegerGuardFor(0n, UINT64_MAXIMUM);\nconst MAX_SAFE: number = Number.MAX_SAFE_INTEGER;\n\nconst WHOLE_NUMBER_RANGES: Map<bigint, [minimum: number, maximum: number]> = new Map([\n [TYPE_CHAR, [INT8_MINIMUM, INT8_MAXIMUM]],\n [TYPE_UCHAR, [0, UINT8_MAXIMUM]],\n [TYPE_INT, [INT32_MINIMUM, INT32_MAXIMUM]],\n [TYPE_UINT, [0, UINT32_MAXIMUM]],\n [TYPE_ENUM, [INT32_MINIMUM, INT32_MAXIMUM]],\n [TYPE_FLAGS, [0, UINT32_MAXIMUM]],\n [TYPE_LONG, [-MAX_SAFE, MAX_SAFE]],\n [TYPE_ULONG, [0, MAX_SAFE]],\n [TYPE_INT64, [-MAX_SAFE, MAX_SAFE]],\n [TYPE_UINT64, [0, MAX_SAFE]],\n]);\n\nconst SCALAR_GUARDS: Map<bigint, ValueGuard> = new Map([\n [TYPE_BOOLEAN, isBooleanValue],\n [TYPE_STRING, isStringValue],\n [TYPE_CHAR, integerGuardFor(INT8_MINIMUM, INT8_MAXIMUM)],\n [TYPE_UCHAR, integerGuardFor(0, UINT8_MAXIMUM)],\n [TYPE_INT, integerGuardFor(INT32_MINIMUM, INT32_MAXIMUM)],\n [TYPE_UINT, integerGuardFor(0, UINT32_MAXIMUM)],\n [TYPE_ENUM, integerGuardFor(INT32_MINIMUM, INT32_MAXIMUM)],\n [TYPE_FLAGS, integerGuardFor(0, UINT32_MAXIMUM)],\n [TYPE_LONG, wideIntegerGuardFor(INT64_MINIMUM, INT64_MAXIMUM)],\n [TYPE_ULONG, isWideUnsignedValue],\n [TYPE_INT64, wideIntegerGuardFor(INT64_MINIMUM, INT64_MAXIMUM)],\n [TYPE_UINT64, isWideUnsignedValue],\n [TYPE_FLOAT, isNumberValue],\n [TYPE_DOUBLE, isNumberValue],\n [TYPE_POINTER, isNullValue],\n]);\n\nconst layout = { wasChecked: false };\nconst paramValueValidate = bind(LIB, \"g_param_value_validate\", [PARAM_T, VALUE_T], booleanT);\nconst paramSpecUnref = bind(LIB, \"g_param_spec_unref\", [PARAM_T], voidT);\nconst paramSpecRefSink = bind(LIB, \"g_param_spec_ref_sink\", [PARAM_T], PARAM_T);\n\nconst newParamSpecBoolean = bind(\n LIB,\n \"g_param_spec_boolean\",\n [stringT(\"borrowed\"), stringT(\"borrowed\"), stringT(\"borrowed\"), booleanT, uint32T],\n PARAM_T,\n);\n\nconst getParamFlags = (pspec: ExternalObject<Handle>): number => read(pspec, uint32T, FLAGS_BYTE_OFFSET) as number;\n\nconst getParamValueType = (pspec: ExternalObject<Handle>): bigint =>\n read(pspec, biguint64T, VALUE_TYPE_BYTE_OFFSET) as bigint;\n\nconst getParamOwnerType = (pspec: ExternalObject<Handle>): bigint =>\n read(pspec, biguint64T, OWNER_TYPE_BYTE_OFFSET) as bigint;\n\n/**\n * Reads the `GParamFlags` bitfield of a `GObject.ParamSpec`.\n *\n * @param spec The param spec wrapper to read.\n * @returns The spec's flags.\n */\nconst getParamSpecFlags = (spec: object): number => {\n assertParamLayout();\n\n return getParamFlags(getHandle(spec));\n};\n\n/**\n * Reads the GType of the values a `GObject.ParamSpec` describes.\n *\n * @param spec The param spec wrapper to read.\n * @returns The GType of the spec's values.\n */\nconst getParamSpecValueType = (spec: object): bigint => {\n assertParamLayout();\n\n return getParamValueType(getHandle(spec));\n};\n\n/**\n * Reads the GType a `GObject.ParamSpec` is installed on.\n *\n * @param spec The param spec wrapper to read.\n * @returns The owning GType, or `TYPE_INVALID` while the spec is not installed on any type.\n */\nconst getParamSpecOwnerType = (spec: object): bigint => {\n assertParamLayout();\n\n return getParamOwnerType(getHandle(spec));\n};\n\nconst isParamWritable = (flags: number): boolean => (flags & PARAM_WRITABLE) !== 0;\nconst isParamReadable = (flags: number): boolean => (flags & PARAM_READABLE) !== 0;\nconst isParamConstructOnly = (flags: number): boolean => (flags & PARAM_CONSTRUCT_ONLY) !== 0;\nconst isParamLaxlyValidated = (flags: number): boolean => (flags & PARAM_LAX_VALIDATION) !== 0;\nconst isParamExplicitlyNotified = (flags: number): boolean => (flags & PARAM_EXPLICIT_NOTIFY) !== 0;\n\nconst wasParamValueModified = (pspec: ExternalObject<Handle>, value: ExternalObject<Handle>): boolean =>\n paramValueValidate(pspec, value) as boolean;\n\nfunction isBooleanValue(value: unknown): boolean {\n return typeof value === \"boolean\";\n}\n\nfunction isStringValue(value: unknown): boolean {\n return value == null || typeof value === \"string\";\n}\n\nfunction isStringArray(value: unknown[]): boolean {\n for (const item of value) {\n if (typeof item !== \"string\") {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isStrvValue(value: unknown): boolean {\n return value == null || (Array.isArray(value) && isStringArray(value));\n}\n\nfunction isNumberValue(value: unknown): boolean {\n return typeof value === \"number\";\n}\n\nfunction isAnyValue(): boolean {\n return true;\n}\n\nfunction isNullValue(value: unknown): boolean {\n return value == null;\n}\n\nfunction integerGuardFor(minimum: number, maximum: number): ValueGuard {\n return (value) => Number.isSafeInteger(value) && (value as number) >= minimum && (value as number) <= maximum;\n}\n\nfunction toWideInteger(value: unknown): bigint | undefined {\n if (typeof value === \"bigint\") {\n return value;\n }\n\n return Number.isSafeInteger(value) ? BigInt(value as number) : undefined;\n}\n\nfunction wideIntegerGuardFor(minimum: bigint, maximum: bigint): ValueGuard {\n return (value) => {\n const wide = toWideInteger(value);\n\n return wide !== undefined && wide >= minimum && wide <= maximum;\n };\n}\n\nfunction resolveGtype(value: unknown): bigint {\n const instanceType = getInstanceType(value as object);\n\n if (instanceType !== TYPE_INVALID) {\n return instanceType;\n }\n\n return isTypedClass(value) ? value.__type__ : TYPE_INVALID;\n}\n\nfunction wrappedGuardFor(valueType: bigint): ValueGuard {\n return (value) => value == null || typeIsA(resolveGtype(value), valueType);\n}\n\nfunction exactGuardFor(valueType: bigint): ValueGuard | undefined {\n if (valueType === TYPE_GTYPE) {\n return isWideUnsignedValue;\n }\n\n return valueType === getStrvType() ? isStrvValue : undefined;\n}\n\nfunction valueGuardFor(valueType: bigint): ValueGuard {\n assertParamLayout();\n const exact = exactGuardFor(valueType);\n\n if (exact !== undefined) {\n return exact;\n }\n\n const fundamental = typeFundamental(valueType);\n\n if (WRAPPED_FUNDAMENTALS.has(fundamental)) {\n return wrappedGuardFor(valueType);\n }\n\n return SCALAR_GUARDS.get(fundamental) ?? isAnyValue;\n}\n\nfunction readProbeLayout(flags: number): ParamLayout {\n const probe = newParamSpecBoolean(LAYOUT_PROBE_NAME, null, null, false, flags) as ExternalObject<Handle>;\n paramSpecRefSink(probe);\n\n try {\n return {\n flags: getParamFlags(probe),\n valueType: getParamValueType(probe),\n ownerType: getParamOwnerType(probe),\n };\n } finally {\n paramSpecUnref(probe);\n }\n}\n\nfunction isLayoutIntact(flags: number): boolean {\n const layout = readProbeLayout(flags);\n\n return (\n (layout.flags & READ_FLAGS) === flags &&\n layout.valueType === TYPE_BOOLEAN &&\n layout.ownerType === TYPE_INVALID\n );\n}\n\nfunction assertParamLayout(): void {\n if (layout.wasChecked) {\n return;\n }\n\n layout.wasChecked = true;\n const readWrite = PARAM_READABLE | PARAM_WRITABLE;\n\n if (isLayoutIntact(readWrite) && isLayoutIntact(readWrite | PARAM_CONSTRUCT_ONLY | PARAM_LAX_VALIDATION)) {\n return;\n }\n\n throw new Error(\n \"GParamSpec does not match the memory layout this build reads a property's flags and value type at\",\n );\n}\n\nexport {\n WHOLE_NUMBER_RANGES,\n getParamFlags,\n getParamSpecFlags,\n getParamSpecOwnerType,\n getParamSpecValueType,\n getParamValueType,\n INT32_MAXIMUM,\n INT32_MINIMUM,\n INT64_MAXIMUM,\n INT64_MINIMUM,\n isParamConstructOnly,\n isParamReadable,\n isStringArray,\n isParamExplicitlyNotified,\n isParamLaxlyValidated,\n isParamWritable,\n resolveGtype,\n UINT64_MAXIMUM,\n type ValueGuard,\n valueGuardFor,\n wasParamValueModified,\n};\n"]}
|
package/dist/properties.d.ts
CHANGED
|
@@ -14,13 +14,19 @@ type PropertyCheck = {
|
|
|
14
14
|
write?: ValueWriter;
|
|
15
15
|
scratch?: ExternalObject<Handle>;
|
|
16
16
|
};
|
|
17
|
-
type
|
|
18
|
-
memberName: string;
|
|
17
|
+
type AccessorBase = PropertyCheck & {
|
|
19
18
|
storage: symbol;
|
|
20
|
-
hasGeneratedMember: boolean;
|
|
21
|
-
isInterfaceProperty?: boolean;
|
|
22
19
|
delegate?: InterfaceProperty;
|
|
23
20
|
};
|
|
21
|
+
type DeclaredAccessor = AccessorBase & {
|
|
22
|
+
isInterfaceProperty?: false;
|
|
23
|
+
memberName: string;
|
|
24
|
+
hasGeneratedMember: boolean;
|
|
25
|
+
};
|
|
26
|
+
type InterfaceAccessor = AccessorBase & {
|
|
27
|
+
isInterfaceProperty: true;
|
|
28
|
+
};
|
|
29
|
+
type PropertyAccessor = DeclaredAccessor | InterfaceAccessor;
|
|
24
30
|
/** A `GObject.ParamSpec` wrapper describing one property's name, type, flags and default. */
|
|
25
31
|
type PropertySpec = object;
|
|
26
32
|
type PropertyDispatch = {
|
|
@@ -50,6 +56,11 @@ declare const SET_PROPERTY_VFUNC = "vfuncSetProperty";
|
|
|
50
56
|
* @returns Handle of the override spec.
|
|
51
57
|
*/
|
|
52
58
|
declare const newParamSpecOverride: (name: string, source: bigint | AnyClass) => ExternalObject<Handle>;
|
|
59
|
+
/**
|
|
60
|
+
* Whether the type declares a readable GObject property under `propertyName`, asking GObject itself
|
|
61
|
+
* rather than looking for a generated accessor, which codegen omits when a method shares the name.
|
|
62
|
+
*/
|
|
63
|
+
declare function isReadableProperty(gtype: bigint, propertyName: string): boolean;
|
|
53
64
|
declare function coercePropertyValue(gtype: bigint, propertyName: string, value: unknown): unknown;
|
|
54
65
|
/**
|
|
55
66
|
* Fits a number to what a GObject property accepts, the way an animation writing a value on every
|
|
@@ -69,6 +80,11 @@ declare function constructPropertyFor(gtype: bigint, name: string, value: unknow
|
|
|
69
80
|
declare function makeGetProperty(dispatch: PropertyDispatch): (this: object, propertyId: number, value: object, pspec: PropertySpec) => void;
|
|
70
81
|
declare function makeSetProperty(dispatch: PropertyDispatch): (this: object, propertyId: number, value: object, pspec: PropertySpec) => void;
|
|
71
82
|
declare function buildPropertyDispatch(source: PropertyDispatchSource): PropertyDispatch;
|
|
83
|
+
/**
|
|
84
|
+
* The GObject name a class registered with `registerClass` installed an accessor under, or
|
|
85
|
+
* `undefined` when the accessor names no property the class declared itself.
|
|
86
|
+
*/
|
|
87
|
+
declare function getDeclaredPropertyName(object: object, accessor: string): string | undefined;
|
|
72
88
|
declare function toNativeProperties(properties: Record<string, PropertySpec>): RegisterClassProperty[];
|
|
73
|
-
export { buildPropertyDispatch, coerceObjectProperty, coercePropertyValue, constructPropertyFor, GET_PROPERTY_VFUNC, makeGetProperty, makeSetProperty, newParamSpecOverride, SET_PROPERTY_VFUNC, toNativeProperties, type ConstructProperty, type PropertyDispatch, type PropertySpec, };
|
|
89
|
+
export { buildPropertyDispatch, coerceObjectProperty, getDeclaredPropertyName, isReadableProperty, coercePropertyValue, constructPropertyFor, GET_PROPERTY_VFUNC, makeGetProperty, makeSetProperty, newParamSpecOverride, SET_PROPERTY_VFUNC, toNativeProperties, type ConstructProperty, type PropertyDispatch, type PropertySpec, };
|
|
74
90
|
//# sourceMappingURL=properties.d.ts.map
|
package/dist/properties.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../src/properties.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAClF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAK5C,OAAO,
|
|
1
|
+
{"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../src/properties.ts"],"names":[],"mappings":"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"}
|
package/dist/properties.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { camelCase, kebabCase } from "@gtkx/utils";
|
|
1
|
+
import { camelCase, kebabCase, toCamelIdentifier } from "@gtkx/utils";
|
|
2
2
|
import { bind } from "./bind.js";
|
|
3
|
-
import { biguint64T, fundamentalT, stringT, structT, voidT } from "./descriptors.js";
|
|
3
|
+
import { biguint64T, fundamentalT, refT, sizedArrayT, stringT, structT, uint32T, voidT } from "./descriptors.js";
|
|
4
4
|
import { LIB, PARAM_T, VALUE_T } from "./library.js";
|
|
5
|
-
import { getParamFlags, getParamValueType, isParamConstructOnly, isParamExplicitlyNotified, isParamLaxlyValidated, isParamWritable, valueGuardFor, wasParamValueModified, WHOLE_NUMBER_RANGES, } from "./param-spec.js";
|
|
5
|
+
import { getParamFlags, getParamValueType, isParamConstructOnly, isParamExplicitlyNotified, isParamLaxlyValidated, isParamReadable, isParamWritable, valueGuardFor, wasParamValueModified, WHOLE_NUMBER_RANGES, } from "./param-spec.js";
|
|
6
6
|
import { getClassType, getHandle, getInstanceType, getInterfaceProperties, instanceClassName, } from "./registry.js";
|
|
7
7
|
import { TYPE_INTERFACE, TYPE_INVALID, TYPE_OBJECT, typeFundamental, typeIsA, typeName } from "./type.js";
|
|
8
8
|
import { fromValue, newValueForType, valueGuardOverrideFor, valueNarrowerFor, valueWriterFor, } from "./value.js";
|
|
@@ -12,6 +12,8 @@ const SET_PROPERTY_VFUNC = "vfuncSetProperty";
|
|
|
12
12
|
const READ_ONLY_REASON = "the property is read-only";
|
|
13
13
|
const CONSTRUCT_ONLY_REASON = "the property can only be set when the object is constructed";
|
|
14
14
|
const CLASS_T = structT("borrowed");
|
|
15
|
+
const CANONICAL_NAME_PATTERN = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;
|
|
16
|
+
const DECLARED_NAMES = Symbol("gtkx:declaredPropertyNames");
|
|
15
17
|
const OVERRIDE_PARAM_T = fundamentalT(LIB, "g_param_spec_ref_sink", "g_param_spec_unref", {
|
|
16
18
|
ownership: "borrowed",
|
|
17
19
|
typeName: "GParam",
|
|
@@ -23,6 +25,7 @@ const typeClassRef = bind(LIB, "g_type_class_ref", [biguint64T], CLASS_T);
|
|
|
23
25
|
const typeClassUnref = bind(LIB, "g_type_class_unref", [CLASS_T], voidT);
|
|
24
26
|
const coercionChecks = new Map();
|
|
25
27
|
const classFindProperty = bind(LIB, "g_object_class_find_property", [CLASS_T, stringT("borrowed")], PARAM_T);
|
|
28
|
+
const classListProperties = bind(LIB, "g_object_class_list_properties", [CLASS_T, refT(uint32T)], sizedArrayT(PARAM_T, 1, "full"));
|
|
26
29
|
const defaultInterfaceRef = bind(LIB, "g_type_default_interface_ref", [biguint64T], CLASS_T);
|
|
27
30
|
const defaultInterfaceUnref = bind(LIB, "g_type_default_interface_unref", [CLASS_T], voidT);
|
|
28
31
|
const interfaceFindProperty = bind(LIB, "g_object_interface_find_property", [CLASS_T, stringT("borrowed")], PARAM_T);
|
|
@@ -47,9 +50,18 @@ function checkFor(handle, name) {
|
|
|
47
50
|
narrowValue: valueNarrowerFor(valueType),
|
|
48
51
|
};
|
|
49
52
|
}
|
|
53
|
+
function accessorSpecs(klass) {
|
|
54
|
+
const specs = new Map();
|
|
55
|
+
const countRef = { value: 0 };
|
|
56
|
+
for (const pspec of classListProperties(klass, countRef)) {
|
|
57
|
+
specs.set(toCamelIdentifier(paramSpecName(pspec)), pspec);
|
|
58
|
+
}
|
|
59
|
+
return specs;
|
|
60
|
+
}
|
|
50
61
|
function findPropertySpec(klass, name) {
|
|
51
|
-
const found = classFindProperty(klass, name)
|
|
52
|
-
|
|
62
|
+
const found = (classFindProperty(klass, name) ??
|
|
63
|
+
classFindProperty(klass, canonicalCase(name)));
|
|
64
|
+
return found ?? accessorSpecs(klass).get(toCamelIdentifier(name)) ?? null;
|
|
53
65
|
}
|
|
54
66
|
const sourceLabel = (source, gtype) => typeName(gtype) ?? (typeof source === "function" ? source.name : String(source));
|
|
55
67
|
const findInterfaceSpec = (gtype, name) => {
|
|
@@ -161,6 +173,20 @@ function constructValueFor(wrapper, check, value) {
|
|
|
161
173
|
assertWritable(wrapper, check, value);
|
|
162
174
|
return { name: check.propertyName, value: checkedValueFor(wrapper, check, value) };
|
|
163
175
|
}
|
|
176
|
+
/**
|
|
177
|
+
* Whether the type declares a readable GObject property under `propertyName`, asking GObject itself
|
|
178
|
+
* rather than looking for a generated accessor, which codegen omits when a method shares the name.
|
|
179
|
+
*/
|
|
180
|
+
function isReadableProperty(gtype, propertyName) {
|
|
181
|
+
const klass = typeClassRef(gtype);
|
|
182
|
+
try {
|
|
183
|
+
const pspec = findPropertySpec(klass, propertyName);
|
|
184
|
+
return pspec !== null && isParamReadable(getParamFlags(pspec));
|
|
185
|
+
}
|
|
186
|
+
finally {
|
|
187
|
+
typeClassUnref(klass);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
164
190
|
function lookupCoercionCheck(gtype, name) {
|
|
165
191
|
const klass = typeClassRef(gtype);
|
|
166
192
|
try {
|
|
@@ -334,9 +360,7 @@ function interfaceAccessorFor(dispatch, pspec) {
|
|
|
334
360
|
const delegate = dispatch.delegates.get(propertyName);
|
|
335
361
|
const accessor = {
|
|
336
362
|
...checkFor(handle, propertyName),
|
|
337
|
-
memberName: camelCase(propertyName),
|
|
338
363
|
storage: storageFor(propertyName),
|
|
339
|
-
hasGeneratedMember: false,
|
|
340
364
|
isInterfaceProperty: true,
|
|
341
365
|
};
|
|
342
366
|
if (delegate !== undefined) {
|
|
@@ -418,13 +442,13 @@ function makeSetProperty(dispatch) {
|
|
|
418
442
|
writeCurrent(this, accessor, fromValue(getHandle(value)));
|
|
419
443
|
};
|
|
420
444
|
}
|
|
445
|
+
const isCanonicalName = (name, propertyName) => CANONICAL_NAME_PATTERN.test(propertyName) && toCamelIdentifier(propertyName) === toCamelIdentifier(name);
|
|
421
446
|
function assertCanonicalName(klass, name, propertyName) {
|
|
422
|
-
|
|
423
|
-
if (propertyName === canonical) {
|
|
447
|
+
if (isCanonicalName(name, propertyName)) {
|
|
424
448
|
return;
|
|
425
449
|
}
|
|
426
450
|
throw new TypeError(`registerClass: ${klass.name} keys the property '${name}' to a GObject.ParamSpec named ` +
|
|
427
|
-
`'${propertyName}', which is the name GObject notifies under; name the ParamSpec '${
|
|
451
|
+
`'${propertyName}', which is the name GObject notifies under; name the ParamSpec '${canonicalCase(name)}'`);
|
|
428
452
|
}
|
|
429
453
|
function assertCanonicalNames(klass, properties) {
|
|
430
454
|
for (const [name, pspec] of Object.entries(properties)) {
|
|
@@ -461,11 +485,27 @@ function interfaceDelegatesFor(adoptedTypes) {
|
|
|
461
485
|
}
|
|
462
486
|
return delegates;
|
|
463
487
|
}
|
|
488
|
+
function recordDeclaredNames(klass, accessors) {
|
|
489
|
+
const proto = klass.prototype;
|
|
490
|
+
const inherited = proto[DECLARED_NAMES];
|
|
491
|
+
const own = {};
|
|
492
|
+
for (const accessor of accessors) {
|
|
493
|
+
own[accessor.memberName] = accessor.propertyName;
|
|
494
|
+
}
|
|
495
|
+
Object.defineProperty(proto, DECLARED_NAMES, { value: { ...inherited, ...own }, enumerable: false });
|
|
496
|
+
}
|
|
464
497
|
function buildPropertyDispatch(source) {
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
498
|
+
const declared = buildAccessors(source);
|
|
499
|
+
recordDeclaredNames(source.klass, declared);
|
|
500
|
+
return { accessors: [...declared], delegates: interfaceDelegatesFor(source.adoptedTypes) };
|
|
501
|
+
}
|
|
502
|
+
/**
|
|
503
|
+
* The GObject name a class registered with `registerClass` installed an accessor under, or
|
|
504
|
+
* `undefined` when the accessor names no property the class declared itself.
|
|
505
|
+
*/
|
|
506
|
+
function getDeclaredPropertyName(object, accessor) {
|
|
507
|
+
const declared = object[DECLARED_NAMES];
|
|
508
|
+
return declared?.[accessor];
|
|
469
509
|
}
|
|
470
510
|
function toNativeProperties(properties) {
|
|
471
511
|
return Object.values(properties).map((pspec, index) => ({
|
|
@@ -473,5 +513,5 @@ function toNativeProperties(properties) {
|
|
|
473
513
|
pspec: getHandle(pspec),
|
|
474
514
|
}));
|
|
475
515
|
}
|
|
476
|
-
export { buildPropertyDispatch, coerceObjectProperty, coercePropertyValue, constructPropertyFor, GET_PROPERTY_VFUNC, makeGetProperty, makeSetProperty, newParamSpecOverride, SET_PROPERTY_VFUNC, toNativeProperties, };
|
|
516
|
+
export { buildPropertyDispatch, coerceObjectProperty, getDeclaredPropertyName, isReadableProperty, coercePropertyValue, constructPropertyFor, GET_PROPERTY_VFUNC, makeGetProperty, makeSetProperty, newParamSpecOverride, SET_PROPERTY_VFUNC, toNativeProperties, };
|
|
477
517
|
//# sourceMappingURL=properties.js.map
|