skuba 12.0.0-enable-js-extensions-20250704134302 → 12.0.0-enable-js-extensions-20250711054343
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/lib/cli/configure/ensureTemplateCompletion.js +4 -2
- package/lib/cli/configure/ensureTemplateCompletion.js.map +2 -2
- package/lib/cli/init/getConfig.d.ts +6 -7
- package/lib/cli/init/types.d.ts +13 -109
- package/lib/cli/init/types.js +30 -20
- package/lib/cli/init/types.js.map +2 -2
- package/lib/cli/lint/internalLints/patchRenovateConfig.js +3 -3
- package/lib/cli/lint/internalLints/patchRenovateConfig.js.map +2 -2
- package/lib/cli/migrate/nodeVersion/checks.d.ts +3 -3
- package/lib/cli/migrate/nodeVersion/checks.js +11 -11
- package/lib/cli/migrate/nodeVersion/checks.js.map +2 -2
- package/lib/utils/error.d.ts +3 -23
- package/lib/utils/error.js +18 -8
- package/lib/utils/error.js.map +2 -2
- package/lib/utils/manifest.d.ts +2 -2
- package/lib/utils/manifest.js +4 -4
- package/lib/utils/manifest.js.map +2 -2
- package/lib/utils/packageManager.d.ts +5 -2
- package/lib/utils/packageManager.js +2 -2
- package/lib/utils/packageManager.js.map +2 -2
- package/lib/utils/template.d.ts +9 -38
- package/lib/utils/template.js +22 -10
- package/lib/utils/template.js.map +2 -2
- package/lib/utils/version.d.ts +2 -10
- package/lib/utils/version.js +9 -9
- package/lib/utils/version.js.map +2 -2
- package/package.json +2 -2
- package/template/greeter/package.json +1 -1
- package/template/koa-rest-api/src/framework/validation.ts +9 -8
- package/template/koa-rest-api/src/testing/types.ts +1 -1
- package/template/koa-rest-api/src/types/jobs.ts +1 -1
- package/template/lambda-sqs-worker-cdk/infra/appStack.test.ts +1 -1
- package/template/lambda-sqs-worker-cdk/package.json +1 -1
- package/template/lambda-sqs-worker-cdk/src/framework/validation.ts +4 -4
- package/template/lambda-sqs-worker-cdk/src/testing/types.ts +1 -1
- package/template/lambda-sqs-worker-cdk/src/types/jobScorer.ts +1 -1
- package/template/lambda-sqs-worker-cdk/src/types/pipelineEvents.ts +1 -1
|
@@ -34,14 +34,16 @@ module.exports = __toCommonJS(ensureTemplateCompletion_exports);
|
|
|
34
34
|
var import_path = __toESM(require("path"));
|
|
35
35
|
var import_chalk = __toESM(require("chalk"));
|
|
36
36
|
var import_fs_extra = __toESM(require("fs-extra"));
|
|
37
|
-
var
|
|
37
|
+
var z = __toESM(require("zod/v4"));
|
|
38
38
|
var import_copy = require("../../utils/copy.js");
|
|
39
39
|
var import_logging = require("../../utils/logging.js");
|
|
40
40
|
var import_template = require("../../utils/template.js");
|
|
41
41
|
var import_validation = require("../../utils/validation.js");
|
|
42
42
|
var import_getConfig = require("../init/getConfig.js");
|
|
43
43
|
var import_package = require("./processing/package.js");
|
|
44
|
-
const templateDataSchema =
|
|
44
|
+
const templateDataSchema = z.object({
|
|
45
|
+
templateData: z.record(z.string(), z.string())
|
|
46
|
+
});
|
|
45
47
|
const getTemplateDataFromStdIn = async (templateConfig) => {
|
|
46
48
|
const config = await (0, import_getConfig.readJSONFromStdIn)();
|
|
47
49
|
const data = templateDataSchema.parse(config);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/cli/configure/ensureTemplateCompletion.ts"],
|
|
4
|
-
"sourcesContent": ["import path from 'path';\n\nimport chalk from 'chalk';\nimport fs from 'fs-extra';\nimport type { NormalizedReadResult } from 'read-pkg-up';\nimport
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AAEjB,mBAAkB;AAClB,sBAAe;AAEf,
|
|
4
|
+
"sourcesContent": ["import path from 'path';\n\nimport chalk from 'chalk';\nimport fs from 'fs-extra';\nimport type { NormalizedReadResult } from 'read-pkg-up';\nimport * as z from 'zod/v4';\n\nimport { copyFiles, createEjsRenderer } from '../../utils/copy.js';\nimport { log } from '../../utils/logging.js';\nimport {\n type TemplateConfig,\n ensureTemplateConfigDeletion,\n} from '../../utils/template.js';\nimport { hasStringProp } from '../../utils/validation.js';\nimport {\n getTemplateConfig,\n readJSONFromStdIn,\n runForm,\n} from '../init/getConfig.js';\n\nimport { formatPackage } from './processing/package.js';\n\ninterface Props {\n destinationRoot: string;\n include: (pathname: string) => boolean;\n manifest: NormalizedReadResult;\n}\n\nconst templateDataSchema = z.object({\n templateData: z.record(z.string(), z.string()),\n});\n\nconst getTemplateDataFromStdIn = async (\n templateConfig: TemplateConfig,\n): Promise<Record<string, string>> => {\n const config = await readJSONFromStdIn();\n const data = templateDataSchema.parse(config);\n\n templateConfig.fields.forEach((field) => {\n const value = data.templateData[field.name];\n if (value === undefined) {\n throw new Error(`Missing field: ${field.name}`);\n }\n\n if (field.validate && !field.validate(value)) {\n throw new Error(`Invalid value for field: ${field.name}`);\n }\n });\n\n return data.templateData;\n};\n\nexport const ensureTemplateCompletion = async ({\n destinationRoot,\n include,\n manifest,\n}: Props): Promise<TemplateConfig> => {\n const templateConfig = getTemplateConfig(destinationRoot);\n\n if (templateConfig.fields.length === 0) {\n return templateConfig;\n }\n\n const templateName = hasStringProp(manifest.packageJson.skuba, 'template')\n ? manifest.packageJson.skuba.template\n : 'template';\n\n log.newline();\n const templateData = process.stdin.isTTY\n ? await runForm({\n choices: templateConfig.fields,\n message: chalk.bold(`Complete ${chalk.cyan(templateName)}:`),\n name: 'customAnswers',\n })\n : await getTemplateDataFromStdIn(templateConfig);\n\n const updatedPackageJson = await formatPackage(manifest.packageJson);\n const packageJsonFilepath = path.join(destinationRoot, 'package.json');\n await fs.promises.writeFile(packageJsonFilepath, updatedPackageJson);\n\n await copyFiles({\n sourceRoot: destinationRoot,\n destinationRoot,\n include,\n processors: [createEjsRenderer(templateData)],\n });\n\n await ensureTemplateConfigDeletion(destinationRoot);\n\n log.newline();\n log.ok('Templating complete!');\n\n return templateConfig;\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AAEjB,mBAAkB;AAClB,sBAAe;AAEf,QAAmB;AAEnB,kBAA6C;AAC7C,qBAAoB;AACpB,sBAGO;AACP,wBAA8B;AAC9B,uBAIO;AAEP,qBAA8B;AAQ9B,MAAM,qBAAqB,EAAE,OAAO;AAAA,EAClC,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC;AAC/C,CAAC;AAED,MAAM,2BAA2B,OAC/B,mBACoC;AACpC,QAAM,SAAS,UAAM,oCAAkB;AACvC,QAAM,OAAO,mBAAmB,MAAM,MAAM;AAE5C,iBAAe,OAAO,QAAQ,CAAC,UAAU;AACvC,UAAM,QAAQ,KAAK,aAAa,MAAM,IAAI;AAC1C,QAAI,UAAU,QAAW;AACvB,YAAM,IAAI,MAAM,kBAAkB,MAAM,IAAI,EAAE;AAAA,IAChD;AAEA,QAAI,MAAM,YAAY,CAAC,MAAM,SAAS,KAAK,GAAG;AAC5C,YAAM,IAAI,MAAM,4BAA4B,MAAM,IAAI,EAAE;AAAA,IAC1D;AAAA,EACF,CAAC;AAED,SAAO,KAAK;AACd;AAEO,MAAM,2BAA2B,OAAO;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AACF,MAAsC;AACpC,QAAM,qBAAiB,oCAAkB,eAAe;AAExD,MAAI,eAAe,OAAO,WAAW,GAAG;AACtC,WAAO;AAAA,EACT;AAEA,QAAM,mBAAe,iCAAc,SAAS,YAAY,OAAO,UAAU,IACrE,SAAS,YAAY,MAAM,WAC3B;AAEJ,qBAAI,QAAQ;AACZ,QAAM,eAAe,QAAQ,MAAM,QAC/B,UAAM,0BAAQ;AAAA,IACZ,SAAS,eAAe;AAAA,IACxB,SAAS,aAAAA,QAAM,KAAK,YAAY,aAAAA,QAAM,KAAK,YAAY,CAAC,GAAG;AAAA,IAC3D,MAAM;AAAA,EACR,CAAC,IACD,MAAM,yBAAyB,cAAc;AAEjD,QAAM,qBAAqB,UAAM,8BAAc,SAAS,WAAW;AACnE,QAAM,sBAAsB,YAAAC,QAAK,KAAK,iBAAiB,cAAc;AACrE,QAAM,gBAAAC,QAAG,SAAS,UAAU,qBAAqB,kBAAkB;AAEnE,YAAM,uBAAU;AAAA,IACd,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA,YAAY,KAAC,+BAAkB,YAAY,CAAC;AAAA,EAC9C,CAAC;AAED,YAAM,8CAA6B,eAAe;AAElD,qBAAI,QAAQ;AACZ,qBAAI,GAAG,sBAAsB;AAE7B,SAAO;AACT;",
|
|
6
6
|
"names": ["chalk", "path", "fs"]
|
|
7
7
|
}
|
|
@@ -10,20 +10,19 @@ export declare const getTemplateConfig: (dir: string) => TemplateConfig;
|
|
|
10
10
|
export declare const configureFromPrompt: () => Promise<InitConfig>;
|
|
11
11
|
export declare const readJSONFromStdIn: () => Promise<unknown>;
|
|
12
12
|
export declare const getConfig: () => Promise<{
|
|
13
|
-
packageManager: "pnpm" | "yarn";
|
|
14
13
|
templateName: string;
|
|
15
14
|
destinationDir: string;
|
|
16
15
|
templateComplete: boolean;
|
|
17
16
|
templateData: {
|
|
18
|
-
|
|
17
|
+
[x: string]: string;
|
|
18
|
+
ownerName: string;
|
|
19
|
+
repoName: string;
|
|
19
20
|
defaultBranch: string;
|
|
20
21
|
orgName: string;
|
|
21
|
-
repoName: string;
|
|
22
|
-
ownerName: string;
|
|
23
22
|
teamName: string;
|
|
24
|
-
|
|
25
|
-
[k: string]: string;
|
|
23
|
+
port: string;
|
|
26
24
|
};
|
|
27
|
-
|
|
25
|
+
packageManager: "pnpm" | "yarn";
|
|
28
26
|
entryPoint?: string | undefined;
|
|
27
|
+
type?: "package" | "application" | undefined;
|
|
29
28
|
}>;
|
package/lib/cli/init/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as z from 'zod/v4';
|
|
2
2
|
export interface Input {
|
|
3
3
|
/**
|
|
4
4
|
* Whether to enable verbose debug logging.
|
|
@@ -14,125 +14,29 @@ export declare const initConfigInputSchema: z.ZodObject<{
|
|
|
14
14
|
templateData: z.ZodObject<{
|
|
15
15
|
ownerName: z.ZodString;
|
|
16
16
|
repoName: z.ZodString;
|
|
17
|
-
platformName: z.ZodUnion<[z.ZodLiteral<"amd64">, z.ZodLiteral<"arm64">]>;
|
|
17
|
+
platformName: z.ZodUnion<readonly [z.ZodLiteral<"amd64">, z.ZodLiteral<"arm64">]>;
|
|
18
18
|
defaultBranch: z.ZodString;
|
|
19
|
-
},
|
|
20
|
-
ownerName: z.ZodString;
|
|
21
|
-
repoName: z.ZodString;
|
|
22
|
-
platformName: z.ZodUnion<[z.ZodLiteral<"amd64">, z.ZodLiteral<"arm64">]>;
|
|
23
|
-
defaultBranch: z.ZodString;
|
|
24
|
-
}, z.ZodString, "strip">, z.objectInputType<{
|
|
25
|
-
ownerName: z.ZodString;
|
|
26
|
-
repoName: z.ZodString;
|
|
27
|
-
platformName: z.ZodUnion<[z.ZodLiteral<"amd64">, z.ZodLiteral<"arm64">]>;
|
|
28
|
-
defaultBranch: z.ZodString;
|
|
29
|
-
}, z.ZodString, "strip">>;
|
|
19
|
+
}, z.core.$catchall<z.ZodString>>;
|
|
30
20
|
templateName: z.ZodString;
|
|
31
|
-
},
|
|
32
|
-
templateName: string;
|
|
33
|
-
destinationDir: string;
|
|
34
|
-
templateComplete: boolean;
|
|
35
|
-
templateData: {
|
|
36
|
-
defaultBranch: string;
|
|
37
|
-
repoName: string;
|
|
38
|
-
ownerName: string;
|
|
39
|
-
platformName: "arm64" | "amd64";
|
|
40
|
-
} & {
|
|
41
|
-
[k: string]: string;
|
|
42
|
-
};
|
|
43
|
-
}, {
|
|
44
|
-
templateName: string;
|
|
45
|
-
destinationDir: string;
|
|
46
|
-
templateComplete: boolean;
|
|
47
|
-
templateData: {
|
|
48
|
-
defaultBranch: string;
|
|
49
|
-
repoName: string;
|
|
50
|
-
ownerName: string;
|
|
51
|
-
platformName: "arm64" | "amd64";
|
|
52
|
-
} & {
|
|
53
|
-
[k: string]: string;
|
|
54
|
-
};
|
|
55
|
-
}>;
|
|
21
|
+
}, z.core.$strip>;
|
|
56
22
|
export type InitConfig = z.infer<typeof initConfigSchema>;
|
|
57
|
-
declare const initConfigSchema: z.ZodObject<
|
|
23
|
+
declare const initConfigSchema: z.ZodObject<{
|
|
24
|
+
templateName: z.ZodString;
|
|
58
25
|
destinationDir: z.ZodString;
|
|
59
26
|
templateComplete: z.ZodBoolean;
|
|
60
27
|
templateData: z.ZodObject<{
|
|
61
|
-
ownerName: z.ZodString;
|
|
62
|
-
repoName: z.ZodString;
|
|
63
|
-
platformName: z.ZodUnion<[z.ZodLiteral<"amd64">, z.ZodLiteral<"arm64">]>;
|
|
64
|
-
defaultBranch: z.ZodString;
|
|
65
|
-
}, "strip", z.ZodString, z.objectOutputType<{
|
|
66
|
-
ownerName: z.ZodString;
|
|
67
|
-
repoName: z.ZodString;
|
|
68
|
-
platformName: z.ZodUnion<[z.ZodLiteral<"amd64">, z.ZodLiteral<"arm64">]>;
|
|
69
|
-
defaultBranch: z.ZodString;
|
|
70
|
-
}, z.ZodString, "strip">, z.objectInputType<{
|
|
71
|
-
ownerName: z.ZodString;
|
|
72
|
-
repoName: z.ZodString;
|
|
73
|
-
platformName: z.ZodUnion<[z.ZodLiteral<"amd64">, z.ZodLiteral<"arm64">]>;
|
|
74
|
-
defaultBranch: z.ZodString;
|
|
75
|
-
}, z.ZodString, "strip">>;
|
|
76
|
-
templateName: z.ZodString;
|
|
77
|
-
}, "templateData"> & {
|
|
78
|
-
templateData: z.ZodObject<{
|
|
79
|
-
ownerName: z.ZodString;
|
|
80
|
-
repoName: z.ZodString;
|
|
81
|
-
defaultBranch: z.ZodString;
|
|
82
|
-
orgName: z.ZodString;
|
|
83
|
-
teamName: z.ZodString;
|
|
84
|
-
port: z.ZodString;
|
|
85
|
-
}, "strip", z.ZodString, z.objectOutputType<{
|
|
86
|
-
ownerName: z.ZodString;
|
|
87
|
-
repoName: z.ZodString;
|
|
88
|
-
defaultBranch: z.ZodString;
|
|
89
|
-
orgName: z.ZodString;
|
|
90
|
-
teamName: z.ZodString;
|
|
91
|
-
port: z.ZodString;
|
|
92
|
-
}, z.ZodString, "strip">, z.objectInputType<{
|
|
93
28
|
ownerName: z.ZodString;
|
|
94
29
|
repoName: z.ZodString;
|
|
95
30
|
defaultBranch: z.ZodString;
|
|
96
31
|
orgName: z.ZodString;
|
|
97
32
|
teamName: z.ZodString;
|
|
98
33
|
port: z.ZodString;
|
|
99
|
-
}, z.ZodString
|
|
34
|
+
}, z.core.$catchall<z.ZodString>>;
|
|
100
35
|
entryPoint: z.ZodOptional<z.ZodString>;
|
|
101
|
-
packageManager: z.ZodDefault<z.ZodEnum<
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
templateComplete: boolean;
|
|
108
|
-
templateData: {
|
|
109
|
-
port: string;
|
|
110
|
-
defaultBranch: string;
|
|
111
|
-
orgName: string;
|
|
112
|
-
repoName: string;
|
|
113
|
-
ownerName: string;
|
|
114
|
-
teamName: string;
|
|
115
|
-
} & {
|
|
116
|
-
[k: string]: string;
|
|
117
|
-
};
|
|
118
|
-
type?: "package" | "application" | undefined;
|
|
119
|
-
entryPoint?: string | undefined;
|
|
120
|
-
}, {
|
|
121
|
-
templateName: string;
|
|
122
|
-
destinationDir: string;
|
|
123
|
-
templateComplete: boolean;
|
|
124
|
-
templateData: {
|
|
125
|
-
port: string;
|
|
126
|
-
defaultBranch: string;
|
|
127
|
-
orgName: string;
|
|
128
|
-
repoName: string;
|
|
129
|
-
ownerName: string;
|
|
130
|
-
teamName: string;
|
|
131
|
-
} & {
|
|
132
|
-
[k: string]: string;
|
|
133
|
-
};
|
|
134
|
-
type?: "package" | "application" | undefined;
|
|
135
|
-
entryPoint?: string | undefined;
|
|
136
|
-
packageManager?: "pnpm" | "yarn" | undefined;
|
|
137
|
-
}>;
|
|
36
|
+
packageManager: z.ZodDefault<z.ZodEnum<{
|
|
37
|
+
pnpm: "pnpm";
|
|
38
|
+
yarn: "yarn";
|
|
39
|
+
}>>;
|
|
40
|
+
type: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"application">, z.ZodLiteral<"package">]>>;
|
|
41
|
+
}, z.core.$strip>;
|
|
138
42
|
export {};
|
package/lib/cli/init/types.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
2
3
|
var __defProp = Object.defineProperty;
|
|
3
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
5
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
8
|
var __export = (target, all) => {
|
|
7
9
|
for (var name in all)
|
|
@@ -15,41 +17,49 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
15
17
|
}
|
|
16
18
|
return to;
|
|
17
19
|
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
18
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
29
|
var types_exports = {};
|
|
20
30
|
__export(types_exports, {
|
|
21
31
|
initConfigInputSchema: () => initConfigInputSchema
|
|
22
32
|
});
|
|
23
33
|
module.exports = __toCommonJS(types_exports);
|
|
24
|
-
var
|
|
34
|
+
var z = __toESM(require("zod/v4"));
|
|
25
35
|
var import_manifest = require("../../utils/manifest.js");
|
|
26
36
|
var import_packageManager = require("../../utils/packageManager.js");
|
|
27
|
-
const initConfigInputSchema =
|
|
28
|
-
destinationDir:
|
|
29
|
-
templateComplete:
|
|
30
|
-
templateData:
|
|
31
|
-
ownerName:
|
|
32
|
-
repoName:
|
|
33
|
-
platformName:
|
|
34
|
-
defaultBranch:
|
|
35
|
-
}).catchall(
|
|
36
|
-
templateName:
|
|
37
|
+
const initConfigInputSchema = z.object({
|
|
38
|
+
destinationDir: z.string(),
|
|
39
|
+
templateComplete: z.boolean(),
|
|
40
|
+
templateData: z.object({
|
|
41
|
+
ownerName: z.string(),
|
|
42
|
+
repoName: z.string(),
|
|
43
|
+
platformName: z.union([z.literal("amd64"), z.literal("arm64")]),
|
|
44
|
+
defaultBranch: z.string()
|
|
45
|
+
}).catchall(z.string()),
|
|
46
|
+
templateName: z.string()
|
|
37
47
|
});
|
|
38
48
|
const initConfigSchema = initConfigInputSchema.omit({
|
|
39
49
|
templateData: true
|
|
40
50
|
}).extend({
|
|
41
|
-
templateData:
|
|
42
|
-
ownerName:
|
|
43
|
-
repoName:
|
|
44
|
-
defaultBranch:
|
|
51
|
+
templateData: z.object({
|
|
52
|
+
ownerName: z.string(),
|
|
53
|
+
repoName: z.string(),
|
|
54
|
+
defaultBranch: z.string(),
|
|
45
55
|
// Derived from ownerName
|
|
46
56
|
// TODO: use zod to transform `InitConfigInput` -> `InitConfig`?
|
|
47
|
-
orgName:
|
|
48
|
-
teamName:
|
|
57
|
+
orgName: z.string(),
|
|
58
|
+
teamName: z.string(),
|
|
49
59
|
// Generated by init command
|
|
50
|
-
port:
|
|
51
|
-
}).catchall(
|
|
52
|
-
entryPoint:
|
|
60
|
+
port: z.string()
|
|
61
|
+
}).catchall(z.string()),
|
|
62
|
+
entryPoint: z.string().optional(),
|
|
53
63
|
packageManager: import_packageManager.packageManagerSchema,
|
|
54
64
|
type: import_manifest.projectTypeSchema.optional()
|
|
55
65
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/cli/init/types.ts"],
|
|
4
|
-
"sourcesContent": ["import
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import * as z from 'zod/v4';\n\nimport { projectTypeSchema } from '../../utils/manifest.js';\nimport { packageManagerSchema } from '../../utils/packageManager.js';\n\nexport interface Input {\n /**\n * Whether to enable verbose debug logging.\n *\n * Defaults to `false`.\n */\n debug: boolean;\n}\n\nexport type InitConfigInput = z.infer<typeof initConfigInputSchema>;\n\nexport const initConfigInputSchema = z.object({\n destinationDir: z.string(),\n templateComplete: z.boolean(),\n templateData: z\n .object({\n ownerName: z.string(),\n repoName: z.string(),\n platformName: z.union([z.literal('amd64'), z.literal('arm64')]),\n defaultBranch: z.string(),\n })\n .catchall(z.string()),\n templateName: z.string(),\n});\n\nexport type InitConfig = z.infer<typeof initConfigSchema>;\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst initConfigSchema = initConfigInputSchema\n .omit({\n templateData: true,\n })\n .extend({\n templateData: z\n .object({\n ownerName: z.string(),\n repoName: z.string(),\n defaultBranch: z.string(),\n\n // Derived from ownerName\n // TODO: use zod to transform `InitConfigInput` -> `InitConfig`?\n orgName: z.string(),\n teamName: z.string(),\n\n // Generated by init command\n port: z.string(),\n })\n .catchall(z.string()),\n\n entryPoint: z.string().optional(),\n packageManager: packageManagerSchema,\n type: projectTypeSchema.optional(),\n });\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAmB;AAEnB,sBAAkC;AAClC,4BAAqC;AAa9B,MAAM,wBAAwB,EAAE,OAAO;AAAA,EAC5C,gBAAgB,EAAE,OAAO;AAAA,EACzB,kBAAkB,EAAE,QAAQ;AAAA,EAC5B,cAAc,EACX,OAAO;AAAA,IACN,WAAW,EAAE,OAAO;AAAA,IACpB,UAAU,EAAE,OAAO;AAAA,IACnB,cAAc,EAAE,MAAM,CAAC,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,OAAO,CAAC,CAAC;AAAA,IAC9D,eAAe,EAAE,OAAO;AAAA,EAC1B,CAAC,EACA,SAAS,EAAE,OAAO,CAAC;AAAA,EACtB,cAAc,EAAE,OAAO;AACzB,CAAC;AAKD,MAAM,mBAAmB,sBACtB,KAAK;AAAA,EACJ,cAAc;AAChB,CAAC,EACA,OAAO;AAAA,EACN,cAAc,EACX,OAAO;AAAA,IACN,WAAW,EAAE,OAAO;AAAA,IACpB,UAAU,EAAE,OAAO;AAAA,IACnB,eAAe,EAAE,OAAO;AAAA;AAAA;AAAA,IAIxB,SAAS,EAAE,OAAO;AAAA,IAClB,UAAU,EAAE,OAAO;AAAA;AAAA,IAGnB,MAAM,EAAE,OAAO;AAAA,EACjB,CAAC,EACA,SAAS,EAAE,OAAO,CAAC;AAAA,EAEtB,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAChC,gBAAgB;AAAA,EAChB,MAAM,kCAAkB,SAAS;AACnC,CAAC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -35,15 +35,15 @@ var import_path = __toESM(require("path"));
|
|
|
35
35
|
var import_util = require("util");
|
|
36
36
|
var import_fs_extra = __toESM(require("fs-extra"));
|
|
37
37
|
var fleece = __toESM(require("golden-fleece"));
|
|
38
|
-
var
|
|
38
|
+
var z = __toESM(require("zod/v4"));
|
|
39
39
|
var Git = __toESM(require("../../../api/git/index.js"));
|
|
40
40
|
var import_logging = require("../../../utils/logging.js");
|
|
41
41
|
var import_project = require("../../configure/analysis/project.js");
|
|
42
42
|
var import_renovate = require("../../configure/modules/renovate.js");
|
|
43
43
|
var import_prettier = require("../../configure/processing/prettier.js");
|
|
44
44
|
const EXISTING_REPO_PRESET_REGEX = /(github|local)>(seek-jobs|seekasia)\//;
|
|
45
|
-
const renovateConfigSchema =
|
|
46
|
-
extends:
|
|
45
|
+
const renovateConfigSchema = z.object({
|
|
46
|
+
extends: z.array(z.string())
|
|
47
47
|
});
|
|
48
48
|
const ownerToRenovatePreset = (owner) => {
|
|
49
49
|
const lowercaseOwner = owner.toLowerCase();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/cli/lint/internalLints/patchRenovateConfig.ts"],
|
|
4
|
-
"sourcesContent": ["import path from 'path';\nimport { inspect } from 'util';\n\nimport fs from 'fs-extra';\nimport * as fleece from 'golden-fleece';\nimport
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AACjB,kBAAwB;AAExB,sBAAe;AACf,aAAwB;AACxB,
|
|
4
|
+
"sourcesContent": ["import path from 'path';\nimport { inspect } from 'util';\n\nimport fs from 'fs-extra';\nimport * as fleece from 'golden-fleece';\nimport * as z from 'zod/v4';\n\nimport * as Git from '../../../api/git/index.js';\nimport { log } from '../../../utils/logging.js';\nimport { createDestinationFileReader } from '../../configure/analysis/project.js';\nimport { RENOVATE_CONFIG_FILENAMES } from '../../configure/modules/renovate.js';\nimport { formatPrettier } from '../../configure/processing/prettier.js';\n\nimport type { PatchFunction, PatchReturnType } from './upgrade/index.js';\n\nconst EXISTING_REPO_PRESET_REGEX = /(github|local)>(seek-jobs|seekasia)\\//;\n\ntype RenovateFiletype = 'json' | 'json5';\n\ntype RenovatePreset =\n | 'local>seekasia/renovate-config'\n | 'local>seek-jobs/renovate-config';\n\nconst renovateConfigSchema = z.object({\n extends: z.array(z.string()),\n});\n\nconst ownerToRenovatePreset = (owner: string): RenovatePreset | undefined => {\n const lowercaseOwner = owner.toLowerCase();\n\n switch (lowercaseOwner) {\n case 'seekasia':\n return 'local>seekasia/renovate-config';\n\n case 'seek-jobs':\n return 'local>seek-jobs/renovate-config';\n\n default:\n return;\n }\n};\n\ntype PatchFile = (props: {\n filepath: string;\n input: string;\n presetToAdd: RenovatePreset;\n}) => Promise<void>;\n\nconst patchJson: PatchFile = async ({ filepath, input, presetToAdd }) => {\n const json: unknown = JSON.parse(input);\n\n const config = renovateConfigSchema.safeParse(json);\n\n if (!config.success) {\n return;\n }\n\n config.data.extends.unshift(presetToAdd);\n\n await fs.promises.writeFile(\n filepath,\n await formatPrettier(JSON.stringify(config.data), { parser: 'json' }),\n );\n\n return;\n};\n\nconst patchJson5: PatchFile = async ({ filepath, input, presetToAdd }) => {\n const json: unknown = fleece.evaluate(input);\n\n const config = renovateConfigSchema.safeParse(json);\n\n if (!config.success) {\n return;\n }\n\n config.data.extends.unshift(presetToAdd);\n\n await fs.promises.writeFile(\n filepath,\n await formatPrettier(fleece.patch(input, config.data), { parser: 'json5' }),\n );\n\n return;\n};\n\nconst patchByFiletype: Record<RenovateFiletype, PatchFile> = {\n json: patchJson,\n json5: patchJson5,\n};\n\nconst patchRenovateConfig = async (\n mode: 'format' | 'lint',\n dir: string,\n): Promise<PatchReturnType> => {\n const readFile = createDestinationFileReader(dir);\n\n const { owner } = await Git.getOwnerAndRepo({ dir });\n\n const presetToAdd = ownerToRenovatePreset(owner);\n\n if (!presetToAdd) {\n return {\n result: 'skip',\n reason: 'owner does not map to a SEEK preset',\n };\n }\n\n const maybeConfigs = await Promise.all(\n RENOVATE_CONFIG_FILENAMES.map(async (filepath) => ({\n input: await readFile(filepath),\n filepath,\n })),\n );\n\n const config = maybeConfigs.find((maybeConfig) => Boolean(maybeConfig.input));\n if (!config?.input) {\n return { result: 'skip', reason: 'no config found' };\n }\n\n if (\n // The file appears to mention the baseline preset for the configured Git\n // owner. This is a naive check for simplicity.\n config.input.includes(presetToAdd) ||\n // Ignore any renovate configuration which already extends a SEEK-Jobs or seekasia config\n EXISTING_REPO_PRESET_REGEX.exec(config.input)\n ) {\n return {\n result: 'skip',\n reason: 'config already has a SEEK preset',\n };\n }\n\n if (mode === 'lint') {\n return { result: 'apply' };\n }\n\n const filetype: RenovateFiletype = config.filepath\n .toLowerCase()\n .endsWith('.json5')\n ? 'json5'\n : 'json';\n\n const patchFile = patchByFiletype[filetype];\n\n await patchFile({\n filepath: path.resolve(dir, config.filepath),\n input: config.input,\n presetToAdd,\n });\n\n return { result: 'apply' };\n};\n\nexport const tryPatchRenovateConfig = (async ({\n mode,\n dir = process.cwd(),\n}) => {\n try {\n // In a monorepo we may be invoked within a subdirectory, but we are working\n // with Renovate config that should be relative to the repository root.\n const gitRoot = await Git.findRoot({ dir });\n if (!gitRoot) {\n return { result: 'skip', reason: 'no Git root found' };\n }\n\n return await patchRenovateConfig(mode, gitRoot);\n } catch (err) {\n log.warn('Failed to patch Renovate config.');\n log.subtle(inspect(err));\n return { result: 'skip', reason: 'due to an error' };\n }\n}) satisfies PatchFunction;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["fs", "path"]
|
|
7
7
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import
|
|
2
|
-
export declare const extractFromParentPackageJson: <T extends ZodRawShape>(schema: z.ZodObject<T>, currentPath: string) => Promise<{
|
|
1
|
+
import * as z from 'zod/v4';
|
|
2
|
+
export declare const extractFromParentPackageJson: <T extends z.ZodRawShape>(schema: z.ZodObject<T>, currentPath: string) => Promise<{
|
|
3
3
|
packageJson: undefined;
|
|
4
4
|
packageJsonRelativePath: undefined;
|
|
5
5
|
} | {
|
|
6
6
|
packageJson: undefined;
|
|
7
7
|
packageJsonRelativePath: string;
|
|
8
8
|
} | {
|
|
9
|
-
packageJson: z.
|
|
9
|
+
packageJson: z.core.$InferObjectOutput<T, {}>;
|
|
10
10
|
packageJsonRelativePath: string;
|
|
11
11
|
}>;
|
|
12
12
|
export declare const isPatchableServerlessVersion: (currentPath: string) => Promise<boolean>;
|
|
@@ -37,7 +37,7 @@ module.exports = __toCommonJS(checks_exports);
|
|
|
37
37
|
var import_find_up = __toESM(require("find-up"));
|
|
38
38
|
var import_fs_extra = __toESM(require("fs-extra"));
|
|
39
39
|
var import_semver = require("semver");
|
|
40
|
-
var
|
|
40
|
+
var z = __toESM(require("zod/v4"));
|
|
41
41
|
var import_logging = require("../../../utils/logging.js");
|
|
42
42
|
const getParentFile = async (file, cwd = process.cwd()) => {
|
|
43
43
|
const path = await (0, import_find_up.default)(file, { cwd });
|
|
@@ -69,9 +69,9 @@ const extractFromParentPackageJson = async (schema, currentPath) => {
|
|
|
69
69
|
};
|
|
70
70
|
const isPatchableServerlessVersion = async (currentPath) => {
|
|
71
71
|
const { packageJson, packageJsonRelativePath } = await extractFromParentPackageJson(
|
|
72
|
-
|
|
73
|
-
devDependencies:
|
|
74
|
-
serverless:
|
|
72
|
+
z.object({
|
|
73
|
+
devDependencies: z.object({
|
|
74
|
+
serverless: z.string().optional()
|
|
75
75
|
})
|
|
76
76
|
}),
|
|
77
77
|
currentPath
|
|
@@ -100,11 +100,11 @@ const isPatchableServerlessVersion = async (currentPath) => {
|
|
|
100
100
|
};
|
|
101
101
|
const isPatchableSkubaType = async (currentPath) => {
|
|
102
102
|
const { packageJson, packageJsonRelativePath } = await extractFromParentPackageJson(
|
|
103
|
-
|
|
104
|
-
skuba:
|
|
105
|
-
type:
|
|
103
|
+
z.object({
|
|
104
|
+
skuba: z.object({
|
|
105
|
+
type: z.string().optional()
|
|
106
106
|
}).optional(),
|
|
107
|
-
files:
|
|
107
|
+
files: z.string().array().optional()
|
|
108
108
|
}),
|
|
109
109
|
currentPath
|
|
110
110
|
);
|
|
@@ -138,9 +138,9 @@ const isPatchableNodeVersion = async (targetNodeVersion, currentPath) => {
|
|
|
138
138
|
const nvmrcFile = await getParentFile(".nvmrc");
|
|
139
139
|
const nodeVersionFile = await getParentFile(".node-version");
|
|
140
140
|
const { packageJson } = await extractFromParentPackageJson(
|
|
141
|
-
|
|
142
|
-
engines:
|
|
143
|
-
node:
|
|
141
|
+
z.object({
|
|
142
|
+
engines: z.object({
|
|
143
|
+
node: z.string()
|
|
144
144
|
})
|
|
145
145
|
}),
|
|
146
146
|
currentPath
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/cli/migrate/nodeVersion/checks.ts"],
|
|
4
|
-
"sourcesContent": ["import findUp from 'find-up';\nimport fs from 'fs-extra';\nimport { coerce, lte, satisfies } from 'semver';\nimport
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAmB;AACnB,sBAAe;AACf,oBAAuC;AACvC,
|
|
4
|
+
"sourcesContent": ["import findUp from 'find-up';\nimport fs from 'fs-extra';\nimport { coerce, lte, satisfies } from 'semver';\nimport * as z from 'zod/v4';\n\nimport { log } from '../../../utils/logging.js';\n\nconst getParentFile = async (file: string, cwd: string = process.cwd()) => {\n const path = await findUp(file, { cwd });\n if (!path) {\n return undefined;\n }\n return {\n fileContent: await fs.readFile(path, 'utf-8'),\n path,\n };\n};\n\nexport const extractFromParentPackageJson = async <T extends z.ZodRawShape>(\n schema: z.ZodObject<T>,\n currentPath: string,\n) => {\n const file = await getParentFile('package.json', currentPath);\n if (!file) {\n return { packageJson: undefined, packageJsonRelativePath: undefined };\n }\n const { fileContent: packageJson, path } = file;\n let rawJSON;\n try {\n rawJSON = JSON.parse(packageJson) as unknown;\n } catch {\n throw new Error(`${path} is not valid JSON`);\n }\n const result = schema.safeParse(rawJSON);\n if (!result.success) {\n return { packageJson: undefined, packageJsonRelativePath: path };\n }\n\n return { packageJson: result.data, packageJsonRelativePath: path };\n};\n\nexport const isPatchableServerlessVersion = async (\n currentPath: string,\n): Promise<boolean> => {\n const { packageJson, packageJsonRelativePath } =\n await extractFromParentPackageJson(\n z.object({\n devDependencies: z.object({\n serverless: z.string().optional(),\n }),\n }),\n currentPath,\n );\n if (!packageJson) {\n log.warn('package.json not found, ensure it is in the correct location');\n return false;\n }\n\n const serverlessVersion = packageJson?.devDependencies.serverless;\n\n if (!serverlessVersion) {\n log.subtle(\n `Serverless version not found in ${packageJsonRelativePath}, assuming it is not a dependency`,\n );\n return true;\n }\n\n if (!satisfies(serverlessVersion, '4.x.x')) {\n log.warn(\n `Serverless version ${serverlessVersion} cannot be migrated; use Serverless 4.x to automatically migrate Serverless files`,\n );\n return false;\n }\n\n log.ok(\n `Proceeding with migration of Serverless version ${serverlessVersion}`,\n );\n return true;\n};\n\nexport const isPatchableSkubaType = async (\n currentPath: string,\n): Promise<boolean> => {\n const { packageJson, packageJsonRelativePath } =\n await extractFromParentPackageJson(\n z.object({\n skuba: z\n .object({\n type: z.string().optional(),\n })\n .optional(),\n files: z.string().array().optional(),\n }),\n currentPath,\n );\n\n if (!packageJson) {\n log.warn('package.json not found, ensure it is in the correct location');\n return false;\n }\n\n if (packageJson.files) {\n log.warn(\n 'Migrations are not supported for packages; update manually to ensure major runtime deprecations are intended',\n );\n return false;\n }\n\n const type = packageJson?.skuba?.type;\n\n if (!type) {\n log.warn(\n `skuba project type not found in ${packageJsonRelativePath}; add a package.json#/skuba/type to ensure the correct migration can be applied`,\n );\n return false;\n }\n if (type === 'package') {\n log.warn(\n 'Migrations are not supported for packages; update manually to ensure major runtime deprecations are intended',\n );\n return false;\n }\n\n log.ok(`Proceeding with migration of skuba project type ${type}`);\n return true;\n};\n\nexport const isPatchableNodeVersion = async (\n targetNodeVersion: number,\n currentPath: string,\n): Promise<boolean> => {\n const nvmrcFile = await getParentFile('.nvmrc');\n const nodeVersionFile = await getParentFile('.node-version');\n const { packageJson } = await extractFromParentPackageJson(\n z.object({\n engines: z.object({\n node: z.string(),\n }),\n }),\n currentPath,\n );\n\n const nvmrcNodeVersion = nvmrcFile?.fileContent;\n const nodeVersion = nodeVersionFile?.fileContent;\n const engineVersion = packageJson?.engines.node;\n\n const currentNodeVersion = nvmrcNodeVersion || nodeVersion || engineVersion;\n\n const coercedTargetVersion = coerce(targetNodeVersion.toString())?.version;\n const coercedCurrentVersion = coerce(currentNodeVersion)?.version;\n\n const isNodeVersionValid =\n coercedTargetVersion &&\n coercedCurrentVersion &&\n lte(coercedCurrentVersion, coercedTargetVersion);\n\n if (!isNodeVersionValid) {\n log.warn(\n `Node.js version ${coercedCurrentVersion ?? 'unknown'} cannot be migrated to ${coercedTargetVersion}`,\n );\n return false;\n }\n\n log.ok(\n `Proceeding with migration from Node.js ${coercedCurrentVersion} to ${coercedTargetVersion}`,\n );\n return true;\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["findUp", "fs"]
|
|
7
7
|
}
|
package/lib/utils/error.d.ts
CHANGED
|
@@ -1,34 +1,14 @@
|
|
|
1
1
|
import { inspect } from 'util';
|
|
2
|
-
import
|
|
2
|
+
import * as z from 'zod/v4';
|
|
3
3
|
export type ConcurrentlyErrors = z.infer<typeof concurrentlyErrorsSchema>;
|
|
4
4
|
export declare const concurrentlyErrorsSchema: z.ZodArray<z.ZodObject<{
|
|
5
5
|
command: z.ZodObject<{
|
|
6
6
|
command: z.ZodString;
|
|
7
7
|
name: z.ZodString;
|
|
8
|
-
},
|
|
9
|
-
name: string;
|
|
10
|
-
command: string;
|
|
11
|
-
}, {
|
|
12
|
-
name: string;
|
|
13
|
-
command: string;
|
|
14
|
-
}>;
|
|
8
|
+
}, z.core.$strip>;
|
|
15
9
|
index: z.ZodNumber;
|
|
16
10
|
exitCode: z.ZodNumber;
|
|
17
|
-
},
|
|
18
|
-
index: number;
|
|
19
|
-
exitCode: number;
|
|
20
|
-
command: {
|
|
21
|
-
name: string;
|
|
22
|
-
command: string;
|
|
23
|
-
};
|
|
24
|
-
}, {
|
|
25
|
-
index: number;
|
|
26
|
-
exitCode: number;
|
|
27
|
-
command: {
|
|
28
|
-
name: string;
|
|
29
|
-
command: string;
|
|
30
|
-
};
|
|
31
|
-
}>, "many">;
|
|
11
|
+
}, z.core.$strip>>;
|
|
32
12
|
/**
|
|
33
13
|
* Creates an error that returns its plain `message` rather than a full stack
|
|
34
14
|
* trace when `util.inspect`ed.
|
package/lib/utils/error.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
2
3
|
var __defProp = Object.defineProperty;
|
|
3
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
5
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
8
|
var __export = (target, all) => {
|
|
7
9
|
for (var name in all)
|
|
@@ -15,6 +17,14 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
15
17
|
}
|
|
16
18
|
return to;
|
|
17
19
|
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
18
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
29
|
var error_exports = {};
|
|
20
30
|
__export(error_exports, {
|
|
@@ -25,17 +35,17 @@ __export(error_exports, {
|
|
|
25
35
|
});
|
|
26
36
|
module.exports = __toCommonJS(error_exports);
|
|
27
37
|
var import_util = require("util");
|
|
28
|
-
var
|
|
38
|
+
var z = __toESM(require("zod/v4"));
|
|
29
39
|
var import_logging = require("./logging.js");
|
|
30
40
|
var import_validation = require("./validation.js");
|
|
31
|
-
const concurrentlyErrorsSchema =
|
|
32
|
-
|
|
33
|
-
command:
|
|
34
|
-
command:
|
|
35
|
-
name:
|
|
41
|
+
const concurrentlyErrorsSchema = z.array(
|
|
42
|
+
z.object({
|
|
43
|
+
command: z.object({
|
|
44
|
+
command: z.string(),
|
|
45
|
+
name: z.string()
|
|
36
46
|
}),
|
|
37
|
-
index:
|
|
38
|
-
exitCode:
|
|
47
|
+
index: z.number(),
|
|
48
|
+
exitCode: z.number()
|
|
39
49
|
})
|
|
40
50
|
);
|
|
41
51
|
const createTerseError = (message) => Object.assign(new Error(message), {
|
package/lib/utils/error.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/error.ts"],
|
|
4
|
-
"sourcesContent": ["import { inspect } from 'util';\n\nimport type { ExecaError } from 'execa';\nimport
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { inspect } from 'util';\n\nimport type { ExecaError } from 'execa';\nimport * as z from 'zod/v4';\n\nimport { log } from './logging.js';\nimport { hasNumberProp, hasProp } from './validation.js';\n\nexport type ConcurrentlyErrors = z.infer<typeof concurrentlyErrorsSchema>;\n\nexport const concurrentlyErrorsSchema = z.array(\n z.object({\n command: z.object({\n command: z.string(),\n name: z.string(),\n }),\n index: z.number(),\n exitCode: z.number(),\n }),\n);\n\n/**\n * Creates an error that returns its plain `message` rather than a full stack\n * trace when `util.inspect`ed.\n *\n * This can be useful for terser handling and logging of known error scenarios\n * that have descriptive messages.\n *\n * https://nodejs.org/api/util.html#custom-inspection-functions-on-objects\n */\nexport const createTerseError = (message?: string) =>\n Object.assign(new Error(message), {\n [inspect.custom]: () => message,\n });\n\nconst isExecaError = (err: unknown): err is ExecaError =>\n hasNumberProp(err, 'exitCode');\n\nexport const handleCliError = (err: unknown) => {\n if (isExecaError(err)) {\n process.exitCode = err.exitCode;\n return;\n }\n\n log.err(inspect(err));\n process.exitCode = 1;\n return;\n};\n\nexport const isErrorWithCode = <T>(\n err: unknown,\n code: T,\n): err is Record<PropertyKey, unknown> & { code: T } =>\n hasProp(err, 'code') && err.code === code;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAwB;AAGxB,QAAmB;AAEnB,qBAAoB;AACpB,wBAAuC;AAIhC,MAAM,2BAA2B,EAAE;AAAA,EACxC,EAAE,OAAO;AAAA,IACP,SAAS,EAAE,OAAO;AAAA,MAChB,SAAS,EAAE,OAAO;AAAA,MAClB,MAAM,EAAE,OAAO;AAAA,IACjB,CAAC;AAAA,IACD,OAAO,EAAE,OAAO;AAAA,IAChB,UAAU,EAAE,OAAO;AAAA,EACrB,CAAC;AACH;AAWO,MAAM,mBAAmB,CAAC,YAC/B,OAAO,OAAO,IAAI,MAAM,OAAO,GAAG;AAAA,EAChC,CAAC,oBAAQ,MAAM,GAAG,MAAM;AAC1B,CAAC;AAEH,MAAM,eAAe,CAAC,YACpB,iCAAc,KAAK,UAAU;AAExB,MAAM,iBAAiB,CAAC,QAAiB;AAC9C,MAAI,aAAa,GAAG,GAAG;AACrB,YAAQ,WAAW,IAAI;AACvB;AAAA,EACF;AAEA,qBAAI,QAAI,qBAAQ,GAAG,CAAC;AACpB,UAAQ,WAAW;AACnB;AACF;AAEO,MAAM,kBAAkB,CAC7B,KACA,aAEA,2BAAQ,KAAK,MAAM,KAAK,IAAI,SAAS;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/lib/utils/manifest.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import readPkgUp, { type NormalizedPackageJson } from 'read-pkg-up';
|
|
2
|
-
import
|
|
2
|
+
import * as z from 'zod/v4';
|
|
3
3
|
export type ProjectType = z.infer<typeof projectTypeSchema>;
|
|
4
|
-
export declare const projectTypeSchema: z.ZodUnion<[z.ZodLiteral<"application">, z.ZodLiteral<"package">]>;
|
|
4
|
+
export declare const projectTypeSchema: z.ZodUnion<readonly [z.ZodLiteral<"application">, z.ZodLiteral<"package">]>;
|
|
5
5
|
export declare const PROJECT_TYPES: readonly ["application", "package"];
|
|
6
6
|
export declare const getSkubaManifest: () => Promise<NormalizedPackageJson>;
|
|
7
7
|
export declare const getConsumerManifest: (cwd?: string) => Promise<readPkgUp.NormalizedReadResult | undefined>;
|
package/lib/utils/manifest.js
CHANGED
|
@@ -38,11 +38,11 @@ __export(manifest_exports, {
|
|
|
38
38
|
});
|
|
39
39
|
module.exports = __toCommonJS(manifest_exports);
|
|
40
40
|
var import_read_pkg_up = __toESM(require("read-pkg-up"));
|
|
41
|
-
var
|
|
41
|
+
var z = __toESM(require("zod/v4"));
|
|
42
42
|
var import_validation = require("./validation.js");
|
|
43
|
-
const projectTypeSchema =
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
const projectTypeSchema = z.union([
|
|
44
|
+
z.literal("application"),
|
|
45
|
+
z.literal("package")
|
|
46
46
|
]);
|
|
47
47
|
const PROJECT_TYPES = ["application", "package"];
|
|
48
48
|
const DEFAULT_ENTRY_POINT = "src/app.ts";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/manifest.ts"],
|
|
4
|
-
"sourcesContent": ["import readPkgUp, { type NormalizedPackageJson } from 'read-pkg-up';\nimport
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAAsD;AACtD,
|
|
4
|
+
"sourcesContent": ["import readPkgUp, { type NormalizedPackageJson } from 'read-pkg-up';\nimport * as z from 'zod/v4';\n\nimport { hasProp } from './validation.js';\n\nexport type ProjectType = z.infer<typeof projectTypeSchema>;\n\nexport const projectTypeSchema = z.union([\n z.literal('application'),\n z.literal('package'),\n]);\n\nexport const PROJECT_TYPES = ['application', 'package'] as const;\n\nconst DEFAULT_ENTRY_POINT = 'src/app.ts';\n\nlet skubaManifest: NormalizedPackageJson | undefined;\n\nexport const getSkubaManifest = async (): Promise<NormalizedPackageJson> => {\n if (skubaManifest !== undefined) {\n return skubaManifest;\n }\n\n const result = await readPkgUp({ cwd: __dirname });\n\n if (result === undefined) {\n throw Error('skuba could not find its own manifest');\n }\n\n return (skubaManifest = result.packageJson);\n};\n\nexport const getConsumerManifest = (cwd?: string) => readPkgUp({ cwd });\n\nexport const getPropFromConsumerManifest = async <\n T extends string,\n V = unknown,\n>(\n prop: T,\n): Promise<V | undefined> => {\n const result = await getConsumerManifest();\n\n return result !== undefined && hasProp<T, V>(result.packageJson.skuba, prop)\n ? result.packageJson.skuba[prop]\n : undefined;\n};\n\nexport const getStringPropFromConsumerManifest = async <T extends string>(\n prop: T,\n): Promise<string | undefined> => {\n const result = await getPropFromConsumerManifest(prop);\n\n return typeof result === 'string' ? result : undefined;\n};\n\nexport const getEntryPointFromManifest = async (): Promise<string> => {\n const entryPoint = await getStringPropFromConsumerManifest('entryPoint');\n\n return entryPoint ?? DEFAULT_ENTRY_POINT;\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAAsD;AACtD,QAAmB;AAEnB,wBAAwB;AAIjB,MAAM,oBAAoB,EAAE,MAAM;AAAA,EACvC,EAAE,QAAQ,aAAa;AAAA,EACvB,EAAE,QAAQ,SAAS;AACrB,CAAC;AAEM,MAAM,gBAAgB,CAAC,eAAe,SAAS;AAEtD,MAAM,sBAAsB;AAE5B,IAAI;AAEG,MAAM,mBAAmB,YAA4C;AAC1E,MAAI,kBAAkB,QAAW;AAC/B,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,UAAM,mBAAAA,SAAU,EAAE,KAAK,UAAU,CAAC;AAEjD,MAAI,WAAW,QAAW;AACxB,UAAM,MAAM,uCAAuC;AAAA,EACrD;AAEA,SAAQ,gBAAgB,OAAO;AACjC;AAEO,MAAM,sBAAsB,CAAC,YAAiB,mBAAAA,SAAU,EAAE,IAAI,CAAC;AAE/D,MAAM,8BAA8B,OAIzC,SAC2B;AAC3B,QAAM,SAAS,MAAM,oBAAoB;AAEzC,SAAO,WAAW,cAAa,2BAAc,OAAO,YAAY,OAAO,IAAI,IACvE,OAAO,YAAY,MAAM,IAAI,IAC7B;AACN;AAEO,MAAM,oCAAoC,OAC/C,SACgC;AAChC,QAAM,SAAS,MAAM,4BAA4B,IAAI;AAErD,SAAO,OAAO,WAAW,WAAW,SAAS;AAC/C;AAEO,MAAM,4BAA4B,YAA6B;AACpE,QAAM,aAAa,MAAM,kCAAkC,YAAY;AAEvE,SAAO,cAAc;AACvB;",
|
|
6
6
|
"names": ["readPkgUp"]
|
|
7
7
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as z from 'zod/v4';
|
|
2
2
|
export declare const DEFAULT_PACKAGE_MANAGER = "pnpm";
|
|
3
3
|
export type PackageManagerConfig = (typeof PACKAGE_MANAGERS)[keyof typeof PACKAGE_MANAGERS] & {
|
|
4
4
|
command: PackageManager;
|
|
@@ -22,5 +22,8 @@ declare const PACKAGE_MANAGERS: {
|
|
|
22
22
|
export declare const configForPackageManager: (packageManager: PackageManager) => PackageManagerConfig;
|
|
23
23
|
export declare const detectPackageManager: (cwd?: string) => Promise<PackageManagerConfig>;
|
|
24
24
|
export type PackageManager = z.infer<typeof packageManagerSchema>;
|
|
25
|
-
export declare const packageManagerSchema: z.ZodDefault<z.ZodEnum<
|
|
25
|
+
export declare const packageManagerSchema: z.ZodDefault<z.ZodEnum<{
|
|
26
|
+
pnpm: "pnpm";
|
|
27
|
+
yarn: "yarn";
|
|
28
|
+
}>>;
|
|
26
29
|
export {};
|
|
@@ -36,7 +36,7 @@ __export(packageManager_exports, {
|
|
|
36
36
|
module.exports = __toCommonJS(packageManager_exports);
|
|
37
37
|
var import_find_up = __toESM(require("find-up"));
|
|
38
38
|
var import_is_installed_globally = __toESM(require("is-installed-globally"));
|
|
39
|
-
var
|
|
39
|
+
var z = __toESM(require("zod/v4"));
|
|
40
40
|
var import_logging = require("./logging.js");
|
|
41
41
|
const DEFAULT_PACKAGE_MANAGER = "pnpm";
|
|
42
42
|
const PACKAGE_MANAGERS = {
|
|
@@ -93,7 +93,7 @@ const findDepth = async (filename, cwd) => {
|
|
|
93
93
|
const path = await (0, import_find_up.default)(filename, { cwd });
|
|
94
94
|
return path ? path.split("/").length : void 0;
|
|
95
95
|
};
|
|
96
|
-
const packageManagerSchema =
|
|
96
|
+
const packageManagerSchema = z.enum(["pnpm", "yarn"]).default(DEFAULT_PACKAGE_MANAGER);
|
|
97
97
|
// Annotate the CommonJS export names for ESM import in node:
|
|
98
98
|
0 && (module.exports = {
|
|
99
99
|
DEFAULT_PACKAGE_MANAGER,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/packageManager.ts"],
|
|
4
|
-
"sourcesContent": ["import findUp from 'find-up';\nimport isInstalledGlobally from 'is-installed-globally';\nimport
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAmB;AACnB,mCAAgC;AAChC,
|
|
4
|
+
"sourcesContent": ["import findUp from 'find-up';\nimport isInstalledGlobally from 'is-installed-globally';\nimport * as z from 'zod/v4';\n\nimport { log } from './logging.js';\n\nexport const DEFAULT_PACKAGE_MANAGER = 'pnpm';\n\nexport type PackageManagerConfig =\n (typeof PACKAGE_MANAGERS)[keyof typeof PACKAGE_MANAGERS] & {\n command: PackageManager;\n };\n\nconst PACKAGE_MANAGERS = {\n pnpm: {\n print: {\n exec: 'pnpm exec',\n runSilent: 'pnpm --silent run',\n update: isInstalledGlobally ? 'pnpm update --global' : 'pnpm update',\n },\n },\n yarn: {\n print: {\n exec: 'yarn',\n runSilent: 'yarn -s',\n update: isInstalledGlobally ? 'yarn global upgrade' : 'yarn upgrade',\n },\n },\n};\n\nexport const configForPackageManager = (\n packageManager: PackageManager,\n): PackageManagerConfig => ({\n ...PACKAGE_MANAGERS[packageManager],\n command: packageManager,\n});\n\nexport const detectPackageManager = async (\n cwd?: string,\n): Promise<PackageManagerConfig> => {\n let packageManager: PackageManager = DEFAULT_PACKAGE_MANAGER;\n\n try {\n const [yarnDepth, pnpmDepth] = await Promise.all([\n findDepth('yarn.lock', cwd),\n findDepth('pnpm-lock.yaml', cwd),\n ]);\n\n if (yarnDepth === undefined && pnpmDepth === undefined) {\n throw new Error('No package manager lockfile found.');\n }\n\n packageManager = (pnpmDepth ?? -1) > (yarnDepth ?? -1) ? 'pnpm' : 'yarn';\n } catch (err) {\n log.warn(\n `Failed to detect package manager; defaulting to ${log.bold(\n DEFAULT_PACKAGE_MANAGER,\n )}.`,\n );\n log.subtle(\n (() => {\n switch (true) {\n case err instanceof Error:\n return err.message;\n\n default:\n return String(err);\n }\n })(),\n );\n }\n\n return configForPackageManager(packageManager);\n};\n\nconst findDepth = async (filename: string, cwd?: string) => {\n const path = await findUp(filename, { cwd });\n return path ? path.split('/').length : undefined;\n};\n\nexport type PackageManager = z.infer<typeof packageManagerSchema>;\n\nexport const packageManagerSchema = z\n .enum(['pnpm', 'yarn'])\n .default(DEFAULT_PACKAGE_MANAGER);\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAmB;AACnB,mCAAgC;AAChC,QAAmB;AAEnB,qBAAoB;AAEb,MAAM,0BAA0B;AAOvC,MAAM,mBAAmB;AAAA,EACvB,MAAM;AAAA,IACJ,OAAO;AAAA,MACL,MAAM;AAAA,MACN,WAAW;AAAA,MACX,QAAQ,6BAAAA,UAAsB,yBAAyB;AAAA,IACzD;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,OAAO;AAAA,MACL,MAAM;AAAA,MACN,WAAW;AAAA,MACX,QAAQ,6BAAAA,UAAsB,wBAAwB;AAAA,IACxD;AAAA,EACF;AACF;AAEO,MAAM,0BAA0B,CACrC,oBAC0B;AAAA,EAC1B,GAAG,iBAAiB,cAAc;AAAA,EAClC,SAAS;AACX;AAEO,MAAM,uBAAuB,OAClC,QACkC;AAClC,MAAI,iBAAiC;AAErC,MAAI;AACF,UAAM,CAAC,WAAW,SAAS,IAAI,MAAM,QAAQ,IAAI;AAAA,MAC/C,UAAU,aAAa,GAAG;AAAA,MAC1B,UAAU,kBAAkB,GAAG;AAAA,IACjC,CAAC;AAED,QAAI,cAAc,UAAa,cAAc,QAAW;AACtD,YAAM,IAAI,MAAM,oCAAoC;AAAA,IACtD;AAEA,sBAAkB,aAAa,OAAO,aAAa,MAAM,SAAS;AAAA,EACpE,SAAS,KAAK;AACZ,uBAAI;AAAA,MACF,mDAAmD,mBAAI;AAAA,QACrD;AAAA,MACF,CAAC;AAAA,IACH;AACA,uBAAI;AAAA,OACD,MAAM;AACL,gBAAQ,MAAM;AAAA,UACZ,KAAK,eAAe;AAClB,mBAAO,IAAI;AAAA,UAEb;AACE,mBAAO,OAAO,GAAG;AAAA,QACrB;AAAA,MACF,GAAG;AAAA,IACL;AAAA,EACF;AAEA,SAAO,wBAAwB,cAAc;AAC/C;AAEA,MAAM,YAAY,OAAO,UAAkB,QAAiB;AAC1D,QAAM,OAAO,UAAM,eAAAC,SAAO,UAAU,EAAE,IAAI,CAAC;AAC3C,SAAO,OAAO,KAAK,MAAM,GAAG,EAAE,SAAS;AACzC;AAIO,MAAM,uBAAuB,EACjC,KAAK,CAAC,QAAQ,MAAM,CAAC,EACrB,QAAQ,uBAAuB;",
|
|
6
6
|
"names": ["isInstalledGlobally", "findUp"]
|
|
7
7
|
}
|
package/lib/utils/template.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as z from 'zod/v4';
|
|
2
2
|
export declare const TEMPLATE_NAMES: readonly ["express-rest-api", "greeter", "koa-rest-api", "lambda-sqs-worker-cdk", "oss-npm-package", "private-npm-package"];
|
|
3
3
|
export type TemplateName = (typeof TEMPLATE_NAMES)[number];
|
|
4
4
|
export declare const TEMPLATE_NAMES_WITH_BYO: readonly ["express-rest-api", "greeter", "koa-rest-api", "lambda-sqs-worker-cdk", "oss-npm-package", "private-npm-package", "github →"];
|
|
@@ -23,45 +23,16 @@ export declare const templateConfigSchema: z.ZodObject<{
|
|
|
23
23
|
name: z.ZodString;
|
|
24
24
|
message: z.ZodString;
|
|
25
25
|
initial: z.ZodString;
|
|
26
|
-
validate: z.ZodOptional<z.
|
|
27
|
-
},
|
|
28
|
-
message: string;
|
|
29
|
-
name: string;
|
|
30
|
-
initial: string;
|
|
31
|
-
validate?: ((args_0: string, ...args: unknown[]) => string | boolean) | undefined;
|
|
32
|
-
}, {
|
|
33
|
-
message: string;
|
|
34
|
-
name: string;
|
|
35
|
-
initial: string;
|
|
36
|
-
validate?: ((args_0: string, ...args: unknown[]) => string | boolean) | undefined;
|
|
37
|
-
}>, "many">;
|
|
26
|
+
validate: z.ZodOptional<z.ZodPipe<z.ZodCustom<z.core.$InferInnerFunctionType<z.core.$ZodTuple<[z.ZodString], null>, z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>, z.core.$InferInnerFunctionType<z.core.$ZodTuple<[z.ZodString], null>, z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>>, z.ZodTransform<(args_0: string) => string | boolean, z.core.$InferInnerFunctionType<z.core.$ZodTuple<[z.ZodString], null>, z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>>>>;
|
|
27
|
+
}, z.core.$strip>>;
|
|
38
28
|
entryPoint: z.ZodOptional<z.ZodString>;
|
|
39
29
|
noSkip: z.ZodOptional<z.ZodBoolean>;
|
|
40
|
-
packageManager: z.ZodDefault<z.ZodEnum<
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
initial: string;
|
|
47
|
-
validate?: ((args_0: string, ...args: unknown[]) => string | boolean) | undefined;
|
|
48
|
-
}[];
|
|
49
|
-
packageManager: "pnpm" | "yarn";
|
|
50
|
-
type?: "package" | "application" | undefined;
|
|
51
|
-
entryPoint?: string | undefined;
|
|
52
|
-
noSkip?: boolean | undefined;
|
|
53
|
-
}, {
|
|
54
|
-
fields: {
|
|
55
|
-
message: string;
|
|
56
|
-
name: string;
|
|
57
|
-
initial: string;
|
|
58
|
-
validate?: ((args_0: string, ...args: unknown[]) => string | boolean) | undefined;
|
|
59
|
-
}[];
|
|
60
|
-
type?: "package" | "application" | undefined;
|
|
61
|
-
entryPoint?: string | undefined;
|
|
62
|
-
packageManager?: "pnpm" | "yarn" | undefined;
|
|
63
|
-
noSkip?: boolean | undefined;
|
|
64
|
-
}>;
|
|
30
|
+
packageManager: z.ZodDefault<z.ZodEnum<{
|
|
31
|
+
pnpm: "pnpm";
|
|
32
|
+
yarn: "yarn";
|
|
33
|
+
}>>;
|
|
34
|
+
type: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"application">, z.ZodLiteral<"package">]>>;
|
|
35
|
+
}, z.core.$strip>;
|
|
65
36
|
export declare const TEMPLATE_CONFIG_FILENAME = "skuba.template.js";
|
|
66
37
|
export declare const TEMPLATE_DIR: string;
|
|
67
38
|
export declare const BASE_TEMPLATE_DIR: string;
|
package/lib/utils/template.js
CHANGED
|
@@ -41,7 +41,7 @@ __export(template_exports, {
|
|
|
41
41
|
module.exports = __toCommonJS(template_exports);
|
|
42
42
|
var import_path = __toESM(require("path"));
|
|
43
43
|
var import_fs_extra = __toESM(require("fs-extra"));
|
|
44
|
-
var
|
|
44
|
+
var z = __toESM(require("zod/v4"));
|
|
45
45
|
var import_manifest = require("./manifest.js");
|
|
46
46
|
var import_packageManager = require("./packageManager.js");
|
|
47
47
|
const TEMPLATE_NAMES = [
|
|
@@ -79,17 +79,29 @@ const TEMPLATE_DOCUMENTATION_CONFIG = {
|
|
|
79
79
|
filename: "package.md"
|
|
80
80
|
}
|
|
81
81
|
};
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
82
|
+
const functionSchema = (schema) => z.custom().transform((arg, ctx) => {
|
|
83
|
+
if (typeof arg !== "function") {
|
|
84
|
+
ctx.addIssue("Must be function");
|
|
85
|
+
return z.NEVER;
|
|
86
|
+
}
|
|
87
|
+
return schema.implement(arg);
|
|
88
|
+
});
|
|
89
|
+
const templateConfigSchema = z.object({
|
|
90
|
+
fields: z.array(
|
|
91
|
+
z.object({
|
|
92
|
+
name: z.string(),
|
|
93
|
+
message: z.string(),
|
|
94
|
+
initial: z.string(),
|
|
95
|
+
validate: functionSchema(
|
|
96
|
+
z.function({
|
|
97
|
+
input: [z.string()],
|
|
98
|
+
output: z.union([z.boolean(), z.string()])
|
|
99
|
+
})
|
|
100
|
+
).optional()
|
|
89
101
|
})
|
|
90
102
|
),
|
|
91
|
-
entryPoint:
|
|
92
|
-
noSkip:
|
|
103
|
+
entryPoint: z.string().optional(),
|
|
104
|
+
noSkip: z.boolean().optional(),
|
|
93
105
|
packageManager: import_packageManager.packageManagerSchema,
|
|
94
106
|
type: import_manifest.projectTypeSchema.optional()
|
|
95
107
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/template.ts"],
|
|
4
|
-
"sourcesContent": ["import path from 'path';\n\nimport fs from 'fs-extra';\nimport
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AAEjB,sBAAe;AACf,
|
|
4
|
+
"sourcesContent": ["import path from 'path';\n\nimport fs from 'fs-extra';\nimport * as z from 'zod/v4';\n\nimport { projectTypeSchema } from './manifest.js';\nimport { packageManagerSchema } from './packageManager.js';\n\nexport const TEMPLATE_NAMES = [\n 'express-rest-api',\n 'greeter',\n 'koa-rest-api',\n 'lambda-sqs-worker-cdk',\n 'oss-npm-package',\n 'private-npm-package',\n] as const;\n\nexport type TemplateName = (typeof TEMPLATE_NAMES)[number];\n\nexport const TEMPLATE_NAMES_WITH_BYO = [...TEMPLATE_NAMES, 'github \u2192'] as const;\n\ninterface TemplateDocumentationConfig {\n /**\n * The semantic version in which the template was first added.\n *\n * This is used to filter out historical changelogs.\n */\n added: string;\n\n /**\n * The Markdown file for the template in our `/docs`.\n *\n * This is used to compile per-template changelogs for our documentation site.\n */\n filename: string;\n}\n\nexport const TEMPLATE_DOCUMENTATION_CONFIG: Record<\n TemplateName,\n TemplateDocumentationConfig\n> = {\n 'express-rest-api': {\n added: '3.8.0',\n filename: 'api.md',\n },\n greeter: {\n added: '3.4.1',\n filename: 'barebones.md',\n },\n 'koa-rest-api': {\n added: '3.4.1',\n filename: 'api.md',\n },\n 'lambda-sqs-worker-cdk': {\n added: '3.13.0',\n filename: 'worker.md',\n },\n 'oss-npm-package': {\n added: '3.7.0',\n filename: 'package.md',\n },\n 'private-npm-package': {\n added: '3.6.0',\n filename: 'package.md',\n },\n};\n\nexport type TemplateConfig = z.infer<typeof templateConfigSchema>;\n\n// https://github.com/colinhacks/zod/issues/4143#issuecomment-2845134912\n// https://github.com/colinhacks/zod/issues/4143#issuecomment-2931729793\nconst functionSchema = <T extends z.core.$ZodFunction>(schema: T) =>\n z.custom<Parameters<T['implement']>[0]>().transform((arg, ctx) => {\n if (typeof arg !== 'function') {\n ctx.addIssue('Must be function');\n return z.NEVER;\n }\n return schema.implement(arg);\n });\n\nexport const templateConfigSchema = z.object({\n fields: z.array(\n z.object({\n name: z.string(),\n message: z.string(),\n initial: z.string(),\n validate: functionSchema(\n z.function({\n input: [z.string()],\n output: z.union([z.boolean(), z.string()]),\n }),\n ).optional(),\n }),\n ),\n entryPoint: z.string().optional(),\n noSkip: z.boolean().optional(),\n packageManager: packageManagerSchema,\n type: projectTypeSchema.optional(),\n});\n\nexport const TEMPLATE_CONFIG_FILENAME = 'skuba.template.js';\n\nexport const TEMPLATE_DIR = path.join(__dirname, '..', '..', 'template');\n\nexport const BASE_TEMPLATE_DIR = path.join(TEMPLATE_DIR, 'base');\n\nexport const ensureTemplateConfigDeletion = (dir: string): Promise<void> =>\n fs.promises.rm(path.join(dir, TEMPLATE_CONFIG_FILENAME));\n\nexport const readBaseTemplateFile = (src: string): Promise<string> =>\n fs.promises.readFile(path.join(BASE_TEMPLATE_DIR, src), 'utf8');\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AAEjB,sBAAe;AACf,QAAmB;AAEnB,sBAAkC;AAClC,4BAAqC;AAE9B,MAAM,iBAAiB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAIO,MAAM,0BAA0B,CAAC,GAAG,gBAAgB,eAAU;AAkB9D,MAAM,gCAGT;AAAA,EACF,oBAAoB;AAAA,IAClB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,gBAAgB;AAAA,IACd,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,yBAAyB;AAAA,IACvB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,mBAAmB;AAAA,IACjB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,uBAAuB;AAAA,IACrB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AACF;AAMA,MAAM,iBAAiB,CAAgC,WACrD,EAAE,OAAsC,EAAE,UAAU,CAAC,KAAK,QAAQ;AAChE,MAAI,OAAO,QAAQ,YAAY;AAC7B,QAAI,SAAS,kBAAkB;AAC/B,WAAO,EAAE;AAAA,EACX;AACA,SAAO,OAAO,UAAU,GAAG;AAC7B,CAAC;AAEI,MAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,QAAQ,EAAE;AAAA,IACR,EAAE,OAAO;AAAA,MACP,MAAM,EAAE,OAAO;AAAA,MACf,SAAS,EAAE,OAAO;AAAA,MAClB,SAAS,EAAE,OAAO;AAAA,MAClB,UAAU;AAAA,QACR,EAAE,SAAS;AAAA,UACT,OAAO,CAAC,EAAE,OAAO,CAAC;AAAA,UAClB,QAAQ,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,EAAE,OAAO,CAAC,CAAC;AAAA,QAC3C,CAAC;AAAA,MACH,EAAE,SAAS;AAAA,IACb,CAAC;AAAA,EACH;AAAA,EACA,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAChC,QAAQ,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC7B,gBAAgB;AAAA,EAChB,MAAM,kCAAkB,SAAS;AACnC,CAAC;AAEM,MAAM,2BAA2B;AAEjC,MAAM,eAAe,YAAAA,QAAK,KAAK,WAAW,MAAM,MAAM,UAAU;AAEhE,MAAM,oBAAoB,YAAAA,QAAK,KAAK,cAAc,MAAM;AAExD,MAAM,+BAA+B,CAAC,QAC3C,gBAAAC,QAAG,SAAS,GAAG,YAAAD,QAAK,KAAK,KAAK,wBAAwB,CAAC;AAElD,MAAM,uBAAuB,CAAC,QACnC,gBAAAC,QAAG,SAAS,SAAS,YAAAD,QAAK,KAAK,mBAAmB,GAAG,GAAG,MAAM;",
|
|
6
6
|
"names": ["path", "fs"]
|
|
7
7
|
}
|
package/lib/utils/version.d.ts
CHANGED
|
@@ -1,17 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as z from 'zod/v4';
|
|
2
2
|
declare const NpmVersions: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
3
3
|
name: z.ZodString;
|
|
4
4
|
version: z.ZodString;
|
|
5
5
|
deprecated: z.ZodOptional<z.ZodString>;
|
|
6
|
-
},
|
|
7
|
-
name: string;
|
|
8
|
-
version: string;
|
|
9
|
-
deprecated?: string | undefined;
|
|
10
|
-
}, {
|
|
11
|
-
name: string;
|
|
12
|
-
version: string;
|
|
13
|
-
deprecated?: string | undefined;
|
|
14
|
-
}>>;
|
|
6
|
+
}, z.core.$strip>>;
|
|
15
7
|
export type NpmVersions = z.infer<typeof NpmVersions>;
|
|
16
8
|
export declare const getNpmVersions: (packageName: string) => Promise<NpmVersions | null>;
|
|
17
9
|
export declare const getLatestNpmVersion: (packageName: string) => Promise<string | null>;
|
package/lib/utils/version.js
CHANGED
|
@@ -35,19 +35,19 @@ __export(version_exports, {
|
|
|
35
35
|
});
|
|
36
36
|
module.exports = __toCommonJS(version_exports);
|
|
37
37
|
var import_npm_registry_fetch = __toESM(require("npm-registry-fetch"));
|
|
38
|
-
var
|
|
38
|
+
var z = __toESM(require("zod/v4"));
|
|
39
39
|
var import_manifest = require("./manifest.js");
|
|
40
40
|
var import_wait = require("./wait.js");
|
|
41
|
-
const NpmVersions =
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
name:
|
|
45
|
-
version:
|
|
46
|
-
deprecated:
|
|
41
|
+
const NpmVersions = z.record(
|
|
42
|
+
z.string(),
|
|
43
|
+
z.object({
|
|
44
|
+
name: z.string(),
|
|
45
|
+
version: z.string(),
|
|
46
|
+
deprecated: z.string().optional()
|
|
47
47
|
})
|
|
48
48
|
);
|
|
49
|
-
const PackageResponse =
|
|
50
|
-
"dist-tags":
|
|
49
|
+
const PackageResponse = z.object({
|
|
50
|
+
"dist-tags": z.record(z.string(), z.string()).optional(),
|
|
51
51
|
versions: NpmVersions
|
|
52
52
|
});
|
|
53
53
|
const getNpmPackage = async (packageName) => {
|
package/lib/utils/version.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/version.ts"],
|
|
4
|
-
"sourcesContent": ["import npmFetch from 'npm-registry-fetch';\nimport
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAAqB;AACrB,
|
|
4
|
+
"sourcesContent": ["import npmFetch from 'npm-registry-fetch';\nimport * as z from 'zod/v4';\n\nimport { getSkubaManifest } from './manifest.js';\nimport { withTimeout } from './wait.js';\n\nconst NpmVersions = z.record(\n z.string(),\n z.object({\n name: z.string(),\n version: z.string(),\n deprecated: z.string().optional(),\n }),\n);\n\nexport type NpmVersions = z.infer<typeof NpmVersions>;\n\nconst PackageResponse = z.object({\n 'dist-tags': z.record(z.string(), z.string()).optional(),\n versions: NpmVersions,\n});\n\nconst getNpmPackage = async (packageName: string) => {\n try {\n const response = await npmFetch.json(packageName, {\n headers: {\n Accept:\n 'application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*',\n },\n });\n\n const parsedResponse = PackageResponse.safeParse(response);\n if (!parsedResponse.success) {\n throw new Error(\n `Failed to parse package response from npm for package ${packageName}`,\n );\n }\n\n return parsedResponse.data;\n } catch (error) {\n if (\n error instanceof Error &&\n 'statusCode' in error &&\n error.statusCode === 404\n ) {\n return null;\n }\n throw error;\n }\n};\n\nexport const getNpmVersions = async (\n packageName: string,\n): Promise<NpmVersions | null> => {\n const response = await getNpmPackage(packageName);\n return response?.versions ?? null;\n};\n\nexport const getLatestNpmVersion = async (\n packageName: string,\n): Promise<string | null> => {\n const response = await getNpmPackage(packageName);\n return response?.['dist-tags']?.latest ?? null;\n};\n\nconst latestSkubaVersion = async (): Promise<string | null> => {\n try {\n const result = await withTimeout(getLatestNpmVersion('skuba'), { s: 2 });\n\n return result.ok ? result.value : null;\n } catch {\n return null;\n }\n};\n\nexport const getSkubaVersion = async (): Promise<string> => {\n const { version } = await getSkubaManifest();\n\n return version;\n};\n\ntype SkubaVersionInfo =\n | {\n isStale: true;\n\n local: string;\n latest: string;\n }\n | {\n isStale: false;\n\n local: string;\n latest: string | null;\n };\n\nexport const getSkubaVersionInfo = async (): Promise<SkubaVersionInfo> => {\n const [local, latest] = await Promise.all([\n getSkubaVersion(),\n latestSkubaVersion(),\n ]);\n\n if (latest === null) {\n // Assume we're up to date if we can't reach the npm registry\n return {\n isStale: false,\n local,\n latest,\n };\n }\n\n return {\n isStale: latest !== local,\n local,\n latest,\n };\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAAqB;AACrB,QAAmB;AAEnB,sBAAiC;AACjC,kBAA4B;AAE5B,MAAM,cAAc,EAAE;AAAA,EACpB,EAAE,OAAO;AAAA,EACT,EAAE,OAAO;AAAA,IACP,MAAM,EAAE,OAAO;AAAA,IACf,SAAS,EAAE,OAAO;AAAA,IAClB,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAClC,CAAC;AACH;AAIA,MAAM,kBAAkB,EAAE,OAAO;AAAA,EAC/B,aAAa,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACvD,UAAU;AACZ,CAAC;AAED,MAAM,gBAAgB,OAAO,gBAAwB;AACnD,MAAI;AACF,UAAM,WAAW,MAAM,0BAAAA,QAAS,KAAK,aAAa;AAAA,MAChD,SAAS;AAAA,QACP,QACE;AAAA,MACJ;AAAA,IACF,CAAC;AAED,UAAM,iBAAiB,gBAAgB,UAAU,QAAQ;AACzD,QAAI,CAAC,eAAe,SAAS;AAC3B,YAAM,IAAI;AAAA,QACR,yDAAyD,WAAW;AAAA,MACtE;AAAA,IACF;AAEA,WAAO,eAAe;AAAA,EACxB,SAAS,OAAO;AACd,QACE,iBAAiB,SACjB,gBAAgB,SAChB,MAAM,eAAe,KACrB;AACA,aAAO;AAAA,IACT;AACA,UAAM;AAAA,EACR;AACF;AAEO,MAAM,iBAAiB,OAC5B,gBACgC;AAChC,QAAM,WAAW,MAAM,cAAc,WAAW;AAChD,SAAO,UAAU,YAAY;AAC/B;AAEO,MAAM,sBAAsB,OACjC,gBAC2B;AAC3B,QAAM,WAAW,MAAM,cAAc,WAAW;AAChD,SAAO,WAAW,WAAW,GAAG,UAAU;AAC5C;AAEA,MAAM,qBAAqB,YAAoC;AAC7D,MAAI;AACF,UAAM,SAAS,UAAM,yBAAY,oBAAoB,OAAO,GAAG,EAAE,GAAG,EAAE,CAAC;AAEvE,WAAO,OAAO,KAAK,OAAO,QAAQ;AAAA,EACpC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,MAAM,kBAAkB,YAA6B;AAC1D,QAAM,EAAE,QAAQ,IAAI,UAAM,kCAAiB;AAE3C,SAAO;AACT;AAgBO,MAAM,sBAAsB,YAAuC;AACxE,QAAM,CAAC,OAAO,MAAM,IAAI,MAAM,QAAQ,IAAI;AAAA,IACxC,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,EACrB,CAAC;AAED,MAAI,WAAW,MAAM;AAEnB,WAAO;AAAA,MACL,SAAS;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,SAAS,WAAW;AAAA,IACpB;AAAA,IACA;AAAA,EACF;AACF;",
|
|
6
6
|
"names": ["npmFetch"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "skuba",
|
|
3
|
-
"version": "12.0.0-enable-js-extensions-
|
|
3
|
+
"version": "12.0.0-enable-js-extensions-20250711054343",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "SEEK development toolkit for backend applications and packages",
|
|
6
6
|
"homepage": "https://github.com/seek-oss/skuba#readme",
|
|
@@ -98,7 +98,7 @@
|
|
|
98
98
|
"tsx": "^4.16.2",
|
|
99
99
|
"typescript": "~5.8.0",
|
|
100
100
|
"zod": "^3.25.67",
|
|
101
|
-
"eslint-config-skuba": "7.0.0-enable-js-extensions-
|
|
101
|
+
"eslint-config-skuba": "7.0.0-enable-js-extensions-20250711054343"
|
|
102
102
|
},
|
|
103
103
|
"devDependencies": {
|
|
104
104
|
"@changesets/cli": "2.29.5",
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ErrorMiddleware } from 'seek-koala';
|
|
2
|
-
import type
|
|
2
|
+
import type * as z from 'zod/v4';
|
|
3
|
+
import type * as core from 'zod/v4/core';
|
|
3
4
|
|
|
4
5
|
import type { Context } from 'src/types/koa.js';
|
|
5
6
|
|
|
@@ -59,15 +60,15 @@ const parseTuples = (
|
|
|
59
60
|
return [[path, issue.message]] as const;
|
|
60
61
|
});
|
|
61
62
|
|
|
62
|
-
export const validate = <
|
|
63
|
+
export const validate = <T extends z.ZodType>({
|
|
63
64
|
ctx,
|
|
64
65
|
input,
|
|
65
66
|
schema,
|
|
66
67
|
}: {
|
|
67
68
|
ctx: Context;
|
|
68
69
|
input: unknown;
|
|
69
|
-
schema:
|
|
70
|
-
}):
|
|
70
|
+
schema: T;
|
|
71
|
+
}): z.infer<T> => {
|
|
71
72
|
const parseResult = schema.safeParse(input);
|
|
72
73
|
if (parseResult.success === false) {
|
|
73
74
|
const invalidFields = parseInvalidFieldsFromError(parseResult.error);
|
|
@@ -82,11 +83,11 @@ export const validate = <Output, Input = Output>({
|
|
|
82
83
|
return parseResult.data;
|
|
83
84
|
};
|
|
84
85
|
|
|
85
|
-
export const validateRequestBody = <
|
|
86
|
+
export const validateRequestBody = <T extends z.ZodType>(
|
|
86
87
|
ctx: Context,
|
|
87
|
-
schema:
|
|
88
|
-
):
|
|
89
|
-
validate
|
|
88
|
+
schema: T,
|
|
89
|
+
): z.infer<T> =>
|
|
90
|
+
validate({
|
|
90
91
|
ctx,
|
|
91
92
|
input: ctx.request.body as unknown,
|
|
92
93
|
schema,
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"constructs": "^10.0.17",
|
|
38
38
|
"datadog-cdk-constructs-v2": "^2.0.0",
|
|
39
39
|
"pino-pretty": "^13.0.0",
|
|
40
|
-
"skuba": "12.0.0-enable-js-extensions-
|
|
40
|
+
"skuba": "12.0.0-enable-js-extensions-20250711054343"
|
|
41
41
|
},
|
|
42
42
|
"packageManager": "pnpm@10.12.4",
|
|
43
43
|
"engines": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import type * as z from 'zod/v4';
|
|
2
2
|
|
|
3
|
-
export const validateJson = <
|
|
3
|
+
export const validateJson = <T extends z.ZodType>(
|
|
4
4
|
input: string,
|
|
5
|
-
schema:
|
|
6
|
-
):
|
|
5
|
+
schema: T,
|
|
6
|
+
): z.infer<T> => schema.parse(JSON.parse(input));
|