@pikku/addon-graph 0.12.4 → 0.12.6

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 (173) hide show
  1. package/dist/.pikku/addon/pikku-addon-types.gen.d.ts +1 -1
  2. package/dist/.pikku/addon/pikku-addon-types.gen.js +1 -1
  3. package/dist/.pikku/addon/pikku-package.gen.js +1 -1
  4. package/dist/.pikku/agent/pikku-agent-map.gen.d.ts +1 -1
  5. package/dist/.pikku/agent/pikku-agent-types.gen.d.ts +3 -2
  6. package/dist/.pikku/agent/pikku-agent-types.gen.d.ts.map +1 -1
  7. package/dist/.pikku/agent/pikku-agent-types.gen.js.map +1 -1
  8. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +1 -1
  9. package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
  10. package/dist/.pikku/console/pikku-node-types.gen.d.ts +1 -1
  11. package/dist/.pikku/function/pikku-function-types.gen.d.ts +15 -44
  12. package/dist/.pikku/function/pikku-function-types.gen.d.ts.map +1 -1
  13. package/dist/.pikku/function/pikku-function-types.gen.js +3 -12
  14. package/dist/.pikku/function/pikku-function-types.gen.js.map +1 -1
  15. package/dist/.pikku/function/pikku-functions-meta.gen.js +1 -1
  16. package/dist/.pikku/function/pikku-functions-meta.gen.json +350 -33
  17. package/dist/.pikku/function/pikku-functions.gen.js +19 -1
  18. package/dist/.pikku/function/pikku-functions.gen.js.map +1 -1
  19. package/dist/.pikku/http/pikku-http-types.gen.d.ts +2 -24
  20. package/dist/.pikku/http/pikku-http-types.gen.d.ts.map +1 -1
  21. package/dist/.pikku/http/pikku-http-types.gen.js +2 -24
  22. package/dist/.pikku/http/pikku-http-types.gen.js.map +1 -1
  23. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +1 -1
  24. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
  25. package/dist/.pikku/pikku-bootstrap.gen.d.ts +1 -1
  26. package/dist/.pikku/pikku-bootstrap.gen.js +1 -1
  27. package/dist/.pikku/pikku-meta-service.gen.d.ts +1 -1
  28. package/dist/.pikku/pikku-meta-service.gen.js +1 -1
  29. package/dist/.pikku/pikku-services.gen.d.ts +5 -1
  30. package/dist/.pikku/pikku-services.gen.d.ts.map +1 -1
  31. package/dist/.pikku/pikku-services.gen.js +4 -0
  32. package/dist/.pikku/pikku-services.gen.js.map +1 -1
  33. package/dist/.pikku/pikku-types.gen.d.ts +2 -1
  34. package/dist/.pikku/pikku-types.gen.d.ts.map +1 -1
  35. package/dist/.pikku/pikku-types.gen.js +3 -1
  36. package/dist/.pikku/pikku-types.gen.js.map +1 -1
  37. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
  38. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  39. package/dist/.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts +163 -7
  40. package/dist/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts +172 -7
  41. package/dist/.pikku/rpc/pikku-rpc-wirings-map.remote.gen.d.ts +652 -0
  42. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +1 -1
  43. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.json +10 -1
  44. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
  45. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  46. package/dist/.pikku/schemas/register.gen.js +93 -57
  47. package/dist/.pikku/schemas/register.gen.js.map +1 -1
  48. package/dist/.pikku/schemas/schemas/AggregateInput.schema.json +1 -1
  49. package/dist/.pikku/schemas/schemas/BranchInput.schema.json +1 -0
  50. package/dist/.pikku/schemas/schemas/BranchOutput.schema.json +1 -0
  51. package/dist/.pikku/schemas/schemas/ConcatInput.schema.json +1 -0
  52. package/dist/.pikku/schemas/schemas/ConcatOutput.schema.json +1 -0
  53. package/dist/.pikku/schemas/schemas/DateTimeInput.schema.json +1 -1
  54. package/dist/.pikku/schemas/schemas/EditFieldsOutput.schema.json +1 -1
  55. package/dist/.pikku/schemas/schemas/FanoutInput.schema.json +1 -0
  56. package/dist/.pikku/schemas/schemas/FanoutOutput.schema.json +1 -0
  57. package/dist/.pikku/schemas/schemas/HttpRequestInput.schema.json +1 -0
  58. package/dist/.pikku/schemas/schemas/HttpRequestOutput.schema.json +1 -0
  59. package/dist/.pikku/schemas/schemas/ReadFileInput.schema.json +1 -0
  60. package/dist/.pikku/schemas/schemas/ReadFileOutput.schema.json +1 -0
  61. package/dist/.pikku/schemas/schemas/SplitTextInput.schema.json +1 -0
  62. package/dist/.pikku/schemas/schemas/SplitTextOutput.schema.json +1 -0
  63. package/dist/.pikku/schemas/schemas/StopAndErrorInput.schema.json +1 -0
  64. package/dist/.pikku/schemas/schemas/StopAndErrorOutput.schema.json +1 -0
  65. package/dist/.pikku/schemas/schemas/WaitInput.schema.json +1 -0
  66. package/dist/.pikku/schemas/schemas/WaitOutput.schema.json +1 -0
  67. package/dist/.pikku/schemas/schemas/WriteFileInput.schema.json +1 -0
  68. package/dist/.pikku/schemas/schemas/WriteFileOutput.schema.json +1 -0
  69. package/dist/.pikku/scopes/pikku-scope-types.gen.d.ts +6 -0
  70. package/dist/.pikku/scopes/pikku-scope-types.gen.d.ts.map +1 -0
  71. package/dist/.pikku/scopes/pikku-scope-types.gen.js +5 -0
  72. package/dist/.pikku/scopes/pikku-scope-types.gen.js.map +1 -0
  73. package/dist/.pikku/scopes/pikku-scopes-meta.gen.json +1 -0
  74. package/dist/.pikku/scopes/pikku-scopes.gen.d.ts +36 -0
  75. package/dist/.pikku/scopes/pikku-scopes.gen.d.ts.map +1 -0
  76. package/dist/.pikku/scopes/pikku-scopes.gen.js +28 -0
  77. package/dist/.pikku/scopes/pikku-scopes.gen.js.map +1 -0
  78. package/dist/.pikku/secrets/pikku-secret-types.gen.d.ts +1 -1
  79. package/dist/.pikku/secrets/pikku-secret-types.gen.js +1 -1
  80. package/dist/.pikku/secrets/pikku-secrets-meta.gen.json +1 -0
  81. package/dist/.pikku/secrets/pikku-secrets.gen.d.ts +11 -1
  82. package/dist/.pikku/secrets/pikku-secrets.gen.d.ts.map +1 -1
  83. package/dist/.pikku/secrets/pikku-secrets.gen.js +11 -1
  84. package/dist/.pikku/secrets/pikku-secrets.gen.js.map +1 -1
  85. package/dist/.pikku/trigger/pikku-trigger-types.gen.d.ts +1 -1
  86. package/dist/.pikku/trigger/pikku-trigger-types.gen.js +1 -1
  87. package/dist/.pikku/variables/pikku-variable-types.gen.d.ts +1 -1
  88. package/dist/.pikku/variables/pikku-variable-types.gen.js +1 -1
  89. package/dist/.pikku/variables/pikku-variables-meta.gen.json +1 -0
  90. package/dist/.pikku/variables/pikku-variables.gen.d.ts +11 -1
  91. package/dist/.pikku/variables/pikku-variables.gen.d.ts.map +1 -1
  92. package/dist/.pikku/variables/pikku-variables.gen.js +13 -3
  93. package/dist/.pikku/variables/pikku-variables.gen.js.map +1 -1
  94. package/dist/.pikku/workflow/pikku-workflow-map.gen.d.ts +1 -1
  95. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +22 -5
  96. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts.map +1 -1
  97. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +4 -1
  98. package/dist/.pikku/workflow/pikku-workflow-types.gen.js.map +1 -1
  99. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +1 -1
  100. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.d.ts +1 -1
  101. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -1
  102. package/dist/src/functions/array/aggregate.function.d.ts +33 -4
  103. package/dist/src/functions/array/aggregate.function.d.ts.map +1 -1
  104. package/dist/src/functions/array/aggregate.function.js +47 -14
  105. package/dist/src/functions/array/aggregate.function.js.map +1 -1
  106. package/dist/src/functions/array/aggregate.function.test.d.ts +2 -0
  107. package/dist/src/functions/array/aggregate.function.test.d.ts.map +1 -0
  108. package/dist/src/functions/array/aggregate.function.test.js +42 -0
  109. package/dist/src/functions/array/aggregate.function.test.js.map +1 -0
  110. package/dist/src/functions/array/fanout.function.d.ts +32 -0
  111. package/dist/src/functions/array/fanout.function.d.ts.map +1 -0
  112. package/dist/src/functions/array/fanout.function.js +80 -0
  113. package/dist/src/functions/array/fanout.function.js.map +1 -0
  114. package/dist/src/functions/array/fanout.function.test.d.ts +2 -0
  115. package/dist/src/functions/array/fanout.function.test.d.ts.map +1 -0
  116. package/dist/src/functions/array/fanout.function.test.js +66 -0
  117. package/dist/src/functions/array/fanout.function.test.js.map +1 -0
  118. package/dist/src/functions/array/summarize.function.d.ts +4 -4
  119. package/dist/src/functions/data/date-time.function.d.ts +17 -3
  120. package/dist/src/functions/data/date-time.function.d.ts.map +1 -1
  121. package/dist/src/functions/data/date-time.function.js +46 -0
  122. package/dist/src/functions/data/date-time.function.js.map +1 -1
  123. package/dist/src/functions/data/jwt.function.d.ts +4 -4
  124. package/dist/src/functions/data/read-file.function.d.ts +40 -0
  125. package/dist/src/functions/data/read-file.function.d.ts.map +1 -0
  126. package/dist/src/functions/data/read-file.function.js +39 -0
  127. package/dist/src/functions/data/read-file.function.js.map +1 -0
  128. package/dist/src/functions/data/type-convert.function.d.ts +4 -4
  129. package/dist/src/functions/data/wait.function.d.ts +26 -0
  130. package/dist/src/functions/data/wait.function.d.ts.map +1 -0
  131. package/dist/src/functions/data/wait.function.js +29 -0
  132. package/dist/src/functions/data/wait.function.js.map +1 -0
  133. package/dist/src/functions/data/write-file.function.d.ts +40 -0
  134. package/dist/src/functions/data/write-file.function.d.ts.map +1 -0
  135. package/dist/src/functions/data/write-file.function.js +37 -0
  136. package/dist/src/functions/data/write-file.function.js.map +1 -0
  137. package/dist/src/functions/logic/branch.function.d.ts +71 -0
  138. package/dist/src/functions/logic/branch.function.d.ts.map +1 -0
  139. package/dist/src/functions/logic/branch.function.js +213 -0
  140. package/dist/src/functions/logic/branch.function.js.map +1 -0
  141. package/dist/src/functions/logic/stop-and-error.function.d.ts +13 -0
  142. package/dist/src/functions/logic/stop-and-error.function.d.ts.map +1 -0
  143. package/dist/src/functions/logic/stop-and-error.function.js +18 -0
  144. package/dist/src/functions/logic/stop-and-error.function.js.map +1 -0
  145. package/dist/src/functions/network/http-request.function.d.ts +105 -0
  146. package/dist/src/functions/network/http-request.function.d.ts.map +1 -0
  147. package/dist/src/functions/network/http-request.function.js +142 -0
  148. package/dist/src/functions/network/http-request.function.js.map +1 -0
  149. package/dist/src/functions/network/http-request.function.test.d.ts +2 -0
  150. package/dist/src/functions/network/http-request.function.test.d.ts.map +1 -0
  151. package/dist/src/functions/network/http-request.function.test.js +119 -0
  152. package/dist/src/functions/network/http-request.function.test.js.map +1 -0
  153. package/dist/src/functions/transform/concat.function.d.ts +21 -0
  154. package/dist/src/functions/transform/concat.function.d.ts.map +1 -0
  155. package/dist/src/functions/transform/concat.function.js +22 -0
  156. package/dist/src/functions/transform/concat.function.js.map +1 -0
  157. package/dist/src/functions/transform/concat.function.test.d.ts +2 -0
  158. package/dist/src/functions/transform/concat.function.test.d.ts.map +1 -0
  159. package/dist/src/functions/transform/concat.function.test.js +23 -0
  160. package/dist/src/functions/transform/concat.function.test.js.map +1 -0
  161. package/dist/src/functions/transform/edit-fields.function.d.ts +9 -12
  162. package/dist/src/functions/transform/edit-fields.function.d.ts.map +1 -1
  163. package/dist/src/functions/transform/edit-fields.function.js +9 -4
  164. package/dist/src/functions/transform/edit-fields.function.js.map +1 -1
  165. package/dist/src/functions/transform/split-text.function.d.ts +41 -0
  166. package/dist/src/functions/transform/split-text.function.d.ts.map +1 -0
  167. package/dist/src/functions/transform/split-text.function.js +116 -0
  168. package/dist/src/functions/transform/split-text.function.js.map +1 -0
  169. package/dist/src/functions/transform/split-text.function.test.d.ts +2 -0
  170. package/dist/src/functions/transform/split-text.function.test.d.ts.map +1 -0
  171. package/dist/src/functions/transform/split-text.function.test.js +66 -0
  172. package/dist/src/functions/transform/split-text.function.test.js.map +1 -0
  173. package/package.json +3 -3
@@ -0,0 +1,119 @@
1
+ import { describe, test, beforeEach, afterEach } from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { httpRequest } from './http-request.function.js';
4
+ let captured;
5
+ const realFetch = globalThis.fetch;
6
+ const secrets = {
7
+ getSecret: async (key) => {
8
+ const store = {
9
+ 'my-token': 'sk-abc123',
10
+ 'basic-cred': 'alice:s3cret',
11
+ };
12
+ if (!(key in store))
13
+ throw new Error(`Secret "${key}" not found`);
14
+ return store[key];
15
+ },
16
+ };
17
+ const call = (data) => httpRequest.func({ secrets }, data);
18
+ beforeEach(() => {
19
+ captured = undefined;
20
+ globalThis.fetch = (async (url, opts) => {
21
+ captured = {
22
+ url: url.toString(),
23
+ headers: { ...(opts?.headers ?? {}) },
24
+ };
25
+ return {
26
+ status: 200,
27
+ text: async () => JSON.stringify({ ok: true }),
28
+ };
29
+ });
30
+ });
31
+ afterEach(() => {
32
+ globalThis.fetch = realFetch;
33
+ });
34
+ describe('graph:httpRequest auth injection', () => {
35
+ test('no auth descriptor behaves as before — no Authorization header', async () => {
36
+ await call({ method: 'GET', url: 'https://api.test/thing' });
37
+ assert.equal(captured.url, 'https://api.test/thing');
38
+ assert.equal(captured.headers['Authorization'], undefined);
39
+ });
40
+ test('bearer mode injects Authorization: Bearer <secret>', async () => {
41
+ await call({
42
+ method: 'GET',
43
+ url: 'https://api.test/thing',
44
+ auth: { mode: 'bearer', credential: 'my-token' },
45
+ });
46
+ assert.equal(captured.headers['Authorization'], 'Bearer sk-abc123');
47
+ });
48
+ test('apiKeyHeader mode uses the given header name with the raw secret', async () => {
49
+ await call({
50
+ method: 'GET',
51
+ url: 'https://api.test/thing',
52
+ auth: {
53
+ mode: 'apiKeyHeader',
54
+ credential: 'my-token',
55
+ headerName: 'X-API-Key',
56
+ },
57
+ });
58
+ assert.equal(captured.headers['X-API-Key'], 'sk-abc123');
59
+ assert.equal(captured.headers['Authorization'], undefined);
60
+ });
61
+ test('apiKeyHeader defaults the header name to Authorization', async () => {
62
+ await call({
63
+ method: 'GET',
64
+ url: 'https://api.test/thing',
65
+ auth: { mode: 'apiKeyHeader', credential: 'my-token' },
66
+ });
67
+ assert.equal(captured.headers['Authorization'], 'sk-abc123');
68
+ });
69
+ test('apiKeyQuery mode appends the secret as a query param', async () => {
70
+ await call({
71
+ method: 'GET',
72
+ url: 'https://api.test/thing',
73
+ auth: {
74
+ mode: 'apiKeyQuery',
75
+ credential: 'my-token',
76
+ queryName: 'api_key',
77
+ },
78
+ });
79
+ assert.match(captured.url, /[?&]api_key=sk-abc123/);
80
+ });
81
+ test('basic mode base64-encodes user:pass into Authorization: Basic', async () => {
82
+ await call({
83
+ method: 'GET',
84
+ url: 'https://api.test/thing',
85
+ auth: { mode: 'basic', credential: 'basic-cred' },
86
+ });
87
+ const expected = 'Basic ' + Buffer.from('alice:s3cret').toString('base64');
88
+ assert.equal(captured.headers['Authorization'], expected);
89
+ });
90
+ test('extraHeaders are merged and never overwrite an explicit user header', async () => {
91
+ await call({
92
+ method: 'GET',
93
+ url: 'https://api.test/thing',
94
+ headers: { 'Notion-Version': '2099-01-01' },
95
+ auth: {
96
+ mode: 'bearer',
97
+ credential: 'my-token',
98
+ extraHeaders: { 'Notion-Version': '2022-06-28' },
99
+ },
100
+ });
101
+ assert.equal(captured.headers['Notion-Version'], '2099-01-01');
102
+ assert.equal(captured.headers['Authorization'], 'Bearer sk-abc123');
103
+ });
104
+ test('a missing secret throws an error naming the credential', async () => {
105
+ await assert.rejects(call({
106
+ method: 'GET',
107
+ url: 'https://api.test/thing',
108
+ auth: { mode: 'bearer', credential: 'not-provisioned' },
109
+ }), /not-provisioned/);
110
+ });
111
+ test('oauth2 mode throws a clear not-yet-supported error', async () => {
112
+ await assert.rejects(call({
113
+ method: 'GET',
114
+ url: 'https://api.test/thing',
115
+ auth: { mode: 'oauth2', credential: 'my-token' },
116
+ }), /OAuth2/i);
117
+ });
118
+ });
119
+ //# sourceMappingURL=http-request.function.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-request.function.test.js","sourceRoot":"","sources":["../../../../src/functions/network/http-request.function.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { z } from 'zod';
2
+ export declare const ConcatInput: z.ZodObject<{
3
+ inputs: z.ZodArray<z.ZodUnknown>;
4
+ }, z.core.$strip>;
5
+ export declare const ConcatOutput: z.ZodObject<{
6
+ items: z.ZodArray<z.ZodUnknown>;
7
+ }, z.core.$strip>;
8
+ export declare const concat: import("#pikku").PikkuFunctionConfig<{
9
+ inputs: unknown[];
10
+ }, {
11
+ items: unknown[];
12
+ }, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
13
+ inputs: unknown[];
14
+ }, {
15
+ items: unknown[];
16
+ }, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
17
+ inputs: unknown[];
18
+ }, {
19
+ items: unknown[];
20
+ }, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
21
+ //# sourceMappingURL=concat.function.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concat.function.d.ts","sourceRoot":"","sources":["../../../../src/functions/transform/concat.function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,WAAW;;iBAMtB,CAAA;AAEF,eAAO,MAAM,YAAY;;iBAIvB,CAAA;AAIF,eAAO,MAAM,MAAM;;;;;;;;;;;;uEAQjB,CAAA"}
@@ -0,0 +1,22 @@
1
+ import { z } from 'zod';
2
+ import { pikkuSessionlessFunc } from '#pikku';
3
+ export const ConcatInput = z.object({
4
+ inputs: z
5
+ .array(z.unknown())
6
+ .describe('The input streams to concatenate; each array is flattened one level, each non-array counts as a single item'),
7
+ });
8
+ export const ConcatOutput = z.object({
9
+ items: z
10
+ .array(z.unknown())
11
+ .describe('All input items concatenated in input order'),
12
+ });
13
+ export const concat = pikkuSessionlessFunc({
14
+ description: 'Concatenate multiple input streams into one list',
15
+ node: { displayName: 'Concat', category: 'Transform', type: 'action' },
16
+ input: ConcatInput,
17
+ output: ConcatOutput,
18
+ func: async (_services, data) => ({
19
+ items: data.inputs.flatMap((v) => (Array.isArray(v) ? v : [v])),
20
+ }),
21
+ });
22
+ //# sourceMappingURL=concat.function.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concat.function.js","sourceRoot":"","sources":["../../../../src/functions/transform/concat.function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAA;AAE7C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,MAAM,EAAE,CAAC;SACN,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAClB,QAAQ,CACP,6GAA6G,CAC9G;CACJ,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,KAAK,EAAE,CAAC;SACL,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAClB,QAAQ,CAAC,6CAA6C,CAAC;CAC3D,CAAC,CAAA;AAIF,MAAM,CAAC,MAAM,MAAM,GAAG,oBAAoB,CAAC;IACzC,WAAW,EAAE,kDAAkD;IAC/D,IAAI,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE;IACtE,KAAK,EAAE,WAAW;IAClB,MAAM,EAAE,YAAY;IACpB,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAChC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAChE,CAAC;CACH,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=concat.function.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concat.function.test.d.ts","sourceRoot":"","sources":["../../../../src/functions/transform/concat.function.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ import { describe, test } from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { concat } from './concat.function.js';
4
+ const call = (data) => concat.func({}, data);
5
+ describe('graph:concat', () => {
6
+ test('concatenates two array streams in order', async () => {
7
+ const out = await call({
8
+ inputs: [[{ id: 1 }, { id: 2 }], [{ id: 3 }]],
9
+ });
10
+ assert.deepEqual(out, { items: [{ id: 1 }, { id: 2 }, { id: 3 }] });
11
+ });
12
+ test('wraps non-array inputs (a single object counts as one item)', async () => {
13
+ const out = await call({
14
+ inputs: [{ a: 1 }, [{ b: 2 }, { b: 3 }]],
15
+ });
16
+ assert.deepEqual(out, { items: [{ a: 1 }, { b: 2 }, { b: 3 }] });
17
+ });
18
+ test('an empty input list yields an empty stream', async () => {
19
+ const out = await call({ inputs: [] });
20
+ assert.deepEqual(out, { items: [] });
21
+ });
22
+ });
23
+ //# sourceMappingURL=concat.function.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concat.function.test.js","sourceRoot":"","sources":["../../../../src/functions/transform/concat.function.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,MAAM,MAAM,oBAAoB,CAAA;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAE7C,MAAM,IAAI,GAAG,CAAC,IAAS,EAAE,EAAE,CAAE,MAAc,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;AAE1D,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAI,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC;YACrB,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;SAC9C,CAAC,CAAA;QACF,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IACrE,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC;YACrB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SACzC,CAAC,CAAA;QACF,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IAClE,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAA;QACtC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAA;IACtC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -12,9 +12,12 @@ export declare const EditFieldsInput: z.ZodObject<{
12
12
  newName: z.ZodOptional<z.ZodString>;
13
13
  }, z.core.$strip>>;
14
14
  }, z.core.$strip>;
15
- export declare const EditFieldsOutput: z.ZodObject<{
16
- item: z.ZodRecord<z.ZodString, z.ZodUnknown>;
17
- }, z.core.$strip>;
15
+ /**
16
+ * The transformed object, exposed directly as the output so downstream graph
17
+ * nodes can reference its fields (`ref('setNode', 'email')`) rather than having
18
+ * to reach through an `item` wrapper.
19
+ */
20
+ export declare const EditFieldsOutput: z.ZodRecord<z.ZodString, z.ZodUnknown>;
18
21
  export declare const editFields: import("#pikku").PikkuFunctionConfig<{
19
22
  item: Record<string, unknown>;
20
23
  operations: {
@@ -23,9 +26,7 @@ export declare const editFields: import("#pikku").PikkuFunctionConfig<{
23
26
  value?: unknown;
24
27
  newName?: string | undefined;
25
28
  }[];
26
- }, {
27
- item: Record<string, unknown>;
28
- }, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
29
+ }, Record<string, unknown>, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
29
30
  item: Record<string, unknown>;
30
31
  operations: {
31
32
  field: string;
@@ -33,9 +34,7 @@ export declare const editFields: import("#pikku").PikkuFunctionConfig<{
33
34
  value?: unknown;
34
35
  newName?: string | undefined;
35
36
  }[];
36
- }, {
37
- item: Record<string, unknown>;
38
- }, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
37
+ }, Record<string, unknown>, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
39
38
  item: Record<string, unknown>;
40
39
  operations: {
41
40
  field: string;
@@ -43,7 +42,5 @@ export declare const editFields: import("#pikku").PikkuFunctionConfig<{
43
42
  value?: unknown;
44
43
  newName?: string | undefined;
45
44
  }[];
46
- }, {
47
- item: Record<string, unknown>;
48
- }, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
45
+ }, Record<string, unknown>, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
49
46
  //# sourceMappingURL=edit-fields.function.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"edit-fields.function.d.ts","sourceRoot":"","sources":["../../../../src/functions/transform/edit-fields.function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAoBvB,eAAO,MAAM,eAAe;;;;;;;;;;;;iBAO1B,CAAA;AAEF,eAAO,MAAM,gBAAgB;;iBAE3B,CAAA;AA0DF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uEA4BrB,CAAA"}
1
+ {"version":3,"file":"edit-fields.function.d.ts","sourceRoot":"","sources":["../../../../src/functions/transform/edit-fields.function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAoBvB,eAAO,MAAM,eAAe;;;;;;;;;;;;iBAO1B,CAAA;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,wCAEQ,CAAA;AAwDrC,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;gGA4BrB,CAAA"}
@@ -24,9 +24,14 @@ export const EditFieldsInput = z.object({
24
24
  .array(FieldOperationSchema)
25
25
  .describe('List of field operations to perform'),
26
26
  });
27
- export const EditFieldsOutput = z.object({
28
- item: z.record(z.string(), z.unknown()).describe('The transformed object'),
29
- });
27
+ /**
28
+ * The transformed object, exposed directly as the output so downstream graph
29
+ * nodes can reference its fields (`ref('setNode', 'email')`) rather than having
30
+ * to reach through an `item` wrapper.
31
+ */
32
+ export const EditFieldsOutput = z
33
+ .record(z.string(), z.unknown())
34
+ .describe('The transformed object');
30
35
  const setNestedValue = (obj, path, value) => {
31
36
  const keys = path.split('.');
32
37
  let current = obj;
@@ -89,7 +94,7 @@ export const editFields = pikkuSessionlessFunc({
89
94
  break;
90
95
  }
91
96
  }
92
- return { item: result };
97
+ return result;
93
98
  },
94
99
  });
95
100
  //# sourceMappingURL=edit-fields.function.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"edit-fields.function.js","sourceRoot":"","sources":["../../../../src/functions/transform/edit-fields.function.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"edit-fields.function.js","sourceRoot":"","sources":["../../../../src/functions/transform/edit-fields.function.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { z } from 'zod';
2
+ export declare const SplitTextInput: z.ZodObject<{
3
+ text: z.ZodString;
4
+ strategy: z.ZodOptional<z.ZodEnum<{
5
+ token: "token";
6
+ recursive: "recursive";
7
+ character: "character";
8
+ }>>;
9
+ chunkSize: z.ZodOptional<z.ZodNumber>;
10
+ chunkOverlap: z.ZodOptional<z.ZodNumber>;
11
+ separator: z.ZodOptional<z.ZodString>;
12
+ }, z.core.$strip>;
13
+ export declare const SplitTextOutput: z.ZodObject<{
14
+ chunks: z.ZodArray<z.ZodString>;
15
+ }, z.core.$strip>;
16
+ export declare const splitText: import("#pikku").PikkuFunctionConfig<{
17
+ text: string;
18
+ strategy?: "token" | "recursive" | "character" | undefined;
19
+ chunkSize?: number | undefined;
20
+ chunkOverlap?: number | undefined;
21
+ separator?: string | undefined;
22
+ }, {
23
+ chunks: string[];
24
+ }, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
25
+ text: string;
26
+ strategy?: "token" | "recursive" | "character" | undefined;
27
+ chunkSize?: number | undefined;
28
+ chunkOverlap?: number | undefined;
29
+ separator?: string | undefined;
30
+ }, {
31
+ chunks: string[];
32
+ }, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
33
+ text: string;
34
+ strategy?: "token" | "recursive" | "character" | undefined;
35
+ chunkSize?: number | undefined;
36
+ chunkOverlap?: number | undefined;
37
+ separator?: string | undefined;
38
+ }, {
39
+ chunks: string[];
40
+ }, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
41
+ //# sourceMappingURL=split-text.function.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split-text.function.d.ts","sourceRoot":"","sources":["../../../../src/functions/transform/split-text.function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,cAAc;;;;;;;;;;iBA0BzB,CAAA;AAEF,eAAO,MAAM,eAAe;;iBAE1B,CAAA;AA2FF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;uEAqCpB,CAAA"}
@@ -0,0 +1,116 @@
1
+ import { z } from 'zod';
2
+ import { pikkuSessionlessFunc } from '#pikku';
3
+ export const SplitTextInput = z.object({
4
+ text: z.string().describe('The text to split into chunks'),
5
+ strategy: z
6
+ .enum(['recursive', 'character', 'token'])
7
+ .optional()
8
+ .describe('Splitting strategy: recursive (paragraph→line→word hierarchy, default), character (single separator), or token (approximate token budget)'),
9
+ chunkSize: z
10
+ .number()
11
+ .min(1)
12
+ .optional()
13
+ .describe('Maximum size of each chunk (characters, or tokens for the token strategy; default 1000)'),
14
+ chunkOverlap: z
15
+ .number()
16
+ .min(0)
17
+ .optional()
18
+ .describe('Amount of overlap carried between consecutive chunks (default 200)'),
19
+ separator: z
20
+ .string()
21
+ .optional()
22
+ .describe('Separator for the character strategy (default "\\n\\n")'),
23
+ });
24
+ export const SplitTextOutput = z.object({
25
+ chunks: z.array(z.string()).describe('The resulting text chunks'),
26
+ });
27
+ const RECURSIVE_SEPARATORS = ['\n\n', '\n', ' ', ''];
28
+ const CHARS_PER_TOKEN = 4;
29
+ /**
30
+ * Merge a list of pieces (already split on `separator`) into chunks no larger
31
+ * than `chunkSize`, carrying `chunkOverlap` worth of trailing pieces into the
32
+ * next chunk. Mirrors LangChain's `mergeSplits`.
33
+ */
34
+ function mergeSplits(splits, separator, chunkSize, chunkOverlap) {
35
+ const chunks = [];
36
+ const current = [];
37
+ let total = 0;
38
+ const sepLen = separator.length;
39
+ const currentLength = () => {
40
+ if (current.length === 0)
41
+ return 0;
42
+ const contentLen = current.reduce((sum, piece) => sum + piece.length, 0);
43
+ return contentLen + sepLen * (current.length - 1);
44
+ };
45
+ for (const piece of splits) {
46
+ if (piece.length === 0)
47
+ continue;
48
+ const addedLen = piece.length + (current.length > 0 ? sepLen : 0);
49
+ if (total + addedLen > chunkSize && current.length > 0) {
50
+ chunks.push(current.join(separator));
51
+ while (current.length > 0 &&
52
+ (total > chunkOverlap || (total + addedLen > chunkSize && total > 0))) {
53
+ const removed = current.shift();
54
+ total -= removed.length + (current.length > 0 ? sepLen : 0);
55
+ }
56
+ }
57
+ current.push(piece);
58
+ total = currentLength();
59
+ }
60
+ if (current.length > 0)
61
+ chunks.push(current.join(separator));
62
+ return chunks;
63
+ }
64
+ function recursiveSplit(text, separators, chunkSize, chunkOverlap) {
65
+ const [separator, ...rest] = separators.length ? separators : [''];
66
+ const pieces = separator === '' ? text.split('') : text.split(separator);
67
+ const finalChunks = [];
68
+ let goodSplits = [];
69
+ const flush = () => {
70
+ if (goodSplits.length > 0) {
71
+ finalChunks.push(...mergeSplits(goodSplits, separator, chunkSize, chunkOverlap));
72
+ goodSplits = [];
73
+ }
74
+ };
75
+ for (const piece of pieces) {
76
+ if (piece.length <= chunkSize) {
77
+ goodSplits.push(piece);
78
+ }
79
+ else {
80
+ flush();
81
+ if (rest.length > 0) {
82
+ finalChunks.push(...recursiveSplit(piece, rest, chunkSize, chunkOverlap));
83
+ }
84
+ else {
85
+ finalChunks.push(piece);
86
+ }
87
+ }
88
+ }
89
+ flush();
90
+ return finalChunks;
91
+ }
92
+ export const splitText = pikkuSessionlessFunc({
93
+ description: 'Split text into overlapping chunks for embedding/RAG (recursive, character, or token strategy)',
94
+ node: { displayName: 'Split Text', category: 'Transform', type: 'action' },
95
+ input: SplitTextInput,
96
+ output: SplitTextOutput,
97
+ func: async (_services, data) => {
98
+ const strategy = data.strategy ?? 'recursive';
99
+ const chunkOverlap = data.chunkOverlap ?? 200;
100
+ const requestedSize = data.chunkSize ?? 1000;
101
+ if (data.text.length === 0)
102
+ return { chunks: [] };
103
+ let chunks;
104
+ if (strategy === 'character') {
105
+ const separator = data.separator ?? '\n\n';
106
+ chunks = mergeSplits(separator === '' ? data.text.split('') : data.text.split(separator), separator, requestedSize, chunkOverlap);
107
+ }
108
+ else {
109
+ const chunkSize = strategy === 'token' ? requestedSize * CHARS_PER_TOKEN : requestedSize;
110
+ const overlap = strategy === 'token' ? chunkOverlap * CHARS_PER_TOKEN : chunkOverlap;
111
+ chunks = recursiveSplit(data.text, RECURSIVE_SEPARATORS, chunkSize, Math.min(overlap, chunkSize - 1));
112
+ }
113
+ return { chunks: chunks.filter((c) => c.length > 0) };
114
+ },
115
+ });
116
+ //# sourceMappingURL=split-text.function.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split-text.function.js","sourceRoot":"","sources":["../../../../src/functions/transform/split-text.function.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=split-text.function.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split-text.function.test.d.ts","sourceRoot":"","sources":["../../../../src/functions/transform/split-text.function.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,66 @@
1
+ import { describe, test } from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { splitText } from './split-text.function.js';
4
+ const call = (data) => splitText.func({}, data);
5
+ describe('graph:splitText', () => {
6
+ test('text shorter than chunkSize returns a single chunk', async () => {
7
+ const out = await call({ text: 'hello world', chunkSize: 100 });
8
+ assert.deepEqual(out, { chunks: ['hello world'] });
9
+ });
10
+ test('recursive strategy splits on paragraph boundaries into bounded chunks', async () => {
11
+ const para = 'a'.repeat(40);
12
+ const text = [para, para, para].join('\n\n');
13
+ const out = await call({
14
+ text,
15
+ strategy: 'recursive',
16
+ chunkSize: 50,
17
+ chunkOverlap: 0,
18
+ });
19
+ assert.ok(out.chunks.length >= 3, 'expected each 40-char paragraph in its own chunk');
20
+ for (const c of out.chunks) {
21
+ assert.ok(c.length <= 50, `chunk exceeded chunkSize: ${c.length}`);
22
+ }
23
+ // reconstructable content — every paragraph survives
24
+ assert.ok(out.chunks.every((c) => c.includes('a')));
25
+ });
26
+ test('default strategy behaves as recursive', async () => {
27
+ const text = ['x'.repeat(30), 'y'.repeat(30)].join('\n\n');
28
+ const withDefault = await call({ text, chunkSize: 40, chunkOverlap: 0 });
29
+ const withRecursive = await call({
30
+ text,
31
+ strategy: 'recursive',
32
+ chunkSize: 40,
33
+ chunkOverlap: 0,
34
+ });
35
+ assert.deepEqual(withDefault, withRecursive);
36
+ });
37
+ test('overlap carries trailing content into the next chunk', async () => {
38
+ const words = Array.from({ length: 12 }, (_, i) => `w${i}`).join(' ');
39
+ const out = await call({
40
+ text: words,
41
+ strategy: 'recursive',
42
+ chunkSize: 12,
43
+ chunkOverlap: 6,
44
+ });
45
+ assert.ok(out.chunks.length > 1, 'expected multiple chunks');
46
+ // consecutive chunks share at least one word due to overlap
47
+ const first = out.chunks[0].split(' ');
48
+ const second = out.chunks[1].split(' ');
49
+ assert.ok(first.some((w) => second.includes(w)), 'expected overlapping word between consecutive chunks');
50
+ });
51
+ test('character strategy splits on the double-newline separator', async () => {
52
+ const text = ['one', 'two', 'three'].join('\n\n');
53
+ const out = await call({
54
+ text,
55
+ strategy: 'character',
56
+ chunkSize: 3,
57
+ chunkOverlap: 0,
58
+ });
59
+ assert.deepEqual(out.chunks, ['one', 'two', 'three']);
60
+ });
61
+ test('empty text yields no chunks', async () => {
62
+ const out = await call({ text: '', chunkSize: 100 });
63
+ assert.deepEqual(out, { chunks: [] });
64
+ });
65
+ });
66
+ //# sourceMappingURL=split-text.function.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split-text.function.test.js","sourceRoot":"","sources":["../../../../src/functions/transform/split-text.function.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pikku/addon-graph",
3
- "version": "0.12.4",
3
+ "version": "0.12.6",
4
4
  "type": "module",
5
5
  "imports": {
6
6
  "#pikku": {
@@ -31,9 +31,9 @@
31
31
  "zod": "^4"
32
32
  },
33
33
  "devDependencies": {
34
- "@pikku/cli": "^0.12.46",
34
+ "@pikku/cli": "^0.12.83",
35
35
  "@pikku/core": "*",
36
- "typescript": "^5.9.3",
36
+ "typescript": "^6.0.3",
37
37
  "zod": "^4"
38
38
  },
39
39
  "dependencies": {