@pikku/inspector 0.12.22 → 0.12.24
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/CHANGELOG.md +40 -0
- package/dist/add/add-addon-bans.d.ts +7 -0
- package/dist/add/add-addon-bans.js +65 -0
- package/dist/add/add-auth.js +43 -0
- package/dist/add/add-channel.js +47 -6
- package/dist/add/add-cli.js +17 -0
- package/dist/add/add-http-route.d.ts +11 -1
- package/dist/add/add-http-route.js +37 -0
- package/dist/add/add-http-routes.d.ts +0 -3
- package/dist/add/add-http-routes.js +179 -36
- package/dist/error-codes.d.ts +3 -1
- package/dist/error-codes.js +3 -0
- package/dist/inspector.js +17 -5
- package/dist/types.d.ts +48 -1
- package/dist/utils/get-exported-variable-name.d.ts +2 -0
- package/dist/utils/get-exported-variable-name.js +34 -0
- package/dist/utils/load-addon-functions-meta.js +98 -0
- package/dist/utils/post-process.js +16 -3
- package/dist/utils/resolve-addon-package.js +3 -1
- package/dist/utils/resolve-ref-contract.d.ts +21 -0
- package/dist/utils/resolve-ref-contract.js +46 -0
- package/dist/utils/serialize-inspector-state.d.ts +1 -0
- package/dist/utils/serialize-inspector-state.js +9 -0
- package/dist/visit.js +24 -19
- package/package.json +1 -1
- package/src/add/add-addon-bans.ts +84 -0
- package/src/add/add-auth.test.ts +94 -0
- package/src/add/add-auth.ts +46 -0
- package/src/add/add-channel.ts +66 -7
- package/src/add/add-cli.ts +30 -0
- package/src/add/add-http-route.ts +75 -1
- package/src/add/add-http-routes.ts +283 -41
- package/src/add/addon-bans.test.ts +121 -0
- package/src/add/addon-contracts.test.ts +221 -0
- package/src/error-codes.ts +4 -0
- package/src/inspector.ts +17 -5
- package/src/types.ts +70 -1
- package/src/utils/get-exported-variable-name.ts +48 -0
- package/src/utils/load-addon-functions-meta.ts +164 -0
- package/src/utils/post-process.ts +17 -3
- package/src/utils/resolve-addon-package.ts +6 -1
- package/src/utils/resolve-ref-contract.ts +71 -0
- package/src/utils/serialize-inspector-state.ts +10 -0
- package/src/visit.ts +26 -19
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import * as ts from 'typescript'
|
|
2
|
+
|
|
3
|
+
export interface RefContractResolution<T> {
|
|
4
|
+
contract: T
|
|
5
|
+
/**
|
|
6
|
+
* Optional basePath override supplied by the consumer via the second
|
|
7
|
+
* argument, e.g. refHTTP('ns:routes', { basePath: '/ext' }). When undefined
|
|
8
|
+
* the addon contract's own basePath is preserved.
|
|
9
|
+
*/
|
|
10
|
+
basePath?: string
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const getStringProperty = (
|
|
14
|
+
obj: ts.ObjectLiteralExpression,
|
|
15
|
+
name: string
|
|
16
|
+
): string | undefined => {
|
|
17
|
+
for (const prop of obj.properties) {
|
|
18
|
+
if (
|
|
19
|
+
ts.isPropertyAssignment(prop) &&
|
|
20
|
+
(ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name)) &&
|
|
21
|
+
prop.name.text === name &&
|
|
22
|
+
ts.isStringLiteral(prop.initializer)
|
|
23
|
+
) {
|
|
24
|
+
return prop.initializer.text
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return undefined
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Resolve a refHTTP / refChannel / refCLI call expression against the addon
|
|
32
|
+
* contracts already loaded (and namespaced) by loadAddonFunctionsMeta.
|
|
33
|
+
*
|
|
34
|
+
* The first string argument has the form 'namespace:contractName', mirroring
|
|
35
|
+
* how ref('namespace:fn') references an addon function. Detection is purely
|
|
36
|
+
* syntactic — no import resolution is required because the namespace and
|
|
37
|
+
* contract name are carried in the string literal. An optional second object
|
|
38
|
+
* argument may override mount details such as basePath.
|
|
39
|
+
*/
|
|
40
|
+
export const resolveRefContract = <T>(
|
|
41
|
+
node: ts.Node,
|
|
42
|
+
helperName: 'refHTTP' | 'refChannel' | 'refCLI',
|
|
43
|
+
addonContracts: Record<string, Record<string, T>>
|
|
44
|
+
): RefContractResolution<T> | null => {
|
|
45
|
+
if (!ts.isCallExpression(node)) return null
|
|
46
|
+
if (
|
|
47
|
+
!ts.isIdentifier(node.expression) ||
|
|
48
|
+
node.expression.text !== helperName
|
|
49
|
+
) {
|
|
50
|
+
return null
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const [arg, optionsArg] = node.arguments
|
|
54
|
+
if (!arg || !ts.isStringLiteral(arg)) return null
|
|
55
|
+
|
|
56
|
+
const separator = arg.text.indexOf(':')
|
|
57
|
+
if (separator === -1) return null
|
|
58
|
+
|
|
59
|
+
const namespace = arg.text.slice(0, separator)
|
|
60
|
+
const contractName = arg.text.slice(separator + 1)
|
|
61
|
+
|
|
62
|
+
const contract = addonContracts[namespace]?.[contractName]
|
|
63
|
+
if (contract === undefined) return null
|
|
64
|
+
|
|
65
|
+
let basePath: string | undefined
|
|
66
|
+
if (optionsArg && ts.isObjectLiteralExpression(optionsArg)) {
|
|
67
|
+
basePath = getStringProperty(optionsArg, 'basePath')
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return { contract, basePath }
|
|
71
|
+
}
|
|
@@ -263,6 +263,7 @@ export interface SerializableInspectorState {
|
|
|
263
263
|
openAPISpec: Record<string, any> | null
|
|
264
264
|
diagnostics: InspectorDiagnostic[]
|
|
265
265
|
addonFunctions: InspectorState['addonFunctions']
|
|
266
|
+
exportedContracts: InspectorState['exportedContracts']
|
|
266
267
|
}
|
|
267
268
|
|
|
268
269
|
/**
|
|
@@ -443,6 +444,7 @@ export function serializeInspectorState(
|
|
|
443
444
|
openAPISpec: state.openAPISpec,
|
|
444
445
|
diagnostics: state.diagnostics,
|
|
445
446
|
addonFunctions: state.addonFunctions,
|
|
447
|
+
exportedContracts: state.exportedContracts,
|
|
446
448
|
}
|
|
447
449
|
}
|
|
448
450
|
|
|
@@ -630,6 +632,14 @@ export function deserializeInspectorState(
|
|
|
630
632
|
openAPISpec: data.openAPISpec || null,
|
|
631
633
|
diagnostics: data.diagnostics || [],
|
|
632
634
|
addonFunctions: data.addonFunctions || {},
|
|
635
|
+
exportedContracts: data.exportedContracts || {
|
|
636
|
+
http: {},
|
|
637
|
+
cli: {},
|
|
638
|
+
channel: {},
|
|
639
|
+
addonHttp: {},
|
|
640
|
+
addonCli: {},
|
|
641
|
+
addonChannel: {},
|
|
642
|
+
},
|
|
633
643
|
program: null,
|
|
634
644
|
}
|
|
635
645
|
}
|
package/src/visit.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { addFileWithFactory } from './add/add-file-with-factory.js'
|
|
|
3
3
|
import { addFileExtendsCoreType } from './add/add-file-extends-core-type.js'
|
|
4
4
|
import { addHTTPRoute } from './add/add-http-route.js'
|
|
5
5
|
import { addHTTPRoutes } from './add/add-http-routes.js'
|
|
6
|
+
import { checkAddonBans } from './add/add-addon-bans.js'
|
|
6
7
|
import { addSchedule } from './add/add-schedule.js'
|
|
7
8
|
import { addTrigger } from './add/add-trigger.js'
|
|
8
9
|
import { addQueueWorker } from './add/add-queue-worker.js'
|
|
@@ -106,27 +107,33 @@ export const visitRoutes = (
|
|
|
106
107
|
state: InspectorState,
|
|
107
108
|
options: InspectorOptions
|
|
108
109
|
) => {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
addCredential(logger, node, checker, state, options)
|
|
113
|
-
addVariable(logger, node, checker, state, options)
|
|
110
|
+
const nextOptions = ts.isSourceFile(node)
|
|
111
|
+
? { ...options, sourceFile: node }
|
|
112
|
+
: options
|
|
114
113
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
114
|
+
checkAddonBans(logger, node, checker, state, nextOptions)
|
|
115
|
+
|
|
116
|
+
addFunctions(logger, node, checker, state, nextOptions)
|
|
117
|
+
addAuth(logger, node, checker, state, nextOptions)
|
|
118
|
+
addSecret(logger, node, checker, state, nextOptions)
|
|
119
|
+
addCredential(logger, node, checker, state, nextOptions)
|
|
120
|
+
addVariable(logger, node, checker, state, nextOptions)
|
|
121
|
+
|
|
122
|
+
addHTTPRoute(logger, node, checker, state, nextOptions)
|
|
123
|
+
addHTTPRoutes(logger, node, checker, state, nextOptions)
|
|
124
|
+
addSchedule(logger, node, checker, state, nextOptions)
|
|
125
|
+
addTrigger(logger, node, checker, state, nextOptions)
|
|
126
|
+
addQueueWorker(logger, node, checker, state, nextOptions)
|
|
127
|
+
addChannel(logger, node, checker, state, nextOptions)
|
|
128
|
+
addGateway(logger, node, checker, state, nextOptions)
|
|
129
|
+
addCLI(logger, node, checker, state, nextOptions)
|
|
130
|
+
addCLIRenderers(logger, node, checker, state, nextOptions)
|
|
131
|
+
addMCPResource(logger, node, checker, state, nextOptions)
|
|
132
|
+
addMCPPrompt(logger, node, checker, state, nextOptions)
|
|
133
|
+
addWorkflowGraph(logger, node, checker, state, nextOptions)
|
|
134
|
+
addAIAgent(logger, node, checker, state, nextOptions)
|
|
128
135
|
|
|
129
136
|
ts.forEachChild(node, (child) =>
|
|
130
|
-
visitRoutes(logger, checker, child, state,
|
|
137
|
+
visitRoutes(logger, checker, child, state, nextOptions)
|
|
131
138
|
)
|
|
132
139
|
}
|