archrip 0.1.2
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/commands/build.d.ts +2 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +88 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +58 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/serve.d.ts +2 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +27 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +64 -0
- package/dist/index.js.map +1 -0
- package/dist/install/slash-commands.d.ts +6 -0
- package/dist/install/slash-commands.d.ts.map +1 -0
- package/dist/install/slash-commands.js +31 -0
- package/dist/install/slash-commands.js.map +1 -0
- package/dist/install/viewer.d.ts +5 -0
- package/dist/install/viewer.d.ts.map +1 -0
- package/dist/install/viewer.js +40 -0
- package/dist/install/viewer.js.map +1 -0
- package/dist/schema/architecture.schema.json +144 -0
- package/dist/templates/skeleton.json +15 -0
- package/dist/templates/slash-commands/claude/archrip-refine.md +17 -0
- package/dist/templates/slash-commands/claude/archrip-scan.md +140 -0
- package/dist/templates/slash-commands/claude/archrip-update.md +34 -0
- package/dist/templates/slash-commands/claude/archrips-refine.md +17 -0
- package/dist/templates/slash-commands/claude/archrips-scan.md +97 -0
- package/dist/templates/slash-commands/claude/archrips-update.md +18 -0
- package/dist/templates/slash-commands/codex/archrip-refine.md +17 -0
- package/dist/templates/slash-commands/codex/archrip-scan.md +140 -0
- package/dist/templates/slash-commands/codex/archrip-update.md +34 -0
- package/dist/templates/slash-commands/codex/archrips-refine.md +17 -0
- package/dist/templates/slash-commands/codex/archrips-scan.md +97 -0
- package/dist/templates/slash-commands/codex/archrips-update.md +18 -0
- package/dist/templates/slash-commands/gemini/archrip-refine.md +17 -0
- package/dist/templates/slash-commands/gemini/archrip-scan.md +140 -0
- package/dist/templates/slash-commands/gemini/archrip-update.md +34 -0
- package/dist/templates/slash-commands/gemini/archrips-refine.md +17 -0
- package/dist/templates/slash-commands/gemini/archrips-scan.md +97 -0
- package/dist/templates/slash-commands/gemini/archrips-update.md +18 -0
- package/dist/utils/detect-agents.d.ts +15 -0
- package/dist/utils/detect-agents.d.ts.map +1 -0
- package/dist/utils/detect-agents.js +29 -0
- package/dist/utils/detect-agents.js.map +1 -0
- package/dist/utils/gitignore.d.ts +5 -0
- package/dist/utils/gitignore.d.ts.map +1 -0
- package/dist/utils/gitignore.js +21 -0
- package/dist/utils/gitignore.js.map +1 -0
- package/dist/utils/layout.d.ts +17 -0
- package/dist/utils/layout.d.ts.map +1 -0
- package/dist/utils/layout.js +121 -0
- package/dist/utils/layout.js.map +1 -0
- package/dist/utils/layout.spec.d.ts +2 -0
- package/dist/utils/layout.spec.d.ts.map +1 -0
- package/dist/utils/layout.spec.js +176 -0
- package/dist/utils/layout.spec.js.map +1 -0
- package/dist/utils/paths.d.ts +3 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +28 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/project-info.d.ts +9 -0
- package/dist/utils/project-info.d.ts.map +1 -0
- package/dist/utils/project-info.js +86 -0
- package/dist/utils/project-info.js.map +1 -0
- package/dist/utils/validate.d.ts +88 -0
- package/dist/utils/validate.d.ts.map +1 -0
- package/dist/utils/validate.js +238 -0
- package/dist/utils/validate.js.map +1 -0
- package/dist/utils/validate.spec.d.ts +2 -0
- package/dist/utils/validate.spec.d.ts.map +1 -0
- package/dist/utils/validate.spec.js +424 -0
- package/dist/utils/validate.spec.js.map +1 -0
- package/dist/utils/verbose.d.ts +3 -0
- package/dist/utils/verbose.d.ts.map +1 -0
- package/dist/utils/verbose.js +8 -0
- package/dist/utils/verbose.js.map +1 -0
- package/dist/viewer-template/index.html +15 -0
- package/dist/viewer-template/package-lock.json +2714 -0
- package/dist/viewer-template/package.json +26 -0
- package/dist/viewer-template/src/App.tsx +168 -0
- package/dist/viewer-template/src/components/DepthFilter.tsx +43 -0
- package/dist/viewer-template/src/components/DetailPanel.tsx +261 -0
- package/dist/viewer-template/src/components/Legend.tsx +41 -0
- package/dist/viewer-template/src/components/ThemeToggle.tsx +37 -0
- package/dist/viewer-template/src/components/UseCaseFilter.tsx +59 -0
- package/dist/viewer-template/src/components/nodes/ArchNode.tsx +37 -0
- package/dist/viewer-template/src/data/loader.ts +140 -0
- package/dist/viewer-template/src/hooks/useArchitecture.ts +32 -0
- package/dist/viewer-template/src/hooks/useDepthFilter.ts +37 -0
- package/dist/viewer-template/src/hooks/useTheme.ts +39 -0
- package/dist/viewer-template/src/hooks/useUseCaseFilter.ts +56 -0
- package/dist/viewer-template/src/index.css +130 -0
- package/dist/viewer-template/src/main.tsx +13 -0
- package/dist/viewer-template/src/types.ts +125 -0
- package/dist/viewer-template/tsconfig.app.json +24 -0
- package/dist/viewer-template/tsconfig.json +7 -0
- package/dist/viewer-template/tsconfig.node.json +22 -0
- package/dist/viewer-template/vite.config.ts +7 -0
- package/package.json +45 -0
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { existsSync, lstatSync, readFileSync, realpathSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { join, resolve } from 'node:path';
|
|
4
|
+
/**
|
|
5
|
+
* Verify that the viewer directory was created by `archrip init`.
|
|
6
|
+
* Checks: existence, symlink rejection, path containment, marker file, package.json name.
|
|
7
|
+
* Throws if any check fails.
|
|
8
|
+
*/
|
|
9
|
+
export function validateViewerDir(viewerDir) {
|
|
10
|
+
if (!existsSync(viewerDir)) {
|
|
11
|
+
throw new Error('.archrip/viewer/ not found.\nRun `npx archrip build` to auto-setup the viewer.');
|
|
12
|
+
}
|
|
13
|
+
// Reject symlinks — prevent redirection to arbitrary directories
|
|
14
|
+
if (lstatSync(viewerDir).isSymbolicLink()) {
|
|
15
|
+
throw new Error('.archrip/viewer/ is a symbolic link, which is not allowed.\n'
|
|
16
|
+
+ 'This is a safety check to prevent executing code outside the project.\n'
|
|
17
|
+
+ 'Remove the symlink and re-run `npx archrip build`.');
|
|
18
|
+
}
|
|
19
|
+
// Ensure realpath stays within .archrip/
|
|
20
|
+
const archripDir = resolve(viewerDir, '..');
|
|
21
|
+
const realViewerDir = realpathSync(viewerDir);
|
|
22
|
+
const realArchripsDir = realpathSync(archripDir);
|
|
23
|
+
if (!realViewerDir.startsWith(realArchripsDir + '/')) {
|
|
24
|
+
throw new Error('.archrip/viewer/ resolves outside of .archrip/.\n'
|
|
25
|
+
+ 'This is a safety check to prevent executing code outside the project.');
|
|
26
|
+
}
|
|
27
|
+
// Check marker file
|
|
28
|
+
const markerPath = join(viewerDir, '.archrip-viewer');
|
|
29
|
+
if (!existsSync(markerPath) || readFileSync(markerPath, 'utf-8').trim() !== 'archrip-official-viewer') {
|
|
30
|
+
throw new Error('.archrip/viewer/ does not appear to be an official archrip viewer.\n'
|
|
31
|
+
+ 'This is a safety check to prevent executing untrusted code.\n'
|
|
32
|
+
+ 'Remove .archrip/viewer/ and re-run `npx archrip build` to reinstall.');
|
|
33
|
+
}
|
|
34
|
+
// Verify package.json identity
|
|
35
|
+
const pkgJsonPath = join(viewerDir, 'package.json');
|
|
36
|
+
if (!existsSync(pkgJsonPath)) {
|
|
37
|
+
throw new Error('.archrip/viewer/package.json not found.\n'
|
|
38
|
+
+ 'Remove .archrip/viewer/ and re-run `npx archrip build` to reinstall.');
|
|
39
|
+
}
|
|
40
|
+
const pkg = JSON.parse(readFileSync(pkgJsonPath, 'utf-8'));
|
|
41
|
+
if (pkg.name !== 'archrip-viewer') {
|
|
42
|
+
throw new Error('.archrip/viewer/package.json has unexpected name.\n'
|
|
43
|
+
+ 'This is a safety check to prevent executing untrusted code.\n'
|
|
44
|
+
+ 'Remove .archrip/viewer/ and re-run `npx archrip build` to reinstall.');
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Load and validate architecture.json.
|
|
49
|
+
* Does structural validation without requiring ajv (zero extra dependencies).
|
|
50
|
+
*/
|
|
51
|
+
export function loadAndValidate(filePath) {
|
|
52
|
+
const raw = readFileSync(filePath, 'utf-8');
|
|
53
|
+
const data = JSON.parse(raw);
|
|
54
|
+
const errors = [];
|
|
55
|
+
const warnings = [];
|
|
56
|
+
// Required top-level fields
|
|
57
|
+
if (data.version !== '1.0') {
|
|
58
|
+
errors.push({ path: 'version', message: `Expected "1.0", got "${String(data.version)}"` });
|
|
59
|
+
}
|
|
60
|
+
if (!data.project?.name) {
|
|
61
|
+
errors.push({ path: 'project.name', message: 'Required field missing' });
|
|
62
|
+
}
|
|
63
|
+
if (data.project?.sourceUrl) {
|
|
64
|
+
try {
|
|
65
|
+
const url = new URL(data.project.sourceUrl.replace('{filePath}', 'test'));
|
|
66
|
+
if (url.protocol !== 'http:' && url.protocol !== 'https:') {
|
|
67
|
+
errors.push({ path: 'project.sourceUrl', message: 'Must use http: or https: protocol' });
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
errors.push({ path: 'project.sourceUrl', message: 'Must be a valid URL template' });
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (!Array.isArray(data.nodes)) {
|
|
75
|
+
errors.push({ path: 'nodes', message: 'Must be an array' });
|
|
76
|
+
}
|
|
77
|
+
if (!Array.isArray(data.edges)) {
|
|
78
|
+
errors.push({ path: 'edges', message: 'Must be an array' });
|
|
79
|
+
}
|
|
80
|
+
// Validate nodes
|
|
81
|
+
const nodeIds = new Set();
|
|
82
|
+
if (Array.isArray(data.nodes)) {
|
|
83
|
+
for (let i = 0; i < data.nodes.length; i++) {
|
|
84
|
+
const node = data.nodes[i];
|
|
85
|
+
const prefix = `nodes[${i}]`;
|
|
86
|
+
if (!node.id) {
|
|
87
|
+
errors.push({ path: `${prefix}.id`, message: 'Required' });
|
|
88
|
+
}
|
|
89
|
+
else if (!/^[a-z][a-z0-9-]*$/.test(node.id)) {
|
|
90
|
+
errors.push({ path: `${prefix}.id`, message: 'Must be lowercase kebab-case (e.g. "svc-users")' });
|
|
91
|
+
}
|
|
92
|
+
if (!node.category)
|
|
93
|
+
errors.push({ path: `${prefix}.category`, message: 'Required' });
|
|
94
|
+
if (!node.label)
|
|
95
|
+
errors.push({ path: `${prefix}.label`, message: 'Required' });
|
|
96
|
+
if (typeof node.layer !== 'number') {
|
|
97
|
+
errors.push({ path: `${prefix}.layer`, message: 'Must be a number' });
|
|
98
|
+
}
|
|
99
|
+
else if (!Number.isInteger(node.layer) || node.layer < 0 || node.layer > 100) {
|
|
100
|
+
errors.push({ path: `${prefix}.layer`, message: 'Must be an integer between 0 and 100' });
|
|
101
|
+
}
|
|
102
|
+
if (node.depth !== undefined && (node.depth !== 0 && node.depth !== 1 && node.depth !== 2)) {
|
|
103
|
+
errors.push({ path: `${prefix}.depth`, message: 'Must be 0, 1, or 2' });
|
|
104
|
+
}
|
|
105
|
+
if (node.filePath) {
|
|
106
|
+
if (path.isAbsolute(node.filePath) || node.filePath.split(/[/\\]/).some(seg => seg === '..')) {
|
|
107
|
+
errors.push({ path: `${prefix}.filePath`, message: 'Must be a relative path without ".." segments' });
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (node.id && nodeIds.has(node.id)) {
|
|
111
|
+
errors.push({ path: `${prefix}.id`, message: `Duplicate node id: "${node.id}"` });
|
|
112
|
+
}
|
|
113
|
+
if (node.id)
|
|
114
|
+
nodeIds.add(node.id);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Validate edges reference existing nodes
|
|
118
|
+
if (Array.isArray(data.edges)) {
|
|
119
|
+
for (let i = 0; i < data.edges.length; i++) {
|
|
120
|
+
const edge = data.edges[i];
|
|
121
|
+
const prefix = `edges[${i}]`;
|
|
122
|
+
if (!edge.source)
|
|
123
|
+
errors.push({ path: `${prefix}.source`, message: 'Required' });
|
|
124
|
+
if (!edge.target)
|
|
125
|
+
errors.push({ path: `${prefix}.target`, message: 'Required' });
|
|
126
|
+
const VALID_EDGE_TYPES = ['dependency', 'implements', 'relation'];
|
|
127
|
+
if (edge.type !== undefined && !VALID_EDGE_TYPES.includes(edge.type)) {
|
|
128
|
+
errors.push({ path: `${prefix}.type`, message: `Must be one of: ${VALID_EDGE_TYPES.join(', ')}` });
|
|
129
|
+
}
|
|
130
|
+
if (edge.source && !nodeIds.has(edge.source)) {
|
|
131
|
+
errors.push({ path: `${prefix}.source`, message: `References unknown node: "${edge.source}"` });
|
|
132
|
+
}
|
|
133
|
+
if (edge.target && !nodeIds.has(edge.target)) {
|
|
134
|
+
errors.push({ path: `${prefix}.target`, message: `References unknown node: "${edge.target}"` });
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// Validate use cases reference existing nodes
|
|
139
|
+
if (Array.isArray(data.useCases)) {
|
|
140
|
+
for (let i = 0; i < data.useCases.length; i++) {
|
|
141
|
+
const uc = data.useCases[i];
|
|
142
|
+
const prefix = `useCases[${i}]`;
|
|
143
|
+
if (!uc.id)
|
|
144
|
+
errors.push({ path: `${prefix}.id`, message: 'Required' });
|
|
145
|
+
if (!uc.name)
|
|
146
|
+
errors.push({ path: `${prefix}.name`, message: 'Required' });
|
|
147
|
+
if (Array.isArray(uc.nodeIds)) {
|
|
148
|
+
for (const nodeId of uc.nodeIds) {
|
|
149
|
+
if (!nodeIds.has(nodeId)) {
|
|
150
|
+
errors.push({ path: `${prefix}.nodeIds`, message: `References unknown node: "${nodeId}"` });
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// Detect orphan nodes (nodes with no edges) — reported as warnings, not errors
|
|
157
|
+
if (Array.isArray(data.edges) && Array.isArray(data.nodes)) {
|
|
158
|
+
const connectedNodes = new Set();
|
|
159
|
+
for (const edge of data.edges) {
|
|
160
|
+
if (edge.source)
|
|
161
|
+
connectedNodes.add(edge.source);
|
|
162
|
+
if (edge.target)
|
|
163
|
+
connectedNodes.add(edge.target);
|
|
164
|
+
}
|
|
165
|
+
for (const node of data.nodes) {
|
|
166
|
+
if (node.id && !connectedNodes.has(node.id)) {
|
|
167
|
+
warnings.push({
|
|
168
|
+
path: 'nodes',
|
|
169
|
+
message: `Orphan node "${node.id}" has no edges`,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// Detect circular edges
|
|
175
|
+
if (Array.isArray(data.edges) && nodeIds.size > 0) {
|
|
176
|
+
const adj = new Map();
|
|
177
|
+
for (const edge of data.edges) {
|
|
178
|
+
if (edge.source && edge.target) {
|
|
179
|
+
const targets = adj.get(edge.source);
|
|
180
|
+
if (targets) {
|
|
181
|
+
targets.push(edge.target);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
adj.set(edge.source, [edge.target]);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
const visited = new Set();
|
|
189
|
+
const inStack = new Set();
|
|
190
|
+
let hasCycle = false;
|
|
191
|
+
function dfs(node) {
|
|
192
|
+
if (hasCycle)
|
|
193
|
+
return;
|
|
194
|
+
visited.add(node);
|
|
195
|
+
inStack.add(node);
|
|
196
|
+
for (const neighbor of adj.get(node) ?? []) {
|
|
197
|
+
if (inStack.has(neighbor)) {
|
|
198
|
+
hasCycle = true;
|
|
199
|
+
errors.push({ path: 'edges', message: `Circular dependency detected involving "${neighbor}"` });
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
if (!visited.has(neighbor)) {
|
|
203
|
+
dfs(neighbor);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
inStack.delete(node);
|
|
207
|
+
}
|
|
208
|
+
for (const nodeId of nodeIds) {
|
|
209
|
+
if (!visited.has(nodeId)) {
|
|
210
|
+
dfs(nodeId);
|
|
211
|
+
if (hasCycle)
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return { data, errors, warnings };
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Resolve a sourceUrl template with a filePath.
|
|
220
|
+
* Encodes path segments and only allows http/https URLs.
|
|
221
|
+
* Keep in sync with packages/viewer/src/data/loader.ts (resolveSourceUrl)
|
|
222
|
+
*/
|
|
223
|
+
export function resolveSourceUrl(template, filePath) {
|
|
224
|
+
if (!template || !filePath)
|
|
225
|
+
return '';
|
|
226
|
+
const encoded = filePath.split('/').map(encodeURIComponent).join('/');
|
|
227
|
+
const resolved = template.replace('{filePath}', encoded);
|
|
228
|
+
try {
|
|
229
|
+
const url = new URL(resolved);
|
|
230
|
+
if (url.protocol !== 'http:' && url.protocol !== 'https:')
|
|
231
|
+
return '';
|
|
232
|
+
return url.href;
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
return '';
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/utils/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyE1C;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,gFAAgF,CACjF,CAAC;IACJ,CAAC;IAED,iEAAiE;IACjE,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACb,8DAA8D;cAC5D,yEAAyE;cACzE,oDAAoD,CACvD,CAAC;IACJ,CAAC;IAED,yCAAyC;IACzC,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC5C,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,eAAe,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IACjD,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,eAAe,GAAG,GAAG,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CACb,mDAAmD;cACjD,uEAAuE,CAC1E,CAAC;IACJ,CAAC;IAED,oBAAoB;IACpB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IACtD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,yBAAyB,EAAE,CAAC;QACtG,MAAM,IAAI,KAAK,CACb,sEAAsE;cACpE,+DAA+D;cAC/D,sEAAsE,CACzE,CAAC;IACJ,CAAC;IAED,+BAA+B;IAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACpD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,2CAA2C;cACzC,sEAAsE,CACzE,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAA4B,CAAC;IACtF,IAAI,GAAG,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACb,qDAAqD;cACnD,+DAA+D;cAC/D,sEAAsE,CACzE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAqB,CAAC;IACjD,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAsB,EAAE,CAAC;IAEvC,4BAA4B;IAC5B,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,wBAAwB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7F,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;YAC1E,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC1D,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,mCAAmC,EAAE,CAAC,CAAC;YAC3F,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,iBAAiB;IACjB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;YAC7D,CAAC;iBAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC9C,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,EAAE,OAAO,EAAE,iDAAiD,EAAE,CAAC,CAAC;YACpG,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;YACrF,IAAI,CAAC,IAAI,CAAC,KAAK;gBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;YAC/E,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACnC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,QAAQ,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAC;YACxE,CAAC;iBAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC;gBAC/E,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,QAAQ,EAAE,OAAO,EAAE,sCAAsC,EAAE,CAAC,CAAC;YAC5F,CAAC;YACD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC3F,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,QAAQ,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAC;YAC1E,CAAC;YACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE,CAAC;oBAC7F,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,WAAW,EAAE,OAAO,EAAE,+CAA+C,EAAE,CAAC,CAAC;gBACxG,CAAC;YACH,CAAC;YACD,IAAI,IAAI,CAAC,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;gBACpC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,EAAE,OAAO,EAAE,uBAAuB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YACpF,CAAC;YACD,IAAI,IAAI,CAAC,EAAE;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;YACjF,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;YACjF,MAAM,gBAAgB,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;YAClE,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,EAAE,OAAO,EAAE,mBAAmB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YACrG,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7C,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,SAAS,EAAE,OAAO,EAAE,6BAA6B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;YAClG,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7C,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,SAAS,EAAE,OAAO,EAAE,6BAA6B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;YAClG,CAAC;QACH,CAAC;IACH,CAAC;IAED,8CAA8C;IAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC;YAChC,IAAI,CAAC,EAAE,CAAC,EAAE;gBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;YACvE,IAAI,CAAC,EAAE,CAAC,IAAI;gBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;YAC3E,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9B,KAAK,MAAM,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;oBAChC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;wBACzB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,UAAU,EAAE,OAAO,EAAE,6BAA6B,MAAM,GAAG,EAAE,CAAC,CAAC;oBAC9F,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3D,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;QACzC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,MAAM;gBAAE,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACjD,IAAI,IAAI,CAAC,MAAM;gBAAE,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC5C,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,gBAAgB,IAAI,CAAC,EAAE,gBAAgB;iBACjD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAoB,CAAC;QACxC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACrC,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC5B,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,SAAS,GAAG,CAAC,IAAY;YACvB,IAAI,QAAQ;gBAAE,OAAO;YACrB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,KAAK,MAAM,QAAQ,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC3C,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC1B,QAAQ,GAAG,IAAI,CAAC;oBAChB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,2CAA2C,QAAQ,GAAG,EAAE,CAAC,CAAC;oBAChG,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC3B,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAChB,CAAC;YACH,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzB,GAAG,CAAC,MAAM,CAAC,CAAC;gBACZ,IAAI,QAAQ;oBAAE,MAAM;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AACpC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAA4B,EAAE,QAAgB;IAC7E,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IAEtC,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAEzD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QACrE,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.spec.d.ts","sourceRoot":"","sources":["../../src/utils/validate.spec.ts"],"names":[],"mappings":""}
|