@cdklabs/cdk-construct-connect-datalake 0.0.7 → 0.0.9
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/.jsii +9 -9
- package/.jsii.tabl.json +1 -1
- package/lib/index.js +1 -1
- package/node_modules/@aws-sdk/client-cloudformation/dist-cjs/index.js +9 -9
- package/node_modules/@aws-sdk/client-cloudformation/dist-es/waiters/waitForChangeSetCreateComplete.js +2 -2
- package/node_modules/@aws-sdk/client-cloudformation/dist-es/waiters/waitForStackCreateComplete.js +2 -2
- package/node_modules/@aws-sdk/client-cloudformation/dist-es/waiters/waitForStackDeleteComplete.js +2 -2
- package/node_modules/@aws-sdk/client-cloudformation/dist-es/waiters/waitForStackExists.js +2 -2
- package/node_modules/@aws-sdk/client-cloudformation/dist-es/waiters/waitForStackImportComplete.js +2 -2
- package/node_modules/@aws-sdk/client-cloudformation/dist-es/waiters/waitForStackRefactorCreateComplete.js +1 -1
- package/node_modules/@aws-sdk/client-cloudformation/dist-es/waiters/waitForStackRefactorExecuteComplete.js +1 -1
- package/node_modules/@aws-sdk/client-cloudformation/dist-es/waiters/waitForStackRollbackComplete.js +2 -2
- package/node_modules/@aws-sdk/client-cloudformation/dist-es/waiters/waitForStackUpdateComplete.js +2 -2
- package/node_modules/@aws-sdk/client-cloudformation/dist-types/CloudFormation.d.ts +11 -10
- package/node_modules/@aws-sdk/client-cloudformation/dist-types/ts3.4/CloudFormation.d.ts +13 -10
- package/node_modules/@aws-sdk/client-cloudformation/dist-types/ts3.4/waiters/waitForChangeSetCreateComplete.d.ts +9 -3
- package/node_modules/@aws-sdk/client-cloudformation/dist-types/ts3.4/waiters/waitForStackCreateComplete.d.ts +9 -3
- package/node_modules/@aws-sdk/client-cloudformation/dist-types/ts3.4/waiters/waitForStackDeleteComplete.d.ts +11 -3
- package/node_modules/@aws-sdk/client-cloudformation/dist-types/ts3.4/waiters/waitForStackExists.d.ts +9 -3
- package/node_modules/@aws-sdk/client-cloudformation/dist-types/ts3.4/waiters/waitForStackImportComplete.d.ts +9 -3
- package/node_modules/@aws-sdk/client-cloudformation/dist-types/ts3.4/waiters/waitForStackRefactorCreateComplete.d.ts +11 -3
- package/node_modules/@aws-sdk/client-cloudformation/dist-types/ts3.4/waiters/waitForStackRefactorExecuteComplete.d.ts +11 -3
- package/node_modules/@aws-sdk/client-cloudformation/dist-types/ts3.4/waiters/waitForStackRollbackComplete.d.ts +9 -3
- package/node_modules/@aws-sdk/client-cloudformation/dist-types/ts3.4/waiters/waitForStackUpdateComplete.d.ts +9 -3
- package/node_modules/@aws-sdk/client-cloudformation/dist-types/ts3.4/waiters/waitForTypeRegistrationComplete.d.ts +11 -3
- package/node_modules/@aws-sdk/client-cloudformation/dist-types/waiters/waitForChangeSetCreateComplete.d.ts +4 -3
- package/node_modules/@aws-sdk/client-cloudformation/dist-types/waiters/waitForStackCreateComplete.d.ts +4 -3
- package/node_modules/@aws-sdk/client-cloudformation/dist-types/waiters/waitForStackDeleteComplete.d.ts +4 -3
- package/node_modules/@aws-sdk/client-cloudformation/dist-types/waiters/waitForStackExists.d.ts +4 -3
- package/node_modules/@aws-sdk/client-cloudformation/dist-types/waiters/waitForStackImportComplete.d.ts +4 -3
- package/node_modules/@aws-sdk/client-cloudformation/dist-types/waiters/waitForStackRefactorCreateComplete.d.ts +4 -3
- package/node_modules/@aws-sdk/client-cloudformation/dist-types/waiters/waitForStackRefactorExecuteComplete.d.ts +4 -3
- package/node_modules/@aws-sdk/client-cloudformation/dist-types/waiters/waitForStackRollbackComplete.d.ts +4 -3
- package/node_modules/@aws-sdk/client-cloudformation/dist-types/waiters/waitForStackUpdateComplete.d.ts +4 -3
- package/node_modules/@aws-sdk/client-cloudformation/dist-types/waiters/waitForTypeRegistrationComplete.d.ts +4 -3
- package/node_modules/@aws-sdk/client-cloudformation/package.json +8 -8
- package/node_modules/@aws-sdk/client-connect/package.json +7 -7
- package/node_modules/@aws-sdk/client-glue/dist-cjs/schemas/schemas_0.js +13 -12
- package/node_modules/@aws-sdk/client-glue/dist-es/schemas/schemas_0.js +13 -12
- package/node_modules/@aws-sdk/client-glue/dist-types/commands/GetDataQualityRulesetEvaluationRunCommand.d.ts +1 -0
- package/node_modules/@aws-sdk/client-glue/dist-types/commands/GetPartitionCommand.d.ts +7 -0
- package/node_modules/@aws-sdk/client-glue/dist-types/commands/GetPartitionsCommand.d.ts +7 -0
- package/node_modules/@aws-sdk/client-glue/dist-types/commands/GetTableVersionCommand.d.ts +7 -0
- package/node_modules/@aws-sdk/client-glue/dist-types/commands/GetTableVersionsCommand.d.ts +7 -0
- package/node_modules/@aws-sdk/client-glue/dist-types/commands/ListDataQualityRulesetEvaluationRunsCommand.d.ts +1 -0
- package/node_modules/@aws-sdk/client-glue/dist-types/commands/StartDataQualityRulesetEvaluationRunCommand.d.ts +1 -0
- package/node_modules/@aws-sdk/client-glue/dist-types/models/models_1.d.ts +5 -0
- package/node_modules/@aws-sdk/client-glue/dist-types/models/models_2.d.ts +25 -0
- package/node_modules/@aws-sdk/client-glue/dist-types/ts3.4/models/models_1.d.ts +1 -0
- package/node_modules/@aws-sdk/client-glue/dist-types/ts3.4/models/models_2.d.ts +5 -0
- package/node_modules/@aws-sdk/client-glue/package.json +7 -7
- package/node_modules/@aws-sdk/client-lakeformation/package.json +7 -7
- package/node_modules/@aws-sdk/client-ram/package.json +7 -7
- package/node_modules/@aws-sdk/client-sts/package.json +8 -8
- package/node_modules/@aws-sdk/core/dist-cjs/index.js +15 -6
- package/node_modules/@aws-sdk/core/dist-cjs/submodules/client/index.js +15 -6
- package/node_modules/@aws-sdk/core/dist-es/submodules/client/emitWarningIfUnsupportedVersion.js +15 -6
- package/node_modules/@aws-sdk/core/dist-types/submodules/client/emitWarningIfUnsupportedVersion.d.ts +1 -2
- package/node_modules/@aws-sdk/core/package.json +3 -3
- package/node_modules/@aws-sdk/credential-provider-env/package.json +2 -2
- package/node_modules/@aws-sdk/credential-provider-http/package.json +2 -2
- package/node_modules/@aws-sdk/credential-provider-ini/package.json +9 -9
- package/node_modules/@aws-sdk/credential-provider-login/package.json +3 -3
- package/node_modules/@aws-sdk/credential-provider-node/package.json +7 -7
- package/node_modules/@aws-sdk/credential-provider-process/package.json +2 -2
- package/node_modules/@aws-sdk/credential-provider-sso/package.json +4 -4
- package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +3 -3
- package/node_modules/@aws-sdk/middleware-sdk-s3/package.json +2 -2
- package/node_modules/@aws-sdk/middleware-user-agent/package.json +3 -3
- package/node_modules/@aws-sdk/nested-clients/package.json +7 -7
- package/node_modules/@aws-sdk/signature-v4-multi-region/package.json +2 -2
- package/node_modules/@aws-sdk/token-providers/package.json +3 -3
- package/node_modules/@aws-sdk/util-user-agent-node/package.json +2 -2
- package/node_modules/@aws-sdk/xml-builder/dist-cjs/xml-external/nodable_entities.js +336 -0
- package/node_modules/@aws-sdk/xml-builder/dist-cjs/xml-parser.js +26 -0
- package/node_modules/@aws-sdk/xml-builder/dist-es/xml-external/nodable_entities.js +332 -0
- package/node_modules/@aws-sdk/xml-builder/dist-es/xml-parser.js +26 -0
- package/node_modules/@aws-sdk/xml-builder/dist-types/ts3.4/xml-external/nodable_entities.d.ts +66 -0
- package/node_modules/@aws-sdk/xml-builder/dist-types/xml-external/nodable_entities.d.ts +65 -0
- package/node_modules/@aws-sdk/xml-builder/package.json +3 -2
- package/node_modules/@smithy/middleware-retry/package.json +2 -2
- package/node_modules/@smithy/util-retry/dist-cjs/index.js +7 -3
- package/node_modules/@smithy/util-retry/dist-es/AdaptiveRetryStrategy.js +5 -2
- package/node_modules/@smithy/util-retry/dist-es/DefaultRateLimiter.js +2 -1
- package/node_modules/@smithy/util-retry/package.json +2 -2
- package/node_modules/fast-xml-builder/CHANGELOG.md +24 -0
- package/node_modules/fast-xml-builder/README.md +53 -2
- package/node_modules/fast-xml-builder/lib/fxb.cjs +1 -1
- package/node_modules/fast-xml-builder/lib/fxb.d.cts +91 -1
- package/node_modules/fast-xml-builder/lib/fxb.min.js +1 -1
- package/node_modules/fast-xml-builder/lib/fxb.min.js.map +1 -1
- package/node_modules/fast-xml-builder/package.json +3 -2
- package/node_modules/fast-xml-builder/src/fxb.d.ts +93 -3
- package/node_modules/fast-xml-builder/src/fxb.js +106 -40
- package/node_modules/fast-xml-builder/src/orderedJs2Xml.js +95 -42
- package/node_modules/fast-xml-builder/src/util.js +16 -0
- package/node_modules/fast-xml-parser/CHANGELOG.md +8 -0
- package/node_modules/fast-xml-parser/lib/fxp.cjs +1 -1
- package/node_modules/fast-xml-parser/lib/fxp.min.js +1 -1
- package/node_modules/fast-xml-parser/lib/fxp.min.js.map +1 -1
- package/node_modules/fast-xml-parser/lib/fxparser.min.js +1 -1
- package/node_modules/fast-xml-parser/lib/fxparser.min.js.map +1 -1
- package/node_modules/fast-xml-parser/package.json +1 -1
- package/node_modules/fast-xml-parser/src/xmlparser/OrderedObjParser.js +16 -11
- package/node_modules/fast-xml-parser/src/xmlparser/XMLParser.js +2 -2
- package/node_modules/strnum/CHANGELOG.md +3 -0
- package/node_modules/strnum/package.json +3 -2
- package/node_modules/strnum/strnum.js +12 -10
- package/node_modules/xml-naming/README.md +189 -0
- package/node_modules/xml-naming/package.json +54 -0
- package/node_modules/xml-naming/src/index.d.ts +74 -0
- package/node_modules/xml-naming/src/index.js +270 -0
- package/package.json +10 -10
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* xml-naming
|
|
3
|
+
* Validates XML Name productions as defined in the XML 1.0 and 1.1 specifications.
|
|
4
|
+
* Covers: Name, NCName, QName, NMToken, NMTokens
|
|
5
|
+
*
|
|
6
|
+
* XML 1.0 spec: https://www.w3.org/TR/xml/#NT-Name
|
|
7
|
+
* XML 1.1 spec: https://www.w3.org/TR/xml11/#NT-NameStartChar
|
|
8
|
+
* XML NS spec: https://www.w3.org/TR/xml-names/#NT-NCName
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// Character class strings — XML 1.0
|
|
13
|
+
//
|
|
14
|
+
// NameStartChar ::= ":" | [A-Z] | "_" | [a-z]
|
|
15
|
+
// | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF]
|
|
16
|
+
// | [#x370-#x37D] | [#x37F-#x1FFF] <- split to exclude #x0487
|
|
17
|
+
// | [#x200C-#x200D]
|
|
18
|
+
// | [#x2070-#x218F] | [#x2C00-#x2FEF]
|
|
19
|
+
// | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD]
|
|
20
|
+
//
|
|
21
|
+
// NameChar ::= NameStartChar | "-" | "." | [0-9]
|
|
22
|
+
// | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
|
|
23
|
+
//
|
|
24
|
+
// Note: \u0487 (Combining Cyrillic Millions Sign) was added in Unicode 4.0,
|
|
25
|
+
// after XML 1.0 was defined against Unicode 2.0. It falls inside the range
|
|
26
|
+
// \u037F-\u1FFF but must be excluded. We split that range into
|
|
27
|
+
// \u037F-\u0486 and \u0488-\u1FFF to exclude it explicitly.
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
|
|
30
|
+
const nameStartChar10 =
|
|
31
|
+
':A-Za-z_' +
|
|
32
|
+
'\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF' +
|
|
33
|
+
'\u0370-\u037D' +
|
|
34
|
+
'\u037F-\u0486\u0488-\u1FFF' + // split to exclude \u0487
|
|
35
|
+
'\u200C-\u200D' +
|
|
36
|
+
'\u2070-\u218F' +
|
|
37
|
+
'\u2C00-\u2FEF' +
|
|
38
|
+
'\u3001-\uD7FF' +
|
|
39
|
+
'\uF900-\uFDCF' +
|
|
40
|
+
'\uFDF0-\uFFFD';
|
|
41
|
+
|
|
42
|
+
const nameChar10 =
|
|
43
|
+
nameStartChar10 +
|
|
44
|
+
'\\-\\.\\d' +
|
|
45
|
+
'\u00B7' +
|
|
46
|
+
'\u0300-\u036F' +
|
|
47
|
+
'\u203F-\u2040';
|
|
48
|
+
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
// Character class strings — XML 1.1
|
|
51
|
+
//
|
|
52
|
+
// Differences from XML 1.0:
|
|
53
|
+
//
|
|
54
|
+
// NameStartChar:
|
|
55
|
+
// 1.0 has split ranges: \u00C0-\u00D6, \u00D8-\u00F6, \u00F8-\u02FF
|
|
56
|
+
// 1.1 merges them into: \u00C0-\u02FF
|
|
57
|
+
// (\u00D7 x and \u00F7 / are division symbols, excluded in both versions)
|
|
58
|
+
//
|
|
59
|
+
// 1.0 tops out at \uFFFD (BMP only)
|
|
60
|
+
// 1.1 adds \u{10000}-\u{EFFFF} (supplementary planes)
|
|
61
|
+
// These require the /u flag on the RegExp — see buildRegexes below.
|
|
62
|
+
//
|
|
63
|
+
// NameChar:
|
|
64
|
+
// 1.1 adds \u0487 (Combining Cyrillic Millions Sign, added in Unicode 4.0)
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
|
|
67
|
+
const nameStartChar11 =
|
|
68
|
+
':A-Za-z_' +
|
|
69
|
+
'\u00C0-\u02FF' + // merged — 1.0 had three split ranges here
|
|
70
|
+
'\u0370-\u037D' +
|
|
71
|
+
'\u037F-\u0486\u0488-\u1FFF' + // split to exclude \u0487 (combining mark, never a NameStartChar)
|
|
72
|
+
'\u200C-\u200D' +
|
|
73
|
+
'\u2070-\u218F' +
|
|
74
|
+
'\u2C00-\u2FEF' +
|
|
75
|
+
'\u3001-\uD7FF' +
|
|
76
|
+
'\uF900-\uFDCF' +
|
|
77
|
+
'\uFDF0-\uFFFD' +
|
|
78
|
+
'\u{10000}-\u{EFFFF}'; // supplementary planes — REQUIRES /u flag on RegExp
|
|
79
|
+
|
|
80
|
+
const nameChar11 =
|
|
81
|
+
nameStartChar11 +
|
|
82
|
+
'\\-\\.\\d' +
|
|
83
|
+
'\u00B7' +
|
|
84
|
+
'\u0300-\u036F' +
|
|
85
|
+
'\u0487' + // Combining Cyrillic Millions Sign — valid in 1.1, not 1.0
|
|
86
|
+
'\u203F-\u2040';
|
|
87
|
+
|
|
88
|
+
// ---------------------------------------------------------------------------
|
|
89
|
+
// Regex builders
|
|
90
|
+
//
|
|
91
|
+
// XML 1.0 regexes: no flags — BMP only, standard JS regex behaviour.
|
|
92
|
+
// XML 1.1 regexes: /u flag — required for \u{10000}-\u{EFFFF} to match actual
|
|
93
|
+
// supplementary code points rather than lone surrogates (which are illegal XML).
|
|
94
|
+
// ---------------------------------------------------------------------------
|
|
95
|
+
|
|
96
|
+
const buildRegexes = (startChar, char, flags = '') => {
|
|
97
|
+
const ncStart = startChar.replace(':', '');
|
|
98
|
+
const ncChar = char.replace(':', '');
|
|
99
|
+
const ncNamePat = `[${ncStart}][${ncChar}]*`;
|
|
100
|
+
|
|
101
|
+
return {
|
|
102
|
+
name: new RegExp(`^[${startChar}][${char}]*$`, flags),
|
|
103
|
+
ncName: new RegExp(`^${ncNamePat}$`, flags),
|
|
104
|
+
qName: new RegExp(`^${ncNamePat}(?::${ncNamePat})?$`, flags),
|
|
105
|
+
nmToken: new RegExp(`^[${char}]+$`, flags),
|
|
106
|
+
nmTokens: new RegExp(`^[${char}]+(?:\\s+[${char}]+)*$`, flags),
|
|
107
|
+
};
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
const regexes10 = buildRegexes(nameStartChar10, nameChar10); // no /u — BMP only
|
|
111
|
+
const regexes11 = buildRegexes(nameStartChar11, nameChar11, 'u'); // /u — enables \u{10000}-\u{EFFFF}
|
|
112
|
+
|
|
113
|
+
const getRegexes = (xmlVersion = '1.0') =>
|
|
114
|
+
xmlVersion === '1.1' ? regexes11 : regexes10;
|
|
115
|
+
|
|
116
|
+
// ---------------------------------------------------------------------------
|
|
117
|
+
// Boolean validators
|
|
118
|
+
// ---------------------------------------------------------------------------
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Returns true if the string is a valid XML Name.
|
|
122
|
+
* Colons are allowed anywhere (Name production).
|
|
123
|
+
* Used for: DOCTYPE entity names, notation names, DTD element declarations.
|
|
124
|
+
*/
|
|
125
|
+
export const name = (str, { xmlVersion = '1.0' } = {}) =>
|
|
126
|
+
getRegexes(xmlVersion).name.test(str);
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Returns true if the string is a valid NCName (Non-Colonized Name).
|
|
130
|
+
* Colons are not permitted.
|
|
131
|
+
* Used for: namespace prefixes, local names, SVG id attributes.
|
|
132
|
+
*/
|
|
133
|
+
export const ncName = (str, { xmlVersion = '1.0' } = {}) =>
|
|
134
|
+
getRegexes(xmlVersion).ncName.test(str);
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Returns true if the string is a valid QName (Qualified Name).
|
|
138
|
+
* Allows exactly one colon as a prefix separator: prefix:localName.
|
|
139
|
+
* Used for: element and attribute names in namespace-aware XML/SVG.
|
|
140
|
+
*/
|
|
141
|
+
export const qName = (str, { xmlVersion = '1.0' } = {}) =>
|
|
142
|
+
getRegexes(xmlVersion).qName.test(str);
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Returns true if the string is a valid NMToken.
|
|
146
|
+
* Like Name but no restriction on the first character.
|
|
147
|
+
* Used for: DTD NMTOKEN attribute values.
|
|
148
|
+
*/
|
|
149
|
+
export const nmToken = (str, { xmlVersion = '1.0' } = {}) =>
|
|
150
|
+
getRegexes(xmlVersion).nmToken.test(str);
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Returns true if the string is a valid NMTokens value.
|
|
154
|
+
* A whitespace-separated list of NMToken values.
|
|
155
|
+
* Used for: DTD NMTOKENS attribute values.
|
|
156
|
+
*/
|
|
157
|
+
export const nmTokens = (str, { xmlVersion = '1.0' } = {}) =>
|
|
158
|
+
getRegexes(xmlVersion).nmTokens.test(str);
|
|
159
|
+
|
|
160
|
+
// ---------------------------------------------------------------------------
|
|
161
|
+
// Diagnostic validator
|
|
162
|
+
// ---------------------------------------------------------------------------
|
|
163
|
+
|
|
164
|
+
const PRODUCTIONS = ['name', 'ncName', 'qName', 'nmToken', 'nmTokens'];
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Validates a string against a named production and returns a detailed result.
|
|
168
|
+
*
|
|
169
|
+
* @param {string} str
|
|
170
|
+
* @param {'name'|'ncName'|'qName'|'nmToken'|'nmTokens'} production
|
|
171
|
+
* @param {{ xmlVersion?: '1.0'|'1.1' }} [opts]
|
|
172
|
+
* @returns {{ valid: boolean, production: string, input: string, reason?: string, position?: number }}
|
|
173
|
+
*/
|
|
174
|
+
export const validate = (str, production, { xmlVersion = '1.0' } = {}) => {
|
|
175
|
+
if (!PRODUCTIONS.includes(production)) {
|
|
176
|
+
throw new TypeError(
|
|
177
|
+
`Unknown production "${production}". Must be one of: ${PRODUCTIONS.join(', ')}`
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const validators = { name, ncName, qName, nmToken, nmTokens };
|
|
182
|
+
const isValid = validators[production](str, { xmlVersion });
|
|
183
|
+
|
|
184
|
+
if (isValid) return { valid: true, production, input: str };
|
|
185
|
+
|
|
186
|
+
let reason = 'Does not match the production rules';
|
|
187
|
+
let position;
|
|
188
|
+
|
|
189
|
+
if (str.length === 0) {
|
|
190
|
+
reason = 'Input is empty';
|
|
191
|
+
} else if (production === 'ncName' && str.includes(':')) {
|
|
192
|
+
position = str.indexOf(':');
|
|
193
|
+
reason = 'Colon is not allowed in NCName';
|
|
194
|
+
} else if (production === 'qName' && str.startsWith(':')) {
|
|
195
|
+
reason = 'QName cannot start with a colon';
|
|
196
|
+
position = 0;
|
|
197
|
+
} else if (production === 'qName' && str.endsWith(':')) {
|
|
198
|
+
reason = 'QName cannot end with a colon';
|
|
199
|
+
position = str.length - 1;
|
|
200
|
+
} else if (production === 'qName' && (str.match(/:/g) || []).length > 1) {
|
|
201
|
+
reason = 'QName can have at most one colon';
|
|
202
|
+
position = str.lastIndexOf(':');
|
|
203
|
+
} else if (
|
|
204
|
+
['name', 'ncName', 'qName'].includes(production) &&
|
|
205
|
+
!/^[:A-Za-z_\u00C0-\uFFFD]/.test(str[0])
|
|
206
|
+
) {
|
|
207
|
+
reason = `First character "${str[0]}" is not a valid NameStartChar`;
|
|
208
|
+
position = 0;
|
|
209
|
+
} else {
|
|
210
|
+
for (let i = 0; i < str.length; i++) {
|
|
211
|
+
if (!/[\w\-\\.:\u00B7\u00C0-\uFFFD]/.test(str[i])) {
|
|
212
|
+
reason = `Character "${str[i]}" at position ${i} is not a valid NameChar`;
|
|
213
|
+
position = i;
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
return { valid: false, production, input: str, reason, position };
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
// ---------------------------------------------------------------------------
|
|
223
|
+
// Batch validator
|
|
224
|
+
// ---------------------------------------------------------------------------
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Validates an array of strings against a named production.
|
|
228
|
+
*
|
|
229
|
+
* @param {string[]} strings
|
|
230
|
+
* @param {'name'|'ncName'|'qName'|'nmToken'|'nmTokens'} production
|
|
231
|
+
* @param {{ xmlVersion?: '1.0'|'1.1' }} [opts]
|
|
232
|
+
* @returns {Array<{ valid: boolean, production: string, input: string, reason?: string, position?: number }>}
|
|
233
|
+
*/
|
|
234
|
+
export const validateAll = (strings, production, opts = {}) =>
|
|
235
|
+
strings.map(str => validate(str, production, opts));
|
|
236
|
+
|
|
237
|
+
// ---------------------------------------------------------------------------
|
|
238
|
+
// Sanitizer
|
|
239
|
+
// ---------------------------------------------------------------------------
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Transforms an invalid string into the nearest valid XML name for the given production.
|
|
243
|
+
*
|
|
244
|
+
* @param {string} str
|
|
245
|
+
* @param {'name'|'ncName'|'qName'|'nmToken'|'nmTokens'} production
|
|
246
|
+
* @param {{ replacement?: string }} [opts]
|
|
247
|
+
* @returns {string}
|
|
248
|
+
*/
|
|
249
|
+
export const sanitize = (str, production = 'name', { replacement = '_' } = {}) => {
|
|
250
|
+
if (!str) return replacement;
|
|
251
|
+
|
|
252
|
+
let result = str;
|
|
253
|
+
|
|
254
|
+
// Strip colons for NCName
|
|
255
|
+
if (production === 'ncName') {
|
|
256
|
+
result = result.replace(/:/g, '');
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// Replace illegal characters
|
|
260
|
+
result = result.replace(/[^\w\-\.:\u00B7\u00C0-\uFFFD]/g, replacement);
|
|
261
|
+
|
|
262
|
+
// Fix invalid start character for Name / NCName / QName
|
|
263
|
+
if (production !== 'nmToken' && production !== 'nmTokens') {
|
|
264
|
+
if (/^[\-\.\d]/.test(result)) {
|
|
265
|
+
result = replacement + result;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
return result || replacement;
|
|
270
|
+
};
|
package/package.json
CHANGED
|
@@ -62,10 +62,10 @@
|
|
|
62
62
|
"jest": "^30.3.0",
|
|
63
63
|
"jest-junit": "^16",
|
|
64
64
|
"jsii": "~5.9",
|
|
65
|
-
"jsii-diff": "^1.
|
|
65
|
+
"jsii-diff": "^1.129.0",
|
|
66
66
|
"jsii-docgen": "^10.5.0",
|
|
67
|
-
"jsii-pacmak": "^1.
|
|
68
|
-
"jsii-rosetta": "^5.9.
|
|
67
|
+
"jsii-pacmak": "^1.129.0",
|
|
68
|
+
"jsii-rosetta": "^5.9.44",
|
|
69
69
|
"prettier": "^3.8.3",
|
|
70
70
|
"projen": "^0.99.17",
|
|
71
71
|
"ts-jest": "^29.4.9",
|
|
@@ -77,12 +77,12 @@
|
|
|
77
77
|
"constructs": "^10.5.1"
|
|
78
78
|
},
|
|
79
79
|
"dependencies": {
|
|
80
|
-
"@aws-sdk/client-cloudformation": "^3.
|
|
81
|
-
"@aws-sdk/client-connect": "^3.
|
|
82
|
-
"@aws-sdk/client-glue": "^3.
|
|
83
|
-
"@aws-sdk/client-lakeformation": "^3.
|
|
84
|
-
"@aws-sdk/client-ram": "^3.
|
|
85
|
-
"@aws-sdk/client-sts": "^3.
|
|
80
|
+
"@aws-sdk/client-cloudformation": "^3.1045.0",
|
|
81
|
+
"@aws-sdk/client-connect": "^3.1045.0",
|
|
82
|
+
"@aws-sdk/client-glue": "^3.1045.0",
|
|
83
|
+
"@aws-sdk/client-lakeformation": "^3.1045.0",
|
|
84
|
+
"@aws-sdk/client-ram": "^3.1045.0",
|
|
85
|
+
"@aws-sdk/client-sts": "^3.1045.0",
|
|
86
86
|
"@aws-sdk/types": "^3.973.8",
|
|
87
87
|
"@types/aws-lambda": "^8.10.161",
|
|
88
88
|
"aws-lambda": "^1.0.7"
|
|
@@ -112,7 +112,7 @@
|
|
|
112
112
|
"publishConfig": {
|
|
113
113
|
"access": "public"
|
|
114
114
|
},
|
|
115
|
-
"version": "0.0.
|
|
115
|
+
"version": "0.0.9",
|
|
116
116
|
"jest": {
|
|
117
117
|
"coverageProvider": "v8",
|
|
118
118
|
"moduleNameMapper": {
|