lemon-devkit
Version:
Lemon Serverless Micro-Service Platform for local development
94 lines • 4.57 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.installProxyDocs = exports.upsertProxyReadmeBlock = exports.proxyReadmeBlock = void 0;
/**
* `install.ts`
* - install/update proxy guide into consumer projects.
*
* @author Claire <claire@lemoncloud.io>
* @date 2026-05-08 added proxy doc installer.
* @copyright (C) lemoncloud.io 2026 - All Rights Reserved.
*/
const fs = __importStar(require("fs"));
const path = __importStar(require("path"));
const README_BLOCK_START = '<!-- lemon-devkit:proxy-doc:start -->';
const README_BLOCK_END = '<!-- lemon-devkit:proxy-doc:end -->';
const readText = (file) => fs.readFileSync(file, 'utf8');
const writeTextIfChanged = (file, next) => {
const prev = fs.existsSync(file) ? readText(file) : '';
if (prev === next)
return false;
fs.mkdirSync(path.dirname(file), { recursive: true });
fs.writeFileSync(file, next, 'utf8');
return true;
};
const proxyReadmeBlock = (docRelPath = 'docs/proxy-implementation-guide.md') => [
README_BLOCK_START,
'## Proxy',
'',
'`lemon-devkit@0.0.12`부터 install/upgrade 시 consumer project의 `docs/proxy-implementation-guide.md`와 `README.md`에 proxy 구현 가이드를 자동 반영한다.',
`Proxy 기능을 추가하거나 변경할 때는 [lemon-devkit proxy implementation guide](${docRelPath})를 먼저 확인한다.`,
'`BackendProxy`, `ManagerProxy`, `guardProxy()` 계열 동작과 프로젝트 적용 절차는 이 문서 기준으로 맞춘다.',
README_BLOCK_END,
].join('\n');
exports.proxyReadmeBlock = proxyReadmeBlock;
const upsertProxyReadmeBlock = (readme, docRelPath = 'docs/proxy-implementation-guide.md') => {
const block = (0, exports.proxyReadmeBlock)(docRelPath);
const pattern = new RegExp(`${README_BLOCK_START}[\\s\\S]*?${README_BLOCK_END}`);
if (pattern.test(readme))
return readme.replace(pattern, block);
const trimmed = readme.trimEnd();
return `${trimmed}${trimmed ? '\n\n' : ''}${block}\n`;
};
exports.upsertProxyReadmeBlock = upsertProxyReadmeBlock;
const installProxyDocs = (options) => {
const projectRoot = path.resolve(options.projectRoot);
const packageRoot = path.resolve(options.packageRoot);
const sourceDocPath = path.join(packageRoot, 'docs/proxy-implementation-guide.md');
const proxyDocPath = path.join(projectRoot, 'docs/proxy-implementation-guide.md');
const readmePath = path.join(projectRoot, 'README.md');
const overwrite = options.overwrite !== false;
if (!fs.existsSync(sourceDocPath))
throw new Error(`proxy doc not found: ${sourceDocPath}`);
const sourceDoc = readText(sourceDocPath);
const copied = overwrite || !fs.existsSync(proxyDocPath) ? writeTextIfChanged(proxyDocPath, sourceDoc) : false;
const prevReadme = fs.existsSync(readmePath) ? readText(readmePath) : `# ${path.basename(projectRoot)}\n`;
const nextReadme = (0, exports.upsertProxyReadmeBlock)(prevReadme);
const readmeUpdated = writeTextIfChanged(readmePath, nextReadme);
return { copied, readmeUpdated, proxyDocPath, readmePath };
};
exports.installProxyDocs = installProxyDocs;
//# sourceMappingURL=install.js.map