Releases: CorrelAid/formtransform
Release list
v0.1.7
New
- Exclusive answers in
select_multiple(#53,convention:exclusiveChoice). Mark a choice withexclusive: yes(alsotrue/1) on the choices sheet, e.g. "Keine Angabe" or "Nichts davon".- LimeSurvey TSV: the question gets
exclude_all_otherswith those codes, so LimeSurvey unticks the other answers. Verified to survive import. - LimeSurvey TSV → XLSForm: restored as
exclusive: yes. - DDI: no field for it; unchanged.
validateSubsetwarns on an unrecognised value, and on a mark that noselect_multipleuses (e.g. on aselect_onelist).- The generated skill documents the column, so the skill archive's contents changed.
- LimeSurvey TSV: the question gets
SHA256SUMSrelease asset: checksums of all archives, also listed below.
Checksums (SHA-256)
61aadec2d9c45dd3cc78930a67295405f009a2805271165338d742f08f3bf00c cdl-survey-types-0.1.7.tar.gz
bad18a59d5e1867123b942fb57dd3fae37114cac079cfa7dd91b29f2571626fd correlaid-formtransform-0.1.7.tgz
7cb163d2521ed199708ae5c6d3f0ea18a86cc72f6ebcd5e247ef13cdbcf9a392 formtransform-fixtures-0.1.7.tar.gz
v0.1.6
New
-
Subset check for DDI (#52).
validateSubset(survey, choices, { target: 'ddi' })checks:- registered types
- resolvable choice lists
- unique names and codes
- the appearance allowlist
- empty labels
It leaves out LimeSurvey's name/code limits, since DDI keeps names as authored (
full_nameis fine).SubsetTargetis exported.buildDdiXmlitself still doesn't validate; call the check first. -
CLI:
xlsform2ddiruns the DDI check by default: Kobo forms convert as is, and unregistered types (geopoint,image, …) are rejected with the findings listed.--skip-validationconverts anyway.validate --target lstsv|ddi.
-
Fixtures release asset (
formtransform-fixtures-<version>.tar.gz):registry/entities/andtests/fixtures/surveys/at their repo paths, for golden tests against the prebuilt package.
Behavior change (CLI): xlsform2ddi no longer applies the LimeSurvey name gate, but now rejects unregistered types unless --skip-validation is given.
v0.1.5
Fixes
-
validateSubsetchecks choice lists (#48):- a code used twice within one list → error, also rejected by the strict loader gate (duplicate codes collide in LimeSurvey)
- a choice row with a
list_namebut no code → error (it was silently skipped) - an empty choice label → warning; for multilingual lists it names the languages that lack a label
The same code in different lists stays fine.
Behavior change: forms with duplicate codes within a list no longer load with validation on.
v0.1.4
Fixes
-
FieldSanitizeroutput always passes the validator (#44). Theconvention:sanitizationrule used to strip only_and-. It now:- transliterates
ä→ae,ö→oe,ü→ue(and capitals),ß→ss - drops other diacritics (
é→e) - deletes everything outside
[a-zA-Z0-9]
Examples:
aktivitätshäufigkeit→aktivitaetshaeufigke,job satisfaction→jobsatisfaction, the codetäglich→taegl. Input with no letter or digit left throws.${ref}references resolve to the sanitized name. - transliterates
Who sees different names: direct FieldSanitizer callers, and conversions with validation skipped. Strict validation already rejected these names.
Docs
- The generated skill (
cdl-survey-types) no longer tells authors to usesnake_case, which the validator rejects. The skill archive's contents changed, so its checksum is new. - README: corrected the name rule.
v0.1.3
Fixes
- Selects with unresolvable answer options are rejected (#41).
XLSValidator.validateSubsetnow reports an error for aselect_one/select_multiplewith no list name or with a list that has no rows on the choices sheet.- It also reports an error for a
select_*_from_filewith no file or with a file that isn't a registered vocabulary. - New optional
{ fileChoices }argument (typeSubsetOptions): CSVs you pass toconvert()count as resolved.formtransform validatereads CSVs beside the form. - The converter throws for the same cases, with a message naming the question. Before, it emitted a question with no answers, or said "Unimplemented XLSForm type" for a missing file.
Behavior change: a form with an empty or missing choice list no longer converts.
v0.1.2
New
rangeis a registered type (#33).- DDI: numeric /
contin, matching qwacback. - LimeSurvey: numeric input
N, withmin_num_value_n/max_num_value_ntaken fromparametersstart/end, and integer-only whenstartandstepare whole numbers. - Converting back from LimeSurvey: an
Nwith both bounds becomesrange. - Limits: LimeSurvey has no step on
N, sostepis enforced only as integer vs. decimal, and it reads back asstep=1.
- DDI: numeric /
Previously range was rejected by validation and TSV conversion, and it became text in DDI.
v0.1.1
Fixes
select_*_from_fileconverts to LimeSurvey TSV in the browser (#24). Registered vocabularies (registry/vocab/) are built into the library;convert()inlines them without file access.parseVocabCsvis exported for your own CSVs, andXLSFormParser.convertXLS{File,Data}ToTSVtakefileChoices.- Quoted vocabulary labels. 14 ISO 3166-1 labels with a comma (e.g.
Korea, Republic of) were cut at the comma in TSV output. Re-convert forms usingiso_3166_1.csv.
New
- Releases attach
correlaid-formtransform-<version>.tgz(prebuilt, installs without a build step) andcdl-survey-types-<version>.tar.gz(#4):
npm install https://github.com/CorrelAid/formtransform/releases/download/v0.1.1/correlaid-formtransform-0.1.1.tgz - qwacback DDI equivalence test under
tests/live/qwacback/(#14). - AI disclosure (#19).
Known
rangeisn't a registered type and converts to DDI as text (#33).
v0.1.0
First tagged release of @correlaid/formtransform and the schematron-worker image. Pin this instead of a commit SHA.
npm install github:CorrelAid/formtransform#v0.1.0
docker pull ghcr.io/correlaid/schematron-worker:v0.1.0 # published by this tagWhat's in it
- Conversions: XLSForm ↔ LimeSurvey TSV, XLSForm / LimeSurvey TSV → DDI-Codebook 2.5, plus the DDI response-data CSV (
buildDataCsv,lstsvToDataCsv). The CLI takes--dataforxlsform2ddiandlstsv2ddi. SeeRESPONSE_DATA.mdfor the path from a Kobo or LimeSurvey export. - Browser-safe library: everything exported from the package root works in a browser (
ARCHITECTURE.md, "The browser boundary"). That includesparseResponses,XLSValidator,QUESTION_TYPESandAPPEARANCES. - Generated sub-skill:
skills/cdl-survey-types/.
Fixed just before this tag (#28)
- Skip logic in browser bundles (#23): browser bundles no longer silently turn every
relevantinto1.js-xpathis replaced by an in-repo parser, so no bundler alias or patch is needed. - Parentheses: they're now preserved in converted expressions (
a and (b or c)used to becomea and b or c, in Node too). Re-convert any survey converted before this release. - Loud failures: relevance or calculations that can't be converted now fail the conversion instead of degrading to
1.