rastack 0.0.59 → 0.0.61
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/CHANGELOG.md +16 -0
- package/README.md +20 -16
- package/dist/rastack-dev.js +6 -1
- package/dist/rastack.d.ts +2 -2
- package/dist/rastack.js +9 -4
- package/dist/wasm/rastack_wasm.js +1 -1
- package/dist/wasm/rastack_wasm_bg.wasm +0 -0
- package/package.json +1 -1
- package/src/rastack-dev.ts +6 -1
- package/src/rastack.ts +13 -4
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
### [0.0.61](https://github.com/theserverkid/reactapistack/compare/v0.0.60...v0.0.61) (2026-07-19)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* **engine:** activate typed Parquet columns from the manifest ([45711c3](https://github.com/theserverkid/reactapistack/commit/45711c3bfc9c69cc2e841e1d8a31bc38728e58de))
|
|
11
|
+
* **engine:** implement local-first sync server endpoints ([10d7e86](https://github.com/theserverkid/reactapistack/commit/10d7e861e8d574e0bb059ef3e3ce3538069d818f))
|
|
12
|
+
* **store:** real typed per-field Parquet columns (Iceberg encoding) ([12d6f1f](https://github.com/theserverkid/reactapistack/commit/12d6f1fbe3d6326f54c79c33a3c9ea576d389f8f))
|
|
13
|
+
|
|
14
|
+
### [0.0.60](https://github.com/theserverkid/reactapistack/compare/v0.0.59...v0.0.60) (2026-07-18)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Bug Fixes
|
|
18
|
+
|
|
19
|
+
* repair perf bench + SAST breakage from the root refactor ([396994b](https://github.com/theserverkid/reactapistack/commit/396994b29f66034b108493a90f561179387c6ce3))
|
|
20
|
+
|
|
5
21
|
### [0.0.59](https://github.com/theserverkid/reactapistack/compare/v0.0.58...v0.0.59) (2026-07-18)
|
|
6
22
|
|
|
7
23
|
|
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@ S3 at the bottom, with a stateless Rust API in between.
|
|
|
15
15
|
└───────────────────────▲─────────────────────┘
|
|
16
16
|
│ your types, resolved via the manifest
|
|
17
17
|
┌───────────────────────┴─────────────────────┐
|
|
18
|
-
│ TypeScript resources →
|
|
18
|
+
│ TypeScript resources → compile step │ API EXPOSURE
|
|
19
19
|
│ FK inferred from types → manifest+OpenAPI │ SURFACE
|
|
20
20
|
└───────────────────────▲─────────────────────┘
|
|
21
21
|
│ schema.rastack.json (manifest)
|
|
@@ -41,7 +41,7 @@ S3 at the bottom, with a stateless Rust API in between.
|
|
|
41
41
|
|
|
42
42
|
| Surface | What it is | Package(s) |
|
|
43
43
|
| --- | --- | --- |
|
|
44
|
-
| **API exposure** | TypeScript resources →
|
|
44
|
+
| **API exposure** | TypeScript resources → in-process compile (FK inferred from types) → manifest + OpenAPI → pass your type to `useData` / `useForm` (typed TanStack Query hooks, no codegen) | the repo root, published as `rastack` (npm) — `components/`, `hooks/`, `theme/`, … |
|
|
45
45
|
| **Database storage** | A stateless Rust API that stores every model as an Apache Iceberg table on object storage — snapshots, ACID on S3, columnar Parquet | `engine/` (`serve/rastack-server`) |
|
|
46
46
|
| **DevOps** | Serverless Rust on AWS Lambda + S3: stateless compute, state in object storage, infrastructure-as-code, scale-to-zero — driven by `rastack init` / `deploy` / `ci` | `deploy/cloudformation/`, `examples/serverless/` |
|
|
47
47
|
|
|
@@ -81,9 +81,9 @@ export const Terminal = resource("airports", "terminal", {
|
|
|
81
81
|
```
|
|
82
82
|
|
|
83
83
|
```bash
|
|
84
|
-
|
|
85
|
-
rastack dev #
|
|
86
|
-
rastack admin # Django-admin-style DB browser
|
|
84
|
+
# No compile step to run — it happens in-process. Author your resources, then:
|
|
85
|
+
rastack dev # compiles + serves your app in-browser over the WASM engine
|
|
86
|
+
rastack admin # Django-admin-style DB browser over the same engine
|
|
87
87
|
```
|
|
88
88
|
|
|
89
89
|
```tsx
|
|
@@ -106,22 +106,26 @@ the importer, the server, and the in-browser WASM engine alike.
|
|
|
106
106
|
|
|
107
107
|
## Ship it — one command per stage
|
|
108
108
|
|
|
109
|
-
The DevOps surface is a CLI too. A new repo
|
|
110
|
-
|
|
111
|
-
|
|
109
|
+
The DevOps surface is a CLI too. A new repo goes from nothing to deployed in
|
|
110
|
+
three commands, and GitHub Actions stays a one-liner because the pipeline lives
|
|
111
|
+
in the CLI, not the YAML:
|
|
112
112
|
|
|
113
113
|
```bash
|
|
114
|
-
rastack
|
|
115
|
-
rastack
|
|
114
|
+
rastack bootstrap # once per AWS account+region: buckets + GitHub OIDC
|
|
115
|
+
rastack init # per app: scaffold .github/workflows + .rastack/deploy.json AND stand the backend up
|
|
116
116
|
rastack ci deploy # what CI runs: build the arm64 Lambda, bake the JWKS, ship the code
|
|
117
117
|
```
|
|
118
118
|
|
|
119
|
-
`
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
`
|
|
123
|
-
`
|
|
124
|
-
|
|
119
|
+
`bootstrap` stands the tier-0 account stack up once (the template-hosting
|
|
120
|
+
buckets + the GitHub OIDC provider), decoupled from any app. `init` is per-app:
|
|
121
|
+
it scaffolds the base GitHub Actions and a deploy config (defaulting the GitHub
|
|
122
|
+
coordinates from your `origin` remote), then stands the serverless backend up —
|
|
123
|
+
deploying `app.yaml`, reading the stack Outputs back into the config, and wiring
|
|
124
|
+
the GitHub repo Variables so the first push deploys. From then on infrastructure
|
|
125
|
+
is fixed and CI only ships code: `rastack ci deploy` builds and runs
|
|
126
|
+
`update-function-code` (`rastack deploy` is an alias for it), so a workflow step
|
|
127
|
+
is just `run: rastack ci deploy` (`rastack ci --plan deploy` prints every step).
|
|
128
|
+
Full guide: **[docs/serverless-deploy.md](docs/serverless-deploy.md)**.
|
|
125
129
|
|
|
126
130
|
## Run the whole API in the browser
|
|
127
131
|
|
package/dist/rastack-dev.js
CHANGED
|
@@ -205,7 +205,12 @@ function startMetro(cwd, port) {
|
|
|
205
205
|
EXPO_NO_TELEMETRY: "1",
|
|
206
206
|
};
|
|
207
207
|
delete env.CI;
|
|
208
|
-
//
|
|
208
|
+
// `shell:true` is deliberate: it keeps the npx / npx.cmd split portable across
|
|
209
|
+
// POSIX and Windows. The only interpolated value is `port`, a number resolved
|
|
210
|
+
// by findFreePort (never user-controlled), so there is no shell-injection
|
|
211
|
+
// surface — suppress the spawn-shell-true audit rule (and its child-process
|
|
212
|
+
// sibling) here rather than break Windows portability.
|
|
213
|
+
// nosemgrep: javascript.lang.security.detect-child-process.detect-child-process, javascript.lang.security.audit.spawn-shell-true.spawn-shell-true
|
|
209
214
|
const child = (0, child_process_1.spawn)(`npx expo start --web --port ${port}`, {
|
|
210
215
|
cwd,
|
|
211
216
|
env,
|
package/dist/rastack.d.ts
CHANGED
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
* rastack dev [--port n] [--warehouse d] Local dev: run your app in-browser over WASM
|
|
16
16
|
* rastack admin [--warehouse dir] [--port n] Full admin console — React UI (rastack/components) over the native server
|
|
17
17
|
* rastack import <file> --resource app.model Load CSV/XLSX/PDF data and validate it (state machine)
|
|
18
|
-
* rastack scan [files...] [--fail-on-pii] Scan CSVs for PII and schema info
|
|
19
|
-
* rastack seed [--env dev] [--source gs://] Load CSVs into Iceberg namespace
|
|
18
|
+
* rastack scan [files...] [--fail-on-pii] (LEGACY, pre-Rust) Scan CSVs for PII and schema info
|
|
19
|
+
* rastack seed [--env dev] [--source gs://] (LEGACY, pre-Rust) Load CSVs into Iceberg namespace
|
|
20
20
|
* rastack bootstrap [--owner o] [--repo r] Stand the tier-0 AWS account stack up (once per account+region)
|
|
21
21
|
* rastack init [--app slug] [--force] Scaffold config + GitHub Actions AND stand the backend up
|
|
22
22
|
* rastack deploy [--plan] Ship code to the Lambda (alias for `rastack ci deploy`)
|
package/dist/rastack.js
CHANGED
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
* rastack dev [--port n] [--warehouse d] Local dev: run your app in-browser over WASM
|
|
17
17
|
* rastack admin [--warehouse dir] [--port n] Full admin console — React UI (rastack/components) over the native server
|
|
18
18
|
* rastack import <file> --resource app.model Load CSV/XLSX/PDF data and validate it (state machine)
|
|
19
|
-
* rastack scan [files...] [--fail-on-pii] Scan CSVs for PII and schema info
|
|
20
|
-
* rastack seed [--env dev] [--source gs://] Load CSVs into Iceberg namespace
|
|
19
|
+
* rastack scan [files...] [--fail-on-pii] (LEGACY, pre-Rust) Scan CSVs for PII and schema info
|
|
20
|
+
* rastack seed [--env dev] [--source gs://] (LEGACY, pre-Rust) Load CSVs into Iceberg namespace
|
|
21
21
|
* rastack bootstrap [--owner o] [--repo r] Stand the tier-0 AWS account stack up (once per account+region)
|
|
22
22
|
* rastack init [--app slug] [--force] Scaffold config + GitHub Actions AND stand the backend up
|
|
23
23
|
* rastack deploy [--plan] Ship code to the Lambda (alias for `rastack ci deploy`)
|
|
@@ -108,9 +108,14 @@ switch (command) {
|
|
|
108
108
|
run("rastack-import.js", rest);
|
|
109
109
|
break;
|
|
110
110
|
case "scan":
|
|
111
|
+
console.error("⚠ `rastack scan` is a legacy command from the pre-Rust architecture and\n" +
|
|
112
|
+
" will be removed; it does not use the object-storage engine.\n");
|
|
111
113
|
run("scan.js");
|
|
112
114
|
break;
|
|
113
115
|
case "seed":
|
|
116
|
+
console.error("⚠ `rastack seed` is a legacy command from the pre-Rust architecture and\n" +
|
|
117
|
+
" will be removed; it emits DDL/shell against an external Iceberg catalog\n" +
|
|
118
|
+
" and does not use the object-storage engine.\n");
|
|
114
119
|
run("seed.js");
|
|
115
120
|
break;
|
|
116
121
|
case "bootstrap":
|
|
@@ -151,8 +156,8 @@ switch (command) {
|
|
|
151
156
|
` rastack dev [--port n] [--warehouse dir] [--app dir] [--no-open] Run your app in-browser over WASM (local dev)\n` +
|
|
152
157
|
` rastack admin [--warehouse dir] [--port n] [--no-open] Full admin console (React UI over the native server; needs a built rastack-server)\n` +
|
|
153
158
|
` rastack import <file.csv|.xlsx|.pdf> --resource app.model [--related app.model=<file>] [--out cleaned.json]\n` +
|
|
154
|
-
` rastack scan [files...] [--fail-on-pii]\n` +
|
|
155
|
-
` rastack seed [--env dev|staging] [--source gs://bucket/ | ./myapp-dev/]\n` +
|
|
159
|
+
` rastack scan [files...] [--fail-on-pii] (legacy, pre-Rust)\n` +
|
|
160
|
+
` rastack seed [--env dev|staging] [--source gs://bucket/ | ./myapp-dev/] (legacy, pre-Rust)\n` +
|
|
156
161
|
` rastack bootstrap [--owner o] [--repo r] [--region r] [--prefix p] [--reuse-oidc] [--print] Stand the AWS account stack up\n` +
|
|
157
162
|
` rastack init [--app slug] [--owner o] [--repo r] [--print] [--no-deploy] Scaffold + stand the backend up\n` +
|
|
158
163
|
` rastack deploy [--plan] Ship code to the Lambda (alias for ci deploy)\n` +
|
|
@@ -375,7 +375,7 @@ function __wbg_get_imports() {
|
|
|
375
375
|
return ret;
|
|
376
376
|
},
|
|
377
377
|
__wbindgen_cast_0000000000000001: function(arg0, arg1) {
|
|
378
|
-
// Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [Externref], shim_idx:
|
|
378
|
+
// Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [Externref], shim_idx: 87, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`.
|
|
379
379
|
const ret = makeMutClosure(arg0, arg1, wasm_bindgen_ac0f9960a408a037___convert__closures_____invoke___wasm_bindgen_ac0f9960a408a037___JsValue__core_9b3796e30d99ddb7___result__Result_____wasm_bindgen_ac0f9960a408a037___JsError___true_);
|
|
380
380
|
return ret;
|
|
381
381
|
},
|
|
Binary file
|
package/package.json
CHANGED
package/src/rastack-dev.ts
CHANGED
|
@@ -193,7 +193,12 @@ function startMetro(cwd: string, port: number): ChildProcess {
|
|
|
193
193
|
EXPO_NO_TELEMETRY: "1",
|
|
194
194
|
};
|
|
195
195
|
delete env.CI;
|
|
196
|
-
//
|
|
196
|
+
// `shell:true` is deliberate: it keeps the npx / npx.cmd split portable across
|
|
197
|
+
// POSIX and Windows. The only interpolated value is `port`, a number resolved
|
|
198
|
+
// by findFreePort (never user-controlled), so there is no shell-injection
|
|
199
|
+
// surface — suppress the spawn-shell-true audit rule (and its child-process
|
|
200
|
+
// sibling) here rather than break Windows portability.
|
|
201
|
+
// nosemgrep: javascript.lang.security.detect-child-process.detect-child-process, javascript.lang.security.audit.spawn-shell-true.spawn-shell-true
|
|
197
202
|
const child = spawn(`npx expo start --web --port ${port}`, {
|
|
198
203
|
cwd,
|
|
199
204
|
env,
|
package/src/rastack.ts
CHANGED
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
* rastack dev [--port n] [--warehouse d] Local dev: run your app in-browser over WASM
|
|
17
17
|
* rastack admin [--warehouse dir] [--port n] Full admin console — React UI (rastack/components) over the native server
|
|
18
18
|
* rastack import <file> --resource app.model Load CSV/XLSX/PDF data and validate it (state machine)
|
|
19
|
-
* rastack scan [files...] [--fail-on-pii] Scan CSVs for PII and schema info
|
|
20
|
-
* rastack seed [--env dev] [--source gs://] Load CSVs into Iceberg namespace
|
|
19
|
+
* rastack scan [files...] [--fail-on-pii] (LEGACY, pre-Rust) Scan CSVs for PII and schema info
|
|
20
|
+
* rastack seed [--env dev] [--source gs://] (LEGACY, pre-Rust) Load CSVs into Iceberg namespace
|
|
21
21
|
* rastack bootstrap [--owner o] [--repo r] Stand the tier-0 AWS account stack up (once per account+region)
|
|
22
22
|
* rastack init [--app slug] [--force] Scaffold config + GitHub Actions AND stand the backend up
|
|
23
23
|
* rastack deploy [--plan] Ship code to the Lambda (alias for `rastack ci deploy`)
|
|
@@ -111,9 +111,18 @@ switch (command) {
|
|
|
111
111
|
run("rastack-import.js", rest);
|
|
112
112
|
break;
|
|
113
113
|
case "scan":
|
|
114
|
+
console.error(
|
|
115
|
+
"⚠ `rastack scan` is a legacy command from the pre-Rust architecture and\n" +
|
|
116
|
+
" will be removed; it does not use the object-storage engine.\n",
|
|
117
|
+
);
|
|
114
118
|
run("scan.js");
|
|
115
119
|
break;
|
|
116
120
|
case "seed":
|
|
121
|
+
console.error(
|
|
122
|
+
"⚠ `rastack seed` is a legacy command from the pre-Rust architecture and\n" +
|
|
123
|
+
" will be removed; it emits DDL/shell against an external Iceberg catalog\n" +
|
|
124
|
+
" and does not use the object-storage engine.\n",
|
|
125
|
+
);
|
|
117
126
|
run("seed.js");
|
|
118
127
|
break;
|
|
119
128
|
case "bootstrap":
|
|
@@ -155,8 +164,8 @@ switch (command) {
|
|
|
155
164
|
` rastack dev [--port n] [--warehouse dir] [--app dir] [--no-open] Run your app in-browser over WASM (local dev)\n` +
|
|
156
165
|
` rastack admin [--warehouse dir] [--port n] [--no-open] Full admin console (React UI over the native server; needs a built rastack-server)\n` +
|
|
157
166
|
` rastack import <file.csv|.xlsx|.pdf> --resource app.model [--related app.model=<file>] [--out cleaned.json]\n` +
|
|
158
|
-
` rastack scan [files...] [--fail-on-pii]\n` +
|
|
159
|
-
` rastack seed [--env dev|staging] [--source gs://bucket/ | ./myapp-dev/]\n` +
|
|
167
|
+
` rastack scan [files...] [--fail-on-pii] (legacy, pre-Rust)\n` +
|
|
168
|
+
` rastack seed [--env dev|staging] [--source gs://bucket/ | ./myapp-dev/] (legacy, pre-Rust)\n` +
|
|
160
169
|
` rastack bootstrap [--owner o] [--repo r] [--region r] [--prefix p] [--reuse-oidc] [--print] Stand the AWS account stack up\n` +
|
|
161
170
|
` rastack init [--app slug] [--owner o] [--repo r] [--print] [--no-deploy] Scaffold + stand the backend up\n` +
|
|
162
171
|
` rastack deploy [--plan] Ship code to the Lambda (alias for ci deploy)\n` +
|