@cratis/scene.engine 4.25.0 → 4.26.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.
Files changed (108) hide show
  1. package/dist/cjs/index.js +41 -0
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/sampleData/SampleRandom.js +77 -0
  4. package/dist/cjs/sampleData/SampleRandom.js.map +1 -0
  5. package/dist/cjs/sampleData/describeSampleDataCatalog.js +61 -0
  6. package/dist/cjs/sampleData/describeSampleDataCatalog.js.map +1 -0
  7. package/dist/cjs/sampleData/findSampleDataSet.js +18 -0
  8. package/dist/cjs/sampleData/findSampleDataSet.js.map +1 -0
  9. package/dist/cjs/sampleData/findSampleRowLiterals.js +73 -0
  10. package/dist/cjs/sampleData/findSampleRowLiterals.js.map +1 -0
  11. package/dist/cjs/sampleData/generateSample.js +188 -0
  12. package/dist/cjs/sampleData/generateSample.js.map +1 -0
  13. package/dist/cjs/sampleData/inferSampleFieldKind.js +176 -0
  14. package/dist/cjs/sampleData/inferSampleFieldKind.js.map +1 -0
  15. package/dist/cjs/sampleData/resolveSampleData.js +107 -0
  16. package/dist/cjs/sampleData/resolveSampleData.js.map +1 -0
  17. package/dist/cjs/sampleData/sampleDataRules.js +26 -0
  18. package/dist/cjs/sampleData/sampleDataRules.js.map +1 -0
  19. package/dist/cjs/sampleData/sampleLocales.js +359 -0
  20. package/dist/cjs/sampleData/sampleLocales.js.map +1 -0
  21. package/dist/cjs/sampleData/validateSampleDataPack.js +44 -0
  22. package/dist/cjs/sampleData/validateSampleDataPack.js.map +1 -0
  23. package/dist/cjs/sampleData/validateSampleDataPackages.js +71 -0
  24. package/dist/cjs/sampleData/validateSampleDataPackages.js.map +1 -0
  25. package/dist/cjs/sampleData/validateSampleDataSelection.js +52 -0
  26. package/dist/cjs/sampleData/validateSampleDataSelection.js.map +1 -0
  27. package/dist/esm/index.d.ts +1 -0
  28. package/dist/esm/index.d.ts.map +1 -1
  29. package/dist/esm/index.js +12 -0
  30. package/dist/esm/index.js.map +1 -1
  31. package/dist/esm/sampleData/SampleDataPackSource.d.ts +6 -0
  32. package/dist/esm/sampleData/SampleDataPackSource.d.ts.map +1 -0
  33. package/dist/esm/sampleData/SampleDataPackSource.js +2 -0
  34. package/dist/esm/sampleData/SampleDataPackSource.js.map +1 -0
  35. package/dist/esm/sampleData/SampleDataResolution.d.ts +29 -0
  36. package/dist/esm/sampleData/SampleDataResolution.d.ts.map +1 -0
  37. package/dist/esm/sampleData/SampleDataResolution.js +2 -0
  38. package/dist/esm/sampleData/SampleDataResolution.js.map +1 -0
  39. package/dist/esm/sampleData/SampleRandom.d.ts +14 -0
  40. package/dist/esm/sampleData/SampleRandom.d.ts.map +1 -0
  41. package/dist/esm/sampleData/SampleRandom.js +72 -0
  42. package/dist/esm/sampleData/SampleRandom.js.map +1 -0
  43. package/dist/esm/sampleData/describeSampleDataCatalog.d.ts +24 -0
  44. package/dist/esm/sampleData/describeSampleDataCatalog.d.ts.map +1 -0
  45. package/dist/esm/sampleData/describeSampleDataCatalog.js +57 -0
  46. package/dist/esm/sampleData/describeSampleDataCatalog.js.map +1 -0
  47. package/dist/esm/sampleData/findSampleDataSet.d.ts +3 -0
  48. package/dist/esm/sampleData/findSampleDataSet.d.ts.map +1 -0
  49. package/dist/esm/sampleData/findSampleDataSet.js +16 -0
  50. package/dist/esm/sampleData/findSampleDataSet.js.map +1 -0
  51. package/dist/esm/sampleData/findSampleRowLiterals.d.ts +11 -0
  52. package/dist/esm/sampleData/findSampleRowLiterals.d.ts.map +1 -0
  53. package/dist/esm/sampleData/findSampleRowLiterals.js +69 -0
  54. package/dist/esm/sampleData/findSampleRowLiterals.js.map +1 -0
  55. package/dist/esm/sampleData/generateSample.d.ts +6 -0
  56. package/dist/esm/sampleData/generateSample.d.ts.map +1 -0
  57. package/dist/esm/sampleData/generateSample.js +183 -0
  58. package/dist/esm/sampleData/generateSample.js.map +1 -0
  59. package/dist/esm/sampleData/index.d.ts +15 -0
  60. package/dist/esm/sampleData/index.d.ts.map +1 -0
  61. package/dist/esm/sampleData/index.js +15 -0
  62. package/dist/esm/sampleData/index.js.map +1 -0
  63. package/dist/esm/sampleData/inferSampleFieldKind.d.ts +3 -0
  64. package/dist/esm/sampleData/inferSampleFieldKind.d.ts.map +1 -0
  65. package/dist/esm/sampleData/inferSampleFieldKind.js +174 -0
  66. package/dist/esm/sampleData/inferSampleFieldKind.js.map +1 -0
  67. package/dist/esm/sampleData/resolveSampleData.d.ts +3 -0
  68. package/dist/esm/sampleData/resolveSampleData.d.ts.map +1 -0
  69. package/dist/esm/sampleData/resolveSampleData.js +105 -0
  70. package/dist/esm/sampleData/resolveSampleData.js.map +1 -0
  71. package/dist/esm/sampleData/sampleDataRules.d.ts +7 -0
  72. package/dist/esm/sampleData/sampleDataRules.d.ts.map +1 -0
  73. package/dist/esm/sampleData/sampleDataRules.js +19 -0
  74. package/dist/esm/sampleData/sampleDataRules.js.map +1 -0
  75. package/dist/esm/sampleData/sampleLocales.d.ts +13 -0
  76. package/dist/esm/sampleData/sampleLocales.d.ts.map +1 -0
  77. package/dist/esm/sampleData/sampleLocales.js +355 -0
  78. package/dist/esm/sampleData/sampleLocales.js.map +1 -0
  79. package/dist/esm/sampleData/validateSampleDataPack.d.ts +3 -0
  80. package/dist/esm/sampleData/validateSampleDataPack.d.ts.map +1 -0
  81. package/dist/esm/sampleData/validateSampleDataPack.js +42 -0
  82. package/dist/esm/sampleData/validateSampleDataPack.js.map +1 -0
  83. package/dist/esm/sampleData/validateSampleDataPackages.d.ts +3 -0
  84. package/dist/esm/sampleData/validateSampleDataPackages.d.ts.map +1 -0
  85. package/dist/esm/sampleData/validateSampleDataPackages.js +69 -0
  86. package/dist/esm/sampleData/validateSampleDataPackages.js.map +1 -0
  87. package/dist/esm/sampleData/validateSampleDataSelection.d.ts +3 -0
  88. package/dist/esm/sampleData/validateSampleDataSelection.d.ts.map +1 -0
  89. package/dist/esm/sampleData/validateSampleDataSelection.js +50 -0
  90. package/dist/esm/sampleData/validateSampleDataSelection.js.map +1 -0
  91. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  92. package/index.ts +1 -0
  93. package/package.json +3 -3
  94. package/sampleData/SampleDataPackSource.ts +13 -0
  95. package/sampleData/SampleDataResolution.ts +93 -0
  96. package/sampleData/SampleRandom.ts +85 -0
  97. package/sampleData/describeSampleDataCatalog.ts +108 -0
  98. package/sampleData/findSampleDataSet.ts +18 -0
  99. package/sampleData/findSampleRowLiterals.ts +86 -0
  100. package/sampleData/generateSample.ts +156 -0
  101. package/sampleData/index.ts +17 -0
  102. package/sampleData/inferSampleFieldKind.ts +64 -0
  103. package/sampleData/resolveSampleData.ts +96 -0
  104. package/sampleData/sampleDataRules.ts +30 -0
  105. package/sampleData/sampleLocales.ts +91 -0
  106. package/sampleData/validateSampleDataPack.ts +48 -0
  107. package/sampleData/validateSampleDataPackages.ts +79 -0
  108. package/sampleData/validateSampleDataSelection.ts +55 -0
@@ -0,0 +1,176 @@
1
+ 'use strict';
2
+
3
+ var scene_model = require('@cratis/scene.model');
4
+
5
+ // Copyright (c) Cratis. All rights reserved.
6
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
7
+ const typeKinds = new Map([
8
+ [
9
+ 'guid',
10
+ scene_model.SampleFieldKind.Id
11
+ ],
12
+ [
13
+ 'uuid',
14
+ scene_model.SampleFieldKind.Id
15
+ ],
16
+ [
17
+ 'int',
18
+ scene_model.SampleFieldKind.WholeNumber
19
+ ],
20
+ [
21
+ 'int16',
22
+ scene_model.SampleFieldKind.WholeNumber
23
+ ],
24
+ [
25
+ 'int32',
26
+ scene_model.SampleFieldKind.WholeNumber
27
+ ],
28
+ [
29
+ 'int64',
30
+ scene_model.SampleFieldKind.WholeNumber
31
+ ],
32
+ [
33
+ 'short',
34
+ scene_model.SampleFieldKind.WholeNumber
35
+ ],
36
+ [
37
+ 'long',
38
+ scene_model.SampleFieldKind.WholeNumber
39
+ ],
40
+ [
41
+ 'integer',
42
+ scene_model.SampleFieldKind.WholeNumber
43
+ ],
44
+ [
45
+ 'number',
46
+ scene_model.SampleFieldKind.WholeNumber
47
+ ],
48
+ [
49
+ 'decimal',
50
+ scene_model.SampleFieldKind.Amount
51
+ ],
52
+ [
53
+ 'double',
54
+ scene_model.SampleFieldKind.Amount
55
+ ],
56
+ [
57
+ 'float',
58
+ scene_model.SampleFieldKind.Amount
59
+ ],
60
+ [
61
+ 'single',
62
+ scene_model.SampleFieldKind.Amount
63
+ ],
64
+ [
65
+ 'money',
66
+ scene_model.SampleFieldKind.Amount
67
+ ],
68
+ [
69
+ 'currency',
70
+ scene_model.SampleFieldKind.Amount
71
+ ],
72
+ [
73
+ 'bool',
74
+ scene_model.SampleFieldKind.Boolean
75
+ ],
76
+ [
77
+ 'boolean',
78
+ scene_model.SampleFieldKind.Boolean
79
+ ],
80
+ [
81
+ 'date',
82
+ scene_model.SampleFieldKind.Date
83
+ ],
84
+ [
85
+ 'dateonly',
86
+ scene_model.SampleFieldKind.Date
87
+ ],
88
+ [
89
+ 'datetime',
90
+ scene_model.SampleFieldKind.DateTime
91
+ ],
92
+ [
93
+ 'datetimeoffset',
94
+ scene_model.SampleFieldKind.DateTime
95
+ ],
96
+ [
97
+ 'timestamp',
98
+ scene_model.SampleFieldKind.DateTime
99
+ ]
100
+ ]);
101
+ const nameKinds = [
102
+ [
103
+ [
104
+ 'email'
105
+ ],
106
+ scene_model.SampleFieldKind.Email
107
+ ],
108
+ [
109
+ [
110
+ 'phone',
111
+ 'mobile'
112
+ ],
113
+ scene_model.SampleFieldKind.Phone
114
+ ],
115
+ [
116
+ [
117
+ 'company',
118
+ 'organization',
119
+ 'organisation'
120
+ ],
121
+ scene_model.SampleFieldKind.Company
122
+ ],
123
+ [
124
+ [
125
+ 'city',
126
+ 'town'
127
+ ],
128
+ scene_model.SampleFieldKind.City
129
+ ],
130
+ [
131
+ [
132
+ 'product',
133
+ 'item',
134
+ 'title',
135
+ 'subject',
136
+ 'description'
137
+ ],
138
+ scene_model.SampleFieldKind.Text
139
+ ],
140
+ [
141
+ [
142
+ 'name',
143
+ 'customer',
144
+ 'assignee',
145
+ 'owner',
146
+ 'author',
147
+ 'contact',
148
+ 'manager',
149
+ 'employee'
150
+ ],
151
+ scene_model.SampleFieldKind.Name
152
+ ]
153
+ ];
154
+ /**
155
+ * The kind of value to generate for a field. An explicit `kind` wins; otherwise a field with `enumValues` is
156
+ * an enum, a recognised `type` decides, and failing that the field's name does (an `Id` suffix, `email`,
157
+ * `phone`, `company`, `city`, person-like names), with free text as the fallback. A trailing `?` on the type
158
+ * is ignored and type names compare case-insensitively.
159
+ */ function inferSampleFieldKind(field) {
160
+ if (field.kind !== undefined && field.kind !== null) return field.kind;
161
+ if (field.enumValues !== undefined && field.enumValues !== null && field.enumValues.length > 0) return scene_model.SampleFieldKind.Enum;
162
+ let type = (field.type ?? '').trim().toLowerCase();
163
+ if (type.endsWith('?')) type = type.slice(0, -1);
164
+ const byType = typeKinds.get(type);
165
+ if (byType !== undefined) return byType;
166
+ const name = field.name ?? '';
167
+ const lower = name.toLowerCase();
168
+ if (lower === 'id' || name.length > 2 && name.endsWith('Id')) return scene_model.SampleFieldKind.Id;
169
+ for (const [fragments, kind] of nameKinds){
170
+ if (fragments.some((fragment)=>lower.includes(fragment))) return kind;
171
+ }
172
+ return scene_model.SampleFieldKind.Text;
173
+ }
174
+
175
+ exports.inferSampleFieldKind = inferSampleFieldKind;
176
+ //# sourceMappingURL=inferSampleFieldKind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inferSampleFieldKind.js","sources":["../../../sampleData/inferSampleFieldKind.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { SampleFieldKind, SampleShapeField } from '@cratis/scene.model';\n\nconst typeKinds = new Map<string, SampleFieldKind>([\n ['guid', SampleFieldKind.Id],\n ['uuid', SampleFieldKind.Id],\n ['int', SampleFieldKind.WholeNumber],\n ['int16', SampleFieldKind.WholeNumber],\n ['int32', SampleFieldKind.WholeNumber],\n ['int64', SampleFieldKind.WholeNumber],\n ['short', SampleFieldKind.WholeNumber],\n ['long', SampleFieldKind.WholeNumber],\n ['integer', SampleFieldKind.WholeNumber],\n ['number', SampleFieldKind.WholeNumber],\n ['decimal', SampleFieldKind.Amount],\n ['double', SampleFieldKind.Amount],\n ['float', SampleFieldKind.Amount],\n ['single', SampleFieldKind.Amount],\n ['money', SampleFieldKind.Amount],\n ['currency', SampleFieldKind.Amount],\n ['bool', SampleFieldKind.Boolean],\n ['boolean', SampleFieldKind.Boolean],\n ['date', SampleFieldKind.Date],\n ['dateonly', SampleFieldKind.Date],\n ['datetime', SampleFieldKind.DateTime],\n ['datetimeoffset', SampleFieldKind.DateTime],\n ['timestamp', SampleFieldKind.DateTime],\n]);\n\nconst nameKinds: [string[], SampleFieldKind][] = [\n [['email'], SampleFieldKind.Email],\n [['phone', 'mobile'], SampleFieldKind.Phone],\n [['company', 'organization', 'organisation'], SampleFieldKind.Company],\n [['city', 'town'], SampleFieldKind.City],\n [['product', 'item', 'title', 'subject', 'description'], SampleFieldKind.Text],\n [['name', 'customer', 'assignee', 'owner', 'author', 'contact', 'manager', 'employee'], SampleFieldKind.Name],\n];\n\n/**\n * The kind of value to generate for a field. An explicit `kind` wins; otherwise a field with `enumValues` is\n * an enum, a recognised `type` decides, and failing that the field's name does (an `Id` suffix, `email`,\n * `phone`, `company`, `city`, person-like names), with free text as the fallback. A trailing `?` on the type\n * is ignored and type names compare case-insensitively.\n */\nexport function inferSampleFieldKind(field: SampleShapeField): SampleFieldKind {\n if (field.kind !== undefined && field.kind !== null) return field.kind as SampleFieldKind;\n if (field.enumValues !== undefined && field.enumValues !== null && field.enumValues.length > 0) return SampleFieldKind.Enum;\n\n let type = (field.type ?? '').trim().toLowerCase();\n if (type.endsWith('?')) type = type.slice(0, -1);\n const byType = typeKinds.get(type);\n if (byType !== undefined) return byType;\n\n const name = field.name ?? '';\n const lower = name.toLowerCase();\n if (lower === 'id' || (name.length > 2 && name.endsWith('Id'))) return SampleFieldKind.Id;\n for (const [fragments, kind] of nameKinds) {\n if (fragments.some(fragment => lower.includes(fragment))) return kind;\n }\n\n return SampleFieldKind.Text;\n}\n"],"names":["typeKinds","Map","SampleFieldKind","Id","WholeNumber","Amount","Boolean","Date","DateTime","nameKinds","Email","Phone","Company","City","Text","Name","inferSampleFieldKind","field","kind","undefined","enumValues","length","Enum","type","trim","toLowerCase","endsWith","slice","byType","get","name","lower","fragments","some","fragment","includes"],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ 'use strict';
2
+
3
+ var generateSample = require('./generateSample.js');
4
+ var sampleLocales = require('./sampleLocales.js');
5
+ var findSampleDataSet = require('./findSampleDataSet.js');
6
+
7
+ // Copyright (c) Cratis. All rights reserved.
8
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
9
+ /**
10
+ * Resolves the rows to show for a read model or shape at design or preview time, by the order of spec §11.2:
11
+ *
12
+ * 1. the pack bound to the target (`profile.sampleData.bindings`, a rare override);
13
+ * 2. the application's active pack: the UI profile's `sampleData.activePack`, chosen once for the whole
14
+ * application, or the session-only override (`context.sessionActivePack`) the preview strip sets;
15
+ * 3. the default pack of the blueprint the template came from (`blueprintDefaultPack`);
16
+ * 4. generated data typed by field kind ({@link generateSample}), when the request carries a shape.
17
+ *
18
+ * A pack supplies rows when it has a set for the target, by an explicit `shape → read model` mapping or else by
19
+ * name ({@link findSampleDataSet}). A rung that cannot supply rows falls through to the next; an unknown pack
20
+ * id, or a bound pack without the target's shape, is reported in `diagnostics` (an active or blueprint pack
21
+ * that merely lacks the shape is normal and not reported). The locale carried is the supplying pack's; for
22
+ * generated data it is the first existing bound, active or blueprint pack's, else `context.locale`.
23
+ *
24
+ * Outside design and preview (`context.isDesignOrPreview` not true) nothing resolves (spec SD6).
25
+ */ function resolveSampleData(request, context) {
26
+ const target = request.target ?? request.shape?.name ?? '';
27
+ const fallbackLocale = context.locale ?? sampleLocales.defaultSampleLocale;
28
+ const diagnostics = [];
29
+ if (context.isDesignOrPreview !== true) {
30
+ return {
31
+ source: 'disabled',
32
+ locale: fallbackLocale,
33
+ rows: [],
34
+ diagnostics
35
+ };
36
+ }
37
+ const packs = context.packs ?? [];
38
+ const selection = context.profile?.sampleData;
39
+ const mappings = selection?.mappings ?? [];
40
+ const find = (id)=>id === undefined || id === null ? undefined : packs.find((pack)=>pack.id === id);
41
+ const missing = (id, role)=>{
42
+ diagnostics.push({
43
+ code: 'packNotFound',
44
+ message: `The ${role} sample data pack '${id}' is not available`
45
+ });
46
+ };
47
+ const bindingPackId = (selection?.bindings ?? []).find((binding)=>binding.target === target)?.pack;
48
+ const bindingPack = find(bindingPackId);
49
+ if (bindingPackId !== undefined && bindingPack === undefined) {
50
+ missing(bindingPackId, `bound`);
51
+ } else if (bindingPack !== undefined) {
52
+ const set = findSampleDataSet.findSampleDataSet(bindingPack, target, mappings);
53
+ if (set !== undefined) return fromSet('binding', bindingPack, set.shape, set.rows, diagnostics);
54
+ diagnostics.push({
55
+ code: 'shapeNotInPack',
56
+ message: `The bound sample data pack '${bindingPack.id}' has no rows for '${target}'`
57
+ });
58
+ }
59
+ const sessionPackId = context.sessionActivePack;
60
+ const chosenPackId = sessionPackId !== undefined ? sessionPackId : selection?.activePack;
61
+ const activePackId = chosenPackId === '' ? undefined : chosenPackId;
62
+ const activePack = find(activePackId);
63
+ if (activePackId !== undefined && activePackId !== null && activePack === undefined) {
64
+ missing(activePackId, 'active');
65
+ } else if (activePack !== undefined) {
66
+ const set = findSampleDataSet.findSampleDataSet(activePack, target, mappings);
67
+ if (set !== undefined) return fromSet('activePack', activePack, set.shape, set.rows, diagnostics);
68
+ }
69
+ const blueprintPackId = context.blueprintDefaultPack;
70
+ const blueprintPack = find(blueprintPackId);
71
+ if (blueprintPackId !== undefined && blueprintPackId !== null && blueprintPack === undefined) {
72
+ missing(blueprintPackId, 'blueprint default');
73
+ } else if (blueprintPack !== undefined) {
74
+ const set = findSampleDataSet.findSampleDataSet(blueprintPack, target, mappings);
75
+ if (set !== undefined) return fromSet('blueprintDefault', blueprintPack, set.shape, set.rows, diagnostics);
76
+ }
77
+ const locale = bindingPack?.locale ?? activePack?.locale ?? blueprintPack?.locale ?? fallbackLocale;
78
+ if (request.shape === undefined) {
79
+ return {
80
+ source: 'none',
81
+ locale,
82
+ shape: target,
83
+ rows: [],
84
+ diagnostics
85
+ };
86
+ }
87
+ return {
88
+ source: 'generated',
89
+ locale,
90
+ shape: request.shape.name,
91
+ rows: generateSample.generateSample(request.shape, context.seed, context.rowCount, locale),
92
+ diagnostics
93
+ };
94
+ }
95
+ function fromSet(source, pack, shape, rows, diagnostics) {
96
+ return {
97
+ source,
98
+ pack: pack.id,
99
+ locale: pack.locale,
100
+ shape,
101
+ rows: structuredClone(rows),
102
+ diagnostics
103
+ };
104
+ }
105
+
106
+ exports.resolveSampleData = resolveSampleData;
107
+ //# sourceMappingURL=resolveSampleData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveSampleData.js","sources":["../../../sampleData/resolveSampleData.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { SampleDataPack } from '@cratis/scene.model';\nimport { generateSample } from './generateSample';\nimport { defaultSampleLocale } from './sampleLocales';\nimport { findSampleDataSet } from './findSampleDataSet';\nimport { SampleDataContext, SampleDataDiagnostic, SampleDataRequest, SampleDataResolution } from './SampleDataResolution';\n\n/**\n * Resolves the rows to show for a read model or shape at design or preview time, by the order of spec §11.2:\n *\n * 1. the pack bound to the target (`profile.sampleData.bindings`, a rare override);\n * 2. the application's active pack: the UI profile's `sampleData.activePack`, chosen once for the whole\n * application, or the session-only override (`context.sessionActivePack`) the preview strip sets;\n * 3. the default pack of the blueprint the template came from (`blueprintDefaultPack`);\n * 4. generated data typed by field kind ({@link generateSample}), when the request carries a shape.\n *\n * A pack supplies rows when it has a set for the target, by an explicit `shape → read model` mapping or else by\n * name ({@link findSampleDataSet}). A rung that cannot supply rows falls through to the next; an unknown pack\n * id, or a bound pack without the target's shape, is reported in `diagnostics` (an active or blueprint pack\n * that merely lacks the shape is normal and not reported). The locale carried is the supplying pack's; for\n * generated data it is the first existing bound, active or blueprint pack's, else `context.locale`.\n *\n * Outside design and preview (`context.isDesignOrPreview` not true) nothing resolves (spec SD6).\n */\nexport function resolveSampleData(request: SampleDataRequest, context: SampleDataContext): SampleDataResolution {\n const target = request.target ?? request.shape?.name ?? '';\n const fallbackLocale = context.locale ?? defaultSampleLocale;\n const diagnostics: SampleDataDiagnostic[] = [];\n\n if (context.isDesignOrPreview !== true) {\n return { source: 'disabled', locale: fallbackLocale, rows: [], diagnostics };\n }\n\n const packs = context.packs ?? [];\n const selection = context.profile?.sampleData;\n const mappings = selection?.mappings ?? [];\n const find = (id: string | null | undefined): SampleDataPack | undefined => (id === undefined || id === null ? undefined : packs.find(pack => pack.id === id));\n const missing = (id: string, role: string): void => {\n diagnostics.push({ code: 'packNotFound', message: `The ${role} sample data pack '${id}' is not available` });\n };\n\n const bindingPackId = (selection?.bindings ?? []).find(binding => binding.target === target)?.pack;\n const bindingPack = find(bindingPackId);\n if (bindingPackId !== undefined && bindingPack === undefined) {\n missing(bindingPackId, `bound`);\n } else if (bindingPack !== undefined) {\n const set = findSampleDataSet(bindingPack, target, mappings);\n if (set !== undefined) return fromSet('binding', bindingPack, set.shape, set.rows, diagnostics);\n diagnostics.push({ code: 'shapeNotInPack', message: `The bound sample data pack '${bindingPack.id}' has no rows for '${target}'` });\n }\n\n const sessionPackId = context.sessionActivePack;\n const chosenPackId = sessionPackId !== undefined ? sessionPackId : selection?.activePack;\n const activePackId = chosenPackId === '' ? undefined : chosenPackId;\n const activePack = find(activePackId);\n if (activePackId !== undefined && activePackId !== null && activePack === undefined) {\n missing(activePackId, 'active');\n } else if (activePack !== undefined) {\n const set = findSampleDataSet(activePack, target, mappings);\n if (set !== undefined) return fromSet('activePack', activePack, set.shape, set.rows, diagnostics);\n }\n\n const blueprintPackId = context.blueprintDefaultPack;\n const blueprintPack = find(blueprintPackId);\n if (blueprintPackId !== undefined && blueprintPackId !== null && blueprintPack === undefined) {\n missing(blueprintPackId, 'blueprint default');\n } else if (blueprintPack !== undefined) {\n const set = findSampleDataSet(blueprintPack, target, mappings);\n if (set !== undefined) return fromSet('blueprintDefault', blueprintPack, set.shape, set.rows, diagnostics);\n }\n\n const locale = bindingPack?.locale ?? activePack?.locale ?? blueprintPack?.locale ?? fallbackLocale;\n if (request.shape === undefined) {\n return { source: 'none', locale, shape: target, rows: [], diagnostics };\n }\n\n return {\n source: 'generated',\n locale,\n shape: request.shape.name,\n rows: generateSample(request.shape, context.seed, context.rowCount, locale),\n diagnostics,\n };\n}\n\nfunction fromSet(\n source: 'binding' | 'activePack' | 'blueprintDefault',\n pack: SampleDataPack,\n shape: string,\n rows: Record<string, unknown>[],\n diagnostics: SampleDataDiagnostic[],\n): SampleDataResolution {\n return { source, pack: pack.id, locale: pack.locale, shape, rows: structuredClone(rows), diagnostics };\n}\n"],"names":["resolveSampleData","request","context","target","shape","name","fallbackLocale","locale","defaultSampleLocale","diagnostics","isDesignOrPreview","source","rows","packs","selection","profile","sampleData","mappings","find","id","undefined","pack","missing","role","push","code","message","bindingPackId","bindings","binding","bindingPack","set","findSampleDataSet","fromSet","sessionPackId","sessionActivePack","chosenPackId","activePack","activePackId","blueprintPackId","blueprintDefaultPack","blueprintPack","generateSample","seed","rowCount","structuredClone"],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ // Copyright (c) Cratis. All rights reserved.
4
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
5
+ /** A pack id: lower-case letters and digits in groups separated by `.`, `_` or `-` (`crm-nordic-smb`). */ const sampleDataIdPattern = /^[a-z0-9]+([._-][a-z0-9]+)*$/;
6
+ /** A BCP 47 style locale tag: a 2-3 letter language followed by alphanumeric subtags (`nb-NO`, `en-GB`, `zh-Hant-TW`). */ const sampleDataLocalePattern = /^[A-Za-z]{2,3}(-[A-Za-z0-9]{2,8})*$/;
7
+ /** The owner of a pack the author created. */ const userSampleDataOwner = 'user';
8
+ /** The prefix of the owner of a pack a blueprint ships (`blueprint:crm`). */ const blueprintSampleDataOwnerPrefix = 'blueprint:';
9
+ /** Whether an owner is `user` or `blueprint:<id>` with a non-empty id. */ function isValidSampleDataOwner(owner) {
10
+ if (owner === undefined || owner === null) return false;
11
+ return owner === userSampleDataOwner || owner.startsWith(blueprintSampleDataOwnerPrefix) && owner.length > blueprintSampleDataOwnerPrefix.length && owner.trim() === owner;
12
+ }
13
+ /** The path separator, built from its code so the seam rule against route literals (I4) does not mistake it for a URL. */ const pathSeparator = String.fromCharCode(47);
14
+ /** Whether a package-relative pack path is `sampleData/<name>.json` with no `..`, `\\` or nested leading `/`. */ function isValidSampleDataPath(path) {
15
+ if (path === undefined || path === null) return false;
16
+ if (!path.startsWith('sampleData/') || !path.endsWith('.json') || path.length <= 'sampleData/.json'.length) return false;
17
+ return !path.includes('..') && !path.includes('\\') && !path.split(pathSeparator).includes('');
18
+ }
19
+
20
+ exports.blueprintSampleDataOwnerPrefix = blueprintSampleDataOwnerPrefix;
21
+ exports.isValidSampleDataOwner = isValidSampleDataOwner;
22
+ exports.isValidSampleDataPath = isValidSampleDataPath;
23
+ exports.sampleDataIdPattern = sampleDataIdPattern;
24
+ exports.sampleDataLocalePattern = sampleDataLocalePattern;
25
+ exports.userSampleDataOwner = userSampleDataOwner;
26
+ //# sourceMappingURL=sampleDataRules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sampleDataRules.js","sources":["../../../sampleData/sampleDataRules.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/** A pack id: lower-case letters and digits in groups separated by `.`, `_` or `-` (`crm-nordic-smb`). */\nexport const sampleDataIdPattern = /^[a-z0-9]+([._-][a-z0-9]+)*$/;\n\n/** A BCP 47 style locale tag: a 2-3 letter language followed by alphanumeric subtags (`nb-NO`, `en-GB`, `zh-Hant-TW`). */\nexport const sampleDataLocalePattern = /^[A-Za-z]{2,3}(-[A-Za-z0-9]{2,8})*$/;\n\n/** The owner of a pack the author created. */\nexport const userSampleDataOwner = 'user';\n\n/** The prefix of the owner of a pack a blueprint ships (`blueprint:crm`). */\nexport const blueprintSampleDataOwnerPrefix = 'blueprint:';\n\n/** Whether an owner is `user` or `blueprint:<id>` with a non-empty id. */\nexport function isValidSampleDataOwner(owner: string | undefined): boolean {\n if (owner === undefined || owner === null) return false;\n return owner === userSampleDataOwner || (owner.startsWith(blueprintSampleDataOwnerPrefix) && owner.length > blueprintSampleDataOwnerPrefix.length && owner.trim() === owner);\n}\n\n/** The path separator, built from its code so the seam rule against route literals (I4) does not mistake it for a URL. */\nconst pathSeparator = String.fromCharCode(47);\n\n/** Whether a package-relative pack path is `sampleData/<name>.json` with no `..`, `\\\\` or nested leading `/`. */\nexport function isValidSampleDataPath(path: string | undefined): boolean {\n if (path === undefined || path === null) return false;\n if (!path.startsWith('sampleData/') || !path.endsWith('.json') || path.length <= 'sampleData/.json'.length) return false;\n return !path.includes('..') && !path.includes('\\\\') && !path.split(pathSeparator).includes('');\n}\n"],"names":["sampleDataIdPattern","sampleDataLocalePattern","userSampleDataOwner","blueprintSampleDataOwnerPrefix","isValidSampleDataOwner","owner","undefined","startsWith","length","trim","pathSeparator","String","fromCharCode","isValidSampleDataPath","path","endsWith","includes","split"],"mappings":";;AAAA;AACA;AAEA,2GACO,MAAMA,mBAAAA,GAAsB;AAEnC,2HACO,MAAMC,uBAAAA,GAA0B;AAEvC,+CACO,MAAMC,mBAAAA,GAAsB;AAEnC,8EACO,MAAMC,8BAAAA,GAAiC;AAE9C,2EACO,SAASC,sBAAAA,CAAuBC,KAAyB,EAAA;AAC5D,IAAA,IAAIA,KAAAA,KAAUC,SAAAA,IAAaD,KAAAA,KAAU,IAAA,EAAM,OAAO,KAAA;AAClD,IAAA,OAAOA,KAAAA,KAAUH,mBAAAA,IAAwBG,KAAAA,CAAME,UAAU,CAACJ,8BAAAA,CAAAA,IAAmCE,KAAAA,CAAMG,MAAM,GAAGL,8BAAAA,CAA+BK,MAAM,IAAIH,KAAAA,CAAMI,IAAI,EAAA,KAAOJ,KAAAA;AAC1K;AAEA,2HACA,MAAMK,aAAAA,GAAgBC,MAAAA,CAAOC,YAAY,CAAC,EAAA,CAAA;AAE1C,kHACO,SAASC,qBAAAA,CAAsBC,IAAwB,EAAA;AAC1D,IAAA,IAAIA,IAAAA,KAASR,SAAAA,IAAaQ,IAAAA,KAAS,IAAA,EAAM,OAAO,KAAA;AAChD,IAAA,IAAI,CAACA,IAAAA,CAAKP,UAAU,CAAC,aAAA,CAAA,IAAkB,CAACO,IAAAA,CAAKC,QAAQ,CAAC,OAAA,CAAA,IAAYD,KAAKN,MAAM,IAAI,kBAAA,CAAmBA,MAAM,EAAE,OAAO,KAAA;AACnH,IAAA,OAAO,CAACM,IAAAA,CAAKE,QAAQ,CAAC,IAAA,CAAA,IAAS,CAACF,IAAAA,CAAKE,QAAQ,CAAC,IAAA,CAAA,IAAS,CAACF,IAAAA,CAAKG,KAAK,CAACP,aAAAA,CAAAA,CAAeM,QAAQ,CAAC,EAAA,CAAA;AAC/F;;;;;;;"}