jxp-helper 1.4.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/MIGRATION.md ADDED
@@ -0,0 +1,150 @@
1
+ # Migration Guide: v1.x to v2.0
2
+
3
+ ## Overview
4
+
5
+ JXP Helper v2.0 introduces full TypeScript support while maintaining backward compatibility with JavaScript projects. This guide will help you migrate from v1.x to v2.0.
6
+
7
+ ## Breaking Changes
8
+
9
+ ### 1. Main Entry Point
10
+ - **v1.x**: `jxp-helper.js`
11
+ - **v2.0**: `dist/index.js` (built from TypeScript)
12
+
13
+ The package.json automatically handles this change, so no code changes are required.
14
+
15
+ ### 2. Constructor Requirements
16
+ Both `server` and `apikey` are now required parameters:
17
+
18
+ ```javascript
19
+ // v1.x - apikey was optional in some cases
20
+ const helper = new JXPHelper({ server: "http://localhost:2001" });
21
+
22
+ // v2.0 - both server and apikey are required
23
+ const helper = new JXPHelper({
24
+ server: "http://localhost:2001",
25
+ apikey: "your-api-key"
26
+ });
27
+ ```
28
+
29
+ ### 3. Error Handling
30
+ Error handling is now more consistent and type-safe:
31
+
32
+ ```javascript
33
+ // v1.x - inconsistent error formats
34
+ try {
35
+ const result = await helper.get('users');
36
+ } catch (err) {
37
+ // err could be various formats
38
+ }
39
+
40
+ // v2.0 - consistent error handling
41
+ try {
42
+ const result = await helper.get('users');
43
+ } catch (err) {
44
+ // err.response.data contains the error details
45
+ }
46
+ ```
47
+
48
+ ## New Features
49
+
50
+ ### 1. TypeScript Support
51
+ Full TypeScript definitions are now included:
52
+
53
+ ```typescript
54
+ import JXPHelper from 'jxp-helper';
55
+
56
+ const helper = new JXPHelper({
57
+ server: "http://localhost:2001",
58
+ apikey: "your-api-key",
59
+ debug: true
60
+ });
61
+
62
+ // Type-safe API calls
63
+ const users = await helper.get<User>('users');
64
+ const user = await helper.getOne<User>('users', userId);
65
+ ```
66
+
67
+ ### 2. Better Type Safety
68
+ All methods now have proper type annotations:
69
+
70
+ ```typescript
71
+ // Generic type support
72
+ interface Article {
73
+ _id: string;
74
+ title: string;
75
+ content: string;
76
+ }
77
+
78
+ const articles = await helper.get<Article>('articles', { limit: 10 });
79
+ // articles.data is now typed as Article[]
80
+ ```
81
+
82
+ ### 3. Enhanced IntelliSense
83
+ IDEs now provide better autocomplete and error detection.
84
+
85
+ ## Migration Steps
86
+
87
+ ### For JavaScript Projects
88
+
89
+ 1. **Update your package.json**:
90
+ ```json
91
+ {
92
+ "dependencies": {
93
+ "jxp-helper": "^2.0.0"
94
+ }
95
+ }
96
+ ```
97
+
98
+ 2. **Update constructor calls** to include apikey:
99
+ ```javascript
100
+ const helper = new JXPHelper({
101
+ server: "http://localhost:2001",
102
+ apikey: process.env.JXP_API_KEY
103
+ });
104
+ ```
105
+
106
+ 3. **Test your application** - most existing code should work without changes.
107
+
108
+ ### For TypeScript Projects
109
+
110
+ 1. **Update your package.json** (same as above)
111
+
112
+ 2. **Update imports**:
113
+ ```typescript
114
+ import JXPHelper from 'jxp-helper';
115
+ // or
116
+ import { JXPHelper } from 'jxp-helper';
117
+ ```
118
+
119
+ 3. **Add type annotations** where beneficial:
120
+ ```typescript
121
+ const users = await helper.get<User>('users');
122
+ ```
123
+
124
+ 4. **Update constructor** to include apikey (same as JavaScript)
125
+
126
+ ## Compatibility
127
+
128
+ - **Node.js**: Requires Node.js 14.0.0 or higher
129
+ - **JavaScript**: Fully backward compatible (with constructor changes)
130
+ - **TypeScript**: Full support with type definitions
131
+ - **ES Modules**: Supported
132
+ - **CommonJS**: Supported
133
+
134
+ ## Development Changes
135
+
136
+ If you're contributing to the project:
137
+
138
+ 1. **Source files** are now in `src/` directory
139
+ 2. **Build process**: Run `npm run build` to compile TypeScript
140
+ 3. **Development**: Use `npm run dev` for watch mode
141
+ 4. **Distribution**: Only `dist/` files are published to npm
142
+
143
+ ## Need Help?
144
+
145
+ If you encounter issues during migration:
146
+
147
+ 1. Check that both `server` and `apikey` are provided in the constructor
148
+ 2. Ensure you're using Node.js 14.0.0 or higher
149
+ 3. For TypeScript projects, make sure your tsconfig.json includes proper module resolution
150
+ 4. Open an issue on GitHub if you need assistance
package/README.md CHANGED
@@ -2,9 +2,59 @@
2
2
 
3
3
  A bunch of helpers to make it easier to read, write, delete and do other cool stuff with the [JXP API server](https://github.com/j-norwood-young/jexpress-2)
4
4
 
5
+ **Now with full TypeScript support!** 🎉
6
+
5
7
  ## Installation
6
8
 
7
- `npm install --save jxp-helper`
9
+ ```bash
10
+ npm install --save jxp-helper
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ ### TypeScript
16
+
17
+ ```typescript
18
+ import JXPHelper from 'jxp-helper';
19
+ // or
20
+ import { JXPHelper } from 'jxp-helper';
21
+
22
+ const apihelper = new JXPHelper({
23
+ server: "http://localhost:2001",
24
+ apikey: "your-api-key"
25
+ });
26
+ ```
27
+
28
+ ### JavaScript (CommonJS)
29
+
30
+ ```javascript
31
+ const JXPHelper = require("jxp-helper");
32
+ const apihelper = new JXPHelper({
33
+ server: "http://localhost:2001",
34
+ apikey: "your-api-key"
35
+ });
36
+ ```
37
+
38
+ ### JavaScript (ES Modules)
39
+
40
+ ```javascript
41
+ import JXPHelper from 'jxp-helper';
42
+ const apihelper = new JXPHelper({
43
+ server: "http://localhost:2001",
44
+ apikey: "your-api-key"
45
+ });
46
+ ```
47
+
48
+ ## Configuration Options
49
+
50
+ ```typescript
51
+ interface JXPHelperOptions {
52
+ server: string; // Required: The JXP server URL
53
+ apikey: string; // Required: Your API key
54
+ debug?: boolean; // Optional: Enable debug logging (default: false)
55
+ hideErrors?: boolean; // Optional: Hide error messages (default: false)
56
+ }
57
+ ```
8
58
 
9
59
  ## Config
10
60
 
@@ -14,7 +64,7 @@ Use [config](https://www.npmjs.com/package/config) and create `config/default.js
14
64
 
15
65
  Eg. of `default.json`
16
66
 
17
- ```
67
+ ```json
18
68
  {
19
69
  "jxp_server": "http://localhost:2001"
20
70
  }
@@ -22,9 +72,24 @@ Eg. of `default.json`
22
72
 
23
73
  ### Pass in config
24
74
 
25
- When initialising the helper, just pass in `server`.
75
+ When initialising the helper, just pass in `server` and `apikey`.
26
76
 
77
+ ```typescript
78
+ const apihelper = new JXPHelper({
79
+ server: "http://localhost:2001",
80
+ apikey: "your-api-key"
81
+ });
27
82
  ```
28
- const JXPHelper = require("jxp_helper");
29
- const apihelper = new JXPHelper({ server: "http://localhost/api" });
83
+
84
+ ## TypeScript Support
85
+
86
+ This package includes full TypeScript definitions and provides excellent IntelliSense support. All methods are properly typed with generics where appropriate:
87
+
88
+ ```typescript
89
+ // Typed responses
90
+ const user = await apihelper.getOne<User>('users', userId);
91
+ const articles = await apihelper.get<Article>('articles', { limit: 10 });
92
+
93
+ // Type-safe bulk operations
94
+ await apihelper.bulk_post('users', userData);
30
95
  ```
@@ -0,0 +1,3 @@
1
+ export { JXPHelper as default, JXPHelper } from './jxp-helper';
2
+ export * from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC/D,cAAc,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.JXPHelper = exports.default = void 0;
18
+ var jxp_helper_1 = require("./jxp-helper");
19
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return jxp_helper_1.JXPHelper; } });
20
+ Object.defineProperty(exports, "JXPHelper", { enumerable: true, get: function () { return jxp_helper_1.JXPHelper; } });
21
+ __exportStar(require("./types"), exports);
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,2CAA+D;AAAtD,qGAAA,SAAS,OAAW;AAAE,uGAAA,SAAS,OAAA;AACxC,0CAAwB"}
@@ -0,0 +1,249 @@
1
+ import { JXPHelperOptions, LoginResponse, ApiResponse, BulkWriteOperation, QueryOptions, JWTResponse, ModelDefinition } from './types';
2
+ /**
3
+ * JXPHelper class for interacting with a JXP server.
4
+ */
5
+ export declare class JXPHelper {
6
+ server: string;
7
+ apikey: string;
8
+ api: string;
9
+ debug: boolean;
10
+ hideErrors: boolean;
11
+ /**
12
+ * Creates a new instance of the JXP Helper class.
13
+ * @param opts - The options for configuring the JXP Helper.
14
+ */
15
+ constructor(opts: JXPHelperOptions);
16
+ /**
17
+ * Configures the options for the jxp-helper.
18
+ * @param opts - The options to configure.
19
+ */
20
+ config(opts: Partial<JXPHelperOptions>): void;
21
+ private _configParams;
22
+ private _randomString;
23
+ private _displayError;
24
+ url(type: string, opts?: QueryOptions, ep?: string): string;
25
+ /**
26
+ * Logs in a user with the provided email and password.
27
+ * @param email - The user's email.
28
+ * @param password - The user's password.
29
+ * @returns A promise that resolves to an object containing the login data and user information, or rejects with an error object.
30
+ */
31
+ login(email: string, password: string): Promise<LoginResponse | any>;
32
+ /**
33
+ * Retrieves a single item of a specified type by its ID.
34
+ * @param type - The type of the item.
35
+ * @param id - The ID of the item.
36
+ * @param opts - Additional options for the request.
37
+ * @returns A promise that resolves to the retrieved item.
38
+ * @throws If the request fails or returns a non-200 status code.
39
+ */
40
+ getOne<T = any>(type: string, id: string, opts?: QueryOptions): Promise<T>;
41
+ /**
42
+ * Retrieves data of a specified type from a URL.
43
+ * @param type - The type of data to retrieve.
44
+ * @param opts - Additional options for the request.
45
+ * @returns A promise that resolves with the retrieved data.
46
+ * @throws If the request fails or returns a non-200 status code.
47
+ */
48
+ get<T = any>(type: string, opts?: QueryOptions): Promise<ApiResponse<T>>;
49
+ /**
50
+ * Retrieves data in CSV format from the server.
51
+ * @param type - The type of data to retrieve.
52
+ * @param opts - Additional options for the request.
53
+ * @returns The CSV data.
54
+ * @throws If the request fails or returns a non-200 status code.
55
+ */
56
+ csv(type: string, opts?: QueryOptions): Promise<string>;
57
+ /**
58
+ * Executes a query of the specified type with the given parameters.
59
+ * @param type - The type of query to execute.
60
+ * @param query - The query string.
61
+ * @param opts - Additional options for the query.
62
+ * @returns A promise that resolves to the query result.
63
+ * @throws If the query fails or returns a non-200 status code.
64
+ */
65
+ query<T = any>(type: string, query: string, opts?: QueryOptions): Promise<T>;
66
+ /**
67
+ * Performs an aggregate operation on the specified type with the given query and options.
68
+ * @param type - The type to perform the aggregate operation on.
69
+ * @param query - The query object for the aggregate operation.
70
+ * @param opts - The options for the aggregate operation.
71
+ * @returns The result of the aggregate operation.
72
+ * @throws If the aggregate operation fails.
73
+ */
74
+ aggregate<T = any>(type: string, query: Record<string, any>, opts?: QueryOptions): Promise<T>;
75
+ /**
76
+ * Performs a bulk post or put operation.
77
+ * If the data parameter is an array, it performs a bulk update operation.
78
+ * If the data parameter is an object, it performs a single post or put operation.
79
+ * @param type - The type of operation to perform (post or put).
80
+ * @param key - The key(s) used to filter the data for the update operation.
81
+ * @param data - The data to be updated or inserted.
82
+ * @returns A promise that resolves with the result of the bulk operation.
83
+ * @throws If an error occurs during the bulk operation.
84
+ */
85
+ bulk_postput(type: string, key: string | string[], data: Record<string, any> | Record<string, any>[]): Promise<any>;
86
+ /**
87
+ * Performs a bulk update operation for a given type of data.
88
+ * @param type - The type of data to update.
89
+ * @param key - The key to use for filtering and updating the data.
90
+ * @param data - The array of data objects to update.
91
+ * @returns A promise that resolves to the response data from the bulk update operation.
92
+ * @throws If an error occurs during the bulk update operation.
93
+ */
94
+ bulk_put(type: string, key: string, data: Record<string, any>[]): Promise<any>;
95
+ /**
96
+ * Performs a bulk post operation.
97
+ * @param type - The type of data to be posted.
98
+ * @param data - The data to be posted.
99
+ * @returns A promise that resolves with the response data.
100
+ * @throws If an error occurs during the operation.
101
+ */
102
+ bulk_post(type: string, data: Record<string, any>[]): Promise<any>;
103
+ /**
104
+ * Performs a bulk write operation for a given type using the specified query.
105
+ * @param type - The type of the bulk write operation.
106
+ * @param query - The query object for the bulk write operation.
107
+ * @returns A promise that resolves to the result of the bulk write operation.
108
+ * @throws If an error occurs during the bulk write operation.
109
+ */
110
+ bulk(type: string, query: BulkWriteOperation[]): Promise<any>;
111
+ /**
112
+ * Updates multiple documents of a specified type in the database.
113
+ * @param type - The type of documents to update.
114
+ * @param data - The data to update the documents with.
115
+ * @returns The response data from the database.
116
+ * @throws If an error occurs during the update process.
117
+ */
118
+ put_all(type: string, data: Record<string, any>): Promise<any>;
119
+ /**
120
+ * Counts the number of items of a given type.
121
+ * @param type - The type of items to count.
122
+ * @param opts - Additional options for counting.
123
+ * @returns The count of items.
124
+ */
125
+ count(type: string, opts?: QueryOptions): Promise<number>;
126
+ /**
127
+ * Creates a new record by making a POST request to the specified URL.
128
+ * @param type - The type of data to post.
129
+ * @param data - The data to post.
130
+ * @returns The response data from the post operation.
131
+ */
132
+ post<T = any>(type: string, data: T): Promise<any>;
133
+ /**
134
+ * Updates an existing record by making a PUT request to the specified URL.
135
+ * @param type - The type of the record.
136
+ * @param id - The ID of the record.
137
+ * @param data - The data to be sent in the request body.
138
+ * @returns A promise that resolves to the response data.
139
+ * @throws If an error occurs during the request.
140
+ */
141
+ put<T = any>(type: string, id: string, data: T): Promise<any>;
142
+ /**
143
+ * Performs a POST or PUT request based on the existence of a specific key in the data object.
144
+ * If the key exists in the data object, a PUT request is made with the corresponding ID.
145
+ * If the key does not exist, a POST request is made with the data object.
146
+ * @param type - The type of resource to perform the request on.
147
+ * @param key - The key to check in the data object.
148
+ * @param data - The data object to be sent in the request.
149
+ * @returns A promise that resolves with the response data or rejects with an error.
150
+ */
151
+ postput(type: string, key: string, data: Record<string, any>): Promise<any>;
152
+ /**
153
+ * Deletes an item of the specified type by its ID.
154
+ * @param type - The type of the item to delete.
155
+ * @param id - The ID of the item to delete.
156
+ * @returns A promise that resolves to the deleted item.
157
+ * @throws If an error occurs during the deletion process.
158
+ */
159
+ del(type: string, id: string): Promise<any>;
160
+ /**
161
+ * Deletes a resource permanently.
162
+ * @param type - The type of resource to delete.
163
+ * @param id - The ID of the resource to delete.
164
+ * @returns A promise that resolves to the deleted resource data.
165
+ * @throws If an error occurs during the deletion process.
166
+ */
167
+ del_perm(type: string, id: string): Promise<any>;
168
+ /**
169
+ * Soft Deletes a resource and its cascading dependencies.
170
+ * @param type - The type of the resource to delete.
171
+ * @param id - The ID of the resource to delete.
172
+ * @returns A promise that resolves with the deleted resource data.
173
+ * @throws If an error occurs during the deletion process.
174
+ */
175
+ del_cascade(type: string, id: string): Promise<any>;
176
+ /**
177
+ * Permanently Deletes a resource and its associated data permanently, including all cascading dependencies.
178
+ * @param type - The type of resource to delete.
179
+ * @param id - The ID of the resource to delete.
180
+ * @returns A promise that resolves to the response data from the delete request.
181
+ * @throws If an error occurs during the delete request.
182
+ */
183
+ del_perm_cascade(type: string, id: string): Promise<any>;
184
+ /**
185
+ * Deletes all items of a specified type that match a given key-value pair.
186
+ * @param type - The type of items to delete.
187
+ * @param key - The key to filter the items.
188
+ * @param id - The value to match against the key.
189
+ * @returns A promise that resolves to an array of results from deleting each item.
190
+ * @throws If an error occurs during the deletion process.
191
+ */
192
+ del_all(type: string, key: string, id: string): Promise<any[]>;
193
+ sync<T = any>(type: string, key: string, id: string, data: T[]): Promise<any[]>;
194
+ /**
195
+ * Calls a function in the model.
196
+ * @param type - The type of the function.
197
+ * @param cmd - The command to be executed.
198
+ * @param data - The data to be sent with the request.
199
+ * @returns A promise that resolves to the response data.
200
+ * @throws Throws an error if the request fails.
201
+ */
202
+ call<T = any>(type: string, cmd: string, data: any): Promise<T>;
203
+ /**
204
+ * Updates the groups for a user.
205
+ * @param user_id - The ID of the user.
206
+ * @param groups - The groups to update.
207
+ * @returns A promise that resolves to the updated data.
208
+ * @throws If an error occurs during the update.
209
+ */
210
+ groups_put(user_id: string, groups: string[]): Promise<any>;
211
+ /**
212
+ * Deletes a group for a specific user.
213
+ * @param user_id - The ID of the user.
214
+ * @param group - The name of the group to delete.
215
+ * @returns A promise that resolves to the response data from the server.
216
+ * @throws If an error occurs during the deletion process.
217
+ */
218
+ groups_del(user_id: string, group: string): Promise<any>;
219
+ /**
220
+ * Add a user to a group
221
+ * @param user_id - The ID of the user.
222
+ * @param groups - The groups to be posted.
223
+ * @returns A promise that resolves to the response data.
224
+ * @throws If an error occurs during the post request.
225
+ */
226
+ groups_post(user_id: string, groups: string[]): Promise<any>;
227
+ /**
228
+ * Generates a JWT (JSON Web Token) for the specified email.
229
+ * @param email - The email address used for authentication.
230
+ * @returns A promise that resolves with the JWT.
231
+ * @throws If an error occurs during the retrieval of the JWT.
232
+ */
233
+ getjwt(email: string): Promise<JWTResponse>;
234
+ /**
235
+ * Retrieves the definition of a model from the server.
236
+ * @param modelname - The name of the model to retrieve.
237
+ * @returns A promise that resolves to the model definition.
238
+ * @throws If an error occurs during the retrieval process.
239
+ */
240
+ model(modelname: string): Promise<ModelDefinition>;
241
+ /**
242
+ * Retrieves the model definitions from the server.
243
+ * @returns A promise that resolves to the model definitions.
244
+ * @throws If an error occurs while retrieving the model definitions.
245
+ */
246
+ models(): Promise<ModelDefinition[]>;
247
+ }
248
+ export default JXPHelper;
249
+ //# sourceMappingURL=jxp-helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jxp-helper.d.ts","sourceRoot":"","sources":["../src/jxp-helper.ts"],"names":[],"mappings":"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"}