@kithinji/pod 1.0.27 → 1.0.28
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/dist/main.js +499 -104
- package/dist/main.js.map +4 -4
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -406,17 +406,17 @@ var MacroDependencyGraph = class {
|
|
|
406
406
|
const visited = /* @__PURE__ */ new Set();
|
|
407
407
|
const inProgress = /* @__PURE__ */ new Set();
|
|
408
408
|
const sorted = [];
|
|
409
|
-
const visit = (key,
|
|
409
|
+
const visit = (key, path16 = []) => {
|
|
410
410
|
if (visited.has(key)) return;
|
|
411
411
|
if (inProgress.has(key)) {
|
|
412
|
-
const cycle = [...
|
|
412
|
+
const cycle = [...path16, key].join(" -> ");
|
|
413
413
|
throw new Error(`Circular macro dependency detected: ${cycle}`);
|
|
414
414
|
}
|
|
415
415
|
const node = this.nodes.get(key);
|
|
416
416
|
if (!node) return;
|
|
417
417
|
inProgress.add(key);
|
|
418
418
|
for (const depKey of node.dependencies) {
|
|
419
|
-
visit(depKey, [...
|
|
419
|
+
visit(depKey, [...path16, key]);
|
|
420
420
|
}
|
|
421
421
|
inProgress.delete(key);
|
|
422
422
|
visited.add(key);
|
|
@@ -1798,22 +1798,22 @@ var ElementTransformer = class {
|
|
|
1798
1798
|
this.jsxUtils = jsxUtils;
|
|
1799
1799
|
this.observableManager = observableManager;
|
|
1800
1800
|
}
|
|
1801
|
-
transformElement(
|
|
1802
|
-
if (this.t.isJSXFragment(
|
|
1801
|
+
transformElement(path16, scope, context2) {
|
|
1802
|
+
if (this.t.isJSXFragment(path16.node)) {
|
|
1803
1803
|
return this.transformFragment(
|
|
1804
|
-
|
|
1804
|
+
path16,
|
|
1805
1805
|
scope,
|
|
1806
1806
|
context2
|
|
1807
1807
|
);
|
|
1808
1808
|
}
|
|
1809
1809
|
return this.transformJSXElement(
|
|
1810
|
-
|
|
1810
|
+
path16,
|
|
1811
1811
|
scope,
|
|
1812
1812
|
context2
|
|
1813
1813
|
);
|
|
1814
1814
|
}
|
|
1815
|
-
transformJSXElement(
|
|
1816
|
-
const jsxElement =
|
|
1815
|
+
transformJSXElement(path16, scope, context2) {
|
|
1816
|
+
const jsxElement = path16.node;
|
|
1817
1817
|
const tag = this.jsxUtils.getComponentName(jsxElement.openingElement.name);
|
|
1818
1818
|
const isComponent = this.jsxUtils.isComponentTag(tag);
|
|
1819
1819
|
if (isComponent && tag) {
|
|
@@ -1928,7 +1928,7 @@ var ElementTransformer = class {
|
|
|
1928
1928
|
}
|
|
1929
1929
|
return { id: elId, statements };
|
|
1930
1930
|
}
|
|
1931
|
-
transformFragment(
|
|
1931
|
+
transformFragment(path16, scope, context2) {
|
|
1932
1932
|
const fragId = scope.generateUidIdentifier("frag");
|
|
1933
1933
|
const statements = [];
|
|
1934
1934
|
statements.push(
|
|
@@ -1946,7 +1946,7 @@ var ElementTransformer = class {
|
|
|
1946
1946
|
])
|
|
1947
1947
|
);
|
|
1948
1948
|
this.processDOMChildren(
|
|
1949
|
-
|
|
1949
|
+
path16.node.children,
|
|
1950
1950
|
fragId,
|
|
1951
1951
|
statements,
|
|
1952
1952
|
scope,
|
|
@@ -2335,7 +2335,7 @@ function j2d({ types: t }) {
|
|
|
2335
2335
|
name: "jsx-to-dom",
|
|
2336
2336
|
visitor: {
|
|
2337
2337
|
Program: {
|
|
2338
|
-
exit(
|
|
2338
|
+
exit(path16, state) {
|
|
2339
2339
|
if (state.helpersImported) return;
|
|
2340
2340
|
const helpers = [
|
|
2341
2341
|
{ local: "$insert", imported: "insert" },
|
|
@@ -2346,7 +2346,7 @@ function j2d({ types: t }) {
|
|
|
2346
2346
|
{ local: "$effect", imported: "effect" }
|
|
2347
2347
|
];
|
|
2348
2348
|
for (const helper of helpers) {
|
|
2349
|
-
|
|
2349
|
+
path16.unshiftContainer(
|
|
2350
2350
|
"body",
|
|
2351
2351
|
t.importDeclaration(
|
|
2352
2352
|
[
|
|
@@ -2362,10 +2362,10 @@ function j2d({ types: t }) {
|
|
|
2362
2362
|
state.helpersImported = true;
|
|
2363
2363
|
}
|
|
2364
2364
|
},
|
|
2365
|
-
ClassMethod(
|
|
2366
|
-
if (
|
|
2365
|
+
ClassMethod(path16) {
|
|
2366
|
+
if (path16.getData("processed")) return;
|
|
2367
2367
|
let hasJSX = false;
|
|
2368
|
-
|
|
2368
|
+
path16.traverse({
|
|
2369
2369
|
JSXElement() {
|
|
2370
2370
|
hasJSX = true;
|
|
2371
2371
|
},
|
|
@@ -2374,11 +2374,11 @@ function j2d({ types: t }) {
|
|
|
2374
2374
|
}
|
|
2375
2375
|
});
|
|
2376
2376
|
if (!hasJSX) return;
|
|
2377
|
-
|
|
2378
|
-
const body =
|
|
2377
|
+
path16.setData("processed", true);
|
|
2378
|
+
const body = path16.node.body;
|
|
2379
2379
|
if (!t.isBlockStatement(body)) return;
|
|
2380
2380
|
const observables = /* @__PURE__ */ new Map();
|
|
2381
|
-
|
|
2381
|
+
path16.traverse({
|
|
2382
2382
|
JSXElement(jsxPath) {
|
|
2383
2383
|
observableManager.collectObservables(
|
|
2384
2384
|
jsxPath.node,
|
|
@@ -2402,7 +2402,7 @@ function j2d({ types: t }) {
|
|
|
2402
2402
|
const observableSignals = /* @__PURE__ */ new Map();
|
|
2403
2403
|
const signalDeclarations = [];
|
|
2404
2404
|
for (const [key, observable] of observables) {
|
|
2405
|
-
const signalId =
|
|
2405
|
+
const signalId = path16.scope.generateUidIdentifier("sig");
|
|
2406
2406
|
observableSignals.set(key, signalId);
|
|
2407
2407
|
signalDeclarations.push(
|
|
2408
2408
|
t.variableDeclaration("const", [
|
|
@@ -2420,7 +2420,7 @@ function j2d({ types: t }) {
|
|
|
2420
2420
|
astUtils.insertBeforeReturn(body.body, signalDeclarations);
|
|
2421
2421
|
}
|
|
2422
2422
|
const context2 = { observables, observableSignals };
|
|
2423
|
-
|
|
2423
|
+
path16.traverse({
|
|
2424
2424
|
JSXElement(jsxPath) {
|
|
2425
2425
|
if (jsxPath.getData("processed")) return;
|
|
2426
2426
|
jsxPath.setData("processed", true);
|
|
@@ -2953,8 +2953,8 @@ async function swcTransform(source, pathStr, tsx = false, react) {
|
|
|
2953
2953
|
resolveDir
|
|
2954
2954
|
};
|
|
2955
2955
|
}
|
|
2956
|
-
function parseFileMetadata(source,
|
|
2957
|
-
const isTsx =
|
|
2956
|
+
function parseFileMetadata(source, path16) {
|
|
2957
|
+
const isTsx = path16.endsWith(".tsx");
|
|
2958
2958
|
const isInteractiveFile = source.startsWith('"use interactive"') || source.startsWith("'use interactive'");
|
|
2959
2959
|
const isPublicFile = source.startsWith('"use public"') || source.startsWith("'use public'");
|
|
2960
2960
|
let directive = null;
|
|
@@ -2962,7 +2962,7 @@ function parseFileMetadata(source, path15) {
|
|
|
2962
2962
|
else if (isPublicFile) directive = "public";
|
|
2963
2963
|
return {
|
|
2964
2964
|
source,
|
|
2965
|
-
path:
|
|
2965
|
+
path: path16,
|
|
2966
2966
|
isTsx,
|
|
2967
2967
|
directive,
|
|
2968
2968
|
isPublicFile,
|
|
@@ -2970,58 +2970,58 @@ function parseFileMetadata(source, path15) {
|
|
|
2970
2970
|
};
|
|
2971
2971
|
}
|
|
2972
2972
|
var ServerBuildTransformer = class {
|
|
2973
|
-
async transformPublicFile(source,
|
|
2974
|
-
const controllerCode = generateController(
|
|
2973
|
+
async transformPublicFile(source, path16) {
|
|
2974
|
+
const controllerCode = generateController(path16, source);
|
|
2975
2975
|
if (controllerCode) {
|
|
2976
2976
|
source = `${source}
|
|
2977
2977
|
|
|
2978
2978
|
${controllerCode}
|
|
2979
2979
|
`;
|
|
2980
2980
|
}
|
|
2981
|
-
return swcTransform(source,
|
|
2981
|
+
return swcTransform(source, path16);
|
|
2982
2982
|
}
|
|
2983
|
-
async transformRegularTypeScript(source,
|
|
2983
|
+
async transformRegularTypeScript(source, path16, isPublic) {
|
|
2984
2984
|
if (isPublic) {
|
|
2985
|
-
return this.transformPublicFile(source,
|
|
2985
|
+
return this.transformPublicFile(source, path16);
|
|
2986
2986
|
}
|
|
2987
|
-
return swcTransform(source,
|
|
2987
|
+
return swcTransform(source, path16);
|
|
2988
2988
|
}
|
|
2989
|
-
async transformServerTsx(source,
|
|
2990
|
-
return swcTransform(source,
|
|
2989
|
+
async transformServerTsx(source, path16) {
|
|
2990
|
+
return swcTransform(source, path16, true, {
|
|
2991
2991
|
runtime: "automatic",
|
|
2992
2992
|
importSource: "@kithinji/orca"
|
|
2993
2993
|
});
|
|
2994
2994
|
}
|
|
2995
|
-
async transformInteractiveTsxStub(source,
|
|
2996
|
-
const stubSource = generateServerStub(
|
|
2997
|
-
return swcTransform(stubSource,
|
|
2995
|
+
async transformInteractiveTsxStub(source, path16) {
|
|
2996
|
+
const stubSource = generateServerStub(path16, source);
|
|
2997
|
+
return swcTransform(stubSource, path16);
|
|
2998
2998
|
}
|
|
2999
2999
|
async process(metadata, onClientFound) {
|
|
3000
3000
|
const expandedSource = await expandMacros(metadata.source, metadata.path);
|
|
3001
3001
|
const expandedMetadata = { ...metadata, source: expandedSource };
|
|
3002
|
-
const { source, path:
|
|
3002
|
+
const { source, path: path16, isTsx, isInteractiveFile, isPublicFile } = expandedMetadata;
|
|
3003
3003
|
if (isTsx) {
|
|
3004
3004
|
if (isInteractiveFile) {
|
|
3005
|
-
onClientFound(
|
|
3006
|
-
const clientCode = await this.transformInteractiveTsxStub(source,
|
|
3005
|
+
onClientFound(path16);
|
|
3006
|
+
const clientCode = await this.transformInteractiveTsxStub(source, path16);
|
|
3007
3007
|
const store = Store.getInstance();
|
|
3008
|
-
store.set(
|
|
3008
|
+
store.set(path16, clientCode.contents);
|
|
3009
3009
|
return clientCode;
|
|
3010
3010
|
}
|
|
3011
|
-
return this.transformServerTsx(source,
|
|
3011
|
+
return this.transformServerTsx(source, path16);
|
|
3012
3012
|
}
|
|
3013
|
-
return this.transformRegularTypeScript(source,
|
|
3013
|
+
return this.transformRegularTypeScript(source, path16, isPublicFile);
|
|
3014
3014
|
}
|
|
3015
3015
|
};
|
|
3016
3016
|
var ClientBuildTransformer = class {
|
|
3017
|
-
async transformInteractiveTsx(source,
|
|
3018
|
-
const swcResult = await swcTransform(source,
|
|
3017
|
+
async transformInteractiveTsx(source, path16) {
|
|
3018
|
+
const swcResult = await swcTransform(source, path16, true, {
|
|
3019
3019
|
runtime: "preserve"
|
|
3020
3020
|
});
|
|
3021
3021
|
const babelResult = await babel.transformAsync(
|
|
3022
3022
|
swcResult.contents,
|
|
3023
3023
|
{
|
|
3024
|
-
filename:
|
|
3024
|
+
filename: path16,
|
|
3025
3025
|
sourceType: "module",
|
|
3026
3026
|
plugins: [j2d],
|
|
3027
3027
|
parserOpts: {
|
|
@@ -3037,37 +3037,37 @@ var ClientBuildTransformer = class {
|
|
|
3037
3037
|
resolveDir: swcResult.resolveDir
|
|
3038
3038
|
};
|
|
3039
3039
|
}
|
|
3040
|
-
async transformServerComponent(node, source,
|
|
3041
|
-
const scSource = generateServerComponent(
|
|
3042
|
-
return swcTransform(scSource,
|
|
3040
|
+
async transformServerComponent(node, source, path16) {
|
|
3041
|
+
const scSource = generateServerComponent(path16, source);
|
|
3042
|
+
return swcTransform(scSource, path16);
|
|
3043
3043
|
}
|
|
3044
|
-
async transformPublicFileRpc(node, source,
|
|
3045
|
-
const stubSource = generateRpcStub(
|
|
3046
|
-
return swcTransform(stubSource,
|
|
3044
|
+
async transformPublicFileRpc(node, source, path16) {
|
|
3045
|
+
const stubSource = generateRpcStub(path16, source);
|
|
3046
|
+
return swcTransform(stubSource, path16);
|
|
3047
3047
|
}
|
|
3048
|
-
async transformSharedCode(source,
|
|
3049
|
-
return swcTransform(source,
|
|
3048
|
+
async transformSharedCode(source, path16) {
|
|
3049
|
+
return swcTransform(source, path16);
|
|
3050
3050
|
}
|
|
3051
3051
|
async process(node, metadata) {
|
|
3052
3052
|
const expandedSource = await expandMacros(metadata.source, metadata.path);
|
|
3053
3053
|
const expandedMetadata = { ...metadata, source: expandedSource };
|
|
3054
|
-
const { source, path:
|
|
3054
|
+
const { source, path: path16, isTsx, directive } = expandedMetadata;
|
|
3055
3055
|
if (isTsx) {
|
|
3056
3056
|
if (directive === "interactive") {
|
|
3057
|
-
return this.transformInteractiveTsx(source,
|
|
3057
|
+
return this.transformInteractiveTsx(source, path16);
|
|
3058
3058
|
} else if (directive === null) {
|
|
3059
|
-
return this.transformServerComponent(node, source,
|
|
3059
|
+
return this.transformServerComponent(node, source, path16);
|
|
3060
3060
|
} else {
|
|
3061
3061
|
throw new Error(
|
|
3062
|
-
`Unexpected directive "${directive}" for TSX file: ${
|
|
3062
|
+
`Unexpected directive "${directive}" for TSX file: ${path16}`
|
|
3063
3063
|
);
|
|
3064
3064
|
}
|
|
3065
3065
|
}
|
|
3066
3066
|
if (directive === "public") {
|
|
3067
|
-
return this.transformPublicFileRpc(node, source,
|
|
3067
|
+
return this.transformPublicFileRpc(node, source, path16);
|
|
3068
3068
|
}
|
|
3069
3069
|
if (directive === null) {
|
|
3070
|
-
return this.transformSharedCode(source,
|
|
3070
|
+
return this.transformSharedCode(source, path16);
|
|
3071
3071
|
}
|
|
3072
3072
|
return {
|
|
3073
3073
|
contents: source,
|
|
@@ -4815,18 +4815,398 @@ bootstrap();
|
|
|
4815
4815
|
`;
|
|
4816
4816
|
}
|
|
4817
4817
|
|
|
4818
|
+
// src/add/ts/index.ts
|
|
4819
|
+
import path12 from "path";
|
|
4820
|
+
import prompts from "prompts";
|
|
4821
|
+
async function addTs(name) {
|
|
4822
|
+
const baseDir = path12.join(process.cwd(), name);
|
|
4823
|
+
const response = await prompts({
|
|
4824
|
+
type: "select",
|
|
4825
|
+
name: "target",
|
|
4826
|
+
message: "Where will this project run?",
|
|
4827
|
+
choices: [
|
|
4828
|
+
{ title: "Browser", value: "browser" },
|
|
4829
|
+
{ title: "Node.js", value: "node" },
|
|
4830
|
+
{ title: "Both (Browser & Node.js)", value: "both" }
|
|
4831
|
+
],
|
|
4832
|
+
initial: 2
|
|
4833
|
+
});
|
|
4834
|
+
if (!response.target) {
|
|
4835
|
+
console.log("Project creation cancelled");
|
|
4836
|
+
process.exit(0);
|
|
4837
|
+
}
|
|
4838
|
+
const target = response.target;
|
|
4839
|
+
const structure = {
|
|
4840
|
+
files: [
|
|
4841
|
+
{ name: "package.json", content: genPackageJson2(name, target) },
|
|
4842
|
+
{ name: "tsconfig.json", content: genTsConfig(target) },
|
|
4843
|
+
{ name: "build.js", content: genBuildConfig(name, target) },
|
|
4844
|
+
{ name: "README.md", content: genReadMe2(name, target) },
|
|
4845
|
+
{ name: ".gitignore", content: genGitIgnore2() },
|
|
4846
|
+
{ name: ".env", content: genEnv2() }
|
|
4847
|
+
],
|
|
4848
|
+
dirs: [
|
|
4849
|
+
{
|
|
4850
|
+
name: "src",
|
|
4851
|
+
files: getSrcFiles(target)
|
|
4852
|
+
}
|
|
4853
|
+
]
|
|
4854
|
+
};
|
|
4855
|
+
createStructure(baseDir, structure);
|
|
4856
|
+
console.log(`TypeScript project created for ${target} environment`);
|
|
4857
|
+
}
|
|
4858
|
+
function getSrcFiles(target) {
|
|
4859
|
+
switch (target) {
|
|
4860
|
+
case "both":
|
|
4861
|
+
return [
|
|
4862
|
+
{ name: "index.ts", content: genIndexTs() },
|
|
4863
|
+
{ name: "index.browser.ts", content: genBrowserIndexTs() },
|
|
4864
|
+
{ name: "index.node.ts", content: genNodeIndexTs() }
|
|
4865
|
+
];
|
|
4866
|
+
case "browser":
|
|
4867
|
+
return [{ name: "index.ts", content: genBrowserIndexTs() }];
|
|
4868
|
+
case "node":
|
|
4869
|
+
return [{ name: "index.ts", content: genNodeIndexTs() }];
|
|
4870
|
+
}
|
|
4871
|
+
}
|
|
4872
|
+
function genPackageJson2(name, target) {
|
|
4873
|
+
const pkg = {
|
|
4874
|
+
name,
|
|
4875
|
+
version: "1.0.0",
|
|
4876
|
+
type: "module",
|
|
4877
|
+
scripts: {
|
|
4878
|
+
build: "node build.js",
|
|
4879
|
+
dev: "node build.js --watch",
|
|
4880
|
+
clean: "rm -rf dist"
|
|
4881
|
+
},
|
|
4882
|
+
devDependencies: {
|
|
4883
|
+
typescript: "^5.9.3",
|
|
4884
|
+
esbuild: "^0.27.2"
|
|
4885
|
+
}
|
|
4886
|
+
};
|
|
4887
|
+
if (target === "node") {
|
|
4888
|
+
pkg.main = "dist/index.mjs";
|
|
4889
|
+
pkg.types = "./dist/types/index.d.ts";
|
|
4890
|
+
} else if (target === "browser") {
|
|
4891
|
+
pkg.main = "dist/index.mjs";
|
|
4892
|
+
pkg.types = "./dist/types/index.d.ts";
|
|
4893
|
+
} else if (target === "both") {
|
|
4894
|
+
pkg.exports = {
|
|
4895
|
+
".": {
|
|
4896
|
+
browser: {
|
|
4897
|
+
import: "./dist/browser/index.mjs"
|
|
4898
|
+
},
|
|
4899
|
+
node: {
|
|
4900
|
+
import: "./dist/node/index.mjs"
|
|
4901
|
+
},
|
|
4902
|
+
types: "./dist/types/index.d.ts"
|
|
4903
|
+
}
|
|
4904
|
+
};
|
|
4905
|
+
}
|
|
4906
|
+
return JSON.stringify(pkg, null, 2);
|
|
4907
|
+
}
|
|
4908
|
+
function genTsConfig(target) {
|
|
4909
|
+
const config = {
|
|
4910
|
+
compilerOptions: {
|
|
4911
|
+
target: "ES2020",
|
|
4912
|
+
module: "ESNext",
|
|
4913
|
+
moduleResolution: "bundler",
|
|
4914
|
+
declaration: true,
|
|
4915
|
+
declarationMap: true,
|
|
4916
|
+
emitDeclarationOnly: true,
|
|
4917
|
+
outDir: "./dist/types",
|
|
4918
|
+
rootDir: "./src",
|
|
4919
|
+
strict: true,
|
|
4920
|
+
esModuleInterop: true,
|
|
4921
|
+
skipLibCheck: true,
|
|
4922
|
+
forceConsistentCasingInFileNames: true,
|
|
4923
|
+
baseUrl: ".",
|
|
4924
|
+
paths: {
|
|
4925
|
+
"@/*": ["./src/*"]
|
|
4926
|
+
}
|
|
4927
|
+
},
|
|
4928
|
+
include: ["src/**/*"],
|
|
4929
|
+
exclude: ["node_modules", "dist"]
|
|
4930
|
+
};
|
|
4931
|
+
if (target === "browser" || target === "both") {
|
|
4932
|
+
config.compilerOptions.lib = ["ES2020", "DOM"];
|
|
4933
|
+
} else {
|
|
4934
|
+
config.compilerOptions.lib = ["ES2020"];
|
|
4935
|
+
}
|
|
4936
|
+
return JSON.stringify(config, null, 2);
|
|
4937
|
+
}
|
|
4938
|
+
function genBuildConfig(name, target) {
|
|
4939
|
+
return `const esbuild = require('esbuild');
|
|
4940
|
+
const { execSync } = require('child_process');
|
|
4941
|
+
const path = require('path');
|
|
4942
|
+
|
|
4943
|
+
const isWatch = process.argv.includes('--watch');
|
|
4944
|
+
|
|
4945
|
+
|
|
4946
|
+
const aliasPlugin = {
|
|
4947
|
+
name: 'alias',
|
|
4948
|
+
setup(build) {
|
|
4949
|
+
build.onResolve({ filter: /^@\\
|
|
4950
|
+
return {
|
|
4951
|
+
path: path.resolve(__dirname, 'src', args.path.slice(2))
|
|
4952
|
+
};
|
|
4953
|
+
});
|
|
4954
|
+
}
|
|
4955
|
+
};
|
|
4956
|
+
|
|
4957
|
+
|
|
4958
|
+
const buildConfigs = ${JSON.stringify(getBuildConfigs(target), null, 2).replace(
|
|
4959
|
+
/"plugins": null/g,
|
|
4960
|
+
'"plugins": [aliasPlugin]'
|
|
4961
|
+
)};
|
|
4962
|
+
|
|
4963
|
+
async function build() {
|
|
4964
|
+
try {
|
|
4965
|
+
execSync('rm -rf dist', { stdio: 'inherit' });
|
|
4966
|
+
|
|
4967
|
+
|
|
4968
|
+
for (const config of buildConfigs) {
|
|
4969
|
+
console.log(\`Building \${config.outfile}...\`);
|
|
4970
|
+
|
|
4971
|
+
if (isWatch) {
|
|
4972
|
+
const ctx = await esbuild.context(config);
|
|
4973
|
+
await ctx.watch();
|
|
4974
|
+
console.log(\`Watching \${config.outfile}...\`);
|
|
4975
|
+
} else {
|
|
4976
|
+
await esbuild.build(config);
|
|
4977
|
+
}
|
|
4978
|
+
}
|
|
4979
|
+
|
|
4980
|
+
console.log('Generating TypeScript declarations...');
|
|
4981
|
+
execSync("npx tsc", {
|
|
4982
|
+
stdio: "inherit",
|
|
4983
|
+
});
|
|
4984
|
+
|
|
4985
|
+
if (!isWatch) {
|
|
4986
|
+
console.log('Build successful!');
|
|
4987
|
+
} else {
|
|
4988
|
+
console.log('Initial build complete. Watching for changes...');
|
|
4989
|
+
}
|
|
4990
|
+
} catch (error) {
|
|
4991
|
+
console.error('Build failed:', error.message);
|
|
4992
|
+
process.exit(1);
|
|
4993
|
+
}
|
|
4994
|
+
}
|
|
4995
|
+
|
|
4996
|
+
build();
|
|
4997
|
+
`;
|
|
4998
|
+
}
|
|
4999
|
+
function getBuildConfigs(target) {
|
|
5000
|
+
const baseConfig = {
|
|
5001
|
+
bundle: true,
|
|
5002
|
+
sourcemap: true,
|
|
5003
|
+
minify: false,
|
|
5004
|
+
plugins: null
|
|
5005
|
+
};
|
|
5006
|
+
switch (target) {
|
|
5007
|
+
case "browser":
|
|
5008
|
+
return [
|
|
5009
|
+
{
|
|
5010
|
+
...baseConfig,
|
|
5011
|
+
entryPoints: ["src/index.ts"],
|
|
5012
|
+
outfile: "dist/index.mjs",
|
|
5013
|
+
platform: "browser",
|
|
5014
|
+
format: "esm",
|
|
5015
|
+
target: ["es2020"],
|
|
5016
|
+
external: []
|
|
5017
|
+
}
|
|
5018
|
+
];
|
|
5019
|
+
case "node":
|
|
5020
|
+
return [
|
|
5021
|
+
{
|
|
5022
|
+
...baseConfig,
|
|
5023
|
+
entryPoints: ["src/index.ts"],
|
|
5024
|
+
outfile: "dist/index.mjs",
|
|
5025
|
+
platform: "node",
|
|
5026
|
+
format: "esm",
|
|
5027
|
+
target: ["node18"],
|
|
5028
|
+
packages: "external"
|
|
5029
|
+
}
|
|
5030
|
+
];
|
|
5031
|
+
case "both":
|
|
5032
|
+
return [
|
|
5033
|
+
{
|
|
5034
|
+
...baseConfig,
|
|
5035
|
+
entryPoints: ["src/index.browser.ts"],
|
|
5036
|
+
outfile: "dist/browser/index.mjs",
|
|
5037
|
+
platform: "browser",
|
|
5038
|
+
format: "esm",
|
|
5039
|
+
target: ["es2020"],
|
|
5040
|
+
external: []
|
|
5041
|
+
},
|
|
5042
|
+
{
|
|
5043
|
+
...baseConfig,
|
|
5044
|
+
entryPoints: ["src/index.node.ts"],
|
|
5045
|
+
outfile: "dist/node/index.mjs",
|
|
5046
|
+
platform: "node",
|
|
5047
|
+
format: "esm",
|
|
5048
|
+
target: ["node18"],
|
|
5049
|
+
packages: "external"
|
|
5050
|
+
}
|
|
5051
|
+
];
|
|
5052
|
+
}
|
|
5053
|
+
}
|
|
5054
|
+
function genReadMe2(name, target) {
|
|
5055
|
+
return `# ${name}
|
|
5056
|
+
|
|
5057
|
+
TypeScript project configured for **${target}** environment(s).
|
|
5058
|
+
|
|
5059
|
+
## Features
|
|
5060
|
+
|
|
5061
|
+
- Fast builds with esbuild
|
|
5062
|
+
- Proper bundling for ${target}
|
|
5063
|
+
- Source maps for debugging
|
|
5064
|
+
- TypeScript declarations
|
|
5065
|
+
- Watch mode for development
|
|
5066
|
+
|
|
5067
|
+
## Installation
|
|
5068
|
+
|
|
5069
|
+
\`\`\`bash
|
|
5070
|
+
npm install
|
|
5071
|
+
\`\`\`
|
|
5072
|
+
|
|
5073
|
+
## Development
|
|
5074
|
+
|
|
5075
|
+
\`\`\`bash
|
|
5076
|
+
npm run dev
|
|
5077
|
+
\`\`\`
|
|
5078
|
+
|
|
5079
|
+
Watch mode will automatically rebuild when you change files.
|
|
5080
|
+
|
|
5081
|
+
## Build
|
|
5082
|
+
|
|
5083
|
+
\`\`\`bash
|
|
5084
|
+
npm run build
|
|
5085
|
+
\`\`\`
|
|
5086
|
+
|
|
5087
|
+
This will:
|
|
5088
|
+
1. Bundle your code with esbuild
|
|
5089
|
+
2. Generate TypeScript declarations
|
|
5090
|
+
3. Create source maps
|
|
5091
|
+
|
|
5092
|
+
## Clean
|
|
5093
|
+
|
|
5094
|
+
\`\`\`bash
|
|
5095
|
+
npm run clean
|
|
5096
|
+
\`\`\`
|
|
5097
|
+
|
|
5098
|
+
${target === "both" ? `
|
|
5099
|
+
## Usage
|
|
5100
|
+
|
|
5101
|
+
This package builds separate bundles for browser and Node.js:
|
|
5102
|
+
|
|
5103
|
+
### In Browser
|
|
5104
|
+
\`\`\`javascript
|
|
5105
|
+
import { platform } from '${name}';
|
|
5106
|
+
|
|
5107
|
+
console.log(platform);
|
|
5108
|
+
\`\`\`
|
|
5109
|
+
|
|
5110
|
+
### In Node.js
|
|
5111
|
+
\`\`\`javascript
|
|
5112
|
+
import { platform } from '${name}';
|
|
5113
|
+
|
|
5114
|
+
console.log(platform);
|
|
5115
|
+
\`\`\`
|
|
5116
|
+
` : target === "browser" ? `
|
|
5117
|
+
## Usage
|
|
5118
|
+
|
|
5119
|
+
\`\`\`javascript
|
|
5120
|
+
import { platform } from '${name}';
|
|
5121
|
+
console.log(platform);
|
|
5122
|
+
\`\`\`
|
|
5123
|
+
|
|
5124
|
+
Include \`dist/index.mjs\` in your HTML or bundle with your favorite bundler.
|
|
5125
|
+
` : `
|
|
5126
|
+
## Usage
|
|
5127
|
+
|
|
5128
|
+
\`\`\`javascript
|
|
5129
|
+
import { platform } from '${name}';
|
|
5130
|
+
console.log(platform);
|
|
5131
|
+
\`\`\`
|
|
5132
|
+
`}
|
|
5133
|
+
|
|
5134
|
+
## Build Output
|
|
5135
|
+
|
|
5136
|
+
- \`dist/*.mjs\` - Bundled JavaScript (ESM)
|
|
5137
|
+
- \`dist/types/*.d.ts\` - TypeScript declarations
|
|
5138
|
+
- \`dist/*.map\` - Source maps
|
|
5139
|
+
`;
|
|
5140
|
+
}
|
|
5141
|
+
function genGitIgnore2() {
|
|
5142
|
+
return `node_modules/
|
|
5143
|
+
dist/
|
|
5144
|
+
.env
|
|
5145
|
+
*.log
|
|
5146
|
+
.DS_Store
|
|
5147
|
+
coverage/
|
|
5148
|
+
.vscode/
|
|
5149
|
+
.idea/
|
|
5150
|
+
*.tsbuildinfo
|
|
5151
|
+
`;
|
|
5152
|
+
}
|
|
5153
|
+
function genEnv2() {
|
|
5154
|
+
return `# Environment variables
|
|
5155
|
+
`;
|
|
5156
|
+
}
|
|
5157
|
+
function genIndexTs() {
|
|
5158
|
+
return `
|
|
5159
|
+
export * from './index.browser.js';
|
|
5160
|
+
export * from './index.node.js';
|
|
5161
|
+
`;
|
|
5162
|
+
}
|
|
5163
|
+
function genBrowserIndexTs() {
|
|
5164
|
+
return `
|
|
5165
|
+
export const platform = 'browser' as const;
|
|
5166
|
+
|
|
5167
|
+
export function getBrowserInfo() {
|
|
5168
|
+
if (typeof window !== 'undefined') {
|
|
5169
|
+
return {
|
|
5170
|
+
userAgent: navigator.userAgent,
|
|
5171
|
+
language: navigator.language,
|
|
5172
|
+
};
|
|
5173
|
+
}
|
|
5174
|
+
return null;
|
|
5175
|
+
}
|
|
5176
|
+
|
|
5177
|
+
console.log('Running in browser environment');
|
|
5178
|
+
`;
|
|
5179
|
+
}
|
|
5180
|
+
function genNodeIndexTs() {
|
|
5181
|
+
return `
|
|
5182
|
+
import { platform as osPlatform, arch } from 'os';
|
|
5183
|
+
|
|
5184
|
+
export const platform = 'node' as const;
|
|
5185
|
+
|
|
5186
|
+
export function getNodeInfo() {
|
|
5187
|
+
return {
|
|
5188
|
+
platform: osPlatform(),
|
|
5189
|
+
arch: arch(),
|
|
5190
|
+
nodeVersion: process.version,
|
|
5191
|
+
};
|
|
5192
|
+
}
|
|
5193
|
+
|
|
5194
|
+
console.log('Running in Node.js environment');
|
|
5195
|
+
`;
|
|
5196
|
+
}
|
|
5197
|
+
|
|
4818
5198
|
// src/main.ts
|
|
4819
|
-
import
|
|
5199
|
+
import path15 from "path";
|
|
4820
5200
|
import { execSync } from "child_process";
|
|
4821
5201
|
|
|
4822
5202
|
// src/docker/docker.ts
|
|
4823
5203
|
import fs10 from "fs-extra";
|
|
4824
|
-
import
|
|
4825
|
-
import
|
|
5204
|
+
import path13 from "path";
|
|
5205
|
+
import prompts2 from "prompts";
|
|
4826
5206
|
import yaml from "js-yaml";
|
|
4827
5207
|
async function dockerize(env = "prod") {
|
|
4828
5208
|
const cwd = process.cwd();
|
|
4829
|
-
const packageJsonPath =
|
|
5209
|
+
const packageJsonPath = path13.join(cwd, "package.json");
|
|
4830
5210
|
if (!fs10.existsSync(packageJsonPath)) {
|
|
4831
5211
|
throw new Error("package.json not found. Are you in a Pod project?");
|
|
4832
5212
|
}
|
|
@@ -4856,7 +5236,7 @@ function detectServices(packageJson) {
|
|
|
4856
5236
|
}
|
|
4857
5237
|
async function selectServices(detected) {
|
|
4858
5238
|
if (detected.length === 0) return [];
|
|
4859
|
-
const response = await
|
|
5239
|
+
const response = await prompts2({
|
|
4860
5240
|
type: "multiselect",
|
|
4861
5241
|
name: "services",
|
|
4862
5242
|
message: "Select services to include:",
|
|
@@ -4870,7 +5250,7 @@ async function selectServices(detected) {
|
|
|
4870
5250
|
return detected.filter((s) => response.services.includes(s.name));
|
|
4871
5251
|
}
|
|
4872
5252
|
async function restructureProject(cwd, projectName) {
|
|
4873
|
-
const nestedDir =
|
|
5253
|
+
const nestedDir = path13.join(cwd, projectName);
|
|
4874
5254
|
if (fs10.existsSync(nestedDir)) {
|
|
4875
5255
|
console.log("\u26A0\uFE0F Project already restructured, skipping...");
|
|
4876
5256
|
return;
|
|
@@ -4879,18 +5259,18 @@ async function restructureProject(cwd, projectName) {
|
|
|
4879
5259
|
const items = await fs10.readdir(cwd);
|
|
4880
5260
|
const toMove = items.filter((item) => item !== projectName);
|
|
4881
5261
|
for (const item of toMove) {
|
|
4882
|
-
const src =
|
|
4883
|
-
const dest =
|
|
5262
|
+
const src = path13.join(cwd, item);
|
|
5263
|
+
const dest = path13.join(nestedDir, item);
|
|
4884
5264
|
await fs10.move(src, dest, { overwrite: true });
|
|
4885
5265
|
}
|
|
4886
|
-
const envSrc =
|
|
4887
|
-
const envDest =
|
|
5266
|
+
const envSrc = path13.join(nestedDir, ".env");
|
|
5267
|
+
const envDest = path13.join(cwd, ".env");
|
|
4888
5268
|
if (fs10.existsSync(envSrc)) {
|
|
4889
5269
|
await fs10.move(envSrc, envDest, { overwrite: true });
|
|
4890
5270
|
}
|
|
4891
5271
|
}
|
|
4892
5272
|
async function writeEnvVars(cwd, services, env) {
|
|
4893
|
-
const envPath =
|
|
5273
|
+
const envPath = path13.join(cwd, ".env");
|
|
4894
5274
|
let existingEnv = {};
|
|
4895
5275
|
let existingContent = "";
|
|
4896
5276
|
if (fs10.existsSync(envPath)) {
|
|
@@ -4947,8 +5327,8 @@ function parseEnvFile(content) {
|
|
|
4947
5327
|
return env;
|
|
4948
5328
|
}
|
|
4949
5329
|
async function createDockerfile(cwd, projectName) {
|
|
4950
|
-
const dockerfilePath =
|
|
4951
|
-
const dockerignorePath =
|
|
5330
|
+
const dockerfilePath = path13.join(cwd, projectName, "Dockerfile");
|
|
5331
|
+
const dockerignorePath = path13.join(cwd, projectName, ".dockerignore");
|
|
4952
5332
|
const dockerfile = `FROM node:18-alpine
|
|
4953
5333
|
|
|
4954
5334
|
WORKDIR /app
|
|
@@ -5138,7 +5518,7 @@ targets:
|
|
|
5138
5518
|
find *backup_path -name "backup-*.tar.gz" -mtime +7 -delete
|
|
5139
5519
|
docker image prune -af --filter "until=24h"
|
|
5140
5520
|
`;
|
|
5141
|
-
const deployFilePath =
|
|
5521
|
+
const deployFilePath = path13.join(cwd, "pod.deploy.yml");
|
|
5142
5522
|
await fs10.writeFile(deployFilePath, deployFile);
|
|
5143
5523
|
}
|
|
5144
5524
|
async function setupProduction(cwd, projectName, services) {
|
|
@@ -5209,14 +5589,14 @@ async function setupProduction(cwd, projectName, services) {
|
|
|
5209
5589
|
}
|
|
5210
5590
|
compose.services[projectName].depends_on.push(service.name);
|
|
5211
5591
|
}
|
|
5212
|
-
const composePath =
|
|
5592
|
+
const composePath = path13.join(cwd, "docker-compose.yml");
|
|
5213
5593
|
await fs10.writeFile(
|
|
5214
5594
|
composePath,
|
|
5215
5595
|
yaml.dump(compose, { indent: 2, lineWidth: -1 })
|
|
5216
5596
|
);
|
|
5217
5597
|
}
|
|
5218
5598
|
async function setupDevelopment(cwd, projectName, services) {
|
|
5219
|
-
const existingCompose =
|
|
5599
|
+
const existingCompose = path13.join(cwd, "docker-compose.yml");
|
|
5220
5600
|
let existingServices = [];
|
|
5221
5601
|
if (fs10.existsSync(existingCompose)) {
|
|
5222
5602
|
const content = await fs10.readFile(existingCompose, "utf8");
|
|
@@ -5227,14 +5607,14 @@ async function setupDevelopment(cwd, projectName, services) {
|
|
|
5227
5607
|
}
|
|
5228
5608
|
const servicesToTunnel = [];
|
|
5229
5609
|
if (existingServices.length > 0) {
|
|
5230
|
-
const { tunnel } = await
|
|
5610
|
+
const { tunnel } = await prompts2({
|
|
5231
5611
|
type: "confirm",
|
|
5232
5612
|
name: "tunnel",
|
|
5233
5613
|
message: "Tunnel to remote database services?",
|
|
5234
5614
|
initial: false
|
|
5235
5615
|
});
|
|
5236
5616
|
if (tunnel) {
|
|
5237
|
-
const { selected } = await
|
|
5617
|
+
const { selected } = await prompts2({
|
|
5238
5618
|
type: "multiselect",
|
|
5239
5619
|
name: "selected",
|
|
5240
5620
|
message: "Select services to tunnel:",
|
|
@@ -5288,14 +5668,14 @@ async function setupDevelopment(cwd, projectName, services) {
|
|
|
5288
5668
|
};
|
|
5289
5669
|
compose.services[projectName].depends_on.push(tunnelName);
|
|
5290
5670
|
}
|
|
5291
|
-
const devComposePath =
|
|
5671
|
+
const devComposePath = path13.join(cwd, "docker-compose.dev.yml");
|
|
5292
5672
|
await fs10.writeFile(
|
|
5293
5673
|
devComposePath,
|
|
5294
5674
|
yaml.dump(compose, { indent: 2, lineWidth: -1 })
|
|
5295
5675
|
);
|
|
5296
5676
|
}
|
|
5297
5677
|
async function createTunnelService(projectDir, serviceName) {
|
|
5298
|
-
const tunnelDir =
|
|
5678
|
+
const tunnelDir = path13.join(projectDir, `${serviceName}-tunnel`);
|
|
5299
5679
|
await fs10.ensureDir(tunnelDir);
|
|
5300
5680
|
const dockerfile = `FROM alpine:latest
|
|
5301
5681
|
|
|
@@ -5324,8 +5704,8 @@ ssh -i $SSH_KEY \\
|
|
|
5324
5704
|
-o ServerAliveInterval=60 \\
|
|
5325
5705
|
$REMOTE_HOST
|
|
5326
5706
|
`;
|
|
5327
|
-
await fs10.writeFile(
|
|
5328
|
-
await fs10.writeFile(
|
|
5707
|
+
await fs10.writeFile(path13.join(tunnelDir, "Dockerfile"), dockerfile);
|
|
5708
|
+
await fs10.writeFile(path13.join(tunnelDir, "tunnel.sh"), tunnelScript);
|
|
5329
5709
|
}
|
|
5330
5710
|
function getServiceConfig(serviceName) {
|
|
5331
5711
|
const configs = {
|
|
@@ -5437,7 +5817,7 @@ function printNextSteps(projectName, env, services) {
|
|
|
5437
5817
|
// src/deploy/deploy.ts
|
|
5438
5818
|
import fs11 from "fs-extra";
|
|
5439
5819
|
import yaml2 from "js-yaml";
|
|
5440
|
-
import
|
|
5820
|
+
import path14 from "path";
|
|
5441
5821
|
import os from "os";
|
|
5442
5822
|
import { NodeSSH } from "node-ssh";
|
|
5443
5823
|
import chalk from "chalk";
|
|
@@ -5468,7 +5848,7 @@ function deepInterpolate(obj, context2) {
|
|
|
5468
5848
|
}
|
|
5469
5849
|
function expandTilde(fp) {
|
|
5470
5850
|
if (!fp || typeof fp !== "string") return fp;
|
|
5471
|
-
return fp.startsWith("~/") ?
|
|
5851
|
+
return fp.startsWith("~/") ? path14.join(os.homedir(), fp.slice(2)) : fp;
|
|
5472
5852
|
}
|
|
5473
5853
|
function resolveLocalPaths(obj, cwd) {
|
|
5474
5854
|
if (Array.isArray(obj)) {
|
|
@@ -5480,7 +5860,7 @@ function resolveLocalPaths(obj, cwd) {
|
|
|
5480
5860
|
const isLocalPathKey = key === "keyPath" || key === "source";
|
|
5481
5861
|
if (isLocalPathKey && typeof value === "string") {
|
|
5482
5862
|
const expanded = expandTilde(value);
|
|
5483
|
-
result[key] =
|
|
5863
|
+
result[key] = path14.isAbsolute(expanded) ? expanded : path14.resolve(cwd, expanded);
|
|
5484
5864
|
} else {
|
|
5485
5865
|
result[key] = resolveLocalPaths(value, cwd);
|
|
5486
5866
|
}
|
|
@@ -5663,7 +6043,7 @@ var SSHStrategy = class {
|
|
|
5663
6043
|
const trimmed = cmd.trim();
|
|
5664
6044
|
if (trimmed.startsWith("cd ")) {
|
|
5665
6045
|
const newPath = trimmed.replace("cd ", "").trim();
|
|
5666
|
-
this.currentDir =
|
|
6046
|
+
this.currentDir = path14.posix.resolve(this.currentDir, newPath);
|
|
5667
6047
|
if (!silent) console.log(chalk.gray(` [SSH Path: ${this.currentDir}]`));
|
|
5668
6048
|
return { stdout: "", stderr: "", code: 0 };
|
|
5669
6049
|
}
|
|
@@ -5691,7 +6071,7 @@ STDERR: ${result.stderr}`);
|
|
|
5691
6071
|
}
|
|
5692
6072
|
}
|
|
5693
6073
|
async uploadContent(remotePath, content) {
|
|
5694
|
-
const localTmp =
|
|
6074
|
+
const localTmp = path14.join(os.tmpdir(), `pod_tmp_${Date.now()}`);
|
|
5695
6075
|
fs11.writeFileSync(localTmp, content);
|
|
5696
6076
|
try {
|
|
5697
6077
|
await this.ssh.execCommand(`mkdir -p $(dirname ${remotePath})`);
|
|
@@ -5712,7 +6092,7 @@ STDERR: ${result.stderr}`);
|
|
|
5712
6092
|
const putOptions = { recursive: true, concurrency: 10 };
|
|
5713
6093
|
if (exclude?.length) {
|
|
5714
6094
|
putOptions.validate = (filePath) => {
|
|
5715
|
-
const relative =
|
|
6095
|
+
const relative = path14.relative(source, filePath);
|
|
5716
6096
|
if (relative === "") return true;
|
|
5717
6097
|
return !exclude.some((pattern) => {
|
|
5718
6098
|
if (pattern.endsWith("/")) {
|
|
@@ -5744,7 +6124,7 @@ var LocalStrategy = class {
|
|
|
5744
6124
|
const trimmed = cmd.trim();
|
|
5745
6125
|
if (trimmed.startsWith("cd ")) {
|
|
5746
6126
|
const newPath = trimmed.replace("cd ", "").trim();
|
|
5747
|
-
this.currentDir =
|
|
6127
|
+
this.currentDir = path14.resolve(this.currentDir, newPath);
|
|
5748
6128
|
if (!silent) console.log(chalk.gray(` [Local Path: ${this.currentDir}]`));
|
|
5749
6129
|
return { stdout: "", stderr: "", code: 0 };
|
|
5750
6130
|
}
|
|
@@ -5767,7 +6147,7 @@ STDERR: ${err.stderr || err.message}`
|
|
|
5767
6147
|
}
|
|
5768
6148
|
async runScript(name, content, context2) {
|
|
5769
6149
|
const interpolated = interpolate(content, context2);
|
|
5770
|
-
const scriptPath =
|
|
6150
|
+
const scriptPath = path14.join(
|
|
5771
6151
|
os.tmpdir(),
|
|
5772
6152
|
`pod_script_${name}_${Date.now()}.sh`
|
|
5773
6153
|
);
|
|
@@ -5780,7 +6160,7 @@ STDERR: ${err.stderr || err.message}`
|
|
|
5780
6160
|
}
|
|
5781
6161
|
}
|
|
5782
6162
|
async uploadContent(localPath, content) {
|
|
5783
|
-
const dir =
|
|
6163
|
+
const dir = path14.dirname(localPath);
|
|
5784
6164
|
if (!fs11.existsSync(dir)) {
|
|
5785
6165
|
fs11.mkdirSync(dir, { recursive: true });
|
|
5786
6166
|
}
|
|
@@ -5817,9 +6197,9 @@ STDERR: ${err.stderr || err.message}`
|
|
|
5817
6197
|
const copyRecursive = (src, dest) => {
|
|
5818
6198
|
const entries = fs11.readdirSync(src, { withFileTypes: true });
|
|
5819
6199
|
for (const entry of entries) {
|
|
5820
|
-
const srcPath =
|
|
5821
|
-
const destPath =
|
|
5822
|
-
const relativePath =
|
|
6200
|
+
const srcPath = path14.join(src, entry.name);
|
|
6201
|
+
const destPath = path14.join(dest, entry.name);
|
|
6202
|
+
const relativePath = path14.relative(source, srcPath);
|
|
5823
6203
|
if (shouldExclude(relativePath)) continue;
|
|
5824
6204
|
if (entry.isDirectory()) {
|
|
5825
6205
|
if (!fs11.existsSync(destPath)) {
|
|
@@ -5990,7 +6370,7 @@ var OperationHandler = class {
|
|
|
5990
6370
|
async function deploy(targetName, options) {
|
|
5991
6371
|
const cwd = process.cwd();
|
|
5992
6372
|
const rawConfig = yaml2.load(
|
|
5993
|
-
fs11.readFileSync(
|
|
6373
|
+
fs11.readFileSync(path14.join(cwd, "pod.deploy.yml"), "utf8"),
|
|
5994
6374
|
{ schema: yaml2.DEFAULT_SCHEMA }
|
|
5995
6375
|
);
|
|
5996
6376
|
const rawTarget = rawConfig.targets?.[targetName];
|
|
@@ -6010,7 +6390,7 @@ Pod Deploy: ${rawConfig.name} v${rawConfig.version} \u2192 ${targetName}
|
|
|
6010
6390
|
const strategy = StrategyFactory.create(target, cwd);
|
|
6011
6391
|
try {
|
|
6012
6392
|
await strategy.connect();
|
|
6013
|
-
const lockPath = target.deployPath ?
|
|
6393
|
+
const lockPath = target.deployPath ? path14.posix.join(target.deployPath, "pod-lock.json") : path14.join(cwd, "pod-lock.json");
|
|
6014
6394
|
let lock = await strategy.readJson(lockPath) || {
|
|
6015
6395
|
ensures: {},
|
|
6016
6396
|
once_actions: []
|
|
@@ -6052,16 +6432,31 @@ Deployment Failed: ${err.message}`));
|
|
|
6052
6432
|
// src/main.ts
|
|
6053
6433
|
import chalk2 from "chalk";
|
|
6054
6434
|
var program = new Command();
|
|
6055
|
-
program.name("pod").description("Pod cli tool").version("1.0.
|
|
6056
|
-
program.command("new <name>").description("Start a new Orca Project").action(async (name) => {
|
|
6057
|
-
|
|
6058
|
-
|
|
6059
|
-
|
|
6060
|
-
|
|
6061
|
-
|
|
6062
|
-
|
|
6063
|
-
|
|
6064
|
-
|
|
6435
|
+
program.name("pod").description("Pod cli tool").version("1.0.28");
|
|
6436
|
+
program.command("new <name> [type]").description("Start a new Orca Project").action(async (name, type) => {
|
|
6437
|
+
const orca = async () => {
|
|
6438
|
+
await addNew(name);
|
|
6439
|
+
const appDir = path15.resolve(process.cwd());
|
|
6440
|
+
const shell = process.platform === "win32" ? process.env.ComSpec || "cmd.exe" : "/bin/sh";
|
|
6441
|
+
console.log("Installing dependencies...");
|
|
6442
|
+
execSync("npm install", { stdio: "inherit", cwd: appDir, shell });
|
|
6443
|
+
console.log("Starting development server...");
|
|
6444
|
+
execSync("npm run dev", { stdio: "inherit", cwd: appDir, shell });
|
|
6445
|
+
console.log(
|
|
6446
|
+
`All done! Your app "${name}" is running in development mode.`
|
|
6447
|
+
);
|
|
6448
|
+
};
|
|
6449
|
+
const ts4 = () => {
|
|
6450
|
+
addTs(name);
|
|
6451
|
+
};
|
|
6452
|
+
switch (type) {
|
|
6453
|
+
case "orca":
|
|
6454
|
+
return await orca();
|
|
6455
|
+
case "ts":
|
|
6456
|
+
return await ts4();
|
|
6457
|
+
default:
|
|
6458
|
+
return await orca();
|
|
6459
|
+
}
|
|
6065
6460
|
});
|
|
6066
6461
|
program.command("dev").description("Start Pod development server").action(async (opts) => {
|
|
6067
6462
|
await startDevServer();
|