@next-boilerplate/cli-helpers
Version:
CLI helper for Next Boilerplate
47 lines (43 loc) • 1.55 kB
JavaScript
;
var zod = require('zod');
const storeConfigFileName = "config.json";
const storeNameRegex = /^(@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/;
const storeVersionRegex = /^[~^]?[\da-z.-]+$/;
const matchItem = /^((?:@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*)@([~^]?[\da-z.-]+)\/(.*)$/;
const storeSchema = zod.z.object({
name: zod.z.string().regex(storeNameRegex).max(100),
version: zod.z.string().regex(storeVersionRegex).max(100)
});
const storeConfigSchema = zod.z.object({
name: zod.z.string().regex(storeNameRegex).max(100),
version: zod.z.string().regex(storeVersionRegex).max(100)
});
const fullStoreSchema = storeConfigSchema.extend({
uid: zod.z.string(),
fullPath: zod.z.string()
});
const getStoreUID = (store) => `${store.name}@${store.version}`;
const getItemUID = (item) => `${item.store.name}@${item.store.version}/${item.name}`;
const extractItemUID = (itemUID) => {
const match = itemUID.match(matchItem);
if (!match) {
throw new Error(`Invalid item UID: ${itemUID}`);
}
return {
store: {
name: match[1],
version: match[2]
},
name: match[3]
};
};
exports.extractItemUID = extractItemUID;
exports.fullStoreSchema = fullStoreSchema;
exports.getItemUID = getItemUID;
exports.getStoreUID = getStoreUID;
exports.matchItem = matchItem;
exports.storeConfigFileName = storeConfigFileName;
exports.storeConfigSchema = storeConfigSchema;
exports.storeNameRegex = storeNameRegex;
exports.storeSchema = storeSchema;
exports.storeVersionRegex = storeVersionRegex;