@furo/open-models 1.2.3 → 1.5.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/dist/Fetcher.d.ts CHANGED
@@ -105,7 +105,7 @@ export declare class Fetcher<REQ, RES> {
105
105
  */
106
106
  setHandlers(handlers: Handlers<REQ, RES>): void;
107
107
  abortPendingRequest(reason: any): void;
108
- invoke(rqo: REQ, options?: RequestInit): void;
108
+ invoke(rqo: REQ, options?: RequestInit): Promise<RES>;
109
109
  /**
110
110
  * Succeeded is true if the request succeeded. The request succeeded if it
111
111
  * loaded without error, wasn't aborted, and the status code is ≥ 200, and
@@ -118,7 +118,7 @@ export declare class Fetcher<REQ, RES> {
118
118
  * Dispatches event `response-error` and a specific error event with status code
119
119
  * @private
120
120
  */
121
- _reworkRequest(response: Response): void;
121
+ _reworkRequest(response: Response): Promise<RES>;
122
122
  /**
123
123
  * parses response object according to lastRequest heaader informationen `content-type`
124
124
  * you will find the supported content-types in the declaration area
package/dist/Fetcher.js CHANGED
@@ -69,65 +69,69 @@ export class Fetcher {
69
69
  }
70
70
  }
71
71
  invoke(rqo, options) {
72
- // abort old request if it is still running
73
- if (this.isLoading) {
74
- this.abortPendingRequest('invoke triggered before response');
75
- }
76
- this.abortController = new AbortController();
77
- const { signal } = this.abortController;
78
- this.requestInit = {
79
- method: this.method,
80
- signal,
81
- headers: this.API_OPTIONS.headers,
82
- };
83
- if (options) {
84
- this.setRequestOptions(options);
85
- }
86
- this.isLoading = true;
87
- const { evaluatedPath, evaluatedBody } = this.buildPathAndBodyfield(this.path, this.bodyField, rqo);
88
- if (evaluatedBody) {
89
- this.requestInit.body = evaluatedBody;
90
- }
91
- clearTimeout(this.timeoutId);
92
- const request = new Request(evaluatedPath, this.requestInit);
93
- this.timeoutId = setTimeout(() => {
94
- this.abortController.abort(`Timeout of ${this.timeout}ms reached`);
95
- if (this.onRequestAborted) {
96
- this.onRequestAborted(rqo);
72
+ return new Promise((resolve, reject) => {
73
+ // abort old request if it is still running
74
+ if (this.isLoading) {
75
+ this.abortPendingRequest('invoke triggered before response');
97
76
  }
98
- // eslint-disable-next-line no-console
99
- console.error(`RequestService fetch aborted: Timeout of ${this.timeout}ms reached`);
100
- }, this.timeout);
101
- if (this.onRequestStarted) {
102
- this.onRequestStarted(rqo);
103
- }
104
- fetch(request)
105
- .then(response => {
106
- this._reworkRequest(response);
107
- if (this.onRequestFinished) {
108
- this.onRequestFinished(rqo);
77
+ this.abortController = new AbortController();
78
+ const { signal } = this.abortController;
79
+ this.requestInit = {
80
+ method: this.method,
81
+ signal,
82
+ headers: this.API_OPTIONS.headers,
83
+ };
84
+ if (options) {
85
+ this.setRequestOptions(options);
109
86
  }
110
- })
111
- .catch(err => {
112
- this.isLoading = false;
113
- if (err.name === 'AbortError') {
87
+ this.isLoading = true;
88
+ const { evaluatedPath, evaluatedBody } = this.buildPathAndBodyfield(this.path, this.bodyField, rqo);
89
+ if (evaluatedBody) {
90
+ this.requestInit.body = evaluatedBody;
91
+ }
92
+ clearTimeout(this.timeoutId);
93
+ const request = new Request(evaluatedPath, this.requestInit);
94
+ this.timeoutId = setTimeout(() => {
95
+ this.abortController.abort(`Timeout of ${this.timeout}ms reached`);
114
96
  if (this.onRequestAborted) {
115
97
  this.onRequestAborted(rqo);
116
98
  }
117
- if (this.onRequestFinished) {
118
- this.onRequestFinished(rqo);
119
- }
120
99
  // eslint-disable-next-line no-console
121
- console.error('RequestService fetch aborted: ', err);
100
+ console.error(`RequestService fetch aborted: Timeout of ${this.timeout}ms reached`);
101
+ reject(rqo);
102
+ }, this.timeout);
103
+ if (this.onRequestStarted) {
104
+ this.onRequestStarted(rqo);
122
105
  }
123
- else {
106
+ fetch(request)
107
+ .then(response => {
108
+ this._reworkRequest(response).then(resolve).catch(reject);
124
109
  if (this.onRequestFinished) {
125
110
  this.onRequestFinished(rqo);
126
111
  }
127
- if (this.onFatalError) {
128
- this.onFatalError(err);
112
+ })
113
+ .catch(err => {
114
+ this.isLoading = false;
115
+ if (err.name === 'AbortError') {
116
+ if (this.onRequestAborted) {
117
+ this.onRequestAborted(rqo);
118
+ }
119
+ if (this.onRequestFinished) {
120
+ this.onRequestFinished(rqo);
121
+ }
122
+ // eslint-disable-next-line no-console
123
+ console.error('RequestService fetch aborted: ', err);
129
124
  }
130
- }
125
+ else {
126
+ if (this.onRequestFinished) {
127
+ this.onRequestFinished(rqo);
128
+ }
129
+ if (this.onFatalError) {
130
+ this.onFatalError(err);
131
+ }
132
+ }
133
+ reject(err);
134
+ });
131
135
  });
132
136
  }
133
137
  /**
@@ -143,64 +147,70 @@ export class Fetcher {
143
147
  * @private
144
148
  */
145
149
  _reworkRequest(response) {
146
- /**
147
- * The status code 0 is accepted as a success because some schemes - e.g.
148
- * file:// - don't provide status codes.
149
- */
150
- this.isLoading = false;
151
- clearTimeout(this.timeoutId);
152
- const status = response.status || 0;
153
- if (status === 0 || (status >= 200 && status < 300)) {
154
- /**
155
- * Loaded without error, fires event `response` with full response object
156
- */
157
- this.lastResponse = response;
158
- if (this.onResponseRaw) {
159
- this.onResponseRaw(response);
160
- }
150
+ return new Promise((resolve, reject) => {
161
151
  /**
162
- * parses response object according to response heaader informationen `content-type`
163
- * you will find the supported content-types in the declaration area
152
+ * The status code 0 is accepted as a success because some schemes - e.g.
153
+ * file:// - don't provide status codes.
164
154
  */
165
- this._parseResponse(response)
166
- .then(r => {
167
- if (this.onResponse) {
168
- this.onResponse(r, response);
169
- }
170
- })
171
- .catch(error => {
172
- if (this.onResponseParseError) {
173
- this.onResponseParseError(error, response);
155
+ this.isLoading = false;
156
+ clearTimeout(this.timeoutId);
157
+ const status = response.status || 0;
158
+ if (status === 0 || (status >= 200 && status < 300)) {
159
+ /**
160
+ * Loaded without error, fires event `response` with full response object
161
+ */
162
+ this.lastResponse = response;
163
+ if (this.onResponseRaw) {
164
+ this.onResponseRaw(response);
174
165
  }
175
- });
176
- }
177
- else {
178
- /**
179
- * Error detected
180
- */
181
- this.lastResponse = response;
182
- if (this.onResponseErrorRaw) {
183
- this.onResponseErrorRaw(response);
166
+ /**
167
+ * parses response object according to response heaader informationen `content-type`
168
+ * you will find the supported content-types in the declaration area
169
+ */
170
+ this._parseResponse(response)
171
+ .then(r => {
172
+ if (this.onResponse) {
173
+ this.onResponse(r, response);
174
+ resolve(r);
175
+ }
176
+ })
177
+ .catch(error => {
178
+ if (this.onResponseParseError) {
179
+ this.onResponseParseError(error, response);
180
+ reject(error);
181
+ }
182
+ });
184
183
  }
185
- /**
186
- * parses response object according to response heaader `content-type`
187
- */
188
- this._parseResponse(response)
189
- .then(r => {
190
- if (this.onResponseError) {
191
- this.onResponseError(r, response);
192
- }
193
- })
184
+ else {
194
185
  /**
195
- * error parsing is not possible, empty response
196
- * the dispatched event will have the raw error object in the event detail
186
+ * Error detected
197
187
  */
198
- .catch(error => {
199
- if (this.onResponseErrorParseError) {
200
- this.onResponseErrorParseError(error, response);
188
+ this.lastResponse = response;
189
+ if (this.onResponseErrorRaw) {
190
+ this.onResponseErrorRaw(response);
201
191
  }
202
- });
203
- }
192
+ /**
193
+ * parses response object according to response heaader `content-type`
194
+ */
195
+ this._parseResponse(response)
196
+ .then(r => {
197
+ if (this.onResponseError) {
198
+ this.onResponseError(r, response);
199
+ }
200
+ reject(r);
201
+ })
202
+ /**
203
+ * error parsing is not possible, empty response
204
+ * the dispatched event will have the raw error object in the event detail
205
+ */
206
+ .catch(error => {
207
+ if (this.onResponseErrorParseError) {
208
+ this.onResponseErrorParseError(error, response);
209
+ }
210
+ reject(error);
211
+ });
212
+ }
213
+ });
204
214
  }
205
215
  /**
206
216
  * parses response object according to lastRequest heaader informationen `content-type`
@@ -1 +1 @@
1
- {"version":3,"file":"Fetcher.js","sourceRoot":"","sources":["../src/Fetcher.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n deepJsonNameToProtoName,\n deepProtoNameToJsonName,\n protoNameToJsonName,\n} from './Mapper';\n\nexport interface IApiOptions {\n // leave empty to connect to the same host which delivers your files, otherwise set something like http://localhost:3000\n serverAddr: string;\n ApiBaseURL: string;\n headers?: Headers;\n timeout?: number;\n PreserveProtoNames: boolean;\n}\n\ninterface Handlers<REQ, RES> {\n /**\n * The `onResponse` handler is triggered, when we have a successful response.\n * @param response\n * @param serverResponse\n */\n onResponse?: (response: RES, serverResponse: Response) => void;\n\n /**\n * The `onResponseError` handler is triggered on any received status >=400.\n * @param parsedResponse - The parsed response body from the server.\n * @param serverResponse\n */\n onResponseError?: (parsedResponse: unknown, serverResponse: Response) => void;\n\n /**\n * The `onRequestStarted` handler is triggered, whenever a request is started.\n * @param req - The request object\n */\n onRequestStarted?: (req: REQ) => void;\n\n /**\n * The `onRequestFinished` handler is triggered, whenever a request is finished or aborted.\n * @param req - The request object\n */\n onRequestFinished?: (req: REQ) => void;\n\n /**\n * The `onRequestAborted` handler is triggered, whenever a request is aborted.\n * An abort can be triggered by\n * - calling `abortPendingRequest`.\n * - triggering the request again, while you have a pending request.\n * - by reaching the request timeout.\n *\n * The timeout can be set in the OPEN_MODELS_OPTIONS, the default is 600s aka 5min.\n *\n * @param req\n */\n onRequestAborted?: (req: REQ) => void;\n\n /**\n * The `onResponseRaw` handler is triggered, when we have a successful response.\n *\n * @param serverResponse\n */\n onResponseRaw?: (serverResponse: Response) => void;\n\n /**\n * The `onResponseErrorRaw` handler is triggered on any 400\n * @param serverResponse\n */\n onResponseErrorRaw?: (serverResponse: Response) => void;\n\n /**\n * The `onParseError` handler is triggered, when the content could not be parsed, according to the `content-type` header of the response.\n *\n * @param error\n * @param serverResponse\n */\n onResponseParseError?: (error: unknown, serverResponse: Response) => void;\n /**\n * The `onParseError` handler is triggered, when the content of the error could not be parsed, according to the `content-type` header of the response.\n *\n * @param error\n * @param serverResponse\n */\n onResponseErrorParseError?: (\n error: unknown,\n serverResponse: Response,\n ) => void;\n\n /**\n * The `onFatalError` handler is triggered when nothing could be caught with the cather.\n * This should not happen.\n * @param error\n */\n onFatalError?: (error: unknown) => void;\n}\n\nexport class Fetcher<REQ, RES> {\n public timeout: number;\n\n /**\n * Contains the response from the last request. Also on errors.\n */\n public lastResponse: Response | undefined;\n\n /**\n * Indicator for a pending request. Maybe you are also interested on the `onRequestStarted` and `onRequestFinished` callback methods.\n */\n public isLoading: boolean = false;\n\n private path: string;\n\n private requestInit: RequestInit;\n\n private method: string;\n\n private responseHandler: Map<string, (r: Response) => void> = new Map<\n string,\n (r: Response) => void\n >();\n\n private abortController: AbortController;\n\n private timeoutId: ReturnType<typeof setTimeout> | number | undefined;\n\n private bodyField: keyof REQ | '*' | undefined;\n\n private API_OPTIONS: IApiOptions;\n\n /**\n *\n * @param options\n * @param method\n * @param path\n * @param bodyField\n */\n constructor(\n options: IApiOptions,\n // method\n method: string,\n // options path\n path: string,\n bodyField?: keyof REQ | '*',\n ) {\n this.API_OPTIONS = options;\n this.path = path;\n this.bodyField = bodyField;\n this.method = method;\n\n this.abortController = new AbortController();\n const { signal } = this.abortController;\n this.requestInit = {\n method: this.method,\n signal,\n headers: this.API_OPTIONS.headers,\n redirect:'follow'\n };\n\n this.timeout = this.API_OPTIONS.timeout || 300000; // chrome default timeout\n }\n\n public setRequestOptions(ri: RequestInit) {\n const { signal } = this.abortController;\n this.requestInit = {\n method: this.method,\n headers: this.API_OPTIONS.headers,\n signal,\n ...ri,\n };\n }\n\n /**\n * setHandlers let you bind all handlers at once.\n * @param handlers\n */\n public setHandlers(handlers: Handlers<REQ, RES>) {\n this.onResponse = handlers.onResponse;\n this.onResponseError = handlers.onResponseError;\n this.onRequestStarted = handlers.onRequestStarted;\n this.onRequestFinished = handlers.onRequestFinished;\n this.onRequestAborted = handlers.onRequestAborted;\n this.onResponseRaw = handlers.onResponseRaw;\n this.onResponseErrorRaw = handlers.onResponseErrorRaw;\n this.onResponseParseError = handlers.onResponseParseError;\n this.onResponseErrorParseError = handlers.onResponseErrorParseError;\n this.onFatalError = handlers.onFatalError;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public abortPendingRequest(reason: any): void {\n if (!this.isLoading) {\n return;\n }\n clearTimeout(this.timeoutId);\n this.isLoading = false;\n this.abortController.abort(reason);\n\n if (this.onRequestAborted) {\n this.onRequestAborted(reason);\n }\n }\n\n public invoke(rqo: REQ, options?: RequestInit) {\n // abort old request if it is still running\n if (this.isLoading) {\n this.abortPendingRequest('invoke triggered before response');\n }\n\n this.abortController = new AbortController();\n const { signal } = this.abortController;\n\n this.requestInit = {\n method: this.method,\n signal,\n headers: this.API_OPTIONS.headers,\n };\n\n if (options) {\n this.setRequestOptions(options);\n }\n\n\n this.isLoading = true;\n\n const { evaluatedPath, evaluatedBody } = this.buildPathAndBodyfield(\n this.path,\n this.bodyField,\n rqo,\n );\n if (evaluatedBody) {\n this.requestInit.body = evaluatedBody;\n }\n\n clearTimeout(this.timeoutId);\n const request = new Request(evaluatedPath, this.requestInit);\n this.timeoutId = setTimeout(() => {\n this.abortController.abort(`Timeout of ${this.timeout}ms reached`);\n if (this.onRequestAborted) {\n this.onRequestAborted(rqo);\n }\n // eslint-disable-next-line no-console\n console.error(\n `RequestService fetch aborted: Timeout of ${this.timeout}ms reached`,\n );\n }, this.timeout);\n\n if (this.onRequestStarted) {\n this.onRequestStarted(rqo);\n }\n\n fetch(request)\n .then(response => {\n this._reworkRequest(response);\n if (this.onRequestFinished) {\n this.onRequestFinished(rqo);\n }\n })\n .catch(err => {\n this.isLoading = false;\n\n if (err.name === 'AbortError') {\n if (this.onRequestAborted) {\n this.onRequestAborted(rqo);\n }\n if (this.onRequestFinished) {\n this.onRequestFinished(rqo);\n }\n // eslint-disable-next-line no-console\n console.error('RequestService fetch aborted: ', err);\n } else {\n if (this.onRequestFinished) {\n this.onRequestFinished(rqo);\n }\n\n if (this.onFatalError) {\n this.onFatalError(err);\n }\n }\n });\n }\n\n /**\n * Succeeded is true if the request succeeded. The request succeeded if it\n * loaded without error, wasn't aborted, and the status code is ≥ 200, and\n * < 300, or if the status code is 0.\n */\n\n /**\n * Errorhandling according to Google rest-api-v3 Status Codes\n * (https://developers.google.com/maps-booking/reference/rest-api-v3/status_codes)\n *\n * Dispatches event `response-error` and a specific error event with status code\n * @private\n */\n _reworkRequest(response: Response) {\n /**\n * The status code 0 is accepted as a success because some schemes - e.g.\n * file:// - don't provide status codes.\n */\n this.isLoading = false;\n clearTimeout(this.timeoutId);\n const status = response.status || 0;\n\n if (status === 0 || (status >= 200 && status < 300)) {\n /**\n * Loaded without error, fires event `response` with full response object\n */\n this.lastResponse = response;\n\n if (this.onResponseRaw) {\n this.onResponseRaw(response);\n }\n\n /**\n * parses response object according to response heaader informationen `content-type`\n * you will find the supported content-types in the declaration area\n */\n\n this._parseResponse(response)\n .then(r => {\n if (this.onResponse) {\n this.onResponse(r as RES, response);\n }\n })\n .catch(error => {\n if (this.onResponseParseError) {\n this.onResponseParseError(error, response);\n }\n });\n } else {\n /**\n * Error detected\n */\n this.lastResponse = response;\n if (this.onResponseErrorRaw) {\n this.onResponseErrorRaw(response);\n }\n\n /**\n * parses response object according to response heaader `content-type`\n */\n this._parseResponse(response)\n .then(r => {\n if (this.onResponseError) {\n this.onResponseError(r, response);\n }\n })\n /**\n * error parsing is not possible, empty response\n * the dispatched event will have the raw error object in the event detail\n */\n .catch(error => {\n if (this.onResponseErrorParseError) {\n this.onResponseErrorParseError(error, response);\n }\n });\n }\n }\n\n /**\n * parses response object according to lastRequest heaader informationen `content-type`\n * you will find the supported content-types in the declaration area\n * response Fetch API response object [https://developer.mozilla.org/en-US/docs/Web/API/Response]\n * Default response handler is json!\n * @param response\n * @private\n */\n // eslint-disable-next-line class-methods-use-this\n _parseResponse(response: Response) {\n return new Promise((resolve, reject) => {\n if (response) {\n this.responseHandler.set('text/plain', r => {\n r.text()\n .then(text => {\n resolve(text);\n })\n .catch(err => {\n reject(err);\n });\n });\n\n this.responseHandler.set('text/html', r => {\n r.text()\n .then(text => {\n resolve(text);\n })\n .catch(err => {\n reject(err);\n });\n });\n this.responseHandler.set('application/json', r => {\n r.json()\n .then(json => {\n // convert to literal type when needed\n resolve(\n this.API_OPTIONS.PreserveProtoNames\n ? deepProtoNameToJsonName(json)\n : json,\n );\n })\n .catch(err => {\n reject(err);\n });\n });\n this.responseHandler.set('application/octet-stream', r => {\n r.arrayBuffer()\n .then(buffer => {\n resolve(buffer);\n })\n .catch(err => {\n reject(err);\n });\n });\n this.responseHandler.set('application/pdf', r => {\n r.blob()\n .then(blob => {\n resolve(blob);\n })\n .catch(err => {\n reject(err);\n });\n });\n this.responseHandler.set('image/jpeg', r => {\n r.blob()\n .then(blob => {\n resolve(blob);\n })\n .catch(err => {\n reject(err);\n });\n });\n\n const contentType = response.headers.get('content-type');\n let handler = contentType?.split(';')[0].trim();\n if (handler === undefined) {\n handler = 'application/json';\n }\n let typeHandler = this.responseHandler.get(handler);\n\n if (typeHandler === undefined) {\n // eslint-disable-next-line no-console\n console.error('No parser for', handler);\n typeHandler = this.responseHandler.get('application/json');\n }\n\n if (typeHandler) {\n typeHandler(response);\n }\n } else {\n reject(new Error('no response'));\n }\n });\n }\n\n private buildPathAndBodyfield(\n path: string,\n bodyField: keyof REQ | '*' | undefined,\n rqo: REQ,\n ): {\n evaluatedPath: string;\n evaluatedBody: string | undefined;\n } {\n // use the rules specified here https://docs.solo.io/gloo-edge/latest/reference/api/github.com/solo-io/solo-kit/api/external/google/api/http.proto.sk/\n // find all fields in path\n let evaluatedPath = path;\n let evaluatedBody;\n\n const keysForBodyOrQueryParams: Map<string, keyof REQ> = new Map();\n Object.keys(rqo as object).forEach(key => {\n keysForBodyOrQueryParams.set(key, key as keyof REQ);\n });\n\n const fields = [...path.matchAll(/\\{([^}]+)}/g)];\n // replace url templates with values\n // /v1/cube/{id} => /v1/cube/12\n fields.forEach(field => {\n // TODO: check if qp is always set as proto name\n const rqoKey = protoNameToJsonName(field[1]) as keyof REQ;\n const rqoValue = rqo[rqoKey];\n evaluatedPath = evaluatedPath.replace(field[0], `${rqoValue}`);\n keysForBodyOrQueryParams.delete(rqoKey as string);\n });\n\n if (bodyField === '*') {\n // build body object\n const body: { [key: string]: unknown } = {};\n keysForBodyOrQueryParams.forEach(key => {\n body[key as string] = rqo[key];\n });\n evaluatedBody = JSON.stringify(body);\n } else {\n // build query params\n const params: string[] = [];\n if (bodyField !== undefined) {\n keysForBodyOrQueryParams.delete(bodyField as string);\n }\n keysForBodyOrQueryParams.forEach(key => {\n if (Array.isArray(rqo[key])) {\n (rqo[key] as unknown[]).forEach(e => {\n params.push(`${key as string}=${e}`);\n });\n } else {\n params.push(`${key as string}=${rqo[key]}`);\n }\n });\n if (params.length) {\n evaluatedPath = `${evaluatedPath}?${params.join('&')}`;\n }\n\n if (bodyField !== undefined) {\n evaluatedBody = JSON.stringify(\n this.API_OPTIONS.PreserveProtoNames\n ? deepJsonNameToProtoName(rqo[bodyField])\n : rqo[bodyField],\n );\n }\n }\n\n evaluatedPath = `${this.API_OPTIONS.serverAddr}${this.API_OPTIONS.ApiBaseURL}${evaluatedPath}`;\n\n return {\n evaluatedPath,\n evaluatedBody,\n };\n }\n\n /**\n * The `onResponse` handler is triggered, when we have a successful response.\n * @param response\n * @param serverResponse\n */\n onResponse?: (response: RES, serverResponse: Response) => void;\n\n /**\n * The `onResponseError` handler is triggered on any received status >=400.\n * @param parsedResponse - The parsed response body from the server.\n * @param serverResponse\n */\n onResponseError?: (parsedResponse: unknown, serverResponse: Response) => void;\n\n /**\n * The `onRequestStarted` handler is triggered, whenever a request is started.\n * @param req - The request object\n */\n onRequestStarted?: (req: REQ) => void;\n\n /**\n * The `onRequestFinished` handler is triggered, whenever a request is finished or aborted.\n * @param req - The request object\n */\n onRequestFinished?: (req: REQ) => void;\n\n /**\n * The `onRequestAborted` handler is triggered, whenever a request is aborted.\n * An abort can be triggered by\n * - calling `abortPendingRequest`.\n * - triggering the request again, while you have a pending request.\n * - by reaching the request timeout.\n *\n * The timeout can be set in the OPEN_MODELS_OPTIONS, the default is 600s aka 5min.\n *\n * @param req\n */\n onRequestAborted?: (req: REQ) => void;\n\n /**\n * The `onResponseRaw` handler is triggered, when we have a successful response.\n *\n * @param serverResponse\n */\n onResponseRaw?: (serverResponse: Response) => void;\n\n /**\n * The `onResponseErrorRaw` handler is triggered on any 400\n * @param serverResponse\n */\n onResponseErrorRaw?: (serverResponse: Response) => void;\n\n /**\n * The `onParseError` handler is triggered, when the content could not be parsed, according to the `content-type` header of the response.\n *\n * @param error\n * @param serverResponse\n */\n onResponseParseError?: (error: unknown, serverResponse: Response) => void;\n\n /**\n * The `onParseError` handler is triggered, when the content of the error could not be parsed, according to the `content-type` header of the response.\n *\n * @param error\n * @param serverResponse\n */\n onResponseErrorParseError?: (\n error: unknown,\n serverResponse: Response,\n ) => void;\n\n /**\n * The `onFatalError` handler is triggered when nothing could be caught with the cather.\n * This should not happen.\n * @param error\n */\n onFatalError?: (error: unknown) => void;\n}\n"]}
1
+ {"version":3,"file":"Fetcher.js","sourceRoot":"","sources":["../src/Fetcher.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n deepJsonNameToProtoName,\n deepProtoNameToJsonName,\n protoNameToJsonName,\n} from './Mapper';\n\nexport interface IApiOptions {\n // leave empty to connect to the same host which delivers your files, otherwise set something like http://localhost:3000\n serverAddr: string;\n ApiBaseURL: string;\n headers?: Headers;\n timeout?: number;\n PreserveProtoNames: boolean;\n}\n\ninterface Handlers<REQ, RES> {\n /**\n * The `onResponse` handler is triggered, when we have a successful response.\n * @param response\n * @param serverResponse\n */\n onResponse?: (response: RES, serverResponse: Response) => void;\n\n /**\n * The `onResponseError` handler is triggered on any received status >=400.\n * @param parsedResponse - The parsed response body from the server.\n * @param serverResponse\n */\n onResponseError?: (parsedResponse: unknown, serverResponse: Response) => void;\n\n /**\n * The `onRequestStarted` handler is triggered, whenever a request is started.\n * @param req - The request object\n */\n onRequestStarted?: (req: REQ) => void;\n\n /**\n * The `onRequestFinished` handler is triggered, whenever a request is finished or aborted.\n * @param req - The request object\n */\n onRequestFinished?: (req: REQ) => void;\n\n /**\n * The `onRequestAborted` handler is triggered, whenever a request is aborted.\n * An abort can be triggered by\n * - calling `abortPendingRequest`.\n * - triggering the request again, while you have a pending request.\n * - by reaching the request timeout.\n *\n * The timeout can be set in the OPEN_MODELS_OPTIONS, the default is 600s aka 5min.\n *\n * @param req\n */\n onRequestAborted?: (req: REQ) => void;\n\n /**\n * The `onResponseRaw` handler is triggered, when we have a successful response.\n *\n * @param serverResponse\n */\n onResponseRaw?: (serverResponse: Response) => void;\n\n /**\n * The `onResponseErrorRaw` handler is triggered on any 400\n * @param serverResponse\n */\n onResponseErrorRaw?: (serverResponse: Response) => void;\n\n /**\n * The `onParseError` handler is triggered, when the content could not be parsed, according to the `content-type` header of the response.\n *\n * @param error\n * @param serverResponse\n */\n onResponseParseError?: (error: unknown, serverResponse: Response) => void;\n /**\n * The `onParseError` handler is triggered, when the content of the error could not be parsed, according to the `content-type` header of the response.\n *\n * @param error\n * @param serverResponse\n */\n onResponseErrorParseError?: (\n error: unknown,\n serverResponse: Response,\n ) => void;\n\n /**\n * The `onFatalError` handler is triggered when nothing could be caught with the cather.\n * This should not happen.\n * @param error\n */\n onFatalError?: (error: unknown) => void;\n}\n\nexport class Fetcher<REQ, RES> {\n public timeout: number;\n\n /**\n * Contains the response from the last request. Also on errors.\n */\n public lastResponse: Response | undefined;\n\n /**\n * Indicator for a pending request. Maybe you are also interested on the `onRequestStarted` and `onRequestFinished` callback methods.\n */\n public isLoading: boolean = false;\n\n private path: string;\n\n private requestInit: RequestInit;\n\n private method: string;\n\n private responseHandler: Map<string, (r: Response) => void> = new Map<\n string,\n (r: Response) => void\n >();\n\n private abortController: AbortController;\n\n private timeoutId: ReturnType<typeof setTimeout> | number | undefined;\n\n private bodyField: keyof REQ | '*' | undefined;\n\n private API_OPTIONS: IApiOptions;\n\n /**\n *\n * @param options\n * @param method\n * @param path\n * @param bodyField\n */\n constructor(\n options: IApiOptions,\n // method\n method: string,\n // options path\n path: string,\n bodyField?: keyof REQ | '*',\n ) {\n this.API_OPTIONS = options;\n this.path = path;\n this.bodyField = bodyField;\n this.method = method;\n\n this.abortController = new AbortController();\n const { signal } = this.abortController;\n this.requestInit = {\n method: this.method,\n signal,\n headers: this.API_OPTIONS.headers,\n redirect:'follow'\n };\n\n this.timeout = this.API_OPTIONS.timeout || 300000; // chrome default timeout\n }\n\n public setRequestOptions(ri: RequestInit) {\n const { signal } = this.abortController;\n this.requestInit = {\n method: this.method,\n headers: this.API_OPTIONS.headers,\n signal,\n ...ri,\n };\n }\n\n /**\n * setHandlers let you bind all handlers at once.\n * @param handlers\n */\n public setHandlers(handlers: Handlers<REQ, RES>) {\n this.onResponse = handlers.onResponse;\n this.onResponseError = handlers.onResponseError;\n this.onRequestStarted = handlers.onRequestStarted;\n this.onRequestFinished = handlers.onRequestFinished;\n this.onRequestAborted = handlers.onRequestAborted;\n this.onResponseRaw = handlers.onResponseRaw;\n this.onResponseErrorRaw = handlers.onResponseErrorRaw;\n this.onResponseParseError = handlers.onResponseParseError;\n this.onResponseErrorParseError = handlers.onResponseErrorParseError;\n this.onFatalError = handlers.onFatalError;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public abortPendingRequest(reason: any): void {\n if (!this.isLoading) {\n return;\n }\n clearTimeout(this.timeoutId);\n this.isLoading = false;\n this.abortController.abort(reason);\n\n if (this.onRequestAborted) {\n this.onRequestAborted(reason);\n }\n }\n\n public invoke(rqo: REQ, options?: RequestInit):Promise<RES> {\n return new Promise((resolve, reject) => {\n // abort old request if it is still running\n if (this.isLoading) {\n this.abortPendingRequest('invoke triggered before response');\n }\n\n this.abortController = new AbortController();\n const { signal } = this.abortController;\n\n this.requestInit = {\n method: this.method,\n signal,\n headers: this.API_OPTIONS.headers,\n };\n\n if (options) {\n this.setRequestOptions(options);\n }\n\n\n this.isLoading = true;\n\n const { evaluatedPath, evaluatedBody } = this.buildPathAndBodyfield(\n this.path,\n this.bodyField,\n rqo,\n );\n if (evaluatedBody) {\n this.requestInit.body = evaluatedBody;\n }\n\n clearTimeout(this.timeoutId);\n const request = new Request(evaluatedPath, this.requestInit);\n this.timeoutId = setTimeout(() => {\n this.abortController.abort(`Timeout of ${this.timeout}ms reached`);\n if (this.onRequestAborted) {\n this.onRequestAborted(rqo);\n }\n // eslint-disable-next-line no-console\n console.error(\n `RequestService fetch aborted: Timeout of ${this.timeout}ms reached`,\n );\n reject(rqo)\n }, this.timeout);\n\n if (this.onRequestStarted) {\n this.onRequestStarted(rqo);\n }\n\n fetch(request)\n .then(response => {\n this._reworkRequest(response).then(resolve).catch(reject);\n if (this.onRequestFinished) {\n this.onRequestFinished(rqo);\n }\n })\n .catch(err => {\n this.isLoading = false;\n\n if (err.name === 'AbortError') {\n if (this.onRequestAborted) {\n this.onRequestAborted(rqo);\n }\n if (this.onRequestFinished) {\n this.onRequestFinished(rqo);\n }\n // eslint-disable-next-line no-console\n console.error('RequestService fetch aborted: ', err);\n } else {\n if (this.onRequestFinished) {\n this.onRequestFinished(rqo);\n }\n\n if (this.onFatalError) {\n this.onFatalError(err);\n }\n }\n reject(err)\n });\n })\n\n }\n\n /**\n * Succeeded is true if the request succeeded. The request succeeded if it\n * loaded without error, wasn't aborted, and the status code is ≥ 200, and\n * < 300, or if the status code is 0.\n */\n\n /**\n * Errorhandling according to Google rest-api-v3 Status Codes\n * (https://developers.google.com/maps-booking/reference/rest-api-v3/status_codes)\n *\n * Dispatches event `response-error` and a specific error event with status code\n * @private\n */\n _reworkRequest(response: Response): Promise<RES> {\n return new Promise((resolve, reject) => {\n /**\n * The status code 0 is accepted as a success because some schemes - e.g.\n * file:// - don't provide status codes.\n */\n this.isLoading = false;\n clearTimeout(this.timeoutId);\n const status = response.status || 0;\n\n if (status === 0 || (status >= 200 && status < 300)) {\n /**\n * Loaded without error, fires event `response` with full response object\n */\n this.lastResponse = response;\n\n if (this.onResponseRaw) {\n this.onResponseRaw(response);\n }\n\n /**\n * parses response object according to response heaader informationen `content-type`\n * you will find the supported content-types in the declaration area\n */\n\n this._parseResponse(response)\n .then(r => {\n if (this.onResponse) {\n this.onResponse(r as RES, response);\n resolve(r as RES);\n }\n })\n .catch(error => {\n if (this.onResponseParseError) {\n this.onResponseParseError(error, response);\n reject(error);\n }\n });\n } else {\n /**\n * Error detected\n */\n this.lastResponse = response;\n if (this.onResponseErrorRaw) {\n this.onResponseErrorRaw(response);\n }\n\n /**\n * parses response object according to response heaader `content-type`\n */\n this._parseResponse(response)\n .then(r => {\n if (this.onResponseError) {\n this.onResponseError(r, response);\n }\n reject(r);\n })\n /**\n * error parsing is not possible, empty response\n * the dispatched event will have the raw error object in the event detail\n */\n .catch(error => {\n if (this.onResponseErrorParseError) {\n this.onResponseErrorParseError(error, response);\n }\n reject(error);\n });\n }\n })\n\n }\n\n /**\n * parses response object according to lastRequest heaader informationen `content-type`\n * you will find the supported content-types in the declaration area\n * response Fetch API response object [https://developer.mozilla.org/en-US/docs/Web/API/Response]\n * Default response handler is json!\n * @param response\n * @private\n */\n // eslint-disable-next-line class-methods-use-this\n _parseResponse(response: Response) {\n return new Promise((resolve, reject) => {\n if (response) {\n this.responseHandler.set('text/plain', r => {\n r.text()\n .then(text => {\n resolve(text);\n })\n .catch(err => {\n reject(err);\n });\n });\n\n this.responseHandler.set('text/html', r => {\n r.text()\n .then(text => {\n resolve(text);\n })\n .catch(err => {\n reject(err);\n });\n });\n this.responseHandler.set('application/json', r => {\n r.json()\n .then(json => {\n // convert to literal type when needed\n resolve(\n this.API_OPTIONS.PreserveProtoNames\n ? deepProtoNameToJsonName(json)\n : json,\n );\n })\n .catch(err => {\n reject(err);\n });\n });\n this.responseHandler.set('application/octet-stream', r => {\n r.arrayBuffer()\n .then(buffer => {\n resolve(buffer);\n })\n .catch(err => {\n reject(err);\n });\n });\n this.responseHandler.set('application/pdf', r => {\n r.blob()\n .then(blob => {\n resolve(blob);\n })\n .catch(err => {\n reject(err);\n });\n });\n this.responseHandler.set('image/jpeg', r => {\n r.blob()\n .then(blob => {\n resolve(blob);\n })\n .catch(err => {\n reject(err);\n });\n });\n\n const contentType = response.headers.get('content-type');\n let handler = contentType?.split(';')[0].trim();\n if (handler === undefined) {\n handler = 'application/json';\n }\n let typeHandler = this.responseHandler.get(handler);\n\n if (typeHandler === undefined) {\n // eslint-disable-next-line no-console\n console.error('No parser for', handler);\n typeHandler = this.responseHandler.get('application/json');\n }\n\n if (typeHandler) {\n typeHandler(response);\n }\n } else {\n reject(new Error('no response'));\n }\n });\n }\n\n private buildPathAndBodyfield(\n path: string,\n bodyField: keyof REQ | '*' | undefined,\n rqo: REQ,\n ): {\n evaluatedPath: string;\n evaluatedBody: string | undefined;\n } {\n // use the rules specified here https://docs.solo.io/gloo-edge/latest/reference/api/github.com/solo-io/solo-kit/api/external/google/api/http.proto.sk/\n // find all fields in path\n let evaluatedPath = path;\n let evaluatedBody;\n\n const keysForBodyOrQueryParams: Map<string, keyof REQ> = new Map();\n Object.keys(rqo as object).forEach(key => {\n keysForBodyOrQueryParams.set(key, key as keyof REQ);\n });\n\n const fields = [...path.matchAll(/\\{([^}]+)}/g)];\n // replace url templates with values\n // /v1/cube/{id} => /v1/cube/12\n fields.forEach(field => {\n // TODO: check if qp is always set as proto name\n const rqoKey = protoNameToJsonName(field[1]) as keyof REQ;\n const rqoValue = rqo[rqoKey];\n evaluatedPath = evaluatedPath.replace(field[0], `${rqoValue}`);\n keysForBodyOrQueryParams.delete(rqoKey as string);\n });\n\n if (bodyField === '*') {\n // build body object\n const body: { [key: string]: unknown } = {};\n keysForBodyOrQueryParams.forEach(key => {\n body[key as string] = rqo[key];\n });\n evaluatedBody = JSON.stringify(body);\n } else {\n // build query params\n const params: string[] = [];\n if (bodyField !== undefined) {\n keysForBodyOrQueryParams.delete(bodyField as string);\n }\n keysForBodyOrQueryParams.forEach(key => {\n if (Array.isArray(rqo[key])) {\n (rqo[key] as unknown[]).forEach(e => {\n params.push(`${key as string}=${e}`);\n });\n } else {\n params.push(`${key as string}=${rqo[key]}`);\n }\n });\n if (params.length) {\n evaluatedPath = `${evaluatedPath}?${params.join('&')}`;\n }\n\n if (bodyField !== undefined) {\n evaluatedBody = JSON.stringify(\n this.API_OPTIONS.PreserveProtoNames\n ? deepJsonNameToProtoName(rqo[bodyField])\n : rqo[bodyField],\n );\n }\n }\n\n evaluatedPath = `${this.API_OPTIONS.serverAddr}${this.API_OPTIONS.ApiBaseURL}${evaluatedPath}`;\n\n return {\n evaluatedPath,\n evaluatedBody,\n };\n }\n\n /**\n * The `onResponse` handler is triggered, when we have a successful response.\n * @param response\n * @param serverResponse\n */\n onResponse?: (response: RES, serverResponse: Response) => void;\n\n /**\n * The `onResponseError` handler is triggered on any received status >=400.\n * @param parsedResponse - The parsed response body from the server.\n * @param serverResponse\n */\n onResponseError?: (parsedResponse: unknown, serverResponse: Response) => void;\n\n /**\n * The `onRequestStarted` handler is triggered, whenever a request is started.\n * @param req - The request object\n */\n onRequestStarted?: (req: REQ) => void;\n\n /**\n * The `onRequestFinished` handler is triggered, whenever a request is finished or aborted.\n * @param req - The request object\n */\n onRequestFinished?: (req: REQ) => void;\n\n /**\n * The `onRequestAborted` handler is triggered, whenever a request is aborted.\n * An abort can be triggered by\n * - calling `abortPendingRequest`.\n * - triggering the request again, while you have a pending request.\n * - by reaching the request timeout.\n *\n * The timeout can be set in the OPEN_MODELS_OPTIONS, the default is 600s aka 5min.\n *\n * @param req\n */\n onRequestAborted?: (req: REQ) => void;\n\n /**\n * The `onResponseRaw` handler is triggered, when we have a successful response.\n *\n * @param serverResponse\n */\n onResponseRaw?: (serverResponse: Response) => void;\n\n /**\n * The `onResponseErrorRaw` handler is triggered on any 400\n * @param serverResponse\n */\n onResponseErrorRaw?: (serverResponse: Response) => void;\n\n /**\n * The `onParseError` handler is triggered, when the content could not be parsed, according to the `content-type` header of the response.\n *\n * @param error\n * @param serverResponse\n */\n onResponseParseError?: (error: unknown, serverResponse: Response) => void;\n\n /**\n * The `onParseError` handler is triggered, when the content of the error could not be parsed, according to the `content-type` header of the response.\n *\n * @param error\n * @param serverResponse\n */\n onResponseErrorParseError?: (\n error: unknown,\n serverResponse: Response,\n ) => void;\n\n /**\n * The `onFatalError` handler is triggered when nothing could be caught with the cather.\n * This should not happen.\n * @param error\n */\n onFatalError?: (error: unknown) => void;\n}\n"]}
@@ -38,7 +38,7 @@ export declare class ARRAY<T extends FieldNode, I> extends FieldNode {
38
38
  toString(): string;
39
39
  __stringify(): string;
40
40
  __toJson(): T[];
41
- __toLiteral(): T[];
41
+ __toLiteral(): I[];
42
42
  __clear(): void;
43
43
  delete(index: number): I;
44
44
  deleteT(index: number): T;
@@ -131,6 +131,12 @@ export declare class ARRAY<T extends FieldNode, I> extends FieldNode {
131
131
  * @param items
132
132
  */
133
133
  push(...items: I[]): number;
134
+ /**
135
+ * Moves an item in the array
136
+ * @param fromIndex
137
+ * @param toIndex
138
+ */
139
+ moveItem(fromIndex: number, toIndex: number): void;
134
140
  private __pushWithoutNotifications;
135
141
  reverse(): T[];
136
142
  /**
@@ -157,6 +163,8 @@ export declare class ARRAY<T extends FieldNode, I> extends FieldNode {
157
163
  slice(start?: number, end?: number): I[];
158
164
  splice(start: number, deleteCount?: number): I[];
159
165
  splice(start: number, deleteCount: number, ...items: I[]): I[];
166
+ spliceT(start: number, deleteCount?: number): T[];
167
+ spliceT(start: number, deleteCount: number, ...items: T[]): T[];
160
168
  /**
161
169
  * The unshift() method of Array instances adds the specified elements to the beginning of an array and returns the new length of the array.
162
170
  * #### Params:
@@ -307,6 +307,18 @@ export class ARRAY extends FieldNode {
307
307
  this.__notifyArrayChanges(true);
308
308
  return n;
309
309
  }
310
+ /**
311
+ * Moves an item in the array
312
+ * @param fromIndex
313
+ * @param toIndex
314
+ */
315
+ moveItem(fromIndex, toIndex) {
316
+ const e = this._value[fromIndex];
317
+ this._value.splice(fromIndex, 1);
318
+ this._value.splice(toIndex, 0, e);
319
+ this._rebuildIndexAndFieldName();
320
+ this.__notifyArrayChanges(true);
321
+ }
310
322
  __pushWithoutNotifications(items) {
311
323
  let n = 0;
312
324
  const Constructor = this.__getConstructor();
@@ -319,6 +331,7 @@ export class ARRAY extends FieldNode {
319
331
  fn.__meta.fieldName = `[${n - 1}]`;
320
332
  fn.__meta.index = n - 1;
321
333
  fn.__meta.isArrayNode = true;
334
+ fn.__meta.isPristine = true;
322
335
  });
323
336
  this.__isEmpty = false;
324
337
  return n;
@@ -360,7 +373,7 @@ export class ARRAY extends FieldNode {
360
373
  return ret;
361
374
  }
362
375
  splice(start, deleteCount, ...items) {
363
- if (deleteCount) {
376
+ if (deleteCount !== undefined) {
364
377
  const Constructor = this.__getConstructor();
365
378
  const i = this._value
366
379
  .splice(start, deleteCount, ...items.map((literal) => {
@@ -380,6 +393,18 @@ export class ARRAY extends FieldNode {
380
393
  this.__notifyArrayChanges(true);
381
394
  return ret;
382
395
  }
396
+ spliceT(start, deleteCount, ...items) {
397
+ let ret = [];
398
+ if (deleteCount !== undefined) {
399
+ ret = this.value.splice(start, deleteCount, ...items);
400
+ }
401
+ else {
402
+ ret = this.value.splice(start);
403
+ }
404
+ this._rebuildIndexAndFieldName();
405
+ this.__notifyArrayChanges(true);
406
+ return ret;
407
+ }
383
408
  /**
384
409
  * The unshift() method of Array instances adds the specified elements to the beginning of an array and returns the new length of the array.
385
410
  * #### Params:
@@ -1 +1 @@
1
- {"version":3,"file":"ARRAY.js","sourceRoot":"","sources":["../../src/proxies/ARRAY.ts"],"names":[],"mappings":"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","sourcesContent":["import { FieldNode } from '../FieldNode';\n\nexport class ARRAY<T extends FieldNode, I> extends FieldNode {\n private _value: T[] = [];\n\n private ___Constructor: (new () => T) | undefined = undefined;\n\n constructor(initData?: I[], parent?: FieldNode, parentATributeName?: string) {\n super(undefined, parent, parentATributeName);\n this.__isPrimitive = true;\n if (initData !== undefined) {\n // eslint-disable-next-line no-console\n console.error('Use the ARRAY.Builder()');\n }\n this.__meta.typeName = `primitives.ARRAY<>`;\n }\n\n /**\n * Creates an element of type T and adds it to the beginning or end (default) of the ARRAY\n * @param initData\n * @param before\n */\n public add(initData?: I, before?: boolean): T {\n const Constructor: new () => T = this.__getConstructor();\n\n const fn = new Constructor();\n if (initData) {\n fn.__updateWithLiteral(initData);\n }\n const n = before ? 0 : this.length;\n fn.__parentNode = this;\n fn.__meta.fieldName = `[${n}]`;\n fn.__meta.index = n;\n fn.__meta.isArrayNode = true;\n fn.__rootNode = this.__rootNode;\n if (before) {\n this._value.unshift(fn);\n } else {\n this._value.push(fn);\n }\n\n this.__isEmpty = false;\n this.__notifyArrayChanges(true);\n return fn;\n }\n\n /**\n *\n * @param initData\n */\n initFromLiteral(Constructor: { new (): T }, initData: I[]) {\n this.__clear();\n this.__meta.initialValue = initData;\n this.__pushWithoutNotifications(initData);\n this.__notifyArrayChanges(false);\n }\n\n /**\n * creates a literal type from a json type\n *\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n __mapProtoNameJsonToJson(data: any): any {\n const literal: I[] = [];\n // create a dummy object\n const Constructor = this.__getConstructor();\n const fn = new Constructor();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data.forEach((row: any) => {\n literal.push(fn.__mapProtoNameJsonToJson(row));\n });\n return literal;\n }\n\n __updateWithLiteral(initData: I[]) {\n if (this.__parentNode !== undefined) {\n this.initFromLiteral(this.__getConstructor(), initData);\n }\n }\n\n __getFieldNodeByPath(deepPath: string = ''): FieldNode | undefined {\n const path = deepPath\n .replaceAll(/[[\\]]/g, '.')\n .split('.')\n .filter(p => p !== '');\n\n if (path.length > 0 && path[0] !== '') {\n // eslint-disable-next-line no-param-reassign\n deepPath = path.slice(1).join('.');\n if (deepPath === '') {\n if (this.value[parseInt(path[0], 10)]) {\n return this.value[parseInt(path[0], 10)] as FieldNode;\n }\n } else if (this.value[parseInt(path[0], 10)]) {\n return (\n this.value[parseInt(path[0], 10)] as FieldNode\n ).__getFieldNodeByPath(deepPath);\n }\n return undefined;\n }\n return undefined;\n }\n\n private __notifyArrayChanges(bubbles?: boolean) {\n this.__dispatchEvent(\n new CustomEvent('this-array-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n this.__dispatchEvent(\n new CustomEvent('this-field-value-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n if (bubbles) {\n this.__dispatchEvent(\n new CustomEvent('array-changed', {\n detail: this,\n bubbles: true,\n }),\n );\n this.__dispatchEvent(\n new CustomEvent('field-value-changed', {\n detail: this,\n bubbles: true,\n }),\n );\n } else {\n this.__dispatchEvent(\n new CustomEvent('array-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n this.__dispatchEvent(\n new CustomEvent('field-value-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n }\n }\n\n // used by broadcast\n public get __childNodes(): T[] {\n return this._value;\n }\n\n private __getConstructor(): new () => T {\n if (this.___Constructor !== undefined) {\n return this.___Constructor;\n }\n // the __parentNode defines the type of the ARRAY<T,I>\n const fieldDescriptor = this.__parentNode!.__meta.nodeFields.find(\n f => f.fieldName === this.__meta.fieldName,\n );\n return fieldDescriptor?.FieldConstructor as new () => T;\n }\n\n /**\n * @function\n * @template T FieldNode\n * @template I Json like interface type\n * @param {T} Constructor - Const\n * @param {I[]} initData - Initial open-models\n * @returns {ARRAY<T, I>}\n */\n static Builder<T extends FieldNode, I>(\n Constructor: new () => T,\n initData: I[],\n ): ARRAY<T, I> {\n const a: ARRAY<T, I> = new ARRAY<T, I>();\n a.___Constructor = Constructor;\n a.initFromLiteral(Constructor, initData);\n return a;\n }\n\n toString(): string {\n // resolve parent\n const innerType = this.__parentNode?.__meta.nodeFields.find(\n f => f.fieldName === this.__meta.fieldName,\n );\n return `[object ARRAY<${innerType?.FieldConstructor.name}>]`;\n }\n\n // only used by direct invocation of the type\n __stringify(): string {\n return JSON.stringify(this.__toJson());\n }\n\n // only used by direct invocation of the type\n __toJson(): T[] {\n return this.value.map((v: FieldNode) => v.__toJson());\n }\n\n // only used by direct invocation of the type\n __toLiteral(): T[] {\n return this.value.map((v: FieldNode) => v.__toLiteral());\n }\n\n __clear() {\n this._value.length = 0;\n this.__isEmpty = true;\n this.__notifyArrayChanges(false);\n }\n\n delete(index: number): I {\n const removed = this._value.splice(index, 1);\n this._rebuildIndexAndFieldName();\n this.__notifyArrayChanges(true);\n return removed[0].__toLiteral();\n }\n\n deleteT(index: number): T {\n const removed = this._value.splice(index, 1);\n this._rebuildIndexAndFieldName();\n this.__notifyArrayChanges(true);\n return removed[0];\n }\n\n get value(): T[] {\n return this._value;\n }\n\n /**\n * NOT needed any more, because we use the __TypeSetter instead of the __PrimitivesSetter\n set value(arr: T[]) {\n // assigning the new array will destroy any reference to it\n // __clear the array\n this.__clear();\n // (this as any)[`_${fieldName}`].length = 0;\n // refill the array\n arr.forEach((e, i) => {\n e.__parentNode = this;\n e.__meta.fieldName = `${i}`;\n e.__meta.index = i;\n e.__meta.isArrayNode = true;\n this._value.push(e);\n });\n this.__notifyArrayChanges(true);\n }\n */\n\n get length(): number {\n return this._value.length;\n }\n\n /**\n * The at() method of Array instances takes an integer value and returns the item at that index, allowing for positive and negative integers. Negative integers count back from the last item in the array.\n *\n * This method returns the Interface type.\n *\n * @param {I} index - Zero-based index of the array element to be returned, converted to an integer . Negative index counts back from the end of the array — if index < 0, index + array. length is accessed.\n */\n at(index: number): T | undefined {\n return this._value.at(index);\n }\n\n /**\n * The at() method of Array instances takes an integer value and returns the item at that index, allowing for positive and negative integers. Negative integers count back from the last item in the array.\n *\n * This method returns the FieldNode type.\n *\n * @param {T} index - Zero-based index of the array element to be returned, converted to an integer . Negative index counts back from the end of the array — if index < 0, index + array. length is accessed.\n */\n atT(index: number): T | undefined {\n return this._value.at(index);\n }\n\n /**\n * The entries() method of Array instances returns a new array iterator object that contains the key/ value pairs for each index in the array.\n */\n entries(): IterableIterator<[number, I]> {\n return this._value.map(t => t.__toLiteral()).entries();\n }\n\n /**\n * The entries() method of Array instances returns a new array iterator object that contains the key/ value pairs for each index in the array.\n */\n entriesT(): IterableIterator<[number, T]> {\n return this._value.entries();\n }\n\n /**\n * Map with interface type as value.\n *\n * The map() method of Array instances creates a new array populated with the results of calling a provided function on every element in the calling array.\n */\n mapI<U>(\n callbackfn: (value: I, index: number, array: I[]) => U,\n thisArg?: unknown,\n ): U[] {\n return this._value.map(t => t.__toLiteral()).map(callbackfn, thisArg);\n }\n\n /**\n * The map() method of Array instances creates a new array populated with the results of calling a provided function on every element in the calling array.\n */\n map<U>(\n callbackfn: (value: T, index: number, array: T[]) => U,\n thisArg?: unknown,\n ): U[] {\n return this._value.map(callbackfn, thisArg);\n }\n\n /**\n * The filter() method of Array instances creates a shallow copy of a portion of a given array, filtered down to just the elements from the given array that pass the test implemented by the provided function.\n * @param callbackfn\n * @param thisArg\n */\n filter(\n callbackfn: (value: T, index: number, array: T[]) => boolean,\n thisArg?: unknown,\n ): T[] {\n return this._value.filter(callbackfn, thisArg);\n }\n\n find(\n callbackfn: (value: T, index: number, array: T[]) => boolean,\n thisArg?: unknown,\n ): T | undefined {\n return this._value.find(callbackfn, thisArg);\n }\n\n forEach(\n callbackfn: (value: T, index: number, array: T[]) => void,\n thisArg?: unknown,\n ): void {\n return this._value.forEach(callbackfn, thisArg);\n }\n\n /**\n * ...\n * This method requires a FieldNode, not the interface type\n * @param searchElement\n * @param fromIndex\n */\n includes(searchElement: T, fromIndex?: number): boolean {\n return this._value.includes(searchElement, fromIndex);\n }\n\n /**\n * ...\n * Alternatively you can use the T.__meta.index to get the index of an element.\n * This method requires a FieldNode, not the interface type.\n * @param searchElement\n * @param fromIndex\n */\n indexOf(searchElement: T, fromIndex?: number): number {\n // if searchElement is a FieldNode return __meta.index\n return this._value.indexOf(searchElement, fromIndex);\n }\n\n keys(): IterableIterator<number> {\n return this._value.keys();\n }\n\n lastIndexOf(searchElement: T, fromIndex?: number): number {\n return this._value.lastIndexOf(searchElement, fromIndex);\n }\n\n pop(): T | undefined {\n const ret = this._value.pop();\n this.__notifyArrayChanges(true);\n return ret;\n }\n\n /**\n * The push() method of Array instances adds the specified elements to the end of an array and returns the new length of the array.\n * Params:\n * element1 … elementN – The element(s) to add to the end of the array.\n * Returns:\n * The new length property of the object upon which the method was called\n * @param items\n */\n push(...items: I[]): number {\n const n = this.__pushWithoutNotifications(items);\n this.__notifyArrayChanges(true);\n return n;\n }\n\n private __pushWithoutNotifications(items: I[]) {\n let n: number = 0;\n const Constructor: new () => T = this.__getConstructor();\n items.forEach((literal: I) => {\n const fn = new Constructor();\n fn.__updateWithLiteral(literal);\n n = this._value.push(fn);\n fn.__rootNode = this.__rootNode;\n fn.__parentNode = this;\n fn.__meta.fieldName = `[${n - 1}]`;\n fn.__meta.index = n - 1;\n fn.__meta.isArrayNode = true;\n });\n\n this.__isEmpty = false;\n return n;\n }\n\n reverse(): T[] {\n const ret = this._value.reverse();\n this.__notifyArrayChanges(true);\n return ret;\n }\n\n /**\n * The shift() method of Array instances removes the first element from an array and returns that removed element.\n *\n * This method changes the length of the array.\n */\n shift(): I | undefined {\n const t = this._value.shift();\n this.__notifyArrayChanges(true);\n return t?.__toLiteral();\n }\n\n /**\n * The slice() method of Array instances returns a shallow copy of a portion of an array into a new array object selected from start to end (end not included) where start and end represent the index of items in that array. The original array will not be modified.\n * #### Params:\n * start – Zero-based index at which to start extraction, converted to an integer .\n * Negative index counts back from the end of the array — if start < 0, start + array. length is used.\n * If start < -array. length or start is omitted, 0 is used.\n * If start >= array. length, nothing is extracted.\n *\n * end – Zero-based index at which to end extraction, converted to an integer . slice() extracts up to but not including end.\n * Negative index counts back from the end of the array — if end < 0, end + array. length is used.\n * If end < -array. length, 0 is used.\n * If end >= array. length or end is omitted, array. length is used, causing all elements until the end to be extracted.\n * If end is positioned before or at start after normalization, nothing is extracted.\n *\n */\n slice(start?: number, end?: number): I[] {\n const tar = this._value.slice(start, end);\n const ret = tar.map(t => t.__toLiteral());\n this.__notifyArrayChanges(true);\n return ret;\n }\n\n splice(start: number, deleteCount?: number): I[];\n\n splice(start: number, deleteCount: number, ...items: I[]): I[];\n\n splice(start: number, deleteCount?: number, ...items: I[]): I[] {\n if (deleteCount) {\n const Constructor: new () => T = this.__getConstructor();\n const i: I[] = this._value\n .splice(\n start,\n deleteCount,\n ...items.map((literal: I) => {\n const fn = new Constructor();\n fn.__updateWithLiteral(literal);\n fn.__rootNode = this.__rootNode;\n fn.__parentNode = this;\n fn.__meta.isArrayNode = true;\n return fn;\n }),\n )\n .map(item => item.__toLiteral());\n this._rebuildIndexAndFieldName();\n this.__notifyArrayChanges(true);\n return i;\n }\n const ret = this._value.splice(start).map(item => item.__toLiteral());\n this.__notifyArrayChanges(true);\n return ret;\n }\n\n /**\n * The unshift() method of Array instances adds the specified elements to the beginning of an array and returns the new length of the array.\n * #### Params:\n * - **element1 … elementN** The elements to add to the front of the arr.\n *\n * #### Returns:\n * The new length property of the object upon which the method was called.\n *\n */\n unshift(...items: T[]): number {\n const ret = this._value.unshift(...items);\n this.__notifyArrayChanges(true);\n return ret;\n }\n\n values(): IterableIterator<T> {\n return this._value.values();\n }\n\n private _rebuildIndexAndFieldName() {\n this._value.forEach((fn: T, i) => {\n // eslint-disable-next-line no-param-reassign\n fn.__meta.fieldName = `[${i}]`;\n // eslint-disable-next-line no-param-reassign\n fn.__meta.index = i;\n });\n }\n}\n"]}
1
+ {"version":3,"file":"ARRAY.js","sourceRoot":"","sources":["../../src/proxies/ARRAY.ts"],"names":[],"mappings":"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","sourcesContent":["import { FieldNode } from '../FieldNode'\n\nexport class ARRAY<T extends FieldNode, I> extends FieldNode {\n private _value: T[] = []\n\n private ___Constructor: (new () => T) | undefined = undefined\n\n constructor(initData?: I[], parent?: FieldNode, parentATributeName?: string) {\n super(undefined, parent, parentATributeName)\n this.__isPrimitive = true\n if (initData !== undefined) {\n // eslint-disable-next-line no-console\n console.error('Use the ARRAY.Builder()')\n }\n this.__meta.typeName = `primitives.ARRAY<>`\n }\n\n /**\n * Creates an element of type T and adds it to the beginning or end (default) of the ARRAY\n * @param initData\n * @param before\n */\n public add(initData?: I, before?: boolean): T {\n const Constructor: new () => T = this.__getConstructor()\n\n const fn = new Constructor()\n if (initData) {\n fn.__updateWithLiteral(initData)\n }\n const n = before ? 0 : this.length\n fn.__parentNode = this\n fn.__meta.fieldName = `[${n}]`\n fn.__meta.index = n\n fn.__meta.isArrayNode = true\n fn.__rootNode = this.__rootNode\n if (before) {\n this._value.unshift(fn)\n } else {\n this._value.push(fn)\n }\n\n this.__isEmpty = false\n this.__notifyArrayChanges(true)\n return fn\n }\n\n /**\n *\n * @param initData\n */\n initFromLiteral(Constructor: { new(): T }, initData: I[]) {\n this.__clear()\n this.__meta.initialValue = initData\n this.__pushWithoutNotifications(initData)\n this.__notifyArrayChanges(false)\n }\n\n /**\n * creates a literal type from a json type\n *\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n __mapProtoNameJsonToJson(data: any): any {\n const literal: I[] = []\n // create a dummy object\n const Constructor = this.__getConstructor()\n const fn = new Constructor()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data.forEach((row: any) => {\n literal.push(fn.__mapProtoNameJsonToJson(row))\n })\n return literal\n }\n\n __updateWithLiteral(initData: I[]) {\n if (this.__parentNode !== undefined) {\n this.initFromLiteral(this.__getConstructor(), initData)\n }\n }\n\n __getFieldNodeByPath(deepPath: string = ''): FieldNode | undefined {\n const path = deepPath\n .replaceAll(/[[\\]]/g, '.')\n .split('.')\n .filter(p => p !== '')\n\n if (path.length > 0 && path[0] !== '') {\n // eslint-disable-next-line no-param-reassign\n deepPath = path.slice(1).join('.')\n if (deepPath === '') {\n if (this.value[parseInt(path[0], 10)]) {\n return this.value[parseInt(path[0], 10)] as FieldNode\n }\n } else if (this.value[parseInt(path[0], 10)]) {\n return (\n this.value[parseInt(path[0], 10)] as FieldNode\n ).__getFieldNodeByPath(deepPath)\n }\n return undefined\n }\n return undefined\n }\n\n private __notifyArrayChanges(bubbles?: boolean) {\n this.__dispatchEvent(\n new CustomEvent('this-array-changed', {\n detail: this,\n bubbles: false,\n }),\n )\n this.__dispatchEvent(\n new CustomEvent('this-field-value-changed', {\n detail: this,\n bubbles: false,\n }),\n )\n if (bubbles) {\n this.__dispatchEvent(\n new CustomEvent('array-changed', {\n detail: this,\n bubbles: true,\n }),\n )\n this.__dispatchEvent(\n new CustomEvent('field-value-changed', {\n detail: this,\n bubbles: true,\n }),\n )\n } else {\n this.__dispatchEvent(\n new CustomEvent('array-changed', {\n detail: this,\n bubbles: false,\n }),\n )\n this.__dispatchEvent(\n new CustomEvent('field-value-changed', {\n detail: this,\n bubbles: false,\n }),\n )\n }\n }\n\n // used by broadcast\n public get __childNodes(): T[] {\n return this._value\n }\n\n private __getConstructor(): new () => T {\n if (this.___Constructor !== undefined) {\n return this.___Constructor\n }\n // the __parentNode defines the type of the ARRAY<T,I>\n const fieldDescriptor = this.__parentNode!.__meta.nodeFields.find(\n f => f.fieldName === this.__meta.fieldName,\n )\n return fieldDescriptor?.FieldConstructor as new () => T\n }\n\n /**\n * @function\n * @template T FieldNode\n * @template I Json like interface type\n * @param {T} Constructor - Const\n * @param {I[]} initData - Initial open-models\n * @returns {ARRAY<T, I>}\n */\n static Builder<T extends FieldNode, I>(\n Constructor: new () => T,\n initData: I[],\n ): ARRAY<T, I> {\n const a: ARRAY<T, I> = new ARRAY<T, I>()\n a.___Constructor = Constructor\n a.initFromLiteral(Constructor, initData)\n return a\n }\n\n toString(): string {\n // resolve parent\n const innerType = this.__parentNode?.__meta.nodeFields.find(\n f => f.fieldName === this.__meta.fieldName,\n )\n return `[object ARRAY<${innerType?.FieldConstructor.name}>]`\n }\n\n // only used by direct invocation of the type\n __stringify(): string {\n return JSON.stringify(this.__toJson())\n }\n\n // only used by direct invocation of the type\n __toJson(): T[] {\n return this.value.map((v: FieldNode) => v.__toJson())\n }\n\n // only used by direct invocation of the type\n __toLiteral(): I[] {\n return this.value.map((v: FieldNode) => v.__toLiteral())\n }\n\n __clear() {\n this._value.length = 0\n this.__isEmpty = true\n this.__notifyArrayChanges(false)\n }\n\n delete(index: number): I {\n const removed = this._value.splice(index, 1)\n this._rebuildIndexAndFieldName()\n this.__notifyArrayChanges(true)\n return removed[0].__toLiteral()\n }\n\n deleteT(index: number): T {\n const removed = this._value.splice(index, 1)\n this._rebuildIndexAndFieldName()\n this.__notifyArrayChanges(true)\n return removed[0]\n }\n\n get value(): T[] {\n return this._value\n }\n\n /**\n * NOT needed any more, because we use the __TypeSetter instead of the __PrimitivesSetter\n set value(arr: T[]) {\n // assigning the new array will destroy any reference to it\n // __clear the array\n this.__clear();\n // (this as any)[`_${fieldName}`].length = 0;\n // refill the array\n arr.forEach((e, i) => {\n e.__parentNode = this;\n e.__meta.fieldName = `${i}`;\n e.__meta.index = i;\n e.__meta.isArrayNode = true;\n this._value.push(e);\n });\n this.__notifyArrayChanges(true);\n }\n */\n\n get length(): number {\n return this._value.length\n }\n\n /**\n * The at() method of Array instances takes an integer value and returns the item at that index, allowing for positive and negative integers. Negative integers count back from the last item in the array.\n *\n * This method returns the Interface type.\n *\n * @param {I} index - Zero-based index of the array element to be returned, converted to an integer . Negative index counts back from the end of the array — if index < 0, index + array. length is accessed.\n */\n at(index: number): T | undefined {\n return this._value.at(index)\n }\n\n /**\n * The at() method of Array instances takes an integer value and returns the item at that index, allowing for positive and negative integers. Negative integers count back from the last item in the array.\n *\n * This method returns the FieldNode type.\n *\n * @param {T} index - Zero-based index of the array element to be returned, converted to an integer . Negative index counts back from the end of the array — if index < 0, index + array. length is accessed.\n */\n atT(index: number): T | undefined {\n return this._value.at(index)\n }\n\n /**\n * The entries() method of Array instances returns a new array iterator object that contains the key/ value pairs for each index in the array.\n */\n entries(): IterableIterator<[number, I]> {\n return this._value.map(t => t.__toLiteral()).entries()\n }\n\n /**\n * The entries() method of Array instances returns a new array iterator object that contains the key/ value pairs for each index in the array.\n */\n entriesT(): IterableIterator<[number, T]> {\n return this._value.entries()\n }\n\n /**\n * Map with interface type as value.\n *\n * The map() method of Array instances creates a new array populated with the results of calling a provided function on every element in the calling array.\n */\n mapI<U>(\n callbackfn: (value: I, index: number, array: I[]) => U,\n thisArg?: unknown,\n ): U[] {\n return this._value.map(t => t.__toLiteral()).map(callbackfn, thisArg)\n }\n\n /**\n * The map() method of Array instances creates a new array populated with the results of calling a provided function on every element in the calling array.\n */\n map<U>(\n callbackfn: (value: T, index: number, array: T[]) => U,\n thisArg?: unknown,\n ): U[] {\n return this._value.map(callbackfn, thisArg)\n }\n\n /**\n * The filter() method of Array instances creates a shallow copy of a portion of a given array, filtered down to just the elements from the given array that pass the test implemented by the provided function.\n * @param callbackfn\n * @param thisArg\n */\n filter(\n callbackfn: (value: T, index: number, array: T[]) => boolean,\n thisArg?: unknown,\n ): T[] {\n return this._value.filter(callbackfn, thisArg)\n }\n\n find(\n callbackfn: (value: T, index: number, array: T[]) => boolean,\n thisArg?: unknown,\n ): T | undefined {\n return this._value.find(callbackfn, thisArg)\n }\n\n forEach(\n callbackfn: (value: T, index: number, array: T[]) => void,\n thisArg?: unknown,\n ): void {\n return this._value.forEach(callbackfn, thisArg)\n }\n\n /**\n * ...\n * This method requires a FieldNode, not the interface type\n * @param searchElement\n * @param fromIndex\n */\n includes(searchElement: T, fromIndex?: number): boolean {\n return this._value.includes(searchElement, fromIndex)\n }\n\n /**\n * ...\n * Alternatively you can use the T.__meta.index to get the index of an element.\n * This method requires a FieldNode, not the interface type.\n * @param searchElement\n * @param fromIndex\n */\n indexOf(searchElement: T, fromIndex?: number): number {\n // if searchElement is a FieldNode return __meta.index\n return this._value.indexOf(searchElement, fromIndex)\n }\n\n keys(): IterableIterator<number> {\n return this._value.keys()\n }\n\n lastIndexOf(searchElement: T, fromIndex?: number): number {\n return this._value.lastIndexOf(searchElement, fromIndex)\n }\n\n pop(): T | undefined {\n const ret = this._value.pop()\n this.__notifyArrayChanges(true)\n return ret\n }\n\n /**\n * The push() method of Array instances adds the specified elements to the end of an array and returns the new length of the array.\n * Params:\n * element1 … elementN – The element(s) to add to the end of the array.\n * Returns:\n * The new length property of the object upon which the method was called\n * @param items\n */\n push(...items: I[]): number {\n const n = this.__pushWithoutNotifications(items)\n this.__notifyArrayChanges(true)\n return n\n }\n\n /**\n * Moves an item in the array\n * @param fromIndex\n * @param toIndex\n */\n moveItem(fromIndex:number, toIndex:number) {\n const e = this._value[fromIndex];\n this._value.splice(fromIndex, 1);\n this._value.splice(toIndex, 0, e);\n this._rebuildIndexAndFieldName()\n this.__notifyArrayChanges(true)\n }\n\n private __pushWithoutNotifications(items: I[]) {\n let n: number = 0\n const Constructor: new () => T = this.__getConstructor()\n items.forEach((literal: I) => {\n const fn = new Constructor()\n fn.__updateWithLiteral(literal)\n n = this._value.push(fn)\n fn.__rootNode = this.__rootNode\n fn.__parentNode = this\n fn.__meta.fieldName = `[${n - 1}]`\n fn.__meta.index = n - 1\n fn.__meta.isArrayNode = true\n fn.__meta.isPristine = true\n })\n\n this.__isEmpty = false\n return n\n }\n\n reverse(): T[] {\n const ret = this._value.reverse()\n this.__notifyArrayChanges(true)\n return ret\n }\n\n /**\n * The shift() method of Array instances removes the first element from an array and returns that removed element.\n *\n * This method changes the length of the array.\n */\n shift(): I | undefined {\n const t = this._value.shift()\n this.__notifyArrayChanges(true)\n return t?.__toLiteral()\n }\n\n /**\n * The slice() method of Array instances returns a shallow copy of a portion of an array into a new array object selected from start to end (end not included) where start and end represent the index of items in that array. The original array will not be modified.\n * #### Params:\n * start – Zero-based index at which to start extraction, converted to an integer .\n * Negative index counts back from the end of the array — if start < 0, start + array. length is used.\n * If start < -array. length or start is omitted, 0 is used.\n * If start >= array. length, nothing is extracted.\n *\n * end – Zero-based index at which to end extraction, converted to an integer . slice() extracts up to but not including end.\n * Negative index counts back from the end of the array — if end < 0, end + array. length is used.\n * If end < -array. length, 0 is used.\n * If end >= array. length or end is omitted, array. length is used, causing all elements until the end to be extracted.\n * If end is positioned before or at start after normalization, nothing is extracted.\n *\n */\n slice(start?: number, end?: number): I[] {\n const tar = this._value.slice(start, end)\n const ret = tar.map(t => t.__toLiteral())\n this.__notifyArrayChanges(true)\n return ret\n }\n\n splice(start: number, deleteCount?: number): I[];\n\n splice(start: number, deleteCount: number, ...items: I[]): I[];\n\n splice(start: number, deleteCount?: number, ...items: I[]): I[] {\n if (deleteCount !== undefined) {\n const Constructor: new () => T = this.__getConstructor()\n const i: I[] = this._value\n .splice(\n start,\n deleteCount,\n ...items.map((literal: I) => {\n const fn = new Constructor()\n fn.__updateWithLiteral(literal)\n fn.__rootNode = this.__rootNode\n fn.__parentNode = this\n fn.__meta.isArrayNode = true\n return fn\n }),\n )\n .map(item => item.__toLiteral())\n this._rebuildIndexAndFieldName()\n this.__notifyArrayChanges(true)\n return i\n }\n const ret = this._value.splice(start).map(item => item.__toLiteral())\n this.__notifyArrayChanges(true)\n return ret\n }\n\n spliceT(start: number, deleteCount?: number): T[];\n\n spliceT(start: number, deleteCount: number, ...items: T[]): T[];\n\n spliceT(start: number, deleteCount?: number, ...items: T[]): T[] {\n\n let ret: T[] = [];\n if (deleteCount !== undefined) {\n ret = this.value.splice(start, deleteCount, ...items)\n } else {\n ret = this.value.splice(start)\n }\n\n this._rebuildIndexAndFieldName()\n this.__notifyArrayChanges(true)\n\n return ret\n }\n\n /**\n * The unshift() method of Array instances adds the specified elements to the beginning of an array and returns the new length of the array.\n * #### Params:\n * - **element1 … elementN** The elements to add to the front of the arr.\n *\n * #### Returns:\n * The new length property of the object upon which the method was called.\n *\n */\n unshift(...items: T[]): number {\n const ret = this._value.unshift(...items)\n this.__notifyArrayChanges(true)\n return ret\n }\n\n values(): IterableIterator<T> {\n return this._value.values()\n }\n\n private _rebuildIndexAndFieldName() {\n this._value.forEach((fn: T, i) => {\n // eslint-disable-next-line no-param-reassign\n fn.__meta.fieldName = `[${i}]`\n // eslint-disable-next-line no-param-reassign\n fn.__meta.index = i\n })\n }\n}\n"]}