@fireproof/core-cli 0.23.1-dev-issue-1057

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.
@@ -0,0 +1,100 @@
1
+ import { BuildURI } from "@adviser/cement";
2
+ import { AwsClient } from "aws4fetch";
3
+ import { command, option, oneOf, string } from "cmd-ts";
4
+ export function preSignedUrlCmd(sthis) {
5
+ return command({
6
+ name: "pre-signed-url",
7
+ description: "sign a url for cloud storage",
8
+ version: "1.0.0",
9
+ args: {
10
+ method: option({
11
+ long: "method",
12
+ type: oneOf(["GET", "PUT", "POST", "DELETE"]),
13
+ defaultValue: () => "PUT",
14
+ defaultValueIsSerializable: true,
15
+ }),
16
+ accessKeyId: option({
17
+ long: "accessKeyId",
18
+ type: string,
19
+ defaultValue: () => sthis.env.get("ACCESS_KEY_ID") || "accessKeyId",
20
+ defaultValueIsSerializable: true,
21
+ }),
22
+ secretAccessKey: option({
23
+ long: "secretAccessKey",
24
+ type: string,
25
+ defaultValue: () => sthis.env.get("SECRET_ACCESS_KEY") || "secretAccessKey",
26
+ defaultValueIsSerializable: true,
27
+ }),
28
+ region: option({
29
+ long: "region",
30
+ type: string,
31
+ defaultValue: () => "us-east-1",
32
+ defaultValueIsSerializable: true,
33
+ }),
34
+ service: option({
35
+ long: "service",
36
+ type: string,
37
+ defaultValue: () => "s3",
38
+ defaultValueIsSerializable: true,
39
+ }),
40
+ storageURL: option({
41
+ long: "storageURL",
42
+ type: string,
43
+ defaultValue: () => sthis.env.get("STORAGE_URL") || "https://bucket.example.com/db/main",
44
+ defaultValueIsSerializable: true,
45
+ }),
46
+ path: option({
47
+ long: "path",
48
+ type: string,
49
+ defaultValue: () => "db/main",
50
+ defaultValueIsSerializable: true,
51
+ }),
52
+ expires: option({
53
+ long: "expires",
54
+ type: string,
55
+ defaultValue: () => "3600",
56
+ defaultValueIsSerializable: true,
57
+ }),
58
+ now: option({
59
+ long: "now",
60
+ type: {
61
+ async from(str) {
62
+ const decoded = new Date(str);
63
+ if (isNaN(decoded.getTime())) {
64
+ throw new Error("invalid date");
65
+ }
66
+ return decoded
67
+ .toISOString()
68
+ .replace(/[-:]/g, "")
69
+ .replace(/\.\d+Z$/, "Z");
70
+ },
71
+ displayName: "WithoutMillis",
72
+ description: "without milliseconds",
73
+ },
74
+ defaultValue: () => new Date()
75
+ .toISOString()
76
+ .replace(/[-:]/g, "")
77
+ .replace(/\.\d+Z$/, "Z"),
78
+ defaultValueIsSerializable: true,
79
+ }),
80
+ },
81
+ handler: async (args) => {
82
+ const a4f = new AwsClient({
83
+ accessKeyId: args.accessKeyId,
84
+ secretAccessKey: args.secretAccessKey,
85
+ region: args.region,
86
+ service: args.service,
87
+ });
88
+ const buildUrl = BuildURI.from(args.storageURL).appendRelative(args.path).setParam("X-Amz-Expires", args.expires);
89
+ console.log(await a4f
90
+ .sign(new Request(buildUrl.toString(), { method: args.method }), {
91
+ aws: {
92
+ signQuery: true,
93
+ datetime: args.now,
94
+ },
95
+ })
96
+ .then((res) => res.url));
97
+ },
98
+ });
99
+ }
100
+ //# sourceMappingURL=pre-signed-url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pre-signed-url.js","sourceRoot":"","sources":["../jsr/pre-signed-url.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIxD,MAAM,UAAU,eAAe,CAAC,KAAgB;IAC9C,OAAO,OAAO,CAAC;QACb,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,8BAA8B;QAC3C,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE;YACJ,MAAM,EAAE,MAAM,CAAC;gBACb,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAC7C,YAAY,EAAE,GAAG,EAAE,CAAC,KAAK;gBACzB,0BAA0B,EAAE,IAAI;aACjC,CAAC;YACF,WAAW,EAAE,MAAM,CAAC;gBAClB,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,MAAM;gBACZ,YAAY,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,aAAa;gBACnE,0BAA0B,EAAE,IAAI;aACjC,CAAC;YACF,eAAe,EAAE,MAAM,CAAC;gBACtB,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE,MAAM;gBACZ,YAAY,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,iBAAiB;gBAC3E,0BAA0B,EAAE,IAAI;aACjC,CAAC;YACF,MAAM,EAAE,MAAM,CAAC;gBACb,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,MAAM;gBACZ,YAAY,EAAE,GAAG,EAAE,CAAC,WAAW;gBAC/B,0BAA0B,EAAE,IAAI;aACjC,CAAC;YACF,OAAO,EAAE,MAAM,CAAC;gBACd,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,MAAM;gBACZ,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI;gBACxB,0BAA0B,EAAE,IAAI;aACjC,CAAC;YACF,UAAU,EAAE,MAAM,CAAC;gBACjB,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,MAAM;gBACZ,YAAY,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,oCAAoC;gBACxF,0BAA0B,EAAE,IAAI;aACjC,CAAC;YACF,IAAI,EAAE,MAAM,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM;gBACZ,YAAY,EAAE,GAAG,EAAE,CAAC,SAAS;gBAC7B,0BAA0B,EAAE,IAAI;aACjC,CAAC;YACF,OAAO,EAAE,MAAM,CAAC;gBACd,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,MAAM;gBACZ,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM;gBAC1B,0BAA0B,EAAE,IAAI;aACjC,CAAC;YACF,GAAG,EAAE,MAAM,CAAC;gBACV,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE;oBACJ,KAAK,CAAC,IAAI,CAAC,GAAG;wBACZ,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;wBAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;4BAC7B,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;wBAClC,CAAC;wBAED,OAAO,OAAO;6BACX,WAAW,EAAE;6BACb,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;6BACpB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;oBAC7B,CAAC;oBACD,WAAW,EAAE,eAAe;oBAC5B,WAAW,EAAE,sBAAsB;iBACpC;gBAGD,YAAY,EAAE,GAAG,EAAE,CACjB,IAAI,IAAI,EAAE;qBACP,WAAW,EAAE;qBACb,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;qBACpB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;gBAC5B,0BAA0B,EAAE,IAAI;aACjC,CAAC;SACH;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC;gBACxB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAGlH,OAAO,CAAC,GAAG,CACT,MAAM,GAAG;iBACN,IAAI,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;gBAC/D,GAAG,EAAE;oBACH,SAAS,EAAE,IAAI;oBACf,QAAQ,EAAE,IAAI,CAAC,GAAG;iBACnB;aACF,CAAC;iBACD,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAC1B,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { SuperThis } from "@fireproof/core-types-base";
2
+ export declare function setDependenciesCmd(sthis: SuperThis): Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
3
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
4
+ packageJsons: string[];
5
+ depName: string;
6
+ depVersion: string;
7
+ devDependency: boolean;
8
+ peerDependency: boolean;
9
+ }>>;
10
+ } & import("cmd-ts/dist/cjs/helpdoc.js").PrintHelp & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & import("cmd-ts/dist/cjs/helpdoc.js").Named & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned> & import("cmd-ts/dist/cjs/argparser.js").Register & import("cmd-ts/dist/cjs/runner.js").Handling<{
11
+ packageJsons: string[];
12
+ depName: string;
13
+ depVersion: string;
14
+ devDependency: boolean;
15
+ peerDependency: boolean;
16
+ }, Promise<void>> & {
17
+ run(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<Promise<void>>>;
18
+ } & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned & import("cmd-ts/dist/cjs/helpdoc.js").Descriptive & import("cmd-ts/dist/cjs/helpdoc.js").Aliased>;
19
+ export declare function setScriptsCmd(sthis: SuperThis): Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
20
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
21
+ packageJsons: string[];
22
+ scriptName: string;
23
+ scriptAction: string;
24
+ scriptDelete: boolean;
25
+ }>>;
26
+ } & import("cmd-ts/dist/cjs/helpdoc.js").PrintHelp & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & import("cmd-ts/dist/cjs/helpdoc.js").Named & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned> & import("cmd-ts/dist/cjs/argparser.js").Register & import("cmd-ts/dist/cjs/runner.js").Handling<{
27
+ packageJsons: string[];
28
+ scriptName: string;
29
+ scriptAction: string;
30
+ scriptDelete: boolean;
31
+ }, Promise<void>> & {
32
+ run(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<Promise<void>>>;
33
+ } & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned & import("cmd-ts/dist/cjs/helpdoc.js").Descriptive & import("cmd-ts/dist/cjs/helpdoc.js").Aliased>;
@@ -0,0 +1,155 @@
1
+ import { array, command, flag, multioption, option, string } from "cmd-ts";
2
+ import fs from "fs-extra";
3
+ import { glob } from "zx";
4
+ export function setDependenciesCmd(sthis) {
5
+ const cmd = command({
6
+ name: "fireproof set dependencies",
7
+ description: "helps to set dependencies in package.json files",
8
+ version: "1.0.0",
9
+ args: {
10
+ packageJsons: multioption({
11
+ long: "packageJsons",
12
+ short: "p",
13
+ type: array(string),
14
+ defaultValue: () => ["**/package.json"],
15
+ defaultValueIsSerializable: true,
16
+ description: "List of package.json files to patch, defaults to ['**/package.json'].",
17
+ }),
18
+ depName: option({
19
+ long: "depName",
20
+ short: "n",
21
+ type: string,
22
+ description: "The dependency name to set in package.json files.",
23
+ }),
24
+ depVersion: option({
25
+ long: "depVersion",
26
+ short: "v",
27
+ type: string,
28
+ defaultValue: () => "",
29
+ description: "The version of the dependency to set in package.json files.",
30
+ }),
31
+ devDependency: flag({
32
+ long: "devDependency",
33
+ short: "D",
34
+ description: "If set, the dependency will be added to devDependencies instead of dependencies.",
35
+ }),
36
+ peerDependency: flag({
37
+ long: "peerDependency",
38
+ short: "P",
39
+ description: "If set, the dependency will be added to peerDependencies instead of dependencies.",
40
+ }),
41
+ },
42
+ handler: async (args) => {
43
+ const packagesJsonFiles = await glob(args.packageJsons, {
44
+ gitignore: true,
45
+ dot: false,
46
+ ignore: [
47
+ "node_modules/**",
48
+ "**/node_modules/**",
49
+ "dist/**",
50
+ "build/**",
51
+ ".next/**",
52
+ "coverage/**",
53
+ ],
54
+ onlyFiles: true,
55
+ absolute: false,
56
+ caseSensitiveMatch: false,
57
+ });
58
+ console.log(`Found ${packagesJsonFiles.length} package.json files to patch.`);
59
+ for (const packageJsonPath of packagesJsonFiles) {
60
+ const packageJson = await fs.readJSON(packageJsonPath);
61
+ let ref;
62
+ if (args.devDependency) {
63
+ ref = packageJson.devDependencies || {};
64
+ packageJson.devDependencies = ref;
65
+ console.log(`Setting devDependency ${args.depName} to "${args.depVersion}" in ${packageJsonPath}`);
66
+ }
67
+ else if (args.peerDependency) {
68
+ ref = packageJson.peerDependencies || {};
69
+ packageJson.peerDependencies = ref;
70
+ console.log(`Setting peerDependency ${args.depName} to "${args.depVersion}" in ${packageJsonPath}`);
71
+ }
72
+ else {
73
+ ref = packageJson.dependencies || {};
74
+ packageJson.dependencies = ref;
75
+ console.log(`Setting dependency ${args.depName} to "${args.depVersion}" in ${packageJsonPath}`);
76
+ }
77
+ if (!args.depVersion) {
78
+ delete ref[args.depName];
79
+ }
80
+ else {
81
+ ref[args.depName] = args.depVersion;
82
+ }
83
+ await fs.writeJSONSync(packageJsonPath, packageJson, { spaces: 2 });
84
+ }
85
+ },
86
+ });
87
+ return cmd;
88
+ }
89
+ export function setScriptsCmd(sthis) {
90
+ const cmd = command({
91
+ name: "fireproof build cli",
92
+ description: "helps to build fp",
93
+ version: "1.0.0",
94
+ args: {
95
+ packageJsons: multioption({
96
+ long: "packageJsons",
97
+ short: "p",
98
+ type: array(string),
99
+ defaultValue: () => ["**/package.json"],
100
+ defaultValueIsSerializable: true,
101
+ description: "List of package.json files to patch, defaults to ['**/package.json'].",
102
+ }),
103
+ scriptName: option({
104
+ long: "scriptName",
105
+ short: "s",
106
+ type: string,
107
+ description: "The script name to set in package.json files.",
108
+ }),
109
+ scriptAction: option({
110
+ long: "scriptAction",
111
+ short: "a",
112
+ type: string,
113
+ defaultValue: () => "",
114
+ description: "The script action to set in package.json files.",
115
+ }),
116
+ scriptDelete: flag({
117
+ long: "scriptDelete",
118
+ short: "d",
119
+ description: "If set, the script will be deleted instead of set.",
120
+ }),
121
+ },
122
+ handler: async (args) => {
123
+ const packagesJsonFiles = await glob(args.packageJsons, {
124
+ gitignore: true,
125
+ dot: false,
126
+ ignore: [
127
+ "node_modules/**",
128
+ "**/node_modules/**",
129
+ "dist/**",
130
+ "build/**",
131
+ ".next/**",
132
+ "coverage/**",
133
+ ],
134
+ onlyFiles: true,
135
+ absolute: false,
136
+ caseSensitiveMatch: false,
137
+ });
138
+ console.log(`Found ${packagesJsonFiles.length} package.json files to patch.`);
139
+ for (const packageJsonPath of packagesJsonFiles) {
140
+ const packageJson = await fs.readJSON(packageJsonPath);
141
+ if (args.scriptDelete || !args.scriptAction) {
142
+ delete packageJson.scripts[args.scriptName];
143
+ console.log(`Deleting script ${args.scriptName} from ${packageJsonPath}`);
144
+ }
145
+ else {
146
+ packageJson.scripts[args.scriptName] = args.scriptAction;
147
+ console.log(`Setting script ${args.scriptName} to "${args.scriptAction}" in ${packageJsonPath}`);
148
+ }
149
+ await fs.writeJSONSync(packageJsonPath, packageJson, { spaces: 2 });
150
+ }
151
+ },
152
+ });
153
+ return cmd;
154
+ }
155
+ //# sourceMappingURL=set-scripts-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-scripts-cmd.js","sourceRoot":"","sources":["../jsr/set-scripts-cmd.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC3E,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAI1B,MAAM,UAAU,kBAAkB,CAAC,KAAgB;IACjD,MAAM,GAAG,GAAG,OAAO,CAAC;QAClB,IAAI,EAAE,4BAA4B;QAClC,WAAW,EAAE,iDAAiD;QAC9D,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE;YACJ,YAAY,EAAE,WAAW,CAAC;gBACxB,IAAI,EAAE,cAAc;gBACpB,KAAK,EAAE,GAAG;gBACV,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;gBACnB,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,iBAAiB,CAAC;gBACvC,0BAA0B,EAAE,IAAI;gBAChC,WAAW,EAAE,uEAAuE;aACrF,CAAC;YACF,OAAO,EAAE,MAAM,CAAC;gBACd,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,GAAG;gBACV,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,mDAAmD;aACjE,CAAC;YACF,UAAU,EAAE,MAAM,CAAC;gBACjB,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,GAAG;gBACV,IAAI,EAAE,MAAM;gBACZ,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE;gBACtB,WAAW,EAAE,6DAA6D;aAC3E,CAAC;YACF,aAAa,EAAE,IAAI,CAAC;gBAClB,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,GAAG;gBACV,WAAW,EAAE,kFAAkF;aAChG,CAAC;YACF,cAAc,EAAE,IAAI,CAAC;gBACnB,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE,GAAG;gBACV,WAAW,EAAE,mFAAmF;aACjG,CAAC;SACH;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACtD,SAAS,EAAE,IAAI;gBACf,GAAG,EAAE,KAAK;gBACV,MAAM,EAAE;oBAEN,iBAAiB;oBACjB,oBAAoB;oBACpB,SAAS;oBACT,UAAU;oBACV,UAAU;oBACV,aAAa;iBACd;gBACD,SAAS,EAAE,IAAI;gBACf,QAAQ,EAAE,KAAK;gBACf,kBAAkB,EAAE,KAAK;aAC1B,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,SAAS,iBAAiB,CAAC,MAAM,+BAA+B,CAAC,CAAC;YAC9E,KAAK,MAAM,eAAe,IAAI,iBAAiB,EAAE,CAAC;gBAChD,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;gBACvD,IAAI,GAA2B,CAAC;gBAChC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBACvB,GAAG,GAAG,WAAW,CAAC,eAAe,IAAI,EAAE,CAAC;oBACxC,WAAW,CAAC,eAAe,GAAG,GAAG,CAAC;oBAClC,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,CAAC,OAAO,QAAQ,IAAI,CAAC,UAAU,QAAQ,eAAe,EAAE,CAAC,CAAC;gBACrG,CAAC;qBAAM,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;oBAC/B,GAAG,GAAG,WAAW,CAAC,gBAAgB,IAAI,EAAE,CAAC;oBACzC,WAAW,CAAC,gBAAgB,GAAG,GAAG,CAAC;oBACnC,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,CAAC,OAAO,QAAQ,IAAI,CAAC,UAAU,QAAQ,eAAe,EAAE,CAAC,CAAC;gBACtG,CAAC;qBAAM,CAAC;oBACN,GAAG,GAAG,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC;oBACrC,WAAW,CAAC,YAAY,GAAG,GAAG,CAAC;oBAC/B,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,OAAO,QAAQ,IAAI,CAAC,UAAU,QAAQ,eAAe,EAAE,CAAC,CAAC;gBAClG,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;oBAErB,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC3B,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;gBACtC,CAAC;gBACD,MAAM,EAAE,CAAC,aAAa,CAAC,eAAe,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC;AAGD,MAAM,UAAU,aAAa,CAAC,KAAgB;IAC5C,MAAM,GAAG,GAAG,OAAO,CAAC;QAClB,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,mBAAmB;QAChC,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE;YACJ,YAAY,EAAE,WAAW,CAAC;gBACxB,IAAI,EAAE,cAAc;gBACpB,KAAK,EAAE,GAAG;gBACV,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;gBACnB,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,iBAAiB,CAAC;gBACvC,0BAA0B,EAAE,IAAI;gBAChC,WAAW,EAAE,uEAAuE;aACrF,CAAC;YACF,UAAU,EAAE,MAAM,CAAC;gBACjB,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,GAAG;gBACV,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,+CAA+C;aAC7D,CAAC;YACF,YAAY,EAAE,MAAM,CAAC;gBACnB,IAAI,EAAE,cAAc;gBACpB,KAAK,EAAE,GAAG;gBACV,IAAI,EAAE,MAAM;gBACZ,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE;gBACtB,WAAW,EAAE,iDAAiD;aAC/D,CAAC;YACF,YAAY,EAAE,IAAI,CAAC;gBACjB,IAAI,EAAE,cAAc;gBACpB,KAAK,EAAE,GAAG;gBACV,WAAW,EAAE,oDAAoD;aAClE,CAAC;SACH;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACtD,SAAS,EAAE,IAAI;gBACf,GAAG,EAAE,KAAK;gBACV,MAAM,EAAE;oBAEN,iBAAiB;oBACjB,oBAAoB;oBACpB,SAAS;oBACT,UAAU;oBACV,UAAU;oBACV,aAAa;iBACd;gBACD,SAAS,EAAE,IAAI;gBACf,QAAQ,EAAE,KAAK;gBACf,kBAAkB,EAAE,KAAK;aAC1B,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,SAAS,iBAAiB,CAAC,MAAM,+BAA+B,CAAC,CAAC;YAC9E,KAAK,MAAM,eAAe,IAAI,iBAAiB,EAAE,CAAC;gBAChD,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;gBACvD,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;oBAE5C,OAAO,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBAC5C,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,UAAU,SAAS,eAAe,EAAE,CAAC,CAAC;gBAC5E,CAAC;qBAAM,CAAC;oBACN,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;oBACzD,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,UAAU,QAAQ,IAAI,CAAC,YAAY,QAAQ,eAAe,EAAE,CAAC,CAAC;gBACnG,CAAC;gBACD,MAAM,EAAE,CAAC,aAAa,CAAC,eAAe,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC"}
package/tsc-cmd.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ import { SuperThis } from "@fireproof/core-types-base";
2
+ export declare function handleTsc(args: string[], sthis: SuperThis): Promise<void>;
3
+ export declare function tscCmd(sthis: SuperThis): Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
4
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
5
+ help: boolean;
6
+ }>>;
7
+ } & import("cmd-ts/dist/cjs/helpdoc.js").PrintHelp & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & import("cmd-ts/dist/cjs/helpdoc.js").Named & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned> & import("cmd-ts/dist/cjs/argparser.js").Register & import("cmd-ts/dist/cjs/runner.js").Handling<{
8
+ help: boolean;
9
+ }, Promise<void>> & {
10
+ run(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<Promise<void>>>;
11
+ } & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned & import("cmd-ts/dist/cjs/helpdoc.js").Descriptive & import("cmd-ts/dist/cjs/helpdoc.js").Aliased>;
package/tsc-cmd.js ADDED
@@ -0,0 +1,33 @@
1
+ import { command, flag } from "cmd-ts";
2
+ import { findUp } from "find-up";
3
+ import { $ } from "zx";
4
+ export async function handleTsc(args, sthis) {
5
+ const top = await findUp("tsconfig.dist.json");
6
+ if (!top) {
7
+ throw new Error("Could not find tsconfig.dist.json in the project root.");
8
+ }
9
+ const tsc = sthis.env.get("FP_TSC") ?? "tsc";
10
+ const cmd = [tsc, ...args];
11
+ $.verbose = false;
12
+ const p = $({ stdio: ["inherit", "inherit", "inherit"] }) `${cmd}`;
13
+ await p;
14
+ }
15
+ export function tscCmd(sthis) {
16
+ const cmd = command({
17
+ name: "fireproof tsc",
18
+ description: "tsc evolution tsgo",
19
+ args: {
20
+ help: flag({
21
+ long: "help",
22
+ short: "h",
23
+ defaultValue: () => false,
24
+ description: "Show help.",
25
+ }),
26
+ },
27
+ handler: async (args) => {
28
+ handleTsc(args, sthis);
29
+ },
30
+ });
31
+ return cmd;
32
+ }
33
+ //# sourceMappingURL=tsc-cmd.js.map
package/tsc-cmd.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsc-cmd.js","sourceRoot":"","sources":["../jsr/tsc-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,IAAI,CAAC;AAEvB,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAc,EAAE,KAAgB;IAC9D,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAC/C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC;IAE7C,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAG3B,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;IAClB,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,CAAA,GAAG,GAAG,EAAE,CAAC;IAClE,MAAM,CAAC,CAAC;AAGV,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAAgB;IACrC,MAAM,GAAG,GAAG,OAAO,CAAC;QAClB,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,oBAAoB;QACjC,IAAI,EAAE;YACJ,IAAI,EAAE,IAAI,CAAC;gBACT,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,GAAG;gBACV,YAAY,EAAE,GAAG,EAAE,CAAC,KAAK;gBACzB,WAAW,EAAE,YAAY;aAC1B,CAAC;SACH;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,SAAS,CAAC,IAA2B,EAAE,KAAK,CAAC,CAAC;QAChD,CAAC;KACF,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC"}
package/write-env.d.ts ADDED
@@ -0,0 +1,23 @@
1
+ import { SuperThis } from "@fireproof/core-types-base";
2
+ export declare function writeEnvFile(sthis: SuperThis, envFname: string, outFname: string | undefined, env: string, vals: Record<string, string>, doNotOverwrite: boolean, json: boolean): Promise<string>;
3
+ export declare function writeEnvCmd(sthis: SuperThis): Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
4
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
5
+ wranglerToml: string;
6
+ env: string;
7
+ doNotOverwrite: boolean;
8
+ excludeSecrets: boolean;
9
+ fromEnv: string[];
10
+ out: string | undefined;
11
+ json: boolean;
12
+ }>>;
13
+ } & import("cmd-ts/dist/cjs/helpdoc.js").PrintHelp & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & import("cmd-ts/dist/cjs/helpdoc.js").Named & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned> & import("cmd-ts/dist/cjs/argparser.js").Register & import("cmd-ts/dist/cjs/runner.js").Handling<{
14
+ wranglerToml: string;
15
+ env: string;
16
+ doNotOverwrite: boolean;
17
+ excludeSecrets: boolean;
18
+ fromEnv: string[];
19
+ out: string | undefined;
20
+ json: boolean;
21
+ }, Promise<void>> & {
22
+ run(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<Promise<void>>>;
23
+ } & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned & import("cmd-ts/dist/cjs/helpdoc.js").Descriptive & import("cmd-ts/dist/cjs/helpdoc.js").Aliased>;
package/write-env.js ADDED
@@ -0,0 +1,103 @@
1
+ import { command, option, string, flag, optional, array, multioption } from "cmd-ts";
2
+ import * as rt from "@fireproof/core-runtime";
3
+ import { param } from "@adviser/cement";
4
+ import fs from "fs/promises";
5
+ export async function writeEnvFile(sthis, envFname, outFname, env, vals, doNotOverwrite, json) {
6
+ if (outFname === "-") {
7
+ outFname = "/dev/stdout";
8
+ }
9
+ const fname = outFname ?? sthis.pathOps.join(sthis.pathOps.dirname(envFname), `.dev.vars.${env}`);
10
+ if (doNotOverwrite &&
11
+ (await fs
12
+ .stat(fname)
13
+ .then(() => true)
14
+ .catch(() => false))) {
15
+ return fname;
16
+ }
17
+ let render;
18
+ if (json) {
19
+ render = JSON.stringify(vals, null, 2);
20
+ }
21
+ else {
22
+ render = Object.entries(vals)
23
+ .map(([k, v]) => `${k}=${v}`)
24
+ .join("\n");
25
+ }
26
+ await fs.writeFile(outFname ?? fname, render);
27
+ return fname;
28
+ }
29
+ export function writeEnvCmd(sthis) {
30
+ return command({
31
+ name: "cli-write-env",
32
+ description: "write env file",
33
+ version: "1.0.0",
34
+ args: {
35
+ wranglerToml: option({
36
+ long: "wranglerToml",
37
+ type: string,
38
+ defaultValue: () => "./wrangler.toml",
39
+ defaultValueIsSerializable: true,
40
+ }),
41
+ env: option({
42
+ long: "env",
43
+ type: string,
44
+ defaultValue: () => "test",
45
+ defaultValueIsSerializable: true,
46
+ }),
47
+ doNotOverwrite: flag({
48
+ long: "doNotOverwrite",
49
+ }),
50
+ excludeSecrets: flag({
51
+ long: "excludeSecrets",
52
+ }),
53
+ fromEnv: multioption({
54
+ long: "fromEnv",
55
+ type: array(string),
56
+ }),
57
+ out: option({
58
+ long: "out",
59
+ type: optional(string),
60
+ }),
61
+ json: flag({
62
+ long: "json",
63
+ }),
64
+ },
65
+ handler: async (args) => {
66
+ let vals = {};
67
+ if (args.fromEnv.length === 0) {
68
+ vals = {
69
+ [rt.sts.envKeyDefaults.PUBLIC]: param.REQUIRED,
70
+ STORAGE_URL: "http://127.0.0.1:9000/testbucket",
71
+ FP_STORAGE_URL: param.OPTIONAL,
72
+ };
73
+ if (!args.excludeSecrets) {
74
+ vals["ACCESS_KEY_ID"] = "minioadmin";
75
+ vals["SECRET_ACCESS_KEY"] = "minioadmin";
76
+ }
77
+ }
78
+ else {
79
+ Array.from(new Set(args.fromEnv))
80
+ .sort()
81
+ .reduce((acc, i) => {
82
+ const [k, v] = i.split("=");
83
+ if (v === undefined) {
84
+ acc[k] = param.REQUIRED;
85
+ }
86
+ else {
87
+ acc[k] = v;
88
+ }
89
+ return acc;
90
+ }, vals);
91
+ }
92
+ const rVal = sthis.env.gets(vals);
93
+ if (rVal.isErr()) {
94
+ throw rVal.Err();
95
+ }
96
+ const fname = await writeEnvFile(sthis, args.wranglerToml, args.out, args.env, rVal.Ok(), args.doNotOverwrite, args.json);
97
+ if (!["-", "stdout"].find((i) => args.out?.includes(i))) {
98
+ console.log(`Wrote: ${fname} keys: ${JSON.stringify(Object.keys(rVal.Ok()))}`);
99
+ }
100
+ },
101
+ });
102
+ }
103
+ //# sourceMappingURL=write-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-env.js","sourceRoot":"","sources":["../jsr/write-env.ts"],"names":[],"mappings":"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"}