ng-form-devtools 0.1.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.
@@ -0,0 +1,5 @@
1
+ export * from './lib/control-snapshot';
2
+ export * from './lib/devtools-message';
3
+ export * from './lib/form-snapshot';
4
+ export * from './lib/tree-utils';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export * from './lib/control-snapshot';
2
+ export * from './lib/devtools-message';
3
+ export * from './lib/form-snapshot';
4
+ export * from './lib/tree-utils';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,19 @@
1
+ export type ControlKind = 'control' | 'group' | 'array';
2
+ export type ControlPathSegment = string | number;
3
+ export type ControlStatus = 'VALID' | 'INVALID' | 'PENDING' | 'DISABLED';
4
+ export interface ControlSnapshot {
5
+ id: string;
6
+ name: string;
7
+ path: readonly ControlPathSegment[];
8
+ kind: ControlKind;
9
+ value: unknown;
10
+ status: ControlStatus;
11
+ valid: boolean;
12
+ invalid: boolean;
13
+ touched: boolean;
14
+ dirty: boolean;
15
+ disabled: boolean;
16
+ errors: Record<string, unknown> | null;
17
+ children: readonly ControlSnapshot[];
18
+ }
19
+ //# sourceMappingURL=control-snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-snapshot.d.ts","sourceRoot":"","sources":["../../src/lib/control-snapshot.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAExD,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,MAAM,CAAC;AAEjD,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AAEzE,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACpC,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACvC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;CACtC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=control-snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-snapshot.js","sourceRoot":"","sources":["../../src/lib/control-snapshot.ts"],"names":[],"mappings":""}
@@ -0,0 +1,71 @@
1
+ import { ControlKind, ControlSnapshot, ControlStatus } from './control-snapshot';
2
+ import { TrackedFormSnapshot } from './form-snapshot';
3
+ export declare const NG_FORM_DEVTOOLS_SOURCE = "NG_FORM_DEVTOOLS";
4
+ export declare const NG_FORM_DEVTOOLS_EXTENSION_SOURCE = "NG_FORM_DEVTOOLS_EXTENSION";
5
+ export interface DebugControlNode {
6
+ id: string;
7
+ name: string;
8
+ type: ControlKind;
9
+ path: string;
10
+ value: unknown;
11
+ valid: boolean;
12
+ invalid: boolean;
13
+ status: ControlStatus;
14
+ touched: boolean;
15
+ dirty: boolean;
16
+ disabled: boolean;
17
+ errors: Record<string, unknown> | null;
18
+ children: readonly DebugControlNode[];
19
+ }
20
+ export interface DebugFormSnapshot {
21
+ formId: string;
22
+ formName: string;
23
+ source: 'reactive' | 'signal';
24
+ timestamp: number;
25
+ capturedAt: string;
26
+ root: DebugControlNode;
27
+ }
28
+ export interface FormRegisteredMessage {
29
+ source: typeof NG_FORM_DEVTOOLS_SOURCE;
30
+ type: 'FORM_REGISTERED';
31
+ payload: {
32
+ formId: string;
33
+ formName: string;
34
+ source: 'reactive' | 'signal';
35
+ };
36
+ }
37
+ export interface FormSnapshotMessage {
38
+ source: typeof NG_FORM_DEVTOOLS_SOURCE;
39
+ type: 'FORM_SNAPSHOT';
40
+ payload: DebugFormSnapshot;
41
+ }
42
+ export interface FormRemovedMessage {
43
+ source: typeof NG_FORM_DEVTOOLS_SOURCE;
44
+ type: 'FORM_REMOVED';
45
+ payload: {
46
+ formId: string;
47
+ };
48
+ }
49
+ export interface RequestStateMessage {
50
+ source: typeof NG_FORM_DEVTOOLS_EXTENSION_SOURCE;
51
+ type: 'REQUEST_STATE';
52
+ }
53
+ export interface ApplySnapshotMessage {
54
+ source: typeof NG_FORM_DEVTOOLS_EXTENSION_SOURCE;
55
+ type: 'APPLY_SNAPSHOT';
56
+ payload: DebugFormSnapshot;
57
+ }
58
+ export type DevtoolsMessage = FormRegisteredMessage | FormSnapshotMessage | FormRemovedMessage;
59
+ export type DevtoolsBridgeInboundMessage = RequestStateMessage | ApplySnapshotMessage;
60
+ export declare function toDebugControlNode(control: ControlSnapshot): DebugControlNode;
61
+ export declare function toDebugFormSnapshot(snapshot: TrackedFormSnapshot): DebugFormSnapshot;
62
+ export declare function createFormRegisteredMessage(snapshot: TrackedFormSnapshot): FormRegisteredMessage;
63
+ export declare function createFormSnapshotMessage(snapshot: TrackedFormSnapshot): FormSnapshotMessage;
64
+ export declare function createFormRemovedMessage(formId: string): FormRemovedMessage;
65
+ export declare function isDevtoolsMessage(value: unknown): value is DevtoolsMessage;
66
+ export declare function createRequestStateMessage(): RequestStateMessage;
67
+ export declare function createApplySnapshotMessage(snapshot: DebugFormSnapshot): ApplySnapshotMessage;
68
+ export declare function isRequestStateMessage(value: unknown): value is RequestStateMessage;
69
+ export declare function isApplySnapshotMessage(value: unknown): value is ApplySnapshotMessage;
70
+ export declare function isDebugFormSnapshot(value: unknown): value is DebugFormSnapshot;
71
+ //# sourceMappingURL=devtools-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devtools-message.d.ts","sourceRoot":"","sources":["../../src/lib/devtools-message.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ import { serializeControlPath } from './tree-utils';
2
+ export const NG_FORM_DEVTOOLS_SOURCE = 'NG_FORM_DEVTOOLS';
3
+ export const NG_FORM_DEVTOOLS_EXTENSION_SOURCE = 'NG_FORM_DEVTOOLS_EXTENSION';
4
+ export function toDebugControlNode(control) {
5
+ return {
6
+ id: control.id,
7
+ name: control.name,
8
+ type: control.kind,
9
+ path: serializeControlPath(control.path),
10
+ value: control.value,
11
+ valid: control.valid,
12
+ invalid: control.invalid,
13
+ status: control.status,
14
+ touched: control.touched,
15
+ dirty: control.dirty,
16
+ disabled: control.disabled,
17
+ errors: control.errors,
18
+ children: control.children.map((child) => toDebugControlNode(child))
19
+ };
20
+ }
21
+ export function toDebugFormSnapshot(snapshot) {
22
+ return {
23
+ formId: snapshot.id,
24
+ formName: snapshot.name,
25
+ source: snapshot.source,
26
+ timestamp: snapshot.timestamp,
27
+ capturedAt: snapshot.capturedAt,
28
+ root: toDebugControlNode(snapshot.root)
29
+ };
30
+ }
31
+ export function createFormRegisteredMessage(snapshot) {
32
+ return {
33
+ source: NG_FORM_DEVTOOLS_SOURCE,
34
+ type: 'FORM_REGISTERED',
35
+ payload: {
36
+ formId: snapshot.id,
37
+ formName: snapshot.name,
38
+ source: snapshot.source
39
+ }
40
+ };
41
+ }
42
+ export function createFormSnapshotMessage(snapshot) {
43
+ return {
44
+ source: NG_FORM_DEVTOOLS_SOURCE,
45
+ type: 'FORM_SNAPSHOT',
46
+ payload: toDebugFormSnapshot(snapshot)
47
+ };
48
+ }
49
+ export function createFormRemovedMessage(formId) {
50
+ return {
51
+ source: NG_FORM_DEVTOOLS_SOURCE,
52
+ type: 'FORM_REMOVED',
53
+ payload: {
54
+ formId
55
+ }
56
+ };
57
+ }
58
+ export function isDevtoolsMessage(value) {
59
+ if (!isRecord(value)) {
60
+ return false;
61
+ }
62
+ return (value['source'] === NG_FORM_DEVTOOLS_SOURCE &&
63
+ (value['type'] === 'FORM_REGISTERED' ||
64
+ value['type'] === 'FORM_SNAPSHOT' ||
65
+ value['type'] === 'FORM_REMOVED'));
66
+ }
67
+ export function createRequestStateMessage() {
68
+ return {
69
+ source: NG_FORM_DEVTOOLS_EXTENSION_SOURCE,
70
+ type: 'REQUEST_STATE'
71
+ };
72
+ }
73
+ export function createApplySnapshotMessage(snapshot) {
74
+ return {
75
+ source: NG_FORM_DEVTOOLS_EXTENSION_SOURCE,
76
+ type: 'APPLY_SNAPSHOT',
77
+ payload: snapshot
78
+ };
79
+ }
80
+ export function isRequestStateMessage(value) {
81
+ return (isRecord(value) &&
82
+ value['source'] === NG_FORM_DEVTOOLS_EXTENSION_SOURCE &&
83
+ value['type'] === 'REQUEST_STATE');
84
+ }
85
+ export function isApplySnapshotMessage(value) {
86
+ return (isRecord(value) &&
87
+ value['source'] === NG_FORM_DEVTOOLS_EXTENSION_SOURCE &&
88
+ value['type'] === 'APPLY_SNAPSHOT' &&
89
+ isDebugFormSnapshot(value['payload']));
90
+ }
91
+ export function isDebugFormSnapshot(value) {
92
+ return (isRecord(value) &&
93
+ typeof value['formId'] === 'string' &&
94
+ typeof value['formName'] === 'string' &&
95
+ (value['source'] === 'reactive' || value['source'] === 'signal') &&
96
+ typeof value['timestamp'] === 'number' &&
97
+ typeof value['capturedAt'] === 'string' &&
98
+ isDebugControlNode(value['root']));
99
+ }
100
+ function isDebugControlNode(value) {
101
+ return (isRecord(value) &&
102
+ typeof value['id'] === 'string' &&
103
+ typeof value['name'] === 'string' &&
104
+ (value['type'] === 'group' || value['type'] === 'control' || value['type'] === 'array') &&
105
+ typeof value['path'] === 'string' &&
106
+ typeof value['valid'] === 'boolean' &&
107
+ typeof value['invalid'] === 'boolean' &&
108
+ typeof value['status'] === 'string' &&
109
+ typeof value['touched'] === 'boolean' &&
110
+ typeof value['dirty'] === 'boolean' &&
111
+ typeof value['disabled'] === 'boolean' &&
112
+ Array.isArray(value['children']) &&
113
+ value['children'].every((child) => isDebugControlNode(child)));
114
+ }
115
+ function isRecord(value) {
116
+ return typeof value === 'object' && value !== null;
117
+ }
118
+ //# sourceMappingURL=devtools-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devtools-message.js","sourceRoot":"","sources":["../../src/lib/devtools-message.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { ControlSnapshot } from './control-snapshot';
2
+ export interface TrackedFormSnapshot {
3
+ id: string;
4
+ name: string;
5
+ source: 'reactive' | 'signal';
6
+ timestamp: number;
7
+ capturedAt: string;
8
+ root: ControlSnapshot;
9
+ }
10
+ export interface CreateTrackedFormSnapshotInput {
11
+ id: string;
12
+ name: string;
13
+ source: 'reactive' | 'signal';
14
+ timestamp?: number;
15
+ root: ControlSnapshot;
16
+ capturedAt?: string;
17
+ }
18
+ export declare function createTrackedFormSnapshot(input: CreateTrackedFormSnapshotInput): TrackedFormSnapshot;
19
+ //# sourceMappingURL=form-snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-snapshot.d.ts","sourceRoot":"","sources":["../../src/lib/form-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,MAAM,WAAW,8BAA8B;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,eAAe,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,8BAA8B,GACpC,mBAAmB,CAQrB"}
@@ -0,0 +1,9 @@
1
+ export function createTrackedFormSnapshot(input) {
2
+ const timestamp = input.timestamp ?? Date.now();
3
+ return {
4
+ ...input,
5
+ timestamp,
6
+ capturedAt: input.capturedAt ?? new Date(timestamp).toISOString()
7
+ };
8
+ }
9
+ //# sourceMappingURL=form-snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-snapshot.js","sourceRoot":"","sources":["../../src/lib/form-snapshot.ts"],"names":[],"mappings":"AAoBA,MAAM,UAAU,yBAAyB,CACvC,KAAqC;IAErC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IAEhD,OAAO;QACL,GAAG,KAAK;QACR,SAAS;QACT,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;KAClE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { ControlPathSegment, ControlSnapshot } from './control-snapshot';
2
+ export declare function serializeControlPath(path: readonly ControlPathSegment[]): string;
3
+ export declare function walkControlTree(root: ControlSnapshot, visitor: (control: ControlSnapshot) => void): void;
4
+ //# sourceMappingURL=tree-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-utils.d.ts","sourceRoot":"","sources":["../../src/lib/tree-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEzE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,kBAAkB,EAAE,GAAG,MAAM,CAMhF;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,GAC1C,IAAI,CAMN"}
@@ -0,0 +1,13 @@
1
+ export function serializeControlPath(path) {
2
+ if (path.length === 0) {
3
+ return 'root';
4
+ }
5
+ return path.map((segment) => (typeof segment === 'number' ? `[${segment}]` : segment)).join('.');
6
+ }
7
+ export function walkControlTree(root, visitor) {
8
+ visitor(root);
9
+ for (const child of root.children) {
10
+ walkControlTree(child, visitor);
11
+ }
12
+ }
13
+ //# sourceMappingURL=tree-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-utils.js","sourceRoot":"","sources":["../../src/lib/tree-utils.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,oBAAoB,CAAC,IAAmC;IACtE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnG,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,IAAqB,EACrB,OAA2C;IAE3C,OAAO,CAAC,IAAI,CAAC,CAAC;IAEd,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;AACH,CAAC"}
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "ng-form-devtools",
3
+ "version": "0.1.0",
4
+ "description": "Framework-agnostic debug model for ng-form-devtools",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/timtilch/ng-form-devtools.git"
10
+ },
11
+ "homepage": "https://github.com/timtilch/ng-form-devtools#readme",
12
+ "bugs": {
13
+ "url": "https://github.com/timtilch/ng-form-devtools/issues"
14
+ },
15
+ "sideEffects": false,
16
+ "main": "./dist/index.js",
17
+ "types": "./dist/index.d.ts",
18
+ "exports": {
19
+ ".": {
20
+ "types": "./dist/index.d.ts",
21
+ "default": "./dist/index.js"
22
+ }
23
+ },
24
+ "publishConfig": {
25
+ "access": "public"
26
+ },
27
+ "files": [
28
+ "dist"
29
+ ],
30
+ "scripts": {
31
+ "build": "tsc -p tsconfig.build.json",
32
+ "prepublishOnly": "npm run build",
33
+ "typecheck": "tsc --noEmit -p tsconfig.json",
34
+ "test": "vitest run"
35
+ }
36
+ }