tranfi 0.0.2 → 0.2.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.
Files changed (151) hide show
  1. package/LICENSE +177 -21
  2. package/NOTICE +8 -0
  3. package/README.md +627 -0
  4. package/app/assets/index-6quYZ5Ap.css +5 -0
  5. package/app/assets/index-BIAIKnrp.js +160 -0
  6. package/app/assets/materialdesignicons-webfont-B7mPwVP_.ttf +0 -0
  7. package/app/assets/materialdesignicons-webfont-CSr8KVlo.eot +0 -0
  8. package/app/assets/materialdesignicons-webfont-Dp5v-WZN.woff2 +0 -0
  9. package/app/assets/materialdesignicons-webfont-PXm3-2wK.woff +0 -0
  10. package/app/index.html +13 -0
  11. package/binding.gyp +121 -0
  12. package/csrc/arena.c +93 -0
  13. package/csrc/batch.c +976 -0
  14. package/csrc/buffer.c +154 -0
  15. package/csrc/cJSON.c +3386 -0
  16. package/csrc/cJSON.h +316 -0
  17. package/csrc/codec_csv.c +1951 -0
  18. package/csrc/codec_jsonl.c +1086 -0
  19. package/csrc/codec_table.c +248 -0
  20. package/csrc/codec_text.c +447 -0
  21. package/csrc/compiler.c +130 -0
  22. package/csrc/config.h +21 -0
  23. package/csrc/date_utils.h +94 -0
  24. package/csrc/dsl.c +5417 -0
  25. package/csrc/dsl.h +22 -0
  26. package/csrc/expr.c +1553 -0
  27. package/csrc/expr.h +58 -0
  28. package/csrc/internal.h +539 -0
  29. package/csrc/ir.c +166 -0
  30. package/csrc/ir.h +208 -0
  31. package/csrc/ir_schema.c +75 -0
  32. package/csrc/ir_serialize.c +166 -0
  33. package/csrc/ir_sql.c +1822 -0
  34. package/csrc/ir_validate.c +576 -0
  35. package/csrc/json_path.c +210 -0
  36. package/csrc/main.c +1241 -0
  37. package/csrc/memory_estimate.c +477 -0
  38. package/csrc/op_acf.c +283 -0
  39. package/csrc/op_across.c +477 -0
  40. package/csrc/op_anomaly.c +255 -0
  41. package/csrc/op_assert.c +761 -0
  42. package/csrc/op_bin.c +248 -0
  43. package/csrc/op_cast.c +523 -0
  44. package/csrc/op_clip.c +99 -0
  45. package/csrc/op_date_trunc.c +355 -0
  46. package/csrc/op_datetime.c +394 -0
  47. package/csrc/op_derive.c +216 -0
  48. package/csrc/op_diff.c +250 -0
  49. package/csrc/op_ewma.c +222 -0
  50. package/csrc/op_explode.c +206 -0
  51. package/csrc/op_fill_down.c +235 -0
  52. package/csrc/op_fill_null.c +268 -0
  53. package/csrc/op_filter.c +181 -0
  54. package/csrc/op_frequency.c +721 -0
  55. package/csrc/op_grep.c +181 -0
  56. package/csrc/op_group_agg.c +1956 -0
  57. package/csrc/op_hash.c +159 -0
  58. package/csrc/op_head.c +84 -0
  59. package/csrc/op_interpolate.c +445 -0
  60. package/csrc/op_join.c +2902 -0
  61. package/csrc/op_json_extract.c +227 -0
  62. package/csrc/op_json_filter.c +384 -0
  63. package/csrc/op_json_flatten.c +293 -0
  64. package/csrc/op_json_schema.c +503 -0
  65. package/csrc/op_label_encode.c +419 -0
  66. package/csrc/op_lag.c +181 -0
  67. package/csrc/op_lead.c +242 -0
  68. package/csrc/op_normalize.c +510 -0
  69. package/csrc/op_onehot.c +457 -0
  70. package/csrc/op_pivot.c +1754 -0
  71. package/csrc/op_quarantine.c +189 -0
  72. package/csrc/op_registry.c +3044 -0
  73. package/csrc/op_rename.c +129 -0
  74. package/csrc/op_replace.c +354 -0
  75. package/csrc/op_rleid.c +297 -0
  76. package/csrc/op_rowid.c +559 -0
  77. package/csrc/op_sample.c +158 -0
  78. package/csrc/op_schema.c +1341 -0
  79. package/csrc/op_schema_infer.c +252 -0
  80. package/csrc/op_select.c +340 -0
  81. package/csrc/op_set.c +3449 -0
  82. package/csrc/op_skip.c +95 -0
  83. package/csrc/op_sort.c +819 -0
  84. package/csrc/op_source_name.c +120 -0
  85. package/csrc/op_split.c +151 -0
  86. package/csrc/op_split_data.c +119 -0
  87. package/csrc/op_stack.c +271 -0
  88. package/csrc/op_stats.c +875 -0
  89. package/csrc/op_step.c +333 -0
  90. package/csrc/op_tail.c +105 -0
  91. package/csrc/op_tee.c +338 -0
  92. package/csrc/op_top.c +357 -0
  93. package/csrc/op_trim.c +138 -0
  94. package/csrc/op_unique.c +1343 -0
  95. package/csrc/op_unpivot.c +193 -0
  96. package/csrc/op_validate.c +648 -0
  97. package/csrc/op_window.c +591 -0
  98. package/csrc/path_policy.c +85 -0
  99. package/csrc/pipeline.c +1088 -0
  100. package/csrc/recipes.c +104 -0
  101. package/csrc/recipes.h +27 -0
  102. package/csrc/report.c +506 -0
  103. package/csrc/report.h +22 -0
  104. package/csrc/selector.c +1097 -0
  105. package/csrc/size_utils.c +348 -0
  106. package/csrc/spill.c +317 -0
  107. package/csrc/spill.h +21 -0
  108. package/csrc/tranfi.h +291 -0
  109. package/csrc/transform.h +209 -0
  110. package/csrc/transform_api.c +2237 -0
  111. package/csrc/transform_categorical.c +923 -0
  112. package/csrc/transform_internal.h +472 -0
  113. package/csrc/transform_json.c +3812 -0
  114. package/csrc/transform_numeric.c +1966 -0
  115. package/csrc/transform_sha256.c +154 -0
  116. package/csrc/transform_wasm.h +162 -0
  117. package/csrc/transform_wasm_api.c +1373 -0
  118. package/csrc/wasm_api.c +218 -0
  119. package/napi_api.c +534 -0
  120. package/napi_transform.c +1648 -0
  121. package/napi_transform.h +8 -0
  122. package/package.json +64 -59
  123. package/scripts/install-native.js +76 -0
  124. package/scripts/prepack.js +64 -0
  125. package/scripts/sync-csrc.js +23 -0
  126. package/src/cli.js +190 -0
  127. package/src/engines/duckdb.js +142 -0
  128. package/src/index.js +925 -0
  129. package/src/memory_policy.js +411 -0
  130. package/src/native.js +18 -0
  131. package/src/pipeline.js +709 -0
  132. package/src/recipe_json.js +80 -0
  133. package/src/server.js +279 -0
  134. package/src/transform.js +403 -0
  135. package/src/transform_error.js +10 -0
  136. package/src/wasm.js +21 -0
  137. package/wasm/index.js +732 -0
  138. package/wasm/package.json +1 -0
  139. package/wasm/tranfi_core.js +0 -0
  140. package/wasm/transform.js +1156 -0
  141. package/wasm/worker.js +786 -0
  142. package/dist/bundle.js +0 -1
  143. package/index.html +0 -18
  144. package/src/app.css +0 -169
  145. package/src/app.js +0 -203
  146. package/src/app.vue +0 -250
  147. package/src/bulma-input.vue +0 -110
  148. package/src/common-inputs.js +0 -28
  149. package/src/main.js +0 -20
  150. package/src/transforms.js +0 -166
  151. package/webpack.config.js +0 -108
package/csrc/buffer.c ADDED
@@ -0,0 +1,154 @@
1
+ /*
2
+ * buffer.c — Growable byte buffer for streaming I/O.
3
+ * Supports write (append), read (consume), and compact operations.
4
+ */
5
+
6
+ #include "internal.h"
7
+ #include "cJSON.h"
8
+ #include <stdlib.h>
9
+ #include <string.h>
10
+
11
+ #define INITIAL_CAP 4096
12
+ #define COMPACT_AFTER_READ_POS (64 * 1024)
13
+ #define MAX_RETAINED_EMPTY_CAP (1024 * 1024)
14
+
15
+ void tf_buffer_init(tf_buffer *b) {
16
+ b->data = NULL;
17
+ b->len = 0;
18
+ b->cap = 0;
19
+ b->read_pos = 0;
20
+ }
21
+
22
+ static int buffer_ensure(tf_buffer *b, size_t needed) {
23
+ if (needed <= b->cap) return TF_OK;
24
+ size_t new_cap = 0;
25
+ if (tf_size_grow_pow2(b->cap, needed, INITIAL_CAP, &new_cap) != TF_OK) return TF_ERROR;
26
+ uint8_t *new_data = tf_reallocarray_checked(b->data, new_cap, sizeof(uint8_t));
27
+ if (!new_data) return TF_ERROR;
28
+ b->data = new_data;
29
+ b->cap = new_cap;
30
+ return TF_OK;
31
+ }
32
+
33
+ int tf_buffer_write(tf_buffer *b, const uint8_t *data, size_t len) {
34
+ if (len == 0) return TF_OK;
35
+ size_t new_len = 0;
36
+ if (tf_size_add(b->len, len, &new_len) != TF_OK) return TF_ERROR;
37
+ if (buffer_ensure(b, new_len) != TF_OK) return TF_ERROR;
38
+ memcpy(b->data + b->len, data, len);
39
+ b->len = new_len;
40
+ return TF_OK;
41
+ }
42
+
43
+ int tf_buffer_write_str(tf_buffer *b, const char *s) {
44
+ return tf_buffer_write(b, (const uint8_t *)s, strlen(s));
45
+ }
46
+
47
+ int tf_buffer_write_line(tf_buffer *b, const char *s) {
48
+ int rc = tf_buffer_write_str(b, s);
49
+ if (rc == TF_OK) rc = tf_buffer_write(b, (const uint8_t *)"\n", 1);
50
+ return rc;
51
+ }
52
+
53
+ int tf_buffer_write_json_line(tf_buffer *b, const cJSON *obj) {
54
+ if (!b || !obj) return TF_ERROR;
55
+ char *printed = cJSON_PrintUnformatted(obj);
56
+ if (!printed) return TF_ERROR;
57
+ int rc = tf_buffer_write_line(b, printed);
58
+ free(printed);
59
+ return rc;
60
+ }
61
+
62
+ int tf_side_write_error(tf_side_channels *side, const char *msg) {
63
+ if (msg) tf_set_last_error(msg);
64
+ if (!side || !side->errors || !msg) return TF_OK;
65
+ return tf_buffer_write_line(side->errors, msg);
66
+ }
67
+
68
+ int tf_json_add_string(cJSON *obj, const char *name, const char *value) {
69
+ return cJSON_AddStringToObject(obj, name, value ? value : "") ? TF_OK : TF_ERROR;
70
+ }
71
+
72
+ int tf_json_add_number(cJSON *obj, const char *name, double value) {
73
+ return cJSON_AddNumberToObject(obj, name, value) ? TF_OK : TF_ERROR;
74
+ }
75
+
76
+ int tf_json_add_bool(cJSON *obj, const char *name, int value) {
77
+ return cJSON_AddBoolToObject(obj, name, value ? 1 : 0) ? TF_OK : TF_ERROR;
78
+ }
79
+
80
+ int tf_json_add_null(cJSON *obj, const char *name) {
81
+ return cJSON_AddNullToObject(obj, name) ? TF_OK : TF_ERROR;
82
+ }
83
+
84
+ int tf_json_add_item(cJSON *obj, const char *name, cJSON *item) {
85
+ if (!obj || !name || !item) {
86
+ cJSON_Delete(item);
87
+ return TF_ERROR;
88
+ }
89
+ if (!cJSON_AddItemToObject(obj, name, item)) {
90
+ cJSON_Delete(item);
91
+ return TF_ERROR;
92
+ }
93
+ return TF_OK;
94
+ }
95
+
96
+ int tf_json_add_array_item(cJSON *arr, cJSON *item) {
97
+ if (!arr || !item) {
98
+ cJSON_Delete(item);
99
+ return TF_ERROR;
100
+ }
101
+ if (!cJSON_AddItemToArray(arr, item)) {
102
+ cJSON_Delete(item);
103
+ return TF_ERROR;
104
+ }
105
+ return TF_OK;
106
+ }
107
+
108
+ size_t tf_buffer_read(tf_buffer *b, uint8_t *out, size_t len) {
109
+ size_t avail = b->len - b->read_pos;
110
+ if (len > avail) len = avail;
111
+ if (len > 0) {
112
+ memcpy(out, b->data + b->read_pos, len);
113
+ b->read_pos += len;
114
+ }
115
+ /* Auto-compact when all data consumed. Keep a modest scratch buffer for
116
+ * future chunks, but release one-off large output buffers after drains. */
117
+ if (b->read_pos == b->len) {
118
+ b->read_pos = 0;
119
+ b->len = 0;
120
+ if (b->cap > MAX_RETAINED_EMPTY_CAP) {
121
+ uint8_t *new_data = tf_reallocarray_checked(b->data, MAX_RETAINED_EMPTY_CAP,
122
+ sizeof(uint8_t));
123
+ if (new_data) {
124
+ b->data = new_data;
125
+ b->cap = MAX_RETAINED_EMPTY_CAP;
126
+ }
127
+ }
128
+ } else if (b->read_pos >= COMPACT_AFTER_READ_POS && b->read_pos > b->cap / 2) {
129
+ tf_buffer_compact(b);
130
+ }
131
+ return len;
132
+ }
133
+
134
+ size_t tf_buffer_readable(const tf_buffer *b) {
135
+ return b->len - b->read_pos;
136
+ }
137
+
138
+ void tf_buffer_compact(tf_buffer *b) {
139
+ if (b->read_pos == 0) return;
140
+ size_t remaining = b->len - b->read_pos;
141
+ if (remaining > 0) {
142
+ memmove(b->data, b->data + b->read_pos, remaining);
143
+ }
144
+ b->len = remaining;
145
+ b->read_pos = 0;
146
+ }
147
+
148
+ void tf_buffer_free(tf_buffer *b) {
149
+ free(b->data);
150
+ b->data = NULL;
151
+ b->len = 0;
152
+ b->cap = 0;
153
+ b->read_pos = 0;
154
+ }