sn-module-gen 0.1.0__py3-none-any.whl
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.
- sn_module_gen-0.1.0.dist-info/METADATA +356 -0
- sn_module_gen-0.1.0.dist-info/RECORD +94 -0
- sn_module_gen-0.1.0.dist-info/WHEEL +5 -0
- sn_module_gen-0.1.0.dist-info/entry_points.txt +2 -0
- sn_module_gen-0.1.0.dist-info/licenses/LICENSE +21 -0
- sn_module_gen-0.1.0.dist-info/top_level.txt +1 -0
- supernote_module_generator/__init__.py +3 -0
- supernote_module_generator/arguments.py +339 -0
- supernote_module_generator/binding_codegen.py +4872 -0
- supernote_module_generator/cli.py +949 -0
- supernote_module_generator/cli_operations.py +1849 -0
- supernote_module_generator/conversion.py +931 -0
- supernote_module_generator/conversion_codegen.py +280 -0
- supernote_module_generator/cpp_class_syntax.py +140 -0
- supernote_module_generator/cpp_declarations.py +421 -0
- supernote_module_generator/cpp_function_syntax.py +312 -0
- supernote_module_generator/cpp_global_functions.py +85 -0
- supernote_module_generator/cpp_lexer.py +290 -0
- supernote_module_generator/cpp_member_semantics.py +113 -0
- supernote_module_generator/cpp_member_shapes.py +204 -0
- supernote_module_generator/cpp_members.py +129 -0
- supernote_module_generator/cpp_object_binding_codegen.py +1745 -0
- supernote_module_generator/cpp_object_runtime_codegen.py +286 -0
- supernote_module_generator/cpp_projection.py +781 -0
- supernote_module_generator/cpp_routes.py +501 -0
- supernote_module_generator/cpp_source_routing.py +83 -0
- supernote_module_generator/cpp_type_syntax.py +137 -0
- supernote_module_generator/cross_family_codegen.py +695 -0
- supernote_module_generator/devconfig.py +188 -0
- supernote_module_generator/diagnostics.py +159 -0
- supernote_module_generator/doctor.py +1835 -0
- supernote_module_generator/errors.py +115 -0
- supernote_module_generator/feature_cli_operations.py +1634 -0
- supernote_module_generator/feature_generator.py +364 -0
- supernote_module_generator/feature_identity.py +85 -0
- supernote_module_generator/feature_model.py +334 -0
- supernote_module_generator/feature_operations.py +475 -0
- supernote_module_generator/feature_workflows.py +544 -0
- supernote_module_generator/filesystem.py +3933 -0
- supernote_module_generator/filesystem_inventory.py +336 -0
- supernote_module_generator/frontend_discovery.py +104 -0
- supernote_module_generator/generation_execution.py +241 -0
- supernote_module_generator/generation_plan.py +688 -0
- supernote_module_generator/generation_service.py +921 -0
- supernote_module_generator/helptext.py +398 -0
- supernote_module_generator/integration.py +42 -0
- supernote_module_generator/integrity_manifest.py +858 -0
- supernote_module_generator/interaction.py +853 -0
- supernote_module_generator/internal_codegen.py +530 -0
- supernote_module_generator/jsi_binding_decisions.py +72 -0
- supernote_module_generator/jvm_codegen.py +2631 -0
- supernote_module_generator/jvm_manifest.py +608 -0
- supernote_module_generator/jvm_object_binding_codegen.py +2491 -0
- supernote_module_generator/jvm_object_runtime_codegen.py +226 -0
- supernote_module_generator/jvm_projection.py +615 -0
- supernote_module_generator/jvm_routes.py +537 -0
- supernote_module_generator/lowering.py +191 -0
- supernote_module_generator/models.py +358 -0
- supernote_module_generator/naming.py +205 -0
- supernote_module_generator/operation_lock.py +151 -0
- supernote_module_generator/platform_tools.py +58 -0
- supernote_module_generator/plugin_build_integration.py +714 -0
- supernote_module_generator/plugin_runtime_codegen.py +2472 -0
- supernote_module_generator/project.py +150 -0
- supernote_module_generator/project_model.py +537 -0
- supernote_module_generator/reachability.py +293 -0
- supernote_module_generator/readme_codegen.py +371 -0
- supernote_module_generator/rendering.py +698 -0
- supernote_module_generator/schemas/command-result.schema.json +261 -0
- supernote_module_generator/schemas.py +22 -0
- supernote_module_generator/semantic.py +1360 -0
- supernote_module_generator/semantic_ir.py +198 -0
- supernote_module_generator/semantic_types.py +260 -0
- supernote_module_generator/source_models.py +491 -0
- supernote_module_generator/subprocesses.py +180 -0
- supernote_module_generator/template_contract.py +824 -0
- supernote_module_generator/templates/runtime.SupernoteConstructor.java.tmpl +10 -0
- supernote_module_generator/templates/runtime.SupernoteCoroutineBridge.kt.tmpl +42 -0
- supernote_module_generator/templates/runtime.SupernoteModule.kt.tmpl +334 -0
- supernote_module_generator/templates/runtime.SupernoteModuleProcessor.kt.tmpl +1211 -0
- supernote_module_generator/templates/runtime.SupernotePluginAsync.java.tmpl +10 -0
- supernote_module_generator/templates/runtime.SupernotePluginExport.java.tmpl +15 -0
- supernote_module_generator/templates/runtime.SupernotePluginInternal.java.tmpl +10 -0
- supernote_module_generator/templates/runtime.SupernotePluginObject.java.tmpl +10 -0
- supernote_module_generator/templates/runtime.SupernotePluginValue.java.tmpl +10 -0
- supernote_module_generator/templates/runtime.processor.provider.tmpl +1 -0
- supernote_module_generator/templates.py +20 -0
- supernote_module_generator/terminal_text.py +110 -0
- supernote_module_generator/transaction.py +4233 -0
- supernote_module_generator/transaction_registry.py +275 -0
- supernote_module_generator/typescript_codegen.py +236 -0
- supernote_module_generator/validation.py +517 -0
- supernote_module_generator/verification.py +51 -0
- supernote_module_generator/windows_authority.py +519 -0
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: sn-module-gen
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Generate typed C/C++ and Kotlin/Java features for existing Supernote plugins
|
|
5
|
+
Home-page: https://github.com/Ziv-Ink/supernote-module-generator
|
|
6
|
+
Author: Ziv-Ink
|
|
7
|
+
Author-email: einkatelier@gmail.com
|
|
8
|
+
License: MIT
|
|
9
|
+
Project-URL: Issues, https://github.com/Ziv-Ink/supernote-module-generator/issues
|
|
10
|
+
Project-URL: PyPI, https://pypi.org/project/sn-module-gen/
|
|
11
|
+
Project-URL: Source, https://github.com/Ziv-Ink/supernote-module-generator
|
|
12
|
+
Keywords: android,code-generator,jni,jsi,react-native,supernote
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Topic :: Software Development :: Code Generators
|
|
23
|
+
Requires-Python: >=3.9
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
License-File: LICENSE
|
|
26
|
+
Provides-Extra: dev
|
|
27
|
+
Requires-Dist: build<2,>=1; extra == "dev"
|
|
28
|
+
Requires-Dist: coverage[toml]<8,>=7.6; extra == "dev"
|
|
29
|
+
Requires-Dist: jsonschema<5,>=4; extra == "dev"
|
|
30
|
+
Requires-Dist: mypy<2,>=1.11; extra == "dev"
|
|
31
|
+
Requires-Dist: pytest<9,>=8; extra == "dev"
|
|
32
|
+
Requires-Dist: ruff<1,>=0.9; extra == "dev"
|
|
33
|
+
Requires-Dist: setuptools>=58; extra == "dev"
|
|
34
|
+
Requires-Dist: twine<7,>=5; extra == "dev"
|
|
35
|
+
Requires-Dist: wheel; extra == "dev"
|
|
36
|
+
Dynamic: license-file
|
|
37
|
+
|
|
38
|
+
# Supernote Module Generator
|
|
39
|
+
|
|
40
|
+
Supernote Module Generator adds typed C/C++ and Kotlin/Java capabilities to an
|
|
41
|
+
existing Supernote plugin. It generates the JSI, JNI, Kotlin Symbol Processing,
|
|
42
|
+
TypeScript, build, and lifecycle code that connects those implementations to
|
|
43
|
+
JavaScript.
|
|
44
|
+
|
|
45
|
+
A feature can use C++, C helper files, Kotlin, and Java together while exposing
|
|
46
|
+
one JavaScript and TypeScript API. The generator connects everything through
|
|
47
|
+
JSI and builds one shared runtime component for the plugin.
|
|
48
|
+
|
|
49
|
+
Native objects keep a reference to the original C++, Kotlin, or Java instance.
|
|
50
|
+
Declared value objects are validated and copied across the bridge. The same
|
|
51
|
+
type system also supports arrays, nullable values, string enums, live object
|
|
52
|
+
fields, returned-only objects, explicit constructors, factories, and async
|
|
53
|
+
object retention.
|
|
54
|
+
|
|
55
|
+
## Install
|
|
56
|
+
|
|
57
|
+
Python 3.9 or newer is required:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
python3 -m pip install sn-module-gen
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Package and command names:
|
|
64
|
+
|
|
65
|
+
```text
|
|
66
|
+
Python distribution: sn-module-gen
|
|
67
|
+
CLI command: sn-module-gen
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Run the CLI from an existing Supernote plugin root.
|
|
71
|
+
|
|
72
|
+
## Add a feature
|
|
73
|
+
|
|
74
|
+
Choose which starter source families to scaffold:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
sn-module-gen add document --starter cpp --yes
|
|
78
|
+
sn-module-gen add document --starter kotlin --yes
|
|
79
|
+
sn-module-gen add document --starter cpp --starter kotlin --yes
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
The guided command shows the same choices as `C/C++ (native)` and
|
|
83
|
+
`Kotlin/Java (JVM)`. These options only choose which example files to create.
|
|
84
|
+
You can add either source family later.
|
|
85
|
+
|
|
86
|
+
The native root compiles C23 and C++23 source. Exported declarations are written
|
|
87
|
+
in C++23. C23 code can be used behind an ordinary C-compatible interface and a
|
|
88
|
+
small marked C++ boundary.
|
|
89
|
+
|
|
90
|
+
Common commands:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
sn-module-gen update document --yes
|
|
94
|
+
sn-module-gen validate document
|
|
95
|
+
sn-module-gen validate --all --build
|
|
96
|
+
sn-module-gen doctor
|
|
97
|
+
sn-module-gen remove document --yes
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
The generator uses the plugin root's optional `devconfig.json` for plugin operations
|
|
101
|
+
and Doctor. `javaHome` selects Gradle's Java, `androidSdk` sets both SDK variables,
|
|
102
|
+
and `adb` is passed to children as `ADB_BIN`. A missing, `null`, malformed, or unusable
|
|
103
|
+
value warns and preserves the corresponding launch-environment value.
|
|
104
|
+
|
|
105
|
+
The overrides apply only while the command runs and do not change the parent shell
|
|
106
|
+
or `android/local.properties` on disk. Build and check paths are source-tree read-only.
|
|
107
|
+
|
|
108
|
+
Doctor reads the literal `compileSdkVersion`, `buildToolsVersion`, and `ndkVersion`;
|
|
109
|
+
it never substitutes another installed NDK. JSON distinguishes `configured`, `found`,
|
|
110
|
+
`selected`, `executable_probed`, `compiler_probed`, `project_built`, and
|
|
111
|
+
`device_tested`. Plain Doctor never infers a build or device test from file detection.
|
|
112
|
+
Use `sn-module-gen doctor --build` for the read-only Gradle/KSP/Kotlin/CMake/JNI/JSI
|
|
113
|
+
gate; `device_tested` stays false until a separate device canary.
|
|
114
|
+
|
|
115
|
+
Removal preserves plugin build output by default. To remove the three known
|
|
116
|
+
generated build directories as part of an explicit removal:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
sn-module-gen remove document --delete-build-files --yes
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
That option targets only `build/`, `android/build/`, and
|
|
123
|
+
`android/app/build/`. `--yes` by itself never enables build-output deletion or
|
|
124
|
+
widens a single-feature target to all features.
|
|
125
|
+
|
|
126
|
+
## Marking exports
|
|
127
|
+
|
|
128
|
+
The generator leaves ordinary source alone. It only processes declarations
|
|
129
|
+
with a Supernote marker.
|
|
130
|
+
|
|
131
|
+
In C++, markers are exact source comments:
|
|
132
|
+
|
|
133
|
+
<!-- sn-module-gen-release-example: readme-cpp android/src/main/cpp/feature.cpp -->
|
|
134
|
+
```cpp
|
|
135
|
+
#include <cstddef>
|
|
136
|
+
#include <cstdint>
|
|
137
|
+
#include <vector>
|
|
138
|
+
|
|
139
|
+
// @SupernotePluginExport
|
|
140
|
+
std::int32_t pageCount() {
|
|
141
|
+
return 42;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// @SupernotePluginInternal
|
|
145
|
+
void rebuildIndex() {}
|
|
146
|
+
|
|
147
|
+
// @SupernotePluginExport
|
|
148
|
+
// @SupernotePluginAsync
|
|
149
|
+
std::vector<std::byte> loadPage(std::int32_t page) {
|
|
150
|
+
(void)page;
|
|
151
|
+
return {};
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
void ordinaryHelper() {} // ignored
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
For Kotlin and Java, use the generated annotations with the same names:
|
|
158
|
+
|
|
159
|
+
<!-- sn-module-gen-release-example: readme-jvm android/src/main/java/com/example/readme_jvm/FeatureApi.kt -->
|
|
160
|
+
```kotlin
|
|
161
|
+
package com.example.readme_jvm
|
|
162
|
+
|
|
163
|
+
import supernote.generated.annotations.SupernotePluginAsync
|
|
164
|
+
import supernote.generated.annotations.SupernotePluginExport
|
|
165
|
+
import supernote.generated.annotations.SupernotePluginInternal
|
|
166
|
+
|
|
167
|
+
@SupernotePluginExport
|
|
168
|
+
fun pageCount(): Int = 42
|
|
169
|
+
|
|
170
|
+
@SupernotePluginInternal
|
|
171
|
+
fun rebuildIndex() = Unit
|
|
172
|
+
|
|
173
|
+
@SupernotePluginExport
|
|
174
|
+
@SupernotePluginAsync
|
|
175
|
+
suspend fun loadPage(page: Int): ByteArray = TODO()
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
`SupernotePluginInternal` generates typed cross-language routing without adding
|
|
179
|
+
the declaration to JavaScript or TypeScript. `SupernotePluginAsync` is always
|
|
180
|
+
explicit; Kotlin `suspend`, C++ future-like types, and blocking implementation
|
|
181
|
+
code do not change the public API on their own.
|
|
182
|
+
|
|
183
|
+
`SupernotePluginObject` declares reference semantics;
|
|
184
|
+
`SupernotePluginValue` declares copied structural semantics. Neither marker
|
|
185
|
+
publishes members or construction by itself. Every JavaScript-visible function,
|
|
186
|
+
method, field, and constructor requires its own explicit marker:
|
|
187
|
+
|
|
188
|
+
<!-- sn-module-gen-release-example: readme-cpp android/src/main/cpp/FeatureTypes.hpp -->
|
|
189
|
+
```cpp
|
|
190
|
+
#pragma once
|
|
191
|
+
|
|
192
|
+
#include <memory>
|
|
193
|
+
#include <string>
|
|
194
|
+
#include <utility>
|
|
195
|
+
#include <vector>
|
|
196
|
+
|
|
197
|
+
// @SupernotePluginValue
|
|
198
|
+
struct Point {
|
|
199
|
+
// @SupernotePluginExport
|
|
200
|
+
double x;
|
|
201
|
+
// @SupernotePluginExport
|
|
202
|
+
double y;
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
// @SupernotePluginObject
|
|
206
|
+
class Stroke {
|
|
207
|
+
public:
|
|
208
|
+
// @SupernoteConstructor
|
|
209
|
+
explicit Stroke(std::vector<Point> points) : points_(std::move(points)) {}
|
|
210
|
+
|
|
211
|
+
// @SupernotePluginExport
|
|
212
|
+
bool intersects(const std::shared_ptr<Stroke> &other) const {
|
|
213
|
+
return other != nullptr;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// @SupernotePluginExport
|
|
217
|
+
std::shared_ptr<Stroke> transformed(Point offset) const {
|
|
218
|
+
(void)offset;
|
|
219
|
+
return std::make_shared<Stroke>(*this);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// @SupernotePluginExport
|
|
223
|
+
std::string label;
|
|
224
|
+
|
|
225
|
+
void resetInternalCache(); // ignored
|
|
226
|
+
|
|
227
|
+
private:
|
|
228
|
+
std::vector<Point> points_;
|
|
229
|
+
};
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
JavaScript receives stable runtime-local identity: if the same live native
|
|
233
|
+
instance is exposed again in one active runtime generation, the same JavaScript
|
|
234
|
+
object is returned. C++ objects use generated shared ownership; JVM objects use
|
|
235
|
+
managed global references and `IsSameObject`. Returned-only objects omit a
|
|
236
|
+
constructor but retain the same methods, argument/result behavior, lifetime,
|
|
237
|
+
and identity. Marked native-object fields are live properties; source
|
|
238
|
+
mutability determines whether they are writable.
|
|
239
|
+
|
|
240
|
+
Kotlin data classes and supported Java records or final classes can declare
|
|
241
|
+
copied values. Kotlin and Java object classes use `@SupernotePluginObject`, and
|
|
242
|
+
constructors exposed to JavaScript use `@SupernoteConstructor`. A marked static
|
|
243
|
+
or top-level function can also return an object; there is no separate factory
|
|
244
|
+
annotation.
|
|
245
|
+
|
|
246
|
+
## Supported types and copied values
|
|
247
|
+
|
|
248
|
+
The generator supports these JavaScript and TypeScript mappings:
|
|
249
|
+
|
|
250
|
+
| Supernote value | JavaScript/TypeScript |
|
|
251
|
+
| --- | --- |
|
|
252
|
+
| `void` | `void` |
|
|
253
|
+
| `bool` | `boolean` |
|
|
254
|
+
| `int32` | `number` |
|
|
255
|
+
| `int64` | `bigint` |
|
|
256
|
+
| `float32`, `float64` | `number` |
|
|
257
|
+
| `string` | `string` |
|
|
258
|
+
| `bytes` | `Uint8Array` |
|
|
259
|
+
| string enum | string-literal union |
|
|
260
|
+
| declared value object | typed plain object |
|
|
261
|
+
| native reference object | nominally branded generated interface |
|
|
262
|
+
| homogeneous array of `T` | `T[]` |
|
|
263
|
+
| nullable `T` | `T \| null` |
|
|
264
|
+
|
|
265
|
+
Strings use UTF-8 when crossing native/JNI boundaries. Byte values use
|
|
266
|
+
copy-based snapshot semantics and pass only the visible `Uint8Array` view.
|
|
267
|
+
Declared value fields are required and strictly validated. Extra JavaScript
|
|
268
|
+
fields are ignored without being read. Values and array containers are copied;
|
|
269
|
+
native-object leaves retain references and identity. Arrays must be dense and
|
|
270
|
+
homogeneous. `null` is accepted only where declared, while omitted values and
|
|
271
|
+
`undefined` remain invalid.
|
|
272
|
+
|
|
273
|
+
The generated boundary does not accept arbitrary JavaScript objects,
|
|
274
|
+
dynamic/JSON trees, callbacks, maps, sets, tuples, general unions, recursive
|
|
275
|
+
value objects, raw pointers, numeric native handles, unsigned or
|
|
276
|
+
platform-dependent C++ integer types, or unmarked structural lookalikes.
|
|
277
|
+
|
|
278
|
+
## Language-family routing
|
|
279
|
+
|
|
280
|
+
The public API does not expose implementation-language details. C++ native
|
|
281
|
+
objects can be passed to C++ routes, while Kotlin and Java objects can be passed
|
|
282
|
+
within the JVM family. Copied values may cross generated C++/JVM internal routes
|
|
283
|
+
when both sides declare the same schema.
|
|
284
|
+
|
|
285
|
+
Cross-language native-object proxies are not generated yet. Passing a C++
|
|
286
|
+
object to a JVM route, or a JVM object to a C++ route, produces a source-located
|
|
287
|
+
generation error. Public TypeScript types remain independent of the
|
|
288
|
+
implementation language.
|
|
289
|
+
|
|
290
|
+
## Async, errors, and lifetime
|
|
291
|
+
|
|
292
|
+
An accepted async call immediately returns a normal `Promise<T>`. Ordinary
|
|
293
|
+
blocking implementations use the plugin's shared bounded worker executor;
|
|
294
|
+
supported Kotlin `suspend` implementations use the generated coroutine adapter.
|
|
295
|
+
Both routes share the same cancellation, teardown, error, and completion rules.
|
|
296
|
+
|
|
297
|
+
Argument count/type/integer/range misuse throws `TypeError` or `RangeError`
|
|
298
|
+
before an operation is accepted. Later failures reject with the exported
|
|
299
|
+
`SupernoteError`, whose stable string `code` includes
|
|
300
|
+
`RESOURCE_EXHAUSTED`, `CANCELLED`, `FEATURE_CLOSED`,
|
|
301
|
+
`IMPLEMENTATION_ERROR`, and `INTERNAL`.
|
|
302
|
+
|
|
303
|
+
Accepted async object methods retain their implementation receiver until
|
|
304
|
+
physical work can no longer access it. Generated code prevents use-after-free
|
|
305
|
+
but does not add a mutex or serial queue around user object state; plugin
|
|
306
|
+
implementations remain responsible for their own thread safety.
|
|
307
|
+
|
|
308
|
+
Generated code destroys C++ receivers and resources away from the JavaScript
|
|
309
|
+
thread. Cleanup may run on different threads and must not access JSI. If a
|
|
310
|
+
resource must be released on a particular thread, the plugin must arrange that
|
|
311
|
+
itself. The generated runtime releases JNI global references; the JVM decides
|
|
312
|
+
when the underlying objects are collected.
|
|
313
|
+
|
|
314
|
+
## Validation
|
|
315
|
+
|
|
316
|
+
The integrity manifest records the required official-template capability. Compare the
|
|
317
|
+
surrounding plugin's Bash and PowerShell launch scripts without writing anything:
|
|
318
|
+
|
|
319
|
+
```bash
|
|
320
|
+
sn-module-gen template status
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
Preview or explicitly apply the recognized capability update:
|
|
324
|
+
|
|
325
|
+
```bash
|
|
326
|
+
sn-module-gen template sync --dry-run
|
|
327
|
+
sn-module-gen template sync --yes
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
Sync is transactional and refuses missing files, unsafe entry kinds, or unrecognized
|
|
331
|
+
script content. A synchronized launch still reports runtime success as unverified
|
|
332
|
+
unless it observes a plugin-correlated marker.
|
|
333
|
+
|
|
334
|
+
`sn-module-gen validate` checks generated structure by default; `--build` also
|
|
335
|
+
invokes Android. A local build proves generation and compilation for that environment,
|
|
336
|
+
not that a particular Supernote firmware, PluginHost, linker namespace, or SELinux
|
|
337
|
+
policy will execute the code. Validate target-device behavior on the intended device.
|
|
338
|
+
|
|
339
|
+
PluginHost can load up to 32 native generations for one plugin component in the
|
|
340
|
+
same process. Restart PluginHost before installing another changed native
|
|
341
|
+
generation after reaching that limit.
|
|
342
|
+
|
|
343
|
+
The generator does not create the surrounding Supernote plugin. Plugin creation,
|
|
344
|
+
installation, and device debugging are covered by the
|
|
345
|
+
[official Supernote plugin documentation](https://docs.supernote.com/).
|
|
346
|
+
|
|
347
|
+
## Contributing
|
|
348
|
+
|
|
349
|
+
See [CONTRIBUTING.md](https://github.com/Ziv-Ink/supernote-module-generator/blob/main/CONTRIBUTING.md)
|
|
350
|
+
for development and validation rules and
|
|
351
|
+
[Architecture](https://github.com/Ziv-Ink/supernote-module-generator/blob/main/docs/ARCHITECTURE.md)
|
|
352
|
+
for the runtime and type model.
|
|
353
|
+
|
|
354
|
+
## License
|
|
355
|
+
|
|
356
|
+
MIT. See [LICENSE](https://github.com/Ziv-Ink/supernote-module-generator/blob/main/LICENSE).
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
sn_module_gen-0.1.0.dist-info/licenses/LICENSE,sha256=TvrAqXBwM296Asz8g6qzZxGBK2-v6N0DNw0wjHh2cXs,1096
|
|
2
|
+
supernote_module_generator/__init__.py,sha256=LMsyRanDnC9WonLoRFErETWcVn8WX13ToVBNRSFHXsk,109
|
|
3
|
+
supernote_module_generator/arguments.py,sha256=I5djZaaBty7MTbulUzSUn5o0QKqxXRBgn_Mzy6Pt_uI,11371
|
|
4
|
+
supernote_module_generator/binding_codegen.py,sha256=S6_wZCip1sHho_XA_0bArr6dx-0lLAPJqt6FQcNm2vo,165517
|
|
5
|
+
supernote_module_generator/cli.py,sha256=1yCXMvx4VZWAiCPmyfvBSOyA0wKvgOMsgshIxjjhppM,34939
|
|
6
|
+
supernote_module_generator/cli_operations.py,sha256=WzpoM7M3zEB1D28O8D-YzH2YYVI9AtR-P06AQTr_qSc,75283
|
|
7
|
+
supernote_module_generator/conversion.py,sha256=ljxs8n4RRFhnXl4KA1juWdgv-9-NRBYnXiTW2r1j2IU,32227
|
|
8
|
+
supernote_module_generator/conversion_codegen.py,sha256=HiP9Q2HscoaZ6iPv7Hpg_ZhUBT-tRxcFPGBeae_2zEA,9146
|
|
9
|
+
supernote_module_generator/cpp_class_syntax.py,sha256=wfoDSZpXinfZ4BdvRRzxSqO-Zt5lyecuni4wDqJUwXU,3991
|
|
10
|
+
supernote_module_generator/cpp_declarations.py,sha256=VawKokAG-CxpwxNUH3agea-I6RB8-i4dxqmr5tCz_Ek,13369
|
|
11
|
+
supernote_module_generator/cpp_function_syntax.py,sha256=0zTDkR9pzPHW_kdoLijlhJT0a1pAWV25Et3VF5QKfnw,10177
|
|
12
|
+
supernote_module_generator/cpp_global_functions.py,sha256=HWm16TWaSDZn5j7Z4WZX2OOiw7Eb2dsK1CYwcZ7w2Tw,2603
|
|
13
|
+
supernote_module_generator/cpp_lexer.py,sha256=uVp2bv1PTfQmls3YlMhQUb0ZVo52aa5RmrHrDLhIi60,8704
|
|
14
|
+
supernote_module_generator/cpp_member_semantics.py,sha256=edfU_-ziH4-lvRFRFbvkmi_IuOjbezSE_g_TspAaLxY,3808
|
|
15
|
+
supernote_module_generator/cpp_member_shapes.py,sha256=3PS1zSrZo_KtTfJ7UMW0d2jXeP5HY8hR1Z-bJaassKo,6365
|
|
16
|
+
supernote_module_generator/cpp_members.py,sha256=6kJ2NoJBDdNWEeUxwvF70g2Dmz7sWUIZSUV706NrC1s,4287
|
|
17
|
+
supernote_module_generator/cpp_object_binding_codegen.py,sha256=hhXcHu7HhWa8d14LbRXz5uwp4R-ny_uKosC6ZZ2gJ1M,78359
|
|
18
|
+
supernote_module_generator/cpp_object_runtime_codegen.py,sha256=xVasD2HeoVgebkT1otM6cOFJlDWs-md4iCHZVrsaK5I,8987
|
|
19
|
+
supernote_module_generator/cpp_projection.py,sha256=VpZOimy7xqvZqLDfDMtB6sS4n_RnsSBag9tIHu2UNFQ,26076
|
|
20
|
+
supernote_module_generator/cpp_routes.py,sha256=Hjz_hAvw4Hp-Ilwcv0R0Lj_q7LxPlqZwYf-gD4LDQ8Y,16509
|
|
21
|
+
supernote_module_generator/cpp_source_routing.py,sha256=0XIZfdCgjTL32aHVbCvQwvmW9c0pVs881eapLtMkkpM,2651
|
|
22
|
+
supernote_module_generator/cpp_type_syntax.py,sha256=1He0fW55sEmlqNNEaPELWUk09v3G2ghN-DwSh47c6xU,4319
|
|
23
|
+
supernote_module_generator/cross_family_codegen.py,sha256=uahrhhRszoIIMvGdNq7kjGJQDlXpcg37yAMTk8yAI4U,34331
|
|
24
|
+
supernote_module_generator/devconfig.py,sha256=dDY_UIrfjGu57rm1pBgryyT7c445aliw51RWZ-evz4E,6570
|
|
25
|
+
supernote_module_generator/diagnostics.py,sha256=eHL_amOyHpfthS48cNz0yrmKnfxlNeukrq3mrkulyRc,5110
|
|
26
|
+
supernote_module_generator/doctor.py,sha256=GOl4rbJYlshgQvCD46t1u2CnxM_4jYinQcI2TJDP0k0,69444
|
|
27
|
+
supernote_module_generator/errors.py,sha256=8NQCaS8HwGyRBg5Oqyu-8fn-P3fbuR4ddwMmQ2MCZWk,2911
|
|
28
|
+
supernote_module_generator/feature_cli_operations.py,sha256=P1Cg3yJ6_gvmkqQjxnyhc9dXWzTN_cetorWrAK6L2gI,65617
|
|
29
|
+
supernote_module_generator/feature_generator.py,sha256=ryf2L-Cog6yNedKJRQggPbxDuUOGaQSp_xTUOyEqTnk,14845
|
|
30
|
+
supernote_module_generator/feature_identity.py,sha256=B9Ssh3bHs4HgKMELVAGvL2nOY-rfPIod0B7rmaz8vdw,2800
|
|
31
|
+
supernote_module_generator/feature_model.py,sha256=D0vKHYtULO28xB8yBQf4UWbApPG8PJoufTiLyWTSRv8,11443
|
|
32
|
+
supernote_module_generator/feature_operations.py,sha256=kS3GLPqX6MKnznskLwlfP17A3XI_bhuMEfSc2-ihKA8,17873
|
|
33
|
+
supernote_module_generator/feature_workflows.py,sha256=nHqeDYM6q6S5_7lWajPolWStwmAvauoSJ6oYpE6Sw44,21917
|
|
34
|
+
supernote_module_generator/filesystem.py,sha256=qZ0YDFGKxb3v7rVpcTGulkbqerF_lPdn1IgqXE6nFXA,135049
|
|
35
|
+
supernote_module_generator/filesystem_inventory.py,sha256=Nt_bngDiZtLNiaJ9dgLWULsPNgNTUfShDDahKPfWZQ4,10264
|
|
36
|
+
supernote_module_generator/frontend_discovery.py,sha256=ssuJnekdCLilpfK21g2iK9unOwLvy5XM_eSPfBGap-w,3896
|
|
37
|
+
supernote_module_generator/generation_execution.py,sha256=qiGjlUZKapqYwGd6gxtjCAngeqaSugwaJKMP1swrv9o,8615
|
|
38
|
+
supernote_module_generator/generation_plan.py,sha256=zPgcHC6Qhei7WU9UdIbkbb5sEpROTRZsqZ9s7wkicFc,24269
|
|
39
|
+
supernote_module_generator/generation_service.py,sha256=JJq2kxbVYJ1Bc6FK-LmSsht8UmDq7PejwuAFVGOjyLM,35678
|
|
40
|
+
supernote_module_generator/helptext.py,sha256=usVDb7Z7atbiDjHyuXo6ohy1jJRf96AXxYWTJ0LTSRs,14348
|
|
41
|
+
supernote_module_generator/integration.py,sha256=dFjxRT_3IsiGcS64-3CIDIMWOAUOStOhT_9ZkHSj9ss,1592
|
|
42
|
+
supernote_module_generator/integrity_manifest.py,sha256=M1kWtnlUlOtpRAW6U7h_q5iKtK5PVU1ssXhoejxCJjA,30617
|
|
43
|
+
supernote_module_generator/interaction.py,sha256=9Knk0jRfu36vinxDwnB4cCPAEEmsCbmMYcs7eMBaYiA,32864
|
|
44
|
+
supernote_module_generator/internal_codegen.py,sha256=4Is2VZ54wpFZEfkyf5d7mh4ZVG7M0smqkVPnwbHqCXE,17772
|
|
45
|
+
supernote_module_generator/jsi_binding_decisions.py,sha256=9hh2wWGAPoKU55iW_WT5-2wrvwCJushUIRrsO4A5Pxc,1959
|
|
46
|
+
supernote_module_generator/jvm_codegen.py,sha256=1XUIojGhYc3Fdddx6oada7GUS8GvnCmoBD9Bxohd05o,102403
|
|
47
|
+
supernote_module_generator/jvm_manifest.py,sha256=hoL4KtvahXRjQylipCg0IbJGSjqKTj4e8fgk8znWaeU,23706
|
|
48
|
+
supernote_module_generator/jvm_object_binding_codegen.py,sha256=lwRbFuZkDx2HdgLAD7Yis6VqX2uIgrzi6QBAIVRE8dM,109421
|
|
49
|
+
supernote_module_generator/jvm_object_runtime_codegen.py,sha256=wGEN6PndbdLK20-lMufC_r_-ZCvgw-By2BzetZ3gels,7867
|
|
50
|
+
supernote_module_generator/jvm_projection.py,sha256=liReyyPlhi-HPAW-wcHb0dRcFo7yO0lDR7bG7lBOZn0,22332
|
|
51
|
+
supernote_module_generator/jvm_routes.py,sha256=faocaYGk-yUTGFdoF8hqBlXKRfRpboj9czLdGPPbWo4,18168
|
|
52
|
+
supernote_module_generator/lowering.py,sha256=6646mLXfcPjeYcsJUraaf4iyrlt0y4xnfeSPWNs35aE,7623
|
|
53
|
+
supernote_module_generator/models.py,sha256=hLCfAzKqzokTuWhKmakK0d5ZLDcPwviTH0h-8yGpfhg,11328
|
|
54
|
+
supernote_module_generator/naming.py,sha256=PlQ9AmDvCgogNmSRmMwUn9dy8zEIKfnt-UX-fYxzhXc,8065
|
|
55
|
+
supernote_module_generator/operation_lock.py,sha256=eaFJzNjnf4qqVHKvS680E2mTf98AgP_2sFLb9z9xzrA,4570
|
|
56
|
+
supernote_module_generator/platform_tools.py,sha256=brppI1kYhjx7jcI1zzkl2sBKb04mnQEC0iwsO020WmQ,1788
|
|
57
|
+
supernote_module_generator/plugin_build_integration.py,sha256=PeoQnpMFc0gvVJeu6iww73Msu0djRQtteaY2TpXV5I0,23622
|
|
58
|
+
supernote_module_generator/plugin_runtime_codegen.py,sha256=KTKxP6mZeOHsOATEb9xQxdiI5hvKy_WwAzioOl4X1e8,84137
|
|
59
|
+
supernote_module_generator/project.py,sha256=DiNHQFCbNeb98Nzoc3UHbZO_dw4DI2hpKSMn2EQdwb8,4801
|
|
60
|
+
supernote_module_generator/project_model.py,sha256=MnZV9u56h8t3M6C8oQes3C9OpjxTeU-WDH_0tBKXSKE,20659
|
|
61
|
+
supernote_module_generator/reachability.py,sha256=XtH8RTZrIx-Fu9cIF_Z5YhvZZqG_A6FBVnjVYbyhn1Y,11523
|
|
62
|
+
supernote_module_generator/readme_codegen.py,sha256=bekCqzlun4Ou98SjCCT6tJb82zhCn_HscoFi1wckvmM,12520
|
|
63
|
+
supernote_module_generator/rendering.py,sha256=ibqwIfF_u6vNdH0k2hIKg_TwfHexmUprTObQNTkyn_k,26391
|
|
64
|
+
supernote_module_generator/schemas.py,sha256=D37ndNouK_O98EOJEepDvAT0sH7QaP28GbK1avcaU1Y,824
|
|
65
|
+
supernote_module_generator/semantic.py,sha256=Se6CYvVsPb-rAltjTTVpRzKeRUeEC3pgNjGIMALTYBQ,51280
|
|
66
|
+
supernote_module_generator/semantic_ir.py,sha256=B8YJk-_vUkpaa8rLwxOX6wsrNgGc26vPX5InTKy7JTY,7368
|
|
67
|
+
supernote_module_generator/semantic_types.py,sha256=elyOB0S0Pn98ge3VLKD4UfJ1-wBROYVJysXv0HaQOZw,9220
|
|
68
|
+
supernote_module_generator/source_models.py,sha256=cEwexHQs5rYZdmDfGIExx6l9jcsstPVRzaUNAqCFNmU,16971
|
|
69
|
+
supernote_module_generator/subprocesses.py,sha256=ZAukQnUCHSy5u9vGDV0YrCGMtT_7CmVnaFCb7oGAn5w,5579
|
|
70
|
+
supernote_module_generator/template_contract.py,sha256=d7NpgGbs-wLg-YW1LYsOu-wwQ3DDGDcShOsD5G5QU5Q,30305
|
|
71
|
+
supernote_module_generator/templates.py,sha256=HTpwG3LELQhgc7veHE6i5ACtVKV5IRUeu0CGhcabXhw,740
|
|
72
|
+
supernote_module_generator/terminal_text.py,sha256=4DezgH73wszRut91ACMttwpvCEFMsLNX4s48bCrKOOc,3140
|
|
73
|
+
supernote_module_generator/transaction.py,sha256=Csv11FRv4bScBRQup9seIrAjSAGi-S2_INHzaTWPphs,162647
|
|
74
|
+
supernote_module_generator/transaction_registry.py,sha256=LeOkA9_HkXkd1TTEJD8cfR8JtWwYZgtGJyugOCDLdLY,8730
|
|
75
|
+
supernote_module_generator/typescript_codegen.py,sha256=pU_ajCdCHOJDhLKVn2wbMWuJIUYrk8-zNJPH85Qk9eA,9322
|
|
76
|
+
supernote_module_generator/validation.py,sha256=S9oEWKMEfhCLXNh3oa2SskSpC_t3wmZ1A-A1n1z29as,19416
|
|
77
|
+
supernote_module_generator/verification.py,sha256=XsjsifP6dwuCGi6EUH1QWB-9aMkCiS3Z0gwSWXXleuc,1625
|
|
78
|
+
supernote_module_generator/windows_authority.py,sha256=PLKwDGjL9whCHMjjtdlKeJ_9fXCA4I7Bz3P__4YaQiI,17927
|
|
79
|
+
supernote_module_generator/schemas/command-result.schema.json,sha256=6addX0l_VfIwSixHrweeOi-FV1woE8pQps09vdAAnRg,7919
|
|
80
|
+
supernote_module_generator/templates/runtime.SupernoteConstructor.java.tmpl,sha256=h4xy3P_s10oP74Xz_be4D4SJb9mV-uz7gg8S9dtxdPM,314
|
|
81
|
+
supernote_module_generator/templates/runtime.SupernoteCoroutineBridge.kt.tmpl,sha256=CJGtMUQsZIG8izIG6WowUdRlY4wUWVB4V3FLSGlSH9c,1152
|
|
82
|
+
supernote_module_generator/templates/runtime.SupernoteModule.kt.tmpl,sha256=G75wYFDXWjBYiATnnWbq66_PfkCo40Z6-gP2yma1QII,12737
|
|
83
|
+
supernote_module_generator/templates/runtime.SupernoteModuleProcessor.kt.tmpl,sha256=w3JMwJ8memH6yHvyB1oAUuhK4P75OaqEDyIkePopWGo,57020
|
|
84
|
+
supernote_module_generator/templates/runtime.SupernotePluginAsync.java.tmpl,sha256=07UrHStW3wIpb3D5lIcz6btwSMX-bT9EgoRUi8Nil9A,309
|
|
85
|
+
supernote_module_generator/templates/runtime.SupernotePluginExport.java.tmpl,sha256=-kDRik7u1cIdP15_DF3t5xWlw1QEkinIVkvK9oPjlaU,402
|
|
86
|
+
supernote_module_generator/templates/runtime.SupernotePluginInternal.java.tmpl,sha256=YTMvoiwKr-CzN9RLthuAsiA_MafzksxgsFJL74vJDGI,312
|
|
87
|
+
supernote_module_generator/templates/runtime.SupernotePluginObject.java.tmpl,sha256=zy4pHMLACJI3iys2IEJKqDTx-qTHmEvwWYy_R4bnWUw,308
|
|
88
|
+
supernote_module_generator/templates/runtime.SupernotePluginValue.java.tmpl,sha256=wOWt3PSYx_GnkLRdNvAF3ZoYl39eWxEuNYxfNiPJBJY,307
|
|
89
|
+
supernote_module_generator/templates/runtime.processor.provider.tmpl,sha256=hSowiChuvyqTQTcb0XRQPiEq2TjNc1w0lDQGgy46HNY,63
|
|
90
|
+
sn_module_gen-0.1.0.dist-info/METADATA,sha256=RJKfN1rG8bKRR61uBQ3n8s9TKp4CznokygiRQAYgYqY,13243
|
|
91
|
+
sn_module_gen-0.1.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
|
|
92
|
+
sn_module_gen-0.1.0.dist-info/entry_points.txt,sha256=ISFBnjs9hv26NRtJAcArSJnz4kP48eShem88_3woIKs,70
|
|
93
|
+
sn_module_gen-0.1.0.dist-info/top_level.txt,sha256=LSO-ujzTAC_V22F-6ML4Q6MI2Xnk-48m-NbO-g2HB2k,27
|
|
94
|
+
sn_module_gen-0.1.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Supernote Module Generator contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
supernote_module_generator
|