@pikku/cli 0.12.91 → 0.12.93
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/LICENSE +106 -0
- package/console-app/assets/{index-D0HG8q0B.css → index-BYj7ZbUU.css} +1 -1
- package/console-app/assets/{index-CpkvmAGb.js → index-CmAplHjZ.js} +151 -149
- package/console-app/index.html +2 -2
- package/dist/.pikku/agent/pikku-agent-types.gen.d.ts +1 -1
- package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +1 -1
- package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-channel.js +16 -1
- package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-client.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.json +15 -0
- package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +48 -0
- package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-wirings.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli.gen.js +1 -1
- package/dist/.pikku/console/pikku-node-types.gen.d.ts +1 -1
- package/dist/.pikku/function/pikku-function-types.gen.d.ts +1 -1
- package/dist/.pikku/function/pikku-function-types.gen.js +1 -1
- package/dist/.pikku/function/pikku-functions-meta.gen.js +1 -1
- package/dist/.pikku/function/pikku-functions-meta.gen.json +73 -40
- package/dist/.pikku/function/pikku-functions.gen.js +1 -3
- package/dist/.pikku/http/pikku-http-types.gen.d.ts +1 -1
- package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
- package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +1 -1
- package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
- package/dist/.pikku/pikku-bootstrap-scenarios.gen.d.ts +2 -1
- package/dist/.pikku/pikku-bootstrap-scenarios.gen.js +2 -1
- package/dist/.pikku/pikku-bootstrap.gen.d.ts +1 -1
- package/dist/.pikku/pikku-bootstrap.gen.js +1 -1
- package/dist/.pikku/pikku-meta-service.gen.d.ts +1 -1
- package/dist/.pikku/pikku-meta-service.gen.js +1 -1
- package/dist/.pikku/pikku-services.gen.d.ts +1 -1
- package/dist/.pikku/pikku-types.gen.d.ts +1 -1
- package/dist/.pikku/pikku-types.gen.js +1 -1
- package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
- package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
- package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +1 -1
- package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +1 -1
- package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +1 -1
- package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +1 -1
- package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.json +3 -1
- package/dist/.pikku/scenarios/pikku-scenario-functions-meta.gen.js +1 -1
- package/dist/.pikku/scenarios/pikku-scenario-functions.gen.d.ts +1 -1
- package/dist/.pikku/scenarios/pikku-scenario-wirings-meta.gen.js +1 -1
- package/dist/.pikku/scenarios/pikku-scenario-wirings.gen.d.ts +1 -1
- package/dist/.pikku/scenarios/schemas/register.gen.d.ts +4 -0
- package/dist/.pikku/scenarios/schemas/register.gen.js +4 -0
- package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
- package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
- package/dist/.pikku/schemas/register.gen.js +13 -3
- package/dist/.pikku/schemas/schemas/FabricSecretsListOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/FabricSecretsRotateInput.schema.json +1 -0
- package/dist/.pikku/schemas/schemas/FabricSecretsRotateOutput.schema.json +1 -0
- package/dist/.pikku/schemas/schemas/FabricSecretsSetOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/KnowledgeIndexInput.schema.json +1 -0
- package/dist/.pikku/schemas/schemas/KnowledgeIndexOutput.schema.json +1 -0
- package/dist/.pikku/schemas/schemas/KnowledgeValidateInput.schema.json +1 -0
- package/dist/.pikku/schemas/schemas/KnowledgeValidateOutput.schema.json +1 -0
- package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/ScenarioRunInput.schema.json +1 -1
- package/dist/.pikku/scopes/pikku-scope-types.gen.d.ts +1 -1
- package/dist/.pikku/scopes/pikku-scope-types.gen.js +1 -1
- package/dist/.pikku/scopes/pikku-scopes.gen.d.ts +1 -1
- package/dist/.pikku/secrets/pikku-secret-types.gen.d.ts +1 -1
- package/dist/.pikku/secrets/pikku-secret-types.gen.js +1 -1
- package/dist/.pikku/secrets/pikku-secrets.gen.d.ts +1 -1
- package/dist/.pikku/secrets/pikku-secrets.gen.js +1 -1
- package/dist/.pikku/trigger/pikku-trigger-types.gen.d.ts +1 -1
- package/dist/.pikku/trigger/pikku-trigger-types.gen.js +1 -1
- package/dist/.pikku/variables/pikku-variable-types.gen.d.ts +1 -1
- package/dist/.pikku/variables/pikku-variable-types.gen.js +1 -1
- package/dist/.pikku/variables/pikku-variables.gen.d.ts +1 -1
- package/dist/.pikku/variables/pikku-variables.gen.js +1 -1
- package/dist/.pikku/workflow/meta/allWorkflow.gen.json +2 -8
- package/dist/.pikku/workflow/pikku-scenario-actors.gen.d.ts +1 -1
- package/dist/.pikku/workflow/pikku-scenario-actors.gen.js +1 -1
- package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +1 -1
- package/dist/.pikku/workflow/pikku-workflow-types.gen.js +1 -1
- package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +1 -1
- package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -1
- package/dist/bin/pikku-bin.mjs +2 -2
- package/dist/src/cli.wiring.js +29 -0
- package/dist/src/deploy/analyzer/analyzer.js +22 -5
- package/dist/src/deploy/build-pipeline.js +5 -1
- package/dist/src/fabric/fabric-commands.d.ts +37 -9
- package/dist/src/fabric/fabric-commands.js +12 -0
- package/dist/src/fabric/functions/domains-add.function.d.ts +4 -4
- package/dist/src/fabric/functions/secrets-list.function.d.ts +16 -4
- package/dist/src/fabric/functions/secrets-list.function.js +12 -10
- package/dist/src/fabric/functions/secrets-rotate.function.d.ts +24 -0
- package/dist/src/fabric/functions/secrets-rotate.function.js +36 -0
- package/dist/src/fabric/functions/secrets-set.function.d.ts +8 -4
- package/dist/src/fabric/functions/secrets-set.function.js +18 -7
- package/dist/src/fabric/functions/validate.function.js +16 -7
- package/dist/src/fabric/lib/http.d.ts +7 -1
- package/dist/src/fabric/lib/sealed-box.d.ts +16 -0
- package/dist/src/fabric/lib/sealed-box.js +72 -0
- package/dist/src/functions/commands/dev.js +9 -0
- package/dist/src/functions/commands/knowledge-index.d.ts +30 -0
- package/dist/src/functions/commands/knowledge-index.js +11 -0
- package/dist/src/functions/commands/knowledge-validate.d.ts +33 -0
- package/dist/src/functions/commands/knowledge-validate.js +11 -0
- package/dist/src/functions/commands/new-addon.d.ts +18 -0
- package/dist/src/functions/commands/new-addon.js +40 -24
- package/dist/src/functions/commands/pikku-command-bootstrap.js +1 -0
- package/dist/src/functions/commands/scenario-browser.d.ts +17 -2
- package/dist/src/functions/commands/scenario-browser.js +16 -8
- package/dist/src/functions/commands/scenario-environment.d.ts +32 -0
- package/dist/src/functions/commands/scenario-environment.js +61 -0
- package/dist/src/functions/commands/scenario.d.ts +6 -0
- package/dist/src/functions/commands/scenario.js +14 -9
- package/dist/src/functions/commands/skills.js +27 -61
- package/dist/src/functions/db/db-codegen.d.ts +6 -0
- package/dist/src/functions/db/db-codegen.js +9 -0
- package/dist/src/functions/db/db-migrator.js +14 -0
- package/dist/src/functions/db/local-db.d.ts +8 -0
- package/dist/src/functions/db/local-db.js +24 -2
- package/dist/src/functions/db/migration-identifiers.d.ts +58 -0
- package/dist/src/functions/db/migration-identifiers.js +262 -0
- package/dist/src/functions/db/migration-provenance.d.ts +35 -0
- package/dist/src/functions/db/migration-provenance.js +80 -0
- package/dist/src/functions/db/schema-sql.d.ts +43 -0
- package/dist/src/functions/db/schema-sql.js +135 -0
- package/dist/src/functions/db/sqlite/sqlite-kysely.js +22 -2
- package/dist/src/functions/knowledge/render.d.ts +3 -0
- package/dist/src/functions/knowledge/render.js +66 -0
- package/dist/src/functions/knowledge/schemas.d.ts +51 -0
- package/dist/src/functions/knowledge/schemas.js +25 -0
- package/dist/src/functions/wirings/credentials/serialize-credentials-types.js +8 -1
- package/dist/src/functions/wirings/functions/schemas.js +13 -1
- package/dist/src/functions/wirings/rpc/pikku-command-rpc.js +6 -1
- package/dist/src/functions/wirings/scenarios/register-scenario-instrumentation.d.ts +10 -0
- package/dist/src/functions/wirings/scenarios/register-scenario-instrumentation.js +102 -0
- package/dist/src/functions/wirings/scenarios/scenario-partition.d.ts +13 -0
- package/dist/src/functions/wirings/scenarios/scenario-partition.js +15 -2
- package/dist/src/functions/wirings/scenarios/scenario-schema-partition.d.ts +33 -0
- package/dist/src/functions/wirings/scenarios/scenario-schema-partition.js +49 -0
- package/dist/src/functions/wirings/secrets/serialize-secrets-types.js +10 -3
- package/dist/src/functions/wirings/variables/serialize-variables-types.js +8 -1
- package/dist/src/functions/workflows/all.workflow.js +2 -7
- package/dist/src/utils/file-writer.js +14 -2
- package/dist/src/utils/pikku-cli-config.d.ts +14 -0
- package/dist/src/utils/pikku-cli-config.js +34 -0
- package/dist/src/utils/remove-legacy-scaffold-file.d.ts +14 -0
- package/dist/src/utils/remove-legacy-scaffold-file.js +23 -0
- package/dist/src/utils/serialize-schemas.d.ts +3 -1
- package/dist/src/utils/serialize-schemas.js +39 -4
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -9
- package/dist/.pikku/schemas/schemas/PikkuScenarioFunctionsOutput.schema.json +0 -1
- package/dist/src/functions/wirings/scenarios/pikku-command-scenario-functions.d.ts +0 -1
- package/dist/src/functions/wirings/scenarios/pikku-command-scenario-functions.js +0 -31
- package/dist/src/functions/wirings/scenarios/serialize-scenario-functions.d.ts +0 -10
- package/dist/src/functions/wirings/scenarios/serialize-scenario-functions.js +0 -104
- package/skills/pikku-addon/SKILL.md +0 -243
- package/skills/pikku-addon/references/addon-package-manifest.md +0 -63
- package/skills/pikku-ai-agent/SKILL.md +0 -231
- package/skills/pikku-ai-vercel/SKILL.md +0 -82
- package/skills/pikku-ai-voice/SKILL.md +0 -88
- package/skills/pikku-audit/SKILL.md +0 -175
- package/skills/pikku-aws/SKILL.md +0 -111
- package/skills/pikku-backblaze/SKILL.md +0 -71
- package/skills/pikku-better-auth/SKILL.md +0 -298
- package/skills/pikku-cli/SKILL.md +0 -198
- package/skills/pikku-cli/references/complete-example.md +0 -82
- package/skills/pikku-concepts/SKILL.md +0 -250
- package/skills/pikku-concepts/references/concept-mapping.md +0 -556
- package/skills/pikku-concepts/references/packages.md +0 -29
- package/skills/pikku-config/SKILL.md +0 -212
- package/skills/pikku-cron/SKILL.md +0 -214
- package/skills/pikku-deploy-azure/SKILL.md +0 -71
- package/skills/pikku-deploy-cloudflare/SKILL.md +0 -82
- package/skills/pikku-deploy-express/SKILL.md +0 -86
- package/skills/pikku-deploy-fastify/SKILL.md +0 -73
- package/skills/pikku-deploy-lambda/SKILL.md +0 -110
- package/skills/pikku-deploy-nextjs/SKILL.md +0 -78
- package/skills/pikku-deploy-uws/SKILL.md +0 -88
- package/skills/pikku-deps/SKILL.md +0 -98
- package/skills/pikku-emails/SKILL.md +0 -163
- package/skills/pikku-fabric/SKILL.md +0 -318
- package/skills/pikku-fabric-debug/SKILL.md +0 -112
- package/skills/pikku-feature/SKILL.md +0 -258
- package/skills/pikku-gateway-slack/SKILL.md +0 -115
- package/skills/pikku-http/SKILL.md +0 -220
- package/skills/pikku-http/references/http-options.md +0 -55
- package/skills/pikku-i18n/SKILL.md +0 -137
- package/skills/pikku-info/SKILL.md +0 -100
- package/skills/pikku-jose/SKILL.md +0 -105
- package/skills/pikku-kysely/SKILL.md +0 -219
- package/skills/pikku-machine-auth/SKILL.md +0 -183
- package/skills/pikku-mcp/SKILL.md +0 -241
- package/skills/pikku-middleware/SKILL.md +0 -231
- package/skills/pikku-middleware/references/middleware-patterns.md +0 -61
- package/skills/pikku-mongodb/SKILL.md +0 -105
- package/skills/pikku-n8n-import/SKILL.md +0 -109
- package/skills/pikku-n8n-import/SPEC.md +0 -84
- package/skills/pikku-n8n-import/references/addon-mapping.md +0 -121
- package/skills/pikku-n8n-import/references/code-translation.md +0 -121
- package/skills/pikku-n8n-import/references/loops-and-control.md +0 -87
- package/skills/pikku-paraglide/SKILL.md +0 -117
- package/skills/pikku-permissions/SKILL.md +0 -192
- package/skills/pikku-pino/SKILL.md +0 -79
- package/skills/pikku-product-second-opinion/README.md +0 -43
- package/skills/pikku-product-second-opinion/SKILL.md +0 -158
- package/skills/pikku-product-second-opinion/example/sample-report.md +0 -90
- package/skills/pikku-product-second-opinion/references/report-template.md +0 -73
- package/skills/pikku-queue/SKILL.md +0 -240
- package/skills/pikku-react/SKILL.md +0 -212
- package/skills/pikku-react-query/SKILL.md +0 -242
- package/skills/pikku-realtime/SKILL.md +0 -236
- package/skills/pikku-realtime/references/other-routes.md +0 -23
- package/skills/pikku-redis/SKILL.md +0 -90
- package/skills/pikku-rpc/SKILL.md +0 -171
- package/skills/pikku-rtl/SKILL.md +0 -219
- package/skills/pikku-scenario/SKILL.md +0 -382
- package/skills/pikku-schedule/SKILL.md +0 -57
- package/skills/pikku-schema-ajv/SKILL.md +0 -62
- package/skills/pikku-schema-cfworker/SKILL.md +0 -63
- package/skills/pikku-security/SKILL.md +0 -108
- package/skills/pikku-services/SKILL.md +0 -248
- package/skills/pikku-services/references/audit-wire-service.md +0 -34
- package/skills/pikku-software-archaeology/README.md +0 -70
- package/skills/pikku-software-archaeology/SKILL.md +0 -186
- package/skills/pikku-software-archaeology/references/blueprint.schema.json +0 -625
- package/skills/pikku-software-archaeology/references/pikku-mapping.md +0 -49
- package/skills/pikku-software-archaeology/scripts/validate.mjs +0 -173
- package/skills/pikku-tag-middleware/SKILL.md +0 -13
- package/skills/pikku-template-clone/SKILL.md +0 -40
- package/skills/pikku-trigger/SKILL.md +0 -181
- package/skills/pikku-versioning/SKILL.md +0 -173
- package/skills/pikku-websocket/SKILL.md +0 -243
- package/skills/pikku-workflow/SKILL.md +0 -172
- package/skills/pikku-workflow/references/workflow-reference.md +0 -63
- package/skills/pikku-workflows-client/SKILL.md +0 -150
- package/skills/pikku-ws/SKILL.md +0 -47
|
@@ -6,11 +6,17 @@
|
|
|
6
6
|
* them in `.pikku/scenarios/`, reachable only from `pikku scenario run`.
|
|
7
7
|
*/
|
|
8
8
|
export const isScenarioStep = (meta) => meta?.scenarioStep === true;
|
|
9
|
+
/**
|
|
10
|
+
* A scenario's own body is a function too, so the app meta used to carry every
|
|
11
|
+
* scenario's name, schemas and hashes — and a deployed bundle imports that meta
|
|
12
|
+
* wholesale. Both kinds belong on the scenario side of the split.
|
|
13
|
+
*/
|
|
14
|
+
export const isScenarioFunction = (meta) => isScenarioStep(meta) || meta?.scenario === true;
|
|
9
15
|
export const partitionScenarioFunctions = (files, functionsMeta) => {
|
|
10
16
|
const app = new Map();
|
|
11
17
|
const scenario = new Map();
|
|
12
18
|
for (const [name, entry] of files) {
|
|
13
|
-
if (
|
|
19
|
+
if (isScenarioFunction(functionsMeta[name])) {
|
|
14
20
|
scenario.set(name, entry);
|
|
15
21
|
}
|
|
16
22
|
else {
|
|
@@ -23,7 +29,7 @@ export const partitionScenarioFunctionsMeta = (functionsMeta) => {
|
|
|
23
29
|
const app = {};
|
|
24
30
|
const scenario = {};
|
|
25
31
|
for (const [name, meta] of Object.entries(functionsMeta)) {
|
|
26
|
-
if (
|
|
32
|
+
if (isScenarioFunction(meta)) {
|
|
27
33
|
scenario[name] = meta;
|
|
28
34
|
}
|
|
29
35
|
else {
|
|
@@ -56,3 +62,10 @@ export const partitionScenarioWorkflows = (workflowNames, workflowFiles, graphMe
|
|
|
56
62
|
}
|
|
57
63
|
return { appNames, scenarioNames, appFiles, scenarioFiles };
|
|
58
64
|
};
|
|
65
|
+
/**
|
|
66
|
+
* Drop every scenario and step from a function meta map. The deploy analyzer
|
|
67
|
+
* reads inspector state rather than the partitioned codegen output, so it needs
|
|
68
|
+
* the same split applied before it decides what a deployment contains.
|
|
69
|
+
*/
|
|
70
|
+
export const withoutScenarios = (functionsMeta) => Object.fromEntries(Object.entries(functionsMeta).filter(([, meta]) => !isScenarioFunction(meta)));
|
|
71
|
+
export const withoutScenarioWorkflows = (graphMeta) => Object.fromEntries(Object.entries(graphMeta ?? {}).filter(([name]) => !isScenarioWorkflow(graphMeta, name)));
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { FunctionsMeta } from '@pikku/core';
|
|
2
|
+
/**
|
|
3
|
+
* The schema names a set of functions validates against.
|
|
4
|
+
*
|
|
5
|
+
* `getUniqueName` is the inspector's own type→schema naming, so this resolves a
|
|
6
|
+
* name the same way `computeRequiredSchemas` did when it filled `requiredSchemas`.
|
|
7
|
+
* The two must not disagree: a scenario schema this failed to name would stay on
|
|
8
|
+
* the app side, which is the leak the split exists to close.
|
|
9
|
+
*/
|
|
10
|
+
export declare const schemaNamesFor: (meta: FunctionsMeta, getUniqueName: (name: string) => string) => Set<string>;
|
|
11
|
+
/**
|
|
12
|
+
* Split the required schemas into the app's register and the scenario register.
|
|
13
|
+
*
|
|
14
|
+
* A scenario's input/output schemas are as test-only as its body, and the app's
|
|
15
|
+
* `register.gen.ts` is imported by every deployed bundle — on one project half the
|
|
16
|
+
* registered schemas belonged to scenarios and steps. Both sets are derived from
|
|
17
|
+
* `requiredSchemas`, so every name lands in exactly one register and a name the
|
|
18
|
+
* scenario side claims is removed from the app side by construction.
|
|
19
|
+
*
|
|
20
|
+
* Two things deliberately stay on the app side: a schema an application function
|
|
21
|
+
* also needs (registering a shared schema twice is worse than registering it in
|
|
22
|
+
* one place), and a type the project asked for by hand via `schemasFromTypes`,
|
|
23
|
+
* whatever happens to reference it.
|
|
24
|
+
*/
|
|
25
|
+
export declare const partitionRequiredSchemas: ({ functionsMeta, requiredSchemas, getUniqueName, schemasFromTypes, }: {
|
|
26
|
+
functionsMeta: FunctionsMeta;
|
|
27
|
+
requiredSchemas: Set<string>;
|
|
28
|
+
getUniqueName: (name: string) => string;
|
|
29
|
+
schemasFromTypes?: string[];
|
|
30
|
+
}) => {
|
|
31
|
+
appRequired: Set<string>;
|
|
32
|
+
scenarioOnly: Set<string>;
|
|
33
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { partitionScenarioFunctionsMeta } from './scenario-partition.js';
|
|
2
|
+
/**
|
|
3
|
+
* The schema names a set of functions validates against.
|
|
4
|
+
*
|
|
5
|
+
* `getUniqueName` is the inspector's own type→schema naming, so this resolves a
|
|
6
|
+
* name the same way `computeRequiredSchemas` did when it filled `requiredSchemas`.
|
|
7
|
+
* The two must not disagree: a scenario schema this failed to name would stay on
|
|
8
|
+
* the app side, which is the leak the split exists to close.
|
|
9
|
+
*/
|
|
10
|
+
export const schemaNamesFor = (meta, getUniqueName) => {
|
|
11
|
+
const names = new Set();
|
|
12
|
+
for (const { inputs, outputs } of Object.values(meta)) {
|
|
13
|
+
for (const type of [inputs?.[0], outputs?.[0]]) {
|
|
14
|
+
if (!type)
|
|
15
|
+
continue;
|
|
16
|
+
try {
|
|
17
|
+
names.add(getUniqueName(type));
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
names.add(type);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return names;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Split the required schemas into the app's register and the scenario register.
|
|
28
|
+
*
|
|
29
|
+
* A scenario's input/output schemas are as test-only as its body, and the app's
|
|
30
|
+
* `register.gen.ts` is imported by every deployed bundle — on one project half the
|
|
31
|
+
* registered schemas belonged to scenarios and steps. Both sets are derived from
|
|
32
|
+
* `requiredSchemas`, so every name lands in exactly one register and a name the
|
|
33
|
+
* scenario side claims is removed from the app side by construction.
|
|
34
|
+
*
|
|
35
|
+
* Two things deliberately stay on the app side: a schema an application function
|
|
36
|
+
* also needs (registering a shared schema twice is worse than registering it in
|
|
37
|
+
* one place), and a type the project asked for by hand via `schemasFromTypes`,
|
|
38
|
+
* whatever happens to reference it.
|
|
39
|
+
*/
|
|
40
|
+
export const partitionRequiredSchemas = ({ functionsMeta, requiredSchemas, getUniqueName, schemasFromTypes, }) => {
|
|
41
|
+
const { app: appFunctionsMeta, scenario: scenarioFunctionsMeta } = partitionScenarioFunctionsMeta(functionsMeta);
|
|
42
|
+
const appSchemaNames = schemaNamesFor(appFunctionsMeta, getUniqueName);
|
|
43
|
+
const requestedByHand = new Set(schemasFromTypes ?? []);
|
|
44
|
+
const scenarioOnly = new Set([...schemaNamesFor(scenarioFunctionsMeta, getUniqueName)].filter((name) => requiredSchemas.has(name) &&
|
|
45
|
+
!appSchemaNames.has(name) &&
|
|
46
|
+
!requestedByHand.has(name)));
|
|
47
|
+
const appRequired = new Set([...requiredSchemas].filter((name) => !scenarioOnly.has(name)));
|
|
48
|
+
return { appRequired, scenarioOnly };
|
|
49
|
+
};
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { validateAndBuildSecretDefinitionsMeta } from '@pikku/core/secret';
|
|
2
2
|
import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
|
|
3
|
+
/**
|
|
4
|
+
* A display name is the human-facing label a developer wrote, so an apostrophe
|
|
5
|
+
* in it is ordinary. `JSON.stringify` emits a valid, escaped TypeScript string
|
|
6
|
+
* literal; interpolating the raw text into a quoted one terminates the string
|
|
7
|
+
* and the generated file stops parsing.
|
|
8
|
+
*/
|
|
9
|
+
const literal = (value) => JSON.stringify(value);
|
|
3
10
|
export const serializeSecretsTypes = ({ definitions, schemaLookup, secretsFile, packageMappings, }) => {
|
|
4
11
|
const secrets = validateAndBuildSecretDefinitionsMeta(definitions, schemaLookup);
|
|
5
12
|
const credentialEntries = Object.entries(secrets);
|
|
@@ -13,8 +20,8 @@ export const serializeSecretsTypes = ({ definitions, schemaLookup, secretsFile,
|
|
|
13
20
|
needsOAuth2Types = true;
|
|
14
21
|
mapEntries.push(` '${meta.secretId}': OAuth2AppCredential`);
|
|
15
22
|
mapEntries.push(` '${meta.oauth2.tokenSecretId}': OAuth2Token`);
|
|
16
|
-
metaEntries.push(` '${meta.secretId}': { name: '${name}', displayName:
|
|
17
|
-
metaEntries.push(` '${meta.oauth2.tokenSecretId}': { name: '${name}_tokens', displayName:
|
|
23
|
+
metaEntries.push(` '${meta.secretId}': { name: '${name}', displayName: ${literal(meta.displayName)}, oauth2: { tokenSecretId: '${meta.oauth2.tokenSecretId}' } }`);
|
|
24
|
+
metaEntries.push(` '${meta.oauth2.tokenSecretId}': { name: '${name}_tokens', displayName: ${literal(`${meta.displayName} Tokens`)} }`);
|
|
18
25
|
}
|
|
19
26
|
else if (meta.schema && typeof meta.schema === 'string') {
|
|
20
27
|
const schemaRef = schemaLookup.get(meta.schema);
|
|
@@ -25,7 +32,7 @@ export const serializeSecretsTypes = ({ definitions, schemaLookup, secretsFile,
|
|
|
25
32
|
}
|
|
26
33
|
schemaImports.get(schemaRef.sourceFile).add(schemaRef.variableName);
|
|
27
34
|
mapEntries.push(` '${meta.secretId}': z.infer<typeof ${schemaRef.variableName}>`);
|
|
28
|
-
metaEntries.push(` '${meta.secretId}': { name: '${name}', displayName:
|
|
35
|
+
metaEntries.push(` '${meta.secretId}': { name: '${name}', displayName: ${literal(meta.displayName)} }`);
|
|
29
36
|
}
|
|
30
37
|
}
|
|
31
38
|
}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { validateAndBuildVariableDefinitionsMeta } from '@pikku/core/variable';
|
|
2
2
|
import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
|
|
3
|
+
/**
|
|
4
|
+
* A display name is the human-facing label a developer wrote, so an apostrophe
|
|
5
|
+
* in it is ordinary. `JSON.stringify` emits a valid, escaped TypeScript string
|
|
6
|
+
* literal; interpolating the raw text into a quoted one terminates the string
|
|
7
|
+
* and the generated file stops parsing.
|
|
8
|
+
*/
|
|
9
|
+
const literal = (value) => JSON.stringify(value);
|
|
3
10
|
export const serializeVariablesTypes = ({ definitions, schemaLookup, variablesFile, packageMappings, }) => {
|
|
4
11
|
const variables = validateAndBuildVariableDefinitionsMeta(definitions, schemaLookup);
|
|
5
12
|
const variableEntries = Object.entries(variables);
|
|
@@ -17,7 +24,7 @@ export const serializeVariablesTypes = ({ definitions, schemaLookup, variablesFi
|
|
|
17
24
|
}
|
|
18
25
|
schemaImports.get(schemaRef.sourceFile).add(schemaRef.variableName);
|
|
19
26
|
mapEntries.push(` '${meta.variableId}': z.infer<typeof ${schemaRef.variableName}>`);
|
|
20
|
-
metaEntries.push(` '${meta.variableId}': { name: '${name}', displayName:
|
|
27
|
+
metaEntries.push(` '${meta.variableId}': { name: '${name}', displayName: ${literal(meta.displayName)} }`);
|
|
21
28
|
}
|
|
22
29
|
}
|
|
23
30
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { existsSync } from 'fs';
|
|
2
2
|
import { pikkuWorkflowComplexFunc } from '#pikku/workflow/pikku-workflow-types.gen.js';
|
|
3
3
|
import { assertSingleCoreVersion } from '../../utils/assert-single-core-version.js';
|
|
4
|
-
import { pruneLegacyScaffoldFiles } from '../../utils/remove-legacy-scaffold-file.js';
|
|
4
|
+
import { pruneLegacyScaffoldFiles, removeRetiredScaffoldFiles, } from '../../utils/remove-legacy-scaffold-file.js';
|
|
5
5
|
import { PikkuTypecheckFailedError, renderTscFull, renderTscSummary, runProjectTypecheck, } from '../../utils/tsc-check.js';
|
|
6
6
|
const scaffoldFiles = (config) => {
|
|
7
7
|
const files = [];
|
|
@@ -17,11 +17,6 @@ const scaffoldFiles = (config) => {
|
|
|
17
17
|
file: config.consoleFunctionsFile,
|
|
18
18
|
generator: 'pikkuConsoleFunctions',
|
|
19
19
|
});
|
|
20
|
-
if (config.scaffold?.scenarios && config.scenariosFunctionsFile)
|
|
21
|
-
files.push({
|
|
22
|
-
file: config.scenariosFunctionsFile,
|
|
23
|
-
generator: 'pikkuScenarioFunctions',
|
|
24
|
-
});
|
|
25
20
|
if (config.scaffold?.userAdmin && config.userAdminFunctionsFile)
|
|
26
21
|
files.push({
|
|
27
22
|
file: config.userAdminFunctionsFile,
|
|
@@ -46,6 +41,7 @@ export const allWorkflow = pikkuWorkflowComplexFunc({
|
|
|
46
41
|
// (workflows/RPCs "disappear"), so refuse to codegen against it.
|
|
47
42
|
await assertSingleCoreVersion(config.rootDir, logger);
|
|
48
43
|
await pruneLegacyScaffoldFiles(config);
|
|
44
|
+
await removeRetiredScaffoldFiles(config);
|
|
49
45
|
const allImports = [];
|
|
50
46
|
let typesDeclarationFileExists = true;
|
|
51
47
|
if (!existsSync(config.outDir)) {
|
|
@@ -150,7 +146,6 @@ export const allWorkflow = pikkuWorkflowComplexFunc({
|
|
|
150
146
|
workflow.do('Graph wirings', 'pikkuGraphWirings', null),
|
|
151
147
|
workflow.do('Public RPC', 'pikkuPublicRPC', null),
|
|
152
148
|
workflow.do('Console functions', 'pikkuConsoleFunctions', null),
|
|
153
|
-
workflow.do('Scenario functions', 'pikkuScenarioFunctions', null),
|
|
154
149
|
workflow.do('User admin functions', 'pikkuUserAdminFunctions', null),
|
|
155
150
|
workflow.do('Events scaffold', 'pikkuEventsScaffold', null),
|
|
156
151
|
workflow.do('Emails', 'pikkuEmails', null),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { dirname, join } from 'path';
|
|
2
|
-
import { mkdir, readFile, writeFile, rm } from 'fs/promises';
|
|
2
|
+
import { mkdir, readFile, rename, writeFile, rm } from 'fs/promises';
|
|
3
3
|
import { existsSync } from 'fs';
|
|
4
4
|
import { getCLIVersion } from './get-cli-version.js';
|
|
5
5
|
export const DO_NOT_MODIFY_COMMENT = `/**
|
|
@@ -36,7 +36,19 @@ export const writeFileInDir = async (logger, path, content, { ignoreModifyCommen
|
|
|
36
36
|
// Only write if content has changed or file doesn't exist
|
|
37
37
|
if (existingContent !== content) {
|
|
38
38
|
await mkdir(dirname(path), { recursive: true });
|
|
39
|
-
|
|
39
|
+
// Atomically, because generated files are read while they are generated:
|
|
40
|
+
// `pikku scenario run --spawn` bundles the registers while the dev server it
|
|
41
|
+
// spawned is regenerating them, and `writeFile` truncates before it writes —
|
|
42
|
+
// a reader that lands in that window gets an empty file, not an old one.
|
|
43
|
+
const tmp = `${path}.${process.pid}.tmp`;
|
|
44
|
+
try {
|
|
45
|
+
await writeFile(tmp, content, 'utf-8');
|
|
46
|
+
await rename(tmp, path);
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
await rm(tmp, { force: true }).catch(() => { });
|
|
50
|
+
throw e;
|
|
51
|
+
}
|
|
40
52
|
if (TS_FILE_REGEX.test(path)) {
|
|
41
53
|
tsWriteGeneration++;
|
|
42
54
|
}
|
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
import type { PikkuCLIConfig } from '../../types/config.js';
|
|
2
2
|
import type { CLILogger } from '../services/cli-logger.service.js';
|
|
3
3
|
export declare const getPikkuCLIConfig: (logger: CLILogger, configFile: string | undefined, requiredFields: Array<keyof PikkuCLIConfig>, exitProcess?: boolean, outDirOverride?: string) => Promise<PikkuCLIConfig>;
|
|
4
|
+
/** A config that was found and parsed, but says something impossible. */
|
|
5
|
+
export declare class PikkuCLIConfigError extends Error {
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* The two schema registers must be two directories.
|
|
9
|
+
*
|
|
10
|
+
* `saveSchemas` owns whatever directory it is given: it writes `register.gen.ts`
|
|
11
|
+
* and prunes every schema file that its own required-set does not name. Point the
|
|
12
|
+
* scenario write at `schemaDirectory` and the second call overwrites the app's
|
|
13
|
+
* register with the scenario-only one and deletes the app's schema files — the
|
|
14
|
+
* exact leak the split exists to prevent, silently, and only in a deployed
|
|
15
|
+
* bundle. Nothing downstream can detect it, so it is rejected here.
|
|
16
|
+
*/
|
|
17
|
+
export declare const assertSchemaDirectoriesAreDistinct: (config: Pick<PikkuCLIConfig, "schemaDirectory" | "scenarioSchemaDirectory">) => void;
|
|
4
18
|
export declare const validateCLIConfig: (cliConfig: PikkuCLIConfig, required: Array<keyof PikkuCLIConfig>) => void;
|
|
@@ -32,6 +32,28 @@ async function findConfigFile() {
|
|
|
32
32
|
}
|
|
33
33
|
throw new Error('Config file pikku.config.json not found');
|
|
34
34
|
}
|
|
35
|
+
/** A config that was found and parsed, but says something impossible. */
|
|
36
|
+
export class PikkuCLIConfigError extends Error {
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The two schema registers must be two directories.
|
|
40
|
+
*
|
|
41
|
+
* `saveSchemas` owns whatever directory it is given: it writes `register.gen.ts`
|
|
42
|
+
* and prunes every schema file that its own required-set does not name. Point the
|
|
43
|
+
* scenario write at `schemaDirectory` and the second call overwrites the app's
|
|
44
|
+
* register with the scenario-only one and deletes the app's schema files — the
|
|
45
|
+
* exact leak the split exists to prevent, silently, and only in a deployed
|
|
46
|
+
* bundle. Nothing downstream can detect it, so it is rejected here.
|
|
47
|
+
*/
|
|
48
|
+
export const assertSchemaDirectoriesAreDistinct = (config) => {
|
|
49
|
+
const { schemaDirectory, scenarioSchemaDirectory } = config;
|
|
50
|
+
if (!schemaDirectory || !scenarioSchemaDirectory) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (resolve(schemaDirectory) === resolve(scenarioSchemaDirectory)) {
|
|
54
|
+
throw new PikkuCLIConfigError(`scenarioSchemaDirectory must not be the same directory as schemaDirectory (both resolve to ${resolve(schemaDirectory)}). Scenario schemas are written with their own register, which would replace the application one.`);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
35
57
|
const _getPikkuCLIConfig = async (logger, configFile = undefined, requiredFields, exitProcess = false, outDirOverride) => {
|
|
36
58
|
if (!configFile) {
|
|
37
59
|
configFile = await findConfigFile();
|
|
@@ -374,6 +396,12 @@ const _getPikkuCLIConfig = async (logger, configFile = undefined, requiredFields
|
|
|
374
396
|
if (!result.scenarioMetaDir) {
|
|
375
397
|
result.scenarioMetaDir = join(scenarioDir, 'meta');
|
|
376
398
|
}
|
|
399
|
+
// Schemas only a scenario or a step validates against. They live here rather
|
|
400
|
+
// than in `schemaDirectory` because the app's `register.gen.ts` is imported
|
|
401
|
+
// by every deployed bundle, and a test-only schema has no business in one.
|
|
402
|
+
if (!result.scenarioSchemaDirectory) {
|
|
403
|
+
result.scenarioSchemaDirectory = join(scenarioDir, 'schemas');
|
|
404
|
+
}
|
|
377
405
|
if (!result.scenarioBootstrapFile) {
|
|
378
406
|
result.scenarioBootstrapFile = join(result.outDir, 'pikku-bootstrap-scenarios.gen.ts');
|
|
379
407
|
}
|
|
@@ -549,6 +577,7 @@ const _getPikkuCLIConfig = async (logger, configFile = undefined, requiredFields
|
|
|
549
577
|
if (!isAbsolute(result.tsconfig)) {
|
|
550
578
|
result.tsconfig = join(result.rootDir, result.tsconfig);
|
|
551
579
|
}
|
|
580
|
+
assertSchemaDirectoriesAreDistinct(result);
|
|
552
581
|
if (result.addon) {
|
|
553
582
|
const packageJsonPath = join(result.rootDir, 'package.json');
|
|
554
583
|
try {
|
|
@@ -568,6 +597,11 @@ const _getPikkuCLIConfig = async (logger, configFile = undefined, requiredFields
|
|
|
568
597
|
return result;
|
|
569
598
|
}
|
|
570
599
|
catch (e) {
|
|
600
|
+
// A config that parsed but is contradictory is not a missing config, and
|
|
601
|
+
// saying so sends the reader looking for the wrong problem.
|
|
602
|
+
if (e instanceof PikkuCLIConfigError) {
|
|
603
|
+
throw e;
|
|
604
|
+
}
|
|
571
605
|
logger.error(e);
|
|
572
606
|
throw new Error(`Config file not found: ${configFile}`);
|
|
573
607
|
}
|
|
@@ -1,3 +1,17 @@
|
|
|
1
1
|
import type { PikkuCLIConfig } from '../../types/config.js';
|
|
2
2
|
export declare const removeLegacyScaffoldFile: (file: string) => Promise<void>;
|
|
3
|
+
/**
|
|
4
|
+
* Delete scaffolds pikku has stopped generating.
|
|
5
|
+
*
|
|
6
|
+
* The scenario instrumentation scaffold is why this exists: those four functions
|
|
7
|
+
* are pikku's own and are now registered by `pikku dev` itself, because as project
|
|
8
|
+
* source they were indistinguishable from application code and shipped —
|
|
9
|
+
* `expose: true` — in every deployed bundle. The inspector ignores them by name so
|
|
10
|
+
* an unregenerated project is already safe, but the file is then dead code that
|
|
11
|
+
* still imports `zod`, so it goes.
|
|
12
|
+
*
|
|
13
|
+
* Unlike `pruneLegacyScaffoldFiles`, which removes a file from a path pikku used
|
|
14
|
+
* to write to, this removes a file pikku no longer writes at all.
|
|
15
|
+
*/
|
|
16
|
+
export declare const removeRetiredScaffoldFiles: (config: PikkuCLIConfig) => Promise<void>;
|
|
3
17
|
export declare const pruneLegacyScaffoldFiles: (config: PikkuCLIConfig) => Promise<void>;
|
|
@@ -34,6 +34,29 @@ export const removeLegacyScaffoldFile = async (file) => {
|
|
|
34
34
|
await rm(legacy, { force: true });
|
|
35
35
|
}
|
|
36
36
|
};
|
|
37
|
+
/**
|
|
38
|
+
* Delete scaffolds pikku has stopped generating.
|
|
39
|
+
*
|
|
40
|
+
* The scenario instrumentation scaffold is why this exists: those four functions
|
|
41
|
+
* are pikku's own and are now registered by `pikku dev` itself, because as project
|
|
42
|
+
* source they were indistinguishable from application code and shipped —
|
|
43
|
+
* `expose: true` — in every deployed bundle. The inspector ignores them by name so
|
|
44
|
+
* an unregenerated project is already safe, but the file is then dead code that
|
|
45
|
+
* still imports `zod`, so it goes.
|
|
46
|
+
*
|
|
47
|
+
* Unlike `pruneLegacyScaffoldFiles`, which removes a file from a path pikku used
|
|
48
|
+
* to write to, this removes a file pikku no longer writes at all.
|
|
49
|
+
*/
|
|
50
|
+
export const removeRetiredScaffoldFiles = async (config) => {
|
|
51
|
+
for (const file of [
|
|
52
|
+
config.scenariosFunctionsFile,
|
|
53
|
+
config.scenariosSchemasFile,
|
|
54
|
+
]) {
|
|
55
|
+
if (file && existsSync(file)) {
|
|
56
|
+
await rm(file, { force: true });
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
};
|
|
37
60
|
export const pruneLegacyScaffoldFiles = async (config) => {
|
|
38
61
|
for (const file of scaffoldFiles(config)) {
|
|
39
62
|
if (file) {
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import type { JSONValue } from '@pikku/core';
|
|
2
2
|
import type { CLILogger } from '../services/cli-logger.service.js';
|
|
3
|
-
export declare function saveSchemas(logger: CLILogger, schemaParentDir: string, schemas: Record<string, JSONValue>, requiredSchemas: Set<string>, supportsImportAttributes: boolean, packageName?: string | null
|
|
3
|
+
export declare function saveSchemas(logger: CLILogger, schemaParentDir: string, schemas: Record<string, JSONValue>, requiredSchemas: Set<string>, supportsImportAttributes: boolean, packageName?: string | null,
|
|
4
|
+
/** Names the set in log output — there is more than one now (app, scenario). */
|
|
5
|
+
label?: string): Promise<void>;
|
|
@@ -1,6 +1,39 @@
|
|
|
1
1
|
import { writeFileInDir } from './file-writer.js';
|
|
2
|
-
import { mkdir, readdir, unlink, writeFile } from 'fs/promises';
|
|
2
|
+
import { mkdir, readdir, readFile, rename, unlink, writeFile, } from 'fs/promises';
|
|
3
3
|
const SCHEMA_FILE_SUFFIX = '.schema.json';
|
|
4
|
+
/**
|
|
5
|
+
* Write a schema file without ever exposing a half-written one.
|
|
6
|
+
*
|
|
7
|
+
* `writeFile` truncates and then writes, so a reader that opens the path in
|
|
8
|
+
* between sees an empty file. That reader is real: `pikku scenario run --spawn`
|
|
9
|
+
* bundles the register while the dev server it just spawned is running codegen,
|
|
10
|
+
* and esbuild fails the whole run with "Unexpected end of file in JSON" on
|
|
11
|
+
* whichever schema it happened to catch mid-write. A rename is atomic, so a
|
|
12
|
+
* reader gets either the previous complete file or the new one.
|
|
13
|
+
*
|
|
14
|
+
* Unchanged content is not rewritten at all. Most runs regenerate hundreds of
|
|
15
|
+
* byte-identical schemas, and every one of those is a window that does not need
|
|
16
|
+
* to exist — it also stops file watchers waking on output that did not change.
|
|
17
|
+
*/
|
|
18
|
+
async function writeSchemaFile(path, contents) {
|
|
19
|
+
try {
|
|
20
|
+
if ((await readFile(path, 'utf-8')) === contents) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// Unreadable or absent — fall through and write it.
|
|
26
|
+
}
|
|
27
|
+
const tmp = `${path}.${process.pid}.tmp`;
|
|
28
|
+
try {
|
|
29
|
+
await writeFile(tmp, contents, 'utf-8');
|
|
30
|
+
await rename(tmp, path);
|
|
31
|
+
}
|
|
32
|
+
catch (e) {
|
|
33
|
+
await unlink(tmp).catch(() => { });
|
|
34
|
+
throw e;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
4
37
|
function toValidIdentifier(name) {
|
|
5
38
|
let result = name.replace(/[-./: ]/g, '_');
|
|
6
39
|
if (/^\d/.test(result)) {
|
|
@@ -55,19 +88,21 @@ async function pruneOrphanedSchemaFiles(logger, schemaParentDir, keep) {
|
|
|
55
88
|
logger.info(`• Removed ${orphans.length} stale schema file(s).\x1b[0m`);
|
|
56
89
|
}
|
|
57
90
|
}
|
|
58
|
-
export async function saveSchemas(logger, schemaParentDir, schemas, requiredSchemas, supportsImportAttributes, packageName
|
|
91
|
+
export async function saveSchemas(logger, schemaParentDir, schemas, requiredSchemas, supportsImportAttributes, packageName,
|
|
92
|
+
/** Names the set in log output — there is more than one now (app, scenario). */
|
|
93
|
+
label = 'schemas') {
|
|
59
94
|
if (requiredSchemas.size === 0) {
|
|
60
95
|
await writeFileInDir(logger, `${schemaParentDir}/register.gen.ts`, 'export const empty = null;');
|
|
61
96
|
// Every file in schemas/ is now an orphan: register.gen.ts registers nothing, so
|
|
62
97
|
// leaving them would be exactly the misleading state this prune exists to prevent.
|
|
63
98
|
await pruneOrphanedSchemaFiles(logger, schemaParentDir, new Set());
|
|
64
|
-
logger.info(`• Skipping
|
|
99
|
+
logger.info(`• Skipping ${label} since none found.\x1b[0m`);
|
|
65
100
|
return;
|
|
66
101
|
}
|
|
67
102
|
await mkdir(`${schemaParentDir}/schemas`, { recursive: true });
|
|
68
103
|
await Promise.all(Object.entries(schemas).map(async ([schemaName, schema]) => {
|
|
69
104
|
if (requiredSchemas.has(schemaName)) {
|
|
70
|
-
await
|
|
105
|
+
await writeSchemaFile(`${schemaParentDir}/schemas/${schemaName}.schema.json`, JSON.stringify(schema));
|
|
71
106
|
}
|
|
72
107
|
}));
|
|
73
108
|
// Sort so register.gen.ts is byte-identical across runs — requiredSchemas is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../bin/pikku.ts","../src/cli.wiring.ts","../src/services.ts","../src/deploy/build-pipeline.ts","../src/deploy/provider-adapter.ts","../src/deploy/server-entry.ts","../src/deploy/analyzer/analyzer.ts","../src/deploy/analyzer/index.ts","../src/deploy/analyzer/manifest.ts","../src/deploy/bundler/bun-bundler.ts","../src/deploy/bundler/bundler.interface.ts","../src/deploy/bundler/bundler.ts","../src/deploy/bundler/dep-extractor.ts","../src/deploy/bundler/index.ts","../src/deploy/bundler/node-bundler.ts","../src/deploy/bundler/types.ts","../src/deploy/codegen/index.ts","../src/deploy/codegen/per-unit-codegen.ts","../src/deploy/plan/executor.ts","../src/deploy/plan/formatter.ts","../src/deploy/plan/index.ts","../src/deploy/plan/planner.ts","../src/deploy/plan/provider.ts","../src/deploy/plan/types.ts","../src/fabric/fabric-commands.ts","../src/fabric/functions/add.function.ts","../src/fabric/functions/addon-verify.function.ts","../src/fabric/functions/db-schema.function.ts","../src/fabric/functions/deploy-list.function.ts","../src/fabric/functions/deploy-units.function.ts","../src/fabric/functions/deploy.function.ts","../src/fabric/functions/domains-add.function.ts","../src/fabric/functions/domains-list.function.ts","../src/fabric/functions/domains-remove.function.ts","../src/fabric/functions/errors.function.ts","../src/fabric/functions/init.function.ts","../src/fabric/functions/link.function.ts","../src/fabric/functions/llm-key.function.ts","../src/fabric/functions/login.function.ts","../src/fabric/functions/logs.function.ts","../src/fabric/functions/metrics.function.ts","../src/fabric/functions/publish.function.ts","../src/fabric/functions/rollback.function.ts","../src/fabric/functions/secrets-list.function.ts","../src/fabric/functions/secrets-set.function.ts","../src/fabric/functions/smoke.function.ts","../src/fabric/functions/status.function.ts","../src/fabric/functions/trace.function.ts","../src/fabric/functions/validate.function.ts","../src/fabric/lib/config.ts","../src/fabric/lib/console-url.ts","../src/fabric/lib/frontend-typecheck.ts","../src/fabric/lib/git.ts","../src/fabric/lib/http.ts","../src/fabric/lib/not-implemented.ts","../src/fabric/lib/output.ts","../src/fabric/lib/prompt.ts","../src/fabric/lib/stage.ts","../src/fabric/sdk/http-map.gen.d.ts","../src/fabric/sdk/pikku-fetch.gen.ts","../src/fabric/sdk/pikku-rpc.gen.ts","../src/fabric/sdk/rpc-map.gen.d.ts","../src/functions/commands/all.ts","../src/functions/commands/audit.ts","../src/functions/commands/binary.ts","../src/functions/commands/bootstrap.ts","../src/functions/commands/bun-coverage-loader.ts","../src/functions/commands/db-audit.ts","../src/functions/commands/db-baseline.ts","../src/functions/commands/db-check.ts","../src/functions/commands/db-codegen.ts","../src/functions/commands/db-export.ts","../src/functions/commands/db-generate.ts","../src/functions/commands/db-migrate.ts","../src/functions/commands/db-reset.ts","../src/functions/commands/db-seed.ts","../src/functions/commands/db-shared.ts","../src/functions/commands/deploy-apply.ts","../src/functions/commands/deploy-info.ts","../src/functions/commands/deploy-plan.ts","../src/functions/commands/dev-ai-runner.ts","../src/functions/commands/dev.ts","../src/functions/commands/emails-init.ts","../src/functions/commands/enable.ts","../src/functions/commands/import-n8n.ts","../src/functions/commands/info.ts","../src/functions/commands/load-user-project.ts","../src/functions/commands/login.ts","../src/functions/commands/meta.ts","../src/functions/commands/new-addon.ts","../src/functions/commands/new-function.ts","../src/functions/commands/new-middleware.ts","../src/functions/commands/new-permission.ts","../src/functions/commands/new-wiring.ts","../src/functions/commands/pikku-command-bootstrap.ts","../src/functions/commands/pikku-command-summary.ts","../src/functions/commands/scenario-browser.ts","../src/functions/commands/scenario-formatter.ts","../src/functions/commands/scenario-ladder.ts","../src/functions/commands/scenario-plan.ts","../src/functions/commands/scenario.ts","../src/functions/commands/scopes-audit.ts","../src/functions/commands/scopes-prune.ts","../src/functions/commands/scopes-shared.ts","../src/functions/commands/serve-console.ts","../src/functions/commands/serve.ts","../src/functions/commands/skills.ts","../src/functions/commands/start-coverage.ts","../src/functions/commands/versions-check.ts","../src/functions/commands/versions-init.ts","../src/functions/commands/versions-update.ts","../src/functions/commands/watch.ts","../src/functions/commands/workspace-validate.ts","../src/functions/db/annotation-parser.ts","../src/functions/db/better-auth-schema.ts","../src/functions/db/coercion-plugin.ts","../src/functions/db/db-codegen.ts","../src/functions/db/db-introspector.ts","../src/functions/db/db-migrator.ts","../src/functions/db/local-db.ts","../src/functions/db/zod-codegen.ts","../src/functions/db/postgres/pglite-kysely.ts","../src/functions/db/postgres/postgres-introspector.ts","../src/functions/db/postgres/postgres-migrator.ts","../src/functions/db/sqlite/seed.ts","../src/functions/db/sqlite/sqlite-introspector.ts","../src/functions/db/sqlite/sqlite-kysely.ts","../src/functions/db/sqlite/sqlite-migrator.ts","../src/functions/db/sqlite/sqlite-runtime-bun.ts","../src/functions/db/sqlite/sqlite-runtime-node.ts","../src/functions/db/sqlite/sqlite-runtime.ts","../src/functions/runtimes/fetch/index.ts","../src/functions/runtimes/nextjs/pikku-command-nextjs.ts","../src/functions/runtimes/nextjs/serialize-nextjs-backend-worker-rpc-wrapper.ts","../src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.ts","../src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.ts","../src/functions/runtimes/tanstack-start/pikku-command-tanstack-start.ts","../src/functions/runtimes/tanstack-start/serialize-tanstack-start-shim.ts","../src/functions/runtimes/websocket/pikku-command-websocket-typed.ts","../src/functions/runtimes/websocket/serialize-websocket-wrapper.ts","../src/functions/validate/workspace-validate.ts","../src/functions/wirings/ai-agent/pikku-command-ai-agent-types.ts","../src/functions/wirings/ai-agent/pikku-command-ai-agent.ts","../src/functions/wirings/ai-agent/pikku-command-public-agent.ts","../src/functions/wirings/ai-agent/serialize-agent-map.ts","../src/functions/wirings/ai-agent/serialize-ai-agent-types.ts","../src/functions/wirings/ai-agent/serialize-public-agent.ts","../src/functions/wirings/auth/pikku-command-auth.ts","../src/functions/wirings/auth/serialize-auth-gen.ts","../src/functions/wirings/auth/serialize-auth-meta.ts","../src/functions/wirings/auth/serialize-auth-types.ts","../src/functions/wirings/channels/pikku-channels.ts","../src/functions/wirings/channels/pikku-command-channel-types.ts","../src/functions/wirings/channels/pikku-command-channels-map.ts","../src/functions/wirings/channels/pikku-command-channels.ts","../src/functions/wirings/channels/serialize-channel-types.ts","../src/functions/wirings/channels/serialize-typed-channel-map.ts","../src/functions/wirings/cli/pikku-command-cli-entry.ts","../src/functions/wirings/cli/pikku-command-cli-types.ts","../src/functions/wirings/cli/pikku-command-cli.ts","../src/functions/wirings/cli/serialize-channel-cli-client.ts","../src/functions/wirings/cli/serialize-channel-cli.ts","../src/functions/wirings/cli/serialize-cli-types.ts","../src/functions/wirings/cli/serialize-local-cli-bootstrap.ts","../src/functions/wirings/console/pikku-command-console-functions.ts","../src/functions/wirings/console/pikku-command-node-types.ts","../src/functions/wirings/console/pikku-command-nodes-meta.ts","../src/functions/wirings/console/serialize-console-functions.ts","../src/functions/wirings/console/serialize-node-types.ts","../src/functions/wirings/credentials/pikku-command-credentials.ts","../src/functions/wirings/credentials/serialize-credentials-types.ts","../src/functions/wirings/emails/pikku-command-emails.ts","../src/functions/wirings/emails/serialize-emails.ts","../src/functions/wirings/functions/pikku-command-addon-types.ts","../src/functions/wirings/functions/pikku-command-function-types-split.ts","../src/functions/wirings/functions/pikku-command-function-types.ts","../src/functions/wirings/functions/pikku-command-functions.ts","../src/functions/wirings/functions/pikku-command-services.ts","../src/functions/wirings/functions/schemas.ts","../src/functions/wirings/functions/serialize-addon-refs.ts","../src/functions/wirings/functions/serialize-addon-types.ts","../src/functions/wirings/functions/serialize-function-imports.ts","../src/functions/wirings/functions/serialize-function-types.ts","../src/functions/wirings/functions/serialize-pikku-types-hub.ts","../src/functions/wirings/gateway/pikku-command-gateway.ts","../src/functions/wirings/gateway/serialize-gateway-meta.ts","../src/functions/wirings/graph/pikku-command-graph-wirings.ts","../src/functions/wirings/graph/serialize-graph-wirings.ts","../src/functions/wirings/http/pikku-command-http-map.ts","../src/functions/wirings/http/pikku-command-http-routes.ts","../src/functions/wirings/http/pikku-command-http-types.ts","../src/functions/wirings/http/pikku-command-openapi.ts","../src/functions/wirings/http/pikku-http-routes.ts","../src/functions/wirings/http/serialize-fetch-wrapper.ts","../src/functions/wirings/http/serialize-http-types.ts","../src/functions/wirings/http/serialize-typed-http-map.ts","../src/functions/wirings/mcp/pikku-command-mcp-json.ts","../src/functions/wirings/mcp/pikku-command-mcp-types.ts","../src/functions/wirings/mcp/pikku-command-mcp.ts","../src/functions/wirings/mcp/serialize-mcp-types.ts","../src/functions/wirings/middleware/pikku-command-middleware.ts","../src/functions/wirings/middleware/serialize-middleware-imports.ts","../src/functions/wirings/package/pikku-command-package-types.ts","../src/functions/wirings/package/pikku-command-package.ts","../src/functions/wirings/package/serialize-package-types.ts","../src/functions/wirings/package/serialize-package.ts","../src/functions/wirings/permissions/pikku-command-permissions.ts","../src/functions/wirings/permissions/serialize-permissions-imports.ts","../src/functions/wirings/queue/pikku-command-queue-map.ts","../src/functions/wirings/queue/pikku-command-queue-service.ts","../src/functions/wirings/queue/pikku-command-queue-types.ts","../src/functions/wirings/queue/pikku-command-queue.ts","../src/functions/wirings/queue/pikku-queue-map.ts","../src/functions/wirings/queue/pikku-queue.ts","../src/functions/wirings/queue/serialize-queue-map.ts","../src/functions/wirings/queue/serialize-queue-meta.ts","../src/functions/wirings/queue/serialize-queue-types.ts","../src/functions/wirings/queue/serialize-queue-wrapper.ts","../src/functions/wirings/realtime/pikku-command-events-scaffold.ts","../src/functions/wirings/realtime/pikku-command-realtime.ts","../src/functions/wirings/realtime/serialize-events-scaffold.ts","../src/functions/wirings/realtime/serialize-realtime-client.ts","../src/functions/wirings/rpc/pikku-command-public-rpc.ts","../src/functions/wirings/rpc/pikku-command-react-query.ts","../src/functions/wirings/rpc/pikku-command-remote-rpc.ts","../src/functions/wirings/rpc/pikku-command-rpc-client.ts","../src/functions/wirings/rpc/pikku-command-rpc-map.ts","../src/functions/wirings/rpc/pikku-command-rpc.ts","../src/functions/wirings/rpc/serialize-public-rpc.ts","../src/functions/wirings/rpc/serialize-react-query-hooks.ts","../src/functions/wirings/rpc/serialize-remote-rpc.ts","../src/functions/wirings/rpc/serialize-rpc-wrapper.ts","../src/functions/wirings/rpc/serialize-typed-rpc-map.ts","../src/functions/wirings/scenarios/pikku-command-scenario-functions.ts","../src/functions/wirings/scenarios/scenario-partition.ts","../src/functions/wirings/scenarios/serialize-feature-meta.ts","../src/functions/wirings/scenarios/serialize-scenario-functions.ts","../src/functions/wirings/scenarios/serialize-scenario-meta.ts","../src/functions/wirings/scenarios/serialize-scenario-registration.ts","../src/functions/wirings/scheduler/pikku-command-scheduler-types.ts","../src/functions/wirings/scheduler/pikku-command-scheduler.ts","../src/functions/wirings/scheduler/serialize-scheduler-meta.ts","../src/functions/wirings/scheduler/serialize-scheduler-types.ts","../src/functions/wirings/scopes/pikku-command-scopes.ts","../src/functions/wirings/scopes/serialize-scopes-types.ts","../src/functions/wirings/secrets/pikku-command-secrets.ts","../src/functions/wirings/secrets/serialize-secrets-types.ts","../src/functions/wirings/triggers/pikku-command-trigger-types.ts","../src/functions/wirings/triggers/pikku-command-trigger.ts","../src/functions/wirings/triggers/serialize-trigger-meta.ts","../src/functions/wirings/triggers/serialize-trigger-types.ts","../src/functions/wirings/user-admin/pikku-command-user-admin-functions.ts","../src/functions/wirings/user-admin/serialize-user-admin-functions.ts","../src/functions/wirings/variables/pikku-command-variables.ts","../src/functions/wirings/variables/serialize-variables-types.ts","../src/functions/wirings/webhook/pikku-command-webhook.ts","../src/functions/wirings/webhook/serialize-webhook.ts","../src/functions/wirings/workflow/pikku-command-workflow-routes.ts","../src/functions/wirings/workflow/pikku-command-workflow.ts","../src/functions/wirings/workflow/serialize-scenario-actors.ts","../src/functions/wirings/workflow/serialize-scenario-step-map.ts","../src/functions/wirings/workflow/serialize-workflow-bootstrap-map.ts","../src/functions/wirings/workflow/serialize-workflow-map.ts","../src/functions/wirings/workflow/serialize-workflow-meta.ts","../src/functions/wirings/workflow/serialize-workflow-registration.ts","../src/functions/wirings/workflow/serialize-workflow-routes.ts","../src/functions/wirings/workflow/serialize-workflow-types.ts","../src/functions/workflows/all.workflow.ts","../src/middleware/log-command-info-and-time.ts","../src/server/bun-server-runner.ts","../src/server/dev-server-runner.interface.ts","../src/server/node-server-runner.ts","../src/server/server-ready.ts","../src/server/spawn-dev-server.ts","../src/services/cli-logger-forwarder.service.ts","../src/services/cli-logger.service.ts","../src/utils/assert-single-core-version.ts","../src/utils/check-required-types.ts","../src/utils/cli-session.ts","../src/utils/command-summary.ts","../src/utils/contract-versions.ts","../src/utils/detect-better-auth.ts","../src/utils/device-auth.ts","../src/utils/file-import-path.ts","../src/utils/file-imports-serializer.ts","../src/utils/file-writer.ts","../src/utils/generate-bootstrap-file.ts","../src/utils/get-cli-version.ts","../src/utils/meta-diff.ts","../src/utils/parse-cli-filters.ts","../src/utils/pikku-cli-config.ts","../src/utils/pikku-files-and-methods.ts","../src/utils/precise-coverage-map.ts","../src/utils/remove-legacy-scaffold-file.ts","../src/utils/resolve-scenario-actors.ts","../src/utils/serialize-import-map.ts","../src/utils/serialize-meta-ts.ts","../src/utils/serialize-schemas.ts","../src/utils/strip-verbose-meta.ts","../src/utils/tsc-check.ts","../.pikku/pikku-bootstrap-scenarios.gen.ts","../.pikku/pikku-bootstrap.gen.ts","../.pikku/pikku-meta-service.gen.ts","../.pikku/pikku-services.gen.ts","../.pikku/pikku-types.gen.ts","../.pikku/agent/pikku-agent-map.gen.d.ts","../.pikku/agent/pikku-agent-types.gen.ts","../.pikku/auth/auth.types.ts","../.pikku/channel/pikku-channel-types.gen.ts","../.pikku/cli/pikku-cli-channel.ts","../.pikku/cli/pikku-cli-client.gen.ts","../.pikku/cli/pikku-cli-contracts-meta.gen.ts","../.pikku/cli/pikku-cli-types.gen.ts","../.pikku/cli/pikku-cli-wirings-meta.gen.ts","../.pikku/cli/pikku-cli-wirings.gen.ts","../.pikku/cli/pikku-cli.gen.ts","../.pikku/console/pikku-node-types.gen.ts","../.pikku/function/pikku-function-types.gen.ts","../.pikku/function/pikku-functions-meta.gen.ts","../.pikku/function/pikku-functions.gen.ts","../.pikku/http/pikku-http-types.gen.ts","../.pikku/mcp/pikku-mcp-types.gen.ts","../.pikku/node/pikku-node-types.gen.ts","../.pikku/queue/pikku-queue-types.gen.ts","../.pikku/queue/pikku-queue-workers-wirings-map.gen.d.ts","../.pikku/queue/pikku-queue-workers-wirings-meta.gen.ts","../.pikku/queue/pikku-queue-workers-wirings.gen.ts","../.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts","../.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts","../.pikku/rpc/pikku-rpc-wirings-map.remote.gen.d.ts","../.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.ts","../.pikku/scenarios/pikku-scenario-functions-meta.gen.ts","../.pikku/scenarios/pikku-scenario-functions.gen.ts","../.pikku/scenarios/pikku-scenario-wirings-meta.gen.ts","../.pikku/scenarios/pikku-scenario-wirings.gen.ts","../.pikku/scheduler/pikku-scheduler-types.gen.ts","../.pikku/schemas/register.gen.ts","../.pikku/scopes/pikku-scope-types.gen.ts","../.pikku/scopes/pikku-scopes.gen.ts","../.pikku/secrets/pikku-secret-types.gen.ts","../.pikku/secrets/pikku-secrets.gen.ts","../.pikku/trigger/pikku-trigger-types.gen.ts","../.pikku/variables/pikku-variable-types.gen.ts","../.pikku/variables/pikku-variables.gen.ts","../.pikku/workflow/pikku-scenario-actors.gen.ts","../.pikku/workflow/pikku-scenario-step-map.gen.d.ts","../.pikku/workflow/pikku-workflow-map.gen.d.ts","../.pikku/workflow/pikku-workflow-types.gen.ts","../.pikku/workflow/pikku-workflow-wirings-meta.gen.ts","../.pikku/workflow/pikku-workflow-wirings.gen.ts","../types/application-types.d.ts","../types/bun-sqlite.d.ts","../types/config.d.ts"],"version":"6.0.3"}
|
|
1
|
+
{"root":["../bin/pikku.ts","../src/cli.wiring.ts","../src/services.ts","../src/deploy/build-pipeline.ts","../src/deploy/provider-adapter.ts","../src/deploy/server-entry.ts","../src/deploy/analyzer/analyzer.ts","../src/deploy/analyzer/index.ts","../src/deploy/analyzer/manifest.ts","../src/deploy/bundler/bun-bundler.ts","../src/deploy/bundler/bundler.interface.ts","../src/deploy/bundler/bundler.ts","../src/deploy/bundler/dep-extractor.ts","../src/deploy/bundler/index.ts","../src/deploy/bundler/node-bundler.ts","../src/deploy/bundler/types.ts","../src/deploy/codegen/index.ts","../src/deploy/codegen/per-unit-codegen.ts","../src/deploy/plan/executor.ts","../src/deploy/plan/formatter.ts","../src/deploy/plan/index.ts","../src/deploy/plan/planner.ts","../src/deploy/plan/provider.ts","../src/deploy/plan/types.ts","../src/fabric/fabric-commands.ts","../src/fabric/functions/add.function.ts","../src/fabric/functions/addon-verify.function.ts","../src/fabric/functions/db-schema.function.ts","../src/fabric/functions/deploy-list.function.ts","../src/fabric/functions/deploy-units.function.ts","../src/fabric/functions/deploy.function.ts","../src/fabric/functions/domains-add.function.ts","../src/fabric/functions/domains-list.function.ts","../src/fabric/functions/domains-remove.function.ts","../src/fabric/functions/errors.function.ts","../src/fabric/functions/init.function.ts","../src/fabric/functions/link.function.ts","../src/fabric/functions/llm-key.function.ts","../src/fabric/functions/login.function.ts","../src/fabric/functions/logs.function.ts","../src/fabric/functions/metrics.function.ts","../src/fabric/functions/publish.function.ts","../src/fabric/functions/rollback.function.ts","../src/fabric/functions/secrets-list.function.ts","../src/fabric/functions/secrets-rotate.function.ts","../src/fabric/functions/secrets-set.function.ts","../src/fabric/functions/smoke.function.ts","../src/fabric/functions/status.function.ts","../src/fabric/functions/trace.function.ts","../src/fabric/functions/validate.function.ts","../src/fabric/lib/config.ts","../src/fabric/lib/console-url.ts","../src/fabric/lib/frontend-typecheck.ts","../src/fabric/lib/git.ts","../src/fabric/lib/http.ts","../src/fabric/lib/not-implemented.ts","../src/fabric/lib/output.ts","../src/fabric/lib/prompt.ts","../src/fabric/lib/sealed-box.ts","../src/fabric/lib/stage.ts","../src/fabric/sdk/http-map.gen.d.ts","../src/fabric/sdk/pikku-fetch.gen.ts","../src/fabric/sdk/pikku-rpc.gen.ts","../src/fabric/sdk/rpc-map.gen.d.ts","../src/functions/commands/all.ts","../src/functions/commands/audit.ts","../src/functions/commands/binary.ts","../src/functions/commands/bootstrap.ts","../src/functions/commands/bun-coverage-loader.ts","../src/functions/commands/db-audit.ts","../src/functions/commands/db-baseline.ts","../src/functions/commands/db-check.ts","../src/functions/commands/db-codegen.ts","../src/functions/commands/db-export.ts","../src/functions/commands/db-generate.ts","../src/functions/commands/db-migrate.ts","../src/functions/commands/db-reset.ts","../src/functions/commands/db-seed.ts","../src/functions/commands/db-shared.ts","../src/functions/commands/deploy-apply.ts","../src/functions/commands/deploy-info.ts","../src/functions/commands/deploy-plan.ts","../src/functions/commands/dev-ai-runner.ts","../src/functions/commands/dev.ts","../src/functions/commands/emails-init.ts","../src/functions/commands/enable.ts","../src/functions/commands/import-n8n.ts","../src/functions/commands/info.ts","../src/functions/commands/knowledge-index.ts","../src/functions/commands/knowledge-validate.ts","../src/functions/commands/load-user-project.ts","../src/functions/commands/login.ts","../src/functions/commands/meta.ts","../src/functions/commands/new-addon.ts","../src/functions/commands/new-function.ts","../src/functions/commands/new-middleware.ts","../src/functions/commands/new-permission.ts","../src/functions/commands/new-wiring.ts","../src/functions/commands/pikku-command-bootstrap.ts","../src/functions/commands/pikku-command-summary.ts","../src/functions/commands/scenario-browser.ts","../src/functions/commands/scenario-environment.ts","../src/functions/commands/scenario-formatter.ts","../src/functions/commands/scenario-ladder.ts","../src/functions/commands/scenario-plan.ts","../src/functions/commands/scenario.ts","../src/functions/commands/scopes-audit.ts","../src/functions/commands/scopes-prune.ts","../src/functions/commands/scopes-shared.ts","../src/functions/commands/serve-console.ts","../src/functions/commands/serve.ts","../src/functions/commands/skills.ts","../src/functions/commands/start-coverage.ts","../src/functions/commands/versions-check.ts","../src/functions/commands/versions-init.ts","../src/functions/commands/versions-update.ts","../src/functions/commands/watch.ts","../src/functions/commands/workspace-validate.ts","../src/functions/db/annotation-parser.ts","../src/functions/db/better-auth-schema.ts","../src/functions/db/coercion-plugin.ts","../src/functions/db/db-codegen.ts","../src/functions/db/db-introspector.ts","../src/functions/db/db-migrator.ts","../src/functions/db/local-db.ts","../src/functions/db/migration-identifiers.ts","../src/functions/db/migration-provenance.ts","../src/functions/db/schema-sql.ts","../src/functions/db/zod-codegen.ts","../src/functions/db/postgres/pglite-kysely.ts","../src/functions/db/postgres/postgres-introspector.ts","../src/functions/db/postgres/postgres-migrator.ts","../src/functions/db/sqlite/seed.ts","../src/functions/db/sqlite/sqlite-introspector.ts","../src/functions/db/sqlite/sqlite-kysely.ts","../src/functions/db/sqlite/sqlite-migrator.ts","../src/functions/db/sqlite/sqlite-runtime-bun.ts","../src/functions/db/sqlite/sqlite-runtime-node.ts","../src/functions/db/sqlite/sqlite-runtime.ts","../src/functions/knowledge/render.ts","../src/functions/knowledge/schemas.ts","../src/functions/runtimes/fetch/index.ts","../src/functions/runtimes/nextjs/pikku-command-nextjs.ts","../src/functions/runtimes/nextjs/serialize-nextjs-backend-worker-rpc-wrapper.ts","../src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.ts","../src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.ts","../src/functions/runtimes/tanstack-start/pikku-command-tanstack-start.ts","../src/functions/runtimes/tanstack-start/serialize-tanstack-start-shim.ts","../src/functions/runtimes/websocket/pikku-command-websocket-typed.ts","../src/functions/runtimes/websocket/serialize-websocket-wrapper.ts","../src/functions/validate/workspace-validate.ts","../src/functions/wirings/ai-agent/pikku-command-ai-agent-types.ts","../src/functions/wirings/ai-agent/pikku-command-ai-agent.ts","../src/functions/wirings/ai-agent/pikku-command-public-agent.ts","../src/functions/wirings/ai-agent/serialize-agent-map.ts","../src/functions/wirings/ai-agent/serialize-ai-agent-types.ts","../src/functions/wirings/ai-agent/serialize-public-agent.ts","../src/functions/wirings/auth/pikku-command-auth.ts","../src/functions/wirings/auth/serialize-auth-gen.ts","../src/functions/wirings/auth/serialize-auth-meta.ts","../src/functions/wirings/auth/serialize-auth-types.ts","../src/functions/wirings/channels/pikku-channels.ts","../src/functions/wirings/channels/pikku-command-channel-types.ts","../src/functions/wirings/channels/pikku-command-channels-map.ts","../src/functions/wirings/channels/pikku-command-channels.ts","../src/functions/wirings/channels/serialize-channel-types.ts","../src/functions/wirings/channels/serialize-typed-channel-map.ts","../src/functions/wirings/cli/pikku-command-cli-entry.ts","../src/functions/wirings/cli/pikku-command-cli-types.ts","../src/functions/wirings/cli/pikku-command-cli.ts","../src/functions/wirings/cli/serialize-channel-cli-client.ts","../src/functions/wirings/cli/serialize-channel-cli.ts","../src/functions/wirings/cli/serialize-cli-types.ts","../src/functions/wirings/cli/serialize-local-cli-bootstrap.ts","../src/functions/wirings/console/pikku-command-console-functions.ts","../src/functions/wirings/console/pikku-command-node-types.ts","../src/functions/wirings/console/pikku-command-nodes-meta.ts","../src/functions/wirings/console/serialize-console-functions.ts","../src/functions/wirings/console/serialize-node-types.ts","../src/functions/wirings/credentials/pikku-command-credentials.ts","../src/functions/wirings/credentials/serialize-credentials-types.ts","../src/functions/wirings/emails/pikku-command-emails.ts","../src/functions/wirings/emails/serialize-emails.ts","../src/functions/wirings/functions/pikku-command-addon-types.ts","../src/functions/wirings/functions/pikku-command-function-types-split.ts","../src/functions/wirings/functions/pikku-command-function-types.ts","../src/functions/wirings/functions/pikku-command-functions.ts","../src/functions/wirings/functions/pikku-command-services.ts","../src/functions/wirings/functions/schemas.ts","../src/functions/wirings/functions/serialize-addon-refs.ts","../src/functions/wirings/functions/serialize-addon-types.ts","../src/functions/wirings/functions/serialize-function-imports.ts","../src/functions/wirings/functions/serialize-function-types.ts","../src/functions/wirings/functions/serialize-pikku-types-hub.ts","../src/functions/wirings/gateway/pikku-command-gateway.ts","../src/functions/wirings/gateway/serialize-gateway-meta.ts","../src/functions/wirings/graph/pikku-command-graph-wirings.ts","../src/functions/wirings/graph/serialize-graph-wirings.ts","../src/functions/wirings/http/pikku-command-http-map.ts","../src/functions/wirings/http/pikku-command-http-routes.ts","../src/functions/wirings/http/pikku-command-http-types.ts","../src/functions/wirings/http/pikku-command-openapi.ts","../src/functions/wirings/http/pikku-http-routes.ts","../src/functions/wirings/http/serialize-fetch-wrapper.ts","../src/functions/wirings/http/serialize-http-types.ts","../src/functions/wirings/http/serialize-typed-http-map.ts","../src/functions/wirings/mcp/pikku-command-mcp-json.ts","../src/functions/wirings/mcp/pikku-command-mcp-types.ts","../src/functions/wirings/mcp/pikku-command-mcp.ts","../src/functions/wirings/mcp/serialize-mcp-types.ts","../src/functions/wirings/middleware/pikku-command-middleware.ts","../src/functions/wirings/middleware/serialize-middleware-imports.ts","../src/functions/wirings/package/pikku-command-package-types.ts","../src/functions/wirings/package/pikku-command-package.ts","../src/functions/wirings/package/serialize-package-types.ts","../src/functions/wirings/package/serialize-package.ts","../src/functions/wirings/permissions/pikku-command-permissions.ts","../src/functions/wirings/permissions/serialize-permissions-imports.ts","../src/functions/wirings/queue/pikku-command-queue-map.ts","../src/functions/wirings/queue/pikku-command-queue-service.ts","../src/functions/wirings/queue/pikku-command-queue-types.ts","../src/functions/wirings/queue/pikku-command-queue.ts","../src/functions/wirings/queue/pikku-queue-map.ts","../src/functions/wirings/queue/pikku-queue.ts","../src/functions/wirings/queue/serialize-queue-map.ts","../src/functions/wirings/queue/serialize-queue-meta.ts","../src/functions/wirings/queue/serialize-queue-types.ts","../src/functions/wirings/queue/serialize-queue-wrapper.ts","../src/functions/wirings/realtime/pikku-command-events-scaffold.ts","../src/functions/wirings/realtime/pikku-command-realtime.ts","../src/functions/wirings/realtime/serialize-events-scaffold.ts","../src/functions/wirings/realtime/serialize-realtime-client.ts","../src/functions/wirings/rpc/pikku-command-public-rpc.ts","../src/functions/wirings/rpc/pikku-command-react-query.ts","../src/functions/wirings/rpc/pikku-command-remote-rpc.ts","../src/functions/wirings/rpc/pikku-command-rpc-client.ts","../src/functions/wirings/rpc/pikku-command-rpc-map.ts","../src/functions/wirings/rpc/pikku-command-rpc.ts","../src/functions/wirings/rpc/serialize-public-rpc.ts","../src/functions/wirings/rpc/serialize-react-query-hooks.ts","../src/functions/wirings/rpc/serialize-remote-rpc.ts","../src/functions/wirings/rpc/serialize-rpc-wrapper.ts","../src/functions/wirings/rpc/serialize-typed-rpc-map.ts","../src/functions/wirings/scenarios/register-scenario-instrumentation.ts","../src/functions/wirings/scenarios/scenario-partition.ts","../src/functions/wirings/scenarios/scenario-schema-partition.ts","../src/functions/wirings/scenarios/serialize-feature-meta.ts","../src/functions/wirings/scenarios/serialize-scenario-meta.ts","../src/functions/wirings/scenarios/serialize-scenario-registration.ts","../src/functions/wirings/scheduler/pikku-command-scheduler-types.ts","../src/functions/wirings/scheduler/pikku-command-scheduler.ts","../src/functions/wirings/scheduler/serialize-scheduler-meta.ts","../src/functions/wirings/scheduler/serialize-scheduler-types.ts","../src/functions/wirings/scopes/pikku-command-scopes.ts","../src/functions/wirings/scopes/serialize-scopes-types.ts","../src/functions/wirings/secrets/pikku-command-secrets.ts","../src/functions/wirings/secrets/serialize-secrets-types.ts","../src/functions/wirings/triggers/pikku-command-trigger-types.ts","../src/functions/wirings/triggers/pikku-command-trigger.ts","../src/functions/wirings/triggers/serialize-trigger-meta.ts","../src/functions/wirings/triggers/serialize-trigger-types.ts","../src/functions/wirings/user-admin/pikku-command-user-admin-functions.ts","../src/functions/wirings/user-admin/serialize-user-admin-functions.ts","../src/functions/wirings/variables/pikku-command-variables.ts","../src/functions/wirings/variables/serialize-variables-types.ts","../src/functions/wirings/webhook/pikku-command-webhook.ts","../src/functions/wirings/webhook/serialize-webhook.ts","../src/functions/wirings/workflow/pikku-command-workflow-routes.ts","../src/functions/wirings/workflow/pikku-command-workflow.ts","../src/functions/wirings/workflow/serialize-scenario-actors.ts","../src/functions/wirings/workflow/serialize-scenario-step-map.ts","../src/functions/wirings/workflow/serialize-workflow-bootstrap-map.ts","../src/functions/wirings/workflow/serialize-workflow-map.ts","../src/functions/wirings/workflow/serialize-workflow-meta.ts","../src/functions/wirings/workflow/serialize-workflow-registration.ts","../src/functions/wirings/workflow/serialize-workflow-routes.ts","../src/functions/wirings/workflow/serialize-workflow-types.ts","../src/functions/workflows/all.workflow.ts","../src/middleware/log-command-info-and-time.ts","../src/server/bun-server-runner.ts","../src/server/dev-server-runner.interface.ts","../src/server/node-server-runner.ts","../src/server/server-ready.ts","../src/server/spawn-dev-server.ts","../src/services/cli-logger-forwarder.service.ts","../src/services/cli-logger.service.ts","../src/utils/assert-single-core-version.ts","../src/utils/check-required-types.ts","../src/utils/cli-session.ts","../src/utils/command-summary.ts","../src/utils/contract-versions.ts","../src/utils/detect-better-auth.ts","../src/utils/device-auth.ts","../src/utils/file-import-path.ts","../src/utils/file-imports-serializer.ts","../src/utils/file-writer.ts","../src/utils/generate-bootstrap-file.ts","../src/utils/get-cli-version.ts","../src/utils/meta-diff.ts","../src/utils/parse-cli-filters.ts","../src/utils/pikku-cli-config.ts","../src/utils/pikku-files-and-methods.ts","../src/utils/precise-coverage-map.ts","../src/utils/remove-legacy-scaffold-file.ts","../src/utils/resolve-scenario-actors.ts","../src/utils/serialize-import-map.ts","../src/utils/serialize-meta-ts.ts","../src/utils/serialize-schemas.ts","../src/utils/strip-verbose-meta.ts","../src/utils/tsc-check.ts","../.pikku/pikku-bootstrap-scenarios.gen.ts","../.pikku/pikku-bootstrap.gen.ts","../.pikku/pikku-meta-service.gen.ts","../.pikku/pikku-services.gen.ts","../.pikku/pikku-types.gen.ts","../.pikku/agent/pikku-agent-map.gen.d.ts","../.pikku/agent/pikku-agent-types.gen.ts","../.pikku/auth/auth.types.ts","../.pikku/channel/pikku-channel-types.gen.ts","../.pikku/cli/pikku-cli-channel.ts","../.pikku/cli/pikku-cli-client.gen.ts","../.pikku/cli/pikku-cli-contracts-meta.gen.ts","../.pikku/cli/pikku-cli-types.gen.ts","../.pikku/cli/pikku-cli-wirings-meta.gen.ts","../.pikku/cli/pikku-cli-wirings.gen.ts","../.pikku/cli/pikku-cli.gen.ts","../.pikku/console/pikku-node-types.gen.ts","../.pikku/function/pikku-function-types.gen.ts","../.pikku/function/pikku-functions-meta.gen.ts","../.pikku/function/pikku-functions.gen.ts","../.pikku/http/pikku-http-types.gen.ts","../.pikku/mcp/pikku-mcp-types.gen.ts","../.pikku/node/pikku-node-types.gen.ts","../.pikku/queue/pikku-queue-types.gen.ts","../.pikku/queue/pikku-queue-workers-wirings-map.gen.d.ts","../.pikku/queue/pikku-queue-workers-wirings-meta.gen.ts","../.pikku/queue/pikku-queue-workers-wirings.gen.ts","../.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts","../.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts","../.pikku/rpc/pikku-rpc-wirings-map.remote.gen.d.ts","../.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.ts","../.pikku/scenarios/pikku-scenario-functions-meta.gen.ts","../.pikku/scenarios/pikku-scenario-functions.gen.ts","../.pikku/scenarios/pikku-scenario-wirings-meta.gen.ts","../.pikku/scenarios/pikku-scenario-wirings.gen.ts","../.pikku/scenarios/schemas/register.gen.ts","../.pikku/scheduler/pikku-scheduler-types.gen.ts","../.pikku/schemas/register.gen.ts","../.pikku/scopes/pikku-scope-types.gen.ts","../.pikku/scopes/pikku-scopes.gen.ts","../.pikku/secrets/pikku-secret-types.gen.ts","../.pikku/secrets/pikku-secrets.gen.ts","../.pikku/trigger/pikku-trigger-types.gen.ts","../.pikku/variables/pikku-variable-types.gen.ts","../.pikku/variables/pikku-variables.gen.ts","../.pikku/workflow/pikku-scenario-actors.gen.ts","../.pikku/workflow/pikku-scenario-step-map.gen.d.ts","../.pikku/workflow/pikku-workflow-map.gen.d.ts","../.pikku/workflow/pikku-workflow-types.gen.ts","../.pikku/workflow/pikku-workflow-wirings-meta.gen.ts","../.pikku/workflow/pikku-workflow-wirings.gen.ts","../types/application-types.d.ts","../types/bun-sqlite.d.ts","../types/config.d.ts"],"version":"6.0.3"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pikku/cli",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.93",
|
|
4
4
|
"description": "Pikku CLI — code generation, dev server, migrations and deployment",
|
|
5
5
|
"author": "yasser.fadl@gmail.com",
|
|
6
6
|
"license": "BUSL-1.1",
|
|
@@ -31,15 +31,17 @@
|
|
|
31
31
|
"@openapi-contrib/json-schema-to-openapi-schema": "^4.3.1",
|
|
32
32
|
"@pikku/better-auth": "^0.12.19",
|
|
33
33
|
"@pikku/bun-server": "^0.12.4",
|
|
34
|
-
"@pikku/deploy-cloudflare": "^0.12.
|
|
34
|
+
"@pikku/deploy-cloudflare": "^0.12.9",
|
|
35
35
|
"@pikku/fetch": "^0.12.8",
|
|
36
|
-
"@pikku/inspector": "^0.12.
|
|
37
|
-
"@pikku/
|
|
36
|
+
"@pikku/inspector": "^0.12.50",
|
|
37
|
+
"@pikku/knowledge": "^0.12.1",
|
|
38
|
+
"@pikku/kysely": "^0.13.6",
|
|
38
39
|
"@pikku/kysely-node-sqlite": "^0.12.3",
|
|
39
40
|
"@pikku/n8n-import": "^0.0.3",
|
|
40
41
|
"@pikku/node-http-server": "^0.12.6",
|
|
41
42
|
"@pikku/openapi-parser": "^0.12.16",
|
|
42
43
|
"@pikku/schedule": "^0.12.4",
|
|
44
|
+
"@pikku/skills": "^0.12.2",
|
|
43
45
|
"@pikku/ws": "^0.12.4",
|
|
44
46
|
"@types/cookie": "^1.0.0",
|
|
45
47
|
"@types/json-schema": "^7.0.15",
|
|
@@ -61,12 +63,12 @@
|
|
|
61
63
|
"zod-to-ts": "^2.1.0"
|
|
62
64
|
},
|
|
63
65
|
"peerDependencies": {
|
|
64
|
-
"@pikku/core": "^0.12.
|
|
65
|
-
"@pikku/playwright": "^0.12.
|
|
66
|
+
"@pikku/core": "^0.12.72",
|
|
67
|
+
"@pikku/playwright": "^0.12.71"
|
|
66
68
|
},
|
|
67
69
|
"devDependencies": {
|
|
68
|
-
"@pikku/core": "^0.12.
|
|
69
|
-
"@pikku/playwright": "^0.12.
|
|
70
|
+
"@pikku/core": "^0.12.72",
|
|
71
|
+
"@pikku/playwright": "^0.12.71",
|
|
70
72
|
"@types/istanbul-lib-instrument": "^1.7.7",
|
|
71
73
|
"@types/node": "^24.11.0",
|
|
72
74
|
"@types/pg": "^8.11.0",
|
|
@@ -75,7 +77,6 @@
|
|
|
75
77
|
"files": [
|
|
76
78
|
"dist",
|
|
77
79
|
"console-app",
|
|
78
|
-
"skills",
|
|
79
80
|
"cli.schema.json"
|
|
80
81
|
],
|
|
81
82
|
"engines": {
|