@plan2net/typo3-playwright-toolkit 0.5.0 → 0.6.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/README.md CHANGED
@@ -47,9 +47,10 @@ Add a `tsconfig.json` next to your tests that extends the one shipped here:
47
47
  }
48
48
  ```
49
49
 
50
- Important: this package is ESM and needs `"moduleResolution": "NodeNext"`. Without
51
- it TypeScript cannot read the package's exports, so `page` and `state` in your tests
52
- type as `any` and you lose every check your editor could give you.
50
+ > [!IMPORTANT]
51
+ > This package is ESM and needs `"moduleResolution": "NodeNext"`. Without it
52
+ > TypeScript cannot read the package's exports, so `page` and `state` in your tests
53
+ > type as `any` and you lose every check your editor could give you.
53
54
 
54
55
  ## Configure
55
56
 
@@ -82,8 +83,9 @@ directory is not an error: the run works and writes its state somewhere you did
82
83
  expect. Use `fileURLToPath` rather than `new URL(...).pathname`, which
83
84
  percent-encodes a project path containing spaces or non-ASCII characters.
84
85
 
85
- Important: `defineToolkitConfig` must run before the first import from this package.
86
- Everything else reads the values it stores.
86
+ > [!IMPORTANT]
87
+ > `defineToolkitConfig` must run before the first import from this package.
88
+ > Everything else reads the values it stores.
87
89
 
88
90
  ## Using the package
89
91
 
@@ -209,6 +211,50 @@ A key with the name of a core CType replaces the built-in builder, and the other
209
211
  core types stay as they are. That works for the type too: `ContentTypeMap` starts
210
212
  empty, so your `text: MyTextContent` is what `.configure()` hands you.
211
213
 
214
+ ### Files and child records
215
+
216
+ Four setters attach a relation, and they work the same on a content type, on a
217
+ child record, and on the builder in a test:
218
+
219
+ ```ts
220
+ export class AccordionContent extends CoreContent {
221
+ readonly type = 'accordion'
222
+
223
+ withItems(items: AccordionItem[]): this {
224
+ return this.withChildren('items', 'tx_myext_accordion_item', items, (item, data) =>
225
+ item
226
+ .withField('title', data.title)
227
+ .withFileReference('image', data.imageId),
228
+ )
229
+ }
230
+ }
231
+ ```
232
+
233
+ `withFileReference(column, fileUid)` and `withFileReferences(column, fileUids)` take
234
+ the reference's own fields as a third argument, such as a `crop`. `withChild` and
235
+ `withChildren` hand the callback a record with the same four setters, so a child can
236
+ carry its own files and children.
237
+
238
+ The order you call them in is the order the records get. A child takes `pid` and
239
+ `sys_language_uid` from the record above it, so a translation sets the language once,
240
+ at the top.
241
+
242
+ Never set `uid_local`, `uid_foreign`, `tablenames`, `fieldname` or `sorting_foreign`:
243
+ the toolkit writes them, and your own value fails. A wrong `uid_foreign` saves a row
244
+ that points at nothing, and TYPO3 reports no error.
245
+
246
+ If a builder has no setter for a column, add the relation in the test:
247
+
248
+ ```ts
249
+ await builders.content().onPage(page.id).ofType('textmedia')
250
+ .configure((element) => element.withHeader('Gallery', 'h2'))
251
+ .withFileReferences('assets', [1, 2], { crop: imageCrop({ ratio: '16:9' }) })
252
+ .create()
253
+ ```
254
+
255
+ Fill a column from one place only. Both the content type and the test, or `withField`
256
+ on top, fails.
257
+
212
258
  ### Calling the site directly
213
259
 
214
260
  The `request` client — the one `defineScenario` hands your setup, and the `request`
@@ -271,8 +317,9 @@ await runAccessibilityScan(page, { exclude: '#ads' })
271
317
  await runAccessibilityScan(page, { disabledRules: ['color-contrast'] })
272
318
  ```
273
319
 
274
- Important: the test also fails when the check ran no rules at all. An empty area
275
- would otherwise pass without testing anything.
320
+ > [!IMPORTANT]
321
+ > The test also fails when the check ran no rules at all. An empty area would
322
+ > otherwise pass without testing anything.
276
323
 
277
324
  A check with `include` turns off the `heading-order` rule, because axe compares the
278
325
  headings of a part of the page with the structure of the whole page. Checks of a
@@ -307,8 +354,9 @@ await page.goto('/')
307
354
  await verifier.assertNoViolations(testInfo) // testInfo is optional
308
355
  ```
309
356
 
310
- Important: `install()` must run before anything is loaded. A page that is already
311
- open reports nothing.
357
+ > [!IMPORTANT]
358
+ > `install()` must run before anything is loaded. A page that is already open
359
+ > reports nothing.
312
360
 
313
361
  The test also fails if pages were requested but none of your own pages ever arrived,
314
362
  so a navigation that never loaded cannot pass. Pass `testInfo` to attach the full
@@ -368,9 +416,32 @@ Every CType of a normal TYPO3 installation has a builder, and you register nothi
368
416
 
369
417
  All builders share `withHeader`, `withSubheader`, `withHeaderLayout`,
370
418
  `withHeaderLink`, `withColPos`, `setHidden`, and `withField(column, value)` for any
371
- other TCA column. Types with images add `withFile` and `withFiles`, which write the
372
- `sys_file_reference` rows for you, plus `withColumns`, `withOrientation` and
373
- `withImageSize`.
419
+ other TCA column. They also share the four relation setters above
420
+ `withFileReference`, `withFileReferences`, `withChild` and `withChildren`. Types with
421
+ images add `withFile` and `withFiles` for their own media column, plus `withColumns`,
422
+ `withOrientation` and `withImageSize`.
423
+
424
+ Where core stores a number that means nothing on its own, the setter takes the name
425
+ and your editor suggests the options:
426
+
427
+ ```ts
428
+ element.withHeader('Chapter', 'h3') // header_layout 3, or 'hidden' for 100
429
+ element.withBulletsType('numbers') // bullets_type 1
430
+ element.withHeaderPosition('top') // table_header_position 1
431
+ element.withOrientation('in-text-right') // imageorient 17
432
+ ```
433
+
434
+ `PageBuilder` does the same for the page type: `withDoktype('folder')` writes 254.
435
+ It also takes a number, for a doktype your own project registered.
436
+
437
+ The `crop` column of a file reference holds JSON text, which `imageCrop()` writes for
438
+ you. Without an area it keeps the whole image, which is what naming only a ratio
439
+ means:
440
+
441
+ ```ts
442
+ imageCrop({ ratio: '16:9' })
443
+ imageCrop({ area: { x: 0.1, y: 0, width: 0.5, height: 1 } })
444
+ ```
374
445
 
375
446
  A flexform column takes `flexForm()`, because the form posts one field per value
376
447
  rather than one for the column:
@@ -1,6 +1,7 @@
1
1
  import { Page } from '@playwright/test';
2
- import { ContentBuilderInterface } from '../types/content-builder.js';
2
+ import { ContentBuilderInterface, type ContentFields } from '../types/content-builder.js';
3
3
  import type { ContentTypeFor, ContentTypeKey } from './core-content.js';
4
+ import { type ChildRecord } from './relations.js';
4
5
  import { type RequestContext } from './request-context.js';
5
6
  export declare class ContentBuilder {
6
7
  private page;
@@ -20,8 +21,15 @@ declare class TypedContentBuilder<B extends ContentBuilderInterface = ContentBui
20
21
  private pageId;
21
22
  private requestContext?;
22
23
  private builder;
24
+ private readonly fields;
25
+ private readonly relations;
23
26
  constructor(page: Page, pageId: string, type: string, requestContext?: Partial<RequestContext> | undefined);
24
27
  configure(fn: (builder: B) => void): this;
28
+ withField(column: string, value: ContentFields[string]): this;
29
+ withFileReference(column: string, fileUid: number, fields?: ContentFields): this;
30
+ withFileReferences(column: string, fileUids: number[], fields?: ContentFields): this;
31
+ withChild(column: string, table: string, configure: (child: ChildRecord) => void): this;
32
+ withChildren<T>(column: string, table: string, items: T[], configure: (child: ChildRecord, item: T) => void): this;
25
33
  create(): Promise<{
26
34
  id: string;
27
35
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"content-builder.d.ts","sourceRoot":"","sources":["../../src/builders/content-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AAErE,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAGvE,OAAO,EAAyC,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAGjG,qBAAa,cAAc;IACvB,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAyB;gBAE7C,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC;IAKhE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK5B;;;OAGG;IACH,MAAM,CAAC,CAAC,SAAS,cAAc,EAAE,IAAI,EAAE,CAAC,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IACjF,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAAC,uBAAuB,CAAC;CAWrE;AAED,cAAM,mBAAmB,CAAC,CAAC,SAAS,uBAAuB,GAAG,uBAAuB;IAI7E,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,MAAM;IAEd,OAAO,CAAC,cAAc,CAAC;IAN3B,OAAO,CAAC,OAAO,CAAyB;gBAG5B,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACJ,cAAc,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,YAAA;IAKpD,SAAS,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI;IAKnC,MAAM,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;CAkC1C"}
1
+ {"version":3,"file":"content-builder.d.ts","sourceRoot":"","sources":["../../src/builders/content-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAAE,uBAAuB,EAAE,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAEzF,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAEvE,OAAO,EAA6B,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5E,OAAO,EAAyC,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAKjG,qBAAa,cAAc;IACvB,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAyB;gBAE7C,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC;IAKhE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK5B;;;OAGG;IACH,MAAM,CAAC,CAAC,SAAS,cAAc,EAAE,IAAI,EAAE,CAAC,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IACjF,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAAC,uBAAuB,CAAC;CAWrE;AAED,cAAM,mBAAmB,CAAC,CAAC,SAAS,uBAAuB,GAAG,uBAAuB;IAM7E,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,MAAM;IAEd,OAAO,CAAC,cAAc,CAAC;IAR3B,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmE;gBAGjF,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACJ,cAAc,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,YAAA;IAKpD,SAAS,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI;IAKzC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI;IAM7D,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,aAAkB,GAAG,IAAI;IAMpF,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,GAAE,aAAkB,GAAG,IAAI;IAMxF,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI;IAMvF,YAAY,CAAC,CAAC,EACV,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,CAAC,EAAE,EACV,SAAS,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,KAAK,IAAI,GACjD,IAAI;IAMD,MAAM,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;CAmD1C"}
@@ -1,8 +1,10 @@
1
1
  import { createContent } from './content-factory.js';
2
2
  import { saveRecord } from '../http/record-edit.js';
3
- import { coerceFields } from './fields.js';
3
+ import { mergeRecords, RelationSet } from './relations.js';
4
+ import { toColumnValues } from './fields.js';
4
5
  import { replayParentId, resolveRequestContext } from './request-context.js';
5
6
  import { newRecordIdentifier } from './identifier.js';
7
+ const lastElementOnPage = new WeakMap();
6
8
  export class ContentBuilder {
7
9
  page;
8
10
  pageId = '';
@@ -28,6 +30,8 @@ class TypedContentBuilder {
28
30
  pageId;
29
31
  requestContext;
30
32
  builder;
33
+ fields = {};
34
+ relations = new RelationSet('tt_content', (column) => column in this.fields);
31
35
  constructor(page, pageId, type, requestContext) {
32
36
  this.page = page;
33
37
  this.pageId = pageId;
@@ -38,6 +42,26 @@ class TypedContentBuilder {
38
42
  fn(this.builder);
39
43
  return this;
40
44
  }
45
+ withField(column, value) {
46
+ this.fields[column] = value;
47
+ return this;
48
+ }
49
+ withFileReference(column, fileUid, fields = {}) {
50
+ this.relations.withFileReference(column, fileUid, fields);
51
+ return this;
52
+ }
53
+ withFileReferences(column, fileUids, fields = {}) {
54
+ this.relations.withFileReferences(column, fileUids, fields);
55
+ return this;
56
+ }
57
+ withChild(column, table, configure) {
58
+ this.relations.withChild(column, table, configure);
59
+ return this;
60
+ }
61
+ withChildren(column, table, items, configure) {
62
+ this.relations.withChildren(column, table, items, configure);
63
+ return this;
64
+ }
41
65
  async create() {
42
66
  const context = resolveRequestContext(this.page, this.requestContext);
43
67
  const identifier = newRecordIdentifier();
@@ -46,23 +70,56 @@ class TypedContentBuilder {
46
70
  // CType and colPos are set below; an empty string means "the type did not
47
71
  // set it".
48
72
  const own = Object.fromEntries(Object.entries(fields).filter(([column, value]) => value !== '' && !['CType', 'colPos'].includes(column)));
73
+ const columnValues = toColumnValues({ ...own, ...this.fields });
74
+ // Not the record's own pid, which carries the -uid positioning the element.
75
+ const owner = {
76
+ pid: columnValues.pid ?? pageId,
77
+ sys_language_uid: columnValues.sys_language_uid ?? 0,
78
+ };
79
+ const inner = this.builder.getRelations?.(owner) ?? { columns: {}, records: {} };
80
+ const outer = this.relations.materialise(owner);
81
+ refuseSharedColumns(inner.columns, outer.columns);
49
82
  const record = {
50
- pid: pageId,
83
+ pid: insertPosition(this.page, pageId),
51
84
  sys_language_uid: 0,
52
85
  CType: fields.CType || this.builder.type,
53
86
  colPos: fields.colPos ?? 0,
54
- ...coerceFields(own),
87
+ ...columnValues,
88
+ ...inner.columns,
89
+ ...outer.columns,
55
90
  };
91
+ // Merged per table, not spread: a child table may be tt_content itself.
92
+ const data = { tt_content: { [identifier]: record } };
93
+ mergeRecords(data, this.builder.getAdditionalRecords?.(identifier, pageId) ?? {});
94
+ mergeRecords(data, inner.records);
95
+ mergeRecords(data, outer.records);
56
96
  const uid = await saveRecord(this.page.request, context, {
57
97
  table: 'tt_content',
58
98
  identifier: identifier,
59
99
  target: Number(pageId),
60
- data: {
61
- tt_content: { [identifier]: record },
62
- ...(this.builder.getAdditionalRecords?.(identifier, pageId) ?? {}),
63
- },
100
+ data,
64
101
  });
102
+ lastElementOnPage.get(this.page)?.set(pageId, uid);
65
103
  return { id: String(uid) };
66
104
  }
67
105
  }
106
+ function refuseSharedColumns(inner, outer) {
107
+ const shared = Object.keys(outer).filter((column) => column in inner);
108
+ if (shared.length > 0) {
109
+ throw new Error(`[typo3-playwright-toolkit] The column ${shared.join(' and ')} is filled twice — ` +
110
+ 'once inside configure() and once on the builder. Nothing decides which of ' +
111
+ 'the two comes first, so the records would end up in a random order. Put ' +
112
+ 'them all in one place.');
113
+ }
114
+ }
115
+ /** Keyed by the page: `builders.content()` hands out a fresh builder per call. */
116
+ function insertPosition(page, pageId) {
117
+ let created = lastElementOnPage.get(page);
118
+ if (undefined === created) {
119
+ created = new Map();
120
+ lastElementOnPage.set(page, created);
121
+ }
122
+ const previous = created.get(pageId);
123
+ return undefined === previous ? pageId : `-${previous}`;
124
+ }
68
125
  //# sourceMappingURL=content-builder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"content-builder.js","sourceRoot":"","sources":["../../src/builders/content-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"content-builder.js","sourceRoot":"","sources":["../../src/builders/content-builder.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,45 @@
1
1
  import type { ContentBuilderInterface, ContentFields } from '../types/content-builder.js';
2
- import type { RecordDataMap } from '../http/record-edit.js';
2
+ import { RelationSet, type ChildRecord, type RelationOutput, type RelationOwner } from './relations.js';
3
+ declare const HEADING_LEVELS: {
4
+ readonly h1: 1;
5
+ readonly h2: 2;
6
+ readonly h3: 3;
7
+ readonly h4: 4;
8
+ readonly h5: 5;
9
+ readonly hidden: 100;
10
+ };
11
+ declare const BULLET_TYPES: {
12
+ readonly bullets: 0;
13
+ readonly numbers: 1;
14
+ readonly definition: 2;
15
+ };
16
+ declare const TABLE_HEADER_POSITIONS: {
17
+ readonly none: 0;
18
+ readonly top: 1;
19
+ readonly left: 2;
20
+ readonly both: 3;
21
+ };
22
+ declare const IMAGE_ORIENTATIONS: {
23
+ readonly 'above-center': 0;
24
+ readonly 'above-right': 1;
25
+ readonly 'above-left': 2;
26
+ readonly 'below-center': 8;
27
+ readonly 'below-right': 9;
28
+ readonly 'below-left': 10;
29
+ readonly 'in-text-right': 17;
30
+ readonly 'in-text-left': 18;
31
+ readonly 'beside-text-right': 25;
32
+ readonly 'beside-text-left': 26;
33
+ };
34
+ export type HeadingLevel = keyof typeof HEADING_LEVELS;
35
+ export type BulletType = keyof typeof BULLET_TYPES;
36
+ export type TableHeaderPosition = keyof typeof TABLE_HEADER_POSITIONS;
37
+ export type ImageOrientation = keyof typeof IMAGE_ORIENTATIONS;
3
38
  export declare abstract class CoreContent implements ContentBuilderInterface {
4
39
  abstract readonly type: string;
5
40
  protected fields: ContentFields;
6
- withHeader(header: string): this;
41
+ protected readonly relations: RelationSet;
42
+ withHeader(header: string, level?: HeadingLevel): this;
7
43
  withSubheader(subheader: string): this;
8
44
  /** 0 is "hidden", 1–5 are h1–h5 in a stock fluid_styled_content install. */
9
45
  withHeaderLayout(layout: number): this;
@@ -12,24 +48,23 @@ export declare abstract class CoreContent implements ContentBuilderInterface {
12
48
  setHidden(hidden?: boolean): this;
13
49
  /** Any column the typed setters do not cover, including your own. */
14
50
  withField(column: string, value: ContentFields[string]): this;
51
+ withFileReference(column: string, fileUid: number, fields?: ContentFields): this;
52
+ withFileReferences(column: string, fileUids: number[], fields?: ContentFields): this;
53
+ withChild(column: string, table: string, configure: (child: ChildRecord) => void): this;
54
+ withChildren<T>(column: string, table: string, items: T[], configure: (child: ChildRecord, item: T) => void): this;
55
+ getRelations(owner: RelationOwner): RelationOutput;
15
56
  getFields(): ContentFields;
16
57
  protected set(column: string, value: ContentFields[string]): this;
17
58
  }
18
59
  declare abstract class MediaCoreContent extends CoreContent {
19
60
  /** The tt_content column the references hang off — `assets`, `image`, `media`. */
20
61
  protected abstract readonly mediaColumn: string;
21
- private fileUids;
22
- private identifiers;
23
62
  withFile(fileUid: number): this;
24
63
  withFiles(fileUids: number[]): this;
25
- getFields(): ContentFields;
26
- getAdditionalRecords(contentIdentifier: string, pageId: string): RecordDataMap;
27
- private referenceIdentifiers;
28
64
  }
29
65
  declare abstract class GalleryCoreContent extends MediaCoreContent {
30
66
  withColumns(imagecols: number): this;
31
- /** TCA `imageorient`: 0 above-center, 8 below-center, 17 in-text-right, … */
32
- withOrientation(imageorient: number): this;
67
+ withOrientation(orientation: ImageOrientation): this;
33
68
  withImageSize(width?: number, height?: number): this;
34
69
  }
35
70
  export declare class HeaderContent extends CoreContent {
@@ -57,15 +92,13 @@ export declare class BulletsContent extends CoreContent {
57
92
  readonly type = "bullets";
58
93
  /** One bullet per line — the column is a plain newline-separated text field. */
59
94
  withItems(items: string[]): this;
60
- /** TCA `bullets_type`: 0 disc, 1 numbered, 2 none. */
61
- withBulletsType(bulletsType: number): this;
95
+ withBulletsType(type: BulletType): this;
62
96
  }
63
97
  export declare class TableContent extends CoreContent {
64
98
  readonly type = "table";
65
99
  withRows(rows: string[][]): this;
66
100
  withCaption(caption: string): this;
67
- /** 1 puts the first row in a thead; 0 none, 2 first column, 3 both. */
68
- withHeaderPosition(position: number): this;
101
+ withHeaderPosition(position: TableHeaderPosition): this;
69
102
  private delimiter;
70
103
  }
71
104
  export declare class UploadsContent extends MediaCoreContent {
@@ -1 +1 @@
1
- {"version":3,"file":"core-content.d.ts","sourceRoot":"","sources":["../../src/builders/core-content.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core-content.d.ts","sourceRoot":"","sources":["../../src/builders/core-content.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,25 @@
1
- import { newRecordIdentifier } from './identifier.js';
1
+ import { RelationSet, } from './relations.js';
2
+ const HEADING_LEVELS = { h1: 1, h2: 2, h3: 3, h4: 4, h5: 5, hidden: 100 };
3
+ const BULLET_TYPES = { bullets: 0, numbers: 1, definition: 2 };
4
+ const TABLE_HEADER_POSITIONS = { none: 0, top: 1, left: 2, both: 3 };
5
+ const IMAGE_ORIENTATIONS = {
6
+ 'above-center': 0,
7
+ 'above-right': 1,
8
+ 'above-left': 2,
9
+ 'below-center': 8,
10
+ 'below-right': 9,
11
+ 'below-left': 10,
12
+ 'in-text-right': 17,
13
+ 'in-text-left': 18,
14
+ 'beside-text-right': 25,
15
+ 'beside-text-left': 26,
16
+ };
2
17
  export class CoreContent {
3
18
  fields = {};
4
- withHeader(header) {
5
- return this.set('header', header);
19
+ relations = new RelationSet('tt_content', (column) => column in this.fields);
20
+ withHeader(header, level) {
21
+ this.set('header', header);
22
+ return undefined === level ? this : this.withHeaderLayout(HEADING_LEVELS[level]);
6
23
  }
7
24
  withSubheader(subheader) {
8
25
  return this.set('subheader', subheader);
@@ -24,66 +41,48 @@ export class CoreContent {
24
41
  withField(column, value) {
25
42
  return this.set(column, value);
26
43
  }
44
+ withFileReference(column, fileUid, fields = {}) {
45
+ this.relations.withFileReference(column, fileUid, fields);
46
+ return this;
47
+ }
48
+ withFileReferences(column, fileUids, fields = {}) {
49
+ this.relations.withFileReferences(column, fileUids, fields);
50
+ return this;
51
+ }
52
+ withChild(column, table, configure) {
53
+ this.relations.withChild(column, table, configure);
54
+ return this;
55
+ }
56
+ withChildren(column, table, items, configure) {
57
+ this.relations.withChildren(column, table, items, configure);
58
+ return this;
59
+ }
60
+ getRelations(owner) {
61
+ return this.relations.materialise(owner);
62
+ }
27
63
  getFields() {
28
64
  return { CType: this.type, ...this.fields };
29
65
  }
30
66
  set(column, value) {
67
+ this.relations.refuseColumnHeld(column);
31
68
  this.fields[column] = value;
32
69
  return this;
33
70
  }
34
71
  }
35
72
  class MediaCoreContent extends CoreContent {
36
- fileUids = [];
37
- identifiers = [];
38
73
  withFile(fileUid) {
39
- this.fileUids.push(fileUid);
40
- return this;
74
+ return this.withFileReference(this.mediaColumn, fileUid);
41
75
  }
42
76
  withFiles(fileUids) {
43
- this.fileUids.push(...fileUids);
44
- return this;
45
- }
46
- getFields() {
47
- const fields = super.getFields();
48
- if (this.fileUids.length > 0) {
49
- fields[this.mediaColumn] = this.referenceIdentifiers().join(',');
50
- }
51
- return fields;
52
- }
53
- getAdditionalRecords(contentIdentifier, pageId) {
54
- if (this.fileUids.length === 0) {
55
- return {};
56
- }
57
- const identifiers = this.referenceIdentifiers();
58
- const references = {};
59
- this.fileUids.forEach((fileUid, index) => {
60
- references[identifiers[index]] = {
61
- uid_local: fileUid,
62
- pid: pageId,
63
- tablenames: 'tt_content',
64
- fieldname: this.mediaColumn,
65
- sys_language_uid: 0,
66
- sorting_foreign: index + 1,
67
- };
68
- });
69
- return { sys_file_reference: references };
70
- }
71
- // Minted once: getFields() lists them in the parent column and
72
- // getAdditionalRecords() keys the children by them, and the two must agree.
73
- referenceIdentifiers() {
74
- while (this.identifiers.length < this.fileUids.length) {
75
- this.identifiers.push(newRecordIdentifier());
76
- }
77
- return this.identifiers;
77
+ return this.withFileReferences(this.mediaColumn, fileUids);
78
78
  }
79
79
  }
80
80
  class GalleryCoreContent extends MediaCoreContent {
81
81
  withColumns(imagecols) {
82
82
  return this.set('imagecols', imagecols);
83
83
  }
84
- /** TCA `imageorient`: 0 above-center, 8 below-center, 17 in-text-right, … */
85
- withOrientation(imageorient) {
86
- return this.set('imageorient', imageorient);
84
+ withOrientation(orientation) {
85
+ return this.set('imageorient', IMAGE_ORIENTATIONS[orientation]);
87
86
  }
88
87
  withImageSize(width, height) {
89
88
  if (undefined !== width) {
@@ -128,9 +127,8 @@ export class BulletsContent extends CoreContent {
128
127
  withItems(items) {
129
128
  return this.set('bodytext', items.join('\n'));
130
129
  }
131
- /** TCA `bullets_type`: 0 disc, 1 numbered, 2 none. */
132
- withBulletsType(bulletsType) {
133
- return this.set('bullets_type', bulletsType);
130
+ withBulletsType(type) {
131
+ return this.set('bullets_type', BULLET_TYPES[type]);
134
132
  }
135
133
  }
136
134
  export class TableContent extends CoreContent {
@@ -142,9 +140,8 @@ export class TableContent extends CoreContent {
142
140
  withCaption(caption) {
143
141
  return this.set('table_caption', caption);
144
142
  }
145
- /** 1 puts the first row in a thead; 0 none, 2 first column, 3 both. */
146
143
  withHeaderPosition(position) {
147
- return this.set('table_header_position', position);
144
+ return this.set('table_header_position', TABLE_HEADER_POSITIONS[position]);
148
145
  }
149
146
  delimiter() {
150
147
  const configured = this.fields.table_delimiter;
@@ -1 +1 @@
1
- {"version":3,"file":"core-content.js","sourceRoot":"","sources":["../../src/builders/core-content.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core-content.js","sourceRoot":"","sources":["../../src/builders/core-content.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,19 @@
1
1
  import type { NestedFields } from '../types/common.js';
2
+ export interface CropRectangle {
3
+ x: number;
4
+ y: number;
5
+ width: number;
6
+ height: number;
7
+ }
8
+ /**
9
+ * The `crop` column of a file reference, which holds JSON text. Without an area it
10
+ * keeps the whole image, which is what a ratio on its own means.
11
+ */
12
+ export declare function imageCrop(options?: {
13
+ ratio?: string;
14
+ area?: CropRectangle;
15
+ focus?: CropRectangle | null;
16
+ }): string;
2
17
  export type FlexFormValues = Record<string, string | number | boolean>;
3
18
  /**
4
19
  * A flexform column, for `withField('pi_flexform', flexForm({...}))`. Plain values
@@ -10,5 +25,5 @@ export declare function flexForm(sheets: Record<string, FlexFormValues>): Nested
10
25
  * A boolean is a 0/1 int column. An undefined field is left out rather than sent
11
26
  * as null, which DataHandler would write.
12
27
  */
13
- export declare function coerceFields(fields: Record<string, unknown>): Record<string, unknown>;
28
+ export declare function toColumnValues(fields: Record<string, unknown>): Record<string, unknown>;
14
29
  //# sourceMappingURL=fields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/builders/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAA;AAEtE;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,YAAY,CAAA;AAC9D,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,YAAY,CAAA;AAoB9E;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAerF"}
1
+ {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/builders/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD,MAAM,WAAW,aAAa;IAC1B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACjB;AAID;;;GAGG;AACH,wBAAgB,SAAS,CACrB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,aAAa,CAAC;IAAC,KAAK,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;CAAO,GACrF,MAAM,CAQR;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAA;AAEtE;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,YAAY,CAAA;AAC9D,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,YAAY,CAAA;AAoB9E;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAevF"}
@@ -1,3 +1,17 @@
1
+ const WHOLE_IMAGE = { x: 0, y: 0, width: 1, height: 1 };
2
+ /**
3
+ * The `crop` column of a file reference, which holds JSON text. Without an area it
4
+ * keeps the whole image, which is what a ratio on its own means.
5
+ */
6
+ export function imageCrop(options = {}) {
7
+ return JSON.stringify({
8
+ default: {
9
+ cropArea: options.area ?? WHOLE_IMAGE,
10
+ selectedRatio: options.ratio ?? 'NaN',
11
+ focusArea: options.focus ?? null,
12
+ },
13
+ });
14
+ }
1
15
  export function flexForm(input) {
2
16
  const sheets = Object.values(input).every((value) => 'object' === typeof value)
3
17
  ? input
@@ -16,18 +30,18 @@ export function flexForm(input) {
16
30
  * A boolean is a 0/1 int column. An undefined field is left out rather than sent
17
31
  * as null, which DataHandler would write.
18
32
  */
19
- export function coerceFields(fields) {
20
- const coerced = {};
33
+ export function toColumnValues(fields) {
34
+ const values = {};
21
35
  for (const [column, value] of Object.entries(fields)) {
22
36
  if (value === undefined) {
23
37
  continue;
24
38
  }
25
39
  if ('boolean' === typeof value) {
26
- coerced[column] = value ? 1 : 0;
40
+ values[column] = value ? 1 : 0;
27
41
  continue;
28
42
  }
29
- coerced[column] = value;
43
+ values[column] = value;
30
44
  }
31
- return coerced;
45
+ return values;
32
46
  }
33
47
  //# sourceMappingURL=fields.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/builders/fields.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,QAAQ,CACpB,KAAsD;IAEtD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,KAAK,OAAO,KAAK,CAAC;QAC3E,CAAC,CAAE,KAAwC;QAC3C,CAAC,CAAC,EAAE,IAAI,EAAE,KAAuB,EAAE,CAAA;IAEvC,MAAM,IAAI,GAAiB,EAAE,CAAA;IAC7B,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,MAAM,MAAM,GAAiB,EAAE,CAAA;QAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;QAClC,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IAClC,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,CAAA;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAA+B;IACxD,MAAM,OAAO,GAA4B,EAAE,CAAA;IAE3C,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,SAAQ;QACZ,CAAC;QACD,IAAI,SAAS,KAAK,OAAO,KAAK,EAAE,CAAC;YAC7B,OAAO,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC/B,SAAQ;QACZ,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,GAAG,KAAK,CAAA;IAC3B,CAAC;IAED,OAAO,OAAO,CAAA;AAClB,CAAC"}
1
+ {"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/builders/fields.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,GAAkB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAA;AAEtE;;;GAGG;AACH,MAAM,UAAU,SAAS,CACrB,UAAkF,EAAE;IAEpF,OAAO,IAAI,CAAC,SAAS,CAAC;QAClB,OAAO,EAAE;YACL,QAAQ,EAAE,OAAO,CAAC,IAAI,IAAI,WAAW;YACrC,aAAa,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK;YACrC,SAAS,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI;SACnC;KACJ,CAAC,CAAA;AACN,CAAC;AAUD,MAAM,UAAU,QAAQ,CACpB,KAAsD;IAEtD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,KAAK,OAAO,KAAK,CAAC;QAC3E,CAAC,CAAE,KAAwC;QAC3C,CAAC,CAAC,EAAE,IAAI,EAAE,KAAuB,EAAE,CAAA;IAEvC,MAAM,IAAI,GAAiB,EAAE,CAAA;IAC7B,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,MAAM,MAAM,GAAiB,EAAE,CAAA;QAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;QAClC,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IAClC,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,CAAA;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAA+B;IAC1D,MAAM,MAAM,GAA4B,EAAE,CAAA;IAE1C,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,SAAQ;QACZ,CAAC;QACD,IAAI,SAAS,KAAK,OAAO,KAAK,EAAE,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC9B,SAAQ;QACZ,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAA;IAC1B,CAAC;IAED,OAAO,MAAM,CAAA;AACjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"identifier.d.ts","sourceRoot":"","sources":["../../src/builders/identifier.ts"],"names":[],"mappings":"AASA,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C"}
1
+ {"version":3,"file":"identifier.d.ts","sourceRoot":"","sources":["../../src/builders/identifier.ts"],"names":[],"mappings":"AAEA,wBAAgB,mBAAmB,IAAI,MAAM,CAK5C"}
@@ -1,11 +1,8 @@
1
1
  // Hex only, like StringUtility::getUniqueId(): RelationHandler reads a list
2
2
  // entry containing `_` as table_uid and never resolves it back to the record.
3
- function typo3StyleIdentifier() {
3
+ export function newRecordIdentifier() {
4
4
  const time = Date.now().toString(16);
5
5
  const entropy = Math.floor(Math.random() * 0xffffffff).toString(16);
6
6
  return `NEW${time}${entropy.padStart(8, '0')}`;
7
7
  }
8
- export function newRecordIdentifier() {
9
- return typo3StyleIdentifier();
10
- }
11
8
  //# sourceMappingURL=identifier.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"identifier.js","sourceRoot":"","sources":["../../src/builders/identifier.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,8EAA8E;AAC9E,SAAS,oBAAoB;IACzB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAEnE,OAAO,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;AAClD,CAAC;AAED,MAAM,UAAU,mBAAmB;IAC/B,OAAO,oBAAoB,EAAE,CAAA;AACjC,CAAC"}
1
+ {"version":3,"file":"identifier.js","sourceRoot":"","sources":["../../src/builders/identifier.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,8EAA8E;AAC9E,MAAM,UAAU,mBAAmB;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAEnE,OAAO,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;AAClD,CAAC"}
@@ -4,6 +4,16 @@ import { type RequestContext } from './request-context.js';
4
4
  interface Fields {
5
5
  [key: string]: string | number | boolean | undefined | NestedFields;
6
6
  }
7
+ declare const DOKTYPES: {
8
+ readonly page: 1;
9
+ readonly link: 3;
10
+ readonly shortcut: 4;
11
+ readonly 'backend-user-section': 6;
12
+ readonly mountpoint: 7;
13
+ readonly spacer: 199;
14
+ readonly folder: 254;
15
+ };
16
+ export type Doktype = keyof typeof DOKTYPES;
7
17
  export declare class PageBuilder {
8
18
  protected fields: Fields;
9
19
  private page;
@@ -19,6 +29,8 @@ export declare class PageBuilder {
19
29
  withSlug(slug: string): this;
20
30
  withExistingImage(fileId: number): this;
21
31
  withImageCropFocus(cropConfig: CropConfig): this;
32
+ /** A name core ships, or a number if your project registered its own doktype. */
33
+ withDoktype(type: Doktype | number): this;
22
34
  atParentId(id: number): this;
23
35
  create(): Promise<{
24
36
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"page-builder.d.ts","sourceRoot":"","sources":["../../src/builders/page-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAE7D,OAAO,EAAwD,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAKhH,UAAU,MAAM;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,CAAA;CACtE;AAKD,qBAAa,WAAW;IACpB,SAAS,CAAC,MAAM,EAAE,MAAM,CAOvB;IAED,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,WAAW,CAAC,CAAQ;IAC5B,OAAO,CAAC,eAAe,CAAC,CAAY;IACpC,OAAO,CAAC,oBAAoB,CAAC,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAyB;gBAE7C,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC;IAKhE,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK9B,+EAA+E;IAC/E,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI;IAKjE,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAa5B,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKvC,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAKhD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKtB,MAAM,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAsB/C,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAiBnE,OAAO,CAAC,SAAS;IAiBjB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAuBpB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,eAAe;CAK1B"}
1
+ {"version":3,"file":"page-builder.d.ts","sourceRoot":"","sources":["../../src/builders/page-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAE7D,OAAO,EAAwD,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAKhH,UAAU,MAAM;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,CAAA;CACtE;AAED,QAAA,MAAM,QAAQ;;;;;;;;CAQJ,CAAA;AAEV,MAAM,MAAM,OAAO,GAAG,MAAM,OAAO,QAAQ,CAAA;AAE3C,qBAAa,WAAW;IACpB,SAAS,CAAC,MAAM,EAAE,MAAM,CAOvB;IAED,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,WAAW,CAAC,CAAQ;IAC5B,OAAO,CAAC,eAAe,CAAC,CAAY;IACpC,OAAO,CAAC,oBAAoB,CAAC,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAyB;gBAE7C,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC;IAKhE,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK9B,+EAA+E;IAC/E,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI;IAKjE,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAa5B,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKvC,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAKhD,iFAAiF;IACjF,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAMzC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKtB,MAAM,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAsB/C,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAiBnE,OAAO,CAAC,SAAS;IAiBjB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAuBpB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,eAAe;CAK1B"}
@@ -1,9 +1,17 @@
1
1
  import { saveRecord } from '../http/record-edit.js';
2
2
  import { replayParentId, requireTestId, resolveRequestContext } from './request-context.js';
3
- import { coerceFields } from './fields.js';
3
+ import { toColumnValues, imageCrop } from './fields.js';
4
4
  import { newRecordIdentifier } from './identifier.js';
5
5
  import { getToolkitConfig } from '../config.js';
6
- const DEFAULT_CROP = '{"default":{"cropArea":{"x":0,"y":0,"width":1,"height":1},"selectedRatio":"NaN","focusArea":null}}';
6
+ const DOKTYPES = {
7
+ page: 1,
8
+ link: 3,
9
+ shortcut: 4,
10
+ 'backend-user-section': 6,
11
+ mountpoint: 7,
12
+ spacer: 199,
13
+ folder: 254,
14
+ };
7
15
  export class PageBuilder {
8
16
  fields = {
9
17
  doktype: 1,
@@ -50,6 +58,11 @@ export class PageBuilder {
50
58
  this.imageCropConfig = cropConfig;
51
59
  return this;
52
60
  }
61
+ /** A name core ships, or a number if your project registered its own doktype. */
62
+ withDoktype(type) {
63
+ this.fields.doktype = 'number' === typeof type ? type : DOKTYPES[type];
64
+ return this;
65
+ }
53
66
  atParentId(id) {
54
67
  this.fields.pid = id;
55
68
  return this;
@@ -118,13 +131,13 @@ export class PageBuilder {
118
131
  alternative: '',
119
132
  description: '',
120
133
  title: '',
121
- crop: this.imageCropConfig ? JSON.stringify(this.imageCropConfig) : DEFAULT_CROP,
134
+ crop: this.imageCropConfig ? JSON.stringify(this.imageCropConfig) : imageCrop(),
122
135
  },
123
136
  },
124
137
  };
125
138
  }
126
139
  pageFields() {
127
- const fields = coerceFields(this.fields);
140
+ const fields = toColumnValues(this.fields);
128
141
  if (this.imageFileId) {
129
142
  fields.media = this.mediaIdentifier();
130
143
  }
@@ -1 +1 @@
1
- {"version":3,"file":"page-builder.js","sourceRoot":"","sources":["../../src/builders/page-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"page-builder.js","sourceRoot":"","sources":["../../src/builders/page-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { RecordDataMap } from '../http/record-edit.js';
2
+ import type { ContentFields } from '../types/content-builder.js';
3
+ export interface RelationOwner {
4
+ pid: string | number;
5
+ sys_language_uid: string | number;
6
+ }
7
+ export interface RelationOutput {
8
+ columns: Record<string, string>;
9
+ records: RecordDataMap;
10
+ }
11
+ export declare function mergeRecords(into: RecordDataMap, from: RecordDataMap): void;
12
+ export declare class ChildRecord {
13
+ private readonly fields;
14
+ private readonly relations;
15
+ constructor(table: string);
16
+ withField(column: string, value: ContentFields[string]): this;
17
+ withFileReference(column: string, fileUid: number, fields?: ContentFields): this;
18
+ withChild(column: string, table: string, configure: (child: ChildRecord) => void): this;
19
+ /** Relations inherit from the merged row, so a pid the child sets reaches them. */
20
+ materialise(owner: RelationOwner): {
21
+ row: Record<string, unknown>;
22
+ records: RecordDataMap;
23
+ };
24
+ }
25
+ export declare class RelationSet {
26
+ private readonly ownerTable;
27
+ private readonly isColumnSet;
28
+ private readonly references;
29
+ private readonly children;
30
+ private readonly claims;
31
+ constructor(ownerTable: string, isColumnSet?: (column: string) => boolean);
32
+ withFileReference(column: string, fileUid: number, fields?: ContentFields): this;
33
+ withFileReferences(column: string, fileUids: number[], fields?: ContentFields): this;
34
+ withChild(column: string, table: string, configure: (child: ChildRecord) => void): this;
35
+ withChildren<T>(column: string, table: string, items: T[], configure: (child: ChildRecord, item: T) => void): this;
36
+ refuseColumnHeld(column: string): void;
37
+ materialise(owner: RelationOwner): RelationOutput;
38
+ private claim;
39
+ private refuseWiredColumns;
40
+ }
41
+ //# sourceMappingURL=relations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relations.d.ts","sourceRoot":"","sources":["../../src/builders/relations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAGhE,MAAM,WAAW,aAAa;IAC1B,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAAA;CACpC;AAED,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,OAAO,EAAE,aAAa,CAAA;CACzB;AAID,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,CAc3E;AAgBD,qBAAa,WAAW;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAa;gBAE3B,KAAK,EAAE,MAAM;IAIzB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI;IAO7D,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,aAAkB,GAAG,IAAI;IAMpF,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI;IAMvF,mFAAmF;IACnF,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,OAAO,EAAE,aAAa,CAAA;KAAE;CAO9F;AAED,qBAAa,WAAW;IAMhB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW;IANhC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;gBAG9B,UAAU,EAAE,MAAM,EAClB,WAAW,GAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAqB;IAG3E,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,aAAkB,GAAG,IAAI;IAQpF,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,GAAE,aAAkB,GAAG,IAAI;IAMxF,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI;IASvF,YAAY,CAAC,CAAC,EACV,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,CAAC,EAAE,EACV,SAAS,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,KAAK,IAAI,GACjD,IAAI;IAMP,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAUtC,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc;IAiCjD,OAAO,CAAC,KAAK;IAqBb,OAAO,CAAC,kBAAkB;CAU7B"}
@@ -0,0 +1,130 @@
1
+ import { newRecordIdentifier } from './identifier.js';
2
+ const WIRED_COLUMNS = ['uid_local', 'uid_foreign', 'tablenames', 'fieldname', 'sorting_foreign'];
3
+ export function mergeRecords(into, from) {
4
+ for (const [table, rows] of Object.entries(from)) {
5
+ const existing = (into[table] ??= {});
6
+ for (const [identifier, row] of Object.entries(rows)) {
7
+ if (identifier in existing) {
8
+ throw new Error(`[typo3-playwright-toolkit] Two records claim the identifier ` +
9
+ `"${identifier}" in ${table}. Each record needs its own, or one ` +
10
+ 'silently merges into the other.');
11
+ }
12
+ existing[identifier] = row;
13
+ }
14
+ }
15
+ }
16
+ export class ChildRecord {
17
+ fields = {};
18
+ relations;
19
+ constructor(table) {
20
+ this.relations = new RelationSet(table, (column) => column in this.fields);
21
+ }
22
+ withField(column, value) {
23
+ this.relations.refuseColumnHeld(column);
24
+ this.fields[column] = value;
25
+ return this;
26
+ }
27
+ withFileReference(column, fileUid, fields = {}) {
28
+ this.relations.withFileReference(column, fileUid, fields);
29
+ return this;
30
+ }
31
+ withChild(column, table, configure) {
32
+ this.relations.withChild(column, table, configure);
33
+ return this;
34
+ }
35
+ /** Relations inherit from the merged row, so a pid the child sets reaches them. */
36
+ materialise(owner) {
37
+ const row = { pid: owner.pid, sys_language_uid: owner.sys_language_uid, ...this.fields };
38
+ const { columns, records } = this.relations.materialise(row);
39
+ return { row: { ...row, ...columns }, records };
40
+ }
41
+ }
42
+ export class RelationSet {
43
+ ownerTable;
44
+ isColumnSet;
45
+ references = [];
46
+ children = [];
47
+ claims = new Map();
48
+ constructor(ownerTable, isColumnSet = () => false) {
49
+ this.ownerTable = ownerTable;
50
+ this.isColumnSet = isColumnSet;
51
+ }
52
+ withFileReference(column, fileUid, fields = {}) {
53
+ this.refuseWiredColumns(fields);
54
+ this.claim(column, 'sys_file_reference');
55
+ this.references.push({ column, identifier: newRecordIdentifier(), fileUid, fields });
56
+ return this;
57
+ }
58
+ withFileReferences(column, fileUids, fields = {}) {
59
+ fileUids.forEach((fileUid) => this.withFileReference(column, fileUid, fields));
60
+ return this;
61
+ }
62
+ withChild(column, table, configure) {
63
+ this.claim(column, table);
64
+ const child = new ChildRecord(table);
65
+ configure(child);
66
+ this.children.push({ column, table, identifier: newRecordIdentifier(), child });
67
+ return this;
68
+ }
69
+ withChildren(column, table, items, configure) {
70
+ items.forEach((item) => this.withChild(column, table, (child) => configure(child, item)));
71
+ return this;
72
+ }
73
+ refuseColumnHeld(column) {
74
+ if (this.claims.has(column)) {
75
+ throw new Error(`[typo3-playwright-toolkit] The column "${column}" already holds a relation, ` +
76
+ 'so setting it with withField would decide what the test builds by ' +
77
+ 'whichever call ran last.');
78
+ }
79
+ }
80
+ materialise(owner) {
81
+ const tokens = {};
82
+ const records = {};
83
+ this.references.forEach(({ column, identifier, fileUid, fields }) => {
84
+ const ordered = (tokens[column] ??= []);
85
+ ordered.push(identifier);
86
+ const rows = (records.sys_file_reference ??= {});
87
+ rows[identifier] = {
88
+ uid_local: fileUid,
89
+ pid: owner.pid,
90
+ tablenames: this.ownerTable,
91
+ fieldname: column,
92
+ sys_language_uid: owner.sys_language_uid,
93
+ sorting_foreign: ordered.length,
94
+ ...fields,
95
+ };
96
+ });
97
+ this.children.forEach(({ column, table, identifier, child }) => {
98
+ ;
99
+ (tokens[column] ??= []).push(identifier);
100
+ const { row, records: nested } = child.materialise(owner);
101
+ (records[table] ??= {})[identifier] = row;
102
+ mergeRecords(records, nested);
103
+ });
104
+ const columns = Object.fromEntries(Object.entries(tokens).map(([column, ordered]) => [column, ordered.join(',')]));
105
+ return { columns, records };
106
+ }
107
+ claim(column, table) {
108
+ if (this.isColumnSet(column)) {
109
+ throw new Error(`[typo3-playwright-toolkit] The column "${column}" is already set with ` +
110
+ 'withField, so a relation on it would decide what the test builds by ' +
111
+ 'whichever call ran last.');
112
+ }
113
+ const claimed = this.claims.get(column);
114
+ if (undefined !== claimed && claimed !== table) {
115
+ throw new Error(`[typo3-playwright-toolkit] The column "${column}" already holds ${claimed} ` +
116
+ `records and cannot also hold ${table} ones. A column resolves against a ` +
117
+ 'single foreign_table, so the others would be written and never found.');
118
+ }
119
+ this.claims.set(column, table);
120
+ }
121
+ refuseWiredColumns(fields) {
122
+ const wired = Object.keys(fields).filter((column) => WIRED_COLUMNS.includes(column));
123
+ if (wired.length > 0) {
124
+ throw new Error(`[typo3-playwright-toolkit] ${wired.join(', ')} cannot be set on a relation — ` +
125
+ 'the toolkit writes it, and a value of your own would point the row ' +
126
+ 'somewhere the parent column does not.');
127
+ }
128
+ }
129
+ }
130
+ //# sourceMappingURL=relations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relations.js","sourceRoot":"","sources":["../../src/builders/relations.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -7,7 +7,7 @@ export { PageBuilder } from './builders/page-builder.js';
7
7
  export { CoreContent, HeaderContent, TextContent, TextmediaContent, TextpicContent, ImageContent, BulletsContent, TableContent, UploadsContent, HtmlContent, DividerContent, ShortcutContent, MenuContent, type ContentTypeMap, type CoreContentTypeMap, } from './builders/core-content.js';
8
8
  export type { RecordDataMap, RecordToSave } from './http/record-edit.js';
9
9
  export { newRecordIdentifier } from './builders/identifier.js';
10
- export { flexForm } from './builders/fields.js';
10
+ export { flexForm, imageCrop } from './builders/fields.js';
11
11
  export { expectScreenshot, waitForAnimations } from './checks/screenshot.js';
12
12
  export { runAccessibilityScan, scanAccessibility, DEFAULT_SCAN_TAGS, type AccessibilityScanOptions, } from './checks/accessibility.js';
13
13
  export { CspVerifier, type CspMode, type CspViolation } from './checks/csp.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,cAAc,EACd,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,UAAU,GAClB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EACH,mBAAmB,EACnB,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,GAC9B,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,0BAA0B,EAAE,KAAK,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AAEtG,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EACH,WAAW,EACX,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,cAAc,EACd,WAAW,EACX,cAAc,EACd,eAAe,EACf,WAAW,EACX,KAAK,cAAc,EACnB,KAAK,kBAAkB,GAC1B,MAAM,4BAA4B,CAAA;AACnC,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAE/C,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC5E,OAAO,EACH,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,wBAAwB,GAChC,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,WAAW,EAAE,KAAK,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAC9D,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACjE,YAAY,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAA;AACxF,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,cAAc,EACd,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,UAAU,GAClB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EACH,mBAAmB,EACnB,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,GAC9B,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,0BAA0B,EAAE,KAAK,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AAEtG,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EACH,WAAW,EACX,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,cAAc,EACd,WAAW,EACX,cAAc,EACd,eAAe,EACf,WAAW,EACX,KAAK,cAAc,EACnB,KAAK,kBAAkB,GAC1B,MAAM,4BAA4B,CAAA;AACnC,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAE1D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC5E,OAAO,EACH,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,wBAAwB,GAChC,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,WAAW,EAAE,KAAK,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAC9D,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACjE,YAAY,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAA;AACxF,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA"}
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@ export { ContentBuilder } from './builders/content-builder.js';
6
6
  export { PageBuilder } from './builders/page-builder.js';
7
7
  export { CoreContent, HeaderContent, TextContent, TextmediaContent, TextpicContent, ImageContent, BulletsContent, TableContent, UploadsContent, HtmlContent, DividerContent, ShortcutContent, MenuContent, } from './builders/core-content.js';
8
8
  export { newRecordIdentifier } from './builders/identifier.js';
9
- export { flexForm } from './builders/fields.js';
9
+ export { flexForm, imageCrop } from './builders/fields.js';
10
10
  export { expectScreenshot, waitForAnimations } from './checks/screenshot.js';
11
11
  export { runAccessibilityScan, scanAccessibility, DEFAULT_SCAN_TAGS, } from './checks/accessibility.js';
12
12
  export { CspVerifier } from './checks/csp.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,cAAc,GAIjB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EACH,mBAAmB,EACnB,gBAAgB,GAMnB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,0BAA0B,EAAgC,MAAM,6BAA6B,CAAA;AAEtG,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EACH,WAAW,EACX,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,cAAc,EACd,WAAW,EACX,cAAc,EACd,eAAe,EACf,WAAW,GAGd,MAAM,4BAA4B,CAAA;AAEnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAE/C,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC5E,OAAO,EACH,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,GAEpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,WAAW,EAAmC,MAAM,iBAAiB,CAAA;AAE9E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,cAAc,GAIjB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EACH,mBAAmB,EACnB,gBAAgB,GAMnB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,0BAA0B,EAAgC,MAAM,6BAA6B,CAAA;AAEtG,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EACH,WAAW,EACX,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,cAAc,EACd,WAAW,EACX,cAAc,EACd,eAAe,EACf,WAAW,GAGd,MAAM,4BAA4B,CAAA;AAEnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAE1D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC5E,OAAO,EACH,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,GAEpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,WAAW,EAAmC,MAAM,iBAAiB,CAAA;AAE9E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { NestedFields } from './common.js';
2
2
  import type { RecordDataMap } from '../http/record-edit.js';
3
+ import type { RelationOutput, RelationOwner } from '../builders/relations.js';
3
4
  export interface ContentFields {
4
5
  [key: string]: string | number | NestedFields | boolean | undefined;
5
6
  }
@@ -12,5 +13,7 @@ export interface ContentBuilderInterface {
12
13
  * substitutes the real uid once it has assigned one.
13
14
  */
14
15
  getAdditionalRecords?(contentIdentifier: string, pageId: string): RecordDataMap;
16
+ /** Beside the two above, never through them: an override would drop relations silently. */
17
+ getRelations?(owner: RelationOwner): RelationOutput;
15
18
  }
16
19
  //# sourceMappingURL=content-builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"content-builder.d.ts","sourceRoot":"","sources":["../../src/types/content-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAE3D,MAAM,WAAW,aAAa;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAAA;CACtE;AAED,MAAM,WAAW,uBAAuB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,SAAS,IAAI,aAAa,CAAA;IAC1B;;;;OAIG;IACH,oBAAoB,CAAC,CAAC,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAAA;CAClF"}
1
+ {"version":3,"file":"content-builder.d.ts","sourceRoot":"","sources":["../../src/types/content-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAE7E,MAAM,WAAW,aAAa;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAAA;CACtE;AAED,MAAM,WAAW,uBAAuB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,SAAS,IAAI,aAAa,CAAA;IAC1B;;;;OAIG;IACH,oBAAoB,CAAC,CAAC,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAAA;IAC/E,2FAA2F;IAC3F,YAAY,CAAC,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CAAA;CACtD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plan2net/typo3-playwright-toolkit",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "Playwright toolkit for TYPO3 end-to-end tests: fixtures, content builders, per-test databases.",
5
5
  "keywords": [
6
6
  "typo3",