@actdim/dynstruct 0.9.0 → 0.9.7
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/README.md +17 -1
- package/dist/appDomain/navigation.es.js.map +1 -1
- package/dist/appDomain/security/securityContracts.es.js.map +1 -1
- package/dist/appDomain/security/securityProvider.es.js +47 -56
- package/dist/appDomain/security/securityProvider.es.js.map +1 -1
- package/dist/componentModel/componentModel.es.js +130 -145
- package/dist/componentModel/componentModel.es.js.map +1 -1
- package/dist/componentModel/scope.es.js +52 -58
- package/dist/componentModel/scope.es.js.map +1 -1
- package/dist/net/apiError.es.js +22 -26
- package/dist/net/apiError.es.js.map +1 -1
- package/dist/net/client.es.js +65 -69
- package/dist/net/client.es.js.map +1 -1
- package/dist/net/request.es.js +3 -3
- package/dist/net/request.es.js.map +1 -1
- package/dist/reactHooks.es.js.map +1 -1
- package/package.json +48 -28
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.es.js","sources":["../../src/net/request.ts"],"sourcesContent":["// Transport\r\n\r\nimport httpStatus from \"http-status\";\r\nimport { AsyncFunc, AwaitedReturnType, Func, MaybeExtends } from \"@actdim/utico/typeCore\";\r\n\r\nexport type IFetcher = {\r\n fetch(url: RequestInfo | URL, init?: RequestInit): Promise<Response>;\r\n};\r\n\r\n// IParsedBody\r\nexport type IResolvedBody = {\r\n [K in keyof Body as Body[K] extends AsyncFunc ? K : never]?: AwaitedReturnType<MaybeExtends<Body[K], AsyncFunc>>;\r\n};\r\n\r\n// https://www.iana.org/assignments/media-types/media-types.xhtml\r\nexport type MimeType =\r\n // application\r\n | \"application/atom+xml\"\r\n | \"application/json\"\r\n | \"application/javascript\"\r\n | \"application/octet-stream\"\r\n | \"application/pdf\"\r\n | \"application/postscript\"\r\n | \"application/soap+xml\"\r\n | \"application/font-woff\"\r\n | \"application/xhtml+xml\"\r\n | \"application/zip\"\r\n | \"application/gzip\"\r\n | \"application/x-tex\"\r\n | \"application/xml\"\r\n | \"application/msword\"\r\n // text\r\n | \"text/cmd\"\r\n | \"text/css\"\r\n | \"text/csv\"\r\n | \"text/html\"\r\n // \"text/javascript\" |\r\n | \"text/plain\"\r\n | \"text/xml\"\r\n | \"text/markdown\"\r\n // image\r\n | \"image/png\"\r\n | \"image/jpeg\"\r\n | \"image/tiff\";\r\n\r\n// RequestExecutionStatus\r\nexport type RequestStatus =\r\n // Created\r\n | \"\" // none/created/new/unsent\r\n // Queued\r\n | \"queued\" // scheduled\r\n // Executing\r\n | \"executing\" // sent/pending/processing/in-progress\r\n // \"suspended\" | // on-hold\r\n // Successful\r\n | \"succeeded\" // successful/resolved/done/completed/finished/fulfilled/complete\r\n // Unsuccessful\r\n | \"failed\" // unsuccessful/rejected\r\n // Aborted\r\n | \"canceled\"; // aborted/terminated\r\n\r\nexport type IResponseState = Response & {\r\n // parsed?\r\n resolved?: IResolvedBody;\r\n};\r\n\r\nexport type IRequestState = IRequestParams & {\r\n status: RequestStatus;\r\n result?: any;\r\n};\r\n\r\nexport const getResponseBlob = (response: Response) => response.blob();\r\n\r\nexport const getResponseJson = (response: Response) => response.json();\r\n\r\nexport const getResponseText = (response: Response) => response.text();\r\n\r\nexport const getResponseArrayBuffer = (response: Response) => response.arrayBuffer();\r\n\r\n// https://stackoverflow.com/questions/64781995/how-to-get-mime-type-of-an-array-buffer-object\r\nexport async function getResponseResult(response: IResponseState, request: IRequestState): Promise<any> {\r\n // const headers: { [key: string]: string } = {};\r\n let mimeType =\r\n request.contentType ||\r\n (request.headers && request.headers instanceof Headers ? request.headers.get(\"content-type\") : request.headers[\"Content-Type\"]);\r\n if (response.headers) {\r\n // for (const k in response.headers.keys()) {\r\n // headers[k] = response.headers.get[k];\r\n // }\r\n // if (response.headers.forEach) {\r\n // response.headers.forEach((v, k) => headers[k] = v);\r\n // }\r\n mimeType = response.headers instanceof Headers ? response.headers.get(\"content-type\") : response.headers[\"content-type\"];\r\n }\r\n let result: any = undefined;\r\n if (!response.resolved) {\r\n response.resolved = {};\r\n }\r\n const resolved = response.resolved;\r\n mimeType = (mimeType || \"\").toLowerCase();\r\n if (response.status === httpStatus.OK || response.status === httpStatus.NO_CONTENT) {\r\n if (mimeType.startsWith(\"text/\")) {\r\n result = await response.text();\r\n } else if (mimeType.startsWith(\"image/\")) {\r\n result = await response.blob();\r\n } else {\r\n if (mimeType.startsWith(\"application/json\")) {\r\n result = await response.json();\r\n resolved.json = result;\r\n } else if (mimeType.startsWith(\"octet-stream\")) {\r\n result = await response.blob();\r\n resolved.blob = result;\r\n } else {\r\n throw new Error(`Unsupported mime type: ${mimeType}`);\r\n }\r\n }\r\n } else {\r\n const json = await response.json();\r\n resolved.json = json;\r\n // const text = await response.text();\r\n // text === \"\" ? null : JSON.parse(text);\r\n // unexpected response\r\n throw new Error(`Response status: ${response.status}`);\r\n }\r\n\r\n request.result = result;\r\n return result;\r\n}\r\n\r\nexport interface IRequestCallbacks<TResult = any> {\r\n // onBeforeExecuteRequest\r\n onBeforeSendRequest?: (event: {\r\n request: IRequestParams;\r\n // interrupt\r\n cancel: boolean;\r\n handled: boolean;\r\n result?: TResult;\r\n }) => Promise<void>;\r\n onResponseRead?: (event: { response: Response; result: TResult }) => Promise<void>;\r\n}\r\n\r\n// IRequestOptions\r\nexport interface IRequestParams<TResult = any> extends RequestInit {\r\n // TODO: support WebSocket transport\r\n id?: string;\r\n tag?: string;\r\n url: string;\r\n // authType?: ...;\r\n useAuth?: boolean;\r\n // authToken?: string; // bearerToken\r\n // TODO: support\r\n // accepts: string[]; // https://developer.mozilla.org/ru/docs/Web/HTTP/Headers/Accept\r\n // TODO: support\r\n crossDomain?: boolean;\r\n contentType?: MimeType; // dataType\r\n httpOnly?: boolean;\r\n // transportType: ...;\r\n callbacks?: IRequestCallbacks<TResult>;\r\n}\r\n"],"names":["getResponseBlob","response","getResponseJson","getResponseText","getResponseArrayBuffer","getResponseResult","request","mimeType","result","resolved","httpStatus","json"],"mappings":";AAuEO,MAAMA,IAAkB,CAACC,MAAuBA,EAAS,
|
|
1
|
+
{"version":3,"file":"request.es.js","sources":["../../src/net/request.ts"],"sourcesContent":["// Transport\r\n\r\nimport httpStatus from \"http-status\";\r\nimport { AsyncFunc, AwaitedReturnType, Func, MaybeExtends } from \"@actdim/utico/typeCore\";\r\n\r\nexport type IFetcher = {\r\n fetch(url: RequestInfo | URL, init?: RequestInit): Promise<Response>;\r\n};\r\n\r\n// IParsedBody\r\nexport type IResolvedBody = {\r\n [K in keyof Body as Body[K] extends AsyncFunc ? K : never]?: AwaitedReturnType<MaybeExtends<Body[K], AsyncFunc>>;\r\n};\r\n\r\n// https://www.iana.org/assignments/media-types/media-types.xhtml\r\nexport type MimeType =\r\n // application\r\n | \"application/atom+xml\"\r\n | \"application/json\"\r\n | \"application/javascript\"\r\n | \"application/octet-stream\"\r\n | \"application/pdf\"\r\n | \"application/postscript\"\r\n | \"application/soap+xml\"\r\n | \"application/font-woff\"\r\n | \"application/xhtml+xml\"\r\n | \"application/zip\"\r\n | \"application/gzip\"\r\n | \"application/x-tex\"\r\n | \"application/xml\"\r\n | \"application/msword\"\r\n // text\r\n | \"text/cmd\"\r\n | \"text/css\"\r\n | \"text/csv\"\r\n | \"text/html\"\r\n // \"text/javascript\" |\r\n | \"text/plain\"\r\n | \"text/xml\"\r\n | \"text/markdown\"\r\n // image\r\n | \"image/png\"\r\n | \"image/jpeg\"\r\n | \"image/tiff\";\r\n\r\n// RequestExecutionStatus\r\nexport type RequestStatus =\r\n // Created\r\n | \"\" // none/created/new/unsent\r\n // Queued\r\n | \"queued\" // scheduled\r\n // Executing\r\n | \"executing\" // sent/pending/processing/in-progress\r\n // \"suspended\" | // on-hold\r\n // Successful\r\n | \"succeeded\" // successful/resolved/done/completed/finished/fulfilled/complete\r\n // Unsuccessful\r\n | \"failed\" // unsuccessful/rejected\r\n // Aborted\r\n | \"canceled\"; // aborted/terminated\r\n\r\nexport type IResponseState = Response & {\r\n // parsed?\r\n resolved?: IResolvedBody;\r\n};\r\n\r\nexport type IRequestState = IRequestParams & {\r\n status: RequestStatus;\r\n result?: any;\r\n};\r\n\r\nexport const getResponseBlob = (response: Response) => response.blob();\r\n\r\nexport const getResponseJson = (response: Response) => response.json();\r\n\r\nexport const getResponseText = (response: Response) => response.text();\r\n\r\nexport const getResponseArrayBuffer = (response: Response) => response.arrayBuffer();\r\n\r\n// https://stackoverflow.com/questions/64781995/how-to-get-mime-type-of-an-array-buffer-object\r\nexport async function getResponseResult(response: IResponseState, request: IRequestState): Promise<any> {\r\n // const headers: { [key: string]: string } = {};\r\n let mimeType =\r\n request.contentType ||\r\n (request.headers && request.headers instanceof Headers ? request.headers.get(\"content-type\") : request.headers[\"Content-Type\"]);\r\n if (response.headers) {\r\n // for (const k in response.headers.keys()) {\r\n // headers[k] = response.headers.get[k];\r\n // }\r\n // if (response.headers.forEach) {\r\n // response.headers.forEach((v, k) => headers[k] = v);\r\n // }\r\n mimeType = response.headers instanceof Headers ? response.headers.get(\"content-type\") : response.headers[\"content-type\"];\r\n }\r\n let result: any = undefined;\r\n if (!response.resolved) {\r\n response.resolved = {};\r\n }\r\n const resolved = response.resolved;\r\n mimeType = (mimeType || \"\").toLowerCase();\r\n if (response.status === httpStatus.OK || response.status === httpStatus.NO_CONTENT) {\r\n if (mimeType.startsWith(\"text/\")) {\r\n result = await response.text();\r\n } else if (mimeType.startsWith(\"image/\")) {\r\n result = await response.blob();\r\n } else {\r\n if (mimeType.startsWith(\"application/json\")) {\r\n result = await response.json();\r\n resolved.json = result;\r\n } else if (mimeType.startsWith(\"octet-stream\")) {\r\n result = await response.blob();\r\n resolved.blob = result;\r\n } else {\r\n throw new Error(`Unsupported mime type: ${mimeType}`);\r\n }\r\n }\r\n } else {\r\n const json = await response.json();\r\n resolved.json = json;\r\n // const text = await response.text();\r\n // text === \"\" ? null : JSON.parse(text);\r\n // unexpected response\r\n throw new Error(`Response status: ${response.status}`);\r\n }\r\n\r\n request.result = result;\r\n return result;\r\n}\r\n\r\nexport interface IRequestCallbacks<TResult = any> {\r\n // onBeforeExecuteRequest\r\n onBeforeSendRequest?: (event: {\r\n request: IRequestParams;\r\n // interrupt\r\n cancel: boolean;\r\n handled: boolean;\r\n result?: TResult;\r\n }) => Promise<void>;\r\n onResponseRead?: (event: { response: Response; result: TResult }) => Promise<void>;\r\n}\r\n\r\n// IRequestOptions\r\nexport interface IRequestParams<TResult = any> extends RequestInit {\r\n // TODO: support WebSocket transport\r\n id?: string;\r\n tag?: string;\r\n url: string;\r\n // authType?: ...;\r\n useAuth?: boolean;\r\n // authToken?: string; // bearerToken\r\n // TODO: support\r\n // accepts: string[]; // https://developer.mozilla.org/ru/docs/Web/HTTP/Headers/Accept\r\n // TODO: support\r\n crossDomain?: boolean;\r\n contentType?: MimeType; // dataType\r\n httpOnly?: boolean;\r\n // transportType: ...;\r\n callbacks?: IRequestCallbacks<TResult>;\r\n}\r\n"],"names":["getResponseBlob","response","getResponseJson","getResponseText","getResponseArrayBuffer","getResponseResult","request","mimeType","result","resolved","httpStatus","json"],"mappings":";AAuEO,MAAMA,IAAkB,CAACC,MAAuBA,EAAS,KAAA,GAEnDC,IAAkB,CAACD,MAAuBA,EAAS,KAAA,GAEnDE,IAAkB,CAACF,MAAuBA,EAAS,KAAA,GAEnDG,IAAyB,CAACH,MAAuBA,EAAS,YAAA;AAGvE,eAAsBI,EAAkBJ,GAA0BK,GAAsC;AAEpG,MAAIC,IACAD,EAAQ,gBACPA,EAAQ,WAAWA,EAAQ,mBAAmB,UAAUA,EAAQ,QAAQ,IAAI,cAAc,IAAIA,EAAQ,QAAQ,cAAc;AACjI,EAAIL,EAAS,YAOTM,IAAWN,EAAS,mBAAmB,UAAUA,EAAS,QAAQ,IAAI,cAAc,IAAIA,EAAS,QAAQ,cAAc;AAE3H,MAAIO;AACJ,EAAKP,EAAS,aACVA,EAAS,WAAW,CAAA;AAExB,QAAMQ,IAAWR,EAAS;AAE1B,MADAM,KAAYA,KAAY,IAAI,YAAA,GACxBN,EAAS,WAAWS,EAAW,MAAMT,EAAS,WAAWS,EAAW;AACpE,QAAIH,EAAS,WAAW,OAAO;AAC3B,MAAAC,IAAS,MAAMP,EAAS,KAAA;AAAA,aACjBM,EAAS,WAAW,QAAQ;AACnC,MAAAC,IAAS,MAAMP,EAAS,KAAA;AAAA,aAEpBM,EAAS,WAAW,kBAAkB;AACtC,MAAAC,IAAS,MAAMP,EAAS,KAAA,GACxBQ,EAAS,OAAOD;AAAA,aACTD,EAAS,WAAW,cAAc;AACzC,MAAAC,IAAS,MAAMP,EAAS,KAAA,GACxBQ,EAAS,OAAOD;AAAA;AAEhB,YAAM,IAAI,MAAM,0BAA0BD,CAAQ,EAAE;AAAA,OAGzD;AACH,UAAMI,IAAO,MAAMV,EAAS,KAAA;AAC5B,UAAAQ,EAAS,OAAOE,GAIV,IAAI,MAAM,oBAAoBV,EAAS,MAAM,EAAE;AAAA,EACzD;AAEA,SAAAK,EAAQ,SAASE,GACVA;AACX;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reactHooks.es.js","sources":["../src/reactHooks.ts"],"sourcesContent":["import { useRef } from \"react\";\r\n\r\nexport function useLazyRef<T>(factory: () => T) {\r\n const ref = useRef<T | null>(null);\r\n if (ref.current === null) {\r\n ref.current = factory();\r\n }\r\n return ref;\r\n}\r\n"],"names":["useLazyRef","factory","ref","useRef"],"mappings":";AAEO,SAASA,EAAcC,GAAkB;
|
|
1
|
+
{"version":3,"file":"reactHooks.es.js","sources":["../src/reactHooks.ts"],"sourcesContent":["import { useRef } from \"react\";\r\n\r\nexport function useLazyRef<T>(factory: () => T) {\r\n const ref = useRef<T | null>(null);\r\n if (ref.current === null) {\r\n ref.current = factory();\r\n }\r\n return ref;\r\n}\r\n"],"names":["useLazyRef","factory","ref","useRef"],"mappings":";AAEO,SAASA,EAAcC,GAAkB;AAC5C,QAAMC,IAAMC,EAAiB,IAAI;AACjC,SAAID,EAAI,YAAY,SAChBA,EAAI,UAAUD,EAAA,IAEXC;AACX;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@actdim/dynstruct",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.7",
|
|
4
4
|
"description": "A type-safe component system for large-scale apps: explicit dependencies, message bus communication, and structure-first, declarative design",
|
|
5
5
|
"author": "Pavel Borodaev",
|
|
6
6
|
"license": "Proprietary",
|
|
@@ -51,42 +51,62 @@
|
|
|
51
51
|
"sideEffects": false,
|
|
52
52
|
"sideEffects?": [],
|
|
53
53
|
"scripts": {
|
|
54
|
-
"build": "tsc && vite build",
|
|
55
54
|
"test": "npx vitest",
|
|
56
55
|
"wtest": "npx vitest --watch",
|
|
57
56
|
"dtest": "node --inspect-brk node_modules/vitest/vitest.mjs run --poolOptions.threads.singleThread",
|
|
58
|
-
"lint": "eslint . --ext ts
|
|
57
|
+
"lint": "eslint . -f visualstudio --ext .ts,.tsx --report-unused-disable-directives --max-warnings 0",
|
|
58
|
+
"online": "vite --host",
|
|
59
|
+
"build": "tsc -b && vite build",
|
|
60
|
+
"npm:u": "npm update",
|
|
61
|
+
"npm:ou": "npm outdated",
|
|
62
|
+
"ncu": "ncu",
|
|
63
|
+
"ncu:u": "ncu -u",
|
|
64
|
+
"ncu:ud": "ncu -u --dev",
|
|
65
|
+
"nvm:la": "nvm list available",
|
|
66
|
+
"nvm:il": "nvm install lts"
|
|
59
67
|
},
|
|
60
68
|
"peerDependencies": {
|
|
61
|
-
"rxjs": "^7.8.
|
|
62
|
-
"uuid": "^
|
|
63
|
-
"
|
|
64
|
-
"@actdim/msgmesh": "^0.9.1",
|
|
65
|
-
"http-status": "^1.7.3",
|
|
69
|
+
"rxjs": "^7.8.2",
|
|
70
|
+
"uuid": "^13.0.0",
|
|
71
|
+
"http-status": "^2.1.0",
|
|
66
72
|
"jwt-decode": "^4.0.0",
|
|
67
|
-
"mobx": "^6.
|
|
68
|
-
"mobx-react-lite": "^4.1.
|
|
73
|
+
"mobx": "^6.15.0",
|
|
74
|
+
"mobx-react-lite": "^4.1.1",
|
|
69
75
|
"mobx-utils": "^6.1.1",
|
|
70
|
-
"path-to-regexp": "^8.
|
|
71
|
-
"react": "^19.
|
|
72
|
-
"react-dom": "^19.
|
|
73
|
-
"react-router": "^7.
|
|
74
|
-
"react-router-dom": "^7.
|
|
76
|
+
"path-to-regexp": "^8.3.0",
|
|
77
|
+
"react": "^19.2.0",
|
|
78
|
+
"react-dom": "^19.2.0",
|
|
79
|
+
"react-router": "^7.9.3",
|
|
80
|
+
"react-router-dom": "^7.9.4",
|
|
81
|
+
"@actdim/utico": "^0.9.7",
|
|
82
|
+
"@actdim/msgmesh": "^0.9.7"
|
|
75
83
|
},
|
|
76
84
|
"devDependencies": {
|
|
77
|
-
"@
|
|
78
|
-
"@types/
|
|
79
|
-
"@
|
|
80
|
-
"@typescript-eslint/
|
|
81
|
-
"@
|
|
82
|
-
"
|
|
83
|
-
"eslint
|
|
84
|
-
"
|
|
85
|
-
"
|
|
86
|
-
"
|
|
87
|
-
"
|
|
88
|
-
"
|
|
85
|
+
"@swc/core": "^1.13.5",
|
|
86
|
+
"@types/node": "^24.7.0",
|
|
87
|
+
"@types/uuid": "^11.0.0",
|
|
88
|
+
"@typescript-eslint/eslint-plugin": "^8.45.0",
|
|
89
|
+
"@typescript-eslint/parser": "^8.46.0",
|
|
90
|
+
"@vitejs/plugin-react-swc": "^4.1.0",
|
|
91
|
+
"eslint": "^9.37.0",
|
|
92
|
+
"eslint-config-prettier": "^10.1.8",
|
|
93
|
+
"eslint-formatter-visualstudio": "^8.40.0",
|
|
94
|
+
"eslint-plugin-jsx-a11y": "^6.10.2",
|
|
95
|
+
"eslint-plugin-prettier": "^5.5.4",
|
|
96
|
+
"eslint-plugin-react": "^7.37.5",
|
|
97
|
+
"eslint-plugin-react-hooks": "^7.0.0",
|
|
98
|
+
"eslint-plugin-react-refresh": "^0.4.23",
|
|
99
|
+
"globals": "^16.4.0",
|
|
100
|
+
"npm-check-updates": "^19.0.0",
|
|
101
|
+
"prettier": "^3.6.2",
|
|
102
|
+
"prettier-plugin-classnames": "^0.8.4",
|
|
103
|
+
"shx": "^0.4.0",
|
|
104
|
+
"ts-node": "^10.9.2",
|
|
105
|
+
"typescript": "^5.9.3",
|
|
106
|
+
"typescript-eslint": "^8.46.0",
|
|
107
|
+
"vite": "^7.1.9",
|
|
108
|
+
"vite-plugin-dts": "^4.5.4",
|
|
89
109
|
"vite-tsconfig-paths": "^5.1.4",
|
|
90
|
-
"vitest": "^3.
|
|
110
|
+
"vitest": "^3.2.4"
|
|
91
111
|
}
|
|
92
112
|
}
|