@pikku/inspector 0.12.37 → 0.12.39
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 +38 -0
- package/dist/error-codes.d.ts +3 -16
- package/dist/error-codes.js +4 -18
- package/package.json +6 -3
- package/src/error-codes-emitted.test.ts +76 -0
- package/src/error-codes.ts +5 -20
- package/src/utils/filter-inspector-state.test.ts +16 -18
- package/src/utils/post-process.test.ts +4 -4
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,41 @@
|
|
|
1
|
+
## 0.12.39
|
|
2
|
+
|
|
3
|
+
### Patch Changes
|
|
4
|
+
|
|
5
|
+
- 4f92e6f: `pikku db` schema-codegen warnings are now coded diagnostics routed through the CLI logger instead of raw `console.warn`, so they participate in the existing `--fail-on-warn` gate.
|
|
6
|
+
|
|
7
|
+
Each warning now carries a PKU code and `warn` severity: `PKU481` (JSON/JSONB column with no concrete `tsType`, degrading to `unknown`), `PKU480` (column named like a date/bool but whose DB type contradicts it), and `PKU482` (a `format` annotation ignored on a non-string column). Running `pikku db migrate --fail-on-warn` (e.g. in CI) now turns these into a hard failure, forcing the `db/annotations.ts` entry — closing the loophole where an untyped jsonb column silently degrades type-safety. Default behaviour is unchanged: the warnings still print, and only fail the build when `--fail-on-warn` is set.
|
|
8
|
+
|
|
9
|
+
- daec082: Drop Node 22 support — the minimum supported runtime is now Node 24 (LTS).
|
|
10
|
+
|
|
11
|
+
Node 22 deadlocks `pikku dev` at `loadUserBootstrap` (tsx `register()` + `require(esm)` cycle handling on node 22.12+), and Node 20 is already below our floor. The `engines.node` requirement is raised to `>=24` across all packages, matching `.nvmrc` and the CI test matrix. Closes #751.
|
|
12
|
+
|
|
13
|
+
- ad26273: Remove 16 dormant `ErrorCode` enum entries that were defined but never emitted anywhere in the framework. These were placeholder registrations that were never wired to a diagnostic, or codes whose emission sites were removed in later refactors (e.g. `PKU901`, `PKU431`). A whole-repo audit found zero emission sites — no user could ever see them — so they only cluttered the registry and demanded docs pages for errors that cannot occur.
|
|
14
|
+
|
|
15
|
+
Removed: `PKU300`, `PKU426`, `PKU427`, `PKU431`, `PKU488`, `PKU529`, `PKU568`, `PKU685`, `PKU715`, `PKU736`, `PKU787`, `PKU835`, `PKU836`, `PKU901`, `PKU937`, `PKU975`.
|
|
16
|
+
|
|
17
|
+
A new guard test (`error-codes-emitted.test.ts`) fails if any `ErrorCode` value has no `ErrorCode.<NAME>` or raw `PKU###` reference in the source, so dead entries can't silently accumulate again.
|
|
18
|
+
|
|
19
|
+
- Updated dependencies [7b17b14]
|
|
20
|
+
- Updated dependencies [daec082]
|
|
21
|
+
- Updated dependencies [e0fd352]
|
|
22
|
+
- @pikku/core@0.12.58
|
|
23
|
+
|
|
24
|
+
## 0.12.38
|
|
25
|
+
|
|
26
|
+
### Patch Changes
|
|
27
|
+
|
|
28
|
+
- 66f3dae: Move `@pikku/core` from `dependencies` to `peerDependencies` in the last packages that still declared it as a regular dependency.
|
|
29
|
+
|
|
30
|
+
`@pikku/core` holds a single `pikkuState` registry and must resolve to exactly one copy at runtime — every wiring (workflows, RPCs, queue workers, middleware) registers into the copy it imports, and the runner reads the copy it imports. 35 packages already declare core as a peer for this reason; these six were the stragglers. Because they carried a regular `@pikku/core` dependency, bumping any one of them could leave a second, older core locked in a consumer's tree, splitting the registry so wirings silently fail to resolve (surfaced as `[PKU717] Multiple @pikku/core versions installed`).
|
|
31
|
+
|
|
32
|
+
Making core a peer everywhere means the consuming app provides the one copy (the react/react-dom singleton pattern), so duplication is structurally impossible. `@pikku/core` is also kept as a devDependency in each package so it still builds/typechecks standalone.
|
|
33
|
+
|
|
34
|
+
Backward-compatible for consumers that already list `@pikku/core` directly (every template does). A consumer that only pulled core transitively now gets a loud install-time peer warning instead of a silent runtime split — strictly better.
|
|
35
|
+
|
|
36
|
+
- Updated dependencies [ded4f90]
|
|
37
|
+
- @pikku/core@0.12.54
|
|
38
|
+
|
|
1
39
|
## 0.12.37
|
|
2
40
|
|
|
3
41
|
### Patch Changes
|
package/dist/error-codes.d.ts
CHANGED
|
@@ -14,37 +14,25 @@ export declare enum ErrorCode {
|
|
|
14
14
|
MISSING_URI = "PKU220",
|
|
15
15
|
MISSING_FUNC = "PKU236",
|
|
16
16
|
INVALID_TAGS_TYPE = "PKU247",
|
|
17
|
-
INVALID_HANDLER = "PKU300",
|
|
18
17
|
MISSING_TITLE = "PKU370",
|
|
19
18
|
MISSING_QUEUE_NAME = "PKU384",
|
|
20
19
|
MISSING_CHANNEL_NAME = "PKU400",
|
|
21
20
|
CLI_CLIENTSIDE_RENDERER_HAS_SERVICES = "PKU672",
|
|
22
21
|
SCENARIO_HAS_SERVICES = "PKU673",
|
|
23
22
|
EXPECT_EVENTUALLY_SCENARIO_ONLY = "PKU675",
|
|
24
|
-
DYNAMIC_STEP_NAME = "PKU529",
|
|
25
23
|
WORKFLOW_ORCHESTRATOR_NOT_CONFIGURED = "PKU600",
|
|
26
24
|
INVALID_DSL_WORKFLOW = "PKU641",
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
DB_COLUMN_NAME_TYPE_CONTRADICTION = "PKU480",
|
|
26
|
+
DB_JSON_COLUMN_UNTYPED = "PKU481",
|
|
27
|
+
DB_FORMAT_ON_NON_STRING = "PKU482",
|
|
30
28
|
SCHEMA_GENERATION_ERROR = "PKU456",
|
|
31
|
-
SCHEMA_LOAD_ERROR = "PKU488",
|
|
32
29
|
INLINE_SCHEMA = "PKU489",
|
|
33
30
|
FUNCTION_METADATA_NOT_FOUND = "PKU559",
|
|
34
|
-
HANDLER_NOT_RESOLVED = "PKU568",
|
|
35
31
|
DUPLICATE_AUTH_DEFINITION = "PKU581",
|
|
36
32
|
AUTH_NOT_EXPORTED = "PKU582",
|
|
37
33
|
ROUTE_PARAM_MISMATCH = "PKU571",
|
|
38
34
|
ROUTE_QUERY_MISMATCH = "PKU572",
|
|
39
35
|
AUTH_DISABLED_REQUIRES_SESSIONLESS = "PKU573",
|
|
40
|
-
MIDDLEWARE_HANDLER_INVALID = "PKU685",
|
|
41
|
-
MIDDLEWARE_TAG_INVALID = "PKU715",
|
|
42
|
-
MIDDLEWARE_EMPTY_ARRAY = "PKU736",
|
|
43
|
-
MIDDLEWARE_PATTERN_INVALID = "PKU787",
|
|
44
|
-
PERMISSION_HANDLER_INVALID = "PKU835",
|
|
45
|
-
PERMISSION_TAG_INVALID = "PKU836",
|
|
46
|
-
PERMISSION_EMPTY_ARRAY = "PKU937",
|
|
47
|
-
PERMISSION_PATTERN_INVALID = "PKU975",
|
|
48
36
|
DUPLICATE_FUNCTION_VERSION = "PKU850",
|
|
49
37
|
DUPLICATE_FUNCTION_NAME = "PKU851",
|
|
50
38
|
MANIFEST_MISSING = "PKU860",
|
|
@@ -59,7 +47,6 @@ export declare enum ErrorCode {
|
|
|
59
47
|
SERVICES_NOT_DESTRUCTURED = "PKU410",
|
|
60
48
|
WIRES_NOT_DESTRUCTURED = "PKU411",
|
|
61
49
|
DUPLICATE_CORE_VERSION = "PKU717",
|
|
62
|
-
WORKFLOW_MULTI_QUEUE_NOT_SUPPORTED = "PKU901",
|
|
63
50
|
PII_IN_OUTPUT = "PKU910",
|
|
64
51
|
ADDON_WIRING_NOT_ALLOWED = "PKU920",
|
|
65
52
|
ADDON_CONTRACT_HANDLERS_NOT_ALLOWED = "PKU921",
|
package/dist/error-codes.js
CHANGED
|
@@ -16,26 +16,23 @@ export var ErrorCode;
|
|
|
16
16
|
ErrorCode["MISSING_URI"] = "PKU220";
|
|
17
17
|
ErrorCode["MISSING_FUNC"] = "PKU236";
|
|
18
18
|
ErrorCode["INVALID_TAGS_TYPE"] = "PKU247";
|
|
19
|
-
ErrorCode["INVALID_HANDLER"] = "PKU300";
|
|
20
19
|
ErrorCode["MISSING_TITLE"] = "PKU370";
|
|
21
20
|
ErrorCode["MISSING_QUEUE_NAME"] = "PKU384";
|
|
22
21
|
ErrorCode["MISSING_CHANNEL_NAME"] = "PKU400";
|
|
23
22
|
ErrorCode["CLI_CLIENTSIDE_RENDERER_HAS_SERVICES"] = "PKU672";
|
|
24
23
|
ErrorCode["SCENARIO_HAS_SERVICES"] = "PKU673";
|
|
25
24
|
ErrorCode["EXPECT_EVENTUALLY_SCENARIO_ONLY"] = "PKU675";
|
|
26
|
-
ErrorCode["DYNAMIC_STEP_NAME"] = "PKU529";
|
|
27
25
|
ErrorCode["WORKFLOW_ORCHESTRATOR_NOT_CONFIGURED"] = "PKU600";
|
|
28
26
|
ErrorCode["INVALID_DSL_WORKFLOW"] = "PKU641";
|
|
27
|
+
// Database schema codegen warnings
|
|
28
|
+
ErrorCode["DB_COLUMN_NAME_TYPE_CONTRADICTION"] = "PKU480";
|
|
29
|
+
ErrorCode["DB_JSON_COLUMN_UNTYPED"] = "PKU481";
|
|
30
|
+
ErrorCode["DB_FORMAT_ON_NON_STRING"] = "PKU482";
|
|
29
31
|
// Configuration errors
|
|
30
|
-
ErrorCode["CONFIG_TYPE_NOT_FOUND"] = "PKU426";
|
|
31
|
-
ErrorCode["CONFIG_TYPE_UNDEFINED"] = "PKU427";
|
|
32
|
-
ErrorCode["SCHEMA_NO_ROOT"] = "PKU431";
|
|
33
32
|
ErrorCode["SCHEMA_GENERATION_ERROR"] = "PKU456";
|
|
34
|
-
ErrorCode["SCHEMA_LOAD_ERROR"] = "PKU488";
|
|
35
33
|
ErrorCode["INLINE_SCHEMA"] = "PKU489";
|
|
36
34
|
// Function errors
|
|
37
35
|
ErrorCode["FUNCTION_METADATA_NOT_FOUND"] = "PKU559";
|
|
38
|
-
ErrorCode["HANDLER_NOT_RESOLVED"] = "PKU568";
|
|
39
36
|
// Auth errors
|
|
40
37
|
ErrorCode["DUPLICATE_AUTH_DEFINITION"] = "PKU581";
|
|
41
38
|
ErrorCode["AUTH_NOT_EXPORTED"] = "PKU582";
|
|
@@ -43,15 +40,6 @@ export var ErrorCode;
|
|
|
43
40
|
ErrorCode["ROUTE_PARAM_MISMATCH"] = "PKU571";
|
|
44
41
|
ErrorCode["ROUTE_QUERY_MISMATCH"] = "PKU572";
|
|
45
42
|
ErrorCode["AUTH_DISABLED_REQUIRES_SESSIONLESS"] = "PKU573";
|
|
46
|
-
// Middleware/Permission errors
|
|
47
|
-
ErrorCode["MIDDLEWARE_HANDLER_INVALID"] = "PKU685";
|
|
48
|
-
ErrorCode["MIDDLEWARE_TAG_INVALID"] = "PKU715";
|
|
49
|
-
ErrorCode["MIDDLEWARE_EMPTY_ARRAY"] = "PKU736";
|
|
50
|
-
ErrorCode["MIDDLEWARE_PATTERN_INVALID"] = "PKU787";
|
|
51
|
-
ErrorCode["PERMISSION_HANDLER_INVALID"] = "PKU835";
|
|
52
|
-
ErrorCode["PERMISSION_TAG_INVALID"] = "PKU836";
|
|
53
|
-
ErrorCode["PERMISSION_EMPTY_ARRAY"] = "PKU937";
|
|
54
|
-
ErrorCode["PERMISSION_PATTERN_INVALID"] = "PKU975";
|
|
55
43
|
// Versioning errors
|
|
56
44
|
ErrorCode["DUPLICATE_FUNCTION_VERSION"] = "PKU850";
|
|
57
45
|
ErrorCode["DUPLICATE_FUNCTION_NAME"] = "PKU851";
|
|
@@ -72,8 +60,6 @@ export var ErrorCode;
|
|
|
72
60
|
ErrorCode["WIRES_NOT_DESTRUCTURED"] = "PKU411";
|
|
73
61
|
// Dependency integrity errors
|
|
74
62
|
ErrorCode["DUPLICATE_CORE_VERSION"] = "PKU717";
|
|
75
|
-
// Feature Flag
|
|
76
|
-
ErrorCode["WORKFLOW_MULTI_QUEUE_NOT_SUPPORTED"] = "PKU901";
|
|
77
63
|
// Data classification errors
|
|
78
64
|
ErrorCode["PII_IN_OUTPUT"] = "PKU910";
|
|
79
65
|
// Addon authoring errors
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pikku/inspector",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.39",
|
|
4
4
|
"author": "yasser.fadl@gmail.com",
|
|
5
5
|
"license": "BUSL-1.1",
|
|
6
6
|
"type": "module",
|
|
@@ -35,7 +35,6 @@
|
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@openapi-contrib/json-schema-to-openapi-schema": "^4.3.1",
|
|
38
|
-
"@pikku/core": "^0.12.53",
|
|
39
38
|
"openapi-types": "^12.1.3",
|
|
40
39
|
"path-to-regexp": "^8.3.0",
|
|
41
40
|
"ts-json-schema-generator": "2.9.1-next.16",
|
|
@@ -44,10 +43,14 @@
|
|
|
44
43
|
"zod": "^4.3.6",
|
|
45
44
|
"zod-to-ts": "^2.1.0"
|
|
46
45
|
},
|
|
46
|
+
"peerDependencies": {
|
|
47
|
+
"@pikku/core": "^0.12.58"
|
|
48
|
+
},
|
|
47
49
|
"devDependencies": {
|
|
50
|
+
"@pikku/core": "^0.12.58",
|
|
48
51
|
"@types/node": "^24.11.0"
|
|
49
52
|
},
|
|
50
53
|
"engines": {
|
|
51
|
-
"node": ">=
|
|
54
|
+
"node": ">=24"
|
|
52
55
|
}
|
|
53
56
|
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { test } from 'node:test'
|
|
2
|
+
import { strict as assert } from 'node:assert'
|
|
3
|
+
import { readFileSync, readdirSync } from 'node:fs'
|
|
4
|
+
import { fileURLToPath } from 'node:url'
|
|
5
|
+
import { dirname, join } from 'node:path'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Guards against dead `ErrorCode` registry entries.
|
|
9
|
+
*
|
|
10
|
+
* Every value in the `ErrorCode` enum must have at least one emission site in
|
|
11
|
+
* the framework source — a `ErrorCode.<NAME>` reference or the raw `PKU###`
|
|
12
|
+
* string in a non-test `.ts` file under `packages/*/src`. A code that is
|
|
13
|
+
* defined but never thrown is a dead entry: it can never appear in a user's
|
|
14
|
+
* terminal, yet it still demands a docs page and clutters the registry. This
|
|
15
|
+
* test fails and names any such entries so they get wired up or removed rather
|
|
16
|
+
* than silently accumulating.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
const here = dirname(fileURLToPath(import.meta.url))
|
|
20
|
+
const packagesDir = join(here, '..', '..')
|
|
21
|
+
const errorCodesFile = join(here, 'error-codes.ts')
|
|
22
|
+
|
|
23
|
+
const enumMembers = [
|
|
24
|
+
...readFileSync(errorCodesFile, 'utf8').matchAll(
|
|
25
|
+
/^\s*([A-Z0-9_]+)\s*=\s*'(PKU\d+)'/gm
|
|
26
|
+
),
|
|
27
|
+
].map((m) => ({ name: m[1], code: m[2] }))
|
|
28
|
+
|
|
29
|
+
const collectSource = () => {
|
|
30
|
+
const contents: string[] = []
|
|
31
|
+
for (const pkg of readdirSync(packagesDir, { withFileTypes: true })) {
|
|
32
|
+
if (!pkg.isDirectory()) continue
|
|
33
|
+
const srcDir = join(packagesDir, pkg.name, 'src')
|
|
34
|
+
let entries
|
|
35
|
+
try {
|
|
36
|
+
entries = readdirSync(srcDir, { recursive: true, withFileTypes: true })
|
|
37
|
+
} catch {
|
|
38
|
+
continue
|
|
39
|
+
}
|
|
40
|
+
for (const entry of entries) {
|
|
41
|
+
if (!entry.isFile()) continue
|
|
42
|
+
const name = entry.name
|
|
43
|
+
if (
|
|
44
|
+
!name.endsWith('.ts') ||
|
|
45
|
+
name.endsWith('.d.ts') ||
|
|
46
|
+
name.endsWith('.test.ts') ||
|
|
47
|
+
name === 'error-codes.ts'
|
|
48
|
+
) {
|
|
49
|
+
continue
|
|
50
|
+
}
|
|
51
|
+
contents.push(readFileSync(join(entry.parentPath, name), 'utf8'))
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return contents.join('\n')
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
test('every ErrorCode value has an emission site in the source', () => {
|
|
58
|
+
assert.ok(
|
|
59
|
+
enumMembers.length > 0,
|
|
60
|
+
'Failed to parse any ErrorCode members from error-codes.ts'
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
const source = collectSource()
|
|
64
|
+
|
|
65
|
+
const dead = enumMembers.filter(
|
|
66
|
+
({ name, code }) =>
|
|
67
|
+
!source.includes(`ErrorCode.${name}`) && !source.includes(code)
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
assert.deepEqual(
|
|
71
|
+
dead.map(({ code, name }) => `${code} ${name}`),
|
|
72
|
+
[],
|
|
73
|
+
`Dead ErrorCode entries (defined but never emitted). Wire them to a diagnostic or delete them:\n` +
|
|
74
|
+
dead.map(({ code, name }) => ` - ${code} ${name}`).join('\n')
|
|
75
|
+
)
|
|
76
|
+
})
|
package/src/error-codes.ts
CHANGED
|
@@ -16,28 +16,26 @@ export enum ErrorCode {
|
|
|
16
16
|
MISSING_URI = 'PKU220',
|
|
17
17
|
MISSING_FUNC = 'PKU236',
|
|
18
18
|
INVALID_TAGS_TYPE = 'PKU247',
|
|
19
|
-
INVALID_HANDLER = 'PKU300',
|
|
20
19
|
MISSING_TITLE = 'PKU370',
|
|
21
20
|
MISSING_QUEUE_NAME = 'PKU384',
|
|
22
21
|
MISSING_CHANNEL_NAME = 'PKU400',
|
|
23
22
|
CLI_CLIENTSIDE_RENDERER_HAS_SERVICES = 'PKU672',
|
|
24
23
|
SCENARIO_HAS_SERVICES = 'PKU673',
|
|
25
24
|
EXPECT_EVENTUALLY_SCENARIO_ONLY = 'PKU675',
|
|
26
|
-
DYNAMIC_STEP_NAME = 'PKU529',
|
|
27
25
|
WORKFLOW_ORCHESTRATOR_NOT_CONFIGURED = 'PKU600',
|
|
28
26
|
INVALID_DSL_WORKFLOW = 'PKU641',
|
|
29
27
|
|
|
28
|
+
// Database schema codegen warnings
|
|
29
|
+
DB_COLUMN_NAME_TYPE_CONTRADICTION = 'PKU480',
|
|
30
|
+
DB_JSON_COLUMN_UNTYPED = 'PKU481',
|
|
31
|
+
DB_FORMAT_ON_NON_STRING = 'PKU482',
|
|
32
|
+
|
|
30
33
|
// Configuration errors
|
|
31
|
-
CONFIG_TYPE_NOT_FOUND = 'PKU426',
|
|
32
|
-
CONFIG_TYPE_UNDEFINED = 'PKU427',
|
|
33
|
-
SCHEMA_NO_ROOT = 'PKU431',
|
|
34
34
|
SCHEMA_GENERATION_ERROR = 'PKU456',
|
|
35
|
-
SCHEMA_LOAD_ERROR = 'PKU488',
|
|
36
35
|
INLINE_SCHEMA = 'PKU489',
|
|
37
36
|
|
|
38
37
|
// Function errors
|
|
39
38
|
FUNCTION_METADATA_NOT_FOUND = 'PKU559',
|
|
40
|
-
HANDLER_NOT_RESOLVED = 'PKU568',
|
|
41
39
|
|
|
42
40
|
// Auth errors
|
|
43
41
|
DUPLICATE_AUTH_DEFINITION = 'PKU581',
|
|
@@ -48,16 +46,6 @@ export enum ErrorCode {
|
|
|
48
46
|
ROUTE_QUERY_MISMATCH = 'PKU572',
|
|
49
47
|
AUTH_DISABLED_REQUIRES_SESSIONLESS = 'PKU573',
|
|
50
48
|
|
|
51
|
-
// Middleware/Permission errors
|
|
52
|
-
MIDDLEWARE_HANDLER_INVALID = 'PKU685',
|
|
53
|
-
MIDDLEWARE_TAG_INVALID = 'PKU715',
|
|
54
|
-
MIDDLEWARE_EMPTY_ARRAY = 'PKU736',
|
|
55
|
-
MIDDLEWARE_PATTERN_INVALID = 'PKU787',
|
|
56
|
-
PERMISSION_HANDLER_INVALID = 'PKU835',
|
|
57
|
-
PERMISSION_TAG_INVALID = 'PKU836',
|
|
58
|
-
PERMISSION_EMPTY_ARRAY = 'PKU937',
|
|
59
|
-
PERMISSION_PATTERN_INVALID = 'PKU975',
|
|
60
|
-
|
|
61
49
|
// Versioning errors
|
|
62
50
|
DUPLICATE_FUNCTION_VERSION = 'PKU850',
|
|
63
51
|
DUPLICATE_FUNCTION_NAME = 'PKU851',
|
|
@@ -84,9 +72,6 @@ export enum ErrorCode {
|
|
|
84
72
|
// Dependency integrity errors
|
|
85
73
|
DUPLICATE_CORE_VERSION = 'PKU717',
|
|
86
74
|
|
|
87
|
-
// Feature Flag
|
|
88
|
-
WORKFLOW_MULTI_QUEUE_NOT_SUPPORTED = 'PKU901',
|
|
89
|
-
|
|
90
75
|
// Data classification errors
|
|
91
76
|
PII_IN_OUTPUT = 'PKU910',
|
|
92
77
|
|
|
@@ -1668,7 +1668,7 @@ describe('addon bootstrap tree-shake', () => {
|
|
|
1668
1668
|
['console', { package: '@pikku/addon-console' }],
|
|
1669
1669
|
])
|
|
1670
1670
|
state.rpc.usedAddons = new Set(['console'])
|
|
1671
|
-
state.rpc.invokedFunctions = new Set(['console:
|
|
1671
|
+
state.rpc.invokedFunctions = new Set(['console:streamWorkflowRun'])
|
|
1672
1672
|
mutate?.(state)
|
|
1673
1673
|
return state
|
|
1674
1674
|
}
|
|
@@ -1687,7 +1687,7 @@ describe('addon bootstrap tree-shake', () => {
|
|
|
1687
1687
|
test('keeps an addon when a kept wiring targets one of its functions', () => {
|
|
1688
1688
|
const state = withAddon((s) => {
|
|
1689
1689
|
s.http.meta.get['/console/stream'] = {
|
|
1690
|
-
pikkuFuncId: 'console:
|
|
1690
|
+
pikkuFuncId: 'console:streamWorkflowRun',
|
|
1691
1691
|
route: '/console/stream',
|
|
1692
1692
|
method: 'GET',
|
|
1693
1693
|
tags: [],
|
|
@@ -1697,7 +1697,7 @@ describe('addon bootstrap tree-shake', () => {
|
|
|
1697
1697
|
})
|
|
1698
1698
|
const filtered = filterInspectorState(
|
|
1699
1699
|
state,
|
|
1700
|
-
{ names: ['console:
|
|
1700
|
+
{ names: ['console:streamWorkflowRun'] },
|
|
1701
1701
|
mockLogger
|
|
1702
1702
|
)
|
|
1703
1703
|
assert.strictEqual(filtered.rpc.wireAddonDeclarations.size, 1)
|
|
@@ -1706,45 +1706,43 @@ describe('addon bootstrap tree-shake', () => {
|
|
|
1706
1706
|
|
|
1707
1707
|
test('keeps an addon when a kept route ref()-targets one of its functions', () => {
|
|
1708
1708
|
const state = withAddon((s) => {
|
|
1709
|
-
s.http.meta.get['/
|
|
1710
|
-
pikkuFuncId: 'http:get:/
|
|
1711
|
-
refTarget: 'console:
|
|
1712
|
-
route: '/
|
|
1709
|
+
s.http.meta.get['/workflow-run/stream'] = {
|
|
1710
|
+
pikkuFuncId: 'http:get:/workflow-run/stream',
|
|
1711
|
+
refTarget: 'console:streamWorkflowRun',
|
|
1712
|
+
route: '/workflow-run/stream',
|
|
1713
1713
|
method: 'GET',
|
|
1714
1714
|
tags: [],
|
|
1715
1715
|
middleware: [],
|
|
1716
1716
|
permissions: [],
|
|
1717
1717
|
} as any
|
|
1718
|
-
s.functions.meta['http:get:/
|
|
1718
|
+
s.functions.meta['http:get:/workflow-run/stream'] = {
|
|
1719
1719
|
services: { optimized: false, services: [] },
|
|
1720
1720
|
} as any
|
|
1721
1721
|
})
|
|
1722
1722
|
const filtered = filterInspectorState(
|
|
1723
1723
|
state,
|
|
1724
|
-
{ names: ['http:get:/
|
|
1724
|
+
{ names: ['http:get:/workflow-run/stream'] },
|
|
1725
1725
|
mockLogger
|
|
1726
1726
|
)
|
|
1727
1727
|
assert.strictEqual(filtered.rpc.wireAddonDeclarations.size, 1)
|
|
1728
1728
|
assert.ok(filtered.rpc.wireAddonDeclarations.has('console'))
|
|
1729
1729
|
assert.ok(
|
|
1730
|
-
filtered.serviceAggregation.usedFunctions.has(
|
|
1731
|
-
'console:streamFunctionTests'
|
|
1732
|
-
)
|
|
1730
|
+
filtered.serviceAggregation.usedFunctions.has('console:streamWorkflowRun')
|
|
1733
1731
|
)
|
|
1734
1732
|
})
|
|
1735
1733
|
|
|
1736
1734
|
test('drops the addon when the ref()-wired route is filtered out', () => {
|
|
1737
1735
|
const state = withAddon((s) => {
|
|
1738
|
-
s.http.meta.get['/
|
|
1739
|
-
pikkuFuncId: 'http:get:/
|
|
1740
|
-
refTarget: 'console:
|
|
1741
|
-
route: '/
|
|
1736
|
+
s.http.meta.get['/workflow-run/stream'] = {
|
|
1737
|
+
pikkuFuncId: 'http:get:/workflow-run/stream',
|
|
1738
|
+
refTarget: 'console:streamWorkflowRun',
|
|
1739
|
+
route: '/workflow-run/stream',
|
|
1742
1740
|
method: 'GET',
|
|
1743
1741
|
tags: [],
|
|
1744
1742
|
middleware: [],
|
|
1745
1743
|
permissions: [],
|
|
1746
1744
|
} as any
|
|
1747
|
-
s.functions.meta['http:get:/
|
|
1745
|
+
s.functions.meta['http:get:/workflow-run/stream'] = {
|
|
1748
1746
|
services: { optimized: false, services: [] },
|
|
1749
1747
|
} as any
|
|
1750
1748
|
})
|
|
@@ -1756,7 +1754,7 @@ describe('addon bootstrap tree-shake', () => {
|
|
|
1756
1754
|
assert.strictEqual(filtered.rpc.wireAddonDeclarations.size, 0)
|
|
1757
1755
|
assert.ok(
|
|
1758
1756
|
!filtered.serviceAggregation.usedFunctions.has(
|
|
1759
|
-
'console:
|
|
1757
|
+
'console:streamWorkflowRun'
|
|
1760
1758
|
)
|
|
1761
1759
|
)
|
|
1762
1760
|
})
|
|
@@ -206,17 +206,17 @@ describe('aggregateRequiredServices — per-function addon services', () => {
|
|
|
206
206
|
test('a ref()-wired route (inline id + namespaced target) aggregates the target services', () => {
|
|
207
207
|
const state = makeState({
|
|
208
208
|
usedFunctions: [
|
|
209
|
-
'http:get:/
|
|
210
|
-
'console:
|
|
209
|
+
'http:get:/workflow-run/stream',
|
|
210
|
+
'console:streamWorkflowRun',
|
|
211
211
|
],
|
|
212
212
|
functionsMeta: {
|
|
213
|
-
'http:get:/
|
|
213
|
+
'http:get:/workflow-run/stream': {
|
|
214
214
|
services: { optimized: false, services: [] },
|
|
215
215
|
},
|
|
216
216
|
},
|
|
217
217
|
addonFunctions: {
|
|
218
218
|
console: {
|
|
219
|
-
|
|
219
|
+
streamWorkflowRun: {
|
|
220
220
|
services: { optimized: true, services: ['metaService'] },
|
|
221
221
|
},
|
|
222
222
|
},
|