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/op_trim.c ADDED
@@ -0,0 +1,138 @@
1
+ /*
2
+ * op_trim.c — Trim whitespace from string columns.
3
+ *
4
+ * Config: {"columns": ["name", "city"]}
5
+ * or {} for all string columns.
6
+ */
7
+
8
+ #include "internal.h"
9
+ #include "cJSON.h"
10
+ #include <stdlib.h>
11
+ #include <string.h>
12
+ #include <ctype.h>
13
+
14
+ typedef struct {
15
+ char **cols;
16
+ size_t n_cols;
17
+ } trim_state;
18
+
19
+ static void trim_bounds(const char *s, const char **start, size_t *len_out) {
20
+ if (!s) s = "";
21
+ while (*s && isspace((unsigned char)*s)) s++;
22
+ size_t len = strlen(s);
23
+ while (len > 0 && isspace((unsigned char)s[len - 1])) len--;
24
+ *start = s;
25
+ *len_out = len;
26
+ }
27
+
28
+ static int trim_process(tf_step *self, tf_batch *in, tf_batch **out,
29
+ tf_side_channels *side) {
30
+ (void)side;
31
+ trim_state *st = self->state;
32
+ *out = NULL;
33
+
34
+ tf_batch *ob = tf_batch_create(in->n_cols, in->n_rows);
35
+ if (!ob) return TF_ERROR;
36
+ if (tf_batch_clone_schema(ob, in) != TF_OK) {
37
+ tf_batch_free(ob);
38
+ return TF_ERROR;
39
+ }
40
+
41
+ for (size_t r = 0; r < in->n_rows; r++) {
42
+ if (tf_batch_copy_row(ob, r, in, r) != TF_OK) {
43
+ tf_batch_free(ob);
44
+ return TF_ERROR;
45
+ }
46
+ if (tf_batch_expose_row(ob, r) != TF_OK) {
47
+ tf_batch_free(ob);
48
+ return TF_ERROR;
49
+ }
50
+ }
51
+
52
+ /* Trim target columns */
53
+ for (size_t c = 0; c < in->n_cols; c++) {
54
+ if (in->col_types[c] != TF_TYPE_STRING) continue;
55
+ int target = 0;
56
+ if (st->n_cols == 0) {
57
+ target = 1; /* all string cols */
58
+ } else {
59
+ for (size_t k = 0; k < st->n_cols; k++) {
60
+ if (strcmp(in->col_names[c], st->cols[k]) == 0) { target = 1; break; }
61
+ }
62
+ }
63
+ if (!target) continue;
64
+ for (size_t r = 0; r < ob->n_rows; r++) {
65
+ if (tf_batch_is_null(ob, r, c)) continue;
66
+ const char *val = tf_batch_get_string(ob, r, c);
67
+ const char *trimmed = NULL;
68
+ size_t trimmed_len = 0;
69
+ trim_bounds(val, &trimmed, &trimmed_len);
70
+ if (tf_batch_set_string_len(ob, r, c, trimmed, trimmed_len) != TF_OK) {
71
+ tf_batch_free(ob);
72
+ return TF_ERROR;
73
+ }
74
+ }
75
+ }
76
+
77
+ *out = ob;
78
+ return TF_OK;
79
+ }
80
+
81
+ static int trim_flush(tf_step *self, tf_batch **out, tf_side_channels *side) {
82
+ (void)self; (void)side; *out = NULL; return TF_OK;
83
+ }
84
+
85
+ static void trim_state_free(trim_state *st) {
86
+ if (st) {
87
+ if (st->cols) {
88
+ for (size_t i = 0; i < st->n_cols; i++) free(st->cols[i]);
89
+ }
90
+ free(st->cols);
91
+ free(st);
92
+ }
93
+ }
94
+
95
+ static void trim_destroy(tf_step *self) {
96
+ trim_state_free(self ? self->state : NULL);
97
+ free(self);
98
+ }
99
+
100
+ tf_step *tf_trim_create(const cJSON *args) {
101
+ trim_state *st = calloc(1, sizeof(trim_state));
102
+ if (!st) return NULL;
103
+
104
+ if (args) {
105
+ cJSON *columns = cJSON_GetObjectItemCaseSensitive(args, "columns");
106
+ if (columns) {
107
+ if (!cJSON_IsArray(columns)) {
108
+ tf_set_last_error("trim: columns must be an array");
109
+ trim_state_free(st);
110
+ return NULL;
111
+ }
112
+ int n = cJSON_GetArraySize(columns);
113
+ if (n > 0) {
114
+ st->cols = calloc(n, sizeof(char *));
115
+ if (!st->cols) { trim_state_free(st); return NULL; }
116
+ st->n_cols = (size_t)n;
117
+ for (int i = 0; i < n; i++) {
118
+ cJSON *item = cJSON_GetArrayItem(columns, i);
119
+ if (!cJSON_IsString(item) || !item->valuestring || !item->valuestring[0]) {
120
+ tf_set_last_error("trim: column names must be non-empty strings");
121
+ trim_state_free(st);
122
+ return NULL;
123
+ }
124
+ st->cols[i] = strdup(item->valuestring);
125
+ if (!st->cols[i]) { trim_state_free(st); return NULL; }
126
+ }
127
+ }
128
+ }
129
+ }
130
+
131
+ tf_step *step = calloc(1, sizeof(tf_step));
132
+ if (!step) { trim_state_free(st); return NULL; }
133
+ step->process = trim_process;
134
+ step->flush = trim_flush;
135
+ step->destroy = trim_destroy;
136
+ step->state = st;
137
+ return step;
138
+ }