@pactor-app/schema 1.21.0 → 1.22.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/dist/index.cjs CHANGED
@@ -322,11 +322,59 @@ var pageDslSchema = {
322
322
 
323
323
  // src/validate.ts
324
324
  var import_ajv = __toESM(require("ajv"), 1);
325
- var ajv = new import_ajv.default({ allErrors: true, strict: false });
326
- ajv.addSchema(actionConfigSchema);
327
- ajv.addSchema(dslSourceRefSchema);
328
- ajv.addSchema(dslNodeSchema);
329
- ajv.addSchema(pageDslSchema);
325
+ var ajv;
326
+ var codegenUnavailableWarned = false;
327
+ function isCodeGenerationError(error) {
328
+ return error instanceof EvalError || error instanceof Error && /Code generation from strings/.test(error.message);
329
+ }
330
+ function getAjv() {
331
+ if (ajv !== void 0) {
332
+ return ajv;
333
+ }
334
+ try {
335
+ const instance = new import_ajv.default({ allErrors: true, strict: false });
336
+ instance.addSchema(actionConfigSchema);
337
+ instance.addSchema(dslSourceRefSchema);
338
+ instance.addSchema(dslNodeSchema);
339
+ instance.addSchema(pageDslSchema);
340
+ ajv = instance;
341
+ } catch (error) {
342
+ if (isCodeGenerationError(error)) {
343
+ warnCodegenUnavailable();
344
+ ajv = null;
345
+ } else {
346
+ throw error;
347
+ }
348
+ }
349
+ return ajv;
350
+ }
351
+ function warnCodegenUnavailable() {
352
+ if (!codegenUnavailableWarned) {
353
+ codegenUnavailableWarned = true;
354
+ globalThis.console?.warn(
355
+ "[@pactor-app/schema] \u5F53\u524D\u8FD0\u884C\u65F6\u7981\u6B62\u4EE3\u7801\u751F\u6210\uFF08\u5982 Cloudflare Workers\uFF09\uFF0CDSL Schema \u6821\u9A8C\u5DF2\u8DF3\u8FC7"
356
+ );
357
+ }
358
+ }
359
+ function getCompiledValidator(schemaId) {
360
+ const instance = getAjv();
361
+ if (!instance) {
362
+ return void 0;
363
+ }
364
+ try {
365
+ const validate = instance.getSchema(schemaId);
366
+ if (!validate) {
367
+ throw new Error(`schema not registered: ${schemaId}`);
368
+ }
369
+ return validate;
370
+ } catch (error) {
371
+ if (isCodeGenerationError(error)) {
372
+ warnCodegenUnavailable();
373
+ return void 0;
374
+ }
375
+ throw error;
376
+ }
377
+ }
330
378
  function toStructuredErrors(errors) {
331
379
  return errors.map((error) => {
332
380
  let path = error.instancePath || "/";
@@ -343,15 +391,11 @@ function toStructuredErrors(errors) {
343
391
  };
344
392
  });
345
393
  }
346
- function getValidator() {
347
- const validate = ajv.getSchema(PAGE_DSL_SCHEMA_ID);
394
+ function validatePageDsl(document) {
395
+ const validate = getCompiledValidator(PAGE_DSL_SCHEMA_ID);
348
396
  if (!validate) {
349
- throw new Error(`schema not registered: ${PAGE_DSL_SCHEMA_ID}`);
397
+ return { valid: true, errors: [], warnings: collectWarnings(document) };
350
398
  }
351
- return validate;
352
- }
353
- function validatePageDsl(document) {
354
- const validate = getValidator();
355
399
  const valid = validate(document);
356
400
  return {
357
401
  valid,
@@ -376,17 +420,17 @@ function collectWarnings(document) {
376
420
  return [];
377
421
  }
378
422
  function validateDslNode(value) {
379
- const validate = ajv.getSchema(DSL_NODE_SCHEMA_ID);
423
+ const validate = getCompiledValidator(DSL_NODE_SCHEMA_ID);
380
424
  if (!validate) {
381
- throw new Error(`schema not registered: ${DSL_NODE_SCHEMA_ID}`);
425
+ return [];
382
426
  }
383
427
  const valid = validate(value);
384
428
  return valid ? [] : toStructuredErrors(validate.errors ?? []);
385
429
  }
386
430
  function validateDslSourceRef(value) {
387
- const validate = ajv.getSchema(DSL_SOURCE_REF_SCHEMA_ID);
431
+ const validate = getCompiledValidator(DSL_SOURCE_REF_SCHEMA_ID);
388
432
  if (!validate) {
389
- throw new Error(`schema not registered: ${DSL_SOURCE_REF_SCHEMA_ID}`);
433
+ return [];
390
434
  }
391
435
  const valid = validate(value);
392
436
  return valid ? [] : toStructuredErrors(validate.errors ?? []);
package/dist/index.d.cts CHANGED
@@ -549,10 +549,12 @@ interface DslValidationResult {
549
549
  /**
550
550
  * 校验 Page DSL 文档是否符合根结构 Schema。
551
551
  * 校验通过时 errors 为空数组;warnings 为提示级信息(不阻断校验)。
552
+ * 禁代码生成的运行时(如 Cloudflare Workers)跳过 Schema 校验,仅保留 warnings。
552
553
  */
553
554
  declare function validatePageDsl(document: unknown): DslValidationResult;
554
555
  /**
555
556
  * 校验单个 DslNode(如远端动态加载的子树),返回结构化错误列表(空数组为通过)。
557
+ * 禁代码生成的运行时空数组返回(跳过校验)。
556
558
  */
557
559
  declare function validateDslNode(value: unknown): DslValidationError[];
558
560
  /** 校验单个 DslSourceRef(children 数组中的引用元素) */
package/dist/index.d.ts CHANGED
@@ -549,10 +549,12 @@ interface DslValidationResult {
549
549
  /**
550
550
  * 校验 Page DSL 文档是否符合根结构 Schema。
551
551
  * 校验通过时 errors 为空数组;warnings 为提示级信息(不阻断校验)。
552
+ * 禁代码生成的运行时(如 Cloudflare Workers)跳过 Schema 校验,仅保留 warnings。
552
553
  */
553
554
  declare function validatePageDsl(document: unknown): DslValidationResult;
554
555
  /**
555
556
  * 校验单个 DslNode(如远端动态加载的子树),返回结构化错误列表(空数组为通过)。
557
+ * 禁代码生成的运行时空数组返回(跳过校验)。
556
558
  */
557
559
  declare function validateDslNode(value: unknown): DslValidationError[];
558
560
  /** 校验单个 DslSourceRef(children 数组中的引用元素) */
package/dist/index.js CHANGED
@@ -274,11 +274,59 @@ var pageDslSchema = {
274
274
 
275
275
  // src/validate.ts
276
276
  import Ajv from "ajv";
277
- var ajv = new Ajv({ allErrors: true, strict: false });
278
- ajv.addSchema(actionConfigSchema);
279
- ajv.addSchema(dslSourceRefSchema);
280
- ajv.addSchema(dslNodeSchema);
281
- ajv.addSchema(pageDslSchema);
277
+ var ajv;
278
+ var codegenUnavailableWarned = false;
279
+ function isCodeGenerationError(error) {
280
+ return error instanceof EvalError || error instanceof Error && /Code generation from strings/.test(error.message);
281
+ }
282
+ function getAjv() {
283
+ if (ajv !== void 0) {
284
+ return ajv;
285
+ }
286
+ try {
287
+ const instance = new Ajv({ allErrors: true, strict: false });
288
+ instance.addSchema(actionConfigSchema);
289
+ instance.addSchema(dslSourceRefSchema);
290
+ instance.addSchema(dslNodeSchema);
291
+ instance.addSchema(pageDslSchema);
292
+ ajv = instance;
293
+ } catch (error) {
294
+ if (isCodeGenerationError(error)) {
295
+ warnCodegenUnavailable();
296
+ ajv = null;
297
+ } else {
298
+ throw error;
299
+ }
300
+ }
301
+ return ajv;
302
+ }
303
+ function warnCodegenUnavailable() {
304
+ if (!codegenUnavailableWarned) {
305
+ codegenUnavailableWarned = true;
306
+ globalThis.console?.warn(
307
+ "[@pactor-app/schema] \u5F53\u524D\u8FD0\u884C\u65F6\u7981\u6B62\u4EE3\u7801\u751F\u6210\uFF08\u5982 Cloudflare Workers\uFF09\uFF0CDSL Schema \u6821\u9A8C\u5DF2\u8DF3\u8FC7"
308
+ );
309
+ }
310
+ }
311
+ function getCompiledValidator(schemaId) {
312
+ const instance = getAjv();
313
+ if (!instance) {
314
+ return void 0;
315
+ }
316
+ try {
317
+ const validate = instance.getSchema(schemaId);
318
+ if (!validate) {
319
+ throw new Error(`schema not registered: ${schemaId}`);
320
+ }
321
+ return validate;
322
+ } catch (error) {
323
+ if (isCodeGenerationError(error)) {
324
+ warnCodegenUnavailable();
325
+ return void 0;
326
+ }
327
+ throw error;
328
+ }
329
+ }
282
330
  function toStructuredErrors(errors) {
283
331
  return errors.map((error) => {
284
332
  let path = error.instancePath || "/";
@@ -295,15 +343,11 @@ function toStructuredErrors(errors) {
295
343
  };
296
344
  });
297
345
  }
298
- function getValidator() {
299
- const validate = ajv.getSchema(PAGE_DSL_SCHEMA_ID);
346
+ function validatePageDsl(document) {
347
+ const validate = getCompiledValidator(PAGE_DSL_SCHEMA_ID);
300
348
  if (!validate) {
301
- throw new Error(`schema not registered: ${PAGE_DSL_SCHEMA_ID}`);
349
+ return { valid: true, errors: [], warnings: collectWarnings(document) };
302
350
  }
303
- return validate;
304
- }
305
- function validatePageDsl(document) {
306
- const validate = getValidator();
307
351
  const valid = validate(document);
308
352
  return {
309
353
  valid,
@@ -328,17 +372,17 @@ function collectWarnings(document) {
328
372
  return [];
329
373
  }
330
374
  function validateDslNode(value) {
331
- const validate = ajv.getSchema(DSL_NODE_SCHEMA_ID);
375
+ const validate = getCompiledValidator(DSL_NODE_SCHEMA_ID);
332
376
  if (!validate) {
333
- throw new Error(`schema not registered: ${DSL_NODE_SCHEMA_ID}`);
377
+ return [];
334
378
  }
335
379
  const valid = validate(value);
336
380
  return valid ? [] : toStructuredErrors(validate.errors ?? []);
337
381
  }
338
382
  function validateDslSourceRef(value) {
339
- const validate = ajv.getSchema(DSL_SOURCE_REF_SCHEMA_ID);
383
+ const validate = getCompiledValidator(DSL_SOURCE_REF_SCHEMA_ID);
340
384
  if (!validate) {
341
- throw new Error(`schema not registered: ${DSL_SOURCE_REF_SCHEMA_ID}`);
385
+ return [];
342
386
  }
343
387
  const valid = validate(value);
344
388
  return valid ? [] : toStructuredErrors(validate.errors ?? []);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pactor-app/schema",
3
- "version": "1.21.0",
3
+ "version": "1.22.0",
4
4
  "description": "Pactor schema: DSL version constants, JSON Schemas and Ajv-based validator",
5
5
  "keywords": [
6
6
  "pactor",
@@ -46,7 +46,7 @@
46
46
  },
47
47
  "dependencies": {
48
48
  "ajv": "^8.17.1",
49
- "@pactor-app/core": "1.21.0"
49
+ "@pactor-app/core": "1.22.0"
50
50
  },
51
51
  "scripts": {
52
52
  "build": "tsup",