@axiomify/cli 3.1.0 ā 5.0.0
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/README.md +56 -52
- package/dist/index.d.mts +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.js +3423 -33
- package/dist/index.mjs +3396 -0
- package/package.json +18 -4
- package/dist/commands/build.d.ts +0 -1
- package/dist/commands/build.js +0 -65
- package/dist/commands/dev.d.ts +0 -1
- package/dist/commands/dev.js +0 -88
- package/dist/commands/init.d.ts +0 -1
- package/dist/commands/init.js +0 -69
- package/dist/commands/routes.d.ts +0 -1
- package/dist/commands/routes.js +0 -106
- package/dist/utils/externals.d.ts +0 -1
- package/dist/utils/externals.js +0 -23
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@axiomify/cli",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.0",
|
|
4
4
|
"bin": {
|
|
5
5
|
"axiomify": "./dist/index.js"
|
|
6
6
|
},
|
|
@@ -11,11 +11,25 @@
|
|
|
11
11
|
"access": "public"
|
|
12
12
|
},
|
|
13
13
|
"scripts": {
|
|
14
|
-
"build": "
|
|
14
|
+
"build": "tsup"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"@axiomify/core": "*",
|
|
18
|
-
"commander": "
|
|
19
|
-
"
|
|
18
|
+
"commander": "12.0.0",
|
|
19
|
+
"enquirer": "^2.4.1",
|
|
20
|
+
"esbuild": "^0.28.0",
|
|
21
|
+
"execa": "^8.0.1",
|
|
22
|
+
"picocolors": "^1.1.1"
|
|
23
|
+
},
|
|
24
|
+
"exports": {
|
|
25
|
+
".": {
|
|
26
|
+
"types": "./dist/index.d.ts",
|
|
27
|
+
"import": "./dist/index.mjs",
|
|
28
|
+
"require": "./dist/index.js"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"module": "./dist/index.mjs",
|
|
32
|
+
"engines": {
|
|
33
|
+
"node": ">=18.0.0"
|
|
20
34
|
}
|
|
21
35
|
}
|
package/dist/commands/build.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function buildProject(entry: string): Promise<void>;
|
package/dist/commands/build.js
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.buildProject = buildProject;
|
|
40
|
-
const esbuild = __importStar(require("esbuild"));
|
|
41
|
-
const path_1 = __importDefault(require("path"));
|
|
42
|
-
const externals_1 = require("../utils/externals");
|
|
43
|
-
async function buildProject(entry) {
|
|
44
|
-
const entryPath = path_1.default.resolve(process.cwd(), entry);
|
|
45
|
-
const outPath = path_1.default.resolve(process.cwd(), 'dist/index.js');
|
|
46
|
-
const userExternals = (0, externals_1.getUserExternals)(process.cwd());
|
|
47
|
-
console.log(`šØ Building production bundle from ${entry}...`);
|
|
48
|
-
try {
|
|
49
|
-
await esbuild.build({
|
|
50
|
-
entryPoints: [entryPath],
|
|
51
|
-
bundle: true,
|
|
52
|
-
platform: 'node',
|
|
53
|
-
target: 'node18',
|
|
54
|
-
outfile: outPath,
|
|
55
|
-
minify: true,
|
|
56
|
-
keepNames: true,
|
|
57
|
-
external: [...new Set([...userExternals, 'node:*'])],
|
|
58
|
-
});
|
|
59
|
-
console.log(`ā
Build successful: ${outPath}`);
|
|
60
|
-
}
|
|
61
|
-
catch (error) {
|
|
62
|
-
console.error('ā Build failed:', error);
|
|
63
|
-
process.exit(1);
|
|
64
|
-
}
|
|
65
|
-
}
|
package/dist/commands/dev.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function devServer(entry: string): Promise<void>;
|
package/dist/commands/dev.js
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.devServer = devServer;
|
|
40
|
-
const child_process_1 = require("child_process");
|
|
41
|
-
const esbuild = __importStar(require("esbuild"));
|
|
42
|
-
const path_1 = __importDefault(require("path"));
|
|
43
|
-
const externals_1 = require("../utils/externals");
|
|
44
|
-
async function devServer(entry) {
|
|
45
|
-
const entryPath = path_1.default.resolve(process.cwd(), entry);
|
|
46
|
-
const outPath = path_1.default.resolve(process.cwd(), '.axiomify/dev.js');
|
|
47
|
-
let child = null;
|
|
48
|
-
const restartServer = () => {
|
|
49
|
-
if (child) {
|
|
50
|
-
// 1. Stop listening to old exit events so we don't accidentally spawn twice
|
|
51
|
-
child.removeAllListeners('exit');
|
|
52
|
-
// 2. ONLY spawn the new server after the old one has completely exited
|
|
53
|
-
child.once('exit', () => {
|
|
54
|
-
child = (0, child_process_1.spawn)('node', [outPath], { stdio: 'inherit' });
|
|
55
|
-
});
|
|
56
|
-
// 3. Ruthlessly kill the old server (bypasses graceful shutdown)
|
|
57
|
-
child.kill('SIGKILL');
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
// First time booting up
|
|
61
|
-
child = (0, child_process_1.spawn)('node', [outPath], { stdio: 'inherit' });
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
|
-
const watchPlugin = {
|
|
65
|
-
name: 'watch-plugin',
|
|
66
|
-
setup(build) {
|
|
67
|
-
build.onEnd((result) => {
|
|
68
|
-
if (result.errors.length > 0) {
|
|
69
|
-
console.error('ā Build failed. Waiting for changes...');
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
restartServer();
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
},
|
|
76
|
-
};
|
|
77
|
-
const userExternals = await (0, externals_1.getUserExternals)(process.cwd());
|
|
78
|
-
const ctx = await esbuild.context({
|
|
79
|
-
entryPoints: [entryPath],
|
|
80
|
-
bundle: true,
|
|
81
|
-
platform: 'node',
|
|
82
|
-
outfile: outPath,
|
|
83
|
-
external: [...new Set([...userExternals, 'node:*'])],
|
|
84
|
-
plugins: [watchPlugin],
|
|
85
|
-
});
|
|
86
|
-
console.log(`š Axiomify Dev Engine watching for changes...`);
|
|
87
|
-
await ctx.watch();
|
|
88
|
-
}
|
package/dist/commands/init.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function initProject(targetDir: string): Promise<void>;
|
package/dist/commands/init.js
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.initProject = initProject;
|
|
7
|
-
const promises_1 = __importDefault(require("fs/promises"));
|
|
8
|
-
const path_1 = __importDefault(require("path"));
|
|
9
|
-
async function initProject(targetDir) {
|
|
10
|
-
const dir = path_1.default.resolve(process.cwd(), targetDir);
|
|
11
|
-
await promises_1.default.mkdir(path_1.default.join(dir, 'src'), { recursive: true });
|
|
12
|
-
const pkgJson = {
|
|
13
|
-
name: 'axiomify-app',
|
|
14
|
-
version: '1.0.0',
|
|
15
|
-
private: true,
|
|
16
|
-
scripts: {
|
|
17
|
-
dev: 'axiomify dev src/index.ts',
|
|
18
|
-
build: 'axiomify build src/index.ts',
|
|
19
|
-
start: 'node dist/index.js',
|
|
20
|
-
routes: 'axiomify routes src/index.ts',
|
|
21
|
-
},
|
|
22
|
-
dependencies: {
|
|
23
|
-
'@axiomify/core': 'latest',
|
|
24
|
-
'@axiomify/express': 'latest',
|
|
25
|
-
},
|
|
26
|
-
devDependencies: {
|
|
27
|
-
typescript: '^5.0.0',
|
|
28
|
-
'@types/node': '^20.0.0',
|
|
29
|
-
},
|
|
30
|
-
};
|
|
31
|
-
const tsConfig = {
|
|
32
|
-
compilerOptions: {
|
|
33
|
-
target: 'ES2022',
|
|
34
|
-
module: 'CommonJS',
|
|
35
|
-
moduleResolution: 'node',
|
|
36
|
-
strict: true,
|
|
37
|
-
esModuleInterop: true,
|
|
38
|
-
skipLibCheck: true,
|
|
39
|
-
forceConsistentCasingInFileNames: true,
|
|
40
|
-
outDir: './dist',
|
|
41
|
-
},
|
|
42
|
-
include: ['src/**/*'],
|
|
43
|
-
};
|
|
44
|
-
const indexTs = `import { Axiomify, z } from '@axiomify/core';
|
|
45
|
-
import { ExpressAdapter } from '@axiomify/express';
|
|
46
|
-
|
|
47
|
-
// Exporting the app instance is required for the 'axiomify routes' CLI command
|
|
48
|
-
export const app = new Axiomify();
|
|
49
|
-
|
|
50
|
-
app.route({
|
|
51
|
-
method: 'GET',
|
|
52
|
-
path: '/health',
|
|
53
|
-
handler: async (req, res) => {
|
|
54
|
-
res.status(200).send({ status: 'healthy', timestamp: Date.now() }, 'System Operational');
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
// Prevent listening during CLI inspection
|
|
59
|
-
if (require.main === module) {
|
|
60
|
-
const adapter = new ExpressAdapter(app);
|
|
61
|
-
adapter.listen(3000, () => console.log('š Axiomify engine online on port 3000'));
|
|
62
|
-
}
|
|
63
|
-
`;
|
|
64
|
-
await promises_1.default.writeFile(path_1.default.join(dir, 'package.json'), JSON.stringify(pkgJson, null, 2));
|
|
65
|
-
await promises_1.default.writeFile(path_1.default.join(dir, 'tsconfig.json'), JSON.stringify(tsConfig, null, 2));
|
|
66
|
-
await promises_1.default.writeFile(path_1.default.join(dir, 'src', 'index.ts'), indexTs);
|
|
67
|
-
console.log(`ā
Axiomify project initialized in ${dir}`);
|
|
68
|
-
console.log(`š¦ Run 'npm install' to install dependencies.`);
|
|
69
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function inspectRoutes(entry: string): Promise<void>;
|
package/dist/commands/routes.js
DELETED
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.inspectRoutes = inspectRoutes;
|
|
40
|
-
const esbuild = __importStar(require("esbuild"));
|
|
41
|
-
const promises_1 = __importDefault(require("fs/promises"));
|
|
42
|
-
const path_1 = __importDefault(require("path"));
|
|
43
|
-
const externals_1 = require("../utils/externals");
|
|
44
|
-
async function inspectRoutes(entry) {
|
|
45
|
-
const entryPath = path_1.default.resolve(process.cwd(), entry);
|
|
46
|
-
const tempPath = path_1.default.resolve(process.cwd(), '.axiomify/inspect.cjs');
|
|
47
|
-
const userExternals = (0, externals_1.getUserExternals)(process.cwd());
|
|
48
|
-
try {
|
|
49
|
-
// 1. Compile the app to a temporary CommonJS file
|
|
50
|
-
await esbuild.build({
|
|
51
|
-
entryPoints: [entryPath],
|
|
52
|
-
bundle: true,
|
|
53
|
-
platform: 'node',
|
|
54
|
-
format: 'cjs',
|
|
55
|
-
outfile: tempPath,
|
|
56
|
-
external: [...new Set([...userExternals, 'node:*'])],
|
|
57
|
-
});
|
|
58
|
-
// 2. Clear require cache to ensure fresh load
|
|
59
|
-
try {
|
|
60
|
-
delete require.cache[require.resolve(tempPath)];
|
|
61
|
-
}
|
|
62
|
-
catch (e) {
|
|
63
|
-
// Ignore if it's the first time and not yet in cache
|
|
64
|
-
}
|
|
65
|
-
// 3. Import the compiled app
|
|
66
|
-
// Since the CLI is CJS, import() becomes require().
|
|
67
|
-
// require() uses raw absolute paths, not file:// URLs.
|
|
68
|
-
const mod = require(tempPath);
|
|
69
|
-
const app = mod.app || mod.default;
|
|
70
|
-
if (!app || typeof app.registeredRoutes === 'undefined') {
|
|
71
|
-
console.error('ā Error: Could not find an exported Axiomify instance.');
|
|
72
|
-
console.error('Ensure your entry file exports the app: `export const app = new Axiomify();`');
|
|
73
|
-
process.exit(1);
|
|
74
|
-
}
|
|
75
|
-
// 4. Format and print the routes
|
|
76
|
-
console.log('\nš§ Registered Axiomify Routes:');
|
|
77
|
-
console.log('----------------------------------------------------');
|
|
78
|
-
console.log(`${'METHOD'.padEnd(10)} | ${'PATH'.padEnd(30)} | VALIDATION`);
|
|
79
|
-
console.log('----------------------------------------------------');
|
|
80
|
-
app.registeredRoutes.forEach((route) => {
|
|
81
|
-
const schemas = [];
|
|
82
|
-
if (route.schema?.body)
|
|
83
|
-
schemas.push('Body');
|
|
84
|
-
if (route.schema?.query)
|
|
85
|
-
schemas.push('Query');
|
|
86
|
-
if (route.schema?.params)
|
|
87
|
-
schemas.push('Params');
|
|
88
|
-
if (route.schema?.response)
|
|
89
|
-
schemas.push('Response');
|
|
90
|
-
if (route.schema?.files)
|
|
91
|
-
schemas.push('Files');
|
|
92
|
-
const validationStr = schemas.length > 0 ? schemas.join(', ') : 'None';
|
|
93
|
-
console.log(`${route.method.padEnd(10)} | ${route.path.padEnd(30)} | ${validationStr}`);
|
|
94
|
-
});
|
|
95
|
-
console.log('----------------------------------------------------\n');
|
|
96
|
-
}
|
|
97
|
-
catch (error) {
|
|
98
|
-
console.error('ā Failed to inspect routes:', error);
|
|
99
|
-
}
|
|
100
|
-
finally {
|
|
101
|
-
// 5. Cleanup temp file
|
|
102
|
-
await promises_1.default
|
|
103
|
-
.rm(path_1.default.dirname(tempPath), { recursive: true, force: true })
|
|
104
|
-
.catch(() => { });
|
|
105
|
-
}
|
|
106
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function getUserExternals(cwd: string): string[];
|
package/dist/utils/externals.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getUserExternals = getUserExternals;
|
|
7
|
-
const fs_1 = __importDefault(require("fs"));
|
|
8
|
-
const path_1 = __importDefault(require("path"));
|
|
9
|
-
function getUserExternals(cwd) {
|
|
10
|
-
try {
|
|
11
|
-
const pkgPath = path_1.default.join(cwd, 'package.json');
|
|
12
|
-
if (fs_1.default.existsSync(pkgPath)) {
|
|
13
|
-
const pkg = JSON.parse(fs_1.default.readFileSync(pkgPath, 'utf8'));
|
|
14
|
-
const deps = Object.keys(pkg.dependencies || {});
|
|
15
|
-
const devDeps = Object.keys(pkg.devDependencies || {});
|
|
16
|
-
return [...deps, ...devDeps];
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
catch (err) {
|
|
20
|
-
console.warn('[Axiomify CLI] Failed to read package.json, defaulting to empty externals.');
|
|
21
|
-
}
|
|
22
|
-
return [];
|
|
23
|
-
}
|