bare-ui-kit 0.1.0 → 0.1.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/CMakeLists.txt CHANGED
@@ -8,6 +8,20 @@ project(bare_ui_kit C OBJC)
8
8
  fetch_package("github:holepunchto/bare@1.24.5")
9
9
  fetch_package("github:holepunchto/libpath")
10
10
 
11
+ add_bare_module(bare_ui_kit)
12
+
13
+ target_sources(
14
+ ${bare_ui_kit}
15
+ PRIVATE
16
+ binding.m
17
+ )
18
+
19
+ target_link_libraries(
20
+ ${bare_ui_kit}
21
+ PUBLIC
22
+ "-framework UIKit"
23
+ )
24
+
11
25
  add_executable(bare_runtime)
12
26
 
13
27
  target_sources(
@@ -35,7 +49,6 @@ target_link_libraries(
35
49
  PUBLIC
36
50
  $<LINK_LIBRARY:WHOLE_ARCHIVE,bare_static>
37
51
  PRIVATE
38
- log_static
39
52
  rlimit_static
40
53
  path_static
41
54
  )
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # bare-ui-kit
2
2
 
3
- UIKit runtime for Bare.
3
+ UIKit bindings and runtime for Bare.
4
4
 
5
5
  ```
6
6
  npm i bare-ui-kit
package/binding.js ADDED
@@ -0,0 +1 @@
1
+ module.exports = require.addon()
package/binding.m ADDED
@@ -0,0 +1,39 @@
1
+ #import <assert.h>
2
+ #import <bare.h>
3
+ #import <js.h>
4
+ #import <utf.h>
5
+
6
+ #import <UIKit/UIKit.h>
7
+
8
+ #import "lib/view.h"
9
+ #import "lib/view-controller.h"
10
+ #import "lib/window.h"
11
+
12
+ static js_value_t *
13
+ bare_ui_kit_exports(js_env_t *env, js_value_t *exports) {
14
+ int err;
15
+
16
+ #define V(name, fn) \
17
+ { \
18
+ js_value_t *val; \
19
+ err = js_create_function(env, name, -1, fn, NULL, &val); \
20
+ assert(err == 0); \
21
+ err = js_set_named_property(env, exports, name, val); \
22
+ assert(err == 0); \
23
+ }
24
+
25
+ V("viewHidden", bare_ui_kit_view_hidden)
26
+ V("viewAddSubview", bare_ui_kit_view_add_subview)
27
+
28
+ V("viewControllerInit", bare_ui_kit_view_controller_init)
29
+ V("viewControllerView", bare_ui_kit_view_controller_view)
30
+
31
+ V("windowInit", bare_ui_kit_window_init)
32
+ V("windowRootViewController", bare_ui_kit_window_root_view_controller)
33
+ V("windowMakeKeyWindow", bare_ui_kit_window_make_key_window)
34
+ #undef V
35
+
36
+ return exports;
37
+ }
38
+
39
+ BARE_MODULE(bare_ui_kit, bare_ui_kit_exports)
package/index.js ADDED
@@ -0,0 +1,3 @@
1
+ exports.View = require('./lib/view')
2
+ exports.ViewController = require('./lib/view-controller')
3
+ exports.Window = require('./lib/window')
package/lib/bridging.h ADDED
@@ -0,0 +1,8 @@
1
+ #import <js.h>
2
+
3
+ #import <Foundation/Foundation.h>
4
+
5
+ static void
6
+ bare_ui_kit__on_bridged_release(js_env_t *env, void *data, void *finalize_hint) {
7
+ CFBridgingRelease(data);
8
+ }
package/lib/runtime.m CHANGED
@@ -1,7 +1,6 @@
1
1
  #import <assert.h>
2
2
  #import <bare.h>
3
3
  #import <js.h>
4
- #import <log.h>
5
4
  #import <path.h>
6
5
  #import <rlimit.h>
7
6
  #import <signal.h>
@@ -191,12 +190,11 @@ main(int argc, char *argv[]) {
191
190
  signal(SIGPIPE, SIG_IGN);
192
191
  #endif
193
192
 
194
- err = log_open("bare", 0);
195
- assert(err == 0);
196
-
197
193
  err = rlimit_set(rlimit_open_files, rlimit_infer);
198
194
  assert(err == 0);
199
195
 
196
+ uv_disable_stdio_inheritance();
197
+
200
198
  argv = uv_setup_args(argc, argv);
201
199
 
202
200
  err = uv_barrier_init(&bare__platform_ready, 2);
@@ -0,0 +1,97 @@
1
+ #import <assert.h>
2
+ #import <bare.h>
3
+ #import <js.h>
4
+
5
+ #import <UIKit/UIKit.h>
6
+
7
+ #import "bridging.h"
8
+
9
+ @interface BareViewController : UIViewController {
10
+ @public
11
+ js_env_t *env;
12
+ js_ref_t *ctx;
13
+ }
14
+
15
+ @end
16
+
17
+ @implementation BareViewController
18
+
19
+ - (void)dealloc {
20
+ int err;
21
+
22
+ err = js_delete_reference(env, ctx);
23
+ assert(err == 0);
24
+
25
+ [super dealloc];
26
+ }
27
+
28
+ @end
29
+
30
+ static js_value_t *
31
+ bare_ui_kit_view_controller_init(js_env_t *env, js_callback_info_t *info) {
32
+ int err;
33
+
34
+ size_t argc = 1;
35
+ js_value_t *argv[1];
36
+
37
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
38
+ assert(err == 0);
39
+
40
+ assert(argc == 1);
41
+
42
+ js_value_t *result;
43
+
44
+ @autoreleasepool {
45
+ BareViewController *handle = [[BareViewController alloc] init];
46
+
47
+ err = js_create_external(env, (void *) CFBridgingRetain(handle), bare_ui_kit__on_bridged_release, NULL, &result);
48
+ assert(err == 0);
49
+
50
+ handle->env = env;
51
+
52
+ err = js_create_reference(env, argv[0], 1, &handle->ctx);
53
+ assert(err == 0);
54
+ }
55
+
56
+ return result;
57
+ }
58
+
59
+ static js_value_t *
60
+ bare_ui_kit_view_controller_view(js_env_t *env, js_callback_info_t *info) {
61
+ int err;
62
+
63
+ size_t argc = 2;
64
+ js_value_t *argv[2];
65
+
66
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
67
+ assert(err == 0);
68
+
69
+ assert(argc == 1 || argc == 2);
70
+
71
+ void *handle;
72
+ err = js_get_value_external(env, argv[0], &handle);
73
+ assert(err == 0);
74
+
75
+ js_value_t *result = NULL;
76
+
77
+ @autoreleasepool {
78
+ UIViewController *view_controller = (__bridge UIViewController *) handle;
79
+
80
+ if (argc == 1) {
81
+ UIView *view = view_controller.view;
82
+
83
+ err = js_create_external(env, (void *) CFBridgingRetain(view), bare_ui_kit__on_bridged_release, NULL, &result);
84
+ assert(err == 0);
85
+ } else {
86
+ void *handle;
87
+ err = js_get_value_external(env, argv[1], &handle);
88
+ assert(err == 0);
89
+
90
+ UIView *view = (__bridge UIView *) handle;
91
+
92
+ view_controller.view = view;
93
+ }
94
+ }
95
+
96
+ return result;
97
+ }
@@ -0,0 +1,25 @@
1
+ const EventEmitter = require('bare-events')
2
+ const binding = require('../binding')
3
+ const UIKitView = require('./view')
4
+
5
+ module.exports = class UIKitViewController extends EventEmitter {
6
+ constructor(handle = null) {
7
+ super()
8
+
9
+ this._handle = handle || binding.viewControllerInit(this)
10
+ }
11
+
12
+ get view() {
13
+ return new UIKitView(binding.viewControllerView(this._handle))
14
+ }
15
+
16
+ set view(view) {
17
+ binding.viewControllerView(this._handle, view._handle)
18
+ }
19
+
20
+ [Symbol.for('bare.inspect')]() {
21
+ return {
22
+ __proto__: { constructor: UIKitViewController }
23
+ }
24
+ }
25
+ }
package/lib/view.h ADDED
@@ -0,0 +1,73 @@
1
+
2
+ #import <assert.h>
3
+ #import <bare.h>
4
+ #import <js.h>
5
+
6
+ #import <UIKit/UIKit.h>
7
+
8
+ static js_value_t *
9
+ bare_ui_kit_view_hidden(js_env_t *env, js_callback_info_t *info) {
10
+ int err;
11
+
12
+ size_t argc = 2;
13
+ js_value_t *argv[2];
14
+
15
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
16
+ assert(err == 0);
17
+
18
+ assert(argc == 1 || argc == 2);
19
+
20
+ void *handle;
21
+ err = js_get_value_external(env, argv[0], &handle);
22
+ assert(err == 0);
23
+
24
+ js_value_t *result = NULL;
25
+
26
+ @autoreleasepool {
27
+ UIView *view = (__bridge UIView *) handle;
28
+
29
+ if (argc == 1) {
30
+ err = js_get_boolean(env, view.hidden, &result);
31
+ assert(err == 0);
32
+ } else {
33
+ bool value;
34
+ err = js_get_value_bool(env, argv[1], &value);
35
+ assert(err == 0);
36
+
37
+ view.hidden = value;
38
+ }
39
+ }
40
+
41
+ return result;
42
+ }
43
+
44
+ static js_value_t *
45
+ bare_ui_kit_view_add_subview(js_env_t *env, js_callback_info_t *info) {
46
+ int err;
47
+
48
+ size_t argc = 2;
49
+ js_value_t *argv[2];
50
+
51
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
52
+ assert(err == 0);
53
+
54
+ assert(argc == 2);
55
+
56
+ void *handle;
57
+ err = js_get_value_external(env, argv[0], &handle);
58
+ assert(err == 0);
59
+
60
+ @autoreleasepool {
61
+ UIView *view = (__bridge UIView *) handle;
62
+
63
+ void *handle;
64
+ err = js_get_value_external(env, argv[1], &handle);
65
+ assert(err == 0);
66
+
67
+ UIView *subview = (__bridge UIView *) handle;
68
+
69
+ [view addSubview:subview];
70
+ }
71
+
72
+ return NULL;
73
+ }
package/lib/view.js ADDED
@@ -0,0 +1,29 @@
1
+ const EventEmitter = require('bare-events')
2
+ const binding = require('../binding')
3
+
4
+ module.exports = class UIKitView extends EventEmitter {
5
+ constructor(handle = null) {
6
+ super()
7
+
8
+ this._handle = handle
9
+ }
10
+
11
+ get hidden() {
12
+ return binding.viewHidden(this._handle)
13
+ }
14
+
15
+ set hidden(value) {
16
+ binding.viewHidden(this._handle, value)
17
+ }
18
+
19
+ addSubview(view) {
20
+ binding.viewAddSubview(this._handle, view._handle)
21
+ return this
22
+ }
23
+
24
+ [Symbol.for('bare.inspect')]() {
25
+ return {
26
+ __proto__: { constructor: UIKitView }
27
+ }
28
+ }
29
+ }
package/lib/window.h ADDED
@@ -0,0 +1,124 @@
1
+ #import <assert.h>
2
+ #import <bare.h>
3
+ #import <js.h>
4
+
5
+ #import <UIKit/UIKit.h>
6
+
7
+ #import "bridging.h"
8
+
9
+ @interface BareWindow : UIWindow {
10
+ @public
11
+ js_env_t *env;
12
+ js_ref_t *ctx;
13
+ }
14
+
15
+ @end
16
+
17
+ @implementation BareWindow
18
+
19
+ - (void)dealloc {
20
+ int err;
21
+
22
+ err = js_delete_reference(env, ctx);
23
+ assert(err == 0);
24
+
25
+ [super dealloc];
26
+ }
27
+
28
+ @end
29
+
30
+ static js_value_t *
31
+ bare_ui_kit_window_init(js_env_t *env, js_callback_info_t *info) {
32
+ int err;
33
+
34
+ size_t argc = 1;
35
+ js_value_t *argv[1];
36
+
37
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
38
+ assert(err == 0);
39
+
40
+ assert(argc == 1);
41
+
42
+ js_value_t *result;
43
+
44
+ @autoreleasepool {
45
+ BareWindow *handle = [[BareWindow alloc] init];
46
+
47
+ err = js_create_external(env, (void *) CFBridgingRetain(handle), bare_ui_kit__on_bridged_release, NULL, &result);
48
+ assert(err == 0);
49
+
50
+ handle->env = env;
51
+
52
+ err = js_create_reference(env, argv[0], 1, &handle->ctx);
53
+ assert(err == 0);
54
+ }
55
+
56
+ return result;
57
+ }
58
+
59
+ static js_value_t *
60
+ bare_ui_kit_window_root_view_controller(js_env_t *env, js_callback_info_t *info) {
61
+ int err;
62
+
63
+ size_t argc = 2;
64
+ js_value_t *argv[2];
65
+
66
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
67
+ assert(err == 0);
68
+
69
+ assert(argc == 1 || argc == 2);
70
+
71
+ void *handle;
72
+ err = js_get_value_external(env, argv[0], &handle);
73
+ assert(err == 0);
74
+
75
+ js_value_t *result = NULL;
76
+
77
+ @autoreleasepool {
78
+ UIWindow *window = (__bridge UIWindow *) handle;
79
+
80
+ if (argc == 1) {
81
+ UIViewController *view_controller = window.rootViewController;
82
+
83
+ if (view_controller == NULL) return NULL;
84
+
85
+ err = js_create_external(env, (void *) CFBridgingRetain(handle), bare_ui_kit__on_bridged_release, NULL, &result);
86
+ assert(err == 0);
87
+ } else {
88
+ void *handle;
89
+ err = js_get_value_external(env, argv[1], &handle);
90
+ assert(err == 0);
91
+
92
+ UIViewController *view_controller = (__bridge UIViewController *) handle;
93
+
94
+ window.rootViewController = view_controller;
95
+ }
96
+ }
97
+
98
+ return result;
99
+ }
100
+
101
+ static js_value_t *
102
+ bare_ui_kit_window_make_key_window(js_env_t *env, js_callback_info_t *info) {
103
+ int err;
104
+
105
+ size_t argc = 1;
106
+ js_value_t *argv[1];
107
+
108
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
109
+ assert(err == 0);
110
+
111
+ assert(argc == 1);
112
+
113
+ void *handle;
114
+ err = js_get_value_external(env, argv[0], &handle);
115
+ assert(err == 0);
116
+
117
+ @autoreleasepool {
118
+ BareWindow *window = (__bridge BareWindow *) handle;
119
+
120
+ [window makeKeyWindow];
121
+ }
122
+
123
+ return NULL;
124
+ }
package/lib/window.js ADDED
@@ -0,0 +1,34 @@
1
+ const binding = require('../binding')
2
+ const UIKitView = require('./view')
3
+ const UIKitViewController = require('./view-controller')
4
+
5
+ module.exports = exports = class UIKitWindow extends UIKitView {
6
+ constructor() {
7
+ super()
8
+
9
+ this._handle = binding.windowInit(this)
10
+ }
11
+
12
+ get rootViewController() {
13
+ const handle = binding.windowRootViewController(this._handle)
14
+
15
+ if (handle === undefined) return null
16
+
17
+ return new UIKitViewController(handle)
18
+ }
19
+
20
+ set rootViewController(viewController) {
21
+ binding.windowRootViewController(this._handle, viewController._handle)
22
+ }
23
+
24
+ makeKeyWindow() {
25
+ binding.windowMakeKeyWindow(this._handle)
26
+ return this
27
+ }
28
+
29
+ [Symbol.for('bare.inspect')]() {
30
+ return {
31
+ __proto__: { constructor: UIKitWindow }
32
+ }
33
+ }
34
+ }
package/package.json CHANGED
@@ -1,18 +1,22 @@
1
1
  {
2
2
  "name": "bare-ui-kit",
3
- "version": "0.1.0",
4
- "description": "UIKit runtime for Bare",
3
+ "version": "0.1.1",
4
+ "description": "UIKit bindings and runtime for Bare",
5
5
  "exports": {
6
6
  "./package": "./package.json",
7
+ ".": "./index.js",
7
8
  "./runtime": "./runtime.js"
8
9
  },
9
10
  "files": [
10
11
  "index.js",
12
+ "binding.m",
13
+ "binding.js",
11
14
  "runtime.js",
12
15
  "CMakeLists.txt",
13
16
  "lib",
14
17
  "prebuilds"
15
18
  ],
19
+ "addon": true,
16
20
  "scripts": {
17
21
  "test": "prettier . --check"
18
22
  },
@@ -27,6 +31,7 @@
27
31
  },
28
32
  "homepage": "https://github.com/holepunchto/bare-ui-kit#readme",
29
33
  "dependencies": {
34
+ "bare-events": "^2.8.2",
30
35
  "require-asset": "^1.1.0"
31
36
  },
32
37
  "devDependencies": {
Binary file
Binary file
Binary file