one
Version:
One is a new React Framework that makes Vite serve both native and web.
166 lines (164 loc) • 5.47 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all) __defProp(target, name, {
get: all[name],
enumerable: true
});
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
get: () => from[key],
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
});
}
return to;
};
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
value: true
}), mod);
var injectRouteHelpers_exports = {};
__export(injectRouteHelpers_exports, {
injectRouteHelpers: () => injectRouteHelpers
});
module.exports = __toCommonJS(injectRouteHelpers_exports);
var import_fs = require("fs");
var import_promises = require("fs/promises");
async function injectRouteHelpers(filePath, routePath, mode) {
if (!(0, import_fs.existsSync)(filePath)) {
return false;
}
try {
var content = await (0, import_promises.readFile)(filePath, "utf-8");
var modified = false;
var hasTypeRoute = /^type\s+Route\s*=/m.test(content);
var hasConstRoute = /^const\s+route\s*=/m.test(content);
if (mode === "runtime" && !hasConstRoute) {
var {
updatedContent
} = addCreateRouteImport(content);
content = updatedContent;
var routeDeclaration = `const route = createRoute<'${routePath}'>()`;
content = insertAfterImports(content, routeDeclaration);
modified = true;
}
if (mode === "type" && !hasTypeRoute) {
var {
updatedContent: updatedContent1
} = addRouteTypeImport(content);
content = updatedContent1;
var typeDeclaration = `type Route = RouteType<'${routePath}'>`;
content = insertAfterImports(content, typeDeclaration);
modified = true;
}
if (modified) {
await (0, import_promises.writeFile)(filePath, content, "utf-8");
return true;
}
return false;
} catch (error) {
console.error(`Failed to inject route helpers into ${filePath}:`, error);
return false;
}
}
function addCreateRouteImport(content) {
if (/import\s+[^'"]*createRoute[^'"]*from\s+['"]one['"]/m.test(content)) {
return {
updatedContent: content,
importAdded: false
};
}
var oneImportRegex = /import\s+{([^}]*)}\s+from\s+['"]one['"]/m;
var match = content.match(oneImportRegex);
if (match) {
var existingImports = match[1].trim();
var newImports = existingImports ? `${existingImports}, createRoute` : "createRoute";
var updatedContent = content.replace(oneImportRegex, `import { ${newImports} } from 'one'`);
return {
updatedContent,
importAdded: true
};
}
var lastImportIndex = findLastImportIndex(content);
if (lastImportIndex >= 0) {
var lines = content.split("\n");
lines.splice(lastImportIndex + 1, 0, `import { createRoute } from 'one'`);
return {
updatedContent: lines.join("\n"),
importAdded: true
};
}
var newImport = `import { createRoute } from 'one'
`;
return {
updatedContent: newImport + content,
importAdded: true
};
}
function addRouteTypeImport(content) {
if (/import\s+type\s+[^'"]*RouteType[^'"]*from\s+['"]one['"]/m.test(content)) {
return {
updatedContent: content,
importAdded: false
};
}
var oneTypeImportRegex = /import\s+type\s+{([^}]*)}\s+from\s+['"]one['"]/m;
var match = content.match(oneTypeImportRegex);
if (match) {
var existingImports = match[1].trim();
var newImports = existingImports ? `${existingImports}, RouteType` : "RouteType";
var updatedContent = content.replace(oneTypeImportRegex, `import type { ${newImports} } from 'one'`);
return {
updatedContent,
importAdded: true
};
}
var lastImportIndex = findLastImportIndex(content);
if (lastImportIndex >= 0) {
var lines = content.split("\n");
lines.splice(lastImportIndex + 1, 0, `import type { RouteType } from 'one'`);
return {
updatedContent: lines.join("\n"),
importAdded: true
};
}
var newImport = `import type { RouteType } from 'one'
`;
return {
updatedContent: newImport + content,
importAdded: true
};
}
function findLastImportIndex(content) {
var lines = content.split("\n");
var lastImportIndex = -1;
for (var i = 0; i < lines.length; i++) {
var line = lines[i].trim();
if (line.startsWith("import ") || lastImportIndex >= 0 && (line.startsWith("from ") || line === "}")) {
lastImportIndex = i;
} else if (lastImportIndex >= 0 && line && !line.startsWith("//")) {
break;
}
}
return lastImportIndex;
}
function insertAfterImports(content, codeToInsert) {
var lines = content.split("\n");
var lastImportIndex = findLastImportIndex(content);
if (lastImportIndex >= 0) {
var nextLine = lines[lastImportIndex + 1];
var hasBlankLine = nextLine === "";
if (hasBlankLine) {
lines.splice(lastImportIndex + 2, 0, codeToInsert, "");
} else {
lines.splice(lastImportIndex + 1, 0, "", codeToInsert, "");
}
return lines.join("\n");
}
return codeToInsert + "\n\n" + content;
}
//# sourceMappingURL=injectRouteHelpers.native.js.map