forked from FINAKON/HelpProject
1. Initial Commit - a boiler plate code and POC to realize the concept of context sensitive help 2. Frontend code written in ReactJS 3. Backend code written in Java, Spring Boot Framework 4. Frontend Start: pre-requisites : node, npm npm run dev ==> to start the frontend vite server 5. Backend Start: pre-requisites : java, mvn mvn spring-boot:run ==> to start the backend server 6. Visit http://localhost:5173/ for basic demo of help, press F1 in textboxes 7. Visit http://localhost:5173/editor and enter "admin123" to add/modify texts. Happy Coding !!! Thank you, Bhargava.
166 lines
5.6 KiB
TypeScript
166 lines
5.6 KiB
TypeScript
//#region src/composable-filters.d.ts
|
|
type StringOrRegExp = string | RegExp;
|
|
// Inline this type to avoid import it from `rolldown`.
|
|
// The only downside is we need to keep it in sync with `rolldown` manually,
|
|
// it is alright since it is pretty stable now.
|
|
type PluginModuleType = "js" | "jsx" | "ts" | "tsx" | "json" | "text" | "base64" | "dataurl" | "binary" | "empty" | (string & {});
|
|
type FilterExpressionKind = FilterExpression["kind"];
|
|
type FilterExpression = And | Or | Not | Id | ModuleType | Code | Query;
|
|
type TopLevelFilterExpression = Include | Exclude;
|
|
declare class And {
|
|
kind: "and";
|
|
args: FilterExpression[];
|
|
constructor(...args: FilterExpression[]);
|
|
}
|
|
declare class Or {
|
|
kind: "or";
|
|
args: FilterExpression[];
|
|
constructor(...args: FilterExpression[]);
|
|
}
|
|
declare class Not {
|
|
kind: "not";
|
|
expr: FilterExpression;
|
|
constructor(expr: FilterExpression);
|
|
}
|
|
interface QueryFilterObject {
|
|
[key: string]: StringOrRegExp | boolean;
|
|
}
|
|
interface IdParams {
|
|
cleanUrl?: boolean;
|
|
}
|
|
declare class Id {
|
|
kind: "id";
|
|
pattern: StringOrRegExp;
|
|
params: IdParams;
|
|
constructor(pattern: StringOrRegExp, params?: IdParams);
|
|
}
|
|
declare class ModuleType {
|
|
kind: "moduleType";
|
|
pattern: PluginModuleType;
|
|
constructor(pattern: PluginModuleType);
|
|
}
|
|
declare class Code {
|
|
kind: "code";
|
|
pattern: StringOrRegExp;
|
|
constructor(expr: StringOrRegExp);
|
|
}
|
|
declare class Query {
|
|
kind: "query";
|
|
key: string;
|
|
pattern: StringOrRegExp | boolean;
|
|
constructor(key: string, pattern: StringOrRegExp | boolean);
|
|
}
|
|
declare class Include {
|
|
kind: "include";
|
|
expr: FilterExpression;
|
|
constructor(expr: FilterExpression);
|
|
}
|
|
declare class Exclude {
|
|
kind: "exclude";
|
|
expr: FilterExpression;
|
|
constructor(expr: FilterExpression);
|
|
}
|
|
declare function and(...args: FilterExpression[]): And;
|
|
declare function or(...args: FilterExpression[]): Or;
|
|
declare function not(expr: FilterExpression): Not;
|
|
declare function id(pattern: StringOrRegExp, params?: IdParams): Id;
|
|
declare function moduleType(pattern: PluginModuleType): ModuleType;
|
|
declare function code(pattern: StringOrRegExp): Code;
|
|
/*
|
|
* There are three kinds of conditions are supported:
|
|
* 1. `boolean`: if the value is `true`, the key must exist and be truthy. if the value is `false`, the key must not exist or be falsy.
|
|
* 2. `string`: the key must exist and be equal to the value.
|
|
* 3. `RegExp`: the key must exist and match the value.
|
|
*/
|
|
declare function query(key: string, pattern: StringOrRegExp | boolean): Query;
|
|
declare function include(expr: FilterExpression): Include;
|
|
declare function exclude(expr: FilterExpression): Exclude;
|
|
/**
|
|
* convert a queryObject to FilterExpression like
|
|
* ```js
|
|
* and(query(k1, v1), query(k2, v2))
|
|
* ```
|
|
* @param queryFilterObject The query filter object needs to be matched.
|
|
* @returns a `And` FilterExpression
|
|
*/
|
|
declare function queries(queryFilter: QueryFilterObject): And;
|
|
declare function interpreter(exprs: TopLevelFilterExpression | TopLevelFilterExpression[], code?: string, id?: string, moduleType?: PluginModuleType): boolean;
|
|
interface InterpreterCtx {
|
|
urlSearchParamsCache?: URLSearchParams;
|
|
}
|
|
declare function interpreterImpl(expr: TopLevelFilterExpression[], code?: string, id?: string, moduleType?: PluginModuleType, ctx?: InterpreterCtx): boolean;
|
|
declare function exprInterpreter(expr: FilterExpression, code?: string, id?: string, moduleType?: PluginModuleType, ctx?: InterpreterCtx): boolean;
|
|
//#endregion
|
|
//#region src/simple-filters.d.ts
|
|
/**
|
|
* Constructs a RegExp that matches the exact string specified.
|
|
*
|
|
* This is useful for plugin hook filters.
|
|
*
|
|
* @param str the string to match.
|
|
* @param flags flags for the RegExp.
|
|
*
|
|
* @example
|
|
* ```ts
|
|
* import { exactRegex } from '@rolldown/pluginutils';
|
|
* const plugin = {
|
|
* name: 'plugin',
|
|
* resolveId: {
|
|
* filter: { id: exactRegex('foo') },
|
|
* handler(id) {} // will only be called for `foo`
|
|
* }
|
|
* }
|
|
* ```
|
|
*/
|
|
declare function exactRegex(str: string, flags?: string): RegExp;
|
|
/**
|
|
* Constructs a RegExp that matches a value that has the specified prefix.
|
|
*
|
|
* This is useful for plugin hook filters.
|
|
*
|
|
* @param str the string to match.
|
|
* @param flags flags for the RegExp.
|
|
*
|
|
* @example
|
|
* ```ts
|
|
* import { prefixRegex } from '@rolldown/pluginutils';
|
|
* const plugin = {
|
|
* name: 'plugin',
|
|
* resolveId: {
|
|
* filter: { id: prefixRegex('foo') },
|
|
* handler(id) {} // will only be called for IDs starting with `foo`
|
|
* }
|
|
* }
|
|
* ```
|
|
*/
|
|
declare function prefixRegex(str: string, flags?: string): RegExp;
|
|
type WidenString<T> = T extends string ? string : T;
|
|
/**
|
|
* Converts a id filter to match with an id with a query.
|
|
*
|
|
* @param input the id filters to convert.
|
|
*
|
|
* @example
|
|
* ```ts
|
|
* import { makeIdFiltersToMatchWithQuery } from '@rolldown/pluginutils';
|
|
* const plugin = {
|
|
* name: 'plugin',
|
|
* transform: {
|
|
* filter: { id: makeIdFiltersToMatchWithQuery(['**' + '/*.js', /\.ts$/]) },
|
|
* // The handler will be called for IDs like:
|
|
* // - foo.js
|
|
* // - foo.js?foo
|
|
* // - foo.txt?foo.js
|
|
* // - foo.ts
|
|
* // - foo.ts?foo
|
|
* // - foo.txt?foo.ts
|
|
* handler(code, id) {}
|
|
* }
|
|
* }
|
|
* ```
|
|
*/
|
|
declare function makeIdFiltersToMatchWithQuery<T extends string | RegExp>(input: T): WidenString<T>;
|
|
declare function makeIdFiltersToMatchWithQuery<T extends string | RegExp>(input: readonly T[]): WidenString<T>[];
|
|
declare function makeIdFiltersToMatchWithQuery(input: string | RegExp | readonly (string | RegExp)[]): string | RegExp | (string | RegExp)[];
|
|
//#endregion
|
|
export { FilterExpression, FilterExpressionKind, QueryFilterObject, TopLevelFilterExpression, and, code, exactRegex, exclude, exprInterpreter, id, include, interpreter, interpreterImpl, makeIdFiltersToMatchWithQuery, moduleType, not, or, prefixRegex, queries, query }; |