@fairu/sdk 1.0.1
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 +447 -0
- package/dist/FairuClient-BUObk5LJ.cjs +91 -0
- package/dist/FairuClient-BUObk5LJ.cjs.map +1 -0
- package/dist/FairuClient-CT-IPh8i.js +92 -0
- package/dist/FairuClient-CT-IPh8i.js.map +1 -0
- package/dist/FairuError-D8sSmRAa.js +214 -0
- package/dist/FairuError-D8sSmRAa.js.map +1 -0
- package/dist/FairuError-DWH_Nwk0.cjs +213 -0
- package/dist/FairuError-DWH_Nwk0.cjs.map +1 -0
- package/dist/FairuProvider-BRpRddCI.cjs +51 -0
- package/dist/FairuProvider-BRpRddCI.cjs.map +1 -0
- package/dist/FairuProvider-Tc0vFo5L.js +52 -0
- package/dist/FairuProvider-Tc0vFo5L.js.map +1 -0
- package/dist/FileProxyBuilder-D-jZpAtd.cjs +269 -0
- package/dist/FileProxyBuilder-D-jZpAtd.cjs.map +1 -0
- package/dist/FileProxyBuilder-vHw1zBpJ.js +270 -0
- package/dist/FileProxyBuilder-vHw1zBpJ.js.map +1 -0
- package/dist/FragmentBuilder-BinoxeVS.js +194 -0
- package/dist/FragmentBuilder-BinoxeVS.js.map +1 -0
- package/dist/FragmentBuilder-BuvIC0aT.cjs +193 -0
- package/dist/FragmentBuilder-BuvIC0aT.cjs.map +1 -0
- package/dist/UploadError-CHBJuChw.cjs +81 -0
- package/dist/UploadError-CHBJuChw.cjs.map +1 -0
- package/dist/UploadError-_gEcJqSS.js +82 -0
- package/dist/UploadError-_gEcJqSS.js.map +1 -0
- package/dist/client/FairuClient.d.ts +8 -0
- package/dist/client/FairuClient.d.ts.map +1 -0
- package/dist/client/FairuProvider.d.ts +78 -0
- package/dist/client/FairuProvider.d.ts.map +1 -0
- package/dist/client/cache.d.ts +6 -0
- package/dist/client/cache.d.ts.map +1 -0
- package/dist/client/config.d.ts +77 -0
- package/dist/client/config.d.ts.map +1 -0
- package/dist/client/index.d.ts +5 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/errors/FairuError.d.ts +107 -0
- package/dist/errors/FairuError.d.ts.map +1 -0
- package/dist/errors/UploadError.d.ts +54 -0
- package/dist/errors/UploadError.d.ts.map +1 -0
- package/dist/errors/index.d.ts +3 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/fileproxy/FileProxyBuilder.d.ts +141 -0
- package/dist/fileproxy/FileProxyBuilder.d.ts.map +1 -0
- package/dist/fileproxy/index.d.ts +4 -0
- package/dist/fileproxy/index.d.ts.map +1 -0
- package/dist/fileproxy/types.d.ts +79 -0
- package/dist/fileproxy/types.d.ts.map +1 -0
- package/dist/fileproxy/useFileProxyUrl.d.ts +91 -0
- package/dist/fileproxy/useFileProxyUrl.d.ts.map +1 -0
- package/dist/fileproxy.cjs +10 -0
- package/dist/fileproxy.cjs.map +1 -0
- package/dist/fileproxy.d.ts +2 -0
- package/dist/fileproxy.js +10 -0
- package/dist/fileproxy.js.map +1 -0
- package/dist/fragments/FragmentBuilder.d.ts +107 -0
- package/dist/fragments/FragmentBuilder.d.ts.map +1 -0
- package/dist/fragments/FragmentRegistry.d.ts +93 -0
- package/dist/fragments/FragmentRegistry.d.ts.map +1 -0
- package/dist/fragments/index.d.ts +5 -0
- package/dist/fragments/index.d.ts.map +1 -0
- package/dist/fragments/predefined/assetFragments.d.ts +39 -0
- package/dist/fragments/predefined/assetFragments.d.ts.map +1 -0
- package/dist/fragments/predefined/copyrightFragments.d.ts +12 -0
- package/dist/fragments/predefined/copyrightFragments.d.ts.map +1 -0
- package/dist/fragments/predefined/folderFragments.d.ts +28 -0
- package/dist/fragments/predefined/folderFragments.d.ts.map +1 -0
- package/dist/fragments/predefined/galleryFragments.d.ts +24 -0
- package/dist/fragments/predefined/galleryFragments.d.ts.map +1 -0
- package/dist/fragments/predefined/index.d.ts +6 -0
- package/dist/fragments/predefined/index.d.ts.map +1 -0
- package/dist/fragments/predefined/licenseFragments.d.ts +12 -0
- package/dist/fragments/predefined/licenseFragments.d.ts.map +1 -0
- package/dist/fragments/types.d.ts +46 -0
- package/dist/fragments/types.d.ts.map +1 -0
- package/dist/fragments.cjs +403 -0
- package/dist/fragments.cjs.map +1 -0
- package/dist/fragments.d.ts +2 -0
- package/dist/fragments.js +403 -0
- package/dist/fragments.js.map +1 -0
- package/dist/generated/graphql.d.ts +3464 -0
- package/dist/generated/graphql.d.ts.map +1 -0
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/mutations/index.d.ts +5 -0
- package/dist/hooks/mutations/index.d.ts.map +1 -0
- package/dist/hooks/mutations/useAssetMutations.d.ts +66 -0
- package/dist/hooks/mutations/useAssetMutations.d.ts.map +1 -0
- package/dist/hooks/mutations/useFolderMutations.d.ts +69 -0
- package/dist/hooks/mutations/useFolderMutations.d.ts.map +1 -0
- package/dist/hooks/mutations/useGalleryMutations.d.ts +39 -0
- package/dist/hooks/mutations/useGalleryMutations.d.ts.map +1 -0
- package/dist/hooks/mutations/useUpdateAsset.d.ts +50 -0
- package/dist/hooks/mutations/useUpdateAsset.d.ts.map +1 -0
- package/dist/hooks/queries/index.d.ts +8 -0
- package/dist/hooks/queries/index.d.ts.map +1 -0
- package/dist/hooks/queries/useAsset.d.ts +46 -0
- package/dist/hooks/queries/useAsset.d.ts.map +1 -0
- package/dist/hooks/queries/useAssets.d.ts +58 -0
- package/dist/hooks/queries/useAssets.d.ts.map +1 -0
- package/dist/hooks/queries/useCopyright.d.ts +51 -0
- package/dist/hooks/queries/useCopyright.d.ts.map +1 -0
- package/dist/hooks/queries/useFolder.d.ts +93 -0
- package/dist/hooks/queries/useFolder.d.ts.map +1 -0
- package/dist/hooks/queries/useGallery.d.ts +101 -0
- package/dist/hooks/queries/useGallery.d.ts.map +1 -0
- package/dist/hooks/queries/useLicense.d.ts +63 -0
- package/dist/hooks/queries/useLicense.d.ts.map +1 -0
- package/dist/hooks/queries/useTenant.d.ts +89 -0
- package/dist/hooks/queries/useTenant.d.ts.map +1 -0
- package/dist/index.cjs +244 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +244 -0
- package/dist/index.js.map +1 -0
- package/dist/react.cjs +596 -0
- package/dist/react.cjs.map +1 -0
- package/dist/react.d.ts +22 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +596 -0
- package/dist/react.js.map +1 -0
- package/dist/upload/index.d.ts +4 -0
- package/dist/upload/index.d.ts.map +1 -0
- package/dist/upload/types.d.ts +96 -0
- package/dist/upload/types.d.ts.map +1 -0
- package/dist/upload/useMultipartUpload.d.ts +67 -0
- package/dist/upload/useMultipartUpload.d.ts.map +1 -0
- package/dist/upload/useUpload.d.ts +64 -0
- package/dist/upload/useUpload.d.ts.map +1 -0
- package/dist/upload.cjs +6 -0
- package/dist/upload.cjs.map +1 -0
- package/dist/upload.d.ts +2 -0
- package/dist/upload.js +6 -0
- package/dist/upload.js.map +1 -0
- package/dist/useFileProxyUrl-BCcux6re.cjs +87 -0
- package/dist/useFileProxyUrl-BCcux6re.cjs.map +1 -0
- package/dist/useFileProxyUrl-D_S1R_7O.js +88 -0
- package/dist/useFileProxyUrl-D_S1R_7O.js.map +1 -0
- package/dist/useMultipartUpload-BKnDbl8h.cjs +423 -0
- package/dist/useMultipartUpload-BKnDbl8h.cjs.map +1 -0
- package/dist/useMultipartUpload-CPK_PgUU.js +424 -0
- package/dist/useMultipartUpload-CPK_PgUU.js.map +1 -0
- package/dist/vanilla.cjs +219 -0
- package/dist/vanilla.cjs.map +1 -0
- package/dist/vanilla.d.ts +94 -0
- package/dist/vanilla.d.ts.map +1 -0
- package/dist/vanilla.js +220 -0
- package/dist/vanilla.js.map +1 -0
- package/package.json +177 -0
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
+
class FragmentBuilder {
|
|
5
|
+
constructor(typeName) {
|
|
6
|
+
__publicField(this, "fields", []);
|
|
7
|
+
__publicField(this, "relations", /* @__PURE__ */ new Map());
|
|
8
|
+
__publicField(this, "fragmentName");
|
|
9
|
+
this.typeName = typeName;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Create a new FragmentBuilder for a GraphQL type.
|
|
13
|
+
*/
|
|
14
|
+
static for(typeName) {
|
|
15
|
+
return new FragmentBuilder(typeName);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Set a custom name for the fragment.
|
|
19
|
+
*/
|
|
20
|
+
name(name) {
|
|
21
|
+
this.fragmentName = name;
|
|
22
|
+
return this;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Select multiple fields.
|
|
26
|
+
*/
|
|
27
|
+
select(fields) {
|
|
28
|
+
this.fields = [...this.fields, ...fields];
|
|
29
|
+
return this;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Add a single field.
|
|
33
|
+
*/
|
|
34
|
+
field(field) {
|
|
35
|
+
this.fields.push(field);
|
|
36
|
+
return this;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Add a relation with nested fields.
|
|
40
|
+
*
|
|
41
|
+
* @param relation - The relation name
|
|
42
|
+
* @param definition - Either a callback, array of fields, or a FragmentInterface
|
|
43
|
+
*/
|
|
44
|
+
with(relation, definition) {
|
|
45
|
+
if (typeof definition === "function") {
|
|
46
|
+
const builder = new FragmentBuilder(relation);
|
|
47
|
+
definition(builder);
|
|
48
|
+
this.relations.set(relation, builder);
|
|
49
|
+
} else if (Array.isArray(definition)) {
|
|
50
|
+
const builder = new FragmentBuilder(relation);
|
|
51
|
+
builder.select(definition);
|
|
52
|
+
this.relations.set(relation, builder);
|
|
53
|
+
} else {
|
|
54
|
+
const builder = new FragmentBuilder(definition.getTypeName());
|
|
55
|
+
builder.select(definition.getFields());
|
|
56
|
+
this.relations.set(relation, builder);
|
|
57
|
+
}
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Add a relation with arguments.
|
|
62
|
+
*
|
|
63
|
+
* @param relation - The relation name
|
|
64
|
+
* @param args - Arguments to pass to the field
|
|
65
|
+
* @param definition - Either a callback, array of fields, or empty for scalar result
|
|
66
|
+
*/
|
|
67
|
+
withArguments(relation, args, definition = []) {
|
|
68
|
+
const fieldWithArgs = this.buildFieldWithArgs(relation, args);
|
|
69
|
+
if (Array.isArray(definition) && definition.length === 0) {
|
|
70
|
+
this.fields.push(fieldWithArgs);
|
|
71
|
+
} else {
|
|
72
|
+
this.with(fieldWithArgs, definition);
|
|
73
|
+
}
|
|
74
|
+
return this;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Build a field string with arguments.
|
|
78
|
+
*/
|
|
79
|
+
buildFieldWithArgs(field, args) {
|
|
80
|
+
const nonNullArgs = Object.entries(args).filter(
|
|
81
|
+
([, value]) => value !== void 0 && value !== null
|
|
82
|
+
);
|
|
83
|
+
if (nonNullArgs.length === 0) {
|
|
84
|
+
return field;
|
|
85
|
+
}
|
|
86
|
+
const argsString = nonNullArgs.map(([key, value]) => {
|
|
87
|
+
if (typeof value === "boolean") {
|
|
88
|
+
return `${key}: ${value}`;
|
|
89
|
+
}
|
|
90
|
+
if (typeof value === "number") {
|
|
91
|
+
return `${key}: ${value}`;
|
|
92
|
+
}
|
|
93
|
+
if (typeof value === "string") {
|
|
94
|
+
return `${key}: "${value}"`;
|
|
95
|
+
}
|
|
96
|
+
return `${key}: ${JSON.stringify(value)}`;
|
|
97
|
+
}).join(", ");
|
|
98
|
+
return `${field}(${argsString})`;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get the fragment name.
|
|
102
|
+
*/
|
|
103
|
+
getName() {
|
|
104
|
+
return this.fragmentName ?? `${this.typeName}Fragment`;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get the GraphQL type name.
|
|
108
|
+
*/
|
|
109
|
+
getTypeName() {
|
|
110
|
+
return this.typeName;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Get the selected fields.
|
|
114
|
+
*/
|
|
115
|
+
getFields() {
|
|
116
|
+
return [...this.fields];
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get the relations.
|
|
120
|
+
*/
|
|
121
|
+
getRelations() {
|
|
122
|
+
return new Map(this.relations);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Convert to a GraphQL selection set.
|
|
126
|
+
*/
|
|
127
|
+
toGraphQL() {
|
|
128
|
+
return this.buildSelection();
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Convert to a named fragment definition.
|
|
132
|
+
*/
|
|
133
|
+
toFragmentDefinition() {
|
|
134
|
+
const selection = this.buildSelection();
|
|
135
|
+
return `fragment ${this.getName()} on ${this.typeName} ${selection}`;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Convert to an inline fragment.
|
|
139
|
+
*/
|
|
140
|
+
toInlineFragment() {
|
|
141
|
+
return this.buildSelection();
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Build the selection set string.
|
|
145
|
+
*/
|
|
146
|
+
buildSelection() {
|
|
147
|
+
const lines = [...this.fields];
|
|
148
|
+
this.relations.forEach((builder, relation) => {
|
|
149
|
+
if (builder instanceof FragmentBuilder) {
|
|
150
|
+
const nestedSelection = builder.toGraphQL();
|
|
151
|
+
lines.push(`${relation} ${nestedSelection}`);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
if (lines.length === 0) {
|
|
155
|
+
return "{ id }";
|
|
156
|
+
}
|
|
157
|
+
return `{
|
|
158
|
+
${lines.join("\n ")}
|
|
159
|
+
}`;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Build and return this fragment (returns self for chaining).
|
|
163
|
+
*/
|
|
164
|
+
build() {
|
|
165
|
+
return this;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Convert to string (alias for toGraphQL).
|
|
169
|
+
*/
|
|
170
|
+
toString() {
|
|
171
|
+
return this.toGraphQL();
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Clone this builder.
|
|
175
|
+
*/
|
|
176
|
+
clone() {
|
|
177
|
+
const cloned = new FragmentBuilder(this.typeName);
|
|
178
|
+
cloned.fragmentName = this.fragmentName;
|
|
179
|
+
cloned.fields = [...this.fields];
|
|
180
|
+
cloned.relations = new Map(this.relations);
|
|
181
|
+
return cloned;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Merge another fragment's fields into this one.
|
|
185
|
+
*/
|
|
186
|
+
merge(other) {
|
|
187
|
+
this.fields = [...this.fields, ...other.getFields()];
|
|
188
|
+
return this;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
export {
|
|
192
|
+
FragmentBuilder as F
|
|
193
|
+
};
|
|
194
|
+
//# sourceMappingURL=FragmentBuilder-BinoxeVS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FragmentBuilder-BinoxeVS.js","sources":["../src/fragments/FragmentBuilder.ts"],"sourcesContent":["import type { FragmentInterface, FragmentCallback } from './types';\n\n/**\n * Fluent builder for creating GraphQL fragments.\n *\n * @example\n * ```typescript\n * const fragment = FragmentBuilder.for('FairuAsset')\n * .name('AssetWithCopyrights')\n * .select(['id', 'name', 'url'])\n * .with('copyrights', (f) => f.select(['id', 'name']))\n * .build();\n *\n * console.log(fragment.toGraphQL());\n * // { id name url copyrights { id name } }\n * ```\n */\nexport class FragmentBuilder implements FragmentInterface {\n private fields: string[] = [];\n private relations: Map<string, FragmentBuilder | string[]> = new Map();\n private fragmentName?: string;\n\n private constructor(private readonly typeName: string) {}\n\n /**\n * Create a new FragmentBuilder for a GraphQL type.\n */\n static for(typeName: string): FragmentBuilder {\n return new FragmentBuilder(typeName);\n }\n\n /**\n * Set a custom name for the fragment.\n */\n name(name: string): this {\n this.fragmentName = name;\n return this;\n }\n\n /**\n * Select multiple fields.\n */\n select(fields: string[]): this {\n this.fields = [...this.fields, ...fields];\n return this;\n }\n\n /**\n * Add a single field.\n */\n field(field: string): this {\n this.fields.push(field);\n return this;\n }\n\n /**\n * Add a relation with nested fields.\n *\n * @param relation - The relation name\n * @param definition - Either a callback, array of fields, or a FragmentInterface\n */\n with(\n relation: string,\n definition: FragmentCallback | FragmentInterface | string[]\n ): this {\n if (typeof definition === 'function') {\n const builder = new FragmentBuilder(relation);\n definition(builder);\n this.relations.set(relation, builder);\n } else if (Array.isArray(definition)) {\n const builder = new FragmentBuilder(relation);\n builder.select(definition);\n this.relations.set(relation, builder);\n } else {\n // FragmentInterface - wrap in a builder\n const builder = new FragmentBuilder(definition.getTypeName());\n builder.select(definition.getFields());\n this.relations.set(relation, builder);\n }\n return this;\n }\n\n /**\n * Add a relation with arguments.\n *\n * @param relation - The relation name\n * @param args - Arguments to pass to the field\n * @param definition - Either a callback, array of fields, or empty for scalar result\n */\n withArguments(\n relation: string,\n args: Record<string, unknown>,\n definition: FragmentCallback | FragmentInterface | string[] = []\n ): this {\n const fieldWithArgs = this.buildFieldWithArgs(relation, args);\n\n if (Array.isArray(definition) && definition.length === 0) {\n // Scalar field with arguments\n this.fields.push(fieldWithArgs);\n } else {\n this.with(fieldWithArgs, definition);\n }\n\n return this;\n }\n\n /**\n * Build a field string with arguments.\n */\n private buildFieldWithArgs(\n field: string,\n args: Record<string, unknown>\n ): string {\n const nonNullArgs = Object.entries(args).filter(\n ([, value]) => value !== undefined && value !== null\n );\n\n if (nonNullArgs.length === 0) {\n return field;\n }\n\n const argsString = nonNullArgs\n .map(([key, value]) => {\n if (typeof value === 'boolean') {\n return `${key}: ${value}`;\n }\n if (typeof value === 'number') {\n return `${key}: ${value}`;\n }\n if (typeof value === 'string') {\n return `${key}: \"${value}\"`;\n }\n // Arrays and objects\n return `${key}: ${JSON.stringify(value)}`;\n })\n .join(', ');\n\n return `${field}(${argsString})`;\n }\n\n /**\n * Get the fragment name.\n */\n getName(): string {\n return this.fragmentName ?? `${this.typeName}Fragment`;\n }\n\n /**\n * Get the GraphQL type name.\n */\n getTypeName(): string {\n return this.typeName;\n }\n\n /**\n * Get the selected fields.\n */\n getFields(): string[] {\n return [...this.fields];\n }\n\n /**\n * Get the relations.\n */\n getRelations(): Map<string, FragmentBuilder | string[]> {\n return new Map(this.relations);\n }\n\n /**\n * Convert to a GraphQL selection set.\n */\n toGraphQL(): string {\n return this.buildSelection();\n }\n\n /**\n * Convert to a named fragment definition.\n */\n toFragmentDefinition(): string {\n const selection = this.buildSelection();\n return `fragment ${this.getName()} on ${this.typeName} ${selection}`;\n }\n\n /**\n * Convert to an inline fragment.\n */\n toInlineFragment(): string {\n return this.buildSelection();\n }\n\n /**\n * Build the selection set string.\n */\n private buildSelection(): string {\n const lines: string[] = [...this.fields];\n\n this.relations.forEach((builder, relation) => {\n if (builder instanceof FragmentBuilder) {\n const nestedSelection = builder.toGraphQL();\n lines.push(`${relation} ${nestedSelection}`);\n }\n });\n\n if (lines.length === 0) {\n return '{ id }';\n }\n\n return `{\\n ${lines.join('\\n ')}\\n}`;\n }\n\n /**\n * Build and return this fragment (returns self for chaining).\n */\n build(): this {\n return this;\n }\n\n /**\n * Convert to string (alias for toGraphQL).\n */\n toString(): string {\n return this.toGraphQL();\n }\n\n /**\n * Clone this builder.\n */\n clone(): FragmentBuilder {\n const cloned = new FragmentBuilder(this.typeName);\n cloned.fragmentName = this.fragmentName;\n cloned.fields = [...this.fields];\n cloned.relations = new Map(this.relations);\n return cloned;\n }\n\n /**\n * Merge another fragment's fields into this one.\n */\n merge(other: FragmentInterface): this {\n this.fields = [...this.fields, ...other.getFields()];\n return this;\n }\n}\n"],"names":[],"mappings":";;;AAiBO,MAAM,gBAA6C;AAAA,EAKhD,YAA6B,UAAkB;AAJ/C,kCAAmB,CAAA;AACnB,yDAAyD,IAAA;AACzD;AAE6B,SAAA,WAAA;AAAA,EAAmB;AAAA;AAAA;AAAA;AAAA,EAKxD,OAAO,IAAI,UAAmC;AAC5C,WAAO,IAAI,gBAAgB,QAAQ;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,MAAoB;AACvB,SAAK,eAAe;AACpB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,QAAwB;AAC7B,SAAK,SAAS,CAAC,GAAG,KAAK,QAAQ,GAAG,MAAM;AACxC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAqB;AACzB,SAAK,OAAO,KAAK,KAAK;AACtB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,KACE,UACA,YACM;AACN,QAAI,OAAO,eAAe,YAAY;AACpC,YAAM,UAAU,IAAI,gBAAgB,QAAQ;AAC5C,iBAAW,OAAO;AAClB,WAAK,UAAU,IAAI,UAAU,OAAO;AAAA,IACtC,WAAW,MAAM,QAAQ,UAAU,GAAG;AACpC,YAAM,UAAU,IAAI,gBAAgB,QAAQ;AAC5C,cAAQ,OAAO,UAAU;AACzB,WAAK,UAAU,IAAI,UAAU,OAAO;AAAA,IACtC,OAAO;AAEL,YAAM,UAAU,IAAI,gBAAgB,WAAW,aAAa;AAC5D,cAAQ,OAAO,WAAW,WAAW;AACrC,WAAK,UAAU,IAAI,UAAU,OAAO;AAAA,IACtC;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,cACE,UACA,MACA,aAA8D,CAAA,GACxD;AACN,UAAM,gBAAgB,KAAK,mBAAmB,UAAU,IAAI;AAE5D,QAAI,MAAM,QAAQ,UAAU,KAAK,WAAW,WAAW,GAAG;AAExD,WAAK,OAAO,KAAK,aAAa;AAAA,IAChC,OAAO;AACL,WAAK,KAAK,eAAe,UAAU;AAAA,IACrC;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,mBACN,OACA,MACQ;AACR,UAAM,cAAc,OAAO,QAAQ,IAAI,EAAE;AAAA,MACvC,CAAC,CAAA,EAAG,KAAK,MAAM,UAAU,UAAa,UAAU;AAAA,IAAA;AAGlD,QAAI,YAAY,WAAW,GAAG;AAC5B,aAAO;AAAA,IACT;AAEA,UAAM,aAAa,YAChB,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AACrB,UAAI,OAAO,UAAU,WAAW;AAC9B,eAAO,GAAG,GAAG,KAAK,KAAK;AAAA,MACzB;AACA,UAAI,OAAO,UAAU,UAAU;AAC7B,eAAO,GAAG,GAAG,KAAK,KAAK;AAAA,MACzB;AACA,UAAI,OAAO,UAAU,UAAU;AAC7B,eAAO,GAAG,GAAG,MAAM,KAAK;AAAA,MAC1B;AAEA,aAAO,GAAG,GAAG,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA,IACzC,CAAC,EACA,KAAK,IAAI;AAEZ,WAAO,GAAG,KAAK,IAAI,UAAU;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,UAAkB;AAChB,WAAO,KAAK,gBAAgB,GAAG,KAAK,QAAQ;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,cAAsB;AACpB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,YAAsB;AACpB,WAAO,CAAC,GAAG,KAAK,MAAM;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,eAAwD;AACtD,WAAO,IAAI,IAAI,KAAK,SAAS;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,YAAoB;AAClB,WAAO,KAAK,eAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,uBAA+B;AAC7B,UAAM,YAAY,KAAK,eAAA;AACvB,WAAO,YAAY,KAAK,QAAA,CAAS,OAAO,KAAK,QAAQ,IAAI,SAAS;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA,EAKA,mBAA2B;AACzB,WAAO,KAAK,eAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAyB;AAC/B,UAAM,QAAkB,CAAC,GAAG,KAAK,MAAM;AAEvC,SAAK,UAAU,QAAQ,CAAC,SAAS,aAAa;AAC5C,UAAI,mBAAmB,iBAAiB;AACtC,cAAM,kBAAkB,QAAQ,UAAA;AAChC,cAAM,KAAK,GAAG,QAAQ,IAAI,eAAe,EAAE;AAAA,MAC7C;AAAA,IACF,CAAC;AAED,QAAI,MAAM,WAAW,GAAG;AACtB,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,IAAQ,MAAM,KAAK,MAAM,CAAC;AAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,QAAc;AACZ,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,WAAmB;AACjB,WAAO,KAAK,UAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,QAAyB;AACvB,UAAM,SAAS,IAAI,gBAAgB,KAAK,QAAQ;AAChD,WAAO,eAAe,KAAK;AAC3B,WAAO,SAAS,CAAC,GAAG,KAAK,MAAM;AAC/B,WAAO,YAAY,IAAI,IAAI,KAAK,SAAS;AACzC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAgC;AACpC,SAAK,SAAS,CAAC,GAAG,KAAK,QAAQ,GAAG,MAAM,WAAW;AACnD,WAAO;AAAA,EACT;AACF;"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
class FragmentBuilder {
|
|
6
|
+
constructor(typeName) {
|
|
7
|
+
__publicField(this, "fields", []);
|
|
8
|
+
__publicField(this, "relations", /* @__PURE__ */ new Map());
|
|
9
|
+
__publicField(this, "fragmentName");
|
|
10
|
+
this.typeName = typeName;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Create a new FragmentBuilder for a GraphQL type.
|
|
14
|
+
*/
|
|
15
|
+
static for(typeName) {
|
|
16
|
+
return new FragmentBuilder(typeName);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Set a custom name for the fragment.
|
|
20
|
+
*/
|
|
21
|
+
name(name) {
|
|
22
|
+
this.fragmentName = name;
|
|
23
|
+
return this;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Select multiple fields.
|
|
27
|
+
*/
|
|
28
|
+
select(fields) {
|
|
29
|
+
this.fields = [...this.fields, ...fields];
|
|
30
|
+
return this;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Add a single field.
|
|
34
|
+
*/
|
|
35
|
+
field(field) {
|
|
36
|
+
this.fields.push(field);
|
|
37
|
+
return this;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Add a relation with nested fields.
|
|
41
|
+
*
|
|
42
|
+
* @param relation - The relation name
|
|
43
|
+
* @param definition - Either a callback, array of fields, or a FragmentInterface
|
|
44
|
+
*/
|
|
45
|
+
with(relation, definition) {
|
|
46
|
+
if (typeof definition === "function") {
|
|
47
|
+
const builder = new FragmentBuilder(relation);
|
|
48
|
+
definition(builder);
|
|
49
|
+
this.relations.set(relation, builder);
|
|
50
|
+
} else if (Array.isArray(definition)) {
|
|
51
|
+
const builder = new FragmentBuilder(relation);
|
|
52
|
+
builder.select(definition);
|
|
53
|
+
this.relations.set(relation, builder);
|
|
54
|
+
} else {
|
|
55
|
+
const builder = new FragmentBuilder(definition.getTypeName());
|
|
56
|
+
builder.select(definition.getFields());
|
|
57
|
+
this.relations.set(relation, builder);
|
|
58
|
+
}
|
|
59
|
+
return this;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Add a relation with arguments.
|
|
63
|
+
*
|
|
64
|
+
* @param relation - The relation name
|
|
65
|
+
* @param args - Arguments to pass to the field
|
|
66
|
+
* @param definition - Either a callback, array of fields, or empty for scalar result
|
|
67
|
+
*/
|
|
68
|
+
withArguments(relation, args, definition = []) {
|
|
69
|
+
const fieldWithArgs = this.buildFieldWithArgs(relation, args);
|
|
70
|
+
if (Array.isArray(definition) && definition.length === 0) {
|
|
71
|
+
this.fields.push(fieldWithArgs);
|
|
72
|
+
} else {
|
|
73
|
+
this.with(fieldWithArgs, definition);
|
|
74
|
+
}
|
|
75
|
+
return this;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Build a field string with arguments.
|
|
79
|
+
*/
|
|
80
|
+
buildFieldWithArgs(field, args) {
|
|
81
|
+
const nonNullArgs = Object.entries(args).filter(
|
|
82
|
+
([, value]) => value !== void 0 && value !== null
|
|
83
|
+
);
|
|
84
|
+
if (nonNullArgs.length === 0) {
|
|
85
|
+
return field;
|
|
86
|
+
}
|
|
87
|
+
const argsString = nonNullArgs.map(([key, value]) => {
|
|
88
|
+
if (typeof value === "boolean") {
|
|
89
|
+
return `${key}: ${value}`;
|
|
90
|
+
}
|
|
91
|
+
if (typeof value === "number") {
|
|
92
|
+
return `${key}: ${value}`;
|
|
93
|
+
}
|
|
94
|
+
if (typeof value === "string") {
|
|
95
|
+
return `${key}: "${value}"`;
|
|
96
|
+
}
|
|
97
|
+
return `${key}: ${JSON.stringify(value)}`;
|
|
98
|
+
}).join(", ");
|
|
99
|
+
return `${field}(${argsString})`;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get the fragment name.
|
|
103
|
+
*/
|
|
104
|
+
getName() {
|
|
105
|
+
return this.fragmentName ?? `${this.typeName}Fragment`;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Get the GraphQL type name.
|
|
109
|
+
*/
|
|
110
|
+
getTypeName() {
|
|
111
|
+
return this.typeName;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get the selected fields.
|
|
115
|
+
*/
|
|
116
|
+
getFields() {
|
|
117
|
+
return [...this.fields];
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Get the relations.
|
|
121
|
+
*/
|
|
122
|
+
getRelations() {
|
|
123
|
+
return new Map(this.relations);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Convert to a GraphQL selection set.
|
|
127
|
+
*/
|
|
128
|
+
toGraphQL() {
|
|
129
|
+
return this.buildSelection();
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Convert to a named fragment definition.
|
|
133
|
+
*/
|
|
134
|
+
toFragmentDefinition() {
|
|
135
|
+
const selection = this.buildSelection();
|
|
136
|
+
return `fragment ${this.getName()} on ${this.typeName} ${selection}`;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Convert to an inline fragment.
|
|
140
|
+
*/
|
|
141
|
+
toInlineFragment() {
|
|
142
|
+
return this.buildSelection();
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Build the selection set string.
|
|
146
|
+
*/
|
|
147
|
+
buildSelection() {
|
|
148
|
+
const lines = [...this.fields];
|
|
149
|
+
this.relations.forEach((builder, relation) => {
|
|
150
|
+
if (builder instanceof FragmentBuilder) {
|
|
151
|
+
const nestedSelection = builder.toGraphQL();
|
|
152
|
+
lines.push(`${relation} ${nestedSelection}`);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
if (lines.length === 0) {
|
|
156
|
+
return "{ id }";
|
|
157
|
+
}
|
|
158
|
+
return `{
|
|
159
|
+
${lines.join("\n ")}
|
|
160
|
+
}`;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Build and return this fragment (returns self for chaining).
|
|
164
|
+
*/
|
|
165
|
+
build() {
|
|
166
|
+
return this;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Convert to string (alias for toGraphQL).
|
|
170
|
+
*/
|
|
171
|
+
toString() {
|
|
172
|
+
return this.toGraphQL();
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Clone this builder.
|
|
176
|
+
*/
|
|
177
|
+
clone() {
|
|
178
|
+
const cloned = new FragmentBuilder(this.typeName);
|
|
179
|
+
cloned.fragmentName = this.fragmentName;
|
|
180
|
+
cloned.fields = [...this.fields];
|
|
181
|
+
cloned.relations = new Map(this.relations);
|
|
182
|
+
return cloned;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Merge another fragment's fields into this one.
|
|
186
|
+
*/
|
|
187
|
+
merge(other) {
|
|
188
|
+
this.fields = [...this.fields, ...other.getFields()];
|
|
189
|
+
return this;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
exports.FragmentBuilder = FragmentBuilder;
|
|
193
|
+
//# sourceMappingURL=FragmentBuilder-BuvIC0aT.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FragmentBuilder-BuvIC0aT.cjs","sources":["../src/fragments/FragmentBuilder.ts"],"sourcesContent":["import type { FragmentInterface, FragmentCallback } from './types';\n\n/**\n * Fluent builder for creating GraphQL fragments.\n *\n * @example\n * ```typescript\n * const fragment = FragmentBuilder.for('FairuAsset')\n * .name('AssetWithCopyrights')\n * .select(['id', 'name', 'url'])\n * .with('copyrights', (f) => f.select(['id', 'name']))\n * .build();\n *\n * console.log(fragment.toGraphQL());\n * // { id name url copyrights { id name } }\n * ```\n */\nexport class FragmentBuilder implements FragmentInterface {\n private fields: string[] = [];\n private relations: Map<string, FragmentBuilder | string[]> = new Map();\n private fragmentName?: string;\n\n private constructor(private readonly typeName: string) {}\n\n /**\n * Create a new FragmentBuilder for a GraphQL type.\n */\n static for(typeName: string): FragmentBuilder {\n return new FragmentBuilder(typeName);\n }\n\n /**\n * Set a custom name for the fragment.\n */\n name(name: string): this {\n this.fragmentName = name;\n return this;\n }\n\n /**\n * Select multiple fields.\n */\n select(fields: string[]): this {\n this.fields = [...this.fields, ...fields];\n return this;\n }\n\n /**\n * Add a single field.\n */\n field(field: string): this {\n this.fields.push(field);\n return this;\n }\n\n /**\n * Add a relation with nested fields.\n *\n * @param relation - The relation name\n * @param definition - Either a callback, array of fields, or a FragmentInterface\n */\n with(\n relation: string,\n definition: FragmentCallback | FragmentInterface | string[]\n ): this {\n if (typeof definition === 'function') {\n const builder = new FragmentBuilder(relation);\n definition(builder);\n this.relations.set(relation, builder);\n } else if (Array.isArray(definition)) {\n const builder = new FragmentBuilder(relation);\n builder.select(definition);\n this.relations.set(relation, builder);\n } else {\n // FragmentInterface - wrap in a builder\n const builder = new FragmentBuilder(definition.getTypeName());\n builder.select(definition.getFields());\n this.relations.set(relation, builder);\n }\n return this;\n }\n\n /**\n * Add a relation with arguments.\n *\n * @param relation - The relation name\n * @param args - Arguments to pass to the field\n * @param definition - Either a callback, array of fields, or empty for scalar result\n */\n withArguments(\n relation: string,\n args: Record<string, unknown>,\n definition: FragmentCallback | FragmentInterface | string[] = []\n ): this {\n const fieldWithArgs = this.buildFieldWithArgs(relation, args);\n\n if (Array.isArray(definition) && definition.length === 0) {\n // Scalar field with arguments\n this.fields.push(fieldWithArgs);\n } else {\n this.with(fieldWithArgs, definition);\n }\n\n return this;\n }\n\n /**\n * Build a field string with arguments.\n */\n private buildFieldWithArgs(\n field: string,\n args: Record<string, unknown>\n ): string {\n const nonNullArgs = Object.entries(args).filter(\n ([, value]) => value !== undefined && value !== null\n );\n\n if (nonNullArgs.length === 0) {\n return field;\n }\n\n const argsString = nonNullArgs\n .map(([key, value]) => {\n if (typeof value === 'boolean') {\n return `${key}: ${value}`;\n }\n if (typeof value === 'number') {\n return `${key}: ${value}`;\n }\n if (typeof value === 'string') {\n return `${key}: \"${value}\"`;\n }\n // Arrays and objects\n return `${key}: ${JSON.stringify(value)}`;\n })\n .join(', ');\n\n return `${field}(${argsString})`;\n }\n\n /**\n * Get the fragment name.\n */\n getName(): string {\n return this.fragmentName ?? `${this.typeName}Fragment`;\n }\n\n /**\n * Get the GraphQL type name.\n */\n getTypeName(): string {\n return this.typeName;\n }\n\n /**\n * Get the selected fields.\n */\n getFields(): string[] {\n return [...this.fields];\n }\n\n /**\n * Get the relations.\n */\n getRelations(): Map<string, FragmentBuilder | string[]> {\n return new Map(this.relations);\n }\n\n /**\n * Convert to a GraphQL selection set.\n */\n toGraphQL(): string {\n return this.buildSelection();\n }\n\n /**\n * Convert to a named fragment definition.\n */\n toFragmentDefinition(): string {\n const selection = this.buildSelection();\n return `fragment ${this.getName()} on ${this.typeName} ${selection}`;\n }\n\n /**\n * Convert to an inline fragment.\n */\n toInlineFragment(): string {\n return this.buildSelection();\n }\n\n /**\n * Build the selection set string.\n */\n private buildSelection(): string {\n const lines: string[] = [...this.fields];\n\n this.relations.forEach((builder, relation) => {\n if (builder instanceof FragmentBuilder) {\n const nestedSelection = builder.toGraphQL();\n lines.push(`${relation} ${nestedSelection}`);\n }\n });\n\n if (lines.length === 0) {\n return '{ id }';\n }\n\n return `{\\n ${lines.join('\\n ')}\\n}`;\n }\n\n /**\n * Build and return this fragment (returns self for chaining).\n */\n build(): this {\n return this;\n }\n\n /**\n * Convert to string (alias for toGraphQL).\n */\n toString(): string {\n return this.toGraphQL();\n }\n\n /**\n * Clone this builder.\n */\n clone(): FragmentBuilder {\n const cloned = new FragmentBuilder(this.typeName);\n cloned.fragmentName = this.fragmentName;\n cloned.fields = [...this.fields];\n cloned.relations = new Map(this.relations);\n return cloned;\n }\n\n /**\n * Merge another fragment's fields into this one.\n */\n merge(other: FragmentInterface): this {\n this.fields = [...this.fields, ...other.getFields()];\n return this;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
const FairuError = require("./FairuError-DWH_Nwk0.cjs");
|
|
6
|
+
class UploadError extends FairuError.FairuError {
|
|
7
|
+
constructor(message, code, partNumber) {
|
|
8
|
+
super(message, code);
|
|
9
|
+
__publicField(this, "uploadCode");
|
|
10
|
+
__publicField(this, "partNumber");
|
|
11
|
+
this.name = "UploadError";
|
|
12
|
+
this.uploadCode = code;
|
|
13
|
+
this.partNumber = partNumber;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Check if the upload was aborted by the user.
|
|
17
|
+
*/
|
|
18
|
+
isAborted() {
|
|
19
|
+
return this.uploadCode === "ABORTED";
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Check if this is a network error.
|
|
23
|
+
*/
|
|
24
|
+
isNetworkError() {
|
|
25
|
+
return this.uploadCode === "NETWORK_ERROR";
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Check if initialization failed.
|
|
29
|
+
*/
|
|
30
|
+
isInitFailed() {
|
|
31
|
+
return this.uploadCode === "INIT_FAILED";
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Check if a part upload failed.
|
|
35
|
+
*/
|
|
36
|
+
isPartFailed() {
|
|
37
|
+
return this.uploadCode === "PART_FAILED";
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Check if completing the upload failed.
|
|
41
|
+
*/
|
|
42
|
+
isCompleteFailed() {
|
|
43
|
+
return this.uploadCode === "COMPLETE_FAILED";
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Check if the file exceeded size limits.
|
|
47
|
+
*/
|
|
48
|
+
isSizeLimitExceeded() {
|
|
49
|
+
return this.uploadCode === "SIZE_LIMIT_EXCEEDED";
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Check if the file type is invalid.
|
|
53
|
+
*/
|
|
54
|
+
isInvalidFileType() {
|
|
55
|
+
return this.uploadCode === "INVALID_FILE_TYPE";
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Check if the upload timed out.
|
|
59
|
+
*/
|
|
60
|
+
isTimeout() {
|
|
61
|
+
return this.uploadCode === "TIMEOUT";
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Check if this error is retryable.
|
|
65
|
+
*/
|
|
66
|
+
isRetryable() {
|
|
67
|
+
return this.uploadCode === "NETWORK_ERROR" || this.uploadCode === "PART_FAILED" || this.uploadCode === "TIMEOUT";
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Convert to JSON for serialization.
|
|
71
|
+
*/
|
|
72
|
+
toJSON() {
|
|
73
|
+
return {
|
|
74
|
+
...super.toJSON(),
|
|
75
|
+
uploadCode: this.uploadCode,
|
|
76
|
+
partNumber: this.partNumber
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.UploadError = UploadError;
|
|
81
|
+
//# sourceMappingURL=UploadError-CHBJuChw.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UploadError-CHBJuChw.cjs","sources":["../src/errors/UploadError.ts"],"sourcesContent":["import { FairuError } from './FairuError';\n\n/**\n * Upload error codes.\n */\nexport type UploadErrorCode =\n | 'ABORTED'\n | 'NETWORK_ERROR'\n | 'INIT_FAILED'\n | 'PART_FAILED'\n | 'COMPLETE_FAILED'\n | 'SIZE_LIMIT_EXCEEDED'\n | 'INVALID_FILE_TYPE'\n | 'TIMEOUT';\n\n/**\n * Error class for upload failures.\n */\nexport class UploadError extends FairuError {\n public readonly uploadCode?: UploadErrorCode;\n public readonly partNumber?: number;\n\n constructor(\n message: string,\n code?: UploadErrorCode,\n partNumber?: number\n ) {\n super(message, code);\n this.name = 'UploadError';\n this.uploadCode = code;\n this.partNumber = partNumber;\n }\n\n /**\n * Check if the upload was aborted by the user.\n */\n isAborted(): boolean {\n return this.uploadCode === 'ABORTED';\n }\n\n /**\n * Check if this is a network error.\n */\n override isNetworkError(): boolean {\n return this.uploadCode === 'NETWORK_ERROR';\n }\n\n /**\n * Check if initialization failed.\n */\n isInitFailed(): boolean {\n return this.uploadCode === 'INIT_FAILED';\n }\n\n /**\n * Check if a part upload failed.\n */\n isPartFailed(): boolean {\n return this.uploadCode === 'PART_FAILED';\n }\n\n /**\n * Check if completing the upload failed.\n */\n isCompleteFailed(): boolean {\n return this.uploadCode === 'COMPLETE_FAILED';\n }\n\n /**\n * Check if the file exceeded size limits.\n */\n isSizeLimitExceeded(): boolean {\n return this.uploadCode === 'SIZE_LIMIT_EXCEEDED';\n }\n\n /**\n * Check if the file type is invalid.\n */\n isInvalidFileType(): boolean {\n return this.uploadCode === 'INVALID_FILE_TYPE';\n }\n\n /**\n * Check if the upload timed out.\n */\n isTimeout(): boolean {\n return this.uploadCode === 'TIMEOUT';\n }\n\n /**\n * Check if this error is retryable.\n */\n isRetryable(): boolean {\n return (\n this.uploadCode === 'NETWORK_ERROR' ||\n this.uploadCode === 'PART_FAILED' ||\n this.uploadCode === 'TIMEOUT'\n );\n }\n\n /**\n * Convert to JSON for serialization.\n */\n override toJSON(): Record<string, unknown> {\n return {\n ...super.toJSON(),\n uploadCode: this.uploadCode,\n partNumber: this.partNumber,\n };\n }\n}\n"],"names":["FairuError"],"mappings":";;;;;AAkBO,MAAM,oBAAoBA,WAAAA,WAAW;AAAA,EAI1C,YACE,SACA,MACA,YACA;AACA,UAAM,SAAS,IAAI;AARL;AACA;AAQd,SAAK,OAAO;AACZ,SAAK,aAAa;AAClB,SAAK,aAAa;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,YAAqB;AACnB,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKS,iBAA0B;AACjC,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,eAAwB;AACtB,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,eAAwB;AACtB,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,mBAA4B;AAC1B,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,sBAA+B;AAC7B,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,oBAA6B;AAC3B,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,YAAqB;AACnB,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,cAAuB;AACrB,WACE,KAAK,eAAe,mBACpB,KAAK,eAAe,iBACpB,KAAK,eAAe;AAAA,EAExB;AAAA;AAAA;AAAA;AAAA,EAKS,SAAkC;AACzC,WAAO;AAAA,MACL,GAAG,MAAM,OAAA;AAAA,MACT,YAAY,KAAK;AAAA,MACjB,YAAY,KAAK;AAAA,IAAA;AAAA,EAErB;AACF;;"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
+
import { F as FairuError } from "./FairuError-D8sSmRAa.js";
|
|
5
|
+
class UploadError extends FairuError {
|
|
6
|
+
constructor(message, code, partNumber) {
|
|
7
|
+
super(message, code);
|
|
8
|
+
__publicField(this, "uploadCode");
|
|
9
|
+
__publicField(this, "partNumber");
|
|
10
|
+
this.name = "UploadError";
|
|
11
|
+
this.uploadCode = code;
|
|
12
|
+
this.partNumber = partNumber;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Check if the upload was aborted by the user.
|
|
16
|
+
*/
|
|
17
|
+
isAborted() {
|
|
18
|
+
return this.uploadCode === "ABORTED";
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Check if this is a network error.
|
|
22
|
+
*/
|
|
23
|
+
isNetworkError() {
|
|
24
|
+
return this.uploadCode === "NETWORK_ERROR";
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Check if initialization failed.
|
|
28
|
+
*/
|
|
29
|
+
isInitFailed() {
|
|
30
|
+
return this.uploadCode === "INIT_FAILED";
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Check if a part upload failed.
|
|
34
|
+
*/
|
|
35
|
+
isPartFailed() {
|
|
36
|
+
return this.uploadCode === "PART_FAILED";
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Check if completing the upload failed.
|
|
40
|
+
*/
|
|
41
|
+
isCompleteFailed() {
|
|
42
|
+
return this.uploadCode === "COMPLETE_FAILED";
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Check if the file exceeded size limits.
|
|
46
|
+
*/
|
|
47
|
+
isSizeLimitExceeded() {
|
|
48
|
+
return this.uploadCode === "SIZE_LIMIT_EXCEEDED";
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Check if the file type is invalid.
|
|
52
|
+
*/
|
|
53
|
+
isInvalidFileType() {
|
|
54
|
+
return this.uploadCode === "INVALID_FILE_TYPE";
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Check if the upload timed out.
|
|
58
|
+
*/
|
|
59
|
+
isTimeout() {
|
|
60
|
+
return this.uploadCode === "TIMEOUT";
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Check if this error is retryable.
|
|
64
|
+
*/
|
|
65
|
+
isRetryable() {
|
|
66
|
+
return this.uploadCode === "NETWORK_ERROR" || this.uploadCode === "PART_FAILED" || this.uploadCode === "TIMEOUT";
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Convert to JSON for serialization.
|
|
70
|
+
*/
|
|
71
|
+
toJSON() {
|
|
72
|
+
return {
|
|
73
|
+
...super.toJSON(),
|
|
74
|
+
uploadCode: this.uploadCode,
|
|
75
|
+
partNumber: this.partNumber
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
export {
|
|
80
|
+
UploadError as U
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=UploadError-_gEcJqSS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UploadError-_gEcJqSS.js","sources":["../src/errors/UploadError.ts"],"sourcesContent":["import { FairuError } from './FairuError';\n\n/**\n * Upload error codes.\n */\nexport type UploadErrorCode =\n | 'ABORTED'\n | 'NETWORK_ERROR'\n | 'INIT_FAILED'\n | 'PART_FAILED'\n | 'COMPLETE_FAILED'\n | 'SIZE_LIMIT_EXCEEDED'\n | 'INVALID_FILE_TYPE'\n | 'TIMEOUT';\n\n/**\n * Error class for upload failures.\n */\nexport class UploadError extends FairuError {\n public readonly uploadCode?: UploadErrorCode;\n public readonly partNumber?: number;\n\n constructor(\n message: string,\n code?: UploadErrorCode,\n partNumber?: number\n ) {\n super(message, code);\n this.name = 'UploadError';\n this.uploadCode = code;\n this.partNumber = partNumber;\n }\n\n /**\n * Check if the upload was aborted by the user.\n */\n isAborted(): boolean {\n return this.uploadCode === 'ABORTED';\n }\n\n /**\n * Check if this is a network error.\n */\n override isNetworkError(): boolean {\n return this.uploadCode === 'NETWORK_ERROR';\n }\n\n /**\n * Check if initialization failed.\n */\n isInitFailed(): boolean {\n return this.uploadCode === 'INIT_FAILED';\n }\n\n /**\n * Check if a part upload failed.\n */\n isPartFailed(): boolean {\n return this.uploadCode === 'PART_FAILED';\n }\n\n /**\n * Check if completing the upload failed.\n */\n isCompleteFailed(): boolean {\n return this.uploadCode === 'COMPLETE_FAILED';\n }\n\n /**\n * Check if the file exceeded size limits.\n */\n isSizeLimitExceeded(): boolean {\n return this.uploadCode === 'SIZE_LIMIT_EXCEEDED';\n }\n\n /**\n * Check if the file type is invalid.\n */\n isInvalidFileType(): boolean {\n return this.uploadCode === 'INVALID_FILE_TYPE';\n }\n\n /**\n * Check if the upload timed out.\n */\n isTimeout(): boolean {\n return this.uploadCode === 'TIMEOUT';\n }\n\n /**\n * Check if this error is retryable.\n */\n isRetryable(): boolean {\n return (\n this.uploadCode === 'NETWORK_ERROR' ||\n this.uploadCode === 'PART_FAILED' ||\n this.uploadCode === 'TIMEOUT'\n );\n }\n\n /**\n * Convert to JSON for serialization.\n */\n override toJSON(): Record<string, unknown> {\n return {\n ...super.toJSON(),\n uploadCode: this.uploadCode,\n partNumber: this.partNumber,\n };\n }\n}\n"],"names":[],"mappings":";;;;AAkBO,MAAM,oBAAoB,WAAW;AAAA,EAI1C,YACE,SACA,MACA,YACA;AACA,UAAM,SAAS,IAAI;AARL;AACA;AAQd,SAAK,OAAO;AACZ,SAAK,aAAa;AAClB,SAAK,aAAa;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,YAAqB;AACnB,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKS,iBAA0B;AACjC,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,eAAwB;AACtB,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,eAAwB;AACtB,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,mBAA4B;AAC1B,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,sBAA+B;AAC7B,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,oBAA6B;AAC3B,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,YAAqB;AACnB,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,cAAuB;AACrB,WACE,KAAK,eAAe,mBACpB,KAAK,eAAe,iBACpB,KAAK,eAAe;AAAA,EAExB;AAAA;AAAA;AAAA;AAAA,EAKS,SAAkC;AACzC,WAAO;AAAA,MACL,GAAG,MAAM,OAAA;AAAA,MACT,YAAY,KAAK;AAAA,MACjB,YAAY,KAAK;AAAA,IAAA;AAAA,EAErB;AACF;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Client } from '@urql/core';
|
|
2
|
+
import { FairuClientConfig } from './config';
|
|
3
|
+
/**
|
|
4
|
+
* Create a urql client configured for the Fairu GraphQL API.
|
|
5
|
+
*/
|
|
6
|
+
export declare function createFairuClient(config?: FairuClientConfig): Client;
|
|
7
|
+
export type { Client };
|
|
8
|
+
//# sourceMappingURL=FairuClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FairuClient.d.ts","sourceRoot":"","sources":["../../src/client/FairuClient.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EAOP,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAmElE;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,GAAE,iBAAsB,GAAG,MAAM,CA6BxE;AAED,YAAY,EAAE,MAAM,EAAE,CAAC"}
|