@apiquest/fracture 1.0.2 → 1.0.5
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 +207 -0
- package/bin/cli.js +2 -2
- package/dist/CollectionRunner.d.ts +2 -0
- package/dist/CollectionRunner.d.ts.map +1 -1
- package/dist/CollectionRunner.js +23 -5
- package/dist/CollectionRunner.js.map +1 -1
- package/dist/LibraryLoader.d.ts +49 -0
- package/dist/LibraryLoader.d.ts.map +1 -0
- package/dist/LibraryLoader.js +198 -0
- package/dist/LibraryLoader.js.map +1 -0
- package/dist/PluginLoader.d.ts.map +1 -1
- package/dist/PluginLoader.js +9 -6
- package/dist/PluginLoader.js.map +1 -1
- package/dist/PluginResolver.d.ts +1 -1
- package/dist/PluginResolver.d.ts.map +1 -1
- package/dist/PluginResolver.js +1 -1
- package/dist/PluginResolver.js.map +1 -1
- package/dist/ScriptEngine.d.ts +2 -1
- package/dist/ScriptEngine.d.ts.map +1 -1
- package/dist/ScriptEngine.js +19 -12
- package/dist/ScriptEngine.js.map +1 -1
- package/dist/cli/index.js +35 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/plugin-commands.d.ts.map +1 -1
- package/dist/cli/plugin-commands.js +48 -81
- package/dist/cli/plugin-commands.js.map +1 -1
- package/dist/cli/plugin-installer.d.ts +48 -0
- package/dist/cli/plugin-installer.d.ts.map +1 -0
- package/dist/cli/plugin-installer.js +136 -0
- package/dist/cli/plugin-installer.js.map +1 -0
- package/dist/cli/plugin-registry.d.ts +17 -0
- package/dist/cli/plugin-registry.d.ts.map +1 -0
- package/dist/cli/plugin-registry.js +77 -0
- package/dist/cli/plugin-registry.js.map +1 -0
- package/package.json +55 -50
- package/tsconfig.json +20 -20
- package/tsconfig.test.json +5 -5
- package/vitest.config.ts +22 -22
- package/dist/ExecutionTree.d.ts +0 -77
- package/dist/ExecutionTree.d.ts.map +0 -1
- package/dist/ExecutionTree.js +0 -265
- package/dist/ExecutionTree.js.map +0 -1
- package/dist/fracture/src/CollectionAnalyzer.d.ts +0 -17
- package/dist/fracture/src/CollectionAnalyzer.d.ts.map +0 -1
- package/dist/fracture/src/CollectionAnalyzer.js +0 -70
- package/dist/fracture/src/CollectionAnalyzer.js.map +0 -1
- package/dist/fracture/src/CollectionRunner.d.ts +0 -39
- package/dist/fracture/src/CollectionRunner.d.ts.map +0 -1
- package/dist/fracture/src/CollectionRunner.js +0 -802
- package/dist/fracture/src/CollectionRunner.js.map +0 -1
- package/dist/fracture/src/CollectionRunner.types.d.ts +0 -8
- package/dist/fracture/src/CollectionRunner.types.d.ts.map +0 -1
- package/dist/fracture/src/CollectionRunner.types.js +0 -2
- package/dist/fracture/src/CollectionRunner.types.js.map +0 -1
- package/dist/fracture/src/CollectionValidator.d.ts +0 -14
- package/dist/fracture/src/CollectionValidator.d.ts.map +0 -1
- package/dist/fracture/src/CollectionValidator.js +0 -145
- package/dist/fracture/src/CollectionValidator.js.map +0 -1
- package/dist/fracture/src/ConsoleReporter.d.ts +0 -24
- package/dist/fracture/src/ConsoleReporter.d.ts.map +0 -1
- package/dist/fracture/src/ConsoleReporter.js +0 -123
- package/dist/fracture/src/ConsoleReporter.js.map +0 -1
- package/dist/fracture/src/CookieJar.d.ts +0 -70
- package/dist/fracture/src/CookieJar.d.ts.map +0 -1
- package/dist/fracture/src/CookieJar.js +0 -233
- package/dist/fracture/src/CookieJar.js.map +0 -1
- package/dist/fracture/src/ExecutionTree.d.ts +0 -77
- package/dist/fracture/src/ExecutionTree.d.ts.map +0 -1
- package/dist/fracture/src/ExecutionTree.js +0 -258
- package/dist/fracture/src/ExecutionTree.js.map +0 -1
- package/dist/fracture/src/Logger.d.ts +0 -25
- package/dist/fracture/src/Logger.d.ts.map +0 -1
- package/dist/fracture/src/Logger.js +0 -78
- package/dist/fracture/src/Logger.js.map +0 -1
- package/dist/fracture/src/PluginLoader.d.ts +0 -23
- package/dist/fracture/src/PluginLoader.d.ts.map +0 -1
- package/dist/fracture/src/PluginLoader.js +0 -102
- package/dist/fracture/src/PluginLoader.js.map +0 -1
- package/dist/fracture/src/PluginManager.d.ts +0 -64
- package/dist/fracture/src/PluginManager.d.ts.map +0 -1
- package/dist/fracture/src/PluginManager.js +0 -162
- package/dist/fracture/src/PluginManager.js.map +0 -1
- package/dist/fracture/src/PluginResolver.d.ts +0 -35
- package/dist/fracture/src/PluginResolver.d.ts.map +0 -1
- package/dist/fracture/src/PluginResolver.js +0 -128
- package/dist/fracture/src/PluginResolver.js.map +0 -1
- package/dist/fracture/src/QuestAPI.d.ts +0 -9
- package/dist/fracture/src/QuestAPI.d.ts.map +0 -1
- package/dist/fracture/src/QuestAPI.js +0 -679
- package/dist/fracture/src/QuestAPI.js.map +0 -1
- package/dist/fracture/src/QuestAPI.types.d.ts +0 -35
- package/dist/fracture/src/QuestAPI.types.d.ts.map +0 -1
- package/dist/fracture/src/QuestAPI.types.js +0 -3
- package/dist/fracture/src/QuestAPI.types.js.map +0 -1
- package/dist/fracture/src/QuestTestAPI.d.ts +0 -12
- package/dist/fracture/src/QuestTestAPI.d.ts.map +0 -1
- package/dist/fracture/src/QuestTestAPI.js +0 -133
- package/dist/fracture/src/QuestTestAPI.js.map +0 -1
- package/dist/fracture/src/ScriptEngine.d.ts +0 -21
- package/dist/fracture/src/ScriptEngine.d.ts.map +0 -1
- package/dist/fracture/src/ScriptEngine.js +0 -183
- package/dist/fracture/src/ScriptEngine.js.map +0 -1
- package/dist/fracture/src/ScriptValidator.d.ts +0 -68
- package/dist/fracture/src/ScriptValidator.d.ts.map +0 -1
- package/dist/fracture/src/ScriptValidator.js +0 -351
- package/dist/fracture/src/ScriptValidator.js.map +0 -1
- package/dist/fracture/src/TestCounter.d.ts +0 -18
- package/dist/fracture/src/TestCounter.d.ts.map +0 -1
- package/dist/fracture/src/TestCounter.js +0 -82
- package/dist/fracture/src/TestCounter.js.map +0 -1
- package/dist/fracture/src/VariableResolver.d.ts +0 -20
- package/dist/fracture/src/VariableResolver.d.ts.map +0 -1
- package/dist/fracture/src/VariableResolver.js +0 -100
- package/dist/fracture/src/VariableResolver.js.map +0 -1
- package/dist/fracture/src/cli/index.d.ts +0 -3
- package/dist/fracture/src/cli/index.d.ts.map +0 -1
- package/dist/fracture/src/cli/index.js +0 -347
- package/dist/fracture/src/cli/index.js.map +0 -1
- package/dist/fracture/src/cli/plugin-commands.d.ts +0 -6
- package/dist/fracture/src/cli/plugin-commands.d.ts.map +0 -1
- package/dist/fracture/src/cli/plugin-commands.js +0 -263
- package/dist/fracture/src/cli/plugin-commands.js.map +0 -1
- package/dist/fracture/src/cli/plugin-discovery.d.ts +0 -11
- package/dist/fracture/src/cli/plugin-discovery.d.ts.map +0 -1
- package/dist/fracture/src/cli/plugin-discovery.js +0 -64
- package/dist/fracture/src/cli/plugin-discovery.js.map +0 -1
- package/dist/fracture/src/index.d.ts +0 -13
- package/dist/fracture/src/index.d.ts.map +0 -1
- package/dist/fracture/src/index.js +0 -17
- package/dist/fracture/src/index.js.map +0 -1
- package/dist/fracture/src/utils.d.ts +0 -28
- package/dist/fracture/src/utils.d.ts.map +0 -1
- package/dist/fracture/src/utils.js +0 -48
- package/dist/fracture/src/utils.js.map +0 -1
- package/dist/plugin-auth/src/apikey-auth.d.ts +0 -3
- package/dist/plugin-auth/src/apikey-auth.d.ts.map +0 -1
- package/dist/plugin-auth/src/apikey-auth.js +0 -73
- package/dist/plugin-auth/src/apikey-auth.js.map +0 -1
- package/dist/plugin-auth/src/basic-auth.d.ts +0 -3
- package/dist/plugin-auth/src/basic-auth.d.ts.map +0 -1
- package/dist/plugin-auth/src/basic-auth.js +0 -61
- package/dist/plugin-auth/src/basic-auth.js.map +0 -1
- package/dist/plugin-auth/src/bearer-auth.d.ts +0 -3
- package/dist/plugin-auth/src/bearer-auth.d.ts.map +0 -1
- package/dist/plugin-auth/src/bearer-auth.js +0 -49
- package/dist/plugin-auth/src/bearer-auth.js.map +0 -1
- package/dist/plugin-auth/src/helpers.d.ts +0 -3
- package/dist/plugin-auth/src/helpers.d.ts.map +0 -1
- package/dist/plugin-auth/src/helpers.js +0 -8
- package/dist/plugin-auth/src/helpers.js.map +0 -1
- package/dist/plugin-auth/src/index.d.ts +0 -10
- package/dist/plugin-auth/src/index.d.ts.map +0 -1
- package/dist/plugin-auth/src/index.js +0 -25
- package/dist/plugin-auth/src/index.js.map +0 -1
- package/dist/plugin-auth/src/oauth2-auth.d.ts +0 -35
- package/dist/plugin-auth/src/oauth2-auth.d.ts.map +0 -1
- package/dist/plugin-auth/src/oauth2-auth.js +0 -266
- package/dist/plugin-auth/src/oauth2-auth.js.map +0 -1
- package/dist/plugin-http/src/index.d.ts +0 -4
- package/dist/plugin-http/src/index.d.ts.map +0 -1
- package/dist/plugin-http/src/index.js +0 -266
- package/dist/plugin-http/src/index.js.map +0 -1
- package/dist/plugin-vault-file/src/index.d.ts +0 -67
- package/dist/plugin-vault-file/src/index.d.ts.map +0 -1
- package/dist/plugin-vault-file/src/index.js +0 -171
- package/dist/plugin-vault-file/src/index.js.map +0 -1
- package/dist/types.d.ts +0 -374
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -13
- package/dist/types.js.map +0 -1
- package/src/CollectionAnalyzer.ts +0 -102
- package/src/CollectionRunner.ts +0 -1423
- package/src/CollectionRunner.types.ts +0 -9
- package/src/CollectionValidator.ts +0 -289
- package/src/ConsoleReporter.ts +0 -143
- package/src/CookieJar.ts +0 -258
- package/src/DagScheduler.ts +0 -439
- package/src/Logger.ts +0 -85
- package/src/PluginLoader.ts +0 -126
- package/src/PluginManager.ts +0 -208
- package/src/PluginResolver.ts +0 -154
- package/src/QuestAPI.ts +0 -764
- package/src/QuestAPI.types.ts +0 -33
- package/src/QuestTestAPI.ts +0 -164
- package/src/RequestFilter.ts +0 -224
- package/src/ScriptEngine.ts +0 -219
- package/src/ScriptValidator.ts +0 -428
- package/src/TaskGraph.ts +0 -598
- package/src/TestCounter.ts +0 -109
- package/src/VariableResolver.ts +0 -114
- package/src/cli/index.ts +0 -480
- package/src/cli/plugin-commands.ts +0 -341
- package/src/cli/plugin-discovery.ts +0 -44
- package/src/index.ts +0 -24
- package/src/utils.ts +0 -52
package/package.json
CHANGED
|
@@ -1,50 +1,55 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@apiquest/fracture",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "Core collection runner engine for ApiQuest with integrated CLI",
|
|
5
|
-
"main": "dist/index.js",
|
|
6
|
-
"types": "dist/index.d.ts",
|
|
7
|
-
"type": "module",
|
|
8
|
-
"bin": {
|
|
9
|
-
"apiquest": "bin/cli.js",
|
|
10
|
-
"fracture": "bin/cli.js",
|
|
11
|
-
"quest": "bin/cli.js"
|
|
12
|
-
},
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
},
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
"
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "@apiquest/fracture",
|
|
3
|
+
"version": "1.0.5",
|
|
4
|
+
"description": "Core collection runner engine for ApiQuest with integrated CLI",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"bin": {
|
|
9
|
+
"apiquest": "bin/cli.js",
|
|
10
|
+
"fracture": "bin/cli.js",
|
|
11
|
+
"quest": "bin/cli.js"
|
|
12
|
+
},
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "https://github.com/hh-apiquest/fracture.git",
|
|
16
|
+
"directory": "packages/fracture"
|
|
17
|
+
},
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsc",
|
|
20
|
+
"dev": "tsc --watch",
|
|
21
|
+
"test": "vitest"
|
|
22
|
+
},
|
|
23
|
+
"keywords": [
|
|
24
|
+
"api",
|
|
25
|
+
"testing",
|
|
26
|
+
"runner",
|
|
27
|
+
"quest",
|
|
28
|
+
"apiquest",
|
|
29
|
+
"fracture",
|
|
30
|
+
"cli"
|
|
31
|
+
],
|
|
32
|
+
"author": "ApiQuest",
|
|
33
|
+
"license": "AGPL-3.0-or-later",
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@apiquest/types": "workspace:*",
|
|
36
|
+
"@types/graphlib": "^2.1.12",
|
|
37
|
+
"@types/lodash": "^4.17.23",
|
|
38
|
+
"acorn": "^8.11.0",
|
|
39
|
+
"acorn-walk": "^8.3.0",
|
|
40
|
+
"chai": "^6.2.2",
|
|
41
|
+
"commander": "14.0.3",
|
|
42
|
+
"got": "^14.6.6",
|
|
43
|
+
"graphlib": "^2.1.8",
|
|
44
|
+
"lodash": "^4.17.23",
|
|
45
|
+
"moment": "^2.30.1",
|
|
46
|
+
"tough-cookie": "^6.0.0"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@types/acorn": "^4.0.6",
|
|
50
|
+
"@types/chai": "^5.2.3",
|
|
51
|
+
"@types/node": "^25.2.3",
|
|
52
|
+
"typescript": "^5.3.3",
|
|
53
|
+
"vitest": "^4.0.18"
|
|
54
|
+
}
|
|
55
|
+
}
|
package/tsconfig.json
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2022",
|
|
4
|
-
"module": "Node16",
|
|
5
|
-
"lib": ["ES2022"],
|
|
6
|
-
"moduleResolution": "node16",
|
|
7
|
-
"outDir": "./dist",
|
|
8
|
-
"declaration": true,
|
|
9
|
-
"declarationMap": true,
|
|
10
|
-
"sourceMap": true,
|
|
11
|
-
"strict": true,
|
|
12
|
-
"esModuleInterop": true,
|
|
13
|
-
"skipLibCheck": true,
|
|
14
|
-
"forceConsistentCasingInFileNames": true,
|
|
15
|
-
"resolveJsonModule": true,
|
|
16
|
-
"allowSyntheticDefaultImports": true
|
|
17
|
-
},
|
|
18
|
-
"include": ["src/**/*"],
|
|
19
|
-
"exclude": ["node_modules", "dist", "tests"]
|
|
20
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "Node16",
|
|
5
|
+
"lib": ["ES2022"],
|
|
6
|
+
"moduleResolution": "node16",
|
|
7
|
+
"outDir": "./dist",
|
|
8
|
+
"declaration": true,
|
|
9
|
+
"declarationMap": true,
|
|
10
|
+
"sourceMap": true,
|
|
11
|
+
"strict": true,
|
|
12
|
+
"esModuleInterop": true,
|
|
13
|
+
"skipLibCheck": true,
|
|
14
|
+
"forceConsistentCasingInFileNames": true,
|
|
15
|
+
"resolveJsonModule": true,
|
|
16
|
+
"allowSyntheticDefaultImports": true
|
|
17
|
+
},
|
|
18
|
+
"include": ["src/**/*"],
|
|
19
|
+
"exclude": ["node_modules", "dist", "tests"]
|
|
20
|
+
}
|
package/tsconfig.test.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "./tsconfig.json",
|
|
3
|
-
"include": ["tests/**/*"],
|
|
4
|
-
"exclude": []
|
|
5
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"extends": "./tsconfig.json",
|
|
3
|
+
"include": ["tests/**/*"],
|
|
4
|
+
"exclude": []
|
|
5
|
+
}
|
package/vitest.config.ts
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import { defineConfig } from 'vitest/config';
|
|
2
|
-
|
|
3
|
-
export default defineConfig({
|
|
4
|
-
test: {
|
|
5
|
-
globals: true,
|
|
6
|
-
environment: 'node',
|
|
7
|
-
exclude: [
|
|
8
|
-
'**/node_modules/**',
|
|
9
|
-
'**/dist/**'
|
|
10
|
-
],
|
|
11
|
-
coverage: {
|
|
12
|
-
provider: 'v8',
|
|
13
|
-
reporter: ['text', 'json', 'html'],
|
|
14
|
-
exclude: [
|
|
15
|
-
'node_modules/',
|
|
16
|
-
'dist/',
|
|
17
|
-
'**/*.d.ts',
|
|
18
|
-
'**/*.config.*'
|
|
19
|
-
]
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
});
|
|
1
|
+
import { defineConfig } from 'vitest/config';
|
|
2
|
+
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
test: {
|
|
5
|
+
globals: true,
|
|
6
|
+
environment: 'node',
|
|
7
|
+
exclude: [
|
|
8
|
+
'**/node_modules/**',
|
|
9
|
+
'**/dist/**'
|
|
10
|
+
],
|
|
11
|
+
coverage: {
|
|
12
|
+
provider: 'v8',
|
|
13
|
+
reporter: ['text', 'json', 'html'],
|
|
14
|
+
exclude: [
|
|
15
|
+
'node_modules/',
|
|
16
|
+
'dist/',
|
|
17
|
+
'**/*.d.ts',
|
|
18
|
+
'**/*.config.*'
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
});
|
package/dist/ExecutionTree.d.ts
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import type { Collection, Folder, Request, IterationData, ILogger, PathType, NodeType, Auth } from '@apiquest/types';
|
|
2
|
-
/**
|
|
3
|
-
* Represents a node in the collection tree
|
|
4
|
-
* - Tree structure: parent/children for hierarchical organization
|
|
5
|
-
* - Graph structure: dependencies for execution order
|
|
6
|
-
*/
|
|
7
|
-
export declare class ExecutionNode {
|
|
8
|
-
id: string;
|
|
9
|
-
name: string;
|
|
10
|
-
type: NodeType;
|
|
11
|
-
item: Collection | Folder | Request;
|
|
12
|
-
parent: ExecutionNode | null;
|
|
13
|
-
children: ExecutionNode[];
|
|
14
|
-
depth: number;
|
|
15
|
-
path: PathType;
|
|
16
|
-
/**
|
|
17
|
-
* Scripts inherited from parent chain
|
|
18
|
-
* Accumulated during tree construction for efficient execution
|
|
19
|
-
*/
|
|
20
|
-
inheritedScripts: {
|
|
21
|
-
collectionPre?: string;
|
|
22
|
-
collectionPost?: string;
|
|
23
|
-
folderPre?: string[];
|
|
24
|
-
folderPost?: string[];
|
|
25
|
-
preRequest?: string[];
|
|
26
|
-
postRequest?: string[];
|
|
27
|
-
};
|
|
28
|
-
/**
|
|
29
|
-
* Effective auth for this node (cascades from parents)
|
|
30
|
-
* Request auth > Folder auth > Parent folder auth > Collection auth
|
|
31
|
-
*/
|
|
32
|
-
effectiveAuth?: Auth;
|
|
33
|
-
condition?: string;
|
|
34
|
-
dependsOn: string[];
|
|
35
|
-
constructor(type: NodeType, item: Collection | Folder | Request, parent: ExecutionNode | null);
|
|
36
|
-
/**
|
|
37
|
-
* Accumulate scripts from parent chain
|
|
38
|
-
* All scripts stack (collected from parents during tree construction)
|
|
39
|
-
*/
|
|
40
|
-
private inheritScripts;
|
|
41
|
-
/**
|
|
42
|
-
* Cascade auth from parent chain
|
|
43
|
-
* Child auth overrides parent auth
|
|
44
|
-
*/
|
|
45
|
-
private inheritAuth;
|
|
46
|
-
addChild(child: ExecutionNode): void;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Builds execution tree from collection JSON
|
|
50
|
-
* Handles CLI --data override at construction time
|
|
51
|
-
*/
|
|
52
|
-
export declare class TreeBuilder {
|
|
53
|
-
private cliData;
|
|
54
|
-
private logger;
|
|
55
|
-
constructor(cliData?: IterationData[], logger?: ILogger);
|
|
56
|
-
build(collection: Collection): ExecutionNode;
|
|
57
|
-
private buildChildren;
|
|
58
|
-
private countNodes;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Dependency graph for request execution order
|
|
62
|
-
* Flattens tree to request nodes only, topologically sorted by dependencies
|
|
63
|
-
*/
|
|
64
|
-
export declare class DependencyGraph {
|
|
65
|
-
private nodes;
|
|
66
|
-
private edges;
|
|
67
|
-
constructor(root: ExecutionNode, filterSet?: Set<string> | null);
|
|
68
|
-
private buildGraph;
|
|
69
|
-
/**
|
|
70
|
-
* Topological sort: returns requests grouped by execution level
|
|
71
|
-
* Requests in same level can execute in parallel
|
|
72
|
-
*/
|
|
73
|
-
getExecutionLevels(): string[][];
|
|
74
|
-
getNode(id: string): ExecutionNode | undefined;
|
|
75
|
-
canRunInParallel(idA: string, idB: string): boolean;
|
|
76
|
-
}
|
|
77
|
-
//# sourceMappingURL=ExecutionTree.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ExecutionTree.d.ts","sourceRoot":"","sources":["../src/ExecutionTree.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAkB,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAKrI;;;;GAIG;AACH,qBAAa,aAAa;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;IAEpC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,CAAC;IAEf;;;OAGG;IACH,gBAAgB,EAAE;QAChB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;IAEF;;;OAGG;IACH,aAAa,CAAC,EAAE,IAAI,CAAC;IAGrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;gBAGlB,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,EACnC,MAAM,EAAE,aAAa,GAAG,IAAI;IA6C9B;;;OAGG;IACH,OAAO,CAAC,cAAc;IAuDtB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAoBnB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;CAGrC;AAED;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,CAAC,EAAE,aAAa,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO;IAKvD,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,aAAa;IAe5C,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,UAAU;CAOnB;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,KAAK,CAA2B;gBAE5B,IAAI,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI;IAM/D,OAAO,CAAC,UAAU;IAkBlB;;;OAGG;IACH,kBAAkB,IAAI,MAAM,EAAE,EAAE;IAoChC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI9C,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;CAMpD"}
|
package/dist/ExecutionTree.js
DELETED
|
@@ -1,265 +0,0 @@
|
|
|
1
|
-
// Execution Tree & Dependency Graph
|
|
2
|
-
// Separates collection structure (tree) from execution order (graph)
|
|
3
|
-
import { LogLevel } from '@apiquest/types';
|
|
4
|
-
import { Logger } from './Logger.js';
|
|
5
|
-
import { isNullOrEmpty, isValidAuth } from './utils.js';
|
|
6
|
-
/**
|
|
7
|
-
* Represents a node in the collection tree
|
|
8
|
-
* - Tree structure: parent/children for hierarchical organization
|
|
9
|
-
* - Graph structure: dependencies for execution order
|
|
10
|
-
*/
|
|
11
|
-
export class ExecutionNode {
|
|
12
|
-
id;
|
|
13
|
-
name;
|
|
14
|
-
type;
|
|
15
|
-
item;
|
|
16
|
-
parent;
|
|
17
|
-
children;
|
|
18
|
-
depth;
|
|
19
|
-
path;
|
|
20
|
-
/**
|
|
21
|
-
* Scripts inherited from parent chain
|
|
22
|
-
* Accumulated during tree construction for efficient execution
|
|
23
|
-
*/
|
|
24
|
-
inheritedScripts;
|
|
25
|
-
/**
|
|
26
|
-
* Effective auth for this node (cascades from parents)
|
|
27
|
-
* Request auth > Folder auth > Parent folder auth > Collection auth
|
|
28
|
-
*/
|
|
29
|
-
effectiveAuth;
|
|
30
|
-
// Execution control (requests only)
|
|
31
|
-
condition;
|
|
32
|
-
dependsOn;
|
|
33
|
-
constructor(type, item, parent) {
|
|
34
|
-
this.type = type;
|
|
35
|
-
this.item = item;
|
|
36
|
-
this.parent = parent;
|
|
37
|
-
this.children = [];
|
|
38
|
-
this.depth = parent !== null ? parent.depth + 1 : 0;
|
|
39
|
-
this.dependsOn = [];
|
|
40
|
-
this.inheritedScripts = {};
|
|
41
|
-
// Set ID and name
|
|
42
|
-
if (type === 'collection') {
|
|
43
|
-
this.id = item.info.id;
|
|
44
|
-
this.name = item.info.name;
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
this.id = item.id;
|
|
48
|
-
this.name = item.name;
|
|
49
|
-
}
|
|
50
|
-
// Build path using PathType format
|
|
51
|
-
if (type === 'collection') {
|
|
52
|
-
this.path = 'collection:/';
|
|
53
|
-
}
|
|
54
|
-
else if (parent?.type === 'collection') {
|
|
55
|
-
// Direct child of collection
|
|
56
|
-
this.path = `${type}:/${this.name}`;
|
|
57
|
-
}
|
|
58
|
-
else if (parent !== null) {
|
|
59
|
-
// Nested within folders
|
|
60
|
-
const basePath = parent.path.replace(/^(folder|request):\//, '');
|
|
61
|
-
this.path = `${type}:/${basePath}/${this.name}`;
|
|
62
|
-
}
|
|
63
|
-
else {
|
|
64
|
-
// Fallback (shouldn't happen)
|
|
65
|
-
this.path = 'collection:/';
|
|
66
|
-
}
|
|
67
|
-
// Extract condition and dependencies (for requests)
|
|
68
|
-
if (type === 'request') {
|
|
69
|
-
const req = item;
|
|
70
|
-
this.condition = req.condition;
|
|
71
|
-
this.dependsOn = req.dependsOn ?? [];
|
|
72
|
-
}
|
|
73
|
-
this.inheritScripts();
|
|
74
|
-
this.inheritAuth();
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Accumulate scripts from parent chain
|
|
78
|
-
* All scripts stack (collected from parents during tree construction)
|
|
79
|
-
*/
|
|
80
|
-
inheritScripts() {
|
|
81
|
-
if (this.parent === null)
|
|
82
|
-
return;
|
|
83
|
-
this.inheritedScripts = {
|
|
84
|
-
collectionPre: this.parent.inheritedScripts.collectionPre,
|
|
85
|
-
collectionPost: this.parent.inheritedScripts.collectionPost,
|
|
86
|
-
folderPre: this.parent.inheritedScripts.folderPre !== undefined ? [...this.parent.inheritedScripts.folderPre] : undefined,
|
|
87
|
-
folderPost: this.parent.inheritedScripts.folderPost !== undefined ? [...this.parent.inheritedScripts.folderPost] : undefined,
|
|
88
|
-
preRequest: this.parent.inheritedScripts.preRequest !== undefined ? [...this.parent.inheritedScripts.preRequest] : undefined,
|
|
89
|
-
postRequest: this.parent.inheritedScripts.postRequest !== undefined ? [...this.parent.inheritedScripts.postRequest] : undefined
|
|
90
|
-
};
|
|
91
|
-
const parentItem = this.parent.item;
|
|
92
|
-
if (this.parent.type === 'collection') {
|
|
93
|
-
const coll = parentItem;
|
|
94
|
-
if (!isNullOrEmpty(coll.collectionPreScript)) {
|
|
95
|
-
this.inheritedScripts.collectionPre = coll.collectionPreScript;
|
|
96
|
-
}
|
|
97
|
-
if (!isNullOrEmpty(coll.collectionPostScript)) {
|
|
98
|
-
this.inheritedScripts.collectionPost = coll.collectionPostScript;
|
|
99
|
-
}
|
|
100
|
-
if (!isNullOrEmpty(coll.preRequestScript)) {
|
|
101
|
-
this.inheritedScripts.preRequest = this.inheritedScripts.preRequest ?? [];
|
|
102
|
-
this.inheritedScripts.preRequest.push(coll.preRequestScript);
|
|
103
|
-
}
|
|
104
|
-
if (!isNullOrEmpty(coll.postRequestScript)) {
|
|
105
|
-
this.inheritedScripts.postRequest = this.inheritedScripts.postRequest ?? [];
|
|
106
|
-
this.inheritedScripts.postRequest.unshift(coll.postRequestScript);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
if (this.parent.type === 'folder') {
|
|
110
|
-
const folder = parentItem;
|
|
111
|
-
if (!isNullOrEmpty(folder.folderPreScript)) {
|
|
112
|
-
this.inheritedScripts.folderPre = this.inheritedScripts.folderPre ?? [];
|
|
113
|
-
this.inheritedScripts.folderPre.push(folder.folderPreScript);
|
|
114
|
-
}
|
|
115
|
-
if (!isNullOrEmpty(folder.folderPostScript)) {
|
|
116
|
-
this.inheritedScripts.folderPost = this.inheritedScripts.folderPost ?? [];
|
|
117
|
-
this.inheritedScripts.folderPost.unshift(folder.folderPostScript);
|
|
118
|
-
}
|
|
119
|
-
if (!isNullOrEmpty(folder.preRequestScript)) {
|
|
120
|
-
this.inheritedScripts.preRequest = this.inheritedScripts.preRequest ?? [];
|
|
121
|
-
this.inheritedScripts.preRequest.push(folder.preRequestScript);
|
|
122
|
-
}
|
|
123
|
-
if (!isNullOrEmpty(folder.postRequestScript)) {
|
|
124
|
-
this.inheritedScripts.postRequest = this.inheritedScripts.postRequest ?? [];
|
|
125
|
-
this.inheritedScripts.postRequest.unshift(folder.postRequestScript);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Cascade auth from parent chain
|
|
131
|
-
* Child auth overrides parent auth
|
|
132
|
-
*/
|
|
133
|
-
inheritAuth() {
|
|
134
|
-
// Start with parent's effective auth
|
|
135
|
-
if (this.parent?.effectiveAuth !== undefined) {
|
|
136
|
-
this.effectiveAuth = this.parent.effectiveAuth;
|
|
137
|
-
}
|
|
138
|
-
// Override with this node's own auth if it has one
|
|
139
|
-
if (this.type === 'collection') {
|
|
140
|
-
const coll = this.item;
|
|
141
|
-
if (isValidAuth(coll.auth)) {
|
|
142
|
-
this.effectiveAuth = coll.auth;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
const folderOrRequest = this.item;
|
|
147
|
-
if (isValidAuth(folderOrRequest.auth)) {
|
|
148
|
-
this.effectiveAuth = folderOrRequest.auth;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
addChild(child) {
|
|
153
|
-
this.children.push(child);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Builds execution tree from collection JSON
|
|
158
|
-
* Handles CLI --data override at construction time
|
|
159
|
-
*/
|
|
160
|
-
export class TreeBuilder {
|
|
161
|
-
cliData;
|
|
162
|
-
logger;
|
|
163
|
-
constructor(cliData, logger) {
|
|
164
|
-
this.cliData = cliData;
|
|
165
|
-
this.logger = logger instanceof Logger ? logger : new Logger('TreeBuilder', LogLevel.INFO);
|
|
166
|
-
}
|
|
167
|
-
build(collection) {
|
|
168
|
-
this.logger.debug(`Building execution tree for collection: ${collection.info.name}`);
|
|
169
|
-
if (this.cliData !== undefined && this.cliData.length > 0) {
|
|
170
|
-
this.logger.debug(`Overriding collection testData with CLI data (${this.cliData.length} iterations)`);
|
|
171
|
-
collection = { ...collection, testData: this.cliData };
|
|
172
|
-
}
|
|
173
|
-
const root = new ExecutionNode('collection', collection, null);
|
|
174
|
-
this.buildChildren(root, collection.items);
|
|
175
|
-
this.logger.debug(`Execution tree built: ${this.countNodes(root)} total nodes`);
|
|
176
|
-
return root;
|
|
177
|
-
}
|
|
178
|
-
buildChildren(parent, items) {
|
|
179
|
-
for (const item of items) {
|
|
180
|
-
const node = new ExecutionNode(item.type, item, parent);
|
|
181
|
-
parent.addChild(node);
|
|
182
|
-
this.logger.trace(`Added ${item.type} node: ${node.path}`);
|
|
183
|
-
if (item.type === 'folder') {
|
|
184
|
-
this.buildChildren(node, item.items);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
countNodes(node) {
|
|
189
|
-
let count = 1;
|
|
190
|
-
for (const child of node.children) {
|
|
191
|
-
count += this.countNodes(child);
|
|
192
|
-
}
|
|
193
|
-
return count;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* Dependency graph for request execution order
|
|
198
|
-
* Flattens tree to request nodes only, topologically sorted by dependencies
|
|
199
|
-
*/
|
|
200
|
-
export class DependencyGraph {
|
|
201
|
-
nodes;
|
|
202
|
-
edges;
|
|
203
|
-
constructor(root, filterSet) {
|
|
204
|
-
this.nodes = new Map();
|
|
205
|
-
this.edges = new Map();
|
|
206
|
-
this.buildGraph(root, filterSet);
|
|
207
|
-
}
|
|
208
|
-
buildGraph(node, filterSet) {
|
|
209
|
-
if (node.type === 'request') {
|
|
210
|
-
// Include request if no filter or if in filter set
|
|
211
|
-
if (filterSet === null || filterSet === undefined || filterSet.has(node.id)) {
|
|
212
|
-
this.nodes.set(node.id, node);
|
|
213
|
-
// Filter dependencies to only include those in the graph
|
|
214
|
-
const filteredDeps = filterSet === null || filterSet === undefined
|
|
215
|
-
? node.dependsOn
|
|
216
|
-
: node.dependsOn.filter(depId => filterSet.has(depId));
|
|
217
|
-
this.edges.set(node.id, new Set(filteredDeps));
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
for (const child of node.children) {
|
|
221
|
-
this.buildGraph(child, filterSet);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
/**
|
|
225
|
-
* Topological sort: returns requests grouped by execution level
|
|
226
|
-
* Requests in same level can execute in parallel
|
|
227
|
-
*/
|
|
228
|
-
getExecutionLevels() {
|
|
229
|
-
const levels = [];
|
|
230
|
-
const remaining = new Set(this.nodes.keys());
|
|
231
|
-
const completed = new Set();
|
|
232
|
-
while (remaining.size > 0) {
|
|
233
|
-
const level = [];
|
|
234
|
-
for (const nodeId of remaining) {
|
|
235
|
-
const deps = this.edges.get(nodeId);
|
|
236
|
-
if (deps === undefined)
|
|
237
|
-
continue;
|
|
238
|
-
const allDepsCompleted = Array.from(deps).every(dep => completed.has(dep));
|
|
239
|
-
if (allDepsCompleted) {
|
|
240
|
-
level.push(nodeId);
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
if (level.length === 0 && remaining.size > 0) {
|
|
244
|
-
throw new Error('Circular dependency detected');
|
|
245
|
-
}
|
|
246
|
-
for (const nodeId of level) {
|
|
247
|
-
remaining.delete(nodeId);
|
|
248
|
-
completed.add(nodeId);
|
|
249
|
-
}
|
|
250
|
-
if (level.length > 0) {
|
|
251
|
-
levels.push(level);
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
return levels;
|
|
255
|
-
}
|
|
256
|
-
getNode(id) {
|
|
257
|
-
return this.nodes.get(id);
|
|
258
|
-
}
|
|
259
|
-
canRunInParallel(idA, idB) {
|
|
260
|
-
const depsA = this.edges.get(idA);
|
|
261
|
-
const depsB = this.edges.get(idB);
|
|
262
|
-
return (depsA?.has(idB) ?? false) === false && (depsB?.has(idA) ?? false) === false;
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
//# sourceMappingURL=ExecutionTree.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ExecutionTree.js","sourceRoot":"","sources":["../src/ExecutionTree.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { Collection } from '@apiquest/types';
|
|
2
|
-
export interface PluginRequirements {
|
|
3
|
-
protocols: Set<string>;
|
|
4
|
-
authTypes: Set<string>;
|
|
5
|
-
valueProviders: Set<string>;
|
|
6
|
-
}
|
|
7
|
-
export declare class CollectionAnalyzer {
|
|
8
|
-
/**
|
|
9
|
-
* Analyze a collection to determine which plugins are needed
|
|
10
|
-
* Per schema: protocol is collection-level, auth can be at any level, variables can have providers
|
|
11
|
-
*/
|
|
12
|
-
analyzeRequirements(collection: Collection): PluginRequirements;
|
|
13
|
-
private scanItems;
|
|
14
|
-
private scanAuth;
|
|
15
|
-
private scanVariables;
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=CollectionAnalyzer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CollectionAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/CollectionAnalyzer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAA2C,MAAM,iBAAiB,CAAC;AAG3F,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC7B;AAED,qBAAa,kBAAkB;IAC7B;;;OAGG;IACH,mBAAmB,CAAC,UAAU,EAAE,UAAU,GAAG,kBAAkB;IA4B/D,OAAO,CAAC,SAAS;IAqBjB,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,aAAa;CActB"}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
// Collection Analyzer - Scans collection to determine required plugins
|
|
2
|
-
// Extracted to improve code organization and enable selective plugin loading
|
|
3
|
-
import { isNullOrEmpty, hasItems, isValidAuth, isValidAuthType } from './utils.js';
|
|
4
|
-
export class CollectionAnalyzer {
|
|
5
|
-
/**
|
|
6
|
-
* Analyze a collection to determine which plugins are needed
|
|
7
|
-
* Per schema: protocol is collection-level, auth can be at any level, variables can have providers
|
|
8
|
-
*/
|
|
9
|
-
analyzeRequirements(collection) {
|
|
10
|
-
const requirements = {
|
|
11
|
-
protocols: new Set(),
|
|
12
|
-
authTypes: new Set(),
|
|
13
|
-
valueProviders: new Set()
|
|
14
|
-
};
|
|
15
|
-
// Protocol is at collection level (schema line 16-18)
|
|
16
|
-
if (!isNullOrEmpty(collection.protocol)) {
|
|
17
|
-
requirements.protocols.add(collection.protocol);
|
|
18
|
-
}
|
|
19
|
-
// Scan collection-level auth
|
|
20
|
-
if (isValidAuth(collection.auth)) {
|
|
21
|
-
this.scanAuth(collection.auth, requirements);
|
|
22
|
-
}
|
|
23
|
-
// Scan all items for folder/request-level auth
|
|
24
|
-
if (hasItems(collection.items)) {
|
|
25
|
-
this.scanItems(collection.items, requirements);
|
|
26
|
-
}
|
|
27
|
-
// Scan variables for provider field (schema line 123-126)
|
|
28
|
-
this.scanVariables(collection, requirements);
|
|
29
|
-
return requirements;
|
|
30
|
-
}
|
|
31
|
-
scanItems(items, requirements) {
|
|
32
|
-
for (const item of items) {
|
|
33
|
-
if (item.type === 'folder' && hasItems(item.items)) {
|
|
34
|
-
// Scan folder-level auth
|
|
35
|
-
if (isValidAuth(item.auth)) {
|
|
36
|
-
this.scanAuth(item.auth, requirements);
|
|
37
|
-
}
|
|
38
|
-
// Recursively scan folder items
|
|
39
|
-
this.scanItems(item.items, requirements);
|
|
40
|
-
}
|
|
41
|
-
else if (item.type === 'request') {
|
|
42
|
-
const request = item;
|
|
43
|
-
// Scan request-level auth
|
|
44
|
-
if (isValidAuth(request.auth)) {
|
|
45
|
-
this.scanAuth(request.auth, requirements);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
scanAuth(auth, requirements) {
|
|
51
|
-
// Skip 'none' and 'inherit' - they're not plugin types
|
|
52
|
-
if (isValidAuthType(auth.type)) {
|
|
53
|
-
requirements.authTypes.add(auth.type);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
scanVariables(collection, requirements) {
|
|
57
|
-
// Scan collection variables for provider field (variable objects, not just strings)
|
|
58
|
-
const variables = collection.variables ?? {};
|
|
59
|
-
for (const value of Object.values(variables)) {
|
|
60
|
-
// Variables can be strings OR variable objects with provider field
|
|
61
|
-
if (typeof value === 'object' && value !== null) {
|
|
62
|
-
const varObj = value;
|
|
63
|
-
if (varObj.provider !== null && varObj.provider !== undefined && varObj.provider !== '') {
|
|
64
|
-
requirements.valueProviders.add(varObj.provider);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
//# sourceMappingURL=CollectionAnalyzer.js.map
|