@bitflow/core 0.4.0 → 0.5.3

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 (90) hide show
  1. package/dist/{types/bits.d.ts → bits.d.ts} +2 -3
  2. package/dist/{cjs/bitsSchema.d.ts → bitsSchema.d.ts} +0 -0
  3. package/dist/{cjs/do.d.ts → do.d.ts} +0 -0
  4. package/dist/{cjs/doSchema.d.ts → doSchema.d.ts} +94 -18
  5. package/dist/{cjs/findLast.d.ts → findLast.d.ts} +0 -0
  6. package/dist/{types/flow.d.ts → flow.d.ts} +7 -1
  7. package/dist/{types/flowSchema.d.ts → flowSchema.d.ts} +76 -12
  8. package/dist/{cjs/groupBy.d.ts → groupBy.d.ts} +0 -0
  9. package/dist/index.cjs.js +732 -0
  10. package/dist/index.cjs.js.map +7 -0
  11. package/dist/{cjs/index.d.ts → index.d.ts} +0 -0
  12. package/dist/index.esm.mjs +703 -0
  13. package/dist/index.esm.mjs.map +7 -0
  14. package/dist/{cjs/lerpColor.d.ts → lerpColor.d.ts} +0 -0
  15. package/dist/{cjs/levenshtein.d.ts → levenshtein.d.ts} +0 -0
  16. package/dist/{cjs/uuid.d.ts → uuid.d.ts} +0 -0
  17. package/package.json +19 -23
  18. package/CHANGELOG.md +0 -32
  19. package/dist/cjs/bits.d.ts +0 -129
  20. package/dist/cjs/bits.js +0 -30
  21. package/dist/cjs/bits.js.map +0 -1
  22. package/dist/cjs/bitsSchema.js +0 -77
  23. package/dist/cjs/bitsSchema.js.map +0 -1
  24. package/dist/cjs/do.js +0 -85
  25. package/dist/cjs/do.js.map +0 -1
  26. package/dist/cjs/doSchema.js +0 -38
  27. package/dist/cjs/doSchema.js.map +0 -1
  28. package/dist/cjs/findLast.js +0 -13
  29. package/dist/cjs/findLast.js.map +0 -1
  30. package/dist/cjs/flow.d.ts +0 -163
  31. package/dist/cjs/flow.js +0 -98
  32. package/dist/cjs/flow.js.map +0 -1
  33. package/dist/cjs/flowSchema.d.ts +0 -2456
  34. package/dist/cjs/flowSchema.js +0 -251
  35. package/dist/cjs/flowSchema.js.map +0 -1
  36. package/dist/cjs/groupBy.js +0 -27
  37. package/dist/cjs/groupBy.js.map +0 -1
  38. package/dist/cjs/index.js +0 -24
  39. package/dist/cjs/index.js.map +0 -1
  40. package/dist/cjs/lerpColor.js +0 -9
  41. package/dist/cjs/lerpColor.js.map +0 -1
  42. package/dist/cjs/levenshtein.js +0 -88
  43. package/dist/cjs/levenshtein.js.map +0 -1
  44. package/dist/cjs/uuid.js +0 -16
  45. package/dist/cjs/uuid.js.map +0 -1
  46. package/dist/esm/bits.d.ts +0 -129
  47. package/dist/esm/bits.js +0 -19
  48. package/dist/esm/bits.js.map +0 -1
  49. package/dist/esm/bitsSchema.d.ts +0 -150
  50. package/dist/esm/bitsSchema.js +0 -55
  51. package/dist/esm/bitsSchema.js.map +0 -1
  52. package/dist/esm/do.d.ts +0 -37
  53. package/dist/esm/do.js +0 -62
  54. package/dist/esm/do.js.map +0 -1
  55. package/dist/esm/doSchema.d.ts +0 -1402
  56. package/dist/esm/doSchema.js +0 -23
  57. package/dist/esm/doSchema.js.map +0 -1
  58. package/dist/esm/findLast.d.ts +0 -1
  59. package/dist/esm/findLast.js +0 -9
  60. package/dist/esm/findLast.js.map +0 -1
  61. package/dist/esm/flow.d.ts +0 -163
  62. package/dist/esm/flow.js +0 -88
  63. package/dist/esm/flow.js.map +0 -1
  64. package/dist/esm/flowSchema.d.ts +0 -2456
  65. package/dist/esm/flowSchema.js +0 -199
  66. package/dist/esm/flowSchema.js.map +0 -1
  67. package/dist/esm/groupBy.d.ts +0 -1
  68. package/dist/esm/groupBy.js +0 -23
  69. package/dist/esm/groupBy.js.map +0 -1
  70. package/dist/esm/index.d.ts +0 -11
  71. package/dist/esm/index.js +0 -12
  72. package/dist/esm/index.js.map +0 -1
  73. package/dist/esm/lerpColor.d.ts +0 -1
  74. package/dist/esm/lerpColor.js +0 -5
  75. package/dist/esm/lerpColor.js.map +0 -1
  76. package/dist/esm/levenshtein.d.ts +0 -1
  77. package/dist/esm/levenshtein.js +0 -84
  78. package/dist/esm/levenshtein.js.map +0 -1
  79. package/dist/esm/uuid.d.ts +0 -1
  80. package/dist/esm/uuid.js +0 -12
  81. package/dist/esm/uuid.js.map +0 -1
  82. package/dist/types/bitsSchema.d.ts +0 -150
  83. package/dist/types/do.d.ts +0 -37
  84. package/dist/types/doSchema.d.ts +0 -1402
  85. package/dist/types/findLast.d.ts +0 -1
  86. package/dist/types/groupBy.d.ts +0 -1
  87. package/dist/types/index.d.ts +0 -11
  88. package/dist/types/lerpColor.d.ts +0 -1
  89. package/dist/types/levenshtein.d.ts +0 -1
  90. package/dist/types/uuid.d.ts +0 -1
@@ -1,23 +0,0 @@
1
- import { z } from "zod";
2
- import { TaskAnswerSchema, TaskResultSchema } from "./bitsSchema";
3
- import { makeInteractiveFlowNodeSchema } from "./flowSchema";
4
- export const makeDoBaseTrySchema = (flowNodeSchemas) => z.object({
5
- node: makeInteractiveFlowNodeSchema(flowNodeSchemas),
6
- startDate: z.date(),
7
- try: z.number(),
8
- status: z.string(),
9
- });
10
- export const makeDoStartedTry = (flowNodeSchemas) => makeDoBaseTrySchema(flowNodeSchemas).merge(z.object({
11
- status: z.literal("started"),
12
- }));
13
- export const makeDoFinishedTry = (flowNodeSchemas) => makeDoBaseTrySchema(flowNodeSchemas).merge(z.object({
14
- status: z.literal("finished"),
15
- endDate: z.date(),
16
- answer: TaskAnswerSchema.optional(),
17
- result: TaskResultSchema.optional(),
18
- }));
19
- export const makeDoSkippedTry = (flowNodeSchemas) => makeDoBaseTrySchema(flowNodeSchemas).merge(z.object({
20
- status: z.literal("skipped"),
21
- endDate: z.date(),
22
- }));
23
- //# sourceMappingURL=doSchema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"doSchema.js","sourceRoot":"","sources":["../../src/doSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAa,MAAM,KAAK,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAU7D,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,eAAqC,EAAE,EAAE,CAC3E,CAAC,CAAC,MAAM,CAAC;IACP,IAAI,EAAE,6BAA6B,CAAC,eAAe,CAAC;IACpD,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE;IACnB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;CACnB,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,eAAqC,EAAE,EAAE,CACxE,mBAAmB,CAAC,eAAe,CAAC,CAAC,KAAK,CACxC,CAAC,CAAC,MAAM,CAAC;IACP,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;CAC7B,CAAC,CACH,CAAC;AAEJ,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,eAAqC,EAAE,EAAE,CACzE,mBAAmB,CAAC,eAAe,CAAC,CAAC,KAAK,CACxC,CAAC,CAAC,MAAM,CAAC;IACP,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAC7B,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE;IACjB,MAAM,EAAE,gBAAgB,CAAC,QAAQ,EAAE;IACnC,MAAM,EAAE,gBAAgB,CAAC,QAAQ,EAAE;CACpC,CAAC,CACH,CAAC;AAEJ,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,eAAqC,EAAE,EAAE,CACxE,mBAAmB,CAAC,eAAe,CAAC,CAAC,KAAK,CACxC,CAAC,CAAC,MAAM,CAAC;IACP,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC5B,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE;CAClB,CAAC,CACH,CAAC"}
@@ -1 +0,0 @@
1
- export declare function findLast<T>(array: Array<T>, predicate: (value: T, index: number, obj: T[]) => boolean): T | null;
@@ -1,9 +0,0 @@
1
- export function findLast(array, predicate) {
2
- let l = array.length;
3
- while (l--) {
4
- if (predicate(array[l], l, array))
5
- return array[l];
6
- }
7
- return null;
8
- }
9
- //# sourceMappingURL=findLast.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"findLast.js","sourceRoot":"","sources":["../../src/findLast.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CACtB,KAAe,EACf,SAAyD;IAEzD,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,EAAE;QACV,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;KACpD;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,163 +0,0 @@
1
- declare type NodeBase = {
2
- id: string;
3
- position: {
4
- x: number;
5
- y: number;
6
- };
7
- };
8
- export declare type FlowCheckpointNode = NodeBase & {
9
- type: "checkpoint";
10
- };
11
- export declare type FlowCheckpointPublicNode = Pick<FlowCheckpointNode, "id" | "type">;
12
- export declare type FlowSynchronizeNode = NodeBase & {
13
- type: "synchronize";
14
- data?: {
15
- toggle: (id: string) => void;
16
- unlocked: boolean;
17
- };
18
- };
19
- export declare type FlowSynchronizePublicNode = Pick<FlowSynchronizeNode, "id" | "type">;
20
- export declare type FlowTaskNode = NodeBase & {
21
- type: "task";
22
- data: Bitflow.Task;
23
- };
24
- export declare type FlowTaskPublicNode = {
25
- type: "task";
26
- id: string;
27
- data: Pick<Bitflow.Task, "view" | "subtype" | "name">;
28
- };
29
- export declare const isFlowTaskNode: (n: FlowNode) => n is FlowTaskNode;
30
- export declare type FlowStartNode = NodeBase & {
31
- type: "start";
32
- data: Bitflow.Start;
33
- };
34
- export declare type FlowStartPublicNode = Pick<FlowStartNode, "type" | "data" | "id">;
35
- export declare const isFlowStartNode: (n: FlowNode) => n is FlowStartNode;
36
- export declare type FlowEndNode = NodeBase & {
37
- type: "end";
38
- data: Bitflow.End;
39
- };
40
- export declare const isFlowEndNode: (n: FlowNode) => n is FlowEndNode;
41
- export declare type FlowEndPublicNode = Pick<FlowEndNode, "type" | "data" | "id">;
42
- export declare type FlowInputNode = NodeBase & {
43
- type: "input";
44
- data: Bitflow.Input;
45
- };
46
- export declare const isFlowInputNode: (n: FlowNode) => n is FlowInputNode;
47
- export declare type FlowInputPublicNode = Pick<FlowInputNode, "type" | "data" | "id">;
48
- export declare type FlowTitleNode = NodeBase & {
49
- type: "title";
50
- data: Bitflow.Title;
51
- };
52
- export declare const isFlowTitleNode: (n: FlowNode) => n is FlowTitleNode;
53
- export declare type FlowTitlePublicNode = Pick<FlowTitleNode, "type" | "data" | "id">;
54
- export declare type InteractiveFlowNode = FlowTaskNode | FlowStartNode | FlowEndNode | FlowInputNode | FlowTitleNode | FlowCheckpointNode | FlowSynchronizeNode;
55
- export declare type InteractiveFlowPublicNode = FlowTaskPublicNode | FlowStartPublicNode | FlowEndPublicNode | FlowInputPublicNode | FlowTitlePublicNode | FlowCheckpointPublicNode | FlowSynchronizePublicNode;
56
- export declare type EqualCondition = {
57
- type: "equal";
58
- not: boolean;
59
- nodeId: string;
60
- key: string;
61
- value: string | number;
62
- };
63
- export declare type TrueCondition = {
64
- type: "true";
65
- not: boolean;
66
- nodeId: string;
67
- key: string;
68
- };
69
- export declare type GreaterCondition = {
70
- type: "greater";
71
- include: boolean;
72
- not: boolean;
73
- nodeId: string;
74
- key: string;
75
- value: number;
76
- };
77
- export declare type LessCondition = {
78
- type: "less";
79
- include: boolean;
80
- not: boolean;
81
- nodeId: string;
82
- key: string;
83
- value: number;
84
- };
85
- export declare type InCondition = {
86
- type: "in";
87
- not: boolean;
88
- nodeId: string;
89
- key: string;
90
- value: (string | number)[];
91
- };
92
- export declare type PrimitiveCondition = EqualCondition | TrueCondition | GreaterCondition | LessCondition | InCondition;
93
- export declare type AndCondition = {
94
- type: "and";
95
- conditions: PrimitiveCondition[];
96
- };
97
- export declare type OrCondition = {
98
- type: "or";
99
- conditions: PrimitiveCondition[];
100
- };
101
- export declare type Condition = PrimitiveCondition | AndCondition | OrCondition;
102
- export declare type SplitAnswer = {
103
- condition: Condition;
104
- };
105
- export declare type FlowSplitAnswerNode = NodeBase & {
106
- type: "split-answer";
107
- data: SplitAnswer;
108
- };
109
- export declare type SplitResult = {
110
- condition: Condition;
111
- };
112
- export declare type FlowSplitResultNode = NodeBase & {
113
- type: "split-result";
114
- data: SplitResult;
115
- };
116
- export declare type SplitPoints = {
117
- points: number;
118
- };
119
- export declare type FlowSplitPointsNode = NodeBase & {
120
- type: "split-points";
121
- data: SplitPoints;
122
- };
123
- export declare type PortalInput = {
124
- portal: string;
125
- description: string;
126
- };
127
- export declare type PortalOutput = {
128
- portal: string;
129
- description: string;
130
- };
131
- export declare type FlowPortalInputNode = NodeBase & {
132
- type: "portal-input";
133
- data: PortalInput;
134
- };
135
- export declare type FlowPortalOutputNode = NodeBase & {
136
- type: "portal-output";
137
- data: PortalOutput;
138
- };
139
- export declare type FlowSplitRandomNode = NodeBase & {
140
- type: "split-random";
141
- };
142
- export declare type ControlFlowNode = FlowSplitAnswerNode | FlowSplitResultNode | FlowSplitPointsNode | FlowSplitRandomNode | FlowPortalInputNode | FlowPortalOutputNode;
143
- export declare type FlowNode = InteractiveFlowNode | ControlFlowNode;
144
- export declare const isInteractiveFlowNode: (n: FlowNode) => n is InteractiveFlowNode;
145
- export declare type FlowEdge = {
146
- id: string;
147
- source: string;
148
- sourceHandle?: "a" | "b" | "c" | "d" | "e" | "f";
149
- target: string;
150
- };
151
- export declare type Flow = {
152
- name: string;
153
- description: string;
154
- language: "en" | "de" | "fr" | "es" | "nl" | "pt" | "tr" | "it";
155
- visibility: "public" | "private" | "unlisted";
156
- draft: boolean;
157
- nodes: FlowNode[];
158
- edges: FlowEdge[];
159
- zoom?: number;
160
- position?: [number, number];
161
- };
162
- export declare const extractInteractiveFlowPublicNode: (n: InteractiveFlowNode) => InteractiveFlowPublicNode;
163
- export {};
package/dist/esm/flow.js DELETED
@@ -1,88 +0,0 @@
1
- export const isFlowTaskNode = (n) => {
2
- if (n.type === "task") {
3
- return true;
4
- }
5
- return false;
6
- };
7
- export const isFlowStartNode = (n) => {
8
- if (n.type === "start") {
9
- return true;
10
- }
11
- return false;
12
- };
13
- export const isFlowEndNode = (n) => {
14
- if (n.type === "end") {
15
- return true;
16
- }
17
- return false;
18
- };
19
- export const isFlowInputNode = (n) => {
20
- if (n.type === "input") {
21
- return true;
22
- }
23
- return false;
24
- };
25
- export const isFlowTitleNode = (n) => {
26
- if (n.type === "title") {
27
- return true;
28
- }
29
- return false;
30
- };
31
- export const isInteractiveFlowNode = (n) => {
32
- if (n.type === "checkpoint" ||
33
- n.type === "end" ||
34
- n.type === "input" ||
35
- n.type === "start" ||
36
- n.type === "synchronize" ||
37
- n.type === "task" ||
38
- n.type === "title") {
39
- return true;
40
- }
41
- return false;
42
- };
43
- export const extractInteractiveFlowPublicNode = (n) => {
44
- if (n.type === "task") {
45
- return {
46
- id: n.id,
47
- type: n.type,
48
- data: {
49
- name: n.data.name,
50
- subtype: n.data.subtype,
51
- view: n.data.view,
52
- },
53
- };
54
- }
55
- else if (n.type === "synchronize" || n.type === "checkpoint") {
56
- return {
57
- id: n.id,
58
- type: n.type,
59
- };
60
- }
61
- else if (n.type === "input") {
62
- return {
63
- id: n.id,
64
- type: n.type,
65
- data: n.data,
66
- };
67
- }
68
- else if (n.type === "end") {
69
- return {
70
- id: n.id,
71
- type: n.type,
72
- data: n.data,
73
- };
74
- }
75
- else if (n.type === "start") {
76
- return {
77
- id: n.id,
78
- type: n.type,
79
- data: n.data,
80
- };
81
- }
82
- return {
83
- id: n.id,
84
- type: n.type,
85
- data: n.data,
86
- };
87
- };
88
- //# sourceMappingURL=flow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flow.js","sourceRoot":"","sources":["../../src/flow.ts"],"names":[],"mappings":"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"}